开发者社区> linux_drv> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

zigbee学习之定时器

简介:
+关注继续查看

以下是我自己的总结,我不会分析代码,代码简单讲起来没有好大意思,主要是抓住核心知识框架。

脉冲:32MHZ就是一秒钟32000000个脉冲

时钟周期:1/f=1/32us
指令周期等于时钟周期(在51中是机械周期=12*时钟周期)
内部是16MHZ,定时器内部一个脉冲,定时器计数就加一


定时器 1(查询法)
T1CTL寄存器 定时器1控制和状态:
T1CTL (Bit 3:2) 分频器划分值,如下: 
00: 标记频率/1 
01: 标记频率/8 
10: 标记频率/32 
11: 标记频率/128 
T1CTL (Bit 1:0) 选择定时器1模式 
00: 暂停运行。 
01: 自由运行,从0x0000到0xFFFF反复计数。 
10: 模,从0x0000到T1CC0反复计数。 
11: 正计数/倒计数,从 0x0000 到 T1CC0 反复计数并
且从 T1CC0 倒计数到 0x0000。 


T1STAT(0xAF)定时器 1 状态:
Bit5: 定时器 计数器溢出中断标志//设置为1
Bit4: 定时器 1 通道 4 中断标志 
Bit3: 定时器 1 通道 3 中断标志 
Bit2: 定时器 1 通道 2 中断标志 
Bit1: 定时器 1 通道 1 中断标志 
Bit0: 定时器 1 通道 0 中断标志 


IRCON(0xC0) 中断标志 4 :
Bit1: 定时器1中断标志。当定时器1中断发生时设为1并且当CPU向量指向
中断服务例程时清除。 0: 无中断未决 1: 中断未决 


T1CTL = 0x0d; //128分频,自动重装 0x0000-0xFFFF 1/(16000000/128)*65536= 0.5248s
T1STAT= 0x21; //通道0,中断有效  
if(IRCON > 0) IRCON=0;


定时器3

T3CTL定时器3控制
[7:5]分频器划分值。产生有效时钟沿用于来自 CLKCON.TICKSPD 的定时器时钟 。如 下
000 : 标记 频率 /1
001 : 标记 频率 /2
010 : 标记 频率 /4
011 : 标记 频率 /8
100 : 标记 频率 / 1 6
101 : 标记 频率 / 3 2
110 : 标记 频率 / 6 4
111 : 标记 频率 / 1 28
[4]  启动定时器。正常运行时设置 ,暂停时清除,1启动。
[3]  溢出中断屏蔽0 :中断禁止 1 :中断使能
[2]  计数器。 写 1 到 CLR 复位 计数器 到 0x00 ,并初始化相关通道所有的输出引脚。总是读作 0 。
[1:0]定时器3模式。选择以下模式:
0 0 : 自由运行 , 从 0x0 0 到 0xFF 反复计数
0 1 : 倒计数 , 从 T3CC 0 到 0 x 0 0 计数
1 0 : 模 , 从 0x0 0 到 T3 C C0 重复计数
1 1 : 正 / 倒计 数 , 从 0 x0 0 到 T3C C0 重复计数,降到 0x00

void InitT3()
{     
    T3CTL |= 0x08 ;          //定时器3控制,开溢出中断     
    T3IE = 1;                //开总中断和T3中断
    T3CTL |= 0xE0;           //128分频,128/16000000*N=0.5S,N=62500
    T3CTL &= ~0x03;          //自动重装 00->0xff  62500/255=245(次)
    T3CTL |= 0x10;           //启动
    EA = 1;                  //开总中断
}


//定时器T3中断处理函数
#pragma vector = T3_VECTOR//(T3_VECTOR向量地址) 
__interrupt void T3_ISR(void) 

    IRCON = 0x00;            //清中断标志, 也可由硬件自动完成 
}

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
学习javaScript必知必会(5)~BOM模型、定时器原理、清除定时器
学习javaScript必知必会(5)~BOM模型、定时器原理、清除定时器
24 0
gpio口、内核定时器使用
/*申请gpio*/ int gpio_request(unsigned gpio, const char *label); /*设置gpio为输入状态,即设置如(GPH0CON)*/ int gpio_direction_input(unsigned gpio);   /*设置gpio为...
699 0
艾伟:C#多线程学习(五) 多线程的自动管理(定时器)
本系列文章导航 C#多线程学习(一) 多线程的相关概念 C#多线程学习(二) 如何操纵一个线程 C#多线程学习(三) 生产者和消费者 C#多线程学习(四) 多线程的自动管理(线程池) C#多线程学习(五) 多线程的自动管理(定时器) C#多线程学习(六) 互斥对象 Timer类:设置一个定时器,定时执行用户指定的函数。
1264 0
+关注
201
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载