volatile unsigned int SystemRamTest;
void SystemInit(void) { PortInit(); TimerInit(); //....... WdtTest();//测试外部看门狗 }
void PortInit() { P0 = 0xff; P1 = 0xff; P2 = 0xff; P3 = 0xff; }
void WdtTest() { WdtClr();//喂外狗 if (SystemRamTest != 0x55aa) {//上电复位可认为SystemRamTest是随机且不可能为0x55aa(概率几乎为0) LedInit(1);//上电复位,初始化Led全亮,这样在外狗坏时常亮!!! Delay100mS();//这里要用软件延时,因为这里还未开中断 XBYTE[0x0200] = 0x77;//复位DSP XBYTE[0x1000] = 0x04;//写板型,上报PC SystemCommand = 0;//复位系统命令,但只有在上电时1次复位 SystemRamTest = 0x55aa;//设置上电复位结束及RAM测试标志 while(1);//等待外部看门狗复位,测试外部看门狗喂狗硬件引脚 } else {//外部看门狗复位测试通过,外狗器件完好 LedInit(0);//软件或看门狗复位,初始化Led全灭,外狗好时Led闪烁1次!!! } }
void main() { IE = 0;//关中断 _start_();//启动时执行2次RETI SystemInit(); while(1) { EA = 1;//开中断 WdtClr();//喂狗 TaskMain();//主任务 PCON |= IDL_;//进入空闲状态 } }
本贴由菜农提供"技巧"答谢诸位"狗友"~~~,转贴请注明出处(雁塔菜地) HotPower@126.com 2009.1.16 于雁塔菜地
|