|
- /*-----------------------------------------------
- 名稱:看門狗溢出實(shí)驗(yàn) 按鍵不停喂狗
- 內(nèi)容:通過按鍵喂狗防止溢出復(fù)位 看門狗演示程序
- 在16383個(gè)機(jī)器周期內(nèi)必須至少喂狗一次
- 標(biāo)準(zhǔn)AT89s52單片機(jī)試驗(yàn)通過。
- ------------------------------------------------*/
- #include <reg52.h>
- sfr WDTRST = 0xE1;
- sbit K1 = P3^0;
- sbit K2 = P3^1;
- sbit LED1=P1^1;
- sbit LED2=P1^2;
- void DelayUs2x(unsigned char t);//us級(jí)延時(shí)函數(shù)聲明
- void DelayMs(unsigned char t); //ms級(jí)延時(shí)
- /*------------------------------------------------
- 主函數(shù)
- ------------------------------------------------*/
- main()
- {
- LED1=0;
- DelayMs(100);
- LED1=1;
- DelayMs(100);
- TMOD=0x01;
- TH0=0xc6; //定時(shí)16ms
- TL0=0x66;
- EA=1;
- ET0=1;
- WDTRST=0x1e; //在程序初始化中激活看門狗。
- WDTRST=0xe1; //先送1E,后送E1
- if(K1==0)
- {
- TR0=1;
- }
- while(1)
- {
- if(K2==0)
- {
- TR0=0;
- }
- LED2=1;
- LED1=1;
- DelayMs(100);
- LED2=0;
- DelayMs(100);
- }
- }
- /*------------------------------------------------
- 定時(shí)器中斷函數(shù)
- ------------------------------------------------*/
- void Time0(void) interrupt 1
- {
- TH0=0xc6; //定時(shí)16ms
- TL0=0x66;
- WDTRST=0x1e; //喂狗指令
- WDTRST=0xe1;
- }
- /*------------------------------------------------
- uS延時(shí)函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值
- unsigned char 是定義無符號(hào)字符變量,其值的范圍是
- 0~255 這里使用晶振12M,精確延時(shí)請(qǐng)使用匯編,大致延時(shí)
- 長度如下 T=tx2+5 uS
- ------------------------------------------------*/
- void DelayUs2x(unsigned char t)
- {
- while(--t);
- }
- /*------------------------------------------------
- mS延時(shí)函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值
- unsigned char 是定義無符號(hào)字符變量,其值的范圍是
- 0~255 這里使用晶振12M,精確延時(shí)請(qǐng)使用匯編
- ------------------------------------------------*/
- void DelayMs(unsigned char t)
- {
-
- while(t--)
- {
- //大致延時(shí)1mS
- DelayUs2x(245);
- DelayUs2x(245);
- }
- }
復(fù)制代碼 |
|