MSP430单片机定时器溢出中断 100
用的是MSP430F2012,源代码如下#defineLEDBIT6//P1.6ucharflow_flag=0;voidinit_io(){P1DIR|=LED;//设...
用的是MSP430 F2012,源代码如下
#define LED BIT6 //P1.6
uchar flow_flag=0;
void init_io()
{
P1DIR |= LED;//设置BIT6为输出
}
void TimerA_Init(void)
{
TACTL = TASSEL1+MC0+ID1+ID0+TACLR+TAIE;
CCTL0 = CCIE;
CCR0 = 0xffff;
}
#pragma vector = TIMERA0_VECTOR
__interrupt void Timer_A(void)
{
flow_flag++;
if(flow_flag==3)
{
P1OUT^=LED;//取反,闪烁
flow_flag=0;
}
}
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
BCSCTL1 =CALBC1_1MHZ; //设定DCO为1MHZ
DCOCTL =CALBC1_1MHZ;
TimerA_Init(); //定时器初使化
init_io();
_EINT(); //开启中断
while(1);
}
问题是:在溢出中断程序中,如果只有一条“ P1OUT^=LED;”语句,则可实现LED灯正常闪烁。一旦变为上面程序中加有flow_flag变量的语句,则灯没变化,进不了中断。
不知为何 展开
#define LED BIT6 //P1.6
uchar flow_flag=0;
void init_io()
{
P1DIR |= LED;//设置BIT6为输出
}
void TimerA_Init(void)
{
TACTL = TASSEL1+MC0+ID1+ID0+TACLR+TAIE;
CCTL0 = CCIE;
CCR0 = 0xffff;
}
#pragma vector = TIMERA0_VECTOR
__interrupt void Timer_A(void)
{
flow_flag++;
if(flow_flag==3)
{
P1OUT^=LED;//取反,闪烁
flow_flag=0;
}
}
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
BCSCTL1 =CALBC1_1MHZ; //设定DCO为1MHZ
DCOCTL =CALBC1_1MHZ;
TimerA_Init(); //定时器初使化
init_io();
_EINT(); //开启中断
while(1);
}
问题是:在溢出中断程序中,如果只有一条“ P1OUT^=LED;”语句,则可实现LED灯正常闪烁。一旦变为上面程序中加有flow_flag变量的语句,则灯没变化,进不了中断。
不知为何 展开
3个回答
展开全部
你的程序有问题,,因为 flow_flag++加一次就退出中断了根本就不运行if里面的语句,不信的话你就把(flow_flag==3)改为(flow_flag==1)跟定行,所以啊,如果你坚持要用(flow_flag==3)话最好用一个for循环来写。。。。。。。。。。。。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
看了很久,没看出原因在哪里啊
要是找到了原因告诉我们啊
要是找到了原因告诉我们啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询