MicroCHIP.RU
Главная Документация Отладочные средства Справочник Поиск Ссылки
 Новости   Конференция   Контакты 
 

Подскажите - Как красивее на СИ дергать несколькими выводами порта одновременно?

 Нoвaя темa  |  Наверх  |  Перейти к теме  |  Поиск  |  Правила  |  Вход 

ВНИМАНИЕ!
Вы просматриваете архив форума.

Этот форум работает только в режиме просмотра и поиска.

Действующий форум переведен на новый движок и
находится по адресу www.microchip.su

 Подскажите - Как красивее на СИ дергать несколькими выводами порта одновременно?
Автор: Make_Pic ()
Дата:   09/03/2005 18:15

Подскажите - Как красивее на СИ дергать несколькими выводами порта одновременно?

Нужно не трогая другие пины одновременно (!) изменять состояние пинов RC0,RC1,RC2
PIC16F87x.

Приходит в голову только одно решение - через переменную-копию порта RC. Как еще
можно это сделать на СИ?


 
 (+)
Автор: =L.A.= ()
Дата:   09/03/2005 18:34

PORTC = PORTC ^ 0b00000111;


 
 А разве искл. или в данном случае поможет?
Автор: Make_Pic ()
Дата:   09/03/2005 19:41

Я пологаю можно только инвертировать данные порта с помощью предложенного способа.

Мне необходимо выборочно устанавливать состояния xxxxx000 - xxxxx111 для управления
внешним дешифратором и желательно чтобы на выходе не было иголок.



Отправка отредактированного (09/03/2005 20:29)


 
 Re: А разве искл. или в данном случае поможет?
Автор: bzx ()
Дата:   09/03/2005 23:14

PORTC &= ~((1<<RC0)|(1<<RC1)|(1<<RC2)) // Обнуление RC0,RC1,RC2
PORTC |= ((1<<RC0)|(1<<RC1)|(1<<RC2)) // Выставление RC0,RC1,RC2


 
 это поннятно, но...
Автор: Make_Pic ()
Дата:   10/03/2005 08:23

Этот вариант я рассматривал, а так чтобы одной коммандой сразу установить код минуя
нулевое состояние?


 
 есть маааленький минус
Автор: bzx ()
Дата:   10/03/2005 09:19

когда состояние портов сбрасывается а потом выставляется, то появляется короткий
импульс (0). Иногда это может стать отрицаельным фактором при работе устройства в
целом.


 
 PORTC=(PORTC & ~0x7) | (bByte&0x7); // (+)
Автор: abivan ()
Дата:   10/03/2005 09:57

именно через переменную, только это сделает компилятор.

___________________________________________________________
Ignore list: front242

Отправка отредактированного (10/03/2005 09:58)


 
 И я об этом же!
Автор: Make_Pic ()
Дата:   10/03/2005 10:12

Только одно приходит в голову - держать постоянно в памяти копию порта.
В копии делаем изменения и в порт!


 
 Re: PORTC=(PORTC & ~0x7) | (bByte&0x7); // (+)
Автор: Make_Pic ()
Дата:   10/03/2005 10:16

А после компиляции те же грабли, что и bzx предложил -
http://www.microchip.ru/phorum/read.php?f=2&i=83653&t=83616
Поскакивает "0"
Или не так?!


 
 Не должно(+)
Автор: abivan ()
Дата:   10/03/2005 12:14

 
;main.c: 9: PORTC=(PORTC & ~0x7) | (bByte&0x7);
  movf  ?a_main,w
  andlw 7
  movwf btemp

  movf  7,w ;volatile
  andlw -8
  iorwf btemp,w
  
  movwf 7 ;volatile



 
 Re: Подскажите - Как красивее на СИ дергать несколькими выводами порта одновременно?
Автор: Vasen ()
Дата:   10/03/2005 14:58

Make_Pic

А чем такая операция не нравится:

PortMask = 0x01; // Необходимое состояние выводов RC0 - RC2
PORTС = (PORTС&0xF8)|PortMask;


Вот что получилось (компилятор микрочиповский):
005D00 00EF0 MOVLW 0xf8
005D02 01480 ANDWF 0xf80, W, ACCESS
005D04 00901 IORLW 0x1
005D06 06E80 MOVWF 0xf80, ACCESS



Отправка отредактированного (10/03/2005 16:27)


 
 только 1-цы, а 0 это и( and ) ( - )
Автор: patton ()
Дата:   10/03/2005 15:24

-


 
 я только ещё хотел сказать
Автор: patton ()
Дата:   10/03/2005 15:30

что даже если делать and порту и потом or( или в другом порядке ) то от
неизменных бит ведь не будет ничего, так что, что за паника? а если надо
именно одновременно( правда не знаю зачем, мне не нужно пока было ), то
классный вариант