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

по МК и не только
Ответить
ozzornik
Сообщения: 1
Зарегистрирован: 26 май 2014, 15:12

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

Сообщение ozzornik » 26 май 2014, 15:22

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

akl
Сообщения: 144
Зарегистрирован: 21 дек 2008, 07:27
Откуда: Ижевск
Контактная информация:

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

Сообщение akl » 27 май 2014, 13: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

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей