Помогите разобраться с обучалкой....
.cseg
.org 0
rjmp RESET
rjmp EXT_INT0
rjmp EXT_INT1
rjmp TIM2_COMP
rjmp TIM2_OVF
rjmp TIM1_CAPT
rjmp TIM1_COMPA
rjmp TIM1_COMPB
rjmp TIM1_OVF
rjmp TIM0_OVF
rjmp SPI_STC
rjmp USART_RXC
rjmp USART_UDRE
rjmp USART_TXC
rjmp ADCC
rjmp EE_RDY
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:
ADCC:
EE_RDY:
ANA_COMP:
TWSI:
SPM_RDY:
reti
;****************************************************
; ИНИЦИАЛИЗАЦИЯ
;****************************************************
Reset: ldi Temp,0b11111111 ;настройка портов
out DDRD,Temp
ldi Temp,0b00010000 ;разрешить прерывание компаратора
out TIMSK,Temp
ldi Temp,0b00000011 ;тактовый сигнал = CK/64, увилечение деление замедляет ход
out TCCR1B,Temp
ldi Temp,0x75 ;инициализация компаратора
out OCR1AH,Temp ;уменьшение имп. повышает скорость
ldi Temp,0x10
out OCR1AL,Temp
ldi Temp,high(RamEnd)
out SPH,Temp
ldi Temp,low(RamEnd)
out SPL,Temp
ldi Temp1,0b00000001 ;инициализация индикатора
ldi Temp,0 ;обнуление таймера
out TCNT1H,Temp
out TCNT1L,Temp
sei ;разрешить прерывания
;****************************************************
; ОСНОВНОЙ ЦИКЛ
;****************************************************
Inf: rjmp Inf ;бесконечный цикл
;****************************************************
; ОБРАБОТЧИК ПРЕРЫВАНИЯ КОМПАРАТОРА
;****************************************************
TIM1_COMPA:
ldi Temp,0 ;обнуление таймера
out TCNT1H,Temp
out TCNT1L,Temp
Shift: сpi Temp1,0b10000000 ;сравнить с крайним знач.
breq Init ;если равно - загрузка нач. знач.
lsl Temp1 ;иначе - сдвиг влево
rjmp Output ;перейти на вывод в порт
Init: ldi Temp1,0b00000001 ;загрузить нач. значение
Output: out PortD,Temp1 ;вывод в порт
reti ;выход из обработчика
---------------------------------------------------------------------------------------------------
Не пойму, как работает прога,
с чего начинается прога - с метки ресет?
т.к. прерывание срабатывает по какому-то внешнему воздействию - где оно "воздействие"?
reti в метке TIM1_COMPA: возвращает к др. меткам, а там тоже reti идет, куда оно то возвращает?
ИНИЦИАЛИЗАЦИЯ загружается раз в память, так как ее прога в цикле не повторяет из-за sei?
бесконечный цикл работает, как +1 и как он циклит прогу?
Почему при перестановке строк:
Init: ldi Temp1,0b00000001
Shift: cpi Temp1,0b10000000
breq Init
lsl Temp1
out PortD,Temp1
цикл запирается?
Спасибо за ответы, хоть при таком кол-ве вопросов наверно сообщение останется без ответа
