找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

在使用单片机中断的IE和EX,遇到中断结束后无法返回

查看数: 3955 | 评论数: 9 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2019-4-21 17:34

正文摘要:

预先的设计想法 P1口接八个led,开关k1,k2分别接外部中断0 P3.2,和外部中断1 P3.3 程序执行的时候8是流水灯形式。 1)k1按下上下四个灯是交替闪烁10次 2)k2按下的是8个灯交替闪烁5次 3)设置优先级别 遇到 ...

回复

ID:155507 发表于 2019-4-22 17:59
通常在中断子程序中是不调用延时子程序的,这样会增加中断处理时间,如果有其它低级中断了,就会延误响应中断了。

所以,中断子程序中不要写调用延时子程序,中断子程序也不要写得过长,处理过多的任务,要尽快处理后及时返回,如果中断一次有很多任务需要执行完全,可以在中断子程序中设置一个标志位,在主程序中查这个标志位,当标志为1时,就在主程序中完成这些任务,这样就不会影响其它中断源的中断,也不会使中断产生混乱。

如果延时函数时间过长,则下次中断有可能不会被触发,类似按键不灵敏,还有可能因为中断和主程序都在使用延时函数,而和此相关的寄存器的值没有保存,导致延时时间出错。

评分

参与人数 1黑币 +5 收起 理由
51danpianji111 + 5 赞一个!

查看全部评分

ID:338671 发表于 2019-4-22 16:19
shuaishuaida 发表于 2019-4-22 14:01
中断需要的时间 程序不对

可不可,详细说一下呢
ID:518550 发表于 2019-4-22 14:01
中断需要的时间 程序不对
ID:462827 发表于 2019-4-22 13:36
你对中断理解得不太正确
ID:338671 发表于 2019-4-22 12:21
HC6800-ES-V2.0 发表于 2019-4-22 08:18
其实不是你说的那样。
IEx是外部中断的触发位,即当有外部中断时,这个位就由单片机置1,不是由程序置1。
...

谢谢啦,我理解的按键消抖是做出实物的的时候才需要的,仿真的时候是不需要的。
ID:123289 发表于 2019-4-22 12:16
初学者易犯的错:
中断处理程序执行时间过长!
在此期间其它比此更低级是中断都将无法响应,被执行!
ID:424408 发表于 2019-4-22 11:41
对是硬件中断响应自动判断置位
ID:164602 发表于 2019-4-22 08:18
其实不是你说的那样。
IEx是外部中断的触发位,即当有外部中断时,这个位就由单片机置1,不是由程序置1。
在外部中断的服务函数中,只需要将其置0即可,不需要再置1,置1就相当于又产生了新的外部中断。
所以,你原来的程序,只需要IEx置0,不需要最后的置1操作就好了。
我已经试过的,没问题,可以返回。

另外:由于外部中断是用按键完成的,是按键,都是需要消抖的,你没有消抖的程序,所以可能中断会发生几次才能返回主函数,我试验时,按下外部中断1的按键最多产生过三次中断。

评分

参与人数 1黑币 +10 收起 理由
51danpianji111 + 10 很给力!

查看全部评分

ID:338671 发表于 2019-4-21 17:56
压缩包里面的是仿真原理图

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

Powered by 单片机教程网

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