楼主 | 回复于 2018-07-13 沙发
(一)、常见的定时方式:
1、软件定时:通过延时程序实现。缺点:在延时期间,CPU一直被占用,浪费
了CPU的利用率,而且延时时间不好计算。
2、硬件延时:通过专门的定时器件实现。优点:在简单的软件控制下,产生准
确的延时。
楼主 | 回复于 2018-07-13 3#
(三)、Timer_A的基本特点:
1、输入时钟可以有多种选择。 2、产生的定时脉冲或PWM信号没有软件带来的误差。
3、四种计数功能。 4、8种输出方式。 5、16位定时器。
6、生成的PWM波能用软件任意改变占空比和周期,当PWM波不需要修改占空比
和周期时,Timer_A能自动输出PWM,而不需要利用中断来维持PWM波的输出
楼主 | 回复于 2018-07-13 4#
(四)、定时器的工作模式:
1、停止模式:用于定时器的暂停,并不发生复位,所有寄存器现行类容在停止模式结束后都可用。当定时器暂停后重新计数时,计数器将从暂停前的计数方向计数。
2、增计数模式:捕获/比较寄存器CCR0用作Timer_A增计数模式的周期寄存器,因为CCR0为16位寄存器,所以该模式适用于定时周期小于65536的连续计数情况。计数器TAR可以增计数到CCR0的值,当计数值与CCR0的值相等时,定时器复位,并从0开始重新计数。
增计数模式:
楼主 | 回复于 2018-07-13 6#
例程:
void zengjishu()
{
TACTL=TASSEL1+TACLR; //选择计数时钟为ACLK,将计数器TAR清零
CCTL0=CCIE; //使能中断
CCR0=200; //计数终值,方波频率为:32768/200/2
TACTL|=MC_1; //选择Timer_A为增计数模式
P1DIR|=BIT0; //P1.0作为输出
_EINT(); //使能总中断
}
#pragma vertor =TIMERA0_VECTOR
__interrupt void Timer_A(void)
{
P1OUT^=0X01; //P1.0取反
}
楼主 | 回复于 2018-07-13 7#
3、连续计数模式:
特点:定时器从0开始记到0XFFFF后又开始从0开始计数,当记到CCR0时产生中断(可产生多个定时信号)
楼主 | 回复于 2018-07-13 8#
例程:
void lianxujishu()
{
TACTL=TASSEL_1+TACLR; //选择计数时钟为ACLK,将计数器TAR清零
CCTL0=CCIE; //使能中断
CCR0=1000; //计数终值,方波频率为:32768/1000/2
TACTL|=MC_2; //选择Timer_A为连续计数模式
P1DIR|=BIT0; //P1.0作为输出
_EINT(); //使能总中断
}
#pragma vertor =TIMERA0_VECTOR
__interrupt void Timer_A(void)
{
P1OUT^=0X01; //P1.0取反
CCR0+=1000;
}
楼主 | 回复于 2018-07-13 9#
4、增/减计数模式:需要对称波形的情况可以用增/减计数模式,该模式下,定时器先计数到CCR0的值,然后反向减计数到0。
注:定时器TAR的值从CCR0—1增计数到CCR0时,中断标志CCIFG0置位,从1减计数到0时,中断标志TAIFG置位
楼主 | 回复于 2018-07-13 10#
5、捕获/比较模块:
(1)、工作模式:
1.1、捕获模式:当捕获/比较控制寄存器CCTLx中的CAP=1时,该模块工作于捕获模式。这时如果在选定的引脚上发生设定的脉冲沿,则TAR中的值将自动写入到捕获/比较寄存器CCRx中。
用途:a、测量软件程序执行所用时间。b、测量硬件之间的时间。c、测量频率。
(2)、比较模式:当捕获/比较控制寄存器CCTLx中的CAP=0时,该模块工作于比较模式。Timer_A 有三个捕获/比较器,在比较模式下有8个输出模式
块
导
航
举报
请选择举报类别
- 广告垃圾
- 违规内容
- 恶意灌水
- 重复发帖