@Hogs_Of_War

Как работать со строками на AVR Assembler?

Помогите подобрать инструкцию для чтения из флеша по указателю
Вот кусок кода в котором определяется строка и ее длинна
Message:	.db  	"Hello World!"            ;String which need to write
ldi len,12						   ;String length

А вот кусок кода для вывода строки на ЖКИ
loop:

ld byte, ;HELP

ldi temp,0x01		;RS-bit (0 - sending command, 1 - send data)
rcall send_byte		;Call procedure for send a symbol as 4-bit mode
delayClocks 100,1,1     ;some delay
dec len	                ;len is length of string
brne loop


Какой инструкцией можно читать данные из флеша? Возможны ли конструкции
mov bx,byte[i+1]
или подобные но только для AVR микроконтроллера?
З.Ы. код для ATmega8A

UPD: Решено, спасибо товарищу jcmvbkbc
Кстати для себя нашел интересный момент при объявлении строки директивой .db реальный адрес строки в 2 раза больше чем адрес метки
К примеру:
Вот перед кодом процедур определена строка. Адрес метки - 0x0030 но в памяти эта строка начинается с 0x0060
Message: .db "Hello World!"
Пробовал определить после кода программы в итоге то же самое. Адрес метки был 0х0098 а сам текст начинался с 0х130. Если кто знает с чем связано такое непонятное для меня поведение то прошу объяснить, а так в целом проблема решена, спасибо
  • Вопрос задан
  • 1047 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Какой инструкцией можно читать данные из флеша?

lpm
Возможны ли конструкции
mov bx,byte[i+1]

Для программной памяти -- нет.

ldi r30, lo8(Message)
ldi r31, hi8(Message)

loop:

lpm
adiw r30, 1
mov byte, r0
ldi temp,0x01		;RS-bit (0 - sending command, 1 - send data)
rcall send_byte		;Call procedure for send a symbol as 4-bit mode
delayClocks 100,1,1     ;some delay
dec len	                ;len is length of string
brne loop
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы