|
|
  |
Чтение массива, Как читать из памяти? |
|
|
|
Nov 25 2010, 19:23
|
Участник

Группа: Участник
Сообщений: 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 по аналогии обратно ...
|
|
|
|
|
Nov 26 2010, 07:37
|
Частый гость
 
Группа: Участник
Сообщений: 81
Регистрация: 25-10-10
Пользователь №: 60 395

|
Цитата(Maik-vs @ Nov 25 2010, 17:18)  в какой памяти массив? куда его надо считать? ATMega 2561. Массив задаю в области .CREG Считываю массив для отображения фигуры из 8 вертикальных байтов на дисплей
|
|
|
|
|
Nov 26 2010, 09:11
|
Частый гость
 
Группа: Участник
Сообщений: 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
|
|
|
|
|
Nov 26 2010, 11:54
|
Участник

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

|
Цитата D:\Slava\Main_Kvadrat\Kvadrat_pamyat1ekranProbnyi\Kvadrat_MassivProbnyi\Kvadrat_MassivProbnyi.asm(159): error: Wrong number of operands Да, да ... накололся  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
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|