- /*-----------------------------------------------
- 名稱:看門狗溢出實驗 按鍵不停喂狗
- 內容:通過按鍵喂狗防止溢出復位 看門狗演示程序
- 在16383個機器周期內必須至少喂狗一次
- 標準AT89s52單片機試驗通過。
- ------------------------------------------------*/
- #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級延時函數聲明
- void DelayMs(unsigned char t); //ms級延時
- /*------------------------------------------------
- 主函數
- ------------------------------------------------*/
- main()
- {
- LED1=0;
- DelayMs(100);
- LED1=1;
- DelayMs(100);
- TMOD=0x01;
- TH0=0xc6; //定時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);
- }
- }
- /*------------------------------------------------
- 定時器中斷函數
- ------------------------------------------------*/
- void Time0(void) interrupt 1
- {
- TH0=0xc6; //定時16ms
- TL0=0x66;
- WDTRST=0x1e; //喂狗指令
- WDTRST=0xe1;
- }
- /*------------------------------------------------
- uS延時函數,含有輸入參數 unsigned char t,無返回值
- unsigned char 是定義無符號字符變量,其值的范圍是
- 0~255 這里使用晶振12M,精確延時請使用匯編,大致延時
- 長度如下 T=tx2+5 uS
- ------------------------------------------------*/
- void DelayUs2x(unsigned char t)
- {
- while(--t);
- }
- /*------------------------------------------------
- mS延時函數,含有輸入參數 unsigned char t,無返回值
- unsigned char 是定義無符號字符變量,其值的范圍是
- 0~255 這里使用晶振12M,精確延時請使用匯編
- ------------------------------------------------*/
- void DelayMs(unsigned char t)
- {
-
- while(t--)
- {
- //大致延時1mS
- DelayUs2x(245);
- DelayUs2x(245);
- }
- }
復制代碼 |