CHƯƠNG 2– TÌM HIỂU VỀ PIC16F877A
2.13. WATCHDOG TIMER (WDT).
WDT là bộ đếm độc lập dùng nguồn xung đếm từ bộ tạo xung được tích hợp sẵn trong vi điều khiển và không phụ thuộc vào bất kì nguồn xung clock ngoại vi nào. Điều đó có nghĩa WDT vẫn hoạt động ngay cả khi xung clock được lấy từ pin OSC1/CLK1 của vi điều khiển ngưng hoạt động ( chẳng hạn như do tác động của lệnh Sleep). Bit điều khiển WDT là bit WDTE nằm trong bộ nhớ chương trình địa chỉ 2007h (Configuration bit).
WDT sẽ tự động reset vi điều khiển (Watchdog Timer Reset) khi bộ đếm của WDT bị tràn( nếu WDT được cho phép hoạt động), đồng thời bit tự động được xóa. Nếu vi điều khiển đang ở chế độ sleep thì WDT sẽ đánh thức vi điều khiển (Watchdog Timer Wake-up) khi bộ đếm bị tràn. Như vậy WDT có tác dụng reset vi điều khiển ở thời điểm cần thiết mà không cần đến sự tác động từ bến ngoài, chẳng hạn như quá trình thi hành lệnh, vi điều khiển bị “kẹt” ở một chỗ nào đó mà không thoát ra được, khi đó vi điều khiển sẽ tự động được reset khi WDT bị tràn để chương trình hoạt động đúng trở lại. Tuy nhiên , khi sử dụng WDT cũng có những phiền toái vì vi điều khiển sẽ thường xuyên reset sau một thời gian nhất định, do đó cần tính toán thời gian thích để
xóa WDT( dùng lệnh CLRWDT). Và để ấn định thời gian reset được linh động, WDT còn được hỗ trợ một bộ phận chia tần số prescaler được điều khiển bởi thanh ghi OPTION_REG( prescaler này được chia xẻ với Timer0).
Một điểm cần chú ý nữa là lệnh Sleep sẽ xóa bộ đếm WDT và
prescaler. Ngoài ra lệnh xóa CLRWDT chỉ xóa bộ đếm chứ không làm thay đổi đối tượng tác động của prescaler( WDT hay Timer0).