77范文网 - 专业文章范例文档资料分享平台

MSP430F249的定时器计数器(6)

来源:网络收集 时间:2019-04-21 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

111

14 定时器溢出 TBIFG 低 实例5-6定时器B产生8路周期信号

任务要求:利用定时器B产生8路周期信号,周期分别为4s、2s、1s、0.5s、0.25s、0.125s、0.0625s和0.03125s,8路周期信号分别从P1.0和 P2.0~P2.6的TB0~TB6输出。

分析说明:定时器B有7个捕获\\比较寄存器TBCCR0~6。若设置定时器B工作在连续模式,利用7个比较器可以获得7路不同的周期信号,再利用定时器溢出中断可以再输出1路周期信号。因此,定时器B可以很方便的产生8路时间间隔不同的周期信号。

1)硬件电路设计

MSP430F249的低频晶振为32768Hz,为ACLK提供精确时钟,定时器B采用ACLK作为时钟源,最大定时时间间隔2s(时钟不分频)和128s(时钟64分频)。8路周期信号分别从P1.0和 P2.0~P2.6的TB0~TB6输出,采用两个虚拟示波器观察,硬件电路如图5.16所示。 AD1LED-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/TBCLK363738394041424344454647484950515960612345610711896462BCDABCDC120pFP2.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.16 实例5.6硬件电路图 2)程序设计 MSP430F249单片机的程序运行主时钟MCLK= DCO=1.1MHz。定时器B采用连续模式,定时器B的时钟源为ACLK=32768Hz。时基单位为1/32768秒,设置TBCCR0~TBCCR6为适当的初始值,可以得到要求的周期信号输出。利于定时器B的溢出中断,可以得到周期4s的信号输出。

#include void main(void) {

WDTCTL = WDTPW + WDTHOLD; // 停止看门狗 P1DIR |= 0x01; //P1.0输出 P4SEL = 0xFF; // P4功能选择 P4DIR = 0xFF; // P4输出

TBCCTL0 = OUTMOD_4 + CCIE; // CCR0翻转, 中断允许

26

TBCCTL1 = OUTMOD_4 + CCIE; // CCR1翻转, 中断允许 TBCCTL2 = OUTMOD_4 + CCIE; // CCR2翻转, 中断允许 TBCCTL3 = OUTMOD_4 + CCIE; // CCR3翻转, 中断允许 TBCCTL4 = OUTMOD_4 + CCIE; // CCR4翻转, 中断允许 TBCCTL5 = OUTMOD_4 + CCIE; // CCR5翻转, 中断允许 TBCCTL6 = OUTMOD_4 + CCIE; // CCR6翻转, 中断允许 TBCTL = TBSSEL_1 + MC_2 + TBIE;

// 定时器B时钟源为ACLK,连续模式, 中断允许

_BIS_SR(LPM0_bits + GIE); // LPM0模式,总中断允许 }

#pragma vector=TIMERB0_VECTOR

__interrupt void Timer_B0 (void) //定时器B0中断服务程序 {

TBCCR0 += 32768; //周期2s }

#pragma vector=TIMERB1_VECTOR

__interrupt void Timer_B(void) //定时器B1中断服务程序,TBIV中断矢量 {

switch( TBIV ) {

case 2: TBCCR1 += 32768/2; //周期1s break;

case 4: TBCCR2 += 32768/4; //周期0.5s break;

case 6: TBCCR3 += 32768/8; //周期0.25s break;

case 8: TBCCR4 += 32768/16; //周期0.125s break;

case 10: TBCCR5 += 32768/32; //周期62.5ms break;

case 12: TBCCR6 += 32768/64; //周期31.25ms break;

case 14: P1OUT ^= 0x01; // 溢出中断,周期4s break; } }

3)仿真与结果分析

27

图5.17 实例5.6仿真结果(一)

图5.18 实例5.6仿真结果(二)

实例5-7定时器B产生6路PWM信号

任务要求:利用定时器B产生6路PWM信号,周期为20ms,占空比分别为90%、80%、70%、60%、50%和10%。

