您的位置:首页 > 其它

zigbee学习之定时器

2015-09-29 21:31 260 查看
以下是我自己的总结,我不会分析代码,代码简单讲起来没有好大意思,主要是抓住核心知识框架。

脉冲: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;            //清中断标志, 也可由硬件自动完成 

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: