51单片机中用中断程序关闭别的中断

作者&投稿:长修 (若有异议请与网页底部的电邮联系)
~ 理论上没问题,只要你利用好堆栈中保存的返回地址,以及处理好现场恢复的问题就行。其实,操作系统中的抢占式多任务的任务切换也是这么做的。
不过我觉得你更应该从程序算法上找办法去避免那个死循环,这才是正确的思路与方向。
关于补充:直接reti的话肯定是返回到被定时器中断的地方,但是你可以先从堆栈中弹出定时中断压入的返回地址以及保护现场所压入的内容,这样堆栈就恢复成死循环那个中断的状态了(要保证定时器中断发生在死循环中,否则就乱套了,可以通过标志加以判断),这时你再执行reti,就相当于死循环那个中断的返回了。
其实还有更简单的办法:进入死循环那个中断这后立即将SP保存到一个内存变量中,定时器中断中判断发生了死循环,就将那个变量的值再恢复给SP,然后执行reti。当然该方法要求中断服务程序是不可重入的,这对单片机来说一般不是问题。
最后,再一次提醒你,死循环是不对的,应该从这方面多想想解决办法。上面的回答只是针对你的问题提供一个思路而已。


单片机查询工作方式和中断工作方式有什么不同,编程时有什么区别_百度知 ...
单片机在操作外部设备时,常用的有中断和查询两种方式。1、工作方式不同;查询方式:发送数据——先发后查;接收数据——先查后收。 中断方式:发送数据——发送、等待中断、中断中发送;接收数据——等待中断、在中断中接收 中断方式,是事件触发的,换言之只要有事件产生都会进入中断,并且取得最优...

stc15单片机串行口1的中断源有几个
stc15单片机串行口1有14个中断源。根据查询相关公开信息显示:STC15F2K60S2系列单片机提供14个中断源1、外部中断5个。

