Os microcontroladores PIC desenvolvidos pela Microchip são famosos no meio do desenvolvimento embarcado, são chips baratos que podem ser encontrados a venda em qualquer loja de componentes eletrônicos. Existem PICs baseados em 8 bits, 16 bits e recentemente em 32 bits, sendo que os mais populadores são os chips de 8 bits. Encontram-se diversos tipos de famílias 8 bits deste microcontrolador, como por exemplo o PIC16 com sua extensa lista de modelos ou o famoso PIC18 onde podemos encontrar vários livros e tutoriais.
O PIC16F877A é o modelo mais conhecido entre a sua família, segundo o datasheet este chip contém 40 pinos disponíveis sendo separados em 5 grupos de portas I/O. Sua base é desenvolvida na arquitetura de Harvard ou RISC seguindo o padrão de tecnologia de circuitos integrados CMOS low-power, igualmente ao microcontrolador Atmega328p da Atmel. O clock permite trabalhar em diferentes frequências como 8 MHz, 16 MHz ou em seu máximo, 20 MHz. Existem pinos dedicados para comunicação serial USART, SPI e I2C. Confira a pinagem do PIC16F877A abaixo.

Materiais
O primeiro passo para inicializar o projeto é montar uma estrutura adequada para receber o microcontrolador PIC16F877A no protoboard, para isso pegue uma caneta e um papel para anotar os seguintes componentes e módulos necessário para esta montagem.
Dica: Sempre que possível reutilize componentes da sucata e teste com um multímetro antes de utilizá-los no protoboard, isso ajuda na falta de algum componente.
- 1 Microcontrolador Microchip PIC16F877A
- 1 Programador universal MiniPro 40 pinos USB
- 1 Cristal de 16MHz ou 20MHz
- 2 Capacitores cerâmicos de 22pF NPO
- 2 Capacitores de poliéster de 100nF
- 1 Chave push button N/O de 2 pinos ou 4 pinos
- 1 Resistor de 10KΩ
- 1 Resistor de 220Ω
- 1 Protoboard
- Fonte de alimentação 5V (LM7805 e capacitores) - faça a sua agora!
- 1 Bateria
- 1 Conector Jack P4 2.1mm com fios
- Fonte de bancada ajustável (Opcional)
- Fios jumpers
- 1 LED
Dicas de montagem
Com estes materiais em mãos podemos inicializar a montagem do PIC16F877A, para isso encaixe ele no protoboard e observe atentamente a pinagem no esquema abaixo.

A montagem no protoboard deve ficar semelhante à imagem abaixo.

No pino 1 coloque o resistor pull-up de 10KΩ no 5V e a chave push button no GND para realizar o reset do microcontrolador.
A notação VDD significa a alimentação positiva do circuito integrado, no PIC16F877A são os pinos 11 e 32, com isso conecte os cabos nestes pinos no 5V do protoboard.
A notação VSS significa a alimentação negativa do circuito integrado, no PIC16F877A são os pinos 12 e 31, com isso conecte os cabos nestes pinos no GND do protoboard.
Para um melhor funcionamento do microcontrolador, adicionamos os dois capacitores poliéster de 100nF com a função de desacoplamento, com o objetivo de evitar ruídos da rede elétrica circulando na nossa montagem, para isso ligue um capacitor no pino 11 do PIC levando para o GND do protoboard e o outro capacitor no pino 32 para o GND também.
Os pinos 13 e 14 são responsáveis pelo clock, então coloque o cristal de 16MHz ou 20 MHz e em cada pino um capacitor cerâmico de 22pF NPO ao GND.
A fonte de alimentação foi desenvolvida com o regulador de tensão LM7805 e capacitores, no pino 1 foi conectado o fio positivo do jack P4 e o GND ao GND do circuito.
IDE e compilador
Com todas as ligações realizadas corretamente, por enquanto deixe o protoboard de lado. O primeiro passo é instalar uma IDE e um compilador que interprete os registradores do PIC16F877A.
Existem diversos ambientes de desenvolvimento (IDE) e compiladores para o PIC, neste tutorial foi utilizado a IDE oficial da Microchip MPLAB X com o compilador XC8. Curiosidade: Quem trabalha com o NetBeans irá reconhecer o MPLAB X!
Na página oficial do MPLAB X clique na aba "Downloads" ao lado da aba "Features" e baixe a última versão correspondente ao seu sistema operacional. Este tutorial foi realizado com a versão IDE 64x para Microsoft Windows. Se você tiver dúvidas com o MPLAB X, na aba "Documentation" estão disponíveis várias documentações em PDF para consulta.
Clicando somente em Next, no final da instalação irá abrir uma janela indicando links úteis, o link que temos que dar atenção é o primeiro, o instalador indica que é necessário baixar o compilador XC8.
Na página oficial do compilador clique na aba "Downloads" ao lado da aba "Additional Information" e faça o donwload da última versão do XC8 para microcontroladores 8 bits correspondente ao seu sistema operacional.
Clicando somente em Next, você irá perceber no final da instalação que esta versão do compilador é free, porém para este tutorial não influenciará em nenhuma função,
Tudo pronto para inicializar o MPLAB X IDE! A janela que você deverá visualizar é semelhante a imagem abaixo.

