Watchdog Timer สำหรับ 89S52 ใน Keil

ถ้าพูดถึงไมโครคอนโทรลเลอร์ตระกูล MCS-51 ที่ผมชอบใช้ ก็เป็นเบอร์ 89S52 เนื่องจากมีราคาที่ถูกมาก และที่ถูกอกถูกใจคือผมไม่ต้องถอด IC มา burn เหมือนแต่ก่อนแล้ว ผมต่อสายจาก parallel port มา burn IC ได้เลย (ISP Programming) สะดวกกว่า ICD2 ของ Microchip เสียอีก

เอาละมาเข้าเรื่องกันดีกว่า มันมีอยู่งานนึงที่ผมใช้ 89S52 แต่มันเป็นงานที่ทำตลอด 24 ชั่วโมง ฉะนั้นมันแฮงค์ไม่ได้เลย ผมจำได้ว่า 89S52 มันมี Watchdog Timer ในตัวด้วย เลยไม่รอช้าเปิด datasheet มาดู เค้าบอกว่าอย่างนี้

การที่จะ Enable ให้ Watchdog ทำงานนั้นให้เขียนข้อมูล 0x1E และ 0xE1 ลงไปใน register WDTRST ต้องเขียนต่อกันเลยนะถึงจะใช้ได้ ส่วน Watchdog Timer ตัวนี้เป็น Counter 13 บิตแล้วจะนับขึ้นทุก machine cycle แล้วถ้าปล่อยให้นับได้ถึง 8191 (0x1FFF) เมื่อไหร่ละก็ จะเกิดการรีเซต ฉะนั้นเราต้องเขียนโปรแกรมไปคอยเคลียร์ไม่ให้ Watchdog Timer มันนับไปถึงค่า Overflow 8191

การเคลียร์ Watchdog Timer ก็ทำเหมือนกับ enable นะแหล่ะ ก็เขียนข้อมูล 0x1E และ 0xE1 ลงไปใน register WDTRST ถ้าอยากรู้ว่า 8191machine cycle นี่นานขนาดไหนมาลองคำนวนเล่นๆกันดีกว่า

ตัวอย่าง สมมุติว่าใช้ XTAL 11.0592 MHz แล้ว clock 12 ลูกจะได้ 1 machine cycle

T = (8191*12)/(11059200) = 8.887 mS ฉะนั้นเราต้องไปเคลียร์ Watchdog Timer ทุกๆ 8.8 mS เป็นอย่างน้อย หรือใครจะเคลียร์ทุกๆ 1 mS ก็ยิ่งดี ส่วนตัวเลข 8191 นี่เค้ากำหนดมาตายตัว เราไม่สามารถ scale ได้

ลองดู code ที่จะนำไปใช้กับ Compiler keil ดู

อันดับแรกเราก็ต้องประกาศ sfr (Speacial Function Register) ก่อนเพราะใน AT89X52.h ไม่ได้ประกาศ register WDTRST มาให้

sfr WDTRST = 0xa6;
sfr AUXR = 0x8e;

จากนั้นก็ Enable และ เคลียร์ด้วย Sub void kickdog()

void kickdog()??????????????????????????????? //every 8191 Machine Cycle
{ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //~8 ms
WDTRST = 0x1e;
WDTRST = 0xe1;
}

จากนั้นเราก็หาที่วาง void kickdog() ใน function ต่างๆ (แนะนำว่าควรวางใน loop while(1) )? เพียงเท่านี้ 89S52 ของเราก็ทำงานได้นานแสนนาน โดยที่ไม่แฮงค์ (ถึงแฮงค์ก็รีเซตตัวเองขึ้นใหม่ได้)

ทำความรู้จักกับ Watchdog Timer

Watchdog หรือแปลเป็นไทยว่าหมาเฝ้าบ้าน เป็นอุปกรณ์ชนิดหนึ่งครับที่ทำหน้าที่ Reset Microcontroller เมื่อ Microcontroller แฮงค์

การทำงานของ Watchdog

Watchdog Timer
Watchdog Timer

ภายใน Watchdog จะประกอบไปด้วย Oscillator และ Timer ตัว Timer นี้จะเริ่มนับไปเรื่อยๆตั้งแต่จ่ายไฟให้กับวงจร เมื่อนับไปถึงค่าสูงสุดของมัน มันก็ส่งสัญญาณไป Reset ไมโครคอนโทรเลอร์ แต่ถ้า Microcontroller ส่งสัญญาณไป Clear Timer ของ Watchdog ก่อนที่ Watchdog จะนับถึงค่าสูงสุด Watchdog ก็จะไม่ Reset Microcontroller

ฉะนั้นในการทำงานปกติ Microcontroller ต้อง Clear Timer ของ Watchdog ภายในเวลาที่กำหนดอยู่ตลอดเวลา ถ้า Microcontroller แฮงค์ ไม่ทำงานก็ไม่มีการ Clear Timer ของ Watchdog ทำให้ตัว Watchdog ส่งสัญญาณมา Reset Microcontroller

ทำไมต้องมี Watchdog?

ในบางงานระบบต้องทำงานตลอด 24 ชม. เช่นระบบส่งสัญญาณดาวเทียม ถ้าเกิดการผิดพลาดหรือมี Noise เข้ามากวนทำให้ Microcontroller? แฮงค์ได้ เมื่อเกิดการแฮงค์ Watchdog จะ Reset Microcontroller ขึ้นมาทำงานใหม่

Microcontroller มี Watchdog อยู่แล้วหรือเปล่า?

Microcontroller ตระกูลใหม่ๆเช่น PIC, AVR มี Watchdog อยู่ในตัวแล้ว หรือแม้แต่ Core MCS51 ที่ผลิตในช่วงหลังๆก็จะมี Watchdog ใส่มาใน IC เลย จึงไม่ต้องต่อ IC Watchdog ข้างนอก แต่ถ้า Microcontroller ตัวนั้นไม่มีก็สามารถต่อ IC Watchdog ได้เช่นเบอร์ MAX1232