HELLO WORD COM PIC16F628A – COMO FAZER UM LED PISCAR


Para essa experiência você precisa criar um projeto no MPLAB ou MPLAB-X e inserir as linhas abaixo dentro do arquivo “main.c”. O programa foi ricamente comentado para ajudá-lo a compreender o seu “funcionamento”.

Listagem main.c

//******************************************************************************
// Projeto Hello World para placa PE-PIC16F628A
// Desenvolvido por: Eng. Márcio José Soares
//
// V1.0 - 05/09/2022
//
// Compilador: XC8 v2.45
// IDE : MPLABX 6.0 Linux
// Plataforma: placa PE-PIC16F628A com PIC16F648A
// Gravador : PICKIT3
//
// Pinos utilizados:
// RB4 : LED5 (Hello World)
//
//******************************************************************************

//******************************************************************************
// Bits de configuração
#pragma config FOSC = INTOSCIO // Bits de seleção do oscilador (Oscilador interno: RA6 e RA7 como I/O)
#pragma config WDTE = OFF // WDT disabilitado
#pragma config PWRTE = ON // Power-up Timer disabilitado
#pragma config MCLRE = ON // MCLR = I/O RA5
#pragma config BOREN = OFF // Brown-out Detect BOD disabilitado
#pragma config LVP = OFF // Low-Voltage Programming desabilitado - I/O RB4
#pragma config CPD = OFF // Data EE Memory Code Protection desabilitado
#pragma config CP = OFF // Flash Program Memory Code Protection desabilitado

//******************************************************************************
// Se nenhuma freqüência foi definida, assume 4MHz
// Esta definição é exigida para calibrar as funções __delay_us() e __delay_ms()
#define _XTAL_FREQ 4000000

//******************************************************************************
// Inclui arquivos
#include <xc.h>

//******************************************************************************
// Definições importantes do módulo
#define LED PORTBbits.RB4
#define TRUE 1

//******************************************************************************
// Função principal
//
// Entradas - nenhuma
// Saídas - nenhuma
//******************************************************************************
void main(void) {

PORTA = 0; // zera ports
PORTB = 0;

INTCON = 0x00; // Todas as ints desligadas
CMCON = 0x07; // desliga comparadores

TRISA = 0xFF; // Configura PORT A - entrada
TRISB = 0x00; // Configura PORT B - saída

LED = 0;

while(TRUE){
LED ^= 0x01; // inverte o estado do pino
__delay_ms(500); // temporiza
}

return;
}


Após digitar o programa, compile-o e grave-o no microcontrolador PIC presente na placa PE-PIC16F628A. O jumper JP3 precisa estar fechado, caso contrário o LED não piscará!

Neste programa LED é definido como pino RB4. Você percebeu que o LED pisca a cada 500ms?! Ele se mantêm aceso por 0,5s e apagado por 0,5s. Isso é obtido através da lógica “XOR” realizada através da linha LED ^= 0x01 (LED = LED XOR 1). Dessa forma o estado do bit é invertido sempre. Note que o LED é inicializado com 0, então:

0 xor 1 = 1;

1 xor 1 = 0;


Desafios:

  1. Faça o LED2 piscar ao invés do LED5?!
  2. Faça o LED2 e o LED5 piscarem de forma alternada (quando LED2 estiver aceso, LED5 deve estar apagado e vice-versa)

 



Copyright deste conteúdo reservado para Márcio José Soares e protegido pela Lei de Direitos Autorais LEI N° 9.610, de 19 de Fevereiro de 1998. É estritamente proibida a reprodução total ou parcial do conteúdo desta página em outros pontos da internet, livros ou outros tipos de publicações comerciais ou não, sem a prévia autorização por escrito do autor.