!!!请教如何实现各种单片机 按键重启(和PC一样)

[复制链接]
5739|23
 楼主| itelectron 发表于 2011-1-2 18:21 | 显示全部楼层 |阅读模式

  • (*(void (*)(void))(0x00000000))();//跳转绝对地址
  •    RamClear();//清内存

复制代码






写 代码!



NE5532 发表于 2011-1-2 19:49 | 显示全部楼层
有的用GOTO,有的带重启,有的可以用狗,但是你加个“各种”就没人敢接招了,具体问题具体讨论。
sz_longyue 发表于 2011-1-2 20:07 | 显示全部楼层
按键硬件拉电源,按一下把MCU的VDD对地给短路咯:lol
lyjian 发表于 2011-1-2 20:20 | 显示全部楼层
按键直接接为复位功能就是了,一按就重启了,任何按单片机都一样
原野之狼 发表于 2011-1-2 20:36 | 显示全部楼层
直接接入RESET就搞定啦
shell.albert 发表于 2011-1-2 20:49 | 显示全部楼层
1.硬件RESET
2.软件Watchdog,*(void*)0x00
3.还有就是整死片子,切断供电.再上电.
SeaSun 发表于 2011-1-2 20:52 | 显示全部楼层
IO 接 10R电阻 放电
原野之狼 发表于 2011-1-2 20:53 | 显示全部楼层
LS 第二条存在风险哦
hycloudy 发表于 2011-1-2 21:05 | 显示全部楼层
1.按键使CPU复位
2.软件使CPU复位引脚产生复位信号(不是所有单片机提供该功能)
3.硬件看门狗 不喂狗
4.不建议用跳转或其他软件方式使程序转到复位开始处,有风险
xwj 发表于 2011-1-2 21:05 | 显示全部楼层
很多很多CPU可以通过寄存器复位的
程序医人 发表于 2011-1-2 21:43 | 显示全部楼层
LZ想弄个按键复位的,那就用reset管脚复位呗。电脑的复位键大体也是这样的吧。
 楼主| itelectron 发表于 2011-1-2 22:10 | 显示全部楼层
我的意思是  一个菜单里有一个选项  重新启动MCU。
 楼主| itelectron 发表于 2011-1-2 22:11 | 显示全部楼层
很多很多CPU可以通过寄存器复位的
xwj 发表于 2011-1-2 21:05

那有没有 通用点的 程序 直接用C实现 ,
linqing171 发表于 2011-1-3 12:51 | 显示全部楼层
(*(void (*)(void))(0x00000000))();//跳转绝对地址

这个,CPU和外设并没有复位.
比如跳转后 工作寄存器(PIC的W; 51的Acc) 并没有变成复位值.
比如跳转后 51的中断优先级寄存器(软件无法访问,只有RETI才能清空,此寄存器置位的情况下,任何中断都不响应) 没有复位.
比如各种外设.....
 楼主| itelectron 发表于 2011-1-3 18:04 | 显示全部楼层
那就这样
CloseAll_Interrupt ();//关所有中断
Ram_Register_Clear();//清内存 +寄存器
(*(void (*)(void))(0x00000000))();//跳转绝对地址  :lol
sz_longyue 发表于 2011-1-3 18:24 | 显示全部楼层
楼上应该是51通用,很多台系的IC用这个方法清不了堆栈,比如HT....这样JMP个几次你就会发现堆栈满了
new1988 发表于 2011-1-4 12:18 | 显示全部楼层
软的不行,来硬的噻!
t.jm 发表于 2011-1-4 12:51 | 显示全部楼层
本帖最后由 t.jm 于 2011-1-4 12:53 编辑

硬件堆栈的就不能用jmp 0x0000来复位
程序医人 发表于 2011-1-5 10:11 | 显示全部楼层
这个就用个IO口去触发单片机的reset管脚进行复位呗,复位脚接个单稳态触发器什么的就行了。  不就软件复位了?
 楼主| itelectron 发表于 2011-1-5 23:08 | 显示全部楼层
楼上的 太麻烦  硬件reset感觉也 不 安全。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:MARK: zhi kan ji shu

274

主题

2761

帖子

8

粉丝
快速回复 在线客服 返回列表 返回顶部