外部中断的问题 新手求大神
问题1是,我用的是低电平触发方式,数码管并没有停止计数,只是计数变慢了很多。
数码管停止计数是通过什么来实现的?你外部中断里的“P1=0xFE;”是想实现什么的?
这个问题之前是有解释过的吧,外部中断程序不是有外部中断就一直执行外部中断程序,而是遵循中断触发-入栈-中断程序执行-出栈。而中断触发不是立即的,在触发前会执行主程序,所以你的数码管还是会变化,解决的方法很简单,在中断程序中检测中断引脚,当引脚为高时退出中断即可
虽然执行了中断但是 你的主程序仍然在不停执行 所以 在主程序中加个标志位来检测中断
目测 程序问题 但是我也不知道怎么改 但是看起来的确是你程序问题
主程序,问题,编程逻辑,思路不明确,你可以参考http://wenku.baidu.com/link?url= ... CxNP87lPsKvDyKFyHkm
外部中断程序不是有外部中断就一直执行外部中断程序,而是遵循中断触发-入栈-中断程序执行-出栈。而中断触发不是立即的,在触发前会执行主程序,所以你的数码管还是会变化,解决的方法很简单,在中断程序中检测中断引脚,当引脚为高时退出中断即可
外部中断程序不是有外部中断就一直执行外部中断程序,而是遵循中断触发-入栈-中断程序执行-出栈。而中断触发不是立即的,在触发前会执行主程序,所以你的数码管还是会变化,解决的方法很简单,在中断程序中检测中断引脚,当引脚为高时退出中断即可
要实现你需要的这个功能,不适合使用中断方式。在中断例程中判断,等待输入变成高电平后再返回,可以实现此功能,但是在这种情况下用中断,比较牵强;
数码管没有停止计数,是因为你没有在任何地方判断P3.2是否输入了低电平,然后停止计数;
计数变慢很多,是因为一有低电平输入,就开始中断执行过程,在中断中将D1点亮后,中断例程就返回了;
然后因为输入一直保持低电平,所以就会造成主程序进入51单片机调试机制的单步执行:‘中断返回后,最少执行一条语句,才会重新执行中断’;所以此时主程序每执行一条语句,就立即执行中断例程;
因为执行一次中断例程的时间多于明显多于主程序一条指令的时间,所以你会感觉到计数慢了很多;
实际上输入低电平时你的D1并不是持续点亮的,自己思考一下是为什么吧!
我外部中断采用了电平触发方式,而P1=0xfe是为了点亮D0发光二极管。因为电平触发方式,当点亮二极管是,数码管应该是停止的,至于为什么我不知道,是当时学习视频教的
谢谢好像这样解释挺有道理的,再试试看
谢谢我看懂了,再试看看
程序有问题啊
en 说的有道理 中断用好
while语句里写了1,这程序就停不下了。就算中断了,晚完了程序又得跑while,建议while条件整个标志,中断时对标志处理就行了。同时要注意,电平方式触发中断一定要即使利用硬件拉高中断引脚电平,不然会一直中断。就可能有你说的问题了