如果你想通過軟件復(fù)位AVR,你應(yīng)該使用內(nèi)部看門狗。簡(jiǎn)單的使能它和讓它溢出。當(dāng)看門狗觸發(fā)后,程序計(jì)數(shù)器返回到0,清除所有的寄存器和其他正在執(zhí)行的任務(wù),這與將RESET腳拉低有同樣的效果。
你不應(yīng)該處理:
--用另一個(gè)AVR的引腳連接外部RESET引腳。在短暫的復(fù)位時(shí)間,AVR的引腳會(huì)三態(tài)失效,這會(huì)導(dǎo)致RESET無效。
--跳到程序地址0,跳到程序地址0,這不會(huì)清除全部的寄存器,所以你不會(huì)得到一個(gè)完整的“復(fù)位”。
本文引用地址:
http://m.butianyuan.cn/article/201611/320370.htm下列是每30mS復(fù)位一次AVR的例子代碼(GCC):
#include <avr/io.h>
#include
int main(void)
{
wdt_enable(WDTO_30MS);
while(1) {};
}
或者你可以生成一個(gè)宏:
#include
#include
#define Reset_AVR() wdt_enable(WDTO_30MS); while(1) {}
int main(void)
{
Reset_AVR();
}
評(píng)論