分析说明:定时器B有多种信号输出模式,其中输出模式3和模式7用来产生脉宽调制信号(PWM信号),在定时器B的增计数模式,用TBCCR0控制PWM信号的周期,TBCCR1~6控制占空比,可以得到6路不同占空比的PWM信号。

1)硬件电路设计

硬件电路如图5.19所示,采用两个虚拟示波器观察6路PWM信号。

28

AU11213141516171819202122232425P1.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/TBCLK3637383940414243444546474849BCDABCDP2.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/SMCLKC126P2.6/ADC12CLK/CA6P5.6/ACLK5027P2.7/TA0/CA7P5.7/TBOUTH/SVSOUT51XT2OUT28P3.0/UCB0STE/UCA0CLKP6.0/A05920pF29P3.1/UCB0SIMO/UCB0SDAP6.1/A160X230P3.2/UCB0SOMI/UCB0SCLP6.2/A26131C28MHzP3.3/UCB0CLK/UCA0STEP6.3/A3232P3.4/UCA0TXD/UCA0SIMOP6.4/A43XT2IN33P3.5/UCA0RXD/UCA0SOMIP6.5/A5434P3.6/UCA1TXD/UCA1SIMOP6.6/A6520pF35P3.7/UCA1RXD/UCA1SOMIP6.7/A7/SVSIN6XT2OUT52XT2IN53XT2OUTVEREF+1058XT2INVREF+7X157RST/NMIVREF-/VEREF-1155TCKXIN854TDI/TCLKXOUT956TDO/TDIAVCC646232768HzTMSAVSSMSP430F249 图5.19 实例5.7硬件电路图 2)程序设计 #include void main(void) { WDTCTL = WDTPW + WDTHOLD; //停止看门狗

BCSCTL2=SELS+DIVS0+DIVS1; //SMCLK = XT2,SMCLK 8分频 P4DIR |= 0x7e; // P4.1 - P4.6 输出

P4SEL |= 0x7e; // P4.1 - P4.6 TBx(x=1~6)输出 TBCCR0 = 20000; // PWM 信号周期 TBCCTL1 = OUTMOD_7; // CCR1 输出模式7 TBCCR1 = 18000; //占空比90% TBCCTL2 = OUTMOD_7;

TBCCR2 = 16000; //占空比80% TBCCTL3 = OUTMOD_7;

TBCCR3 = 14000; //占空比70% TBCCTL4 = OUTMOD_7;

TBCCR4 = 12000; //占空比60% TBCCTL5 = OUTMOD_7;

TBCCR5 = 10000; //占空比50% TBCCTL6 = OUTMOD_7;

TBCCR6 = 2000; //占空比10%

TBCTL = TBSSEL_2 + MC_1; // SMCLK, 连续计数模式 _BIS_SR(CPUOFF); // Enter LPM0 }

3)仿真结果与分析

29

图5.20 实例5.7仿真结果(一)

图5.21 实例5.7仿真结果(二)

实例5.8定时器B精确测量某输入信号的脉冲宽度

任务要求:利用定时器B精确测量某输入信号的脉冲宽度,脉冲宽度范围0~999999us。

分析说明:利用定时器B的脉冲捕获功能可以精确地测量外部输入信号的脉冲宽度。捕获模式测量输入信号的脉宽时,一般设置定时器B为连续模式,可以先设置捕获模式为上升沿触发,在捕获到的上升沿中断程序里记下TBCCRx(x=0~6)的值;再将捕获模式设置为下降沿触发,在捕获到的下降沿中断程序里记下TBCCRx(x=0~6)的值,两者之差就是输入信号高电平的脉冲宽度。由于事件(上升沿或者下降沿)发生的随机性,注意使能溢出中断,在溢出中断中记录溢出发生次数,脉冲宽度=65536x溢出次数+两次捕获值之差。

1)硬件电路设计

硬件电路参见图5.23所示。

2)程序设计

受到简短的 C 语言入门程序范例的影响,初学初学者往往将所有的代码都写在一个 C文件中。这是一种非常坏的习惯。当程序逐渐变长,只要超过几个屏幕长度,会发现编辑、查找和调试都将变得非常困难。而且这种代码很难用在

30

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库MSP430F249的定时器计数器(6)在线全文阅读。

MSP430F249的定时器计数器(6).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/608186.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: