Aula 08 Portas de de Ent Entra rada da e Saí Saída da – Pa Parr te I (botão, led e display de 7 seg)
Microcontro Micro Microcontroladores controlador ladores es PIC18 PIC18 – – Programação em em C
Prof. Ítalo Jáder Loiola Batista Univers Uni versidade idade de Fortaleza Fortaleza - UNIFOR Centro de Ciências Tecnológicas - CCT E-mail:
[email protected]
Jan/2011 J an/2011
Portas de E/S
O PIC18F4520 possui quatro portas de E/S com 8 bits cada e uma com 4 bits, são elas:
2
PORTA PORTA (RA7:RA0) PORTB PORTB (RB7:RB0) PORTC PORTC (RC7:RC0) PORTD PORTD (RD7:RD0) PORTE PORTE (RE3:RE0)
Portas de E/S
Cada porta de E/S possui basicamente três registradores SFRs para o seu controle: Registradores TRIS TRIS::
Controla a direção de cada pino da porta;
Controla a leitura/escrita em cada pino da porta;
Registradores LA LAT T:
3
Funcionam de forma praticamente idêntica ao aos registradores PORT, mas com a diferença de que a leitura de um registrador LAT retorna o último valor escrito nele e não o estado externo do pino; Utilizado nos casos em que a carga externa ligada ao pino possui uma capacitância muito elevada ou velocidades de clock elev elevad adas as que que caus causam am alte altera raçõ ções es inde indese seja jada das; s;
Portas de E/S - FSRs
4
Portas de E/S
5
Cada bit de cada PORT está associado ao respectivo pino do PIC; Cada pino pode ser configurado como entrada ou saída independente dos demais Então, para fazer com que um determinado pino de um dos PORTs funcione como entrada ou saída é necessário configurar os FSRs TRISX (para PORTX)
Níveis de Tensão
6
Diagrama Simplificado de um Pino de E/S
7
Configurando Pino como E/S – Porta A
Para n igual a 0, 1, 2, 3, 4, 5, 6 e 7: Bit n (R/W): TRISAn : Configura o pino RAn como entrada ou saída
8
1 = RAn configurado como entrada 0 = RAn configurado como saída
Os pinos RA6 e RA7 são multiplexados com o oscilador. Sua configuração como pino de E/S depende do bit de configuração “Oscillator”;
Lendo e Escrevendo no PORTA
, , , , , , Quando RAn configurado como entrada:
Bit n (R): RAn
Quando RAn configurado como saída:
Bit n (R/W): RAn
9
1 = Nível lógico 1 lido no pino de entrada 0 = Nível lógico 0 lido no pino de entrada
1 = Nível lógico 1 colocado no pino de saída 0 = Nível lógico 0 colocado no pino de saída
Lendo e Escrevendo no PORTA
10
Para configurar os bits RA3:RA0 como E/S digital, é preciso setar os quatro bits menos significativos do registrador ADCON1 (SFR do periférico do módulo conversor A/D) Os pinos RA5 e RA6 dependem dos bits de configuração “Oscillator” para funcionar como E/S;
Registrador da Porta B
11
Registrador da Porta C
12
Registrador da Porta D
13
Registrador da Porta E (TRISE)
14
Registrador da Porta E
15
Registrador da Porta E
16
Ler e Escrever 1. Leitura do Estado da PORTA 2. Leitura do Estado de um PINO 3. scr a na 4. Escrita em um PINO
17
Leitura do Estado da PORTA
Seta o bit 0 do TRISB TRISX = 1; // 1 -> Configura a porta X como entrada X = A,B,C,D ou E var ve =
;
A leitura na porta pode ser feita através da linha de código: if (PORTX == 0xFF) { 18
}
Leitura do Estado da PORTA
19
Exemplo 1
Leitura do Estado da PORTA
Exemplo 2
Código Errado!!!!!
20
Leitura do Estado de um PINO
Seta o bit 0 do TRISB TRISBbits.RXY = 1; // Configura RXY como entrada X = A,B,C,D ou E = a A leitura do estado do pino pode ser feita através da linha de código: if ( ! PORTXbits.RXY) {
21
}
Leitura do Estado de um PINO
Seta o bit 0 do TRISB TRISXbits.TRISXY = 1; // Configura RXY como entrada X = A,B,C,D ou E = a variável = PORTXbits.RXY; A leitura do estado do pino pode ser feita através da linha de código: if (variável) {
22
Leitura do Estado de um PINO
Podemos criar símbolos para simplificar o acesso aos pinos com a diretiva #define: #define BOTAO PORTBbits.RB0
TRISBbits.TRISB0 = 1; // Configura RB0 como entrada A leitura do estado do pino pode ser feita através da linha de código: if (BOTAO) { 23
}
Resistores de pull-up - FSRs
24
Resistores de pull-up (INTCON2)
INTCON2bits.RBPU = 0;
ou EnablePullups (); 25
Escrita na PORTA
Seta o bit 0 do TRISB TRISX = 0; // Configura a porta X como saída X = A,B,C,D ou E A escrita na porta pode ser feita através da linha de código: PORTB = 0xFF; // Coloca toda a porta B em nível lógico alto PORTB = 0x00; // Coloca toda a porta B em nível lógico baixo
26
Escrita na PORTA
27
Exemplo
Escrita em um Pino
Seta o bit 0 do TRISX TRISXbits.TRISXY = 0; // Configura RXY como saída X = A,B,C,D ou E = a A escrita do pino pode ser feita através da linha de código: PORTBbits.RB0 = 1; // Coloca RB0 em nível lógico alto PORTBbits.RB0 = 0; // Coloca RB0 em nível lógico baixo
28
Escrita em um Pino
Podemos criar símbolos para simplificar o acesso aos pinos com a diretiva #define: #define LED1 PORTBbits.RB0
eao
o
TRISBbits.TRISB0 = 0; // Configura RB0 como saída A leitura do estado do pino pode ser feita através da linha de código: LED1 = 1; // Coloca RB0 em nível lógico alto 29
LED1 = 0; // Coloca RB0 em nível lógico baixo
Escrita em um PINO
30
Por que o valores 0x7F, 0xBF, 0xDF atribuídos ao Registrador PORTD fazem os respectivos LEDs emitirem?
Como multiplexar funções de Entrada e Saída num único pino?
31
Exercícios: Acionar LEDs e Ler Botões Prática 01 – Implementar um programa para
acionar os LEDS conectados ao pinos (D0, D1, D2 e D3), enquanto os respectivos BOTÕES conectados aos pinos (B4, B5, B6 e B7) estiverem pressionados. Prática 02 – Implementar um programa para ligar e
desligar os LEDS conectados ao pinos (D0, D1, D2 e D3), com apenas um clique nos respectivos BOTÕES conectados aos pinos (B4, B5, B6 e B7). Obs.: Desenvolver códigos otimizados (utilizar a lógica de leitura de apenas um pino, fazer os defines, etc.) 32
Exercício: Acionar Buzzer e Relé Prática 03 – Implementar um programa para:
Botão 1 (RB4) controla o Buzzer (RE1); Botão 2 (RB5) controla o Relé (RE2); –
leds conectados aos pinos RD0 e RD1 piscarem alternadamente;
33
Exercícios: Display de 7seg. Prática 05 – Implementar um programa para
mostrar 0 a 9 a cada segundo em um dos displays de 7 segmentos do Kit; –
mostrar uma contagem de 0 a 9 em um dos displays de 7 segmentos do Kit por meio de três botões: - Botão 1 (RB4): incrementa a contagem; - Botão 2 (RB5): decremente a contagem; - Botão 3 (RB6): zera a contagem; 34
Conexões dos Botões
35
Conexões dos Leds e Displays
36
Conexões do Buzzer e Relé
37