首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[转帖]55AA+外部看门狗的检测方法技巧和代码注解

[转帖]55AA+外部看门狗的检测方法技巧和代码注解

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_;//进入空闲状态
}
}


55AA+外部看门狗的检测方法技巧和代码注解 ======  看看
返回列表