Да. Для латиницы, цифр и знаков препинания. Когда мне нужно было загонять большие массивы кириллических текстов, я поручал эту работу специально обученной программе. Есть что-то подобное в сети, но мне лень было искать, свою накропал.СКАЗОЧНИК писал(а):Т.е. если я задам массив и напишу в нем буквами, у меня скомпилируется в коды символов?
Ассемблер (ASM) для AVR в вопросах и ответах
- Реклама
А мне особенно кирилица и не нравится в отображении на таких дисплеях... Кривая какая-то. Поэтому, ее можно и кодами, кому надо. 
З.Ы. Сделал! Все прекрасно пашет. Как же это просто оказалось! ))) Теперь моя библиотека для ЖКИ обзавелась выводом сразу строки. Причем так выгоднее писать на дисплее, чем отдельно по букве выводить.
Благодарю.
З.Ы. Сделал! Все прекрасно пашет. Как же это просто оказалось! ))) Теперь моя библиотека для ЖКИ обзавелась выводом сразу строки. Причем так выгоднее писать на дисплее, чем отдельно по букве выводить.
Станислав
Подскажите пжлст, можно ли значение 16-разрядного таймера\счетчика считывать побайтно?
т.е.
AVR studio матюгается на эти строки, "invalid register"
т.е.
Код: Выделить всё
mov temp1L, TCNT1L ; Запись младшего байта
mov temp1H, TCNT1H ; запись старшего байтаПолный чайник.
Чтение 16-назрядных регистров периферии.
IN XL,TCNT1L
IN XH,TCNT1H
Позор на мою седую. Исправил.
IN XL,TCNT1L
IN XH,TCNT1H
Позор на мою седую. Исправил.
Последний раз редактировалось akl Сб янв 24, 2015 14:22:05, всего редактировалось 2 раза.
Елки. Хреново, что в ассемблере нет команды "пропустить, если при сравнении регистра с константой получилось равно"...
Станислав
- Реклама
Разве LDI было неверно?akl писал(а):IN XL,TCNT1L
IN XH,TCNT1H
Исправил.
IN - ввод из порта I/O, регистр счетчика можно назвать портом? О_о
Полный чайник.
Командой 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Подскажите еще
Если ZH=0, ZL=11111111 и к нему прибавить 1, то ZH=00000001 ? Или просто ZL обнулится и установится флаг переноса/переполнения?
Полный чайник.
Командами SUBI ZL,-1 INC ZL просто обнулится с установкой флага Z.
Командой ADIW ZH:ZL,1 просто добавится 1, т.е. значение пары станет 0x0100.
Но. приведёт к обнулению и установке флагов Z и C!
Командой ADIW ZH:ZL,1 просто добавится 1, т.е. значение пары станет 0x0100.
Но.
Код: Выделить всё
LDI R16,1
ADD ZL,R16akl писал(а): Командой ADIW ZH:ZL,1 просто добавится 1, т.е. значение пары станет 0x0100.
Код: Выделить всё
adiw ZH:ZL,0b10000000;Полный чайник.
Да ну...? Операнд 2 не может превышать 63.

ADIW Rd+1:Rd,K d ∈ {24,26,28,30}, 0 ≤ K ≤ 63 PC ← PC + 1
Спойлер
akl писал(а): Операнд 2 не может превышать 63.
Спасибо! Я тоже хочу быть таким же умным
Полный чайник.
Поправка, на флаг С не влияют команды INC и DEC, арифметика влияет, а SUBI ZL,-1 просто вычтет 255 из ZL и конечно же получится 0 и поэтому никакого переполнения не произойдет.akl писал(а):Командами SUBI ZL,-1 INC ZL просто обнулится с установкой флага Z.
Поправка , не вычтет а прибавит ибо (минус на минус дает плюс)zero648 писал(а):Поправка, на флаг С не влияют команды INC и DEC, арифметика влияет, а SUBI ZL,-1 просто вычтет 255 из ZL и конечно же получится 0 и поэтому никакого переполнения не произойдет.akl писал(а):Командами SUBI ZL,-1 INC ZL просто обнулится с установкой флага Z.
Именно вычтет. Потому что 255 - это и есть -1.
Fucking static initialization order fiasco
Вы хоть перед тем как писать ,написали бы две строки кода и посмотрели ,что происходит
Вот именно. Если написать пару строчек и попробовать, то будет, конечно, 0 и флаг С не установится. Процессор не призводит никаких тождественных преобразований "минус на минус = плюс", а тупо выполняет предписанное :
SUBI ZL,0xFF => 255 - 255 = 0 безо всяких С.
Один мой знакомый перед тем, как дать кому-то рекомендацию к действию, на себе проверял ....
SUBI ZL,0xFF => 255 - 255 = 0 безо всяких С.
Один мой знакомый перед тем, как дать кому-то рекомендацию к действию, на себе проверял ....
Здравствуйте форумчане!
Подскажите, желательно на примере кода в несколько строк на асме, реализацию следующей задачи.
Порт контроллера подключен 4 пинами к одному устройству, а остальными к другому, причём не подряд, а
вперемешку (d0, d1, d2, d7 - одно устр-во , d3, d4, d5 d6 - другое). Необходимо выводить по команде 4 бита только на
1-е устройство, не затрагивая остальные 4 бита, как реализовать?
Подскажите, желательно на примере кода в несколько строк на асме, реализацию следующей задачи.
Порт контроллера подключен 4 пинами к одному устройству, а остальными к другому, причём не подряд, а
вперемешку (d0, d1, d2, d7 - одно устр-во , d3, d4, d5 d6 - другое). Необходимо выводить по команде 4 бита только на
1-е устройство, не затрагивая остальные 4 бита, как реализовать?


