功能:用tiMERA0实现1s中断,在中断函数里做一个3S到达判断,然后对P2端口状态取反(LED显示)
运行结果:当直接在中断函数内对端口对端口状态取反时,运行正常。(注:在主函数内执行了P2OUT = 0XFF;这句时,LED灯亮的时间极短,远不到一秒)当在中断函数内添加了IF判断语句后,端口无反应。
找了几天也没有找到原因,求援助啊
#include "MSP430X14X.h"
//1s定时初始化
void D1S_Init()
{
TACTL = TASSEL_1+TACLR;//ACLK clr TAR
TACTL |= TAIE;//中断允许
//设置定时时间
TACCTL0 &= ~CCIFG;//CLR CCIFG
TACCR0 = 32767;//ACLK=32.768 1S定时
TACCTL0 = CCIE;//捕获/比较中断允许
TACTL |= MC_1;//增计数模式,启动定时器
//_EINT();
}
void LED_Out()
{
static unsigned char i;
//P2OUT ^= 0XFF;//中断(1s)LED闪烁
i++;
if(i==3)
{
P2OUT ^= 0XFF;//中断(1s)LED闪烁
i=0;
}
}
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
P2DIR = 0XFF;//输出 led
//P2OUT = 0XFF;//编译加上这句,中断时LED只亮一瞬间(亮时远不足一秒)
D1S_Init();
_EINT();
while(1);
}
#pragma vector = TIMERA0_VECTOR
__interrupt void TIMERA0_ISR()
{
LED_Out();
} 难道就没有大神能解决这个问题了吗file:///C:/Users/CLlop/AppData/Local/Temp/E9BIPM$_%609%7D%60VS07%60VD9H1F.giffile:///C:/Users/CLlop/AppData/Local/Temp/E9BIPM$_%609%7D%60VS07%60VD9H1F.gif我只是定时1S中断,再在定时中断函数你加了一个if判断有三次中断就让端口状态取反,为什么为什么file:///C:/Users/CLlop/AppData/Local/Temp/WZ%7B83]Z~ZZ~%60NP18]4ZUKBE.giffile:///C:/Users/CLlop/AppData/Local/Temp/WZ%7B83]Z~ZZ~%60NP18]4ZUKBE.gif就执行不正常了。。。。。。求援助!file:///C:/Users/CLlop/AppData/Local/Temp/E9BIPM$_%609%7D%60VS07%60VD9H1F.giffile:///C:/Users/CLlop/AppData/Local/Temp/E9BIPM$_%609%7D%60VS07%60VD9H1F.gif
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>