单片机执行完中断程序后,我想让程序再从头开始,而不是接着原来的中断点进行下去,我该怎样办?

51,C语言
2025-02-23 07:28:00
推荐回答(4个)
回答1:

硬件电路上用一个I/O口连接到复位端,然后直接在单片机的中断程序的最后加一个控制该I/O口的电平的指令就好了。或者我百度的其他人的资料:
这不是复位,只是把程序转到地址0去执行,不如用一个JMP更直接。目前可能极少数单片机或者用户已经自行添加Boot load时用户程序的程序开始地址并不为0x0000,所以需要查找这些特定单片机的启动地址。
在keil C51下面可以这样实现:
void soft_reset(void)
{
((void (code *) (void)) 0x0000) ();
}
在需要软件复位的地方使用语句:
soft_reset();
一般可实现软件复位。

回答2:

在中断返回指令前加上两句入栈指令,比如:
MOV A,#00H
PUSH ACC
PUSH ACC
RETI
这样当中断返回时自然就返回到0000H处了。

回答3:

不是从中断返回,而是产生复位一样的效果?
如果是这样,修改一下电路,从通用端(例如P1.0)连个信号到复位端,在中断程序中向P1.0置个位。

回答4:

多少时间后关掉中断。