Код: Выделить всё
.device atmega8a
.nolist
.include "D:\prg\AVRStudio419\AvrAssembler2\Appnotes\m8Adef.inc"
.list
;=======Прерывание компаратора (переполнение счетчика) Вариант2
.def temp=r16
.def temp1=r17
.cseg
.org 0
rjmp RESET ;Переход на обработку сброса
rjmp EXT_INT0 ;Переход на обработку запроса IRQ0
rjmp EXT_INT1 ;Переход на обработку запроса IRQ1
rjmp TIM2_COMP ;Переход на обработку сравнения Timer2
rjmp TIM2_OVF ;Переход на обработку при переполнении Timer2
rjmp TIM1_CAPT ;Переход на обработку при захвате фронта Timer1
rjmp TIM1_COMPA ;Переход на обработку при срабатывании компаратора A Timer1
rjmp TIM1_COMPB ;Переход на обработку при срабатывании компаратора B Timer1
rjmp TIM1_OVF ;Переход на обработку при переполнении Timer1
rjmp TIM0_OVF ;Переход на обработку при переполнении Timer0
rjmp SPI_STC ;Переход на обработку при завершении передачи SPI
rjmp USART_RXC ;Переход на обработку при завершении приема УСАПП0
rjmp USART_UDRE ;Переход на обработку при освобождении регистра
rjmp USART_TXC ;Переход на обработку при завершении передачи
rjmp ADC_END ;Переход на обработку при завершении преобразования AЦП
rjmp EE_RDY ;Переход на обработку при готовности EEPROM
rjmp ANA_COMP ;Переход на обработку при срабатывании аналогового компаратора
rjmp TWSI ;Двухпроводный Последовательный интерфейс
rjmp SPM_RDY ;Переход на обработку прерывания при Готовности записи в память программ
;RESET:
EXT_INT0:
EXT_INT1:
TIM2_COMP:
TIM2_OVF:
TIM1_CAPT:
;TIM1_COMPA:
TIM1_COMPB:
;TIM1_OVF:
;TIM0_OVF:
SPI_STC:
USART_RXC:
USART_UDRE:
USART_TXC:
ADC_END:
EE_RDY:
ANA_COMP:
TWSI:
SPM_RDY:
reti
RESET:
rjmp Init
Init:
ser temp ;в результате temp=0xFF
out DDRB,temp ;весь регистр B ориентировали на выход
out DDRD,temp ;весь регистр D ориентировали на выход
ldi temp,Low(RamEnd) ;в temp посл. адрес ОЗУ (младший байт)
out SPL,temp ;задать младший байт указателя стека
ldi temp,High(RamEnd) ;в temp посл. адрес ОЗУ (старший байт)
out SPH,temp ;задать старший байт указателя стека
ldi temp,0b00000001
out PortB,temp ;включить красный СИД1
ldi temp,0b00000000
out PortD,temp ;включить зеленый (инверсный) СИД1
ldi temp,0b00010001
out TIMSK,temp ;разрешить прерывание компаратора (в т.ч. по переполнению)
ldi Temp,0b00000010 ;тактовый сигнал = CK/8
out TCCR1B,Temp
ldi Temp,0x4C ;инициализация компаратора
out OCR1AH,Temp
ldi Temp,0x4B
out OCR1AL,Temp
ldi Temp1,0b00000001 ;инициализация индикатора
sei ;разрешить прерывания
ldi Temp,0 ;обнуление таймера
out TCNT1H,Temp
out TCNT1L,Temp
Inf: rjmp Inf ;бесконечный цикл
TIM1_COMPA:
rol Temp1 ;сдвиг влево
out PortB,Temp1 ;вывод в порт
reti ;выход из обработчика
TIM1_OVF:
TIM0_OVF:
ldi temp,0b00000001
out PortD,temp ;выключить зеленый (инверсный) СИД1
ret ;выход из обработчика с последующим запретом прерываний


