请教:在ICC中如何实现对AVR单片机的软复位
想通过一个按键和一个I/O口实现复位,目的是想增强抗干扰能力。 关闭中断,启动watchdog,等待watchdog复位. 谢谢,除看门狗呢,还有没有其他办法? void (*reset)(void)=0x0000;...
int main(void)
{
...
reset();
...
}
在其他帖子上看到的,但看不懂什么意思啊。 这个函数在复位时,不对单片机的所有资源进行复位吗?包括i/o.我接了一个小灯,复位时还是保持高电平 mark 首先要明白AVR的复位要做什么事情,以及过程如何。然后看你的代码才能决定如何实现AVR的软件复位。
注意,下面的讨论不包括BOOTLOAD方式。
AVR的复位(上电复位)有一个重要的事情:就是将决大部分的寄存器复位成复位初始值,然后从$0000读取第一条指令,开始执行代码。
3楼方式是让AVR从直接跳到$0000开始执行,这只是实现了上电复位的第2步,而此时寄存器的值并不是复位的初始值,因此样的复位与硬件的RESET复位还是有差别的。只有当你的代码在开始部分有对所有寄存器都做过初始化设置的话,这样的方式才等效硬件复位。
比较彻底的软件复位是利用AVR的watchdog,因为watchdog本身可以实现真正的硬件复位。 马老师讲的透彻。 不知道楼主如何利用一个按键和I/O口增强抗干扰能力???
要用按键复位,直接接到复位线上好了。 回复【3楼】Rocker
void (*reset)(void)=0x0000;
...
int main(void)
{
...
reset();
...
}
在其他帖子上看到的,但看不懂什么意思啊。
-----------------------------------------------------------------------
void (*reset)(void)=0x0000;//函数指针定义,指针值为0,即函数开始地址为0
...
int main(void)
{
...
reset();//调用函数指针
...
} 又受教了 又受教了 还不如用三5加521实现呢!这样还简单呢! machao 发表于 2009-10-30 13:28
首先要明白AVR的复位要做什么事情,以及过程如何。然后看你的代码才能决定如何实现AVR的软件复位。
注意, ...
我也比较支持看门狗这种做法,走个死循环 让狗咬死 哈哈 简单实用 一了百了,无后顾之忧{:lol:}
页:
[1]