单片机死机复位程序
单片机复位电路原理图
单片机复位电路原理图单片机复位电路是单片机系统中非常重要的一部分,它能够在系统出现异常情况时将单片机恢复到初始状态,确保系统的稳定运行。
本文将介绍单片机复位电路的原理图及其工作原理。
首先,我们来看一下单片机复位电路的原理图。
如下图所示:(在这里插入原理图图片)。
在这个原理图中,我们可以看到复位电路由几个关键部分组成,电源复位电路、手动复位电路和外部复位电路。
电源复位电路是通过监测单片机供电电压的变化来实现复位的。
当电源电压低于一定数值时,复位电路会自动将单片机复位,以确保单片机在电压不稳定或者电压过低的情况下能够正常工作。
手动复位电路是由一个按钮和一个电阻组成的。
当按下按钮时,电阻的阻值会发生变化,从而触发复位电路,实现手动复位。
外部复位电路是通过外部信号来触发复位的。
当外部信号满足一定条件时,复位电路会将单片机复位,以应对外部环境的变化。
以上就是单片机复位电路的原理图及其组成部分。
接下来,我们将详细介绍这些部分的工作原理。
电源复位电路的工作原理是通过一个比较器来监测单片机供电电压的变化。
当电源电压低于一定数值时,比较器输出一个低电平信号,触发复位电路,将单片机复位。
这样可以确保在电压不稳定或者电压过低的情况下,单片机能够正常工作。
手动复位电路的工作原理是当按下按钮时,电阻的阻值会发生变化,导致复位电路触发,将单片机复位。
这样可以在系统出现异常情况时,通过手动操作来实现复位,确保系统的稳定运行。
外部复位电路的工作原理是通过外部信号来触发复位。
当外部信号满足一定条件时,复位电路会将单片机复位,以应对外部环境的变化。
这样可以在外部环境发生变化时,及时将单片机恢复到初始状态,确保系统的稳定性。
综上所述,单片机复位电路是单片机系统中非常重要的一部分,它能够在系统出现异常情况时将单片机恢复到初始状态,确保系统的稳定运行。
通过本文介绍的原理图及其工作原理,相信读者对单片机复位电路有了更深入的理解。
希望本文能够对大家有所帮助。
单片机程序复位
单片机程序复位
在单片机系统中,程序复位是指将整个系统重新启动。
程序复位后,所有的寄存器和变量将被清零,CPU开始按照规定的顺序执行复位向量地址处的代码。
当单片机系统出现故障或需要重新启动时,程序复位是必要的。
例如,当程序发生意外错误导致系统崩溃时,或者需要重新初始化某
些重要寄存器或变量时,程序复位是最常用的解决方案。
此外,在调
试或测试单片机系统时,程序复位也是一个常见的操作。
在单片机系统中,程序复位通常通过两种方式实现:硬件复位和
软件复位。
硬件复位是通过物理重置单元或通过外部复位信号来实现的,它可以迫使系统立即停止执行以前的任务,并重新开始执行初始
化代码。
软件复位是通过在程序中插入一条特殊的复位指令来实现的,它通常用于特殊的初始化任务或临时测试。
程序复位虽然是一个简单的操作,但是需要注意的是在进行程序
复位时,所有的寄存器和变量将被清零,可能会导致系统处于不稳定
的状态。
因此,在程序复位之前,应该先保存现场状态,确保系统能
够正常恢复。
同时,也需要根据具体需求选择何时进行复位,在程序
编写过程中尽量避免出现需要频繁进行复位的情况。
总之,程序复位是单片机系统中非常重要的一个操作,它能够帮
助我们解决许多问题并提高系统的稳定性。
因此,在单片机开发过程中,我们应该对程序复位有充分的了解和掌握。
单片机死机复位程序修订稿
单片机死机复位程序 WEIHUA system office room 【WEIHUA 16H-WEIHUA WEIHUA8Q8-MCS-51系统软复位的深入研究摘要在没有硬件看门狗的系统以及一些对单片机I/O口线状态高度敏感的系统中,软复位功能相当重要。
标准MCS-51以及很多常见的51内核单片机没有提供“软复位”方法。
本文分别以5lasm子程序和C51函数的形式,为MCS-51单片机系统提供完善的“软复位”方法。
关键词 MCS-51单片机软复位51asm C51引言复位是单片机的初始化操作,其作用是使单片机和系统中其他部件处于一个确定的初始状态,并从这个状态开始工作。
标准MCS-51的复位逻辑比较简单,只有通过复位引脚RST进行外部扩展。
对于具有外部看门狗芯片的系统,当单片机由于某种原因程序“跑飞”而没有按时“喂狗”,或由软件陷阱捕捉到程序运行的异常,而故意不“喂狗”时,看门狗芯片会给单片机的RST引脚提供一个复位信号,让单片机进行一次“硬”复位,以恢复程序的正常运行;有些5l内核的单片机具有片内的看门狗,或者提供可访问的寄存器实现“软件复位”。
一般实现的也都是与在RST引脚提供复位信号等价的“硬”复位。
在有些应用中,由于单片机所接外设严格依附干单片机口线的时序,甚至不允许硬件复位时对口线的复位操作;或由于系统没有外部看门狗,只能用软件监测程序运行异常并重新对单片机进行初始化操作,这时就需要所谓的“软复位”了。
在互联网上可以找到一些软复位的方法,但都不够完善或不方便使用,基于C5l的软复位更是一个难点。
本文提出一种功能完善、占用资源少的实现方法,在51asm和C51下都可方便使用。
1 “软复位”要实现的功能对于MCS-51系统,所谓“软复位”是一种由用户软件控制的复位活动,利用一系列指令来模拟硬件复位所实现的各种操作内容,并且重新从头开始执行用户程序。
其内容包括:①程序计数器PC的复位,从0000H开始执行程序;②中断优先级状态触发器的复位;③特殊功能寄存器的复位;④程序跑飞前状态的尽量恢复。
51单片机回退函数
51单片机回退函数在编写单片机(例如51单片机)程序时,我们可能会需要实现一些特殊的功能,比如“回退”或“撤销”操作。
这样的需求可能出现在需要重复试验或调整程序参数的场合。
然而,具体的实现方式会取决于你的应用需求和单片机的资源。
以下是一个简单的示例,说明如何在51单片机上实现一个基本的回退功能。
假设你有一个状态变量current_state和一个数组state_history用于保存历史状态。
每次改变current_state后,都将它保存在state_history中。
如果需要回退,就从state_history中取出一个状态并设置给current_state。
以下是一个伪代码示例:c复制代码#define MAX_HISTORY_SIZE 10// 假设current_state是一个8位的变量,用来表示当前的状态byte current_state = 0;// state_history是一个数组,用于保存历史状态byte state_history[MAX_HISTORY_SIZE];byte history_index = 0; // 历史记录的索引// 函数用于保存当前状态到历史记录中void save_current_state() {if (history_index < MAX_HISTORY_SIZE) {state_history[history_index++] = current_state;}}// 函数用于回退到之前的状态void undo() {if (history_index > 0) {current_state = state_history[--history_index];}}请注意,这个示例只是一个简单的说明,你可能需要根据自己的具体需求进行修改和扩展。
例如,你可能需要处理历史记录已满的情况,或者在保存新状态之前清空历史记录等。
此外,如果你的状态数据较大或复杂,可能需要使用更高级的数据结构或方法来保存和恢复状态。
单片机手动复位电路
单片机手动复位电路
单片机手动复位电路是一种常见的电路设计,在单片机系统中起着重要的作用。
它的主要功能是在单片机出现故障或者系统崩溃的情况下,通过手动按下复位按钮,将单片机重新启动,从而恢复系统的正常运行。
单片机手动复位电路主要包括复位按钮、电容和电阻三个基本元件。
当按下复位按钮时,电容会开始充电,直到充满后,会通过电阻将电压传递给单片机的复位引脚,从而实现复位功能。
同时,在单片机复位时,复位按钮还可以通过控制信号灯等方式提示系统管理员,以便及时发现和解决问题。
在设计单片机手动复位电路时,需要考虑多种因素,如复位时间、抗干扰性、电容和电阻的选择等,以确保电路的稳定性和可靠性。
此外,还需要根据不同的单片机类型和应用场景进行具体的电路设计和调试。
- 1 -。
单片机的软件复位(TX-1C开发板学习单片机的软件复位)
(2)“ISP_CONTR=0x20;”用软件复位到用户应用程序区(AP区),重新开始执行程序。
(3)从演示结果可看出,当数码管上的数字显示到“09”,再加一秒时,数字立即变成“00”,则说明程序复位从头开始执行了。
ISP_CONTR=01100000B,SWBS=1(选择ISP区),SWRST=1(软复位)。
本复位是整个系统复位,所有的特殊功能寄存器都会复位到初始值,I/O口也会被初始化。
用户应用程序区(AP区)指仅仅是用户自己编写的程序区。
0
0
1
22
120
21885
小于20MHz
0
0
0
43
240
43769
小于40MHz
SWBS与SWRST组合情况如下:
从用户应用程序区(AP区)软件复位并切换到用户应用程序区(AP区)开始执行程序:
}
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num++;
}
分析:
(1)“sfr ISP_CONTR=0xe7;”定义ISP/IAP控制寄存器。
#include <reg52.h> //52系列单片机头文件
#define uchar unsigned char
#define uint unsigned int
sfr ISP_CONTR=0xe7;
sbit dula=P2^6; //申明U1锁存器的锁存端
}
void delayms(uint,j;
单片机死机复位程序
引言概述:单片机的死机(systemcrash)是指单片机停止响应任何输入和输出以及内部处理的状态。
在单片机应用中,死机是常见的问题,可能由于程序错误、硬件失效或电源故障等原因引起。
针对单片机死机问题,本文将介绍设计一种有效的复位程序来解决死机问题。
正文内容:1.理解单片机死机现象1.1死机现象的定义和特征在单片机应用中,死机一般是指程序出现错误或硬件故障导致单片机停止响应。
死机的特征包括:无法响应任何输入和输出无法执行任何程序指令无法恢复正常工作1.2死机原因的分析死机的原因可能包括:程序错误:例如死循环或指针错误外部干扰:例如电源波动或电磁干扰硬件故障:例如芯片损坏或电路接触不良2.单片机复位原理2.1复位信号的作用复位信号用于将单片机恢复到初始状态,清空寄存器和标志位,重新开始执行程序。
2.2复位电路的设计复位电路通常由复位芯片或电路组成,当检测到复位条件时,复位电路将产生一个复位信号,使单片机重新启动。
3.设计单片机复位程序3.1程序检测死机现象通过检测单片机是否响应外部输入信号,可以判断是否发生了死机。
如果未响应,即可确认死机状态。
3.2触发复位信号手动复位按钮外部控制信号软件监控定时器3.3清除异常状态复位信号触发后,需要进行一些清理工作,包括清除缓存、关闭外设、重启时钟等,以确保单片机恢复到正常状态。
4.预防死机现象发生4.1编写可靠的程序避免死循环使用断言和异常处理合理使用延时和中断避免指针错误4.2电源和信号干扰的防护使用稳定可靠的电源加强电源滤波和隔离使用屏蔽线缆和滤波器4.3硬件故障排查和保养死机也可能由于硬件故障引起。
因此,应定期进行硬件故障排查和保养,包括:清洁电路板和连接器检查芯片和电路元件的状态注意防潮、防尘和防静电5.调试和优化复位程序5.1测试复位程序的稳定性和可靠性在设计复位程序后,应进行全面的测试来验证其稳定性和可靠性,包括模拟死机情况和应对异常输入。
5.2优化复位程序的执行效率采用中断优先级设置削减冗余代码优化算法和数据结构总结:针对单片机死机问题,本文介绍了设计一种有效的复位程序来解决该问题的方法。
51单片机复位电路工作原理
51单片机复位电路工作原理一、复位电路的用途单片机复位电路就好比电脑的重启部分,当电脑在使用中出现死机,按下重启按钮电脑内部的程序从头开始执行。
单片机也一样,当单片机系统在运行中,受到环境干扰出现程序跑飞的时候,按下复位按钮内部的程序自动从头开始执行。
二、复位电路的工作原理在书本上有介绍,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引脚又接收到高电平。
8051单片机的复位状态
8051单片机的复位状态复位就是指通过某种手段使单片机内部某些资源一种固定的初始状态,以确保单片机每次复位后都能在某一固定的环境中从某一固定的入口地址处开始运行,8051复位后片内各特殊功能寄存器状态如下:PC内容为0000H,使单片机从起始地址0000H开始执行程序。
所以单片机运行出错或进入死循环,可以按复位键重启。
ACC内容为00H。
PSW内容为00H,意义为复位后,上次运算没有产生进位或借位,也没有产生半进位或半借位,工作寄存器组R0R7定位在内部RAM的0007单元,上次运算没有溢出,累加器中“1”的个数为偶数。
SP内容为07H,意义为堆栈指针SP指向内部数据存储器的07单元,即堆栈从08单元开始。
DPTR为0000H;POP3内容为FFH;IP的第六位为0,高六位的值不变;IE次高位即位6的值不定,其于位全为0;TMDO内容为00;TCON内容为00;TLO内容为00;THO内容为00;TL1内容为00;TH1内容为00;SCON内容为00;PCON的位六位五位四位内容不变,其余位都为0除以上寄存器外,其余的数据寄存器内容都为随机数。
8051复位电路一般来说,复位有两种方式,一种是硬件电路,一种是软件电路,8051单片机只提供硬件复位方式,没有提供软件复位指令,所以,8051中的软件复位只能通过其他手段来实现。
比如,利用堆栈实现,关于软件复位我们在抗干扰技术上讲述。
下面我们介绍8051的硬件复位,8051的硬件复位由片内复位检测电路和片外检测电路。
片内复位检测电路的作用是不断的检测复位引脚RST,当发现引脚上出现持续时间大于24个钟脉冲,即两个机器周期的高电平时,就自动对8051进行复位。
片外复位电路一般有上电复位和带按键的上电复位两种。
我们来看看带按键的上电复位电路的工作过程:该电路由一只电容,两只电阻和一只常用开按钮组成。
当按钮常开时,为上电复位;系统加电前,电容两端电压为0,系统加电后,由于电容两端电压不能跳变,所以电容两端的电压仍旧为0,即引脚RST出现高电平,随后,电容开始充电,电容上的电压从0开始上升,引脚RST上的电位开始回落,经过一段时间,引脚RST被电容充电拉为低电平,这样,在引脚RST上就产生一个一定宽度的正脉冲,只要电容C和电阻R2的参数选择合适,这个正脉冲的宽度就能达到8051复为脉冲的要求,即大于两个机器周期。
单片机复位原理
单片机复位原理
嘿,朋友们!今天咱来唠唠单片机复位原理。
这玩意儿啊,就好比是单片机的一次“重启”,让它能重新回到最初的状态,就像咱累了一天,回家洗个热水澡,舒舒服服地重新开始一样。
你想想看,单片机就像一个勤劳的小工人,一直在那不停地工作呀工作。
可万一它哪天累迷糊了,或者不小心走错了路,咋办呢?这时候就需要复位来帮忙啦!复位就像是给小工人喊了一声:“嘿!停一停,回到原点重新开始!”
那它是怎么实现复位的呢?这就有好多门道啦!有的是通过一个专门的复位引脚,就像给小工人按了个特别的按钮,一按下去,它就乖乖听话复位啦。
还有些呢,是通过内部的电路来实现,就好像小工人自己心里有个小开关,到时候自己就知道该重启啦。
咱再打个比方,单片机复位就像是电脑死机了,咱得重启一下才能继续用,对吧?要是没有复位这个功能,那单片机万一出了啥问题,不就傻眼啦?就好比你走路走得好好的,突然迷路了,这时候要是能有个魔法让你回到出发点,那多好呀!
而且啊,复位可不仅仅是让单片机回到最初状态这么简单哦。
它还能清除一些可能存在的错误数据或者状态,让一切重新开始得干干净净、清清爽爽。
这就像你打扫房间,把乱七八糟的东西都清理掉,让房间焕然一新。
你说,这复位是不是很重要?要是没有它,单片机可能就会变得乱七八糟,不知道在干啥啦!所以啊,我们可得好好了解了解它,知道它是怎么工作的,这样才能更好地利用单片机呀!
总之呢,单片机复位原理就像是给单片机这个小机灵鬼准备的一道保险,让它能在关键时刻重新开始,继续好好工作。
咱可得重视它,别小瞧了它的作用哦!这就是关于单片机复位原理啦,你懂了吗?。
单片机死机复位程序
MCS-51系统软复位旳进一步研究摘要在没有硬件看门狗旳系统以及某些对单片机I/O口线状态高度敏感旳系统中,软复位功能相称重要。
原则MCS-51以及诸多常见旳51内核单片机没有提供“软复位”措施。
本文分别以5lasm子程序和C51函数旳形式,为MCS-51单片机系统提供完善旳“软复位”措施。
ﻫ核心词MCS-51单片机软复位51asm C51引言复位是单片机旳初始化操作,其作用是使单片机和系统中其他部件处在一种拟定旳初始状态,并从这个状态开始工作。
ﻫ原则M CS-51旳复位逻辑比较简朴,只有通过复位引脚RST进行外部扩展。
对于具有外部看门狗芯片旳系统,当单片机由于某种因素程序“跑飞”而没有准时“喂狗”,或由软件陷阱捕获到程序运营旳异常,而故意不“喂狗”时,看门狗芯片会给单片机旳RST引脚提供一种复位信号,让单片机进行一次“硬”复位,以恢复程序旳正常运营;有些5l内核旳单片机具有片内旳看门狗,或者提供可访问旳寄存器实现“软件复位”。
一般实现旳也都是与在RST引脚提供复位信号等价旳“硬”复位。
在有些应用中,由于单片机所接外设严格依附干单片机口线旳时序,甚至不容许硬件复位时对口线旳复位操作;或由于系统没有外部看门狗,只能用软件监测程序运营异常并重新对单片机进行初始化操作,这时就需要所谓旳“软复位”了。
ﻫ在互联网上可以找到某些软复位旳措施,但都不够完善或不以便使用,基于C5l旳软复位更是一种难点。
本文提出一种功能完善、占用资源少旳实现措施,在51as m和C51下都可以便使用。
1 “软复位”要实现旳功能对于MCS-51系统,所谓“软复位”是一种由顾客软件控制旳复位活动,运用一系列指令来模拟硬件复位所实现旳多种操作内容,并且重新从头开始执行顾客程序。
其内容涉及:ﻫ①程序计数器PC 旳复位,从0000H开始执行程序;ﻫ②中断优先级状态触发器旳复位;ﻫ③特殊功能寄存器旳复位;ﻫ④程序跑飞前状态旳尽量恢复。
ﻫ其中,特殊功能寄存器旳复位可根据具体系统旳需要,在软复位此前对有关寄存器逐个赋值再软复位旳措施完毕,或在复位后来旳初始化程序中实现;程序跑飞前状态旳恢复也可根据RAM中存留旳数据来进行判断解决。
单片机的复位与程序执行
单片机的复位与程序执行程序中的字节可能是操作码,也可能是数据。
所以主程序要从程序存储器的指定位置开始存储,单片机的工作也必须从这个指定位置开始执行,才能正确运行。
51单片机规定主程序从程序存储器0号单元开始存储。
也就是说,O号单元存储的肯定是操作码,而1号单元存储的是操怍数或卜条指令的操作码。
如果机器从l号单元开始执行程序,就会将操作数当作操作码,其结果是影响整个程序的运作.铸成一步错步步错的结局。
单片机上电后,首先使程序计数器PC等于0000H.保证从第一条指令的操作码开始执行程序。
1.复位要求和复位方法5 1单片机复位引脚Reset为高电平时,进行初始化;为低电平时,开始工作。
就是通常所说的高电平复位。
单片机正常工作期间.复位引脚Reset要一直保持低电平,工作过程中,引脚Reset一旦接收到一个正脉冲,就会再次复位启动。
为可靠复位,51单片机要求Reset引脚施加的正脉冲脉宽不小于2个机器周期。
当晶搌频率fose=12MHzH~f,机器周期T=lμs.要求加在Reset引脚的正脉宽不小于21xs。
以t=OH寸刻作为正脉冲上升沿,在正脉冲期间,单片机完成复位任务,使有关的寄存器、计数器等成为特定状态。
正脉冲结束时.即t=tl 时,单片机开始执行程序。
通常.利用RC电路暂态过程中电容充电指数曲线加到51单片机Reset引脚上完成复位.见图1和图2。
复位方法分为上电复位和手动复位。
手动复位也叫按钮复位。
上电复位时,Reset引脚电压按照RC充电规律变化,当该电压下降到单片机最小输入高电平对应电压时,复位结束,程序开始启动。
显然,电阻、电容越大,复位正脉宽就越大。
设计复位电路的要求,就是确定电阻电容值,达到2个机器周期的复位最小正脉宽要求。
手动复位是操作者手按按钮,给单片机施加一个正脉冲,或由别的电路给单片机施加一个正脉冲使之复位。
实际上.手指按一下起码有数百毫秒,一般都能满足单片机复位正脉宽的要求。
单片机 数码管简单秒表程序,带停止启动复位
单片机+数码管简单秒表程序,带停止启动复位p0口是数码管的位选入口,P2口是数码管的段选用4位一体的数码管,P3.0 P3.1 P3.2分别是启动停止和复位按钮#include ;#define uchar unsigned char#define uint unsigned int#define DATA P2sbit start=P3^0;sbit stop=P3^1;sbit reset=P3^2;//---------启停标志-----bit SAT=0;bit RST=0;//------------数码管码表----------uchar tab[10]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};//------------uint time=0; //时间uint cnt=0; //计数//------------- void delay(int k) {while(k--);}void startkey() {static uchar i,j; if(start==0) {if(i==0){j++;if(j>;3){if(start==0) {i=1;j=0; SAT=1; }}}}{i=j=0;}}void stopkey() {static uchar i,j; if(stop==0) {if(i==0){j++;if(j>;3){if(stop==0) {i=1;j=0; SAT=0; }}}}{i=j=0;}}void resetkey() {static uchar i,j; if(reset==0) {if(i==0){j++;if(j>;3){if(reset==0) {i=1;j=0; RST=1; }}}}{i=j=0;RST=0;}}//---------数码管显示 00.0------- void shownumber(int num){DATA=tab[num%10];P0=7;delay(100);DATA=0x80;P0=6;delay(100);DATA=tab[num%100/10];P0=5;delay(100);DATA=tab[num/100];P0=4;delay(100);}//---------定时器初始化ˉ--------- void time0_init(){TMOD=0x01;TH0=(65536-18348)/256;TL0=(65536-18348)%256;EA=1;ET0=1;}void T0_time()interrupt 1{TH0=(65536-18348)/256;TL0=(65536-18348)%256;cnt++;if(cnt==5){time++;cnt=0;}}void main(void){delay(50000);time0_init();while(1){shownumber(time);if(SAT==1)TR0=1;if(SAT==0)TR0=0;if(RST==1){TR0=0;SAT=0;time=0;} startkey();stopkey();resetkey();}}。
单片机复位
单片机的复位操作由复位引脚RST/VPD上出现高电平引起的,高电平持续时间不少于两个机器周期(24个震荡周期),CPU在第2个机器周期内执行复位操作。
如果RST/VPD持续为高电平,那么每隔24个震荡周期重复一次复位操作。
复位后机内各特殊功能寄存器初始状态如表1-12所示,而片内128BRAM的状态不受复位信号影响。
SFR 复位状态SRF 复位状态P0~P3 FFH TH0 00H SP 07H TH1 00HDPL 00H SCON 00HDPH 00H SBUF 不定PCON 0xxx xxxxB(HMOS) IE 0xx0 0000BTCON 00H IP xxx0 0000BTMOD 00H PSW 00HTL0 00H A 00HTL1 00H B 00H各个特殊功能寄存器的复位状态解释如下:P0~P3=FFH:表示已向各端口写入1,使各端口即能作输入线,又能作输出线使用。
SP=07H:表示堆栈栈底位于07H单元,第1个进栈字节将写入08H单元中。
DPTR=0000H:表示片外储存器的操作将从000H单元开始(DPTR包括DPL和PPH 两种状态)。
PCON:HMOS单片机的PCON=0xxx xxxxB,最高位为0表示串行工作时的波特率不加倍。
CHMOS单片机的PCON=00xx xx00 B,最低两位00表示复位后单片机处于正常操作方式。
TCON=00H:表示T0,T1的工作均被停止。
TL0=00H,TH0=00H:表示T0的初始值为000H。
TL1=00H,TH1=00H:表示T1的初始值为000H。
SCON=00H:表示串行口处于工作方式0,允许发送,禁止接收。
SBUF 不定:SUBF存放的是串行口待发送或待接收数据,此时数据无用。
IE=0xx0 0000B:最高为0表示禁止所以中断。
IP=xxx0 0000B:表示5个中断源处于低优先级。
PSW=00H:表示工作寄存器选用0组。
单片机死机复位程序
MCS-51系统软复位的深入研究摘要在没有硬件看门狗的系统以及一些对单片机I/O口线状态高度敏感的系统中,软复位功能相当重要。
标准MCS-51以及很多常见的5 1内核单片机没有提供“软复位”方法。
本文分别以5lasm子程序和C51函数的形式,为MCS-51单片机系统提供完善的“软复位”方法。
关键词MCS-51单片机软复位51asmC51引言??????标准程序“跑飞”“软件?????????对于???级状态触发器的复位,在此基础上不难再增加特殊功能寄存器的复位和程序跑飞前状态的恢复,下文不再涉及相关代码。
???程序计数器的复位容易实现,一条“LJMP0000H”即可。
中断优先级状态触发器的复位则比较困难,由于它们对于用户程序是不可见的,无法直接读写其内容,只有用RETI指令才能清除。
又由于51单片机两级中断机制,低优先级中断有可能被高优先级中断再次中断而形成中断再入,而一次RETl只能退出当前优先级中断并清除相应的中断优先级状态触发器,因此最坏情况下需要两次RETI才能确保中断优先级状态触发器的复位。
综合考虑,可先用压栈的方法准备跳转后的入口地址,再用RETI来完成跳转和清除中断优先级状态触发器的双重任务,把以上过程执行两次,前一次的目标地址是后一次的入口,后一次则跳转到0000H,完成复位过程。
2软复位的实现方法???前已述及软复位要完成的功能,包含程序计数器PC的复位、中断优先级状态触发器的复位、特殊功能寄存器的复位(略)和程序跑飞前状态的恢复(略)。
下面分别用汇编程序和C51程序来实现,重点介绍C51程序的实现方法。
2.151asm汇编程序实现???使用时,在软件陷阱处理程序段或软件看门狗中用“LJMP#RST_O”指令跳转到此段程序入口处即可。
2.2C51程序实现???用C语言实现MCS-51系统的软复位,互联网上出现过多种版本,但都不够完善。
以下基于业界应用最广泛的编译器KeilC51来讨论。
51单片机复位电路工作原理
51 单片机复位电路工作原理、复位电路的用途单片机复位电路就好比电脑的重启部分,当电脑在使用中出现死机,按下重启按钮电脑内部的程序从头开始执行。
单片机也一样,当单片机系统在运行中,受到环境干扰出现程序跑飞的时候,按下复位按钮内部的程序自动从头开始执行。
二、复位电路的工作原理在书本上有介绍, 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引脚又接收到高电平。
几种单片机IC复位方式介绍
几种单片机IC复位方式介绍什么是复位电路呢?顾名思义,是一种使电路恢复到起始状态的设备。
对于单片机IC而言,复位功能是必须存在的,因为单片机的每一次启动都需要复位,以使CPU及系统各个部件都处于初始状态,并从初始状态开始工作。
为了使大家更好的理解单片机IC的复位电路,华强北IC代购网在这里为大家带来几种单片机IC复位方式的介绍。
一、手动按钮复位(手动按钮复位电路图)手动按钮复位一般采用的是在单片机IC的RST端和正电源Vcc之间接一个按钮。
当人为按下按钮时,RST端与Vcc端之间接通,RST端升为高电平,以达到复位的要求。
二、上电复位(上电复位电路图)以AT89C51为例,只要在RST复位输入引脚上接一电容至Vcc端,下接一个电阻到地即可。
在复位期间,端口引脚处于随机状态,复位后,系统将端口置为全“l”态。
如果系统在上电时得不到有效的复位,则程序计数器PC将得不到一个合适的初值,因此CPU可能会从一个未被定义的位置开始执行程序。
三、积分型上电复位(积分型上电复位电路图)以单片机AT89C51为例,上电后,由于电容C3的充电和反相门的作用,使RST持续一段时间的高电平,完成复位功能。
此外我们可以通过按下复位键K后松开,使RST维持一段时间的高电平,从而实现开关复位的操作。
四、比较器型复位电路(比较器型复位电路图)当上电复位时,在电路中形成一个RC低通网络,所以比较器的正相输入端的电压比负相输端输入电压延迟一定时间。
我们在实际应用时可对这类电路稍作改进即可作为上电复位与看门狗复位电路共同复位的电路,并且可大大提高单片IC复位的可靠性。
五、看门狗型复位电路(看门狗型复位电路图)这种复位电路主要利用CPU正常工作时,定时复位计数器,使得计数器的值不超过单片机IC的预设值。
此复位电路的可靠性主要取决于软件设计,即将定时向复位电路发出脉冲的程序放在哪里。
因此将这种技术用于实时性较强的控制或处理软件中有一定的困难。
单片机的复位方法
单片机的复位方法
单片机的复位方法有两种:硬件复位和软件复位。
硬件复位是通过将单片机的复位引脚(RESET)拉低来进行复位。
当RESET引脚被拉低时,单片机内部的复位电路会将其所有的寄存器和状态清零,从而使单片机重新初始化。
硬件复位通常由外部电路或者特殊的复位电路芯片控制。
软件复位是通过在程序中执行一段复位代码来进行复位。
软件复位通常是通过软件中的一个内部复位向量实现的,该向量在单片机的程序存储器中预留了一段内存空间,并存放了复位代码。
当单片机执行到这段复位代码时,其所有的寄存器和状态也会被清零,并重新初始化。
在大多数情况下,硬件复位是最常用和推荐的复位方法。
只有在特殊的应用场景下,软件复位才会被使用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MCS-51系统软复位的深入研究摘要在没有硬件看门狗的系统以及一些对单片机I / O 口线状态高度敏感的系统中,软复位功能相当重要。
标准MCS-51 以及很多常见的51 内核单片机没有提供“软复位”方法。
本文分别以5lasm 子程序和C51 函数的形式,为MCS-51 单片机系统提供完善的“软复位”方法。
关键词 MCS-51 单片机软复位 51asm C51引言复位是单片机的初始化操作,其作用是使单片机和系统中其他部件处于一个确定的初始状态,并从这个状态开始工作。
标准 MCS-51 的复位逻辑比较简单,只有通过复位引脚RST 进行外部扩展。
对于具有外部看门狗芯片的系统,当单片机由于某种原因程序“跑飞”而没有按时“喂狗”,或由软件陷阱捕捉到程序运行的异常,而故意不“喂狗”时,看门狗芯片会给单片机的RST 引脚提供一个复位信号,让单片机进行一次“硬”复位,以恢复程序的正常运行;有些 5l 内核的单片机具有片内的看门狗,或者提供可访问的寄存器实现“软件复位”。
一般实现的也都是与在RST引脚提供复位信号等价的“硬”复位。
在有些应用中,由于单片机所接外设严格依附干单片机口线的时序,甚至不允许硬件复位时对口线的复位操作;或由于系统没有外部看门狗,只能用软件监测程序运行异常并重新对单片机进行初始化操作,这时就需要所谓的“软复位”了。
在互联网上可以找到一些软复位的方法,但都不够完善或不方便使用,基于C5l的软复位更是一个难点。
本文提出一种功能完善、占用资源少的实现方法,在51asm 和 C51 下都可方便使用。
1 “软复位”要实现的功能对于 MCS-51 系统,所谓“软复位”是一种由用户软件控制的复位活动,利用一系列指令来模拟硬件复位所实现的各种操作内容,并且重新从头开始执行用户程序。
其内容包括:①程序计数器PC 的复位,从0000H 开始执行程序;②中断优先级状态触发器的复位;③特殊功能寄存器的复位;④程序跑飞前状态的尽量恢复。
其中,特殊功能寄存器的复位可根据具体系统的需要,在软复位以前对相关寄存器逐个赋值再软复位的方法完成,或在复位以后的初始化程序中实现;程序跑飞前状态的恢复也可根据RAM 中存留的数据来进行判断处理。
本文重点讨论关于程序计数器的复位和中断优先级状态触发器的复位,在此基础上不难再增加特殊功能寄存器的复位和程序跑飞前状态的恢复,下文不再涉及相关代码。
程序计数器的复位容易实现,一条“LJMP 0000H”即可。
中断优先级状态触发器的复位则比较困难,由于它们对于用户程序是不可见的,无法直接读写其内容,只有用RETI 指令才能清除。
又由于51 单片机两级中断机制,低优先级中断有可能被高优先级中断再次中断而形成中断再入,而一次RETl 只能退出当前优先级中断并清除相应的中断优先级状态触发器,因此最坏情况下需要两次RETI 才能确保中断优先级状态触发器的复位。
综合考虑,可先用压栈的方法准备跳转后的入口地址,再用RETI 来完成跳转和清除中断优先级状态触发器的双重任务,把以上过程执行两次,前一次的目标地址是后一次的入口,后一次则跳转到0000H ,完成复位过程。
2 软复位的实现方法前已述及软复位要完成的功能,的复位 (略 )和程序跑飞前状态的恢复法。
2 . 1 51asm汇编程序实现包含程序计数器PC 的复位、中断优先级状态触发器的复位、(略)。
下面分别用汇编程序和C51 程序来实现,重点介绍特殊功能寄存器C51 程序的实现方使用时,在软件陷阱处理程序段或软件看门狗中用“LJMP #RST_O”指令跳转到此段程序入口处即可。
2 . 2 C51 程序实现用C 语言实现 MCS-51 系统的软复位,互联网上出现过多种版本,但都不够完善。
以下基于业界应用最广泛的编译器 Keil C51 来讨论。
如:这段程序,用强制类型转换把地址0000H 转换成 re-set_not_best_O()函数的入口。
实际上调用函数reset_no t_best_O() 等价于“LJMP 0000H”,没有处理可能的中断状态问题。
又如:这段代码中,一维字符数组中为复位代码的机器码。
“(*((Void(*)())(rst)))()是把rst”这个字符数组的地址强制转换成函数指针,并调用。
实际上调用函数reset_not_best_1()是执行了一段如下代码:可见,调用一次reset_not_best_l()函数相当于执行了 1 次清除中断优先级状态触发器的动作,然后跳转到00 00H 重新执行。
但此段代码仍然可能被再次中断失效,或者当原来堆栈已经溢出时导致对0000H 地址的压栈错误,不能正确实现“软复位”功能。
除此之外,由于KeilC5l 在把控制权交给函数main() 之前对内部RAM 进行初始化的代码是:此处 R0 作为循环变量使用,对内部RAM从7FH单元开始,按照每次递减的方法对内部RAM 逐一进行清零。
当 R0 指向 00H 时,以上程序可以很好地完成清零工作;然而R0 依据 RS0 、RSl 取值的不同,可以指向00H 、08H 、 10H 或 18H 单元。
当: R0 指向 08H 、 10H 或 18H 时,上面所列清零程序将陷入死循环。
分析如下:以 RS0=1 、RSl=0 ,即RO指向08H为例。
自标号LOOP处起始的循环进入时的状态是:R0=7FH, PC=#L OOP 。
设程序已执行到R0=08H, PC=#LOOP,此时执行PC指向处的指令“MOV @RO,A”,将把 (RO) 清零,也即 08H 单元清零。
由于R0 指向 08H ,实际上R0 也被清零了,此时令“DJNZ R0 ,LOOP”,R0 将由 00H 自减为 OFFH ,回到 R0=OFFH 出现 R0==08H ,PC=#LOOP的状态,陷入死循环。
当R0 指向 10H 避免上述问题,可以把字符数组中机器码改为与以下程序段对应:RO=00H ,PC=#LOOPl ;再执行一条指,PC=#LOOP 的状态;继续执行,将再次或18H 单元时也类似会陷入死循环。
为了调用改造后的reset_not_best_l()函数将清除中断优先级状态触发器,并跳转到0000H 单元继续执行,从而实现了软复位。
但由于只执行了 1 次 RETT 指令,在复位前出现了中断再入的极端情况下,仍会出现低优先级中断放锁死的现象。
由于无法在字符数组中实现对最终代码地址的取得,无法如 2 . 1 节汇编程序中的“MOV DPTR,#RSTl”一样读取绝对地址,因此也无法实现如同 2 . 1 节中的两次RETl 来保证清除全部的中断优先级状态触发器。
解决的办法是,在内存中设置标志flag ,每次复位后都检查特定标志,接如下伪代码来判定(假定复位标志设为 0x55 ,若复位后发现标志字为0x55 则转正常初始化程序,否则置复位标志为0x55 ,再次复位 ):但这种办法有两个弊端:其一,万一在程序跑飞时刚好处在中断再入中,且flag所在的RAM地址中由于某种原因恰好是0x55 ,低级中断仍是被锁死的;其二,Keil C5l 的缺省编译模式是加上了初始化程序段startup. A5 1 的,在这段程序中对全部的内部RAM都进行了初始化,复位标志也会被清0 ,flag将失效。
因此要正常使用标stanup.A5l的使用,自己对内部RAM进行志 flag 必须手工修改startup . A5l ,不要清除flag 单元,或者禁止初始化,都比较繁琐。
若用以下 reset_best() 函数,则可顺利解决上述问题:在此函数中,首先定义了结构体类型ResetStruct ,它包含字符数组rstcode 和 16 位整型数addr 两个成员。
在结构体变量的RST 实例中, RST .rstcode 是复位代码对应的机器码,RST .addr 的值是 RST .rstcode 这个数组的首地址+偏移量 0x15 。
其实是以下汇编代码中标号rstl 处的地址,也即是“#rstl,”由Keil C51在编译时自动计算得到。
此 reset_best() 函数巧妙地利用 C 语言中数组名即是数组首地址(其实质就是这一段“软复位”代码的入口地址!) ,把数组名 +偏移量 0x15 赋值给结构体的int 型的成员addr ,则正好把软复位代码中标号rstl 的入口地址两个字节取了出来(由 KeilC51在编译连接时完成),存放在RST . addr 中,由于结构体连续存储,RST .addr 会紧接着软复位代码RST . rstcode 存放。
见上段程序中的“DB #LOW(rstcode+OFH)”和“DB #HIGH(rstcode+09H)”。
当本程序被调用并执行到“MOVC A, @A+PC”时,分两次取到的分别是“#rstl的低”位和高位字节,把它们压栈以后再调用RETI 指令,除了清除可能有的中断优先级状态记录外,还会跳转到rstl 执行后续的连续两次压栈操作,把第 2 次 RETI 的返回地址设为0000H ,再通过紧接着的RETI 指令,清除可能还有的中断优先级状态记录,并跳转到0000H 完成完整的复位操作。
本程序使用一个C51 函数完成了完整的包含两次RETI 在内的复位操作,消除了所有已知隐患,只需在应用程序中包含此reset_best()函数,在需要软复位时调用即可。
2.1 节中所列汇编语言的子程序也可使用本节分析时所用汇编代码代替。
结语本文对 MCS-51 单片机的“软复位”进行了深入讨论,给出了分别基于51asm 的汇编子程序和基于C5l 的函数。
使用本文所述的“软复位”方法,无论是5lasm 程序还是C51 程序,所需的资源消耗都很小,只占用二三十个字节的程序存储器,使用也非常简单,不会增加编程负担。
当具体应用系统还需进行特殊功能寄存器的复位以度程序跑飞前状态的恢复时,在此基础上也很容易实现。
特别是当单片机所接外设严格依附于单片机口线的时序,须尽量避免硬件复位对口线的复位操作或系统不具备硬件看门狗时,对于提高单片机系统的抗干扰能力有较大的实用价值。
实际应用表明,这种软复位方法是非常有效的。