Ассемблер (ASM) для AVR в вопросах и ответах
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
загрузка адреса ADDR в регистровую пару Y:
Код: Выделить всё
ldi YL, low(ADDR)
ldi YH, high(ADDR)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
knyaz* писал(а):так а косвенная адресачия что это такое?
Код: Выделить всё
; прямая адресация
sts MEM, r12
; косвенная адресация
ldi XL. low(MEM)
ldi XH, high(MEM)
st X, r12
сохранение содержимого r12 в ячейке памяти, адрес которой хранится в паре X - это и есть косвенная адресация.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
knyaz* писал(а):чето не пойму зачем это... уже штук пять кник прочитал не как не могу понять что за сурьезнаячтука косвенная адресация и для чего она нужна...
странный вы чел... что ж тут непонятного? косвенная адресация позволяет отделить код подпрограммы от привязки к конкретному адресу памяти. попробуйте сделать без косвенной адресации вывод строк (разных) по USART, например. будет у вас не программа, а монстр! а с косвенной адресацией все элементарно: пишите подпрограмму, которая выводит строку, адрес начала которой в X (или Y или Z), потом сколько угодно раз заносите в выбранную регистровую пару адрес начала строки и вызываете подпрограмму. а как красиво обращаться к массивам в ОЗУ без косвенной адресации - я даже и не могу придумать...
P.S. Вообще-то вопрос об адресации относится не к ассемблеру, а к программированию вообще. Косвенная адресация применяется и в Си, например: любой указатель - это как раз способ косвенного обращения к данным...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
-
ipkin
- Нашел транзистор. Понюхал.
- Сообщения: 167
- Зарегистрирован: Вт июл 10, 2007 23:15:17
- Откуда: Магнитогорск
подскажите почему ассемблер ругается на эту строку
ldi r16,2
out XMCRA,r16 <---------- вот на эту
error : Undefined variable referenced
использую ассемблер для windows 1.30
в начале текста программы подставляю файл m64def.inc с описанием всех кишок данного камня в файле m64def.inc строка .equ XMCRA = $6D присутствует где засада
ldi r16,2
out XMCRA,r16 <---------- вот на эту
error : Undefined variable referenced
использую ассемблер для windows 1.30
в начале текста программы подставляю файл m64def.inc с описанием всех кишок данного камня в файле m64def.inc строка .equ XMCRA = $6D присутствует где засада
-
ipkin
- Нашел транзистор. Понюхал.
- Сообщения: 167
- Зарегистрирован: Вт июл 10, 2007 23:15:17
- Откуда: Магнитогорск
Здравствуйте все.
пытаюсь работать с AT45DB161 (SO8) MEG-ой 64-ой
подключил флэшку на штатный SPI контроллера
написал вот такую программулину и ничего не робит (нет импульсов ни такта ни передачи во флэш)
посмотрите пожалуйста подскажите что не так
пытаюсь работать с AT45DB161 (SO8) MEG-ой 64-ой
подключил флэшку на штатный SPI контроллера
написал вот такую программулину и ничего не робит (нет импульсов ни такта ни передачи во флэш)
посмотрите пожалуйста подскажите что не так
- Вложения
-
- meg.asm
- (1.33 КБ) 709 скачиваний
- tych
- Э...
- Сообщения: 2792
- Зарегистрирован: Ср апр 04, 2007 08:39:14
- Откуда: Москва
- Контактная информация:
ipkin писал(а):Здравствуйте все.
пытаюсь работать с AT45DB161 (SO8) MEG-ой 64-ой
Если не получится то посмотрите пример на стр. 6
в упражнении 7.Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
- tych
- Э...
- Сообщения: 2792
- Зарегистрирован: Ср апр 04, 2007 08:39:14
- Откуда: Москва
- Контактная информация:
ipkin писал(а):это я видел там на Си а я на ассеблере пишу
Вы можете посмотреть листинг компилятора - файл .lst - там код на АСМ будет привязан к коду на Си с комментариями.
И еще можно в симуляторе посмотреть сигналы чтоб понять что не так.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
- Brutaller
- Встал на лапы
- Сообщения: 87
- Зарегистрирован: Пн ноя 05, 2007 12:44:43
- Откуда: C:\Russia\SPb
- Контактная информация:
Какая интересная инициализация указателя стека для ATmega64
Интересно, а куда будет возвращаться процессор после вызова wait_spi ?
Даже в даташите в разделе "Interrupts" после таблицы с векторами есть конкретный пример правильной инициализации на асме.
Вот:
У всех кристаллов, у которых размер SRAM более 128 байт, регистр-указатель стэка состоит из младшей и старшей части, SPL и SPH. А у всех ATmega SRAM от 512, так что SPH есть по любому. Один единственный SPL только на некоторых ATtiny. Так что сначала первым делом на это обратите внимание. Остальное не смотрел. Да и не приходилось с SPI работать.
А то тут сразу все в дебри ударились. А проблема то прямо на поверхности
И еще вопрос, а разве ассемблер не выдавал предупреждения "out of range". Т.к. RamEnd для ATmega64 0x10FF, а это явно больше чем 0xFF
Код: Выделить всё
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
- Откуда: Магнитогорск
всё сделал стек действительно не правильно был выставлен
всё заработало но возникла ещё одна проблема допустим в примере мне надо с дата флэш прочитать 65535байт а прога зациклилась и гонит по кругу все 2 метра потом заново
подскажите где ошибка
всё заработало но возникла ещё одна проблема допустим в примере мне надо с дата флэш прочитать 65535байт а прога зациклилась и гонит по кругу все 2 метра потом заново
подскажите где ошибка
- Вложения
-
- 22.asm
- (2.1 КБ) 650 скачиваний
- Томатный
- Нашел транзистор. Понюхал.
- Сообщения: 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 раза.