ImageVerifierCode 换一换
格式:DOCX , 页数:7 ,大小:17.60KB ,
资源ID:3647250      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3647250.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(54MSP430 G2553 2定时器.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

54MSP430 G2553 2定时器.docx

1、54MSP430 G2553 2定时器54MSP430 G2553 学习笔记2定时器Timer_A1,MSP430g2553具有两个16位的定时器:Timer0_A Timer1_A。分别具有三个捕捉/比较寄存器,具有输入捕捉,输出比较功能。可以产生定时中断,也可以产生PWM。2,产生PWM,例子如下:#include void Timer_A0_1_init() /TA0.1输出PWMTACTL|= TASSEL_1+MC_1;/ACLK,增计数CCTL1=OUTMOD_7;/输出模式为复位/置位CCR0=328;/时钟频率为32768HZ,100HZ/CCR1=164;/时钟频率为3276

2、8HZ,占空比CCR1/CCR0=50%CCR1=109;/占空比CCR1/CCR0=1/3 TA0.1由P1.2 P1.6输出void Timer_A1_2_init() /TA1.2输出PWMTA1CTL|= TASSEL_1+MC_1;/ACLK,增计数TA1CCTL2=OUTMOD_7;/输出模式为复位/置位,注意CCTL2要写为TA1CCTL2TA1CCR0=164;/时钟频率为32768HZ,波形32768/CCR0=199HZTA1CCR2=41;/占空比CCR2/CCR0=1/4,注意CCR2要写成TA1CCR2 TA1.2由P2.4 P2.5输出void Timer_A1_1

3、_init() /TA1.1输出PWMTA1CCTL1=OUTMOD_7;TA1CCR1=123; /占空比CCR1/CCR0=3/4,注意CCR1要写成TA1CCR1 TA1.1由P2.1 P2.2输出void IO_init()P1SEL|=BIT2+BIT6;P1DIR|=BIT2+BIT6;/P1.2 P1.6输出 TA0.1 OUT1P2SEL|=BIT4+BIT5;P2DIR|=BIT4+BIT5;/P2.4 P2.5输出 TA1.2 OUT2P2SEL|=BIT1+BIT2;P2DIR|=BIT1+BIT2; /P2.1 P2.2输出 TA1.1 OUT1void main(vo

4、id) WDTCTL=WDTPW+WDTHOLD;IO_init();Timer_A0_1_init();Timer_A1_2_init();Timer_A1_1_init();_BIS_SR(CPUOFF); / Enter LPM0 进入低功耗模式0 SMCLK ON,ACLK ON3,Timer_A的捕获/比较寄存器TAR寄存器是Timer_A的16位的计数寄存器。TACCRx是Timer_A的捕获/比较寄存器,当为捕获模式时:当捕获发生时,把TAR的值装载到TACCRx中。当为比较模式时:TACCRx中装的是要与TAR寄存器相比较的值。 4,捕获模式捕获外部输入的信号的上升沿或下降沿或

5、上升沿下降沿都捕捉,当捕捉发生时,把TAR的值装载到TACCRx中,同时也可以进入中断,执行相应的操作。这样利用捕捉上升沿或下降沿就可以计算外部输入信号的周期,得出频率。利用捕捉上升沿和下降沿可以得出输入信号的高电平或低电平的持续时间。也可以算出占空比。下面是一个例子,是Timer_A捕获初始化的程序:void timer_init() /使用Timer1_A时要特别注意各个寄存器的写法,因为Timer0_A的寄存器都简写了,所以在写/Timer1_A的寄存器时,要特别注意与Timer0_A的不同P1SEL |= BIT2; /选择P12作为捕捉的输入端子 Timer0_A/TACCTL1 |

6、=CM_3+SCS+CAP+CCIE; /上下沿都触发捕捉,用于测脉宽,同步模式、时能中断 CCI1ATACCTL1 |=CM_1+SCS+CAP+CCIE; /上升沿触发捕捉,同步模式、时能中断 CCI1ATACTL |= TASSEL1+MC_2; /选择SMCLK时钟作为计数时钟源,不分频 增计数模式不行,必须连续计数模式P2SEL |= BIT1; /选择P21作为捕捉的输入端子 Timer1_A/TA1CCTL1 |=CM_3+SCS+CAP+CCIE; /上下沿都触发捕捉,用于测脉宽,同步模式、时能中断 CCI1A TA1CCTL1 |=CM_1+SCS+CAP+CCIE; /上升

7、沿触发捕捉,同步模式、时能中断 CCI1ATA1CTL |= TASSEL1+MC_2; /选择SMCLK时钟作为计数时钟源,不分频 增计数模式不行,必须连续计数模式相对应的中断函数如下:#pragma vector=TIMER0_A1_VECTOR /Timer0_A CC1 的中断向量_interrupt void Timer_A(void)/ CCI0A 使用的捕捉比较寄存器是TA0CCR0,TA0CCR0单独分配给一个/中断向量TIMER1_A0_VECTOR,所以进入中断后直接就是Timer0_A CC0产生的中断,不用经过类似 /下面的方法判断中断源了 。/Timer0_A CC1

8、-4, TA0公用一个中断向量 TIMER0_A1_VECTOR,所以进入了中断后还要用下面/的方法进行判断是哪一个中断源产生的中断switch(TAIV) /如果是Timer0_A CC1产生的中断case 2:flag=1;LPM1_EXIT; /退出低功耗模式/ _BIC_SR_IRQ(LPM1_bits);/_bic_SR_register_on_exit(LPM1_bits);break;case 4: break;case 10:break;#pragma vector=TIMER1_A1_VECTOR /Timer1_A CC1 的中断向量_interrupt void Time

9、r_A1(void)/ P1OUT|=BIT0; /led调试用的/ LPM1_EXIT; /退出低功耗模式 因为使用的是CCI0A 使用的捕捉比较寄存器是TA1CCR0,TA1CCR0单独分配给一个/中断向量TIMER1_A0_VECTOR,所以进入中断后直接就是Timer1_A CC0产生的中断,不用经过类似/下面注释掉的方法判断 。/而Timer1_A CC1-4, TA1则公用一个中断向量 TIMER1_A1_VECTOR,所以进入了中断后还要用下面 /的方法进行判断是哪一个中断源产生的中断switch(TA1IV) /如果是Timer1_A CC1产生的中断case 2:flag=2

10、;LPM1_EXIT; /退出低功耗模式/ _BIC_SR_IRQ(LPM1_bits);/_bic_SR_register_on_exit(LPM1_bits);break;case 4:break;case 10:break;/如果要测量更低频率的信号的话,可以在中断中判断溢出中断发生的次数,这样就可以得到溢出的次数,从而可以测量更/低频率的信号5,Timer_A的计数模式计数模式有:增计数模式,连续计数模式和增减计数模式。具体的各个模式的详解,参见用户指南。6,定时器的定时中断在使用定时器的定时中断时,要注意定时器计数模式的选择。在使用中断时,要注意中断向量的使用和中断源的判断,下面就举

11、一个例子,注释的也较详细:#include unsigned int t=0;void main(void)WDTCTL = WDTPW + WDTHOLD; / Stop WDTP1DIR |= 0x01; / P1.0 outputCCTL0 = CCIE; / CCTLx是捕获/比较控制寄存器 interrupt enabled CCIE=0x0010 时能定时器A中断CCR0 = 50000; /捕获/比较寄存器 设置计数器CCR0的初值 16位寄存器,最大值为65535/默认SMCLK使用的是DCO,默认的DCO大约为800KHz,而CCR0=50000,所以中断产生的频率大约为16

12、HzTACTL = TASSEL_2 + MC_2; / SMCLK, contmode 连续计数模式从0计到0FFFFh/TACTL = TASSEL_2 + MC_1; / SMCLK, upmode 增计数模式从0计到CCR0_BIS_SR(LPM0_bits + GIE); / Enter LPM0 w/ interrupt 进入低功耗模式0,允许中断 / Timer A0 interrupt service routine#pragma vector=TIMER0_A0_VECTOR_interrupt void Timer_A (void) /CCIFG中断被响应后,该标志位自动清

13、零/P1OUT = 0x01; / Toggle P1.0t+;if(t=5)P1OUT = BIT0; / Toggle P1.0t=0;CCR0 += 50000; / Add Offset to CCR0 增加CCR0偏移/定时器总是从0开始往上计数,一直到计满再从0开始,在连续计数模式下,当定时器的值等于CCR0时,产生中断/在中断中对CCR0增加50000,这样的话定时器从当前值到下一时刻再次等于CCR0时的间隔为50000,恒定 /这样产生中断的时间间隔就相等了/所以在连续计数模式下,要想使中断的时间间隔一定,就要有CCR0 += n;这句话/在中断中CCR0不需要从新赋值,区别于

14、51中断的使用注意情况:还是把举个例子吧:#include void main(void)WDTCTL = WDTPW + WDTHOLD; / Stop WDTP1DIR |= 0x01; / P1.0 outputTACTL = TASSEL_2 + MC_2 + TAIE; / SMCLK, contmode, interrupt TAIE允许定时器溢出中断_BIS_SR(LPM0_bits + GIE); / Enter LPM0 w/ interrupt GIE允许中断/ Timer_A3 Interrupt Vector (TA0IV) handler#pragma vector=

15、TIMER0_A1_VECTOR_interrupt void Timer_A(void)switch( TA0IV ) /TAIV中断向量寄存器 用于case 2: break; / CCR1 not used 捕获/比较器1case 4: break; / CCR2 not used 捕获/比较器2case 10: P1OUT = 0x01; / overflow 定时器溢出break;7,注意:定时器Timer0_A的时钟可以选择为外接时钟输入TACLK(P10),这样当外接一个信号时,定时器Timer0_A就相当于一个计数器使用。这样就可以用Timer0_A接外接信号,Timer1_A

16、接标准的时钟如32768Hz的晶振,就可以实现等精度测频了。其实Timer1_A的时钟也可以外接的,但是在g2553中没有这个外接管脚(P37),所以就只能选择正常的时钟了。Timer0_A的外接时钟输入TACLK(P10)的设置如下:下面是我实现等精度测频时,两个定时器的初始化程序: void timer0_init()TACTL |= TASSEL_0+MC_2+TACLR; /选择TACLK时钟作为计数时钟源,不分频 必须连续计数模式P1SEL |= BIT0; /P10为Timer0_A的时钟TACLK输入,接外部待测信号,这样Timer0_A就当作计数器用 /Timer1_A采用ACLK作为时钟源计数,这样ACLK就相当于是标准信号,这样两个定时器相当于都工作在计数器方式,/ACLK 32768Hz作为标准信号,这样可以实现等精度测频void timer1_init()TA1CCTL0 = CCIE;TA1CCR0 = 32768; /1s定时TA1CTL |= TASSEL_1+MC_2+TACLR; /选择ACLK时钟作为计数时钟源,不分频 必须连续计数模式8,用定时器和比较器可以实现DAC使用定时器也可以实现串口通信我无语了,好好的一篇博客由于太长,非要我分开发,接上一篇:

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1