您的位置 首页 ADAS

关于单片机的软复位

一、数组定位main(){unsignedcharcoderst[]={0xe4,0xc0,0xe0,0xc0,0xe0,0x32};//复位代码(*((void(*)())(rst)))();//执

一、数组定位

main()
{
unsignedcharcoderst[]={0xe4,0xc0,0xe0,0xc0,0xe0,0x32};//复位代码
(*((void(*)())(rst)))();//履行上一行代码,将rst数组当函数调用
}
原本我告知他嵌入如下代码:
clra
pushacc
pushacc
reti
成果他却玩了前面哪一段,而数组rst[]中的内容恰恰是上面的汇编机器码,他的做法是将
rst数组的数据当作代码保存,然后选用肯定地址办法指向该数组,将该数组中的代码当作
函数来运转。竟然经过了!

l单片机复位的更好办法
帖子中汇编言语解说如下:
clra//铲除ACC=0
pushacc//压0到仓库——8位
pushacc//再压0到仓库——再8位
reti//回来到0地址,然后履行。
本句的剖析办法同上,但愈加精粹,没有剩余的汇编句子。

软件复位跟真正上电复位有很大不同:上电复位时大部分寄存器都有确认的复位值;软件
复位则只相当于从0地址开端履行罢了,寄存器不会变为确认的复位值。

例:修正犯错处理如下:
ERR: CLR EA ;正确的软件复位进口
MOV 66H,#0AAH ;重建上电标志
MOV 67H,#55H
MOV DPTR,#ERR1 ;预备第一次回来地址
PUSH DPL
PUSH DPH
RETI ;铲除高档中止激活标志
ERR1: CLR A
PUSH ACC
PUSH ACC
RETI ;铲除初级中止激活标志
这时,有必要履行两次RETI,才干抵达0000H,以保证铲除悉数中止激活标志,到达和硬件复位相同的作用。相同,软件陷井也有必要由下列三条指令
NOP
NOP
LJMP STAT
改成:
NOP
NOP
LJMP ERR
才干到达意图。
当主程序遭到搅扰被软件圈套捕获时,中止标志并未置位,履行ERR过程中,RETI指令等效于RET指令,相同能够到达软件复位的意图。有爱好的读者能够将软件圈套代替死循环,别离用LJMP STAT和LJMP ERR1来代替LJMP ERR,再将搅扰检测别离设在初级中止和主程序中,试验成果必定证明同:只要LJMP ERR才干万无一失地完成软件复位,使体系脱节搅扰同,康复正常。在MCS-51单片机的软件复位过程中,有必要接连履行两次中止回来指令RETI才干保证体系康复正常。

2、C言语复位

void reset (void){((void (code *) (void)) 0x0000) ();

复位程序并不能铲除8051的中止体系和某些8051的外围设备,当您在中止程序中调用上面的软件复位程序后,中止将再不能触发。因而,以上的软复位程序不能在中止子程序中调用。

能够运用下面的程序跳到0000H完成软复位,下面的程序实际上是一个函数指针,指针指向了0000H地址。((void (code *) (void)) 0x0000) ();

下面的比如将完成软件自复位
void reset (void)
{
((void (code *) (void)) 0x0000) ();
}
void main (void)
{
reset ();
}

你或许注意到以上的软复位程序并不能铲除8051的中止体系和某些8051的外围设备,当您在中止程序中调用上面的软件复位程序后,中止将再不能触发。因而,以上的软复位程序不能在中止子程序中调用。

下面的小段汇编函数能够在中止程序或主程序中调用,该函数将0x0000压栈,然后经过“RETI”出栈,这将铲除中止环境并让程序从0000H重新开端运转。

?PR?RESET  SEGMENT CODERSEG ?PR?RESET
; C prototype:  void reset (void);PUBLIC resetreset: POP  ACC  ; pop return addressPOP  ACCCLR  A    ; push 0 as newPUSH ACC  ; return address to stackPUSH ACCRETI      ; execute return of interruptEND以上程序在挑选bank 0寄存器组时作业杰出,假设挑选的不是bank0寄存器组,那么或许无法取得意料的成果。你应该在以上的程序或发动代码中加上“MOV PSW, #0”来挑选bank 0寄存器组。

我的软复位,用了多年没问题
clrEA
callreset
callreset;用了多少中止优先级,就调用几回reset
jmpstart;跳转至0000h

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/adas/266974.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部