就430一个中断问题啊,困扰我好几天了!求助!

2019-07-15 16:54发布

功能:用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


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
6条回答
sdtachenmeng
2019-07-15 19:31
你的i没有定义初始值,而且你要是用增计数模式的话好像CCR0重新加载初值,你的那个判断3s好像没意义,不知道说的对不对,我这几天也是刚入手430,说的不对的地方还请多多保函,共同学习吧

一周热门 更多>