51单片机采用外部中断tiao执行完中断程序几十秒才返回主程序

51单片机采用外部中断tiao执行完中断程序几十秒才返回主程序任务是:在八盏流水灯依次点亮的基础上,增加两个按键,采用外部中断T1方式一工作。0中断,点亮偶数盏灯,闪烁三次。1中断... 51单片机采用外部中断tiao执行完中断程序几十秒才返回主程序任务是:在八盏流水灯依次点亮的基础上,增加两个按键,采用外部中断T1方式一工作。0中断,点亮偶数盏灯,闪烁三次。1中断,点亮奇数盏灯,闪烁三次。1比0优先级高 我出现的问题是,按下按键,中断开始,闪烁三次后,过了三十多秒后,才继续主程序,我想问的是,怎么解决这个问题,还是外部中断本来就有这个问题,大佬赶紧来 展开  

第1个回答  2020-03-30
中断处理函数要求尽可能的短,你这在中断里面有定时器延时闪灯,而且中断程序里定时器还会触发定时器中断很容易出问题
现在是有两个外部中断和一个定时器中断,你定时器用的是1,你将外部中断0的优先级设置为比1低,按优先级排:
外部中断1>外部中断0>定时器1,你在外部中断的中断程序里执行定时器延时,定时器的中断优先级根本不够,出问题也正常啊
正确的处理办法应该是将处理程序放到主函数里处理,例:定义两个标志数
bit
sw1,sw2;
如果按键1按下,就在中断里将sw1赋值1.即sw=1;
在主函数里判断sw1=1就执行闪灯程序,然后将sw1标志清除,处理完一次按键程序
按键二处理方法也一样!
实在还想用自己的方法,你就将定时器1的优先级设最高,不过这样很可能按键又无响应,因主函数里流水灯程序定时器一直在不停的中断

51单片机采用外部中断tiao执行完中断程序几十秒才返回主程序
从现象看,程序应该跑“飞”了,能回到主程序,可能是“复位”的结果,因为是中断造成的,所以,可能堆栈出了问题,看看寄存器的使用或堆栈操作是否有误。

为什么51单片机中中断程序调用住程序中0.5秒的延时会在27秒后才恢复运 ...
一进入中断总是27秒后才恢复运行,...--- 中断程序 和 主程序,共用了同一个延时程序,互相干扰,造成混乱。可以换一个工作区,方法如下:JQ:PUSH PSW SETB RS1 ;换区.MOV P2,#24H ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY POP PSW ;恢复原区 RETI ...

51单片机,我的外部中断执行后为什么回不了原来的主程序,主程序用定时...
由于外部中断改变了P1的值,使循环P1=_crol_(P1,1);的初值改变,中断后P1=0xff,流水灯循环效果没有了。考虑增加1全局变量k,让k循环,再赋值给p1 include<reg51.h> include<intrins.h> define uchar unsigned char uchar j,k; \/\/增加k保护P1状态 void Delay(){ unsigned char a,b,c;for...

51单片机,用按键实现外部中断,软件如何去抖?
外部中断的一般都是采用延时程序,而且延时程序一般是利用定时器做10~15ms的延时去抖,来实现的,而且时间不是特别精确,单片机书上和有关资料上应该都有我写一个参考一下:void DelayMS(unsigned char a){int i;for(;a>0;a--)for(i=110;i>0;i--);}延时约为a毫秒,不过不够准确,可以通过...

请问51单片机 外部中断后不能继续执行原来的程序,可能是什么原因...
有几种可能:1、你的外部中断是电平触发,当你中断执行完毕后,电平还是没有变,就等于又中断了,建议你改为边沿触发 2、你在进入中断后,没有保存现场,内存的数据乱了,结果中断完成后就回不去了 3、中断程序有问题,这要对照具体的程序才知道 ...

51单片机中断怎么跳出去继续执行主程序的问题
中断函数执行完成退出后,便自动返回主程序继续下一个指令的执行的;在中断函数里,不要做太多的事情,更不要有延时函数,除非其延时值比中断间隙要小,否则中断会乱套的;

51单片机之中断系统,外部中断
初始化的意思如图所示 实现思路 查看上方 P3第二功能各引脚功能定义 ,P3.3是外部中断1 (INT1)的外部输入引脚 编写一个程序,使得 S2按键按下 时,某个IO口(下面程序选择了P3.7这个IO口) 产生跳变沿 (由1变0)。P3.3与P3.7用跳线连接,使P3.3口与P3.7口同时产生跳变沿。

51单片机怎样外部中断后让单片机从主程序开始
用主程序入口地址替换掉外部中断服务程序保存的原返回地址就可以实现了。具体实现方法如下:EXT1:...MOV DPTR,#MAIN POP A ;弹出原返回地址 POP A PUSH DPH ;将主程序入口地址压入 PUSH DPL RETI

51单片机外部中断疑问
若是一直让程序在外部中断0中,大家也许会想到用低电平触发方式,但也只是想罢了,是不可能实现的。因为当单片机检查到中断标志位置位后,就会进入中断函数,但中断函数语句执行完后,便会退出中断,并清除中断标志位,回到原来的地方继续执行。我们也许会想,如果中断标志位一直置位,那么程序退出中断后,...

51单片机外部中断问题
如果是下降沿触发(it0=1)就只会执行一次中断程序。电平触发(it0=1)的话每次执行完中断里面的程序(只要不关闭中断)就又跳进中断里去了,不断的循环执行。循环的频率跟晶振有关,晶振的频率直接关系到单片机执行指令的速度。频率越高速度也就越快。

相似回答
大家正在搜