Где толково написано про организацию памяти МК? У всех АВР она одинаковая? Сколько занимает одна страница?
"Черная магия" - классное выражение.
И еще вопросик. Вот я сделал вместо макроса вывод строки, используя символ "конец строки" - $.
Теперь, если я не хочу выводить строку, у меня компилятор ругается, что она не объявлена... Т.е. я не задал MY: db. "", а в коде к нему идет обращение. Как лучше сделать?
И второе. А если я хочу выводить не одну строку, а несколько разных, ну пусть две на обеих строчках ЖКИ. Как реализовать два массива, а для вызова использовать ту же подпрограмму rcall MY_LINE?
Код: Выделить всё
MY: .db "My line is here!$"
...
...
...
rcall MY_LINE
...
...
...
MY_LINE: ;
; плюс массив символов добавит по два байта на каждые два знака (и "конец строки")
ldi ZH, high (MY*2) ; Переходим на нашу таблицу символов на самый первый элемент (точнее нулевой)
ldi ZL, low (MY*2)
LETTER: lpm R18, Z+ ; Загружаем элемент в регистр Р18 (загрузка с пост-инкрементом)
cpi R18, 0x24
breq ENDL
rcall DATA_WR
rjmp LETTER
ENDL: ret

А остальные варианты - это пляска с бубном и много лишних телодвижений и увеличение кода. 
