標(biāo)題: 89S系列單片機(jī)的WDT不可靠,我自制個(gè)有效的片外看門狗 [打印本頁]

作者: Kxuan163    時(shí)間: 2020-12-11 23:00
標(biāo)題: 89S系列單片機(jī)的WDT不可靠,我自制個(gè)有效的片外看門狗
本帖最后由 Kxuan163 于 2020-12-18 23:06 編輯

一、制作因由:
    筆者開發(fā)了一個(gè)以AT89s52為MCU的家電控制系統(tǒng)。
    在未有看門狗之前,控制系統(tǒng)受到來自所控對(duì)象電路通/斷或電網(wǎng)波動(dòng)之類的干擾,時(shí)有程序指針跑飛的死機(jī)異常。
為保障控制系統(tǒng)工作可靠穩(wěn)定,決定使用看門狗(Watchdog)。
    起初,試用AT89s52片內(nèi)的看門狗WDT, 實(shí)踐中發(fā)現(xiàn)WDT不可靠----當(dāng)晶振受干擾而停振時(shí),WDT失效。
決定改用抗干擾能力較強(qiáng)的片外看門狗。有行家提及,可選用片外狗芯片MAX708、MAX813、X25045.....
筆者手頭上無該類芯片實(shí)物及資料。于是自行設(shè)計(jì)制作了本文所述的片外看門狗。
    半年多以來的使用實(shí)踐表明,筆者自制的這個(gè)片外看門狗有效、實(shí)用。


二、基本工作原理:
(1)在單片機(jī)程序正常運(yùn)行狀態(tài):
每隔t0時(shí)間,T0中斷服務(wù)程序"喂狗"一次,使它暫不"犬吠"
t0≈65毫秒,由T0初始化程序設(shè)置定(請(qǐng)參閱下述的程序塊代碼 )。
所謂"喂狗",就是由單片機(jī)PO.3引腳輸出低電平信號(hào),送至片外狗電路的U3_2腳,使狗不"犬吠"。
("喂狗"的實(shí)際細(xì)節(jié)請(qǐng)參閱下述的流程圖)
(2)因外界干擾導(dǎo)致程序指針跑飛或晶振停振,不能定時(shí)喂狗:
若停止喂狗時(shí)間長達(dá)td(≈6秒),則狗"犬吠",使單片機(jī)復(fù)位,復(fù)位后恢復(fù)平定時(shí)喂狗功能。
所謂"犬吠",就是由J5_3腳輸出高電平信號(hào)送至單片機(jī)RST引腳(細(xì)節(jié)請(qǐng)參閱下述的流程圖)。
td時(shí)間長短取決于R3阻值與C2電容值的乘積,即RC充放電時(shí)間常數(shù)。

三、片外看門狗電路圖:



四、片外看門狗工作流程圖:
[attach]257674[/attach]


五、89s52單片機(jī)與喂狗相關(guān)的程序塊:
;;--------------------------------------------
         ORG   000BH      ;定時(shí)器T0中斷處理入口地址
         AJMP   T0_INT
;;--------------------------------------------
;;
;;
;;--------------------------------------------
SET_T0:   ;; T0初始化,
          ;; 定時(shí)65ms的計(jì)數(shù)值 =65000μs/1μs =65000
          ;; 方式1,16位計(jì)數(shù)器,計(jì)數(shù)值 =65536-65000 =536 =218H
         MOV   TMOD, #01H    ;; T0定時(shí)模式.方式1(16位計(jì)數(shù)器)
         MOV   TH0,  #02H    ;; 裝入計(jì)數(shù)初值高字節(jié)
         MOV   TL0,  #18H    ;; 裝入計(jì)數(shù)初值低字節(jié)
         SETB  TR0           ;; 啟動(dòng)T0
         SETB  ET0           ;; 允許T0中斷
         SETB  EA            ;; MPU開中斷
         RET
;;-------------------------------------------  
;;
;;
;;-------------------------------------------  
T0_INT:     ;; T0定時(shí)中斷處理程序,每隔65ms喂狗一次  
         CLR   P0.3          ;; 89s52的P0.3引腳輸出低電平
         MOV   TH0,  #02H    ;; 重裝計(jì)數(shù)初值高字節(jié)
         MOV   TL0,  #18H    ;; 重裝計(jì)數(shù)初值低字節(jié)
         RETI
;;--------------------------------------------  




作者: szb314    時(shí)間: 2020-12-12 10:47
ST的 sot23的狗 1塊錢一個(gè)
作者: Kxuan163    時(shí)間: 2020-12-12 14:31
szb314 發(fā)表于 2020-12-12 10:47
ST的 sot23的狗 1塊錢一個(gè)

謝謝提供信息。
作者: Kxuan163    時(shí)間: 2022-9-2 16:20
我網(wǎng)購得DS1232芯片(¥0.92/片)重新制作看門狗。
.
仿真圖如下:



代碼如下:
#include<reg51.h>
#include <intrins.h>
#define FLUX

sbit P2_7=P2^7;         

void delayms(unsigned char ms) // 延時(shí)ms函數(shù)
{                                               
        unsigned char i;
        while(ms--)
        {
                for(i = 0; i < 120; i++);
        }
}

void main()
{

        int x, LED ;

        LED = 0x55; // 奇數(shù)燈亮
        P0 = LED;
        delayms(150);

        LED = 0xAA;         // 偶數(shù)燈亮
        P0 = LED;
        delayms(150);                               

//   LED =0xff;         // 全滅
//   P0 = LED;

   while(1)
    {
     FLUX
          LED = 0xfe;
          P0 = LED;
      P2_7 =0;
          for(x =1; x<=8; x++)
           {
            delayms(125);
                P2_7 =  ! P2_7;      //P2.7腳電平反轉(zhuǎn),作喂狗信號(hào)
                LED = _crol_(LED,1); //循環(huán)右移1位,點(diǎn)亮下一個(gè)LED
            P0 = LED;
           }
        }  

}








歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1