微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 外部中断的问题 新手求大神

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

时间:10-02 整理:3721RD 点击:
程序实现:数码管从1到F不断的计数,外部中断P3.2输入低电平是,D1点亮,数码管停止计数;低电平撤销后,D1不亮,数码管继续计数。
问题1是,我用的是低电平触发方式,数码管并没有停止计数,只是计数变慢了很多。


数码管停止计数是通过什么来实现的?你外部中断里的“P1=0xFE;”是想实现什么的?

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

虽然执行了中断但是 你的主程序仍然在不停执行  所以 在主程序中加个标志位来检测中断  

目测         程序问题    但是我也不知道怎么改    但是看起来的确是你程序问题

主程序,问题,编程逻辑,思路不明确,你可以参考http://wenku.baidu.com/link?url= ... CxNP87lPsKvDyKFyHkm

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

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

要实现你需要的这个功能,不适合使用中断方式。在中断例程中判断,等待输入变成高电平后再返回,可以实现此功能,但是在这种情况下用中断,比较牵强;
数码管没有停止计数,是因为你没有在任何地方判断P3.2是否输入了低电平,然后停止计数;
计数变慢很多,是因为一有低电平输入,就开始中断执行过程,在中断中将D1点亮后,中断例程就返回了;
然后因为输入一直保持低电平,所以就会造成主程序进入51单片机调试机制的单步执行:‘中断返回后,最少执行一条语句,才会重新执行中断’;所以此时主程序每执行一条语句,就立即执行中断例程;
因为执行一次中断例程的时间多于明显多于主程序一条指令的时间,所以你会感觉到计数慢了很多;
实际上输入低电平时你的D1并不是持续点亮的,自己思考一下是为什么吧!

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

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

谢谢我看懂了,再试看看

程序有问题啊

en  说的有道理  中断用好

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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top