роботы робототехника микроконтроллеры


 Страниц (1): [1]   

> Описание: Таймер на Atmega 16
Slavast Post Id


Рядовой


Сообщений всего: 7
Дата рег-ции: Окт. 2010  



Добрый день!
Вот мучаюсь с переводом программы таймера на Atmega 16!
Помогите плиз перевести код программы с Ассемблера на С.
Огромный поклон!!!


.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
 
 Top
mihail Post Id



Гуру


Сообщений всего: 1065
Дата рег-ции: Март 2010  



Slavast пишет:
Вот мучаюсь с переводом программы таймера на Atmega 16!
Что именно не получается? Программа на C для микроконтроллеров mega тесно связана с компилятором. Какой компилятор используете?
 
 Top
Slavast Post Id


Рядовой


Сообщений всего: 7
Дата рег-ции: Окт. 2010  



AVR Studio!
 
 Top
cjA Post Id



Генерал


Сообщений всего: 3291
Дата рег-ции: Янв. 2010  



(чо это за бред jmp ttt; выйти из прерывания ?)

Сама по себе аврстудио не знакома с Си.
А зачем Вам? Ведь Вы ничего не выигрываете?

(кто-то мне говорил что для кода меньше 4000 байт разумнее использовать асм, а у Вас он точно меньше)
 
 Top
Страниц (1): [1]
« Микроконтроллеры »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 





Powered by Exclusive Bulletin Board
ExBB FM 1.0 RC1 Smiles by Fool from Foolstown
  Яндекс.Метрика   Рейтинг@Mail.ru