И не только (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
ldi temp,direct_byte
andi temp,0b11110011
out portd,temp
...
можно просто брать direct_byte с "0" в нужных позициях
можно пользоваться командой "sbi(cbi) portd,pinX"1. temp это регистр (как правило r16)
2. маску 0b11110011 лучше прочитать из DDRD
получим:
ldi r16, direct_byte
in r17, DDRD
and r16, r17
out PORTD, r16
это на команду больше, и если это не критично, то лучше, потому что
не надо думать о том, какие все-таки ноги крутим.
либо если на С, то:
PORTD = direct_byte & DDRD; //вместо PORTD = direct_byte
Есть еще вариант, который оставит подтяжку в покое:
ldi r16, direct_byte
in r17, DDRD
and r16, r17
in r18, PORTD
com r17
and r18, r17
or r16, r18
out PORTD, r16
А на С: PORTD = (direct_byte & DDRD)|( ~DDRD & PORTD);
Составить ответ
|||
Конференция
|||
Архив
Ответы
Перейти к списку ответов
|||
Конференция
|||
Архив
|||
Главная страница
|||
Содержание
|||
Без кадра
E-mail:
info@telesys.ru