高人速来!!!MSP430怎么让定时器B在中断里让定时器A停止进中断呢? 我用定时器A驱动蜂鸣器用定时器B关掉

#include <msp430x14x.h>
#define uchar unsigned char
void main( void )
{
uchar i;

WDTCTL = WDTPW + WDTHOLD; //关狗

BCSCTL1 &= ~XT2OFF; //打开XT2高频晶体振荡器
do
{
IFG1 &= ~OFIFG; //清除晶振失败标志
for (i = 0xFF; i > 0; i--); //等待8MHz晶体起振
}
while ((IFG1 & OFIFG)); //晶振失效标志仍然存在?
BCSCTL2 |= SELM_2 + SELS;//MCLK和SMCLK选择高频晶

P6DIR |= BIT7; //蜂鸣器对应IO设置为输出
P2DIR|=BIT2;
P2OUT&=~BIT2;

TACCR0 = 500;
TACCTL0 |= CCIE; //使能比较中断
TACTL |= TASSEL_2 + ID_3+ MC_1; //计数时钟选择SMLK=8MHz,1/8分频后为1MHz

TBCCR0 = 4096*4 - 1; //周期4秒
TBCCTL0 |= CCIE;
TBCTL |= TBSSEL_1 + ID_3 + MC_1; //时钟源ACLK/8,up mode

_EINT();

LPM1;
}
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
P6OUT ^= BIT7;// 定时器A驱动蜂鸣器发声

}
#pragma vector=TIMERB0_VECTOR
__interrupt void Timer_B (void)
{
_DINT();
TACTL = TACLR + MC_0;
TACCTL0 &=~ CCIE;
P2OUT|=BIT2;

}

TBCCTL0 ^= CCIE; 试试把这句加在定时器B里面,看看有没有用的呢!
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-08-06
我还以为是传说中的中断嵌套呢

msp430编程定时器B的中断
假如你在进入中断函数之前,430是在LPM0下待机,若要求执行完中断函数之后进入LPM3待机,在中断函数里写MOV.B #LPM3,SR是无效的。因为在进入中断时430会把PC,SR压栈,( SR内保存着低功耗模式的设置)即使你写了MOV.B #LPM3,SR,在退出中断出栈时SR会被重新设置成低功耗0,要达到这样的目的,...

msp430单片机定时器自动跑是怎么个原理呢??求解啊!
1. Timer_A3主要由定时计数器TAR、三个捕获比较器和输出单元组成。2. 在连续计数模式下,Timer_A3的工作原理类似于公共汽车系统。3. 公共汽车的起点是TAR=0,终点是TAR=0FFFFH。4. 捕获比较器CCR0、CCR1、CCR2分别相当于每一站的车站。5. 当TAR的值与某个捕获比较器相等时,会触发相应的中断。...

msp430单片机定时器自动跑是怎么个原理呢??求解啊!
最简单的工作方式是这样的:在连续计数模式下(TA计数模式的一种),Timer_A3的运行原理有点像公共汽车,起点是定时计数器TAR=0,终点是定时计数器TAR=0FFFFH,3个捕获比较器CCR0,CCR1,CCR2就像公共汽车的每一站,TAR从0开始计数,TAR的值和哪个捕获比较器相等,这个捕获比较器就抛出一个中断,当TAR...

用IAR 编译msp430 单片机,中断一直无法通过怎么回事
并且对于芯片msp430g2553来说,io430.h中包含io430g2553.h文件

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

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

怎么用msp430F149定时器A或定时器B的比较捕获模式测试一个方波的频率...
1.一开始让430的内部定时器跑起来,你要做的就是设置定时器的时钟,是否分频,是否中断,计数模式这些。要是用到捕获模式测频率就要选择成捕获模式,还有上升沿或者下降沿捕获这些。2.之后的过程是这样的,当单片机的特殊引脚检测到你设定的触发信号之后就会立刻把当前时刻的TAR(定时器的16位计数器)中...

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

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

msp430 怎么用作间隔定时器
使用LMP3模式,则不能把SMCLK作为看门狗模式下的信号源,因为此时SMCLK不起作用,而且WDT不工作。建议要麽换用LMP0或LMP1低功耗模式,要麽将信号源改换为ACLK。

相似回答