标题: 单片机外部中斷為何會自行停止執行 [打印本页]

作者: curster2001    时间: 2017-10-20 11:46
标题: 单片机外部中斷為何會自行停止執行
是因為外部中斷有時間上的限制,必須在限制的時間內處理完中斷中的資料,或者是因為中斷中的code和指令下的太多造成自行停止執行的現象.
作者: ggjj2012    时间: 2017-10-21 01:29
处理完后,有没有清除中断标志位?
作者: ggjj2012    时间: 2017-10-21 01:31
处理完中断后,有没有清楚中断标志位呢
作者: wulin    时间: 2017-10-21 07:43
51单片机对于外部中断响应没有时间限制,只对触发信号要求应至少维持2个系统时钟。当外部中断服务程序被响应后,中断请求标志位会自动被清0。不过在实际应用中不宜在中断服务程序里执行过多指令。
作者: curster2001    时间: 2017-10-21 07:58
在中斷一開始就己經清除中斷標誌了,但不知為什麼就是不能將整個中斷完整的處理完成,是否是因為回圈太大(8*8),或者是中斷程式有其它的限制還是有什麼特別的指令要下呢?
作者: zl2168    时间: 2017-10-21 08:00
外部中斷没有時間上的限制,取决于电路结构和程序编制!
作者: jubaolun    时间: 2017-10-21 08:23
应该是你的程序有问题。看看外部中断的相关资料,只有几个指令。
作者: curster2001    时间: 2017-10-21 09:38
jubaolun 发表于 2017-10-21 08:23
应该是你的程序有问题。看看外部中断的相关资料,只有几个指令。

我的回圈一開始是4*8,因發現抓的資料不足以判段,故增加致8*8,中斷程式就停滯了,一開始我也認為可能是回圈太大了,我降回5*8,也還是不行,只有4*8程式才能正常運行,以上請悉知.
作者: curster2001    时间: 2017-10-21 17:24
wulin 发表于 2017-10-21 07:43
51单片机对于外部中断响应没有时间限制,只对触发信号要求应至少维持2个系统时钟。当外部中断服务程序被响 ...

我的程式就那麼簡單,我只是將j<4;改成j<8而己程式就不知跑去那裡了


for (j=0;j<4;j++)         //收集四组数据
{
  for (k=0;k<8;k++)        //每组数据有8位
  {
                        while (IRIN)            //等 IR 变为低电平,跳过4.5ms的前导高电平信号。
                        {delay(1);}
                        while (!IRIN)          //等 IR 变为高电平
                        {delay(1);}
                        while (IRIN)           //计算IR高电平时长
                        {
                                delay(1);
                                N++;           
                                if (N>=30)
                                {  
                                        goto ENDFO;
                                }                  //0.14ms计数过长自动离开。
      }                        //高电平计数完毕               
     IRCOM[j]=IRCOM[j] >> 1;                  //数据最高位补“0”
     if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;}  //数据最高位补“1”
     N=0;
  }//end for k
}//end for j




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1