инверсия порта ВВ н...
 
Уведомления
Очистить все

инверсия порта ВВ на АВР

2 Посты
2 Пользователи
0 Likes
6,166 Просмотры
ozzornik
(@ozzornik)
New Member
Присоединился: 10 лет назад
Сообщения: 1
Topic starter  

Приветствую. не хочу показаться очень тупым, но несколько раз сталкивался с такой проблемой, которую так и не решил грамотно и решения не нашел: как минимальным числом строк кода на ассемблере осуществить инверсию порта ВВ не используя в качестве памяти регистры?
например на ВВ0 подключен светодиод, он горит при включении. на ВВ2 стоит кнопка (не фиксируемая). как сделать с минимальнейшим числом строк кода так, чтобы после однократного нажатия кнопки на ВВ2 светодиод переходил в другое устойчивое положение - погас, а если был погашен, то включился? При этом важное и наверное ключевое условие - не использовать какие-либо регистры для запоминания текущего состояния порта.
МК - из разряда тини: тини13, 2313 итп.
все на что хватило моего ума - использовать флаг Т. неужели среди команд под этот контроллер нет логической операции инверсии или я просто плохо знаю математику?


Цитата
akl
 akl
(@akl)
Estimable Member
Присоединился: 15 лет назад
Сообщения: 144
 

Думаю, можно воспользоваться этим. However, writing a logic one to a bit in the PINx Register, will result in a toggle in the correspond-
ing bit in the Data Register.
LDI R16,$04
OUT PORTB,R16

LDI R16,$01
OUT DDRB,R16
TTT:
SBIC PINB,2
RJMP TTT
TTT1:
SBIS PINB,2
SBI PINB,0
TTT2:
SBIS PINB,2
RJMP TTT2

RJMP TTT


ОтветитьЦитата