单片机中断程序做一个一毫秒方波输出程序
说的比较笼统:1、单片机中断定时可以实现,你选择的晶振是多少?2、是51单片机吗?下面给你一个T=1ms的51单片机晶振是11.0592M的参考程序,希望对你有用。void Init(void)\/\/声明中断定时初始化 { EA=1;\/\/中断总开关 TMOD=0x01;\/\/T0工作模式是方式1 ET0=1;TH0=0xfc; \/\/定义初始值0.5ms ...

在用51编程时,可不可以在中断函数里关掉当前中断并且打开或关上定时器...
1 2015-05-06 51单片机外部中断和定时器中断都开了,进入外部中断后,将外部... 7 2013-03-26 51单片机 delay函数过程中,定时器中断是否还在记数? 5 2014-04-26 51单片机如何用外部中断来停止定时器的工作,然后再用此中断程... 3 2013-04-28 51单片机中 定时器定时到了,进入中断 5 2009-02-02...

51单片机中有哪些中断源?
mcs-51单片机有5个中断源,分别为:1、外部中断0(INT0):默认中断级别最高,中断入口地址0003H;2、定时\/计数器0(T1):默认中断级别第2,中断入口地址000BH;3、外部中断1(INT1):默认中断级别第3,中断入口地址0013H;4、串行口中断(TX\/RX):默认中断级别第4,中断入口地址0023H;5、...

帮我解释一下单片机定时中断程序,每一条语句的详细详细含义。比如TMOD...
TR是定时器启动位,TR0和TR1分别对应T0和T1,TR=1时定时器启动,TR=0时停止。这里要注意,前面说的门控位,如果门控位为1,则定时器的启动除TR=1以外,还要求INTx引脚输入1。ET0可以理解为T0的中断开关,只有ET0=1的时候,T0才可能输出中断。EA则是中断的总开关,EA=0的时候,所有的中断都...

单片机中断结束后从哪main函数从头开始执行吗?还是回到while(1);那里...
是回到while循环那里。循环结构允许重复执行一行或几行代码。VisualBasic支持的循环结构有Do…Loop、For…Next和ForEach…Next结构。用Do循环重复执行一个语句块,且重复次数不定。Do…Loop语句有几种演变形式,但每种形式都以计算数值为条件以决定是否继续执行。和判定结构一样,条件必须是一个数值或者值为...

单片机C语言编程的中断号是指代什么意义啊?如:void timer1() interrupt...
4---串口中断 ---0023H 5---定时器2--- 002BH (at89s52)当中断发生时,单片机能识别是哪个中断,然后跳到相应相应的中断向量(该处是一条跳转指令,跳到中断服务程序),接着跳到中断服务程序去执行

51单片机编程 采用中断方式循环发送一组字符
;;主控程序 START:MOV SCON,#50H;8位数据,可变波特率9600bps@11.0592MHz ANL PCON,#7FH;波特率不倍速 MOV TMOD,#20H;定时器1工作于方式2 MOV TL1,#0FDH;设定定时初值 MOV TH1,#0FDH;设定定时器重装值 ;MOV SP,#80H;设置堆栈 SETB TR1;启动定时器1 CLR ET1;禁止定时器1中断 SETB ES;...

单片机编写一段对中断系统初始化程序,使之允许INt0、INt1、t0串行口中...
MOV IE, #10010111BMOV IP, #00010000BEND

滕州市19137243305: 51单片机中用中断程序关闭别的中断 -
云征新鱼: 理论上没问题,只要你利用好堆栈中保存的返回地址,以及处理好现场恢复的问题就行.其实,操作系统中的抢占式多任务的任务切换也是这么做的.不过我觉得你更应该从程序算法上找办法去避免那个死循环,这才是正确的思路与方向. 关于...

滕州市19137243305: 急求C程序!!51单片机怎么在外部中断程序中关闭外部中断. -
云征新鱼: 您好: 你的程序中关不到外部中断的原因是你的主函数中有一句 EX1=1; ,你在中断中关了中断,但一进入主函数又开了,所以等于没有关.解决的方法为:在主函数里加一句程序,如下:main() { EA=1;EX1=1;TCON=0x04;while(1); }希望可以帮到您.

滕州市19137243305: 51单片机能不能外部中断里面关掉该外部中断 -
云征新鱼: 可以,有两种方法:1:EA=0;关闭总中断;2:EX0=0;//关闭外部中断0 EX1=0;//关闭外部中断1

滕州市19137243305: 51单片机如何用外部中断来停止定时器的工作,然后再用此中断程序来实现中断返回? -
云征新鱼: 利用一个变量做标志来做处理,外部中断出发后将这个标志置1,然后在主函数里面判断这个变量,如果标志为1,那么TR0或者TR1就等于1(运行定时器),再次出发外部中断后,标志置0,此时标志为0,那么TR0,TR1等于0(停止运行定时器). 在外部中断函数中可以如设置一个全局变量为标志位 static bit FLAG=0; 然后 FLAG=!FLAG 就可以完整出发外部中断后的标志位切换.

滕州市19137243305: 51单片机可以在中断服务程序中禁止本中断吗 -
云征新鱼: 当然可以啊.只是要在发送完成后(或其他地方)再把ES置1,否则就不能再用中断接收了.

滕州市19137243305: 51单片机用两个按键 一个产生中断 一个消除中断 程序怎么写 -
云征新鱼: 消除中断的这个可以设为高优先级中断,当有中断发生时,把原来的中断停住,并出栈两次(将本次保护的PC丢弃),然后正常返回即可.

滕州市19137243305: 单片机: 关闭所有中断,最简单的方法是用一条什么指令 -
云征新鱼: EA是总中断.直接SETB 就是开了所有中断,再开相关的位则可以开启对应的中断.关闭时,不管你开了几个中断.直接将EA清零则关闭所有中断.希望可以帮到你.

滕州市19137243305: 单片机中的开中断,关中断是什么意思? -
云征新鱼: 中断是指单片机在运行别的代码是,系统可以通过中断方式打断连续的运行,先运行中断服务函数,开中断就是指系统可以在连续运行是中断,去运行中断服务函数,关中断就是指关闭系统中断,不允许系统打断连续的运行.

滕州市19137243305: 请问51单片机能不能暂停中断程序并跳转至其它程序中、执行完后跳回中断继续执行中断 -
云征新鱼: 严格说起来,从中断程序跳转到其他程序执行一段时间,然后再返回中断,这个是可以做到的.实事上,嵌入式的操作系统的时间片轮转,就是用定时中断,进入定时中断判断并切换上下文,切换到别的任务,执行一段时间再返回原来的流程继续执行.但请注意,正常设计程序时,不要这么做.如果遇到程序中需要用到这种流程控制,有两个办法,1. 重新设计流程,2. 使用嵌入式操作系统.

滕州市19137243305: c51单片机如何使用中断 -
云征新鱼: 将按键接到P3.2(INT0)或P3.3(INT1) main(){EA=1; //EA总中断控制,EA=0关,EA=1开EX0=1;//INT0中断控制.0关1开,按键接P3.2用这个EX1=1;//INT1中断控制.0关1开,按键接P3.3用这个//默认情况下,直接使EX0=1或EX1=1来打开中...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网