Не нашел нужной темы, поэтому решил написать в эту. Есть проблема:
программирую под Мега16 на асме в авр студио 4. вот код
Код: Выделить всё
.include "m16def.inc"
.def Temp=R16
.def Temp1=R17
.def Temp2=R18
.def Temp3=R19
.cseg
.org 0
;вектора прерываний
rjmp RESET ; Reset Handler
rjmp EXT_INT0 ; IRQ0 Handler
rjmp EXT_INT1 ; IRQ1 Handler
rjmp TIM2_COMP ; Timer2 Compare Handler
rjmp TIM2_OVF ; Timer2 Overflow Handler
rjmp TIM1_CAPT ; Timer1 Capture Handler
rjmp TIM1_COMPA ; Timer1 CompareA Handler
rjmp TIM1_COMPB ; Timer1 CompareB Handler
rjmp TIM1_OVF ; Timer1 Overflow Handler
rjmp TIM0_OVF ; Timer0 Overflow Handler
rjmp SPI_STC ; SPI Transfer Complete Handler
rjmp USART_RXC ; USART RX Complete Handler
rjmp USART_UDRE ; UDR Empty Handler
rjmp USART_TXC ; USART TX Complete Handler
rjmp _ADC ; ADC Conversion Complete Handler
rjmp EE_RDY ; EEPROM Ready Handler
rjmp ANA_COMP ; Analog Comparator Handler
rjmp TWSI ; Two-wire Serial Interface Handler
rjmp EXT_INT2 ; IRQ2 Handler
rjmp TIM0_COMP ; Timer0 Compare Handler
rjmp SPM_RDY ; Store Program Memory Ready Handler
;RESET: ; Reset Handler
EXT_INT0: ; IRQ0 Handler
EXT_INT1: ; IRQ1 Handler
TIM2_COMP: ; Timer2 Compare Handler
TIM2_OVF: ; Timer2 Overflow Handler
TIM1_CAPT: ; Timer1 Capture Handler
TIM1_COMPA: ; Timer1 CompareA Handler
TIM1_COMPB: ; Timer1 CompareB Handler
TIM1_OVF: ; Timer1 Overflow Handler
TIM0_OVF: ; Timer0 Overflow Handler
SPI_STC: ; SPI Transfer Complete Handler
USART_RXC: ; USART RX Complete Handler
USART_UDRE: ; UDR Empty Handler
USART_TXC: ; USART TX Complete Handler
_ADC: ; ADC Conversion Complete Handler
EE_RDY: ; EEPROM Ready Handler
ANA_COMP: ; Analog Comparator Handler
TWSI: ; Two-wire Serial Interface Handler
EXT_INT2: ; IRQ2 Handler
TIM0_COMP: ; Timer0 Compare Handler
SPM_RDY: ; Store Program Memory Ready Handler
reti
;****************************************************
; ИНИЦИАЛИЗАЦИЯ
;****************************************************
Reset: ldi Temp,0b11111111 ;настройка портов
out DDRA,Temp
ldi Temp,0 ;инициализация компаратора
out OCR1AH,Temp
ldi Temp,0x4B
out OCR1AL,Temp
ldi Temp,0b00010000 ;разрешить прерывание компаратора
out TIMSK,Temp
ldi Temp,0b00000001 ;тактовый сигнал = CK/1
out TCCR1B,Temp
ldi Temp,low(RAMEND) ;установка указателя стека
out SPL,Temp
ldi Temp,high(RAMEND)
out SPH, Temp
ldi Temp1,0b00000001 ;инициализация индикатора
ldi Temp,0 ;обнуление таймера
out TCNT1H,Temp
out TCNT1L,Temp
sei ;разрешить прерывания
;****************************************************
; ОСНОВНОЙ ЦИКЛ
;****************************************************
Inf: rjmp Inf ;бесконечный цикл
;****************************************************
; ОБРАБОТЧИК ПРЕРЫВАНИЯ КОМПАРАТОРА
;****************************************************
Timer1_comp1:
ldi Temp,0 ;обнуление таймера
out TCNT1H,Temp
out TCNT1L,Temp
Shift: cpi Temp1,0b10000000 ;сравнить с крайним знач.
breq Init ;если равно - загрузка нач. знач.
lsl Temp1 ;иначе - сдвиг влево
rjmp Output ;перейти на вывод в порт
Init: ldi Temp1,0b00000001 ;загрузить нач. значение
Output: out PortA,Temp1 ;вывод в порт
reti ;выход из обработчика
Адреса прерываний нахально слиты из даташита на Мегу16, но вместо прерывания по таймеру на строке
rjmp TIM1_COMPA ; Timer1 CompareA Handler программа переходит на строчку
rjmp USART_UDRE ; UDR Empty Handler
Не могу понять почему. Поясните плиз если знаете ответ.
не выдрючивайся, да не выдрючен будешь ...