找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机外中断的一个奇怪问题

[复制链接]
跳转到指定楼层
楼主
ID:134430 发表于 2025-8-19 19:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题的发现:
STC89C52,程序原来使用了两个外中断,void xx() interrupt 0   //p32     void yy() interrupt 2     //p33,
一切正常,互不干扰。现在想去消一个,问题出现了。

现象:
1、保留 void xx() interrupt 2     //p33,
             按p33按钮(p33=0),运行 xx();     但是,按p32 ,同样也运行 xx();
             p32  p33  同时控制一个程序(只有一个程序)。

2、保留 void xx() interrupt 0           //p32,
             按p32, 运行 xx();    按p33后,不运行xx();   但是此后,再按p32就不能运行xx();了,  
             如果一开始先按p33, 此后按p32,也不能运行xx();  p32失效了。
             p33 控制着p32。

想不明白,请高手示教,谢谢!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:616690 发表于 2025-8-19 23:45 | 只看该作者
等号是==吧
回复

使用道具 举报

板凳
ID:1109793 发表于 2025-8-20 07:39 | 只看该作者
没看懂楼主的描述,猜测一下。
楼主的意思是删除掉一个中断服务程序是吧。
然后删除了INT0的,两个按键依然有效。删除了INT1的,则接在INT0的有效,接INT1 的开关失效了,但是INT0的开关也只能运行一次。
注意,我的描述正确率大概有70%的样子吧。
那么删除了中断服务代码后,有没有关闭相关的中断?如果没有,那么该中断依然会发生,但是没有服务代码,那就大概率是跑飞了。出现任何意外情况都有可能的。
实际上要保留一个中断服务,不用删除代码,只要关闭那个中断,就不会被执行了。
回复

使用道具 举报

地板
ID:1133081 发表于 2025-8-20 07:45 | 只看该作者
不上程序,胡猜空谈毫无意义。
回复

使用道具 举报

5#
ID:45879 发表于 2025-8-20 09:06 | 只看该作者
贴上你的完整程序
回复

使用道具 举报

6#
ID:1153607 发表于 2025-8-20 09:15 | 只看该作者
要响应信号对应的口应该保持相应电平不能变!如果响应低信号,INT0,INT1必须置于高电平,程序中途不得变更该电平,这样才能读出。感觉您后面操作了该电平于是失效了。
回复

使用道具 举报

7#
ID:844772 发表于 2025-8-20 09:29 | 只看该作者
你认为是发现了52的bug所以叙述一下现象就够了,我认为是程序问题,所以不上程序没法回答。
回复

使用道具 举报

8#
ID:384109 发表于 2025-8-20 10:26 | 只看该作者
学学51的汇编编程就懂了
回复

使用道具 举报

9#
ID:1156764 发表于 2025-8-20 15:49 | 只看该作者
“消去一个”这个表达其实很微妙呢,
是不调用但保留函数,还是指完全删除中断函数?
类似于前者,即使不调用了但是还是有几率触发的,如果想短暂不用,也不用像后者一起全部删除,
关闭中断使能才是最优解
回复

使用道具 举报

10#
ID:134430 发表于 2025-8-20 17:06 | 只看该作者
我的问题是两个外中断, 删除一个发生的 问题,不是INTO,INTI, 与程序的其他部分没有关系。
再明白点说,STC89C52有两个外中断p32和p33, 他们两个有冲突,
当用p32(也就是中断服务程序0)时,p33也能启动中断服务程序0.
当用p33  (也就是中断服务程序2)时,p33会使p32失效。

问题已经找到,是因为删除一个外中断后,忘记取消它的中断许可和触发方式设置。

谢谢大家!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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