电子说
本文主要是关于51单片机复位的相关介绍,并着重对51单片机复位方法及其原理进行了详尽的阐述。
这就好比开启了看门狗但没有喂狗
单元负载能力不足
电源不稳定
干扰
程序错误导致软件指令复位
还有最重要的:内存溢出,如下:
在只有128byte内存的单片机里面定义过多的全局变量并且其中有指针变量的话,非常容易出现干扰到堆栈指针SP,导致程序异常。
IO接口只能通过直接访问高128字节才能写入或读出数值,无法通过指针等其他途径访问。
所以当前情况很有可能是内存溢出导致单片机不断在重启。
当内存超过128yte的情况下在编译的时候编译器会提示内存不足。
在256byte的单片机中可以通过idata使用高128byte内存,通常一些不常用的变量。
尽量使用局部变量提高内存使用效率。
复位电路的工作原理
在书本上有介绍,51单片机要复位只需要在第9引脚接个高电平持续2us就可以实现,那这个过程是如何实现的呢?在单片机系统中,系统上电启动的时候复位一次,当按键按下的时候系统再次复位,如果释放后再按下,系统还会复位。所以可以通过按键的断开和闭合在运行的系统中控制其复位。
开机的时候为什么为复位
在电路图中,电容的的大小是10uf,电阻的大小是10k。所以根据公式,可以算出电容充电到电源电压的0.7倍(单片机的电源是5V,所以充电到0.7倍即为3.5V),需要的时间是10K*10UF=0.1S。也就是说在电脑启动的0.1S内,电容两端的电压时在0~3.5V增加。这个时候10K电阻两端的电压为从5~1.5V减少(串联电路各处电压之和为总电压)。所以在0.1S内,RST引脚所接收到的电压是5V~1.5V。在5V正常工作的51单片机中小于1.5V的电压信号为低电平信号,而大于1.5V的电压信号为高电平信号。所以在开机0.1S内,单片机系统自动复位(RST引脚接收到的高电平信号时间为0.1S左右)。
按键按下的时候为什么会复位
在单片机启动0.1S后,电容C两端的电压持续充电为5V,这是时候10K电阻两端的电压接近于0V,RST处于低电平所以系统正常工作。当按键按下的时候,开关导通,这个时候电容两端形成了一个回路,电容被短路,所以在按键按下的这个过程中,电容开始释放之前充的电量。随着时间的推移,电容的电压在0.1S内,从5V释放到变为了1.5V,甚至更小。根据串联电路电压为各处之和,这个时候10K电阻两端的电压为3.5V,甚至更大,所以RST引脚又接收到高电平。单片机系统自动复位。
总结:
1、复位电路的原理是单片机RST引脚接收到2US以上的电平信号,只要保证电容的充放电时间大于2US,即可实现复位,所以电路中的电容值是可以改变的。
2、按键按下系统复位,是电容处于一个短路电路中,释放了所有的电能,电阻两端的电压增加引起的。
51单片机有五种常用的复位方法:
1.上电制动复位,注意:只要电源的的上升时间不超过1ms,就可以实现自动上电复位。
2.软件复位,注意:复位信号保持时间是编程人员预定的时间。
3.按键电平复位,注意:复位信号保持时间大于2个时钟周期。
4.外部脉冲复位,注意:复位信号保持时间大于2个时钟周期。
5.看门狗溢出复位,注意:复位信号保持时间也是编程人员预定的时间。
【MCS-51单片机地址指针程序设置方法】
下面以数据块传送子程序为例,说明R0和R1对外接RAM间接寻址的程序设计方法。假定数据块的源首地址为1000H,目的首地址为3045H,数据块长度为50H,程序清单如下所示:
程序1—用DPTR做地址指针
MOV R2,#00H
MOV R3,#10H
MOV R4,45H
MOV R5,#30H
MOV R7,#50H
LOOP: MOV DPL,R2
MOV DPH,R3
MOVX A,@DPTR
INC DPTR
MOV R2,DPL
MOV R3,DPH
MOV DPL,R4
MOV DPH,R5
MOVX @DPTR,A
INC DPTR
MOV R4,DPL
MOV R5,DPH
DJNZ R7,LOOP
RET
程序2—使用R0和R1做地址指针
MOV DPTR,#1000H
MOV P2,#30H
MOV R0,#45H
MOV R7,#50H
LOOP: MOVX A,@DPTR
MOVX @R0,A
INC DPTR
INC R0
DJNZ R7,LOOP
RET
程序1用了19条指令,程序2用了10条指令。适当应用R0和R1地址指针,可以大大提高程序运行效率。
关于51单片机复位的相关介绍就到这了,如有不足之处欢迎指正。
全部0条评论
快来发表一下你的评论吧 !