2. Objetivos
• Aprender recurso da linguagem C para manipulação de pinos de I/O
digitais;
• Desenvolver aplicações com uso de I/O digitais usando a linguagem C.
Fábio Souza
2
3. Registradores para trabalhar com pinos de I/O
• TRISX – Configura pino como ENTRADA ou SAÍDA digital
• Bit = 0: pino configurado como saída digital;
• Bit = 1: pino configurado como entrada digital;
• Exemplo:
• TRISA = 0b00001111;
• PORTX –
• Quando pino configurado como saída: escreve valor digital;
• Quando pino configurado como entrada: lê o valor digital presente no pino;
• Exemplo:
• PORTA = 0b10101100;
Fábio Souza
3
4. Usando a linguagem C para Leitura
Com variável booleana (1 bit)
• Podemos ler o nível lógico de um pino apenas atribuindo o seu valor a
uma variável do tipo booleana (1 bit)
bit valorBt1;
bit valorBt2;
.
.
.
valorBt1 = PORTB.RB0;
valorBt2 = PORTA.RA1;
Fábio Souza
4
5. Usando a linguagem C para Leitura
Com variável inteira (8 bit)
• Pode-se ler o valor da porta atribuindo o valor do registrador PORTX a
uma variável inteira de 8 bits
unsigned char valor;
.
.
.
valor = PORTB;
Fábio Souza
5
6. Usando a linguagem C para Leitura
Com estrutura de controle – if -else
• Pode-se testar o valor do pino diretamente dentro da estrutura ifelse, tomando uma ação se condição verdadeira e outra se condição
falsa.
if(PORTB.RB0 == 0)
{
//instruções caso o pino esteja em nível 0
}
else
{
//instruções caso o pino esteja em nível 0
}
Fábio Souza
6
7. Usando a linguagem C para Escrita - bit
• Pode-se escrever o nível lógico diretamente no pino configurado
como saída:
• PORTB.RB0 = 1;
• PORTA.RA3 = 0;
• Pode-se atribuir o valor de uma variável booleana o pino:
• PORTB.RB0 = valoRBit1;
• PORTB.RB0 = valoRBit1;
Fábio Souza
7
8. Usando a linguagem C para Escrita - byte
• Pode-se escrever direto no registrado correspondente a porta:
• PORTB = 1;
• PORTB = 0xF0;
• PORTA = 0b00001100;
• Pode-se atribuir uma variável inteira de 8 bits ao registrador da porta:
• PORTB = variavel1;
• PORTA = variavel2;
Fábio Souza
8
9. Exercícios
1. Fazer um programa para controle de nível de um reservatório de
agua
• O reservatório possui dois sensores de nível (mínimo e máximo).
• Quando sensor de nível mínimo sem agua (sensor_mínimo = 0) a bomba
deverá ligar, quando sensor de nível máximo for atingido (sensor_máximo = 1)
desliga bomba.
Fábio Souza
10