[an error occurred while processing this directive]
Сказанное DASMом я сформулирую несколько иначе - нефиг вычислять за компилятор (ассемблер)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено =AVR= 21 октября 2006 г. 14:48
В ответ на: Можно, чуть поподробне + отправлено Aleksey75 21 октября 2006 г. 13:28

Ты вот пишешь - ldi tmp,0x5F/ldi tmp,0x03. А я напишу ldi tmp,low(ramend)/ldi tmp,high(ramend), и даже не почешусь вычислять, скока это вешать в граммах - численное значение ramend прописано в штатном .inc-файле, и пусть ассемблер себе это сам вычисляет - у него это получится заведомо безошибочно. Точно так же я не буду вычислять значение UBRR, а просто впишу формулу из Datasheet:


.equ fosc = 18432000 ;XTAL frequency, HZ
.equ baud = 115200 ;UART Baud rate, Bauds
.equ bauddiv = (fosc/(16*baud))-1 ;UBRR value for the required Baud rate

ldi tmp,low(bauddiv) ;Set up UART Baud rate
sts UBRR0L,tmp
ldi tmp,high(bauddiv)
sts UBRR0H,tmp

Точно так же я не стану заморачиваться с вычислениями значений управляющих регистров, а поручу это ассемблеру:


ldi tmp,(1 << oc1a)|(1 << oc1b) ;OC1A and OC1B pins are outputs
out ddrb,tmp

ldi tmp,(1 << TXEN0)|(1 << RXEN0)|(1 << RXCIE0)
sts UCSR0B,tmp ;Enable UART transmiter and receiver, enable Rx Complete int

Это избавляет от вполне вероятных ошибок ручного вычисления значений констант и делает текст гораздо более информативным. Ну а насчет вычислений адресов переходов тебе DASM сказал исчерпывающе

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа
Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 
URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание