Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Чтение массива
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
Slavast
Добрый день!
Помогите пожалуйста создать код считывания массива из памяти с начала массива данных и с его конца.

massiv:
.DB 0x00,0x18,0x3C,0x7E,0xFF,0x7E,0x3C,0x18
Огромное спасибо!
Maik-vs
в какой памяти массив?
куда его надо считать?
Дмитрий Ветра
Цитата(Slavast @ Nov 25 2010, 16:51) *
Добрый день!
Помогите пожалуйста создать код считывания массива из памяти с начала массива данных и с его конца.

massiv:
.DB 0x00,0x18,0x3C,0x7E,0xFF,0x7E,0x3C,0x18
Огромное спасибо!


В асме для массива в памяти программ, вперед:
Код
    
.equ    massiv_len  = 8
                
      ldi    ZH,high(massiv*2)   ; адрес массива
    ldi    ZL,low(massiv*2)    ;
    ldi    r17,massiv_len      ; длинна массива
read_massiv:
    lpm    r16,Z+              ; содержимое массива здесь
    dec    r17
    brne   read_massiv

massiv: .db    0x00,0x18,0x3C,0x7E,0xFF,0x7E,0x3C,0x18

назад:
Код
.equ    massiv_len  = 8

    ldi    ZH,high(massiv*2)   ; адрес массива
    ldi    ZL,low(massiv*2)    ;
    ldi    r17,massiv_len      ; длинна массива
    clr    r16
    add    ZL,r17
    adc    ZH,r16
read_massiv:
    lpm    r16,-Z              ; содержимое массива здесь
    dec    r17
    brne   read_massiv

massiv: .db    0x00,0x18,0x3C,0x7E,0xFF,0x7E,0x3C,0x18


Массив в ОЗУ еще проще:
Код
.equ    massiv_len  = 8

    ldi    ZH,high(massiv)   ; адрес масива в ОЗУ
    ldi    ZL,low(massiv)    ;
    ldi    r17,massiv_len    ; длинна масива
read_massiv:
    ld     r16,Z+            ; содержимое масива здесь
    dec    r17
    brne   read_massiv


по аналогии обратно ... laughing.gif
Slavast
Цитата(Maik-vs @ Nov 25 2010, 17:18) *
в какой памяти массив?
куда его надо считать?



ATMega 2561.
Массив задаю в области .CREG
Считываю массив для отображения фигуры из 8 вертикальных байтов на дисплей
Slavast
Цитата(Дмитрий Ветра @ Nov 25 2010, 22:23) *
назад:
[code].equ massiv_len = 8

ldi ZH,high(massiv*2) ; адрес массива
ldi ZL,low(massiv*2) ;
ldi r17,massiv_len ; длинна массива
clr r16
add ZL,r17
adc ZH,r16
read_massiv:
lpm r16,-Z ; содержимое массива здесь
dec r17
brne read_massiv


Спасибо большое!
Вперед программа работает безупречно!!!

А вот назад чё-то ругается.
Выводит указатель на команду :

lpm r16,-Z

Может как-то по-другому задать -Z?


AVRASM: AVR macro assembler 2.1.2 (build 99 Nov 4 2005 09:35:05)
Copyright © 1995-2005 ATMEL Corporation


D:\Slava\Main_Kvadrat\Kvadrat_pamyat1ekranProbnyi\Kvadrat_MassivProbnyi\Tables.asm(1): warning: Preprocessor: Redefinition of macro '__PART_NAME__'
D:\Slava\Main_Kvadrat\Kvadrat_pamyat1ekranProbnyi\Kvadrat_MassivProbnyi\Kvadrat_MassivProbnyi.asm(790): info: 'D:\Slava\Main_Kvadrat\Kvadrat_pamyat1ekranProbnyi\Kvadrat_MassivProbnyi\Tables.asm' included from here
C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\m2561def.inc(48): info: Previous definition of '__PART_NAME__'
D:\Slava\Main_Kvadrat\Kvadrat_pamyat1ekranProbnyi\Kvadrat_MassivProbnyi\Kvadrat_MassivProbnyi.asm(159): error: Wrong number of operands
D:\Slava\Main_Kvadrat\Kvadrat_pamyat1ekranProbnyi\Kvadrat_MassivProbnyi\Kvadrat_MassivProbnyi.asm(791): No EEPROM data, deleting D:\Slava\Main_Kvadrat\Kvadrat_pamyat1ekranProbnyi\Kvadrat_MassivProbnyi\Kvadrat_MassivProbnyi.eep

Assembly failed, 1 errors, 1 warnings
Дмитрий Ветра
Цитата
D:\Slava\Main_Kvadrat\Kvadrat_pamyat1ekranProbnyi\Kvadrat_MassivProbnyi\Kvadrat_MassivProbnyi.asm(159): error: Wrong number of operands


Да, да ... накололся laughing.gif lpm не поддерживает предекремент. Вот так будет ок:
Код
       ldi         ZH,high(massiv*2)  ;
       ldi         ZL,low(massiv*2)   ;
       ldi         r17,8              ;
       clr         r16
       add         ZL,r17
       adc         ZH,r16
read_massiv:
       sbiw         ZH:ZL,1
       lpm      r16,Z              ;
       dec      r17
       brne     read_massiv
massiv: .db    0x00,0x18,0x3C,0x7E,0xFF,0x7E,0x3C,0x18


---
Dmitry
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.