msp430定时器中断的问题

void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P1DIR |= 0x01; // P1.0 output
TBCCTL0 = CCIE; // CCR0 interrupt enabled
TBCCR0 = 50000;
TBCTL = TBSSEL_2 + MC_2; // SMCLK, contmode

_BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt
}

// Timer B0 interrupt service routine
#pragma vector=TIMERB0_VECTOR
__interrupt void Timer_B (void)
{
P1OUT ^= 0x01; // Toggle P1.0
TBCCR0 += 50000; // Add Offset to CCR0
}
--------------------------------------------
请问一下各位大神,这个例子是连续模式的定时器B,这里每次TAR运行到TBCCR0后,都会产生中断,那么TAR溢出是不是也有中断的?这个中断怎么表示?TIMERB1?

你说的对的,这个是有溢出中断,但你的初始化程序要稍微调整下:
TBCTL = TBSSEL_2 + MC_2+TBIE;;
打开溢出中断,默认值是0;
然后再写段中断程序,例如:
#pragma vector=TIMERB1_VECTOR
__interrupt void Timer_B_1(void)
{
switch( TBIV )
{
case 2: break;
case 4: break;
case 14: P1OUT ^= 0x01;
break;
}
这个时候就能同时进入两个中断程序了。
温馨提示:内容为网友见解,仅供参考
无其他回答

msp430中断定时的问题,该怎么算啊,如图P1.1多长时间去翻一次啊啊,该...
而中断服务程序中的CCR0 += 50000;则是告诉定时器经过50000个SMCLK后再产生中断,也就是翻转P1.1,这样就实现了每隔50000个SMCLK会将P1.1翻转一次,倘若没有这句代码CCR0 += 50000;那么P1.1将会每隔0xFFFF个SMCLK完成一次翻转,这里理解稍微有点绕,不过不算复杂,看看SPEC就懂了。总结:你贴的...

MSP430程序设计 定时器中断问题,下面的程序想在定时1S时候通过串口发送...
可能是串口设置不对

在msp430f135单片机中定时器中中断过多是不是会影响程序的执行准确率...
这个和CPU处理能力有关 所有中断(不论什么等级)时间之和一定要小于系统时间 否则时钟就会变慢(或者低级中断得不到执行)这取决于你设计的调度机制是抢先式还是时间片式的 如果是抢先式,则可能出现高级中断总能得到执行,低级中断老是轮不到执行 如果是时间片轮转的,则大家轮流坐庄,都能得到执行,...

msp430编程定时器B的中断
看门狗有2种工作模式:定时器 ,看门狗 定时器工作模式下WDTIFG在响应中断服务程序有标志位自动复位,而在看门狗模式下,该标志位只能软件清零。但是怎么判断复位是由于WDT工作在看门狗模式下的定时溢出引起的,还是看门狗写密钥错误引起的呢?………答案是没有方法,至少我没见过有什么方法,也没见过周边的...

msp430如何让定时器计数器重新开始计数。使它重复不断的产生中断
1、你的GIE没开,也许压根没产生过中断。2、也许你开GIE了。TI_CC_LED1在异或下能亮,说明你的LED1的控制位应该是0吧?既下拉点亮LED1,但你要知道0^0永远都是0,你的LED1永远也都是亮着的。3、你打算LED2闪烁,可你用或语句它只能保持一个状态(恰恰这个状态是1吧?LED2就这么灭着不亮)...

MSP430的CCRx中断在连续计数模式下怎么产生中断的
其次,CCR0的初值没有设置,中断只会在定时器溢出时才能发生。然后,第二个中断,你是想用CCR1,CCR2吧,,也是因为你没设置初值,TAIV的值只会是10,也就是溢出中断产生才会进中断。case中的2,4是计数值到CCR1,2而使中断标志置位的。。。最后,你每次中断后,只是把CCR0的值加4,没有做其它...

关于MSP430单片机 定时器A, timerA 的问题.
问题出在Timer_A的计数模式上,3种活动模式都不可能达到你想要的效果,因为比较寄存器总是不断的和计数器TA进行比较,然后相同时产生中断,所以你的想法很难实现。1、如果是“增计数模式”,那么TAR可以增计数到CCR0的值,然后复位为0,再开始新一轮的计数,在此期间一旦有CCR1\/2\/3\/4\/5\/6之一与...

我想利用msp430定时器,每隔2ms产生一个中断就行,不知道如何设置初值...
_EINT();设置msp430主频为8MHz,定时器使用MCLK,8分频,然后设置以上即可。你的情况可以在 pragma vector = TIMERA0_VECTOR __interrupt void Timer_A(void){ flag=1;} 中设置控制位,在主程序中设置循环。比如主程序中加入 while(1){ if(flag){ flag=0;} } 这样就可以实现每隔2ms对数码管...

MSP430 这个程序为什么不能进入中断 ,QQ370704851
程序没错,应是可以进中断,你可能用的IAR软件仿真。IAR软件仿真,若要用定时A中断,需设置simulator\\interrupt setup...,添加定时A中断。

MSP430程序中 case 0: TACTL &=~ (ID0 + ID1); TACTL |= ID_3; brea...
Timer A0中断服务程序的作用就是在每次定时器计数完一轮后CCR1加500,一直加到50000时CCR1清零重新计数。TAIV是定时器A的向量寄存器,里面有3位用来存放中断向量特征值,Timer A1 中断服务程序中就是根据这3位中断向量特征值来分情况,确定中断源(2对应捕获比较器1和TACCIFG1,4对应捕获比较器2和TACCI...

相似回答