完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
`MSP430F149 定时器 (1)利用定时器A的模式2(连续)实现的定时资料 利用定时器A的模式2(连续)实现的定时资料在程序中对TACTL的控制,当TACTL为如下的赋值时 TACTL = TASSEL_2 + MC_2 +TAIE; // SMCLK,contmode, interrupt 可以改变TASSEL_X来实现不同的定时, 当为TASSEL_1时选ACLK为定时时钟,可以实现最短2S的定时,其次为2S的倍数的定时。 当为TASSEL_2时选 SMCLK为定时时钟,定时取决于SMCLK的时钟源, 1、SMCLK选 DCO = 800KHZ为时钟源,最短定时时间 为 0.08S 的定时,其次为其倍数。 2、SMCLK选 XT2也即外部高频晶振,此时定时取决于晶振频率,及其对分频的设置上。主要是设置BCSCTL1及 BCSCTS2. BCSCTL1 &= ~XT2OFF; BCSCTL2 |= SELS + DIVS_3; 通过对上面两句的不同设置,可实现不同的延时。 /****************************************************************************** // MSP-FET430P140 Demo - timer_A, Toggle P3.4, Overflow ISR, DCO SMCLK // // Description: Toggle P3.4 using software and Timer_A overflow ISR. // In this example an ISR triggers when TA overflows. Inside the TA // overflow ISR P3.4 is toggled. Toggle rate is approximatlely 12Hz. // Proper use of the TAIV interrupt vector generator is demonstrated. // ACLK = n/a, MCLK = SMCLK = TACLK = default DCO ~800kHz // // MSP430F149 // --------------- // /|| XIN|- // || | // --|RST XOUT|- // | | // | P3.4|-->LED // // Dasheng // LiTian Electronic Inc. // Feb 2008 // Built with IAR Embedded Workbench Version: 3.42A 功 能: 由定时器A,采用800KHz的DCO,来实现近一秒的定时中断; 计算方法: T =1/800,000 = 1.25uS so 根据连续计数模式,当计到0XFFFF时,发生溢出中断 因此溢出一次的时间是:65536*1.25 = 0.0819S,所以计时1秒需12次溢出。 ******************************************************************************/ #include typedef unsigned char uchar; typedef unsigned int uint; uchar flag=0; void main(void) { WDTCTL = WDTPW +WDTHOLD; // Stop WDT BCSCTL1 &= ~XT2OFF; BCSCTL2 |= SELS + DIVS_3; P3DIR |= BIT4; TACTL = TASSEL_2 + MC_2 +TAIE; // SMCLK,contmode, interrupt _BIS_SR(LPM0_bits +GIE); // Enter LPM0 w/ interrupt } // Timer_A3 Interrupt Vector (TAIV) handler #pragma vector=TIMERA1_VECTOR __interrupt void Timer_A(void) { switch( TAIV ) { case 2:break; // CCR1 not used case 4:break; // CCR2 not used case 10: P4OUT ^=BIT5; // overflow break; } } /* // Timer A0 interrupt service routine #pragma vector=TIMERA0_VECTOR __interrupt void Timer_A (void) { P4OUT ^= BIT5; // Toggle P3.4 } */ (2)利用定时器A的模式1(上升)实现的定时资料 此时要用到TACCTL0 及 TACCR0 ,根据设定的不同的TACCR0及不同的TASSEL_X即可实现不同的定时。 但此时的中断程序要改变。 对定时器A的中断的说明: 1、TIMERA1_VECTOR的中断地址为 0XFFEA,此中断入口地址包含3个中断源,属于多源中断,通过TAIV的值,可以知道是哪个源的中断,当TAIV 为0X02H时中断源为 TACCR1 CCR1IFG 当TAIV 为0X04H时,中断源为 TACCR2 CCR2IFG 当TAIV 为0X0AH时,中断源为 TA OVERFLOW TAIFG 2、TIMERA0_VECTOR的中断地址为 0XFFEC 为单源中断,中断源为TACCR0 CCR0IFG 对定时时间的说明: 当TASSEL_1时,选ACLK = 32.768KHZ,此时根据选取不同的TACCR0来实现不同的延时, 当TASSEL_2时,选SMCLK = DCO 时,~~~~~~~~~~~~~~~~~~~~~ 选SMCLK = XT2时,~~~~~~~~~~~~~~~~ 关键语句: TACTL = TASSEL_X + MC_1; TACCR0 = ~~~~~~~; TACCTL0 = CCIE; (3)、利用定时器A的比较模式,及输出模式4和连续计数模式可实现同时实现4个独立的定时间隔,或4种不同的频率输出。 在实验的过程中,同时驱动数码管的4个段。 在比较模式下主要区分TACCR0TACCR1 TACCR2 及TAIFG,的中断向量及入口地址,及输出模式(共8种) 其程序如下: #include typedef unsigned char uchar; typedef unsigned int uint; uchar flag=0; uchar table[] = {0x18,0x7e,0x51,0x52,0x36,0x92,0x90,0x5E,0x10,0x12}; //对应0---9的共阳极码 void main(void) { WDTCTL = WDTPW +WDTHOLD; // Stop WDT //BCSCTL1 |= XT2OFF; //BCSCTL2 |= SELS + DIVS_3; TACCTL0 = OUTMOD_4 +CCIE ; //Enable interrupt TACCTL1 = OUTMOD_4 +CCIE ; TACCTL2 = OUTMOD_4 +CCIE ; TACCR1 = 0X8000; TACCR2 = 0X2000; TACCR0 = 0XF000; P3DIR |= BIT6 +BIT7; // P3.4 output P3OUT |= BIT6 + BIT7; P4DIR = 0XFF; P4OUT = 0XFF; TACTL = TASSEL_2 + MC_2 +TAIE; // SMCLK,contmode, interrupt _BIS_SR(LPM0_bits +GIE); // Enter LPM0 w/ interrupt } /**/ // Timer_A3 Interrupt Vector (TAIV) handler #pragma vector=TIMERA1_VECTOR __interrupt void Timer_A(void) { switch( TAIV ) { case 2: P4OUT ^= BIT5; TACCR1 +=0X8000;break; // CCR1 not used case 4: P4OUT ^= BIT3;TACCR2 += 0X2000;break; // CCR2 not used case 10: flag++; if(flag==12){P4OUT ^= BIT2; flag = 0; } //overflow break;//flag++; } } /**/ // Timer A0 interrupt service routine #pragma vector=TIMERA0_VECTOR __interrupt void Timer0_A (void) { P4OUT ^=BIT4; // Toggle P3.4 TACCR0 += 0XF000; } `
msp430f149.pdf
(1.51 MB, 下载次数: 22
)
msp430f149datasheet.pdf
(1.03 MB, 下载次数: 13
)
MSP430x1xx_Family_User's_Guide_(Rev._F.pdf
(1.51 MB, 下载次数: 14
)
MSP430开发入门指南.pdf
(4.6 MB, 下载次数: 21
)
MSP430中文用户指南.pdf
(2.91 MB, 下载次数: 10
)
|
|
相关推荐
2 个讨论
|
|
只有小组成员才能发言,加入小组>>
2643个成员聚集在这个小组
加入小组MSP430FR5994 使用库函数 定时器触发AD问题请教
2021 浏览 2 评论
请问怎么把下面51单片机的代码改成msp430 g2 pocket的代码,还有改下时间变成30秒
2178 浏览 1 评论
4578 浏览 1 评论
2374 浏览 1 评论
1714 浏览 1 评论
731浏览 3评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
2021浏览 2评论
950浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-5-5 15:40 , Processed in 1.656401 second(s), Total 69, Slave 51 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号