单片机c51中断后返回主函数开始的程序

别回答用goto了,goto不能函数之间跳转,可以用c与汇编混编

中断函数,可以用汇编语言编写。

结束返回前:
……
CLR A
PUSH ACC ;压入 00
PUSH ACC ;压入 00
RETI ;返回到 0000H

即可。追问

这样做中断改变的全局变量会变回默认值吗?

追答

就是从 0000H 开始执行,类似于复位的效果。
基本上,和上电复位,效果相同。

你的程序,如果是用 C 编写的,在开始阶段,有比较完善初始化部分。

之后,才进入你的主函数。

那么,你原来,从上电开始执行时,是什么样子?
现在,就是什么样子。
--------------------
如果,你的单片机有看门狗,就更简单了。
在一段时间内,不喂狗,将会自动重启,从 0000H 执行程序。

追问

那有没有方法可以既保留变量,又回到主函数开始或者某个子函数开始,我网上查找的资料都是说用jmp跳转,但是不会

追答

现在,编程课程,都是讲一个函数、一个函数的执行。
干这个活的时候,就不理会其它的任务。
这样的程序格式,不适于全面、综合处理的思路。
----------------------
可以把定时器,设定在 5ms 中断一次。
每次中断,全面检测各个状态,满足哪个条件,就执行一小段程序。

就像动态显示,每中断一次,就显示一位,也用不上几个微秒;
余下的时间,可以干别的。

这就造成了一个多任务环境。
主函数,就不用写很多的东西,初始化一下,就行了。

追问

按键——主程序——选择数字——播放音乐
音乐是一定时间的,中断是改变数字,现在的问题是要等播完一首歌才能下一首,我想要的是马上更换另一首

追答

这不太简单了吗?

播放乐曲,通常是一个、一个的,读取音符数据,进行播放。
读到某某字符,就结束本曲子。

在读取音符的程序中,加上一句:
检测按键状态,...
有按键,就结束本曲子。没有,就正常播放。

温馨提示:内容为网友见解,仅供参考
无其他回答

单片机c51中断后返回主函数开始的程序
PUSH ACC ;压入 00 PUSH ACC ;压入 00 RETI ;返回到 0000H 即可。

C51在多级中断中强行跳回主函数的方法
在进入第二级中断的时候,已经保护了两个地方的现场,在退出的时候你想跳过那个低级中断。只能对栈进行操作,这个时候要用。也就是在第二级运行结束后,直接去调用第一级中断所保护的现场(用汇编完成)。这个时候中断不是自动返回,而是你的汇编操作返回,就可以直接进入到主函数中。很复杂的。 :(...

...1.程序执行完main函数后会自动跳转到main函数开始重新执行。2.在程 ...
1. 正式产品的C51程序应该是一个死循环。如果不是死循环,执行完main后,执行RET,将会将堆栈里的数据当做地址压入PC,程序跑错。最后会回到地址0000H,重新开始,进入main。你仿真在00H做中断,就会发现他回去了。2. 你说的不清楚,跳转还是会跳转的。程序运行结果正确就说明没有错。除非你程序错误。

c51 单片机编程中断问题,中断后不能继续返回main函数,哪位高手看一下...
void int1_srv() interrupt 2\/\/INT1中断服务函数,中断向量标号2 { my_delay_10ms(1);\/\/延时消抖 KEY_BIT = 1;\/\/读MCS51的IO口之前要先对其置1 if(KEY_BIT == 0)\/\/按键仍然是按下状态 { \/\/while(KEY_BIT == 0);\/\/等待按键抬起 这部分就不用了。使用边沿触发,不必在等待按键抬起...

单片机上电后程序从哪开始执行
也就是相当于对单片机执行一些简单的初始化,单片机开始执行的时候是从地址0000H开始的,你编写的程序不可能存放在0000H的地址,51单片机的前多少个地址要求保留的,存放一些中断向量;芯片资料上有,如果没记错的话应该是下面这样 ORG 0000H JUMP main ORG 0100H ...程序 ...

...中main函数外面实行中断。中断之后怎么把中断得到
你只要开了总中断和具体的中断,当满足中断发生条件时,单片机就会发生中断并能检测到,接着从main函数跳到中断服务程序中去执行,执行完后返回到被 中断的位置

...1.程序执行完main函数后会自动跳转到main函数开始重新执行。2.在程 ...
那你选stc的51单片机,其内部都带eeprom,不需要扩展外部flash,至少也有1k两个扇区的空间供你使用,可保你数据部丢失。

C51调用嵌入汇编程序运行到RET总是返回到程序开始执行,子程序为清51...
这是牵扯C51单片机内部RAM多用问题,牵扯到寄存器R0---R7,堆栈区问题。程序调用子程序时,把返回主程序时执行指令的地址存入堆栈内(内部RAM),堆栈地址由sp指定,如果你把内部RAM清零了,子程序返回时,返回地址就为0x0000H,即从新转入程序入口。MOV R0,#255 CLR A IDATA_LOOP: MOV ...

C51中断函数在什么情况下被调用
一、中断函数的调用 中断函数是硬件或者操作系统自动调用的,也就是说只要满足触发条件,就会自动调用中断函数(此时主函数是停止的)。当中断函数执行完毕,又返回主函数继续执行主函数。然后这样不断的循环,反正只要是触发中断的条件一满足。就会自动进入中断(前提是你的中断的配置是正确的)二、中断函数...

C51单片机中 为什么定时器0中断执行完后会进入delay函数
中断执行完后是会回到程序进入中断的时候,只能说你进中断的时候正好在delay函数运行的时候。

相似回答