发 帖  
原厂入驻New
[文章]

外部中断的问题 新手求大神

2014-6-8 09:46:26  1134
分享
0
程序实现:数码管从1到F不断的计数外部中断P3.2输入低电平是,D1点亮,数码管停止计数;低电平撤销后,D1不亮,数码管继续计数。
问题1是,我用的是低电平触发方式,数码管并没有停止计数,只是计数变慢了很多。

QQ截图20140608094506.jpg
王杭吉 2014-6-9 12:35:56
数码管停止计数是通过什么来实现的?你外部中断里的“P1=0xFE;”是想实现什么的?
回复

举报

ntmusic 2014-6-9 13:10:17
这个问题之前是有解释过的吧,外部中断程序不是有外部中断就一直执行外部中断程序,而是遵循中断触发-入栈-中断程序执行-出栈。而中断触发不是立即的,在触发前会执行主程序,所以你的数码管还是会变化,解决的方法很简单,在中断程序中检测中断引脚,当引脚为高时退出中断即可

评分

参与人数 1积分 +10 收起 理由
zhou2sheng + 10 感谢您的参与,您的支持是我们最大的动力.

查看全部评分

回复

举报

不吃菜的虫 2014-6-9 19:32:00
虽然执行了中断但是 你的主程序仍然在不停执行  所以 在主程序中加个标志位来检测中断  
回复

举报

刘佳文 2014-6-9 19:53:19
目测         程序问题    但是我也不知道怎么改    但是看起来的确是你程序问题
回复

举报

宋永吉 2014-6-10 11:11:24
主程序,问题,编程逻辑,思路不明确,你可以参考http://wenku.baidu.com/link?url= ... CxNP87lPsKvDyKFyHkm
回复

举报

刘益龙 2014-6-10 13:48:37
外部中断程序不是有外部中断就一直执行外部中断程序,而是遵循中断触发-入栈-中断程序执行-出栈。而中断触发不是立即的,在触发前会执行主程序,所以你的数码管还是会变化,解决的方法很简单,在中断程序中检测中断引脚,当引脚为高时退出中断即可
回复

举报

刘益龙 2014-6-10 13:49:14
外部中断程序不是有外部中断就一直执行外部中断程序,而是遵循中断触发-入栈-中断程序执行-出栈。而中断触发不是立即的,在触发前会执行主程序,所以你的数码管还是会变化,解决的方法很简单,在中断程序中检测中断引脚,当引脚为高时退出中断即可
回复

举报

程志 2014-6-11 08:13:27
要实现你需要的这个功能,不适合使用中断方式。在中断例程中判断,等待输入变成高电平后再返回,可以实现此功能,但是在这种情况下用中断,比较牵强;

数码管没有停止计数,是因为你没有在任何地方判断P3.2是否输入了低电平,然后停止计数;

计数变慢很多,是因为一有低电平输入,就开始中断执行过程,在中断中将D1点亮后,中断例程就返回了;
然后因为输入一直保持低电平,所以就会造成主程序进入51单片机调试机制的单步执行‘中断返回后,最少执行一条语句,才会重新执行中断’;所以此时主程序每执行一条语句,就立即执行中断例程;
因为执行一次中断例程的时间多于明显多于主程序一条指令的时间,所以你会感觉到计数慢了很多;

实际上输入低电平时你的D1并不是持续点亮的,自己思考一下是为什么吧!
回复

举报

jerome_yao 2014-6-11 11:22:12


天南星雨 发表于 2014-6-9 12:35
数码管停止计数是通过什么来实现的?你外部中断里的“P1=0xFE;”是想实现什么的? ...



我外部中断采用了电平触发方式,而P1=0xfe是为了点亮D0发光二极管。因为电平触发方式,当点亮二极管是,数码管应该是停止的,至于为什么我不知道,是当时学习视频教的
回复

举报

jerome_yao 2014-6-11 11:26:47


ntmusic 发表于 2014-6-9 13:10
这个问题之前是有解释过的吧,外部中断程序不是有外部中断就一直执行外部中断程序,而是遵循中断触发-入栈- ...



谢谢好像这样解释挺有道理的,再试试看
回复

举报

jerome_yao 2014-6-11 11:32:21


woodmice 发表于 2014-6-11 08:13
要实现你需要的这个功能,不适合使用中断方式。在中断例程中判断,等待输入变成高电平后再返回,可以实现此 ...



谢谢我看懂了,再试看看
回复

举报

黄朝松 2014-6-12 16:56:37
程序有问题啊
回复

举报

方军 2014-6-12 17:30:54
en  说的有道理  中断用好
回复

举报

wang870039239 2014-6-13 14:26:06
while语句里写了1,这程序就停不下了。。。。就算中断了,晚完了程序又得跑while,建议while条件整个标志,中断时对标志处理就行了。同时要注意,电平方式触发中断一定要即使利用硬件拉高中断引脚电平,不然会一直中断。。。就可能有你说的问题了
回复

举报

评论

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
发文章
快速回复 返回顶部 返回列表