Ассемблер (ASM) для AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
knyaz*
Грызет канифоль
Сообщения: 255
Зарегистрирован: Пн фев 11, 2008 20:32:45
Откуда: Краснодарский край

Сообщение knyaz* »

Возникла непонятка с косвенной адресацией...
это так понимаю нухно только для парных регистров X,Y,Z?
т.к. в них нельзя загрузить число непосредственно через ldi?
вобще как в них загружается 16 битное число...? сам процесс интересует...
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

загрузка адреса ADDR в регистровую пару Y:

Код: Выделить всё

   ldi    YL, low(ADDR)
   ldi    YH, high(ADDR)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
knyaz*
Грызет канифоль
Сообщения: 255
Зарегистрирован: Пн фев 11, 2008 20:32:45
Откуда: Краснодарский край

Сообщение knyaz* »

так а косвенная адресачия что это такое?
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

knyaz* писал(а):так а косвенная адресачия что это такое?

Код: Выделить всё

    
    ; прямая адресация
    sts   MEM, r12
    ; косвенная адресация
    ldi   XL. low(MEM)
    ldi   XH, high(MEM)
    st    X, r12   

сохранение содержимого r12 в ячейке памяти, адрес которой хранится в паре X - это и есть косвенная адресация.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
knyaz*
Грызет канифоль
Сообщения: 255
Зарегистрирован: Пн фев 11, 2008 20:32:45
Откуда: Краснодарский край

Сообщение knyaz* »

чето не пойму зачем это... уже штук пять кник прочитал не как не могу понять что за сурьезнаячтука косвенная адресация и для чего она нужна...
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

knyaz* писал(а):чето не пойму зачем это... уже штук пять кник прочитал не как не могу понять что за сурьезнаячтука косвенная адресация и для чего она нужна...

странный вы чел... что ж тут непонятного? косвенная адресация позволяет отделить код подпрограммы от привязки к конкретному адресу памяти. попробуйте сделать без косвенной адресации вывод строк (разных) по USART, например. будет у вас не программа, а монстр! а с косвенной адресацией все элементарно: пишите подпрограмму, которая выводит строку, адрес начала которой в X (или Y или Z), потом сколько угодно раз заносите в выбранную регистровую пару адрес начала строки и вызываете подпрограмму. а как красиво обращаться к массивам в ОЗУ без косвенной адресации - я даже и не могу придумать...

P.S. Вообще-то вопрос об адресации относится не к ассемблеру, а к программированию вообще. Косвенная адресация применяется и в Си, например: любой указатель - это как раз способ косвенного обращения к данным...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
ipkin
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Вт июл 10, 2007 23:15:17
Откуда: Магнитогорск

Сообщение ipkin »

подскажите почему ассемблер ругается на эту строку
ldi r16,2
out XMCRA,r16 <---------- вот на эту
error : Undefined variable referenced
использую ассемблер для windows 1.30
в начале текста программы подставляю файл m64def.inc с описанием всех кишок данного камня в файле m64def.inc строка .equ XMCRA = $6D присутствует где засада
Аватара пользователя
biDE
Встал на лапы
Сообщения: 84
Зарегистрирован: Пн ноя 12, 2007 20:53:05
Откуда: Одесса

Сообщение biDE »

ipkin писал(а):подскажите почему ассемблер ругается на эту строку
ldi r16,2
out XMCRA,r16 <---------- вот на эту
error : Undefined variable referenced

Для портов и регистров ввода-вывода с адресами выше 5F нужно применять команды ST/STS/STD и LD/LDS/LDD
ipkin
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Вт июл 10, 2007 23:15:17
Откуда: Магнитогорск

Сообщение ipkin »

biDE писал(а):
ipkin писал(а):подскажите почему ассемблер ругается на эту строку
ldi r16,2
out XMCRA,r16 <---------- вот на эту
error : Undefined variable referenced

Для портов и регистров ввода-вывода с адресами выше 5F нужно применять команды ST/STS/STD и LD/LDS/LDD

sts -прошла
ipkin
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Вт июл 10, 2007 23:15:17
Откуда: Магнитогорск

Сообщение ipkin »

Здравствуйте все.
пытаюсь работать с AT45DB161 (SO8) MEG-ой 64-ой
подключил флэшку на штатный SPI контроллера
написал вот такую программулину и ничего не робит (нет импульсов ни такта ни передачи во флэш)
посмотрите пожалуйста подскажите что не так
Вложения
meg.asm
(1.33 КБ) 709 скачиваний
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

ipkin писал(а):Здравствуйте все.
пытаюсь работать с AT45DB161 (SO8) MEG-ой 64-ой


