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

STC89C5X单片机“看门狗”原理详解

时间:11-25 来源:互联网 点击:

066voidInitMain()

067{

068//初始化时两盏灯都熄灭

069LED=1;

070LED_busy=1;

071

072TMOD=0x21;//定时器0工作在方式1,作为16位定时器;定时器1工作在方式2,作为串行口波特率发生器

073TH0=0x4C;//定时器0装初值:每隔50ms溢出一次

074TL0=0x00;

075IE=0x82;//IE=(1000 0010)B, 使能定时器0中断

076TR0=1;//启动定时器0

077}

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

079

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

081//串行口初始化程序

082voidInitCOM()

083{

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

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

086TL1=TH1;

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

088}

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

090

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

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

093voidTimer0_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

111voidmain()

112{

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

114InitMain();

115InitCOM();

116

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

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

119i=0;

120while(str[i]!=)

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