||
同时定时器A还有3个捕获/比较寄存器CCRx,3个捕获/比较控制寄存器CCTLx。
比较模式:这是该定时器的默认模式,在此所有的捕获硬件停止工作。如果此时相应定时器中断允许打开的话,同时开始启动定时器,定时计数器TAR中的数值等于比较寄存器的值时,则产生中断请求。如果没有中断允许,只是响应的中断标志CCIFGx置位。
捕获模式: 主要用于利用信号的上升沿,下降沿或组合,测量外部或内部事件,也可以由软件停止。捕获完成后CCIFGx置位。
Timer_A有两个中断向量,一个单独分配给捕获/比较寄存器CCR0,另一个作为共用的中断向量用于定时器和其他的捕获/比较寄存器。
CCR0中断向量具有最高的优先级,CCIFG0在被中断服务时能自动复位。
CCR1-CCRx和定时器共用另一个中断向量,属于多源中断,对应的中断标志CCIFG1-CCIFGx和TAIFG在读中断向量字TAIV后,自动复位。如果不访问TAIV寄存器,则不能自动复位,需用软件清除。
TAIV中断向量值
例程:CCR0捕获/比较寄存器——比较功能中断应用
利用了定时器A模块中的CCR0捕获/比较寄存器的值与定时器A的值进行比较。如果相等就产生CCR0中断,进入Timer_A0中断服务程序进行中断处理,以P1.0作为指示,反转速度=32768/(2*1000)=16.384
ACLK=TACLK=32768hz,MCLK=SMCLK=deflaut DCO~800khz
#include
void main (void)
{
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
P1DIR|=BIT0; //设p1.0为输出
CCTL0 = CCIE; //CCR0开中断运允许
CCR0 =1000-1;
TACTL = TASSEL_1 + MC_1; //ACLK为定时器A的时钟源,增计数模式
_BIS_SR(LPM3_bits+GIE); //进入LPM3,打开全局中断
}
//Timer A0中断服务
#pragma vector = TIMERA0_VECTOR
__interrupt void Timer_A(void)
{
P1OUT ^=BIT0; //反转P1.0
}
例程 CCR0捕获/比较寄存器-比较功能中断应用
要求:ACLK=TACLK=32khz,MCLK=SMCLK=deflaut DCO~800khz
实现输出:P1.1=CCR0=32768/(2*4)=4096HZ
P1.2=CCR1=32768/(2*16)=1024hz
P1.3=CCR2=32768/(2*100)=163.84hz
P1.0=overflow(溢出)=32768/(2*65536)=0.25HZ
程序我就直接贴图吧,省的贴过来格式又乱了。
例程 CCR1,CCR2捕获/比较寄存器——产生PWM(脉冲宽度调制)波形
程序简述:利用定时器A的自动产生PWM波形输出,从而无需服务程序来产生。本程序CCR0的值作为PWM的周期宽度,CCR1,CCR2的值作为PWM的占空宽。
ACLK=TACLK=LFXT1=32768HZ