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

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

  RSS

ozzornik
(@ozzornik)
Новичок
Присоединился: 5 лет назад
Сообщения: 1
26/05/2014 7:22 пп  

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


Цитата
akl
 akl
(@akl)
Estimable Member
Присоединился: 11 лет назад
Сообщения: 144
27/05/2014 5:51 пп  

Думаю, можно воспользоваться этим. 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


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

Пожалуйста, Вход или Зарегистрироваться