Вс июл 29, 2018 23:30:56
Пн июл 30, 2018 03:40:37
.org $008
WATCHDOG:
SBI PINB,2
reti ; возвращаемся из прерывания
Пн июл 30, 2018 03:45:06
Пн июл 30, 2018 06:04:02
Пн июл 30, 2018 06:51:47
Пн июл 30, 2018 21:35:33
Пн июл 30, 2018 23:11:41
Вт июл 31, 2018 03:28:53
; НАСТРОЙКА СТОРОЖЕВОГО ТАЙМЕРА
;
;грубо говоря мы включаем сторожевой таймер с периодом 0,25 сек, и командой WDR периодически его обнуляем, и по теории он
;перезапустит МК если произойдет зависание программы и программа вовремя не сможет обнулить сторожевой таймер
;
;
.cseg
.include "tn13Adef.inc"
;***************************************************************************************
;***************************************************************************************
.org $000 rjmp RESET ; Reset Handler
;.org $001 reti EXT_INT0 ; IRQ0 Handler Внешнее прерывание 0
;.org $002 reti PCINT0 ; PCINT0 Handler Прерывание по изменению состояния выводов
;.org $003 reti TIM0_OVF ; Timer0 Overflow Handler Переполнение таймера/счетчика ТО
;.org $004 reti EE_RDY ; EEPROM Ready Handler EEPROM готово
;.org $005 reti ANA_COMP ; Analog Comparator Handler Аналоговый компаратор
;.org $006 reti TIM0_COMPA ; Timer0 CompareA Handler Совпадение А таймера/счетчика ТО
;.org $007 reti TIM0_COMPB ; Timer0 CompareB Handler Совпадение В таймера/счетчика ТО
.org $008
WATCHDOG:
SBI PINB,2
reti ; возвращаемся из прерывания
;*****************************************************************************************
RESET:
CLI ; запретить все прерывания
; ldi r16, low(RAMEND)
; out SPL,r16 ; инициализация стека в тиньке 13
Ldi r16, 0b11111111
out DDRB, r16 ;все биты на выход
;***************************************************************************************
WDR ;команда сброса сторожевого таймера
Ldi r16, 0b00011000 ;одной командой устанавливаем в 1 биты В3(WDE) и В4(WDCE)
out WDTCR, r16 ;такой порядок записи для ватчага
Ldi r16, 0b00000000 ;сбрасываем бит В4(WDCE) и бит В3(WDE) , выставляем период тайм-аута ватчага
out WDTCR, r16 ;бит В2(WDP2) сбрасываем в 0, биты В5(WDP3), В1(WDP1), В0(WDP0) сбрасываем в 0
;
;период тайм-аута выставлен в 16мс
Ldi r16, 0b01000000 ;
out WDTCR, r16 ;бит В6(WDTIE) установим в 1 ( разрешим прерывание WATCHDOG
SEI ; разрешить прерывания
;***************************************************************************************
main:
rjmp main ; зацикливаем по кругалю МК
;*************************************************************************************
.EXIT