Добрый день! Помогите плиз перевести код программы таймера на Atmega16 с Ассемблера на С. Огромный поклон.
.include "m16def.inc" .device ATMEGA16
;--задаем имена регистрам------------------ .def temp = r16 ;рабочая переменная
; ---------------Проинициализировали указатель стека------
ldi r16,high(RAMEND) ; Начало out SPH,r16 ; основной программы ldi r16,low(RAMEND) out SPL,r16
;--прерывания------------------------------ rjmp RESET ;Reset Handle break reti; jmp EXT_INT0 ; IRQ0 Handler break reti; jmp EXT_INT1 ; IRQ1 Handler break reti; jmp TIM2_COMP ; Timer2 Compare Handler break
;reti; jmp TIM2_OVF ; Timer2 Overflow Handler ;break ;reti; jmp TIM1_CAPT ; Timer1 Capture Handler ;break rjmp TIM1_COMPA break break; Timer1 CompareA Handler break break ret; jmp TIM1_COMPB ; Timer1 CompareB Handler break break reti; jmp TIM1_OVF ; Timer1 Overflow Handler break reti; jmp TIM0_OVF ; Timer0 Overflow Handler break reti; jmp SPI_STC ; SPI Transfer Complete Handler break reti; jmp USART_RXC ; USART RX Complete Handler break reti; jmp USART_UDRE ; UDR Empty Handler break reti; jmp USART_TXC ; USART TX Complete Handler break reti; jmp ADC ; ADC Conversion Complete Handler break reti; jmp EE_RDY ; EEPROM Ready Handler break reti; jmp ANA_COMP ; Analog Comparator Handler break reti; jmp TWSI ; Two-wire Serial Interface Handler break reti; jmp EXT_INT2 ; IRQ2 Handler break reti; jmp TIM0_COMP ; Timer0 Compare Handler break reti; jmp SPM_RDY ; Store Program Memory Ready Handler break
RESET: ;------ Инициализация портов --------
ldi r17, 0x00 out PINA, r17 ; деактивируем Pull-up резисторы
ldi r17, 0x00 out DDRA, r17 ; порт на вывод
sei ;разрешаем прерывания
;------ Инициализация таймера --------
ldi r16, 0x10 out TIMSK, r16 ; разрешение прерывания по совпадению TCNT с OCR
ldi r22, 0x00 out OCR1AH, r22 ; ldi r22, 0xАА out OCR1AL, r22 ; устанавливаем предел счета 255
;------------- Тело ----------------------------
ldi r20, 0xAA ; загрузка 10101010 на вывод в PORTA ldi r21, 0xFF ; слагаемое для Суммы по модулю 2 ldi r16, 0x00 out TCCR1A, r16 ; очистка TCCR1A ldi r16, 0x0A ; запуск Таймера out TCCR1B, r16 ; ставим предделитель в CLK/1024
Cycle: ; основной пустой цикл out PORTA, r20 jmp Cycle
;------- Прерывание --------------
TIM1_COMPA: nop push R16 ; in R16,SREG ; процедура прерывания push R16 ; eor r20, r21 ; Изменение 10101010 на 01010101 out PORTA, r20 jmp ttt ; выйти из прерывания
pop R16 ;Востанавливаем регистры out SREG,R16 pop R16 nop
reti
|