Upload
fabio-souza
View
6.688
Download
7
Embed Size (px)
DESCRIPTION
Entradas e saídas digitais nos microcontroladores PIC com compilador mikroC
Citation preview
Microcontroladores PICPortas de Entrada/Saída Digital
Fábio Souza
Interface com circuitos externo
• A interface com circuitos externos é feitas através de pinos que sãoagrupados em PORTs.
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.
Pinos de I/O no PIC16F84
PORTA:RA0RA1RA2RA3RA4
PORTB:RB0RB1RB2RB3RB4RB5RB6RB7
• O PIC16F84 possui 2 PORTs :• PORTA• PORTB
Os PORTs estão divididos da seguinte forma:
Configuração
• Os pinos de I/O podem ser configuradas como entrada ou saída conforme a necessidade do hardware.
OSC1/CLKIN16
RB0/INT6
RB17
RB28
RB39
RB410
RB511
RB612
RB713
RA017
RA118
RA21
RA32
RA4/TOCKI3
OSC2/CLKOUT15
MCLR4
U1
PIC16F84
R110k
X1CRYSTAL
C1
22p
C2
22p
BT1
R210k
D1LED-GREEN
R3
330R
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
Entrada ou Saída?
• Configurando:• Entrada -> bit = 1;
• Saída -> bit = 0
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
Exemplo: Acionando um LED
• LED apagado:
RB7 = 0;Ou
TRISB =0b00000000;
• LED aceso:
RB7 = 1;Ou
TRISB =0b10000000;
0 V 5 V
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
Exemplo: Leitura de tecla com resistor de pull-up
• Tecla pressionada• Tecla solta
5 V0 V
RA0 = 1;Ou
PORTA = 0bXXXXXXX1;
RA0 = 0;Ou
PORTA = 0bXXXXXXX0;
Acionamento de pino na linguagem C
• Configuração ENTRADA/SAÍDATRISX = 0b00000000;//configura todos os pinos como saída
• Acionando um PINO:PORTX.RXY = 0; //coloca nível 0 no pino
PORTX.RXY = 1; //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
Exemplo – Pisca LED
void main() {
TRISB = 0b00000000; //configura todos os pinos do PORTB como saída
PORTB = 0; //desliga todos os pinos do PORTB
while(1){ //loop infinito
PORTB.RB7 = 1; //liga led
Delay_ms(1000); //aguarda 1 seg
PORTB.RB7 = 0; //desliga led
Delay_ms(1000); //aguarda 1 seg
} //repete ciclo
}
Leitura de pino em linguagem C
• Configuração ENTRADA/SAÍDATRISX = 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
Exemplo – Leitura de Teclavoid main() {
TRISA.B0 = 1; //configura pino RA0 como entrada
TRISB.B7 = 0; //Configura pino RB7 como saída
while(1) //loop infinito
{
if(PORTA.RA0 == 0) //se tecla pressionada
{
PORTB.RB7 = 1; //liga led
}
else //se tecla solta
{
PORTB.RB7= 0; //desliga led
}
}
}