Pronto para criar o seu primeiro projeto? Siga os passos necessários para esta tarefa:
- No menu File -> New Project.
- Em Categories -> Microchip Embedded e em Projects -> Standalone Project e Next.
- Em Family -> All Families e Device -> PIC16F877A e Next.
- O passo Select Tool é para selecionar o tipo de gravador, como vamos utilizar um gravador universal sem debugger, deixe selecionado o ICD 3 (padrão da IDE) e Next.
- Selecione o compilador XC8 e Next.
- Coloque um nome para seu projeto como por exemplo "PiscarLED" e um local para salvar o projeto e Finish!





Seu projeto está criado, feche as abas da página inicial e da loja do MPLAB, como o projeto está em branco será necessário um arquivo main.c para escrever o código, observe a imagem abaixo para criar este arquivo.
- Source Files -> New -> main.c...
- Coloque um nome para seu arquivo .c como por exemplo "led" e Finish!
- Abra o arquivo led.c com 2 cliques.



Codificando o PIC
Para começar a programar é importante entender como funciona os registradores utilizando o compilador XC8. Para cada porta podem ser associados 2 registradores, o TRIS (Tri-State) e PORT. Todos os pinos do PIC possuem diferentes PORTs e TRISs, como PORTD e PORTB ou TRISB e TRISD contendo grupos de pinos GPIO (General Purpose Input Output), sendo que cada PORT contém 8 pinos I/O, por exemplo PORTB7 ou PORTD2. Para definir se um pino é Input ou Output utilizamos o registrador TRIS, se TRIS = 1 significa Input e TRIS = 0 significa Output.
De modo geral, se o registrador TRIS = 0 e o registrador PORT = 1 corresponderá a o estado HIGH ou 5V, e se o PORT = 0 será LOW ou GND. Outra condição é se o TRIS = 1 e o PORT = 1 temos o estado de alta impedância ou terceiro estado do Tri-State, levando o pino ao HIGH ou 5V, igualmente se a condição for TRIS = 1 e o registrador PORT = 0 corresponderá ao estado LOW ou GND como demonstra a imagem abaixo.

