STC89C52单片机C程序复位的问题
如从机收到复位命令(软件命令),程序怎么使机器复位?虽然要使软件始终处于可控状态,最好不要用"复位",因为复位是纯硬件过程,软件是不可控的.但是我们还是要讨论方法,一般流传的方法如下:1、放狗;2、((void(code *)(void))0x0000)();3、用单片机一个引脚控制点一下RSTRST;4、用单片机一个引脚控制重新加电;5、用单片机自带的软件复位指令或内狗指令;6、goto大法;
单片机嵌入式系统软件的几种复位方式
飞思系列的8位单片机没有特定的控制寄存器可以实现软件复位,当程序运行过程中代码需要强行产生一个复位时必须通过一些软件技巧实现:本文引用地址:http://www.eepw.com.cn/article/148513.htm软复位,程序从头运行,硬件不复位。
复位脚无复位脉冲输出这可以通过直接获取复位向量的方式来实现:void ForceReset(void){uniON {void (*vector)(void);byte c[2];} softReset;softReset.c[0] = *(byte*)0xFFFE; //get the reset vectorsoftReset.c[1] = *(byte*)0xFFFF;softReset.vector(); //re-STart the code flow}硬复位,程序从头运行,内部所有硬件模块和寄存器同时复位,复位脚有复位脉冲输出这必须结合FSL 8位单片机内部的架构特点来实现:1)COP(看门狗)复位这是最简单的一种方式。
程序死循环然后等看门狗作用产生复位。
你必须事先启动看门狗功能,复位过程将有少许延时。
void ForceReset(void){DisableInterrupts; //disable all interruptfor(;;); //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 instruction((void (*)(void))illegalCode)(); //execute illegal instruction will result a RESET}
我是一个单片机新手,请问一下 1.单片机的硬件复位和软件复位有什么...
嘿嘿 还是俺来帮你解答吧1 单片机的硬件复位和门狗复位都是对单片机的复位引脚 加一个复位电平产生的 此时单片机将进行复位操作 pc=0000h p0=p1=p2=p3=0ffh sp=07h 其它特殊寄存器将被清零。
复位结束后 单片机重新开始运行。
2 软件复位;一般为了防止程序跑飞 可以在程序存储器中没有指令的地方 全部写入 LJMP 0000H指令一旦单片机运行跑飞 进入LJMP 0000H指令区 将还返回单片机的第一条指令 重新运行单片机的正常程序.软件复位时,P0 P1 P2 P3 和特殊寄存器的内容都不会再改变.这点与硬件复位不同. 呵呵 满意就给加分吧
请问如何用软件复位51单片机?
(1)两边都是输入的话,那就是没人去置高低电平,呈现三态里的高阻态。
(2)如果左侧单片机I/O是高或低电平,那右侧是就相应的电平;如果左侧单片机I/O是输入或空接,那高阻态电平不确定你不就是用光耦嘛,使用上拉或下拉的方法使光耦输入有一个确定电平就行了。
即如你图所示,光耦二极管输入上方接上拉限流电阻到高电平,光耦二极管输入下方接地,你的单片机I/O接到光耦的二极管输入端(上拉电阻下方)即可。
单片机软复位几种方法
展开全部 如从机收到复位命令(软件命令),程序怎么使机器复位?虽然要使软件始终处于可控状态,最好不要用"复位",因为复位是纯硬件过程,软件是不可控的.但是我们还是要讨论方法,一般流传的方法如下:1、放狗;2、((void(code *)(void))0x0000)();3、用单片机一个引脚控制点一下RSTRST;4、用单片机一个引脚控制重新加电;5、用单片机自带的软件复位指令或内狗指令;6、goto大法;...
如何使8051单片机复位?单片机复位后初始状态如何?
单片机复位有以下几种:1.上电复位,就是单片机在接通电源后,会复位一次。
2.硬件复位,与上电复位结果一样,但可以人为操作,是通过/reset引脚产生的复位。
3.软件复位,这种复位并不彻底,只是让程序再次从0000H开始执行,产生软件复位的方式有多种,如看门狗时间溢出,内部程序落入陷阱等。
单片机复位后的状态与单片机型号有所差异,但只要是硬件以上的复位,其结果状态就是可预知的,比如内部寄存器全部清零,程序计数器回到原点等。
具体要看单片机的手据手册。
怎么对at89s52单片机进行烧录
现在的电脑都取消了并行口,要烧录AT89S52真的很麻烦,有点难。
上网买USB转ISP线或模块,一定要问清楚能烧录AT89S52不?否则买了也没用,因多数是用来烧录AVR单片机的。
再要驱动程序和烧录程序,记住,要两个程序呀。
真不如换STC单片机容易烧录程序,买一个USB转TTL模块就行,网上卖的非常多。
转载请注明出处51数据库 » 52单片机如何软件复位
狗萌小主