Обсуждаем контроллеры компании Atmel.
Ответить

Чт мар 20, 2008 02:58:47

Возникла непонятка с косвенной адресацией...
это так понимаю нухно только для парных регистров X,Y,Z?
т.к. в них нельзя загрузить число непосредственно через ldi?
вобще как в них загружается 16 битное число...? сам процесс интересует...

Чт мар 20, 2008 15:19:51

загрузка адреса ADDR в регистровую пару Y:
Код:
   ldi    YL, low(ADDR)
   ldi    YH, high(ADDR)

Чт мар 20, 2008 15:54:55

так а косвенная адресачия что это такое?

Чт мар 20, 2008 21:22:03

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

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

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

Чт мар 20, 2008 23:29:48

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

Пт мар 21, 2008 08:13:30

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

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

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

Вт мар 25, 2008 22:39:19

подскажите почему ассемблер ругается на эту строку
ldi r16,2
out XMCRA,r16 <---------- вот на эту
error : Undefined variable referenced
использую ассемблер для windows 1.30
в начале текста программы подставляю файл m64def.inc с описанием всех кишок данного камня в файле m64def.inc строка .equ XMCRA = $6D присутствует где засада

Вт мар 25, 2008 22:54:30

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

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

Вт мар 25, 2008 23:35:53

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

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

sts -прошла

Пн апр 07, 2008 10:05:30

Здравствуйте все.
пытаюсь работать с AT45DB161 (SO8) MEG-ой 64-ой
подключил флэшку на штатный SPI контроллера
написал вот такую программулину и ничего не робит (нет импульсов ни такта ни передачи во флэш)
посмотрите пожалуйста подскажите что не так
Вложения
meg.asm
(1.33 KiB) Скачиваний: 622

Пн апр 07, 2008 10:25:57

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


Если не получится то посмотрите пример на стр. 6 Изображение в упражнении 7.

Пн апр 07, 2008 10:50:02

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

Пн апр 07, 2008 11:28:05

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


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

И еще можно в симуляторе посмотреть сигналы чтоб понять что не так.

Пн апр 07, 2008 11:36:52

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

Неправильная конфигурация порта В в районе выводов SPI.
Внимательно курите даташит (Table 69. SPI Pin Overrides).

Пн апр 07, 2008 18:49:20

Какая интересная инициализация указателя стека для 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

Вт апр 08, 2008 21:39:48

всё сделал стек действительно не правильно был выставлен
всё заработало но возникла ещё одна проблема допустим в примере мне надо с дата флэш прочитать 65535байт а прога зациклилась и гонит по кругу все 2 метра потом заново
подскажите где ошибка
Вложения
22.asm
(2.1 KiB) Скачиваний: 570

Чт апр 10, 2008 23:19:56

может ли кто поделиться драйвером на ЖКИ (на базе контроллера HD44780)
переделывал из Сишного кода(есть написаный в WinAVR драйвер) - не работает :shock:
пример мне очень поможет
асм не юзал раньше, первая прога)

Пт апр 11, 2008 14:42:02

Proteus пишет ошибку SP is not initialized
Вложения
ATmega8.asm
RS=PB0
EN=PB1
DB4=PB2
...
DB7=PB5
(3 KiB) Скачиваний: 676

Сб апр 12, 2008 23:18:27

простите за мою тупость и невнимательность.
подпрограмму задержки надо переписать так:
Код:
;пауза 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 раз(а).

Вс апр 13, 2008 00:40:12

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