MSP430定时器的使用

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_31339221/article/details/54528070
通过计算设置周期。
#include<msp430f149.h>

void main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;             //WDTCTL = 0X5A80;关狗
  
  CCTL0 = CCIE;                         //使能CCR0中断
  CCR0 = 4095;                          //设置周期为0.5s
  TACTL = TASSEL_2 + ID_2 + MC_1;       //时钟源的选择,分频,模式
  P2DIR = 0XFF;
//  P2OUT = 0XFF;
  _EINT();
  LPM0;  
}
#pragma vector = TIMERA0_VECTOR
__interrupt void Timer_A()
{
  P2OUT = ~P2OUT;
  
//  CCR0 += 50000;
}

展开阅读全文

关于 MSP430 定时器 A/B的应用的问题

07-29

问题1、我使用定时器A产生独立的时间间隔,我模仿例子建立程序,在没有其他程序的时候,可以正常产生独立的时间间隔,但是当程序增多的时候,发现有时候无法进入定时器,或者过了很久才能进入定时器。我猜想可能是其他的中断干扰了定时器,我的判断正确吗。rnrn问题2:我虽然使用MSP430 定时器产生了几个独立的时间周期,但是我对这个定时器的工作原理还有理解不透的地方。rnrn代码如下:rn// Timer1 A0 interrupt service routinern#pragma vector=TIMER0_A0_VECTORrn__interrupt void Timer_A0 (void)rnrn TA0CCR0 += 64; // Add Offset to CCR0rnrnrn// Timer_A3 Interrupt Vector (TAIV) handlerrn#pragma vector=TIMER0_A1_VECTORrn__interrupt void TIMER0_A1_ISR(void)rnrn switch(__even_in_range(TA0IV,14))rn rn case 0: rn break;rn case 2:rn TA0CCR1 += 8192; // Add Offset to CCR2rn SendGPSData(); rn break; // CCR4 not usedrn case 4: rn UCA0IE |= UCRXIE;rn TA0CCR2+= 256; // Add Offset to CCR2rn UART1_SendStr_char(ask); //TA0R1计数到CCR1触发rn P9OUT |= BIT0;rn break;rn case 6: rn UCA0IE |= UCRXIE; rn TA0CCR3 += 512; // Add Offset to CCR1rn WindV=TA1R*0.88; //记录1s内的风速计数值(每秒的风速),每个脉冲对应0.88米 rn TA1R = 0; //风速计计数清零rn rn break;rn case 8:rn break; // CCR3 not usedrn case 10: rn break; // CCR5 not usedrn case 12: rn break; // Reserved not usedrn case 14: // overflowrn break;rn default: rn break;rn rnrnrn上面的代码,下面的这一部分的作用是什么?里面没有任何处理程序。也就是定时器A为什么一定需要CCR0,然而CCR0却不做任何工作,为什么CCR0和CCR1-CCR5分开来?定时器A CCR0和其他的CCRx的关系是是什么,工作机制是怎样子,说的越详细越好。rn// Timer1 A0 interrupt service routinern#pragma vector=TIMER0_A0_VECTORrn__interrupt void Timer_A0 (void)rnrn TA0CCR0 += 64; // Add Offset to CCR0rn 论坛

没有更多推荐了,返回首页