微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STC89C5X单片机“看门狗”原理、详解和演示程序

STC89C5X单片机“看门狗”原理、详解和演示程序

时间:01-27 来源:互联网 点击:
  • 076TR0=1; //启动定时器0

    077}

    078/*************************************************************************/

    079

    080/*************************************************************************/

    081//串行口初始化程序

    082void InitCOM()

    083{

    084SCON=0x50; //SCON=(0101 0000)B,波特率不加倍,允许接收

    085TH1=0xFD; //设置波特率=9600bps

    086TL1=TH1;

    087TR1=1; //启动定时器1

    088}

    089/*************************************************************************/

    090

    091/*************************************************************************/

    092//定时器0中断服务程序程序,控制信号灯闪烁。如果系统正常运行,信号灯1.5秒闪一次

    093void Timer0_isr() interrupt 1

    094{

    095TH0=0x4C;

    096TL0=0x00;

    097timer0_ctr++;

    098

    099if(timer0_ctr>=30)

    100{

    101TR0=0; //定时器0暂停,否则再次来中断会冲断程序

    102timer0_ctr=0;

    103LED=0;

    104delay_ms(100);

    105LED=1;

    106TR0=1; //定时器0重新启动

    107}

    108}

    109/*************************************************************************/

    110

    111void main()

    112{

    113WEIGOU; //上来第一步设置看门狗定时器,并且启动

    114InitMain();

    115InitCOM();

    116

    117//开机通过串口发送一次“I love MCU!”,使用串口调试助手可以查看

    118//由于在while大循环外边,所以只要系统不重新启动,则上电后只会发送一次,用于判断系统是否重启

    119i=0;

    120while(str[i]!='\0')

    121{

    122SBUF=str[i];

    123while(TI==0);

    124TI=0;

    125i++;

    126}

    127

    128//while大循环

    129while(true)

    130{

    131//约每隔800ms喂一次狗,可以通过调整这里的喂狗时间来验证看门狗是否有效

    132//我们设置的看门狗约1秒。所以可以用800和2000分别做一次试验,看是否会被看门狗复位

    133delay_ms(2000);

    134LED_busy=0; //第一次上电约延时800ms工作灯点亮,如果系统不重启,他将一直亮着,用于指示系统是否重启

    135WEIGOU;

    136}

    137}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top