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

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

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

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

Сообщение ARV »

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

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

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

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

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

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

Сообщение ARV »

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

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

    
    ; прямая адресация
    sts   MEM, r12
    ; косвенная адресация
    ldi   XL. low(MEM)
    ldi   XH, high(MEM)
    st    X, r12   
сохранение содержимого r12 в ячейке памяти, адрес которой хранится в паре X - это и есть косвенная адресация.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

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

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

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

Сообщение ARV »

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

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

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Нашел транзистор. Понюхал.
Сообщения: 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 присутствует где засада
Встал на лапы
Аватара пользователя
Сообщения: 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
Нашел транзистор. Понюхал.
Сообщения: 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 -прошла
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Вт июл 10, 2007 23:15:17
Откуда: Магнитогорск

Сообщение ipkin »

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

Сообщение tych »

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

Сообщение ipkin »

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

Сообщение tych »

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

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

Сообщение biDE »

ipkin писал(а):написал вот такую программулину и ничего не робит
Неправильная конфигурация порта В в районе выводов SPI.
Внимательно курите даташит (Table 69. SPI Pin Overrides).
Встал на лапы
Аватара пользователя
Сообщения: 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
Контактная информация:
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Вт июл 10, 2007 23:15:17
Откуда: Магнитогорск

Сообщение ipkin »

всё сделал стек действительно не правильно был выставлен
всё заработало но возникла ещё одна проблема допустим в примере мне надо с дата флэш прочитать 65535байт а прога зациклилась и гонит по кругу все 2 метра потом заново
подскажите где ошибка
Вложения
22.asm
(2.1 КБ) 662 скачивания
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 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 КБ) 769 скачиваний
Контактная информация:
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 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 раза.
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 84
Зарегистрирован: Пн ноя 12, 2007 20:53:05
Откуда: Одесса

Сообщение biDE »

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

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