Академический Документы
Профессиональный Документы
Культура Документы
Periféricos
Portas de Entrada e Saída.
Introdução
• Portas de E\S.
• Comunicação
do uC com o
“exterior”.
2
Introdução
• PIC18F2550 tem 4 portas de E\S:
• 1 Porta de 8 bits, 2 de 7 bits e 1 de 1 bit.
• PORTA (RA0:RA6)
• PORTB (RB0:RB7)
• PORTC (RC0:RC2 e RC4:RC7)
• PORTE (RE 3)
3
• PIC18F4550 tem 5 portas de E\S:
• 2 Porta de 8 bits, 2 de 7 bits e 1 de 4 bits.
• PORTA (RA0:RA6)
• PORTB (RB0:RB7)
• PORTC (RC0:RC2 e RC4:RC7)
• PORTD(RD0:RD7)
• PORTE (RE0:RE3)
4
Introdução – PIC 18F4550
5
PIC 18F4550
6
Registradores
• Cada porta de E\S tem 3 registradores associados ao seu uso
no microcontrolador PIC:
• TRIS – Define a direção do pino, ou seja, se este é entrada ou
saída.
• PORT – Escreve ou lê o nível lógico da porta.
• LAT – Semelhante ao PORT, só que na leitura retorna o ultimo
valor escrito.
7
8
• Diagrama geral de um pino de E\S
11
Registradores
• Registrador PORTx: cada bit determina a leitura\escrita de cada
pino.
•POR QUÊ?
13
Registradores
• Observação!
• Para a utilização dos PINOS da PORTA e RB0:RB3 do PORTB é
necessário ajustar o ADCON1.
• ADCON1 deve ser carregado com o valor 0x0F.
• Mais detalhes na aula sobre conversor AD.
14
15
Sintaxe do Código
• No compilador XC8 podemos carregar valores nos
registradores carregando um byte, ou escrevendo apenas um
bit.
• Sintaxe para a escrita de uma byte: NomedoRegistrador =
Byte.
• Exemplo:
• PORTB = 0x0E;
• PORTA = 0b00110011;
• PORTC = 255;
16
Sintaxe do Código
• Sintaxe para a escrita de um bit:
• NomedoRegistradorbits.NomedoBit.
• Nome do bit seguindo o Datasheet.
• Exemplo:
• PORTBbits.RB0 = 1;
• LATAbits.LATA6 = 0;
• TRISCbits.TRISC0 = 1;
17
Sintaxe do Código
• Leitura de um PORT:
• Variável = PORTx; (x pode ser A,B,C ou E)
• Antes de fazer a leitura é necessário configurar a porta como
entrada.
• TRISx = 0b11111111;
• Configura todos os pinos do PORTx como entrada.
18
Sintaxe do Código
• Código exemplo:
20
Sintaxe do Código
• Exemplo:
22
Sintaxe do Código
• Exemplo
void main ()
{
TRISC = 0;
TRISB = 0xFF;
while(1)
{
if(PORTB==0xFF)
{
PORTC = 0xFF;
}
else
{
PORTC = 0x00;
} 23
}
}
Sintaxe do Código
• Escrita em um pino:
• PORTxbits.NomeDoBit = Valor; (x pode ser A,B,C ou E)
• Antes de fazer a escrita é necessário configurar o pino como
saída.
• TRISxbits.TRISxy = 0; (x – PORT y - PINO)
• Configura o pino y do PORTx como saída.
24
Sintaxe do Código
• Exemplo void main ()
{
bit x;
TRISCbits.TRISC2 = 1;
TRISBbits.TRISB0 = 0;
while(1)
{
x = PORTCbits.RC2;
if (x== 0)
{
PORTBbits.RB0 = 1;
}
else
{
PORTBbits.RB0 = 0;
} 25
}
}
Sintaxe do Código
• Uso da diretiva #define para nomear registros e bits.
• Ex:
• #define BOTAO PORTCbits.RC2
• #define LED PORTBbits.RB0
• Utilizando estas definições no código do exemplo anterior,
temos:
26
Sintaxe do Código
void main ()
{
bit x;
TRISCbits.TRISC2 = 1;
TRISBbits.TRISB0 = 0;
while(1)
{
if (BOTAO== 0)
{
LED = 1;
}
else
{
LED = 0;
}
}
27
}
Exercícios
• 1) Através de uma chave no pino RC0 acender um led no pino
RB7 quando esta estiver aberta e apagar o led quando a chave
estiver fechada.
• 2) Considere 4 chaves conectadas aos pinos da PORTB nos
pinos RB0:RB3 e um LED conectado ao PINO RB7. Acender o
LED quando a combinação de bits for igual a 0b1001. Onde
RB3 é o bit mais significativo.
28
Exercícios
• 3) Considere 4 chaves conectadas aos pinos da PORTB nos
pinos RB0:RB3 e um display de sete segmentos conectado no
PORTC. Crie um programa capaz de decodificar o valor binário
das chaves no seu correspondente hexadecimal no display de
7 segmentos.
29