单片机复位后的状态软件复位

51系列单片机的软件复位方法
我的图书馆
51系列单片机的软件复位方法
在单片机系统的应用中,我们经常需要用到复位技术来实现抗干扰。有的单片机(如8098)有专门的复位指令,某些增强型MCS-51系列单片机虽然没有复位指令,但片内集成了WATCHDOG电路,可以很容易实现复位。而普及型MCS-51系列单片机(如)既无复位指令,又不带硬件WATCHDOS,如果不外接硬件WATCHDOG,就必须采用软件复位技术。所谓软件复位就是用一系列指令来模仿复位操作。在MCS-51系列单片机中,只要用指令使程序从起始地址(0x0000)开始执行,就可以复位单片机。本文介绍三种用C语言实现软件复位的简单方法&方法一:void Reset(void){& unsigned char code rst[ ]={0xe4,0xc0,0xe0,0xc0,0xe0,0x32};(*((void (*)(void))(rst)))();}先来看一下这段程序编译后的汇编码:C:0x0015& E4&&&&& CLR&&& A&&&&&&&&& //清除ACC=0C:0x0016& C0E0&&& PUSH& ACC(0xE0)&& //压0到堆栈——8位C:0x0018& C0E0&&& PUSH& ACC(0xE0)&& //再压0到堆栈——再8位C:0x001A& 32&&&&& RETI&&&&&&&&&&&&&& // 清除中断激活标志并返回到0x0000执行C:0x001B& 020015& LJMP&& C:0015可以发现,数组rst[]中的内容恰恰是上面前四行的汇编机器码,即程序中将代码当作数组的数据来存储。再来研究后面的那句函数调用(*((void (*)(void))(rst)))(),rst是数组名(即数组首元素地址),(void(*)(void))是函数指针的强制类型转换运算,(void(*)(void))(rst)是将数组名rst强制转换成一个无参数无返回值的函数的指针,指向rst的首地址。只需调用(*((void (*)(void))(rst)))(),即可将数组中的数据当作函数代码来运行,因为无论是数据还是代码都是以二进制存储的,本质上是相同的。方法二:void Reset(void){&& ( * ( void (*)( ) )0 ) ( );}这段程序摘自《C缺陷与陷阱》,比方法一中的更为简洁。与方法一类似,它也是使用函数指针的强制类型转换运算将函数指针指向一个非函数的地址,但不同的是它直接指向程序起始地址0x0000,方法一先指向数组rst,再利用数组中的机器码使程序跳转到0x0000。它编译后的汇编只有一句LCALL& C_STARTUP(C:0000)。方法三:void Reset(void){& VoidFunc();&& //请注意,函数VoidFunc()在程序中未定义}上面的VoidFunc()函数虽然没有定义,但在Keil环境中编译时只是警告,并不报错。编译后的汇编码为LJMP& C_STARTUP(C:0000),同方法二极为相似,使程序跳转到0x0000开始执行,同样实现了软件复位的功能。这种做法最为简单,但不符合ANSI C标准中函数应先定义后调用的要求,在其它某些环境中可能无法编译通过,因此不推荐。总结&&&&& 我们知道,在MCS-51单片机的所有指令中,只有RETI指令能清除中断请求标志。因此只有方法一能在中断子程序中被调用,方法二和方法三都不能,否则系统复位后,中断请求标志仍在,可能造成系统刚复位就错误地进入了中断子程序。实际应用中应根据实际情况,选择合适的方法。
TA的最新馆藏[转]&[转]&[转]&
喜欢该文的人也喜欢51单片机常用的复位方法有几种?_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
51单片机常用的复位方法有几种?
阅读已结束,下载本文需要
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢如何防止单片机程序丢失-电子产品世界论坛
如何防止单片机程序丢失
一、改善电源
& & 尽量改善电源。这是老话了。并不是说单片机能工作就行,电源要设计好,加上104去耦电容改进电路布局等措施。二、使用电压监测芯片
二、使用带电压监测的复位芯片。
防止上电/下电时,单片机电压处于工作和不工作的临界时,单片机自己胡来。上电后,电容从0V逐渐升到VCC;下电时,从VCC逐渐降到0V。不管转电压转换的多快,总会有一段时间处于电压不足的不稳定状态,什么情况都可能发生。
三、足电压编程、慢速编程
& & 让Flash/EEP存储器在编程时充入足够电荷。
& & 需要可靠性的场合尽量低速写入,把工作加到芯片上限 (一搬5V芯片用5.5V,3V芯片到3.6V),能明显提高数据可靠性.
四、保护编程口
& & 保护编程的IO口,加些上拉或下拉电阻。如IAP、ISP、JTAG等。防止单片机复位之前的时间被处界杂波干扰,误入编程状态。
& & 例1:ATMEL的ISP口的SCK、MISO脚尽量做输出使用。防止外围器件对这些脚产生跳动电平。防止误入ISP状态。对JTAG口也要做同样的保护。
& & 例2:STC单片机,尽量设置成P1.1P1.0为低电平时才可以编程。
五、产品尽量禁止编程功能
& & 比如AVR单片机,设置JTAGEN=1 OCDEN=1 因为JTAG有改写FALSH的能力。在产品阶段用不着它,把它禁止。如果可能,还可以设置熔丝位,禁止ISP功能。但是你要考虑清楚,禁止ISP功能以后就只能通过并行方式改写程序了。
& & 还有一些单片机有专门的引脚,控制编程允许。那么咱们可以让它处于禁止编程的状态。
下面是我对使用MEGA16L的防丢程序措施。5V电压8M晶振。
1.使用带电压监测的706硬件看门狗。即保证可靠复位,又防止CPU低电压工作。
2.不使用IAP自编程。熔丝位BOOTRST=1。以前我是用过自编程,但是为了安全起见,还是把它禁止了吧。
3.晶振选择高幅度振荡输出. CHOPT=0 工作电流会增加1个多毫安,但是稳定多了。
4.打开BOD &BODEN=0 &BODLEVEL=0 &一旦VCC下降到触发电平4.0v以下,MUC不工作;当VCC电平大于触发电平后,重新开始工作。
5.设置复位启动时间稍长。SUT 1=1 &SUT0=0 上电复位时让CPU等待65个毫秒,使电源缓慢上升。
6.禁止JTAG。JTAGEN=1 OCDEN=1 因为JTAG有改写FALSH的能力。我在产品阶段用不着它,还是把它禁止了吧。还节省1毫安的工作电流。
最后的熔丝位变成了 C9 2F
这个太好了,收藏!!!必须置顶
不错,不过我很多时候没开看门狗
收藏!!!收藏!!!
很实用的资料必须收着
不错,多谢楼主分享
flash类器件比单片机更容易出错,高性能的单片机flash现在都带ecc校验了
匿名不能发帖!请先 [
Copyright (C) 《电子产品世界》杂志社 版权所有8位嵌入式单片机的软件复位技巧实现
飞思系列的8位单片机没有特定的控制寄存器可以实现软件复位,当程序运行过程中代码需要强行产生一个复位时必须通过一些软件技巧实现:
软复位,程序从头运行,硬件不复位。复位脚无复位脉冲输出
这可以通过直接获取复位向量的方式来实现:
void ForceReset(void)
void (*vector)(void);
byte c[2];
softReset.c[0] = *(byte*)0xFFFE; //get the reset vector
softReset.c[1] = *(byte*)0xFFFF;
softReset.vector(); //re-STart the code flow
硬复位,程序从头运行,内部所有硬件模块和寄存器同时复位,复位脚有复位脉冲输出
这必须结合FSL 8位单片机内部的架构特点来实现:
1)COP(看门狗)复位
这是最简单的一种方式。程序死循环然后等看门狗作用产生复位。你必须事先启动看门狗功能,复位过程将有少许延时。
void ForceReset(void)
DISAbleI //disable all interrupt
for(;;); //wait for watch-dog reset
2)非法寻址复位
当指令对某一个不存在的内存空间进行寻址操作时单片机会产生硬件复位。
void ForceReset(void)
asm JMP 0xD000; //jump to illegal address will result a RESET
注意不同芯片其有效内存空间配置不同,具体地址需参考芯片数据手册做适当调整。
3)非法指令复位
当执行一条不存在的指令编码时单片机会产生硬件复位。这里又可以分两种手段:
a) 利用&合法&指令在特定配置模式下的&非法性&,例如STOP指令。
如果在芯片的配置寄存器SOPT中设定STOPE位为0禁止STOP指令,你若再执行STOP就会认为是非法指令从而立即产生复位。
void ForceReset(void)
asm STOP; //illegal STOP will result a RESET, note SOPT_STOPE must be 0
如果你的应用中正常情况下不会用到STOP,就可以用这种方式。如果你本来就要用STOP指令就不能用这种方式产生复位,因为SOPT寄存器在复位后只能被写一次。
b) 人为制造非法指令然后强行运行。
这是比较通用的一种方法,这个S08内核系列均可适用。在单片机的指令表中确认一条不可能出现的指令编码,例如0x9E10,将其填入RAM中然后强制运行,即可立即产生复位。
void ForceReset(void)
byte illegalCode[2];
illegalCode[0] = 0x9e;
illegalCode[1] = 0x10; //illegal instrucon
((void (*)(void))illegalCode)(); //execute illegal instrucon will result a RESET
关注电子发烧友微信
有趣有料的资讯及技术干货
下载发烧友APP
打造属于您的人脉电子圈
关注发烧友课堂
锁定最新课程活动及技术直播
本文开始介绍了单片机的概念和单片机的硬件特性,其次介绍了单片机的种类及介绍了8位单片机和16位单片机...
如果你现在还没有单片机开发板,那买一个什么单片机的开发板呢?由于现在ARM单片机占据了整个市场的大部...
在电子产品的各种通讯方式中,CAN(Controller Area Network)总线以其高可靠性...
首先介绍一下软件的架构,小π机器人的软件部分主要包含手机APP程序、上位机程序、主控单片机程序和从机...
本文开始介绍了单片机编程器的特点以及对单片机编程器作用及功能进行了解析,其次介绍了烧录器的概念以及它...
控制器局域网( Contro llerA reaN etwo rk, CAN)是一种多主方式的串行通...
新唐科技股份有限公司(Nuvoton Technology Corp.)是位在台湾的一家半导体公司,...
本文主要介绍了单片机芯片型号有哪些_常见单片机芯片型号大全。经典的单片机芯片型号:1、MCS-51系...
本系统以AT89S52单片机为控制器,通过人机接口(按键和LCD显示屏)来设置输出电流,设置步进等级...
LED 护栏管又名丽得管,是一种先进的LED装饰照明灯饰产品。以红、绿、蓝3种颜色的LED作为光源...
本系统以单片机作为核心控制电路,相对于一般电路构成的防重装弹装置,电路更简洁,调试更快捷,基于软件编...
本文主要介绍了74ls02中文资料汇总(74ls02引脚图及功能_真值表及应用电路),74ls02是...
这个是用Proteus做的硬件设计,对单片机有兴趣大概都用过吧!另外还有软件程序,如果把这个硬件比作...
采用MMA7361加速度角度传感器测量角度。加速度角度传感器是通过测量由于重力引起的加速度计算出器件...
传统电风扇多采用机械方式进行控制,功能少,噪音大,各档的风速变化大。随着科技的发展和人们生活水平的提...
本文提出的一种基于 Proteus 的单片机演奏音乐的方法,非常简单实用,且该方法基于软件来实现的...
首先要放清51的定位,跟我一起再念一遍:51只是个工具51只是个工具51只是个工具。当然51还有一个...
首先,“嵌入式”这是个概念,准确的定义没有,各个书上都有各自的定义。
数组与指针语句具有十分密码的关系,一般来说,指针比较灵活简洁,而数组则比较直观,容易理解。对于大部分...
血糖测量通常采用电化学分析中的三电极体系。三电极体系是相对于传统的两电极体系而言,包括,工作电极(W...
当今社会,应用单片机的产品已经渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的足迹。现在,...
所谓单片机,就是把中央处理器CPU(Central Processing Unit)、存储器(Mem...
单片机技术的发展以微处理器(MPU)技术及超大规模集成电路技术的发展为先导,以广泛的应用领域拉动,表...
对于学习单片机的人而言,肯定都想知道单片机目前的发展现状啊,据此来给自己指定学习目标吧。所以小编总结...
STC单片机是一款增强型51单片机,完全兼容MCS-51,还增加了新的功能,比如新增两级中断优先级,...
如输出到称为HCLK、FCLK的时钟,还直接输出到SDIO外设的SDIOCLK时钟、存储器控制器FS...
日本NEC公司生产的μPD780208系列8位单片机属于78K/0家庭中功能较强的一种系列。根据内部...
系统采用单片机(STC89C54RD)作为主要控制器件,采用HEDS9701槽型光耦加360线光栅片...
以往我们所使用到的二维码大多依赖网络平台或者智能终端,今天我们来谈谈在单片机平台上的实现过程。
电路简单、功能强大、质量可靠,这就是单片机被广泛是使用的根本原因。在我们的生活里,电器更新换代频繁、...
PLC = Programmable Logic Controller,可编程逻辑控制器,一种数字运...
如果我们把这个“口”字图形的“.”处用“0”代替,就可以很形象地得到“口”的字形码:0000H 00...
这是一个非常经典的TI的关于FLASH存储模块的程序,在几乎所有的关于MSP430的书籍等资料上都可...
迄今为止,写过的程序都是一些很简单的程序,从来没有想到要自己写.H文件,也不知道.H文件到底什么用,...
本文主要介绍了现在市场上有哪些单片机很火的_单片机市场现状分析以及单片机结构介绍。单片机是一种集成电...
本文主要介绍了怎么知道单片机型号_单片机型号的判断。AT89系列包括两大类第一类是常规的,就是AT8...
本文主要介绍了单片机上电复位电路图大全。复位电路由按键复位和上电复位两部分组成。上电复位:STC89...
设计很重要,工程也很关键。理论要结合实际,才能做好产品。
嵌入式开发就是设计特定功能的计算机系统,手机,mp3、mp4,mp5,自动供水系统,洗衣机,油井监控...
在单片机编程的过程中,如果一名设计者能够同时掌握多门编程语言,那么这名设计者肯定是一位非常优秀的人才...
单片机里有一些部件需要我们使用和操作,都是通过读写寄存器来实现的。每个部件都对应有操控它的寄存器,例...
局部变量,不加说明默认为auto型,即动态存储,如果不赋初值,将是一个不确定的值。而将局部变量定义为...
学习单片机,你不能没有一本纸质的教程,到本地的书店挑选或便宜的可以到卓越、当当网掏一掏。有了教程能更...
大体测量范围电感测量范围:
0.1μH-----1H小电容测量范围:
1pF----2....
本文开始介绍了排阻的阻值读取方式,其次介绍了排阻的作用和排阻的引脚说明,最后介绍了51单片机最小系统...
为简化系统设计,本系统采取直接发送16×16LED点阵数据的方法,此方法可以去除单片机汉字点阵库的设...
本文主要一个基于单片机的智能环境数据采集小车系统的设计,能实现环境温湿度的采集、发送、接收、处理、显...
串行口的工作方式0为移位寄存器输入输出方式,方式0发送或接收完8位数据后由硬件置位发送中断标志TI或...
atmega48单片机低功耗系统设计首要是选择合适的单片机。atmega48单片机是一款8位微控制器...
本文旨在提供一个轻量级的单片机多级菜单实现方法,以较少的系统资源消耗和简单方便的方法完成菜单设计。考...
在选择 LDO 时,重要的是要知道如何区分各种LDO。器件的静态电流、封装大小和型号是重要的器件参数...
本文介绍的汽车自动巡航控制系统可以有效地减轻驾驶员的疲劳,避免交通事故,并利于环保。当在高速公路上长...
本文利用单片机C作为128×64单色OLED的控制核心器件,采用的是维信诺公司的一款...
根据微位移控制系统的设计要求,首先应保证控制系统的定位精度,其次应尽量做到结构简单,成本低,操作简便...
当前的单片机种类很多,但是 51 是最基础的,因此单片机的学习最好也是从 51 开始,不仅容易上手,...
影响单片机系统运行稳定性的因素可大体分为外因和内因两部分:射频干扰,电源线或电源内部产生的干扰
由于本次进入指令寄存器中的内容是74H(操作码),以译码器译码后单片机就会知道该指令是要将一个数送到...
有关51单片机有关晶振的问题一并总结出来,希望对学51的童鞋来说能有帮助
每当想找哪个运算符优先级高时,很多时候总是想找的就没有,真让人气愤!现在,终于有个我个人觉得非常全的...
随着单片机的使用日益频繁,用其作前置机进行采集和通信也常见于各种应用,一般是利用前置机采集各种终端数...
电阻焊一般是使工件处在一定电极压力作用下并利用电流通过工件时所产生的电阻热将两工件之间的接触表面熔化...
随着物质文化生活水平的提高,人们对于包装、装饰材料的要求也越来越高,只有将计算机控制引入到模切烫金机...
除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也需按复...
1.数据传送指令汇总 2.算术运算类指令汇总 3.控制转移类指令汇总 4.逻辑运算指令汇总 5.布...
全国大学生电子设计竞赛中的C题,要求设计一个以 单片机 为核心器件实现对行驶中的 电动模型汽车 自动...
当时国内从事动态密码器研发生产的公司并不多,而能拥有自主知识产权的公司更少。公司创始人是剑桥大学毕业...
不要拒绝RTOS!
逐次逼近式AD转换器与计数式A/D转换类似,只是数字量由“逐次逼近寄存器SAR”产生。SAR使用“对...
本功能主要用于准备用于查表计算的 R/T 表格,主要用于温度、浊度等模拟量的测量,根据电路分压电阻的...
单片机,又称微处理器,他将一个系统所需要的RAM,Rom ,CPU等相关外设集成在一块集成电路上,我...
现将while(1);语句屏蔽掉。我还以为程序不能被正确执行了呢,因为退出了main主函数,就像Re...
点阵式平板图形液晶显示器在各种便携式产品中具有非常广泛的应用。对于不同厂家的产品及不同的运用目的,显...
数字式温度传感器(简称SWC),又称集成数字脉冲式感温探头,是一种新型的三端温度变送器件。该器件采用...
由于单片机具有功能强,使用灵活,体积小,性价比高等特点,近年来在测控系统中得到广泛应用。而在许多场合...
读取一字节数据的程序段如下: 读取数据时,T1先置1,其后的RD信号将行地址送到地址线AB上,并使D...
VD5026 -4的每组串行数据输出波形由同步脉冲、12位加密地址(和控制数据)及1位停止位组成。编...
为了测量时间r,又为使测量的φ角的精度不受电网频率(或周期T)的影响,采用图所示的接口电路。 由变压...
传统的投币电话,都是以几对红外发射、接收对管作传感器,利用硬币遮光原理粗测币的直径。这种方法精度低,...
当超声波传感器发出的超声波遇到物体返回时,探头接收其反射回波信息,从而可对接收到的反射回波进行分析、...
本文介绍使用8031单片机测量三相电网 功率因数角的原理、接口电路和程序实现。经实践验证,测量准确、...
单片机执行程序的过程,实际上就是执行我们所编制程序的过程。即逐条指令的过程。计算机每执行一条指令都可...
串行口方式0应用编程 8051单片机串行口方式0为移位寄存器方式,外接一个串入并出的移位寄存器,就能...
在单片机中用来存储程序数据及常量数据或变量数据,凡是c文件及h文件中所有代码、全局变量、局部变量、’...
八段LED数码管显示器由8个发光二极管组成。基中7个长条形的发光管排列成“日”字形,另一个贺点形的发...
89C51芯片没有自带PWM发生器,如果要用51来产生PWM波就必须要用软件编程的方法来模拟。方法大...
遇到单片机晶振不起振是常见现象,那么引起晶振不起振的原因有哪些呢?
(1) PCB板布线错误;...
使用STM32L496的Nucleo板的LPUART 做打印输出时,电脑端始终没法出现任何信息。
说到51单片机的时钟首先想到51时怎么工作的呢?微型控制器要想工作必须要有一个“动力”,对于51单片...
在单片机系统里,按键是常见的输入设备,在本文将介绍几种按键硬件、软件设计方面的技巧。一般的在按键的设...
/*************定义全局变量*****************/uchar Kp,TI,...
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司
电信与信息服务业务经营许可证:粤B2-单片机如何用C程序复位?_百度知道
单片机如何用C程序复位?
本人在写个串口通讯程序中需要单片机回到初始状态,但是苦于无法让单片机复位。想请教有没有能让单片机复位的c语言程序?希望能提供代码。谢谢!
好像也可以,谢谢,我是想让单片机回到初始状态。为什么不推荐这样做呢,程序可读性下降吗?
我有更好的答案
可以使用下面的程序跳到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 CODE RSEG ?PR?RESET ; C prototype:
void reset (void); PUBLIC reset reset: POP
ACC pop return address
A push 0 as new
PUSH ACC return address to stack
RETI execute return of interrupt
END 以上程序在选择bank 0寄存器组时工作良好,假如选择的不是bank0寄存器组,那么可能无法获得预料的结果。你应该在以上的程序或启动代码中加上“MOV
PSW, #0”来选择bank 0寄存器组。 以上文章由龙啸九天翻译自KEIL FAQ,可能有疏漏,欢迎提出。
采纳率:32%
呵呵,设置下看门狗,然后进入死循环,这样就自动复位了哦,呵呵不过要条件设置好,否则每次都进入复位了,也有些是有复位命令的,要具体看单片机了。第一种方法是不管哪种单片机都适用的。
很容易实现啊,不够需要外接复位芯片 比如:MAX813L,用一个IO口连接至MAX813L的第8脚,置0后就可以使MAX813输出复位信号。详细可参看MAX813L的资料。当然用别的复位芯片也行。我不明白你需要这样有什么用,回到初始状态只是内存和特殊寄存器回到初始状态。完全可以用程序回复啊。
很不推荐这样做 真的非得这样的话 那么 void main(void) { start: .... 其他代码 串口相关代码
}补充:主要是优秀的代码是需要依靠优秀的软件结构的,使用goto语句直接破坏了这种结构,goto语句使得原来的局部变量和堆栈中的数据全部失效了
这么干好像不是太好
其他2条回答
为您推荐:
其他类似问题
您可能关注的内容
单片机的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。}

我要回帖

更多关于 单片机的复位电路 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信