Лабораторная работа 4 Исследование работы сторожевого таймера
Цель работы: исследование режимов работы сторожевого таймера микроконтроллера (МК)ADuC812.
Текст программы.
$MOD812 ;присоединение модуля символов АDuC812
LED EQU P3.4 ;биту P3.4 порта Р3 присваивается имя LED (светодиод VD)
ERROR EQU F0 ;флаг ERROR используется для моделирования ошибочной
;команды, при этом нарушается нормальный ход выполнения
;программы и управление передается на "ошибочную" команду
;--------------------------------------------------------------------------------------------------------------
CSEG ;сегмент памяти программ
ORG 0000h ;начальный адрес сегмента 0000Н
JMP MAIN ;переход к главной программе
;-----------------------------------------------------------------------------------------------------
ORG 03h ;вектор ПРВ INT0. Сюда управление передается
;после нажатия кнопки Е0 на панели инструментов.
SETB ERROR ;установить флаг ERROR, тем самым моделируется
;состояние ошибки работы программы.
RETI ;возврат из ПП обработки ПРВ INT0
;============================================================
;Главная программа
ORG 004Bh
MAIN:
SETB IT0 ;установить тип внешнего ПРВ INT0 по фронту
SETB EA ;разрешить ПРВ
SETB EX0 ;разрешить внешнее ПРВ INT0
CLR ERROR ;сброс бита ошибки ERROR
; Установить параметры WDT
MOV WDCON, #0E0h ;WDCON=E0h=11100000 - период WDT равен 2048 мс
SETB WDE ;разрешить работу WDT
;После команды “SETB WDE” таймер начинает отсчет времени. При нормальной работе ;программы он должен постоянно перезагружаться через время, не превышающее 2048 мс. ;Если этого не происходит, то WDT выполнит перезагрузку программы и она начнет ;выполняться с нулевого адреса, т.е. с команды “JMP MAIN” (см. листинг программы).
;Цикл FLASH имитирует нормальный режим работы программы, при этом VD мигает.
;Длительность цикла равнее примерно 100 мс, что меньше периода WDT (2048 мс), след.
;WDT успевает перезагружаться.
FLASH: CPL LED ;переключить VD
CALL DELAY ;выдержка времени 100 мс
SETB WDR1 ;обновить WDT. Биты WDR1 и WDR2
SETB WDR2 ;должны быть установлены в указанном порядке
JNB ERROR, FLASH ;переход к циклу FLASH, если флаг ERROR = 0
; Сюда управление передается после возврата из ПП обработки ПРВ от INT0,
;в которой устанавливается флаг ERROR. Этот флаг, имитируя ошибку, позволит
;выйти из рабочего цикла FLASH на бесконечный цикл (команда JMP $).
; Эта команда имитирует фрагмент программы, на которую из рабочего цикла FLASH
;из-за ошибки было передано управление. Этот фрагмент программы выполняется за время,
;превышающее период WDT в 2048 мс, след., произойдет переполнение WDT, после чего он
;перезагрузит программу и она начнет выполняться с нулевого адреса.
JMP $
;--------------------------------------------------------------------------
;Подпрограмма DELAY, дающая задержку времени 100 мс
DELAY:
MOV R7, #200
DLY1: MOV R6, #230
DJNZ R6, $ ;230*2.17 мкс = 500 мкс
DJNZ R7, DLY1 ;200*500 мкс = 100 мс
RET
;--------------------------------------------------------------------
END