找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2051|回复: 8
打印 上一主题 下一主题
收起左侧

单片机外部中斷為何會自行停止執行

[复制链接]
跳转到指定楼层
楼主
ID:241231 发表于 2017-10-20 11:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
是因為外部中斷有時間上的限制,必須在限制的時間內處理完中斷中的資料,或者是因為中斷中的code和指令下的太多造成自行停止執行的現象.
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:241468 发表于 2017-10-21 01:29 | 只看该作者
处理完后,有没有清除中断标志位?
回复

使用道具 举报

板凳
ID:241468 发表于 2017-10-21 01:31 | 只看该作者
处理完中断后,有没有清楚中断标志位呢
回复

使用道具 举报

地板
ID:213173 发表于 2017-10-21 07:43 | 只看该作者
51单片机对于外部中断响应没有时间限制,只对触发信号要求应至少维持2个系统时钟。当外部中断服务程序被响应后,中断请求标志位会自动被清0。不过在实际应用中不宜在中断服务程序里执行过多指令。
回复

使用道具 举报

5#
ID:241231 发表于 2017-10-21 07:58 | 只看该作者
在中斷一開始就己經清除中斷標誌了,但不知為什麼就是不能將整個中斷完整的處理完成,是否是因為回圈太大(8*8),或者是中斷程式有其它的限制還是有什麼特別的指令要下呢?
回复

使用道具 举报

6#
ID:111634 发表于 2017-10-21 08:00 | 只看该作者
外部中斷没有時間上的限制,取决于电路结构和程序编制!
回复

使用道具 举报

7#
ID:105206 发表于 2017-10-21 08:23 | 只看该作者
应该是你的程序有问题。看看外部中断的相关资料,只有几个指令。
回复

使用道具 举报

8#
ID:241231 发表于 2017-10-21 09:38 | 只看该作者
jubaolun 发表于 2017-10-21 08:23
应该是你的程序有问题。看看外部中断的相关资料,只有几个指令。

我的回圈一開始是4*8,因發現抓的資料不足以判段,故增加致8*8,中斷程式就停滯了,一開始我也認為可能是回圈太大了,我降回5*8,也還是不行,只有4*8程式才能正常運行,以上請悉知.
回复

使用道具 举报

9#
ID:241231 发表于 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
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表