И не только (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено ShiphT 24 января 2003 г. 13:23
В ответ на: что-то с хтмл лажанулся по склерозу отправлено mse 24 января 2003 г. 12:48

   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