реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Чтение массива, Как читать из памяти?
Slavast
сообщение Nov 25 2010, 13:51
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 81
Регистрация: 25-10-10
Пользователь №: 60 395



Добрый день!
Помогите пожалуйста создать код считывания массива из памяти с начала массива данных и с его конца.

massiv:
.DB 0x00,0x18,0x3C,0x7E,0xFF,0x7E,0x3C,0x18
Огромное спасибо!
Go to the top of the page
 
+Quote Post
Maik-vs
сообщение Nov 25 2010, 14:18
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 246
Регистрация: 4-12-06
Пользователь №: 23 101



в какой памяти массив?
куда его надо считать?
Go to the top of the page
 
+Quote Post
Дмитрий Ветра
сообщение Nov 25 2010, 19:23
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 6-12-07
Из: Рига, Латвия
Пользователь №: 33 036



Цитата(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
Go to the top of the page
 
+Quote Post
Slavast
сообщение Nov 26 2010, 07:37
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 81
Регистрация: 25-10-10
Пользователь №: 60 395



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



ATMega 2561.
Массив задаю в области .CREG
Считываю массив для отображения фигуры из 8 вертикальных байтов на дисплей
Go to the top of the page
 
+Quote Post
Slavast
сообщение Nov 26 2010, 09:11
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 81
Регистрация: 25-10-10
Пользователь №: 60 395



Цитата(Дмитрий Ветра @ 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

Сообщение отредактировал Slavast - Nov 26 2010, 10:03
Go to the top of the page
 
+Quote Post
Дмитрий Ветра
сообщение Nov 26 2010, 11:54
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 6-12-07
Из: Рига, Латвия
Пользователь №: 33 036



Цитата
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
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 19:52
Рейтинг@Mail.ru


Страница сгенерированна за 0.01381 секунд с 7
ELECTRONIX ©2004-2016