51单片机复位电路软复位几种方法

单片机软复位,(*(void (*)(void))0()详解【devlabs吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:1贴子:
单片机软复位,(*(void (*)(void))0()详解
这几天在做一个东西,一个普通按键,一个复位按键。由于某些原因,硬复位按键有时候不方便引出来,为了通用起见,打起了软复位的主意。说是软复位,其实说是想让单片机跳到0地址开始执行。在不使用汇编的情况下,想办法用C语言实现。记得好像是&&C专家编程&&里提供过一种方法,有点印像,但是记不起来了。反正就是使用函数指针。琢磨了一会,于是有了以下文字:首先是函数指针。声明一个函数指针的语法如下:void (*p)(void);
// 声明了一个函数指针p, 指向无返回值无参数的函数下面定义一个函数:void foo(void){}使得函数指针p指向foo:p =
// 函数名其实就是函数的地址然后就可以使用函数指针调用函数了:(*p)();
// 等于foo()所以,理所当然的,我们想到这个办法:p = 0x00;(*p)();这们应该可以行得通,但是类型不匹配,编译器可能会有警告。ps:后来我试了一下,编译器居然没有警告。想了一下,明白了,应该是编译器将NULL定义为0,所以这一句就相当于:p = NULL;所以没有报错。然后使用任意一个非0值给p赋值,警告就出现了。自然我们会想到强制类型转换。但函数指针的类型是什么呢?先看看普通变量:
// 变量类型为 charint *p;
// 变量类型为 char *const char *j;
// 变量类型为 const *很明显,将变量声明时的变量类型去掉,就是变量类型了。所以我们声明的那个函数指针的类型应该为:void (*)(void);强制转换:我们知道将一个int型的变量bar强制转换为char可以使用如下方式:(char)函数指针一样。下面我们将0强制转换为函数指针类型:(void (*)(void))0;然后:p = (void (*)(void))0;(*p)();完成。等等,好像还不美!注意函数指针调用函数的方式:(*p)();*p什么意思?取p的内容。那p的内容是什么东西?很明显 p = (void (*)(void))0。那我们把p换成(void (*)(void))0看看。于是有:(*(void (*)(void))0)();完成,连指针变量都省了。在Keil中试了一下,编译后汇编语句就一条:LCALL C_STARTUP(C:0000)
贴吧热议榜
使用签名档&&
保存至快速回贴很给力的STC单片机复位方法总结
单片机&嵌入式
单片机应用
嵌入式操作系统
学习工具&教程
学习和开发单片机的必备工具
(有问必答)
(带你轻松入门)
电子元件&电路模块
当前位置: >>
>> 浏览文章
很给力的STC单片机复位方法总结
单片机软复位有什么好的方法?如从机收到复位命令(软件命令),程序怎么使机器复位?虽然要使软件始终处于可控状态,最好不要用&复位&,因为复位是纯硬件过程,软件是不可控的.但是我们还是要讨论方法,一般流传的方法如下:
2、((void(code *)(void))0x0000)();
3、用单片机一个引脚控制点一下RSTRST;
4、用单片机一个引脚控制重新加电;
5、用单片机自带的软件复位指令或内狗指令;
6、goto大法;
方法1:&放狗&是单片机软复位的最好办法,也基本上是唯一的一个办法。但并不是所有单片机都具备看门狗的功能,也不是一个万全之策。
办法2:这不是复位,只是把程序转到地址0去执行,不如用一个JMP更直接。目前可能极少数单片机或者用户已经自行添加Boot load时用户程序的程序开始地址并不为0x0000,所以需要查找这些特定单片机的启动地址。
在keil C51下面可以这样实现:
void soft_reset(void)
((void (code *) (void)) 0x0000) ();
在需要软件复位的地方使用语句:
soft_reset();
一般可实现软件复位。
办法3:用软件实现的硬复位。需要牺牲一个单片机引脚,且增加了单片机外部电路构造的复杂性,很不可??r
办法4:类似办法3,同样需要牺牲一个单片机引脚,且增加了单片机外部电路构造的复杂性.
办法5:Atmel 89C不带内狗,S的有内狗,只是一条指令就行。如STC的单片机有软件复位指令,即ISP_CONTR,地址在0E7H 单元(即str ISP_CONTR=0xE7),MOV ISP_CONTR,#B(C语言为ISP_CONTR=0x20),内狗也是一条指令MOV WDT_CONTR,#B!
STC 51系列单片机Datasheet中指出:传统的8051 单片机由于硬件上未支持此功能,用户必须用软件模拟实现,实现起来较麻烦。现STC 新推出的增强型8051 根据客户要求增加了ISP_CONTR 特殊功能寄存器,实现了此功能。用户只需简单的控制ISP_CONTR 特殊功能寄存器的其中两位 SWBS / SWRST 就可以系统复位了。
办法6:程序从头(上电复位处)开始运行,且只有一个循环这种情况,当然可以用goto,如在main()的开头设一个start:,在程序的唯一循环中设定一个条件,然后goto命令。但需要注意,如果是在中断例程里,那么中断挂号寄存器仍置位,同级中断不能执行。所以必须先使中断挂号寄存器清零,EA = 0。只有RETI指令可以使中断挂号寄存器清零。51单片机有两级中断优先级,所以需要执行两次RETI指令。这用汇编是很简单的事,而C则比较难以实现。但是,goto命令尽量不要用,因为goto会到处乱窜,而且goto不能跑到函数外面去执行一个命令。
【】【】【】【】
上一篇:下一篇:
CopyRight @
单片机教程网 51hei.com , All Rights Reserved有哪几种方法使单片机复位_百度知道
有哪几种方法使单片机复位
我有更好的答案
电复位复位引脚复位管哪种复位PC指针都指向0000H,再往看程序做哪些初始化程序知道寄存器RAM
采纳率:58%
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。软复位方法
在进行单片机开发中,经常要用到软复位.
软复位其实就是把运行指针指向绝对地址为0的地方.可以定义一个函数指针.然后把地址指向绝对地址0.
这里我说下另外一种方法:
1.把0转换为
返回参数为空类型,参数为空的函数.
(void(*)())0
2.然后取这个函数地址值
* (void(*)())0
再就是进行函数运行.
(* (void(*)())0)();
有兴趣的朋友可以进行验证下.
没有更多推荐了,各位高手:请教用软件怎么实现单片机复位[韩非子]_老古论坛
导航: → →→→→→→→各位高手:请教用软件怎么实现单片机复位[韩非子]
&*第12910篇: 各位高手:请教用软件怎么实现单片机复位
&&楼 主:&日10:00&各位高手:请教用软件怎么实现单片机复位我不想通过硬件包括看门狗 用纯软件怎么实现复位呢? 需要把那些寄存器置零 还是用其他方法? 谢谢!
&&第2楼:&日10:41&软件复位:如果你的程序中没有中断,就比较好办,只要将硬件复位后的寄存器、I/O等的状态用软件置位后跳转到0地址处即可。 如果有中断就需要仔细对待,软件复位前必须要与中断管理有关的寄存进行处理,中断管理系统的有些寄存器是不可以程序访问的,必须使用RETI(for&51mcu)指令才可以。 具体情况可能很复杂。
&&第3楼:&日11:58&很感谢我的中断有外部0中断和定时器0中断 请问是否有影响? 我想当执行到一句命令时执行复位 是否用全置零和跳转到0地址即可
&&第4楼:&日12:39&参考:中断都具有随机性,所以你需要保证程序在跳转到0地址之前不会有中断产生。在jmp&0之前关闭中断是否安全,也不一定,因为cpu响应中断请求后,至少执行一条指令后才转向中断服务程序,这点处理不好回使程序不能正常执行,或者在“软件复位“后不能再次响应中断。能不能想一个别的什么办法。不知你这样做的目的是什么。
&&第5楼:&日12:13&释放所有中断,寄存器复位参照硬件位复后的释放所有中断,寄存器复位参照硬件位复后的寄存器状态来编写。
&&第6楼:&日12:40&问题不是你想象的那么简单。。。。。。。。。。。。
&&第7楼:&日16:29&我知道了
&&第8楼:&日17:02&有的单片机有一个复位位,如51LPC系列,只需控制此位即可完成软件复位。
&&第9楼:&日09:30&能给出一个具体片子的名称吗? 谢谢各位能给出一个具体片子的名称吗? 谢谢各位大虾的回复。 我的问题已经解决了。 问题是这样的,我在两个子程序之间跳转时,出现问题就是没有响应 但如果我用硬件复位一次,就好了。所以当时我想用软件复位来替代硬件复位 后来2我改了一个子程序中的语句: &&&&&原来是:一个子程序中&&&&&&&CLR&&&P3.3 &&&&&&&&&&跳至另一子程序时&&&&&&&&SETB&P3.3 &&&&&后来我将这两句去掉 &&&&&结果跳转就好使了。 &&&&各位大虾这可能是什么原因呢? &&&&&&&&&&&&&&&&
&&第10楼:&日13:02&片子型号查www.zlgmcu.com。内容所述问题原因不明。
本主题贴数10,分页: [第1页]
[上一篇主题]:
[下一篇主题]:}

我要回帖

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

更多推荐

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

点击添加站长微信