|
用的是msp430f149,用定时器模拟脉冲,使端口高低电平切换,中断只做自加,主程序死循环中做处理,现在问题就是程序一直在中断中,不跳出来进入主程序中。代买如下
#include <msp430x14x.h>
#define Beep_on P4OUT&=~(BIT2+BIT1+BIT3);
#define Beep_OFF P4OUT|=(BIT2+BIT1+BIT3);
unsigned char beep_flag=1;
unsigned int beep_timer;
uint beep_timer_temp = 500;
void Clock_init()
{
unsigned char iq0;
BCSCTL1 = RSEL0 + RSEL1 + RSEL2; // XT2on, max RSEL
BCSCTL1&=~XT2OFF; //打开XT2振荡器
do
{
IFG1 &= ~OFIFG; // 清除振荡器失效标志
for (iq0 = 255; iq0 > 0; iq0--); // 延时,等待XT2起振
}
while ((IFG1 & OFIFG) != 0); // 判断XT2是否起振
BCSCTL2 |= SELS+SELM_2; // SMCLK = XT2
}
void timerA_init()
{
CCTL0 = CCIE; // CCR0 interrupt enabled
CCR0 = 5; // 晶振8M
TACTL = TASSEL_2 + MC_1+TACLR; // SMCLK, upmode
}
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
Clock_init();
P4DIR |= (BIT2+BIT1+BIT3); // P1.0 output
timerA_init();
_EINT();
while(1)
{
if(beep_timer == beep_timer_temp)
{
beep_timer=0;
switch(beep_flag)
{
case 1:
beep_flag=2;
//Beep_on;
P4OUT |= BIT2;
P4OUT |= BIT1;
P4OUT |= BIT3;
break;
case 2:
//Beep_OFF;
beep_flag=1;
P4OUT &= ~BIT2;
P4OUT &= ~BIT1;
P4OUT &= ~BIT3;
if(beep_timer_temp > 10)
beep_timer_temp--;
break;
default:break;
}
}
};
}
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
beep_timer++;
}
求高手指点,为什么我的程序一直在中断中不跳出来进入while(1)里面 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
|