Dúvida na direção dos PORTs do PIC

Enviado:
17 Nov 2008 15:32
por lpagano
Pessoal,
Será que existe algum conflito na configuração abaixo para um PIC 18F4520?
- Código: Selecionar todos
TRISB = 0b00000001; // só o RB0 como entrada
a = 0b00001111;
PORTB = a << 1; // PORTB = 0b00011110
Nesse caso o PORTB.RB0 estaria em zero, mas como o TRISB declarou esse pino como saída, será que vai ter algum conflito ou posso utilizar o RB0 como entrada sem problemas?

Enviado:
19 Nov 2008 16:21
por RobL
Se sua pergunta se refere a colocar o PortB0 como entrada e rotacionar os demais, a cada escrita (rotação) ele vai reler o PortB0 novamente (ler o pino). Portanto não terá problema.

Enviado:
20 Nov 2008 07:20
por lpagano
RobL,
Isso quer dizer que se o TRIS.B0 estiver em 1, mesmo que eu dê um comando para sair um 'zero' no pino RB0 não fará efeito nesse pino, pois o mesmo só funcionará para leitura de dados (inputs)?
Valeu!

Enviado:
20 Nov 2008 09:31
por RobL
Não terá problema.
O pic trabalha com a seqüência Read, Modify, Write.
Quando você escreve, toda a porta é lida, modificada e reescrita. O pino (porta) que estiver como entrada vai ler o pino e não o buffer.
Portanto, você não consegue escrever de forma a chegar ao pino, se a porta estiver como entrada.
Quando você escreve, escreve nos buffer e os pinos que estiverem como saída (note como saída) vão refletir, nos pinos, o que está no buffer de escrita.
O perigo existirá se houver alguma alteração na direção da porta, separada por uma linha de programa somente, que não é o seu caso.

Enviado:
20 Nov 2008 11:09
por lpagano
RobL,
Obrigado pela explicação.
Vou fazer isso no meu programa.
Valeu!