Если не получится то посмотрите пример на стр. 6 Изображение в упражнении 7.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
ipkin
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Вт июл 10, 2007 23:15:17
Откуда: Магнитогорск

Сообщение ipkin »

это я видел там на Си а я на ассеблере пишу
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

ipkin писал(а):это я видел там на Си а я на ассеблере пишу


Вы можете посмотреть листинг компилятора - файл .lst - там код на АСМ будет привязан к коду на Си с комментариями.

И еще можно в симуляторе посмотреть сигналы чтоб понять что не так.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Аватара пользователя
biDE
Встал на лапы
Сообщения: 84
Зарегистрирован: Пн ноя 12, 2007 20:53:05
Откуда: Одесса

Сообщение biDE »

ipkin писал(а):написал вот такую программулину и ничего не робит

Неправильная конфигурация порта В в районе выводов SPI.
Внимательно курите даташит (Table 69. SPI Pin Overrides).
Аватара пользователя
Brutaller
Встал на лапы
Сообщения: 87
Зарегистрирован: Пн ноя 05, 2007 12:44:43
Откуда: C:\Russia\SPb
Контактная информация:

Сообщение Brutaller »

Какая интересная инициализация указателя стека для ATmega64 :shock:

Код: Выделить всё

      ldi count,RamEnd
      out SPL,count

Интересно, а куда будет возвращаться процессор после вызова wait_spi ? :)

Даже в даташите в разделе "Interrupts" после таблицы с векторами есть конкретный пример правильной инициализации на асме.

Вот:

Код: Выделить всё

ldi r16, high(RAMEND)
out SPH,r16
ldi r16, low(RAMEND)
out SPL,r16


У всех кристаллов, у которых размер SRAM более 128 байт, регистр-указатель стэка состоит из младшей и старшей части, SPL и SPH. А у всех ATmega SRAM от 512, так что SPH есть по любому. Один единственный SPL только на некоторых ATtiny. Так что сначала первым делом на это обратите внимание. Остальное не смотрел. Да и не приходилось с SPI работать.
А то тут сразу все в дебри ударились. А проблема то прямо на поверхности :)

И еще вопрос, а разве ассемблер не выдавал предупреждения "out of range". Т.к. RamEnd для ATmega64 0x10FF, а это явно больше чем 0xFF
ipkin
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Вт июл 10, 2007 23:15:17
Откуда: Магнитогорск

Сообщение ipkin »

всё сделал стек действительно не правильно был выставлен
всё заработало но возникла ещё одна проблема допустим в примере мне надо с дата флэш прочитать 65535байт а прога зациклилась и гонит по кругу все 2 метра потом заново
подскажите где ошибка
Вложения
22.asm
(2.1 КБ) 650 скачиваний
Аватара пользователя
Томатный
Нашел транзистор. Понюхал.
Сообщения: 174
Зарегистрирован: Вт июл 31, 2007 20:32:30
Откуда: Киев, Украина
Контактная информация:

Сообщение Томатный »

может ли кто поделиться драйвером на ЖКИ (на базе контроллера HD44780)
переделывал из Сишного кода(есть написаный в WinAVR драйвер) - не работает :shock:
пример мне очень поможет
асм не юзал раньше, первая прога)
Аватара пользователя
Томатный
Нашел транзистор. Понюхал.
Сообщения: 174
Зарегистрирован: Вт июл 31, 2007 20:32:30
Откуда: Киев, Украина
Контактная информация:

Сообщение Томатный »

Proteus пишет ошибку SP is not initialized
Вложения
ATmega8.asm
RS=PB0
EN=PB1
DB4=PB2
...
DB7=PB5
(3 КБ) 761 скачивание
Аватара пользователя
Томатный
Нашел транзистор. Понюхал.
Сообщения: 174
Зарегистрирован: Вт июл 31, 2007 20:32:30
Откуда: Киев, Украина
Контактная информация:

Сообщение Томатный »

простите за мою тупость и невнимательность.
подпрограмму задержки надо переписать так:

Код: Выделить всё

;пауза r16 милисек для 4мГц
pause:
ldi r17,10
ldi r18,133
dec r18
brne PC-1
dec r17
brne PC-4
dec r16
brne PC-7
ret
Последний раз редактировалось Томатный Вс апр 13, 2008 11:17:34, всего редактировалось 2 раза.
Аватара пользователя
biDE
Встал на лапы
Сообщения: 84
Зарегистрирован: Пн ноя 12, 2007 20:53:05
Откуда: Одесса

Сообщение biDE »

А что делает эта последовательность в lcd ?
in r16,PORTB ;PORTB &= 0x03;
ori r16,$03
out PORTB,r16
Ответить

Вернуться в «AVR»