Para definir as portas e seus registradores você pode escreve-los utilizando números decimais, octais, hexadecimais e com a técnica bitwise.
A forma que é definido com as bases numéricas são representados da seguinte forma:
- 0b indica números binários.
- 0 indica números octais e decimais.
- 0x indica números hexadecimais
Veja a tabela abaixo com algumas conversões:
Decimal | Binário | Octal | Hexadecimal |
---|---|---|---|
0 | b00000000 | 00 | 0x00 |
1 | 0b00000001 | 01 | 0x01 |
128 | 0b10000000 | 0200 | 0x80 |
255 | 0b11111111 | 0377 | 0xFF |
Estes exemplos de código mostram como são utilizados na programação para o PIC.
PORTD = 0xFF; // Todos os pinos PORTD setados como 1/HIGH
TRISD = 0x00; // Todos os pinos TRISD setados como 0/OUTPUT
PORTB = 128; // Seta o sétimo bit do PORTB como 1/HIGH
PORTA = 0b00000001; // Seta o primeiro bit do PORTA como 1/HIGH
TRISB = 0b00100000; // Seta o quinto bit como 1/INPUT e os demais como 0/OUTPUT
A imagem abaixo demonstra a atribuição dos bits de entrada e saída em binário do TRISB do código acima TRISB = 0b00100000;:

A técnica bitwise em C++ significa bit a bit, a forma utilizada com esta técnica consiste em operações de deslocamento a direita e a esquerda de bits. Observe os exemplos de códigos que são interpretados pelo PIC.
// Seta o pino TRISB como OUTPUT
TRISB = (0 << TRISB0);
// Seta os pinos TRISD1 ou TRISD2 como OUTPUT
TRISD = (0 << TRISD1)||(0 << TRISD2);
Agora que você entendeu o básico sobre os registradores do PIC, cole este código em seu main.c e clique no botão "Build Main Project". Se apareceu a mensagem no painel Output da IDE "BUILD SUCCESSFUL" seu código foi compilado com sucesso!
Atenção, altere o valor da constante "_XTAL_FREQ" conforme o valor do cristal utilizado. Neste caso foi utilizado um de 16MHz.
/*
* File: led.c
* Author: Ana Paula Messina - tecdicas
*
* Created on 2 de Novembro de 2017, 20:05
*/
// Clock 20 MHz
// #define _XTAL_FREQ 20000000
// Clock 16MHz
#define _XTAL_FREQ 16000000 // 16 MHz
#include <xc.h>
// Padrão de configurações
#pragma config FOSC = HS // Oscillator Selection bits (HS oscillator)
#pragma config WDTE = ON // Watchdog Timer Enable bit (WDT enabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
int main()
{
TRISD = (0 << TRISD2); //RD2 (Pino 21) definido como OUTPUT
while(1)
{
RD2 = 1;
__delay_ms(100);
RD2 = 0;
__delay_ms(100);
}
return 0;
}
Gravando o PIC
Para este tutorial foi utilizado um gravador universal de 40 pinos USB sem debbuger, o único problema é que você terá que tirar o PIC toda vez do protoboard para gravar um firmware.
O gravador utilizado é o MiniPro e o software para gravação é do mesmo fabricante disponível em seu site oficial.

Para gravar utilizando o MiniPro precisamos do arquivo hexadecimal do nosso projeto "PiscaLED" desenvolvido na IDE MPLAB X, quando você clicou para compilar o projeto, automaticamente ele gera esse arquivo no diretório do projeto. Para encontrá-lo acesse a pasta do projeto e siga este caminho:
- \dist\default\production\PiscarLED.X.production.hex
Com o arquivo hexadecimal em mãos podemos abrir o software de gravação MiniPro, para isso retire com cuidado o PIC do protoboard sem amassar os pinos e coloque no gravador, neste gravador indica o lado correto para ser encaixado com uma flecha. Siga estes passos para configurar o software e gravar o hex em seu PIC.






Voltando ao protoboard
Seu PIC está gravado com o código para piscar um LED, agora retire o PIC do gravador e encaixe novamente no protoboard com a pinagem correta e veja o esquema para ligar um LED em modo current source com um resistor limitador de corrente de 220 ohms conectado na porta 21 do PIC.

Com as conexões realizadas corretamente, conecte a bateria ou a fonte de bancada e veja o resultado!
Comente qual foi sua experiência em ter montado este projeto com PIC! Ou tire suas dúvidas.
Se inscreva no canal do YouTube para mais conteúdo de eletrônica digital e embarcados!