定时器工作模式说明:
(1)定时器A工作在增计数模式下,TACCR0作为周期寄存器,TACC1作为比较寄存器,不同的输出模式产生的输出波形如图5.4所示。
图5.5定时器A处于连续模式
(2)定时器A工作在连续模式下,TACCR0、TACCR1作为比较寄存器,不同的输出模式产生的输出波形如图5.5所示。
图5.6定时器A处于增减计数模式
(3)定时器A工作在增/减计数模式下,TACCR0作为周期寄存器,TACC1和TACC2作为比较寄存器,不同的输出模式产生的输出波形如图5.6所示。
定时器 A 的中断说明:
定时器 A 有2个中断向量,一个单独分配给捕获比较寄存器 CCR0,另一个作为共用的中断向量用于定时器溢出和其他的捕获比较寄存器(CCR1和CCR2)。
CCR0 中断向量具有最高的优先级,CCR0用于定义增计数和增减计数模式的周期。CCR0的中断标志TACCR0_CCIFG 在执行中断服务程序时能自动复位。 CCR1、CCR2 和定时器溢出共用另一个中断向量,属于多源中断,对应的中断标志为TACCR1_CCIFG、TACCR2_CCIFG和 TAIFG1,在读中断向量字 TAIV
11
后,自动复位。如果不访问 TAIV 寄存器,则不能自动复位,须用软件清除;如果相应的中断允许位为零(不允许中断),则将不会产生中断请求,但中断标志仍存在,这时须用软件清除。
实例5.2 定时器A定时1秒
任务要求:利用定时器A产生设定的时间间隔中断,在中断服务程序中切换LED灯的亮灭,亮1s灭1s。
分析说明:定时器A的时钟源可以选择为SMCLK、ACLK和外部引脚输入(TACLK、INCLK),一般选择为SMCLK和ACLK。ACLK为低频晶振32768Hz及1/2/4/8分频,定时器A可以再对ACLK进行1/2/4/8分频,定时器A的时基最小为1/32768秒(约30us),最大为64分频后即1.95ms,因此定时器A的定时范围为2s(对应时基30us)和128s(对应时基1.95ms)。SMCLK可选择XT2和内部DCO作为时钟源,若SMCLK选择XT2(例如8MHz),则定时器A的时基最小为0.125us,最大为64分频后即8us,因此定时器A的定时范围为8.19ms(对应时基0.125us)和524ms(对应时基8ms)。
总而言之,要求定时器时间间隔小于几百毫秒时,定时器A的时钟源采用SMCLK,SMCLK一般选取XT2作为时钟源;定时时间间隔几百毫秒至几十秒应采用ACLK(或者适当分频)作为定时器A的时钟源。
1)硬件电路设计
P1.0引脚接LED发光二极管,同时用虚拟示波器观察P1.0引脚电平变化。低频晶振采用32768Hz的晶振,获得稳定的ACLK时钟源。硬件电路图如图5-7所示,XT2接8MHz晶振(XT2频率范围为400k~16MHz),两个22pF匹配电容,供MCLK、SMCLK选用。一般LED发光二极管管压降1.8~2.2v,电流5~10mA,因此限流电阻取300欧。
D1LED-BLUEABCDR1300U1121314151617181920212223242526272829303132333435P1.0/TACLK/CAOUTP1.1/TA0P1.2/TA1P1.3/TA2P1.4/SMCLKP1.5/TA0P1.6/TA1P1.7/TA2P4.0/TB0P4.1/TB1P4.2/TB2P4.3/TB3P4.4/TB4P4.5/TB5P4.6/TB6P4.7/TBCLK363738394041424344454647484950515960612345610711896462C1XT2OUT22pFP2.0/ACLK/CA2P5.0/UCB1STE/UCA1CLKP2.1/TAINCLK/CA3P5.1/UCB1SIMO/UCB1SDAP2.2/CAOUT/TA0/CA4P5.2/UCB1SOMI/UCB1SCLP2.3/CA0/TA1P5.3/UCB1CLK/UCA1STEP2.4/CA1/TA2P5.4/MCLKP2.5/ROSC/CA5P5.5/SMCLKP2.6/ADC12CLK/CA6P5.6/ACLKP2.7/TA0/CA7P5.7/TBOUTH/SVSOUTP3.0/UCB0STE/UCA0CLKP3.1/UCB0SIMO/UCB0SDAP3.2/UCB0SOMI/UCB0SCLP3.3/UCB0CLK/UCA0STEP3.4/UCA0TXD/UCA0SIMOP3.5/UCA0RXD/UCA0SOMIP3.6/UCA1TXD/UCA1SIMOP3.7/UCA1RXD/UCA1SOMIXT2OUTXT2INRST/NMITCKTDI/TCLKTDO/TDITMSMSP430F249P6.0/A0P6.1/A1P6.2/A2P6.3/A3P6.4/A4P6.5/A5P6.6/A6P6.7/A7/SVSINVEREF+VREF+VREF-/VEREF-XINXOUTAVCCAVSSX2C222pF8MHzXT2INXT2OUT52XT2IN535857555456X132768Hz 图5.7 实例5.2电路图 2)程序设计 MSP430F249单片机的程序运行主时钟MCLK= DCO=1.1MHz。定时器A采用增计数模式,定时器A的时钟源为ACLK=32768Hz。时基单位为1/32768秒,设置CCR0 = 32768,则定时时间间隔1s。
12
#include
WDTCTL = WDTPW + WDTHOLD;// 停止看门狗 P1DIR |= 0x01; // P1.0输出
CCTL0 = CCIE; // CCR0中断允许 CCR0 = 32768; //定时时间间隔1s
TACTL = TASSEL_1 + MC_1; // 定时器A时钟源为ACLK,增计数模式 _BIS_SR(LPM0_bits + GIE); // LPM0模式,总中断允许 }
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void) //定时器A0中断服务程序 {
P1OUT ^= 0x01; // P1.0取反 }
3)仿真与结果分析
程序虽然很短,但是它包含了定时器的基本使用方法。使用定时器前,先设置好控制寄存器TACTL,时钟源选择、计数模式选择、中断允许和定时时间间隔CCR0的值。增计数模式,定时器A的计数值达到CCR0,TACCR0_CCIFG中断标志建立,CCR0中断为单源中断,CPU响应中断,进入定时器A0中断服务程序后自动清除中断标志TACCR0_CCIFG。在中断服务程序中,对P1.0取反,得到周期2s的信号,其中高电平1s,低电平1s,如图5.8所示。仿真时设置参数MCLK=(Default),ACLK=32768Hz。
图5.8 实例5.2仿真结果图
实例5.3 定时器A产生4路周期信号 任务要求:利用定时器A产生4路周期信号,周期分别为4s、2s、1s和0.25s,四路周期信号分别从P1.0和 P1.1~P1.4的A0~A3输出。
13
分析说明:定时器A有3个捕获\\比较寄存器CCR0、CCR1和CCR2。若设置定时器A工作在连续模式,利用3个比较器可以获得3路不同的周期信号,再利用定时器溢出中断可以再输出1路周期信号。因此,定时器A可以很方便的产生4路时间间隔不同的周期信号。 1)硬件电路设计 硬件电路如图5.9所示,用虚拟示波器观察P1.0~P1.3四路引脚电平变化。 D1LED-BLUER1300U112131415161718192021222324252627XT2OUT2829303132333435P1.0/TACLK/CAOUTP1.1/TA0P1.2/TA1P1.3/TA2P1.4/SMCLKP1.5/TA0P1.6/TA1P1.7/TA2P4.0/TB0P4.1/TB1P4.2/TB2P4.3/TB3P4.4/TB4P4.5/TB5P4.6/TB6P4.7/TBCLK363738394041424344454647484950515960612345610711896462ABCDC120pFP2.0/ACLK/CA2P5.0/UCB1STE/UCA1CLKP2.1/TAINCLK/CA3P5.1/UCB1SIMO/UCB1SDAP2.2/CAOUT/TA0/CA4P5.2/UCB1SOMI/UCB1SCLP2.3/CA0/TA1P5.3/UCB1CLK/UCA1STEP2.4/CA1/TA2P5.4/MCLKP2.5/ROSC/CA5P5.5/SMCLKP2.6/ADC12CLK/CA6P5.6/ACLKP2.7/TA0/CA7P5.7/TBOUTH/SVSOUTP3.0/UCB0STE/UCA0CLKP3.1/UCB0SIMO/UCB0SDAP3.2/UCB0SOMI/UCB0SCLP3.3/UCB0CLK/UCA0STEP3.4/UCA0TXD/UCA0SIMOP3.5/UCA0RXD/UCA0SOMIP3.6/UCA1TXD/UCA1SIMOP3.7/UCA1RXD/UCA1SOMIXT2OUTXT2INRST/NMITCKTDI/TCLKTDO/TDITMSMSP430F249P6.0/A0P6.1/A1P6.2/A2P6.3/A3P6.4/A4P6.5/A5P6.6/A6P6.7/A7/SVSINVEREF+VREF+VREF-/VEREF-XINXOUTAVCCAVSSX2C220pF8MHzXT2INXT2OUT52XT2IN535857555456X132768Hz 图5.9 实例5.3电路图 2)程序设计 MSP430F249单片机的程序运行主时钟MCLK= DCO=1.1MHz。定时器A采用连续模式,定时器A的时钟源为ACLK=32768Hz。时基单位为1/32768秒,设置CCR0 = 32768,则定时时间间隔1s(周期2s);CCR1 = 32768/2,则定时时间间隔0.5s(周期1s);CCR2 = 32768/8,则定时时间间隔0.125s(周期0.25s);定时器A溢出中断,定时时间间隔2s(周期4s)。
#include
WDTCTL = WDTPW + WDTHOLD; //停止看门狗
P1SEL |= 0x0E; // P1.1~P1.4功能选择 P1DIR |= 0x0F; // P1.0~P1.4输出
CCTL0 = OUTMOD_4 + CCIE; // CCR0翻转, 中断允许 CCTL1 = OUTMOD_4 + CCIE; // CCR1翻转, 中断允许 CCTL2 = OUTMOD_4 + CCIE; // CCR2翻转, 中断允许
TACTL = TASSEL_1 + MC_2 + TAIE; //定时器A时钟源为ACLK,连续模式, 中断允许 _BIS_SR(LPM0_bits + GIE); // LPM0模式,总中断允许 }
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A0 (void) //定时器A0中断服务程序 {
CCR0 += 32768; //周期2s }
#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A1(void)//定时器A1中断服务程序
14
{
switch( TAIV ) // TAIV中断矢量 {
case 2: CCR1 += 32768/2; //周期1s break;
case 4: CCR2 += 32768/8; //周期0.25s break;
case 10: P1OUT ^= 0x01; //溢出中断,周期4s break; } }
3)仿真与结果分析
仿真结果见图5.10所示,第1路信号周期为4s,定时器A溢出时间间隔为2s,在中断程序中对P1.0取反;第2路信号周期为2s,比较寄存器CCR0设置值为32768,1秒钟对TA0(P1.1)取反一次;第3路信号周期为1s,比较寄存器CCR1设置值为32768/2,0.5秒钟对TA1(P1.2)取反一次;第4路信号周期为0.25s,比较寄存器CCR2设置值为32768/8,0.125秒钟对TA2(P1.3)取反一次。
图5.10 实例5.3仿真结果图
实例5.4 定时器A产生两路PWM信号
任务要求:利用定时器A产生占空比75%和15%的两路PWM信号,周期均为20ms。
分析说明:定时器A有多种信号输出模式,其中输出模式3和模式7用来产生脉宽调制信号(PWM信号),在定时器A的增计数模式,用CCR0控制PWM信号的周期,CCR1、CCR2控制占空比,可以得到两路不同占空比的PWM信号。
1)硬件电路设计
硬件电路如图5.11所示。
15
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库MSP430F249的定时器计数器(3)在线全文阅读。
相关推荐: