Код: Выделить всё
.def temp=r16 ;меняю имя регистра, не с глубогим смыслом, а чтобы поэксперементировать
.cseg
.org 0 ;назначаю адрес и куда загружать
rjmp reset ;перечисляю все прерывания для ATmega8a из даташита и назначаю им метки
rjmp _int0
rjmp _int1
rjmp timer2_comp
rjmp timer2_ovf
rjmp timer1_capt
rjmp timer1_compa
rjmp timer1_compb
rjmp timer1_ovf
rjmp timer0_ovf
rjmp spi_stc
rjmp usart_rxc
rjmp usart_udre
rjmp usart_txc
rjmp _adc
rjmp ee_rdy
rjmp ana_comp
rjmp twi
rjmp spm_rdy
reset: ;тут перечисляю метки, выдрано с обучалки с этого сайта, не совсем пока разабрался зачем все перечислять
;_int0: ;тут не уверен, что правильно сделал... Получается закоментил или просто убрал _int0, чтобы вынести его отдельно
_int1:
timer2_comp:
timer2_ovf:
timer1_capt:
timer1_compa:
timer1_compb:
timer1_ovf:
timer0_ovf:
spi_stc:
usart_rxc:
usart_udre:
usart_txc:
_adc:
ee_rdy:
ana_comp:
twi:
spm_rdy:
reti ;выход из обработчика прерываний
_int0: ;начало программы по внешнему воздействию на порт PD2
ldi temp,0b00000001 ;здесь меняю биты ISC00 на 1 и ISC01 на 0, т.е. любая смена логического состояния, если я правильно разобрался
out MCUCR,temp ;здесь загружаю биты в регистр
ldi r17,0b11111111
out DDRB,r17 ;настройка порта B на вывод
ldi r18,0b00000001
out portb,r18 ;зажигаю первую лампочку
sei ;разрешаю прерывания, тут совсем не уверен, что делаю правильно...
reti ;выход из обработчика прерываний
ldi r17,0b11111111 ;основная программа зажигающая второй светодиод
out DDRB,r17
ldi r18,0b00000010
out portb,r18
sleep ;воткнул просто ради эксперемента


