как к 2-х байтовой переменной прибавляется 1-байтовая константа,
Почему-то не канает если так хочу прибавить 6:
subi REG_L, -6
sbci REG_H, 0
Это мягко говоря не совсем очевидено
Вы командой установки бита (от 0 до 7) пытаетесь установить бит с номером 23 (адрес регистра r23). SBI не предусматривает переменную в качестве второго аргумента, только константу. Да и первом аргументе должен быть прямой адрес, а не регистр. Так и пишите SBI PORTC,PC3MINSK42 писал(а):Вроде успешно раскидал по регистрам, но выдает ошибку в sbi r22,r23
Насколько склероз не изменяет "с ножек что-то прочесть" в данном случае будет in r16,PINCvek писал(а): OUT PORTC, R16 ;дословно: скопировать нафиг наружу из РОН r16 в РВВ портС
Если нужно с ножек что-то прочесть в РОН16,то делаем наоборот:
IN R16,PORTC
Ну вообще-то не совсем так, вместо PORTC компилятор на самом деле подставит адрес, а вот 3 так и запишет, ничего вместо нее не подставляя, вот кусок из assembler help'а:vek писал(а):SBI PORTC, 3 - означает Установить 3-й Бит РВВ портС, где вместо "PORTC",на самом деле компилятор подставит константу-адрес порта и вместо 3 на самом деле подставит (1<<3)
Код: Выделить всё
;Мой код
.include "m8535def.inc" ;Подключение библиотеки контроллера AVR ATMega8535
.cseg ;Начало сегмента кода
.org 0 ;Начальный адрес программы
;Инициализация портов
ldi r16,$00
ldi r17,$FF
out DDRA,r16 ;Порт A на ввод
out DDRC,r17 ;Порт C на вывод
out PORTA,r17 ;Устанавливаем подтягивающий резистор на порт А
;Основная программа
main:
in r16,PINA
mov r17,r16
mov r18,r16
andi r16,$08 ;Выделение РА3 в r16
andi r17,$10 ;Выделение РА4 в r17
andi r18,$20 ;Выделение РА5 в r18
;Сдвигаем все переменные на 3-ий бит
lsr r18
lsr r18
lsr r17
mov r19,r16 ;Копирование значения из регистра r16, в регистр r19
and r19,r17 ;Выполняется логическое умножение (and - и) r19=r19*r17
andi r19,$08
com r19 ;Выполняется инверсия значения записанного в регистре r19
andi r19,$08
or r19,r18 ;Выполняется логическое сложение r19=r19+r18
andi r19,$08
;Сдвигаем значение регистра r19 на 3 бита вправо
lsr r19 ;
lsr r19 ;
lsr r19 ;
out PORTC,r19 ;Вывод результата из регистра r19 на порт C
rjmp main ;Возвращение на метку main
Все правильно, так и должно быть.У меня почему-то "0" на выходе только в одном случае: PA3 - "1", PA4 - "1", PA5 - "0". Во всех остальных случаях PC0 - "1"