Aqui apresentamos os projetos e informações sobre microcontroladores e sistemas embarcados
A seguir temos mais um projeto simples que mostra como fazer a leitura das entradas digitais do microcontrolador PIC16F628A utilizando-se o compilador em linguagem C MPLAB XC8.
No caso, será realizada a leitura do estado do pino 4 da porta A e do pino 0 da porta B, onde estão conectadas as chaves S1 e S2, respectivamente.
O projeto deverá ser capaz de verificar o pressionamento das chaves e quando acontecer do pressionamento da chave S1, deve-se acionar o Led LED1 por 3 segundos e quando pressionada a chave S2, deve-se acionar o Led LED2 por também 3 segundos.
Segue abaixo o circuito utilizado para o projeto:
Para este projeto deverá ser criado um projeto no MPLAB X conforme já verificado na postagem anterior.
Veja aqui como criar um projeto na IDE MPLAB X.
Projeto com o compilador MPLAB XC8 e o PIC16F628A – Parte 1
Projeto com o compilador MPLAB XC8 e o PIC16F628A – Parte 2
Para o nome do projeto e do código fonte, fique livre para escolher o que mais lhe agrada.
// CONFIG
#pragma config FOSC = HS // Oscillator Selection bits (HS oscillator: High-speed
//crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT enabled)
#pragma config MCLRE = ON // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin
//function is MCLR)
#pragma config BOREN = OFF // Brown-out Detect Enable bit (BOD disabled)
#pragma config LVP = OFF // Low-Voltage Programming Enable bit (RB4/PGM pin has
//digital I/O function, HV on MCLR must be used for programming)
#pragma config CPD = OFF // Data EE Memory Code Protection bit (Data memory code
//protection off)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
#include < xc.h >
#define _XTAL_FREQ 8000000
void main(void) {
TRISAbits.TRISA4 = 1; //Direciona o pino 4 da porta A como entrada
TRISBbits.TRISB0 = 1; //Direciona o pino 0 da porta B como entrada
TRISBbits.TRISB6 = 0; //Direciona o pino 6 da porta B como saída
TRISBbits.TRISB7 = 0; //Direciona o pino 7 da porta B como saída
PORTBbits.RB6 = 0; //Atribui nível lógico 0 (0V) ao pino 6 da porta B
PORTBbits.RB7 = 0; //Atribui nível lógico 0 (0V) ao pino 7 da porta B
while(1)
{
if (PORTAbits.RA4 == 1)
{
PORTBbits.RB6 = 1;
__delay_ms(3000);
}
if (PORTBbits.RB0 == 1)
{
PORTBbits.RB7 = 1;
__delay_ms(3000);
}
PORTBbits.RB6 = 0;
PORTBbits.RB7 = 0;
}
}
Verificamos que, em grande parte, este código se assemelha ao anterior, porém na função principal (main), teremos agora o direcionamento dos pinos 4 da porta A (pino 3 do PIC16F628A) e 0 da porta B (pino 6 do PIC16F628A) como pinos de entrada.
TRISAbits.TRISA4 = 1; //Direciona o pino 4 da porta A como entrada
TRISBbits.TRISB0 = 1; //Direciona o pino 0 da porta B como entrada
TRISBbits.TRISB6 = 0; //Direciona o pino 6 da porta B como saída
TRISBbits.TRISB7 = 0; //Direciona o pino 7 da porta B como saída
No laço principal (loop infinito), devemos agora monitorar os estados destes pinos direcionados como entrada. Isso se faz através do comando if. O comando if é um comando de decisão e este é usado para determinar se uma expressão é verdadeira, no caso, devemos verificar se o estado de um determinado pino é igual a 1, ou seja, se este pino está em nível lógico alto.
if (PORTAbits.RA4 == 1)
{
PORTBbits.RB6 = 1;
__delay_ms(3000);
}
ou
if (PORTBbits.RB0 == 1)
{
PORTBbits.RB7 = 1;
__delay_ms(3000);
}
Caso a condição da expressão seja verdadeira, deve-se executar os comandos que estão dentro do bloco if. Onde, no caso:
Se pressionado o botão S1, o nível lógico, que está em 0 (0V) no pino 4 da porta A deverá ser levado a 1 (5V) e assim, a condição do comando if (PORTAbits.RA4 == 1) será satisfeita, ou seja, será verdadeira. Então deverá ser atribuído nível lógico 1 (5V) ao pino 6 da porta B (pino 12 do PIC) e, em seguida, será gerado um atraso de 3000ms (3 segundos).
Caso seja pressionado o botão S2, o processo acima deverá ser o mesmo, assim, a condição if (PORTBbits.RB0 == 1) será verdadeira e será atribuído nível lógico 1 (5V) ao pino 7 da porta B (pino 13 do PIC) e, também, após, será gerado um atraso de 3000ms.
Ao final dos comandos condicionais, temos a atribuição de níveis lógico 0 (0V) aos pinos 6 e 7 da porta B e, assim, caso estejam acesos, serão apagados os LEDS conectados a estes pinos, conforme o esquema elétrico.
Perceba também que, caso seja pressionada uma chave, não será possível verificar o estado do outro pino que possui outra chave dentro dos 3 segundos em que o comando de atraso está sendo executado. Porém veremos como executar a ações enquanto não é finalizado o tempo de atraso estipulado em outra postagem.
Visite nossa Loja Online em www.acepic.com.br
Veja também todos os nossos cursos online disponíveis em www.acepictecnologia.com.br
Tue, 06 Aug 2024
Sun, 09 Jun 2024
Deixe um comentário