Ну потому что у меня в справочнике написано, если использовать просто команду LPM без параметров, то она загрузит значение по адресу в ZH, ZL в регистр R0...
Вот и подумал, по логике вещей, эта команда может работать с этим регистром, а если ей указать куда грузить, то она автоматом потом из этого регистра перекидывает туда, куда надо...
СКАЗОЧНИК писал(а):LPM без параметров, то она загрузит значение по адресу в ZH, ZL в регистр R0...
Так оно и есть. А в остальном логика другая маленько
У этой команды есть три варианта записи (чисто по синтаксису).
1) LPM
2) LPM Rd, Z
3) LPM Rd, Z+
Первый и второй варианты без инкремента Z, последний с инкрементом.
Соответственно первый вариант записи эквивалентен второму варианту с R0 в качестве регистра.
Пересылка данных происходит сразу в указанный регистр, прочие регистры не затрагиваются (кроме автоинкремента Z).
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Спасибо. Я уже в отладчике их все отследил. Все победил. Использовал с пост-инкрементом, он прибавляет единичку к регистровой паре Z.
Огранизовал заполнение из одного массива в другой массив. В одном адреса построчно, в другом адреса по столбцам. Вот и морочил голову. Но добился, чего хотел.
Если кому интересно, то это все для ЖКИ 1602 вот здесь: http://radiokot.ru/forum/viewtopic.php? ... 2#p2250682
Вот кто бы подсказал, как на ассемблере реализовать вывод на этот дисплей строки? Ну, типа того: команда "Привет, Радиокот!"
Чтобы не забивать каждую букву ее кодами... Или это только на Си можно? не верю, а мозги не хотят выдумать алгоритм.
zero648 писал(а):Установите режим FastPWM, а не NORMAL
Спасибо, Fast PWM завелся нормально. Теперь минус два прерывания, и оптимизация кода))
СКАЗОЧНИК писал(а):...Или это только на Си можно?
"Си" в конечном счете в машинный код все транслирует, с оптимизацией, и кучей надстроек, но все в тот же ассемблер)) Да и сам ЖК 1602 работает не с буквами, а с их кодами...
СКАЗОЧНИК писал(а):
Вот кто бы подсказал, как на ассемблере реализовать вывод на этот дисплей строки? Ну, типа того: команда "Привет, Радиокот!"
Такой команды, естественно, в ассемблере нет и быть не может ( в Си, кстати, тоже ), иначе ассемблер должен был бы знать интерфейсы всех существующих в мире дисплеев и, телепатируя автора, подключать подпрограмму нужного ему
Если речь о том, чтобы не набирать по-кодово выводимую строку, то это можно - для латиницы, цифр и символов.
Предвижу возражение : в Си есть функция ( не команда ) printf - вывод строки символов на системное устройство вывода. Это на ПК. С Си на МК я не работал, поэтому не представляю, если в компиляторе реализована такая функция -- то что она понимает под "системным устройством вывода" ? По идее, такая задача решается подключением нужной библиотеки.
Да, про это я имел ввиду. Типа функции, подпрограммы. )))
А вот про приведенный кусочек кода не совсем понятно. Можно поподробнее. А то я уже почти все реализовал, что хотел, осталось токма это.
СКАЗОЧНИК писал(а):Т.е. если я задам массив и напишу в нем буквами, у меня скомпилируется в коды символов?
Да. Для латиницы, цифр и знаков препинания. Когда мне нужно было загонять большие массивы кириллических текстов, я поручал эту работу специально обученной программе. Есть что-то подобное в сети, но мне лень было искать, свою накропал.
А мне особенно кирилица и не нравится в отображении на таких дисплеях... Кривая какая-то. Поэтому, ее можно и кодами, кому надо.
З.Ы. Сделал! Все прекрасно пашет. Как же это просто оказалось! ))) Теперь моя библиотека для ЖКИ обзавелась выводом сразу строки. Причем так выгоднее писать на дисплее, чем отдельно по букве выводить. Благодарю.
Командой LDI загружается адрес порта. А вот для обмена значениями по этим 16-разрядным портам периферии и придумали аппаратные регистры TEMP. Правда, общение стало немного сложнее. Запись значения в такие порты (OUT или STS с соответствующим смещением на +$20) должна быть в формате старший-младший, чтение значения наоборот - младший-старший (IN или LDS с соответствующим смещением на +$20).
Спойлер
LDI XH,TCNT1H+$20
LDI XL,TCNT1L+$20
LD R1,X+
LD R0,X
IN R11,TCNT1L
IN R10,TCNT1H
ST X,R1
ST -X,R0
OUT TCNT1H,R11
OUT TCNT1L,R10
LDS R1,TCNT1L+$20
LDS R0,TCNT1H+$20
IN R11,TCNT1L
IN R10,TCNT1H
STS TCNT1H+$20,R1
STS TCNT1L+$20,R0
OUT TCNT1H,R11
OUT TCNT1L,R10