Lab7. การใช้งาน Watch dog Timer


#include <p30f2010.h>                   //เปิดใช้งานไลบรารี dspic30F2010                                  

_FOSC(CSW_FSCM_OFF & XT);      // โหมดการทำงาน แบบ XT คริสตอล 4 - 10 MHz ไม่มี PLL
_FWDT(WDT_ON& WDTPSA_64& WDTPSB_16); // เปิดการใช้งาน Watch dog Timer โดยที่เวลาในการรีเซ็ตเท่ากับ   
void delay_ms(unsigned int ms){    //ฟังก์ชั่น delay_ms
                unsigned int i;
                for(; ms>0; ms--)
                for(i=0; i<182; i++)
                Nop();
}
int main(void)
{
                unsigned int i=0;                 //กำหนดค่าตัวแปร I เป็นแบบจำนวนเต็มบวก
                _TRISD0 = 0;                        //port D0 เป็นพอร์ต output 
                while(i++<5){                       //การทำงานวนลูป 5 รอบ
                _LATD0 = 0;                          //port D0 OFF
                delay_ms(1000);                 //delay 1000 ms.
                ClrWdt();                                // Clear Watch Dog Timer
                _LATD0 = 1;                          //port D0 ON
                delay_ms(1000);                 //delay 1000 ms.
                ClrWdt();                                // Clear Watch Dog Timer
                }
                while(1){
                _LATD0 = 1;                          //port D0 ON
}
return 0;
}
การทำงานของโปรแกรมนี้ คือ พอร์ต D0 จะติด ดับทุกๆ 1 วินาที จำนวน 5 รอบ แล้วเข้าสู่ลูปการทำงานคือ  พอร์ต D0 ON จนกว่าค่าเวลาใน Watch Dog Timer จะ Reset คือ 2048 ms. แล้วจะดับ