Не могу понять, почему не срабатывает задержка в прерываниях.
Раздел: AVR
.device atmega8
.nolist
.include "m8def.inc"
.list
;=====================
.def temp= r16
.def Mark240= r17
.def Counter= r18
rjmp Init
rjmp EXT_INT0 ; IRQ0 Handler
;=====================
Timer1:
in temp, TCNT0
cpi temp, 250
brlo Timer1
ldi temp,0b00000001; Сбрасываем флаг
out TIFR,temp;
reti;
Init:
ldi temp,0b00000111; 1, 2 и 3 пины порта В выходы, остальные входы
out DDRB, temp;
ldi temp,0b00000000;
out PortB, temp ; Все выводы порта В выкл.
ldi temp, 0b00000000; Все входы
out DDRD, temp
ldi temp,0b11111111; На всех подтяжка
out PortD, temp
ldi temp, (1<<INT0) | (1<<INT1) ; Разрешаем прераывниепо INT1 и INT2
out GICR, temp
ldi temp, (1<<ISC01) | (1<<ISC11) ; По спадающему фронту
out MCUCR, temp
ldi r16,high(RAMEND); Инициализация стека
out SPH,r16 ;
ldi r16,low(RAMEND)
out SPL,r16
sei ; Разрешаем глобальные прерывания
Start:
sbi PortB,0 ; включаем СИД
sei;
ldi temp,0b00000001; Включаем таймер
out TCCR0,temp; Частота T/C0 равна CK
rcall Timer1
cbi PortB,0 ; выключаем СИД
ldi temp,0b00000001; Включаем таймер
sei;
out TCCR0,temp; Частота T/C0 равна CK
rcall Timer1
sbi PortB,0 ; включаем СИД
sei;
ldi temp,0b00000001; Включаем таймер
out TCCR0,temp; Частота T/C0 равна CK
rcall Timer1
rjmp Start ; возвращаемся к метке START
;========Внешнее прерывание========
EXT_INT0:
ldi temp,0b00000000; Выключаем таймер
out TCCR0,temp;
ldi temp,0b00000000; Обнуляем таймер
out TCNT0,temp;
sbi PORTB, 1 ; Включаем PB1
ldi temp,0b00000001; Включаем таймер
out TCCR0,temp; Частота T/C0 равна CK
Timer:
in temp, TCNT0 ; Ждем
cpi temp, 250
brlo Timer
ldi temp,0b00000001; Сбрасываем флаг
out TIFR,temp;
sbi PORTB, 2; Включаем PB1
reti ; Выходим
Раздел: AVR