O documento descreve os conceitos básicos de entrada e saída digital em microcontroladores PIC, incluindo PORTs, configuração de pinos como entrada ou saída, escrita e leitura de valores nos pinos usando registradores PORT e TRIS. Exemplos em C mostram como piscar um LED e ler o estado de uma tecla.
2. Interface com circuitos externo
• A interface com circuitos externos é feitas através de pinos que são
agrupados em PORTs.
3. PORTX
• OS PORTs são agrupados em até 8 pinos (bits) e são denominados:
PORTA, PORTB, PORTC .... Conforme a quantidade de pinos que o
microcontrolador apresenta.
4. Pinos de I/O no PIC16F84
• O PIC16F84 possui 2 PORTs :
• PORTA
• PORTB
Os PORTs estão divididos
da seguinte forma:
PORTA:
RA0
RA1
RA2
RA3
RA4
PORTB:
RB0
RB1
RB2
RB3
RB4
RB5
RB6
RB7
5. Configuração
• Os pinos de I/O podem ser configuradas como entrada ou saída
conforme a necessidade do hardware.
C1
R2
10k
22p
X1
C2
22p
BT1
U1
CRYSTAL
16
15
4
OSC1/CLKIN
OSC2/CLKOUT
MCLR
RA0
RA1
RA2
RA3
RA4/TOCKI
RB0/INT
RB1
RB2
RB3
RB4
RB5
RB6
RB7
R1
10k
PIC16F84
17
18
1
2
3
6
7
8
9
10
11
12
13
R3
330R
D1
LED-GREEN
6. Registradores para configuração
• Para definir se um pino será utilizado como entrada ou saída utiliza-se
o registrador TRISX.
• No PIC16F84
• TRISA
• TRISB
8. Escrita em pino
• Para escrita, o pino correspondente deve estar configurado como
saída no registrador TRISX correspondente.
• A escrita é é feita através do registrador PORTX correspondente.
• Exemplo: PORTA -> PIC16F84A
9. Exemplo: Acionando um LED
• LED apagado:
0V
RB7 = 0;
Ou
TRISB =0b00000000;
• LED aceso:
5V
RB7 = 1;
Ou
TRISB =0b10000000;
10. Leitura de nível lógico no pino
• Para leitura, o pino correspondente deve estar configurado como
entrada no registrador TRISX correspondente.
• A leitura é feita através do registrador PORTx.
• Exemplo: PORTA -> PIC16F84A
11. Exemplo:
Leitura de tecla com resistor de pull-up
• Tecla solta
• Tecla pressionada
RA0 = 1;
Ou
PORTA = 0bXXXXXXX1;
5V
RA0 = 0;
Ou
PORTA = 0bXXXXXXX0;
0V
12. Acionamento de pino na linguagem C
• Configuração ENTRADA/SAÍDA
TRISX = 0b00000000;//configura todos os pinos como saída
• Acionando um PINO:
PORTX.RXY = 0;
PORTX.RXY = 1;
//coloca nível 0 no pino
//coloca nível 1 no pino
• Acionando mais de um PINO:
PORTX = 0b10100101;//aciona PORTX inteiro de uma vez
X: A, B, C , D... Conforme PORTs
Y: 0,1,2,3....
Conforme pinos
13. Exemplo – Pisca LED
void main() {
TRISB = 0b00000000;
PORTB = 0;
while(1){
PORTB.RB7 = 1;
Delay_ms(1000);
PORTB.RB7 = 0;
Delay_ms(1000);
}
}
//configura todos os pinos do PORTB como saída
//desliga todos os pinos do PORTB
//loop infinito
//liga led
//aguarda 1 seg
//desliga led
//aguarda 1 seg
//repete ciclo
14. Leitura de pino em linguagem C
• Configuração ENTRADA/SAÍDA
TRISX = 0b00000000;//configura todos os pinos como saída
• Lendo um PINO:
valor_booleano = PORTX.RXY; //atribui o valor do pino a uma variável booleana
Valor_inteiro = PORTX;
//atribui o valor do port todo a uma variável int
if(PORTX.RXY == 0) //verifica o valor do pino e toma uma ação de verdadeiro
{
}
while(PORTX.RXY == 0); //enquanto pino em nível 0 fica no loop