реклама на сайте
подробности

 
 
> Перевод с Ассемблера на С, Таймер на ATMega 16 -
Slavast
сообщение Nov 9 2010, 08:47
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 81
Регистрация: 25-10-10
Пользователь №: 60 395



Добрый день!
Помогите плиз перевести код программы таймера на 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
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ae_
сообщение Nov 9 2010, 14:19
Сообщение #2


Участник
***

Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695



2 Slavast:
Код
ldi r17, 0x00
out DDRA, r17 ;  порт на вывод

это установка порта на ввод. на вывод надо:
ldi r17, 0xFF
out DDRA, r17

Код
ldi r22, 0x00
out OCR1AH, r22;
ldi r22, 0xАА
out OCR1AL, r22; устанавливаем предел счета 255

это устанавливает предел счёта не 255, а 170 (0xAA=170dec). 255dec=0xFF.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th June 2025 - 20:14
Рейтинг@Mail.ru


Страница сгенерированна за 0.01359 секунд с 7
ELECTRONIX ©2004-2016