Buscar

Programação de Microcontroladores PIC em BASIC para Iniciantes Utilizando o Proton IDE

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 53 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 53 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 53 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECOLOGIA DO CEARÁ 
TECNOLOGIA EM MECATRÔNICA INDUSTRIAL 
 
 
 
Programação de Microcontroladores PIC em BASIC 
para Iniciantes: Utilizando o Proton IDE 
 
 
 
 
 
 
 
Marcelo Vieira do Nascimento de Freitas 
 
 
 
 
 
 
 
 
 
 
Limoeiro do Norte-CE 
Março de 2015 
 
 
Prefácio 
 
Este trabalho é destinado a proporcionar uma noção básica sobre programação de 
microcontroladores PIC em linguagem BASIC. Elaborado na disciplina de Projeto Social tem como 
objetivo final a inclusão social daqueles que iniciam a aprendizagem na programação e utilização de 
microcontroladores PIC em linguagem BASIC. Será discutido questões básicas de hardware, 
software e assuntos correlacionados. 
 
A princípio será abordado conceitos sobre softwares utilizados na programação, compilação 
e simulação de programações. Em seguida será mostrado conceitos sobre microcontroladores PIC, 
em especial o PIC16F877A, que será o utilizado para simulações. Dado o conhecimento adquirido 
anteriormente se fará necessário a explanação de alguns conceitos sobre eletroeletrônica, assim 
auxiliando na melhor compreensão das estruturas utilizadas para o funcionamento correto dos 
microcontroladores. Por último será abordado a estrutura de programação em BASIC, mostrando 
quais são as principais funções e como elas funcionam, mostrando aplicações e exemplos. 
 
O software de programação e compilação utilizado para programação em Basic será o Proton 
IDE. Para a simulação será utilizado o ISIS Proteus. 
 
Vale ressaltar que apesar de apresentar conceitos básicos sobre hardware o foco deste 
trabalho será a apresentação de modo básico da linguagem de programação BASIC aplicado em 
microcontroladores PIC. 
 
 
 
Sumário 
1 - SOFTWARES UTILIZADOS .............................................................................................................. 1 
1.1 – ISIS PROTEUS ............................................................................................................................... 1 
1.2 – PROTON IDE ................................................................................................................................. 1 
1.3 – GRAVAÇÃO E COMPILAÇÃO DA PROGRAMAÇÃO ............................................................... 2 
1.3.1 - Gravação de Programas Fisicamente ..................................................................................... 2 
1.3.2 – Gravação de Programas por simulação ................................................................................. 3 
2 - O PIC 16F877A ..................................................................................................................................... 4 
3 - CONCEITOS BÁSICOS SOBRE ESTRURAS INTERNAS DOS MICROCONTROLADORES .... 7 
3.1 - Memórias........................................................................................................................................ 7 
3.2- Unidades de memória ..................................................................................................................... 7 
3.3 – Memória de Programa (FLASH) .................................................................................................. 8 
3.4 – Memória de Dados (RAM) ............................................................................................................ 8 
3.5 - Registo ............................................................................................................................................ 8 
3.6 - SFR – Registo de Função Especial ................................................................................................. 8 
3.7 - Portas de Entrada/Saída – I/O ....................................................................................................... 9 
3.8 - Interrupções ................................................................................................................................... 9 
3.9 - CPU – Unidade Central de Processamento ................................................................................... 9 
3.10 - Oscilador ...................................................................................................................................... 9 
3.11 - Arquitetura Interna ....................................................................................................................10 
4 - CONCEITOS DE ELETRÔNICA ......................................................................................................11 
4.1 – Oscilador Externo ........................................................................................................................11 
4.2 – Estado Lógico de pinos I/O ..........................................................................................................12 
4.3 – Optoacopladores ...........................................................................................................................12 
4.4 - PWM .............................................................................................................................................13 
4.5 – Analógico x Digital .......................................................................................................................14 
5 – BASIC: PRINCIPAIS COMANDOS E SUAS ESTRUTURAS NO PROTON IDE .........................15 
6 – EXEMPLOS E APLICAÇÕES ..........................................................................................................22 
6.1 – Primeiros Programas com o PIC 16F877A ..................................................................................22 
6.2.1 – Projeto 1: Fazendo um LED piscar. .........................................................................................23 
6.2.2 – Projeto 2: Ligar e Desligar 2 LEDs alternadamente. ................................................................24 
6.2.3 - Projeto 3: Fazer uma contagem binaria começando com 0, 1 e depois com potencias de 2 (2x) até 
128......................................................................................................................................................25 
6.2.4 – Projeto 4: Utilizando botões nas entradas para acionar saídas. Utilizando as instruções IF – 
THEN. ................................................................................................................................................26 
6.2.5 - Projeto 5: Contagem de 0 a 9 com display de 7 segmentos. ......................................................28 
6.2.6 - Projeto 6: Utilizando o Display de Cristal Líquido (LCD). .......................................................30 
 
 
6.2.7 - Projeto 7: Utilizando conversor Analógico/Digital (A/D). ........................................................34 
6.2.8 - Projeto 8: Utilizando Sensor de Temperatura para Medições. ...................................................42 
6.2.9 – Projeto 9: Acionamento de Servo-Motores. .............................................................................44 
6.2.10 – Projeto 10: Usando o PWM. .................................................................................................47 
7 – REFERENCIAS BIBLIOGRÁFICAS ...............................................................................................49 
 
 
1 
 
1 - SOFTWARES UTILIZADOS 
 
1.1 – ISIS PROTEUS 
 
O ISIS Proteus é um software da linha Proteus ASM capaz de simulações de diversos 
componentes/equipamentos eletroeletrônicos, adotando simbologias destes. De grande utilidade para 
aqueles que desejam realizar testes em elaborações de circuitos, auxilia na observação de 
características de funcionamento, parâmetros e possíveis defeitos de projeto.Este software será utilizado para a simulação de circuitos e programação do PIC, ajudando 
assim na observação do funcionamento destes e ainda em possíveis erros. 
 
 
Figura 1: Área de Trabalho do ISIS Proteus. 
 
1.2 – PROTON IDE 
 
O Proton IDE é um programador de microcontroladores PIC muito simples e eficiente 
baseado na linguagem de programação BASIC. 
 
O software é poderoso a ponto de Escrever, Depurar e Compilar programas em um único 
ambiente de trabalho, ou seja, é composto por uma área de edição de texto onde se fará a elaboração 
e utilização da linguagem de programação BASIC para obtenção de algoritmos que serão inseridos 
no PIC, a Depuração é consiste na procura de erros ou falhas na programação que são indicadas nas 
linhas de comando do algoritmo e visualizadas na tela de trabalho do editor de texto para que se possa 
ser corrigido pelo programador e o Compilador nada mais é que uma ferramenta de conversão de 
linguagem de programação onde exclusivamente no Proton IDE se faz da linguagem BASIC para 
linguagem de máquina e assim possa ser inserido no PIC. 
 
2 
 
 
Figura 2: Área de trabalho do Proton IDE. 
 
 
1.3 – GRAVAÇÃO E COMPILAÇÃO DA PROGRAMAÇÃO 
 
1.3.1 - Gravação de Programas Fisicamente 
 
Para se carregar um programa no PIC, tem-se que usar um Gravador Programador de PIC. 
Porém existe uma maneira de fazer está gravação sem a necessidade de sempre ter que dispor de um 
Gravador. Isto se faz usando um bootloader. 
 
O bootloader é um pequeno programa que roda ao ligar o microcontrolador, fazendo tarefas 
de inicialização do sistema e depois rodando o programa principal. Além disso, o bootloader pode ser 
usado para gravar o próprio PIC através da linha série RS232 dado que esse pequeno programa 
controla a comunicação com o PC e transfere a informação recebida para a memória de programa do 
PIC. 
 
 
Figura 3: Gravador de PIC USB (40zif). 
 
A gravação da programação feita no Proton IDE para PIC, utilizando o Programador ou a 
comunicação RS232 (conexão serial), se dá pela opção Compiler and Program ou pela tecla F10. 
O software fará a depuração do programa a procura de algum erro na elaboração, se não encontrado 
nenhum erro um arquivo hexadecimal será gerado pelo compilador na pasta fonte onde o programa 
foi salvo. 
 
3 
 
Ao conectar o PIC à alimentação e ao cabo de gravação de dados e em seguida resetar o PIC, 
o programa é gravado e executado pelo mesmo. 
 
 
Figura 4: Gravação de programação no PIC. 
 
1.3.2 – Gravação de Programas por simulação 
 
Uma forma de visualizar o funcionamento das instruções feitas no Proton IDE quando 
introduzidas no PIC é a simulação virtual. Para isso utilizaremos o ISIS Proteus. 
 
A simulação no ISIS Proteus se dá pela introdução do código hexadecimal no PIC virtual, 
presente na biblioteca do simulador. Para gerar esse código hexadecimal é só clicar em Compile no 
Proton IDE ou F9. Assim o código será gerado na pasta fonte onde o programa está salvo, ‘nome.hex’. 
 
 
Figura 5: Gerando arquivo hexadecimal do programa. 
 
Após gerar arquivo hexadecimal do programa e com o PIC introduzido no ISIS Proteus, é 
só dá um duplo clique no componente e na linha “Program File:” clica no ícone de uma ‘pasta’ e 
indicar o caminho do arquivo hexadecimal referente ao programa que se quer simular. 
 
 
Figura 6: Inserindo arquivo hexadecimal no PIC virtual do ISIS Proteus. 
4 
 
2 - O PIC 16F877A 
 
A escolha do microcontrolador PIC 16F877A se dá pelo fato de tal componente abranger 
todas as características dos demais componentes da família PIC de modo que ao aprender a utiliza-lo 
lhe dará meios de utilizar os demais. 
 
De modo geral os PIC são uma família de microcontroladores desenvolvido e fabricado pela 
Companhia Microchip Technologies Inc. De certo modo podemos comparar esses dispositivos a um 
computador, porém bem menores, dado que assim como estes possuem memória de programa, 
memória RAM entre outras coisas semelhantes. Dada suas características de funcionamento se pode 
assemelha-lo ao coração dos circuitos controlados, ou seja, o microcontrolador é o responsável pela 
operação de controle de todos os processos de um dado circuito eletrônico baseado nas instruções e 
rotinas que definem funções de controle. 
 
Microcontroladores x Microprocessadores: apesar de funcionamento semelhantes no 
funcionamento são diferentes em vários aspectos construtivos. Para se usar um microprocessador 
vários outros componentes externos devem ser adicionados, memória e componentes de envio e 
recebimento de dados. Em seu projeto o microcontrolador foi confeccionado para se ter tudo num só 
equipamento, não necessitando de componentes externos para seu funcionamento. 
 
A elaboração de projetos com microcontroladores requer um estudo prévio da estrutura do 
hardware a que se fará necessário para a confecção de programas e com isso saber qual será a função 
especifica de cada pino, qual dos Portes I/O (IN/OUT) será utilizado para que possam ser 
configurados de maneira correta e etc. Estes detalhes servirão para a correta utilização e controle de 
dispositivos como Botões, LCD, teclados, motores de passo, LEDs, servomotores e outros. 
 
 
 
Figura 7: PIC 16F877A com a nomenclatura de seus pinos (funções). 
 
Algumas características do componente são descritas abaixo. 
 Microcontrolador de 40 pinos; 
 Via de programação com 14 bits e 35 instruções; 
 33 portas configuráveis como entrada ou saída; 
 15 interrupções disponíveis; 
5 
 
 Memória de programação E²PROM FLASH, que permite a gravação rápida do 
programa diversas vezes no mesmo chip, sem a necessidade de apaga-lo por meio de 
luz ultravioleta; 
 Conversores analógicos de 10 bits (8x) e comparadores analógicos (2x); 
 
Para o melhor entendimento da identificação dos pinos do PIC será mostrado abaixo uma 
tabela com o significado de cada nomenclatura. 
 
Tabela 1: Identificação dos pinos e PORTs do PIC 16F877A 
Nome do Pino 
Nº 
Pino 
I/O/
P 
Tipo Descrição 
OSC1/CLKIN 13 I 
ST/ 
CMOS(4) 
Entrada para cristal. 
Entrada para osciladores externos. (híbridos ou RC) 
OSC2/CLKOU
T 
14 O - 
Saída para cristal. Os cristais ou ressonadores devem ser 
ligados ao OSC1 e OSC2. 
Saída com onda quadrada em ¼ da frequência imposta em 
OSC1 quando em modo RC. Essa frequência equivale aos 
ciclos de máquina internos. 
MCLR/Vpp 1 I/p ST 
Master Clear (reset) externo. O microcontrolador só 
funciona quando este pino encontra-se em nível alto. 
Entrada para tensão de programação (13V) 
Vss 12/3 p - GND 
Vdd 11/3 p - Alimentação positiva 
 
RA0/AN0 
RA1/AN1 
 
RA2/AN2/ 
Vref/C Vref 
RA3/AN3/VREF+ 
 
RA4/T0CKI/ 
C1OUT 
 
 
RA5/SS/AN4/ 
C2OUT 
 
2 
3 
 
 
4 
5 
 
 
6 
 
 
7 
 
 
I/O 
I/O 
 
 
I/O 
I/O 
 
 
I/O 
 
 
I/O 
 
TTL 
TTL 
 
 
TTL 
TTL 
 
 
ST 
 
 
TTL 
PORTA (I/Os digitais bidirecionais e sistema analógico): 
RA0: I/O digital ou entrada analógica AN0. 
RA1: I/O digital ou entrada analógica AN1. 
 
RA2: I/O digital ou entrada analógica AN2 ou tensão 
negativa de referência analógica. 
RA3: I/O digital ou entrada analógica AN3 ou tensão 
positiva de referência analógica. 
RA4: I/O digital (quando saída é open drayn, isto é, não 
consegue impor nível alto) ou entrada externa do contador 
TMR0 ou saída do Comparador 1. 
RA5: I/O digital ou entrada analógica AN4 ou habilitação 
externa (Slave select) para comunicação SPI ou saída do 
comparador 2. 
 
 
 
RB0/INT 
RB1 
RB2 
 
RB3/PGM 
RB4 
RB5 
 
RB6/PGCRB7/PGD 
 
 
 
 
 
33 
34 
35 
 
36 
37 
38 
 
39 
 
 
 
40 
 
 
 
 
 
I/O 
I/O 
 
 
 
 
 
 
 
 
 
 
I/O 
 
 
 
 
 
TTL/ST 
TTL 
TTL 
 
TTL 
TTL 
TTL 
 
TTL/ST 
 
 
 
TTL/ST 
 
 
PORTB (I/Os digitais bidirecionais). Todos os pinos 
deste PORT possuem pull-up interno que podem ser 
ligados/desligados pelo software: 
RB0: I/O digital com interrupção externa. 
RB1: I/O digital. 
RB2: I/O digital. 
RB3: I/O digital ou entrada para programação em baixa 
tensão (5V). 
RB4: I/O digital com interrupção por mudança de estado. 
RB5: I/O digital com interrupção por mudança de estado. 
RB6: I/O digital com interrupção por mudança de estado 
ou clock da programação serial ou pino de 
in-circuit debugger. 
RB7: I/O digital com interrupção por mudança de estado 
Ou data da programação serial ou pino de in-circuit 
Debugger. 
 
 
6 
 
 
RC0/T10SO/ 
T1CKI 
RC1/T10SI/ 
CCP2 
 
RC2/CCP1 
 
RC3/SCK/SCL 
 
RC4/SDI/SDA 
 
RC5/SDO 
RC6/TX/CK 
 
RC7/RX/DT 
 
15 
 
16 
 
 
17 
 
18 
 
23 
 
24 
25 
 
26 
 
I/O 
 
I/O 
 
 
I/O 
 
I/O 
 
I/O 
 
I/O 
I/O 
 
I/O 
 
ST 
 
ST 
 
 
ST 
 
ST 
 
ST 
 
ST 
ST 
 
ST 
PORTC (I/Os digitais bidirecionais): 
RC0: I/O digital ou saída do oscilador externo para TMR1 
ou entrada de incremento para TMR1 
RC1: I/O digital ou entrada do oscilador externo para 
TMR1 ou entrada do Capture2 ou saídas para 
Compare2/PWM2. 
RC2: I/O digital ou entrada do Capture1 ou saídas para 
Compare1/PWM1. 
RC3: I/O digital ou entrada/saída de clock para 
comunicação serial SPI/I²C. 
RC4: I/O digital ou entrada de dados para SPI ou via de 
dados (entrada/saída) para I²C. 
RC5: I/O digital e saída de dados para SPI. 
RC6: I/O digital ou TX (transmissão) para comunicação 
USART assíncrona ou clock para comunicação síncrona. 
RC7: I/O digital ou RX (recepção) para comunicação 
USART assíncrona ou data para comunicação síncrona. 
 
 
 
RD0/PSP0 
RD1/PSP1 
RD2/PSP2 
RD3/PSP3 
RD4/PSP4 
RD5/PSP5 
RD6/PSP6 
RD7/PSP7 
 
 
 
19 
20 
21 
22 
27 
28 
29 
30 
 
 
 
I/O 
I/O 
I/O 
I/O 
I/O 
I/O 
I/O 
I/O 
 
 
 
TTL/ST(3) 
TTL/ST(3) 
TTL/ST(3) 
TTL/ST(3) 
TTL/ST(3) 
TTL/ST(3) 
TTL/ST(3) 
TTL/ST(3) 
PORTD (I/Os digitais bidirecionais) ou porta de 
comunicação paralela. 
 
RD0: I/O digital ou dado 0 (comunicação paralela). 
RD1: I/O digital ou dado 1 (comunicação paralela). 
RD2: I/O digital ou dado 2 (comunicação paralela). 
RD3: I/O digital ou dado 3 (comunicação paralela). 
RD4: I/O digital ou dado 4 (comunicação paralela). 
RD5: I/O digital ou dado 5 (comunicação paralela). 
RD6: I/O digital ou dado 6 (comunicação paralela). 
RD7: I/O digital ou dado 7 (comunicação paralela). 
 
 
RE0/RD/AN5 
 
 
RE1/WR/AN6 
 
RE2/CS/AN7 
 
 
8 
 
 
9 
 
10 
 
 
I/O 
 
 
I/O 
 
I/O 
 
 
TTL/ST(3) 
 
 
TTL/ST(3) 
 
TTL/ST(3) 
PORTE (I/Os digitais bidirecionais e sistema analógico): 
 
RE0: I/O digital ou controle de leitura da porta paralela ou 
entrada analógica AN5. 
RE1: I/O digital ou controle de leitura da porta paralela ou 
entrada analógica AN6. 
RE2: I/O digital ou controle de leitura da porta paralela ou 
entrada analógica AN7. 
 
Legenda: I = Input (entrada) 
 O = Output (saída) 
 I/O = Input/Output (entrada ou saída) 
 P = Power (alimentação) 
 - = Não-utilizado 
 TTL = Entrada tipo TTL 
 ST = Entrada tipo Schmitt Trigger 
 
 
 
 
 
 
 
 
 
 
 
7 
 
3 - CONCEITOS BÁSICOS SOBRE ESTRURAS INTERNAS DOS 
MICROCONTROLADORES 
 
3.1 - Memórias 
 
 
Figura 8: Estrutura ilustrativa de uma memória de dados. 
 
Resumidamente uma memória é uma estrutura de armazenamento de bits em um 
determinado endereço de memória, onde cada endereço pode ser composto por uma quantidade 
definida de bits que assumem valor de 1 ou 0. Como mostra a figura 8 onde o endereço W1 é composto 
pelos bits de 0 a 7 (8 bits), ou seja, esse endereço pode assumir 28 resultados diferentes como resposta 
de saída. 
 
3.2- Unidades de memória 
 
É usada para o armazenamento de dados. Cada endereço de memória corresponde a uma 
posição de memória. O conteúdo dessa posição, é conhecido através do seu endereçamento. A 
memória tato pode ser lida de, como pode ser escrita para. 
 
 
Figura 9: Alocação de dados em unidades de memorias. 
 
ROM – Read Only Memory: Apenas de Leitura, é usada para gravar permanentemente o 
programa a executar. 
OTP ROM – One Time Programmable ROM: ROM onde só se pode escrever o programa 
na memória apenas uma vez. 
UV EPROM – Ultra Violet Erasable Programmable ROM: ROM que permite apagar o 
programa, usando luz Ultravioleta. 
FLASH: O seu conteúdo pode ser escrito/apagado quase que infinitamente, usado na maioria 
dos microcontroladores. 
RAM – Random Acess Memory: Memória volátil, quando se desliga a alimentação do chip 
as informações desaparecem. Usada para armazenamento temporário de dados. 
EEPROM – Electrically Erasable Programmable ROM: ROM programável, que se pode 
apagar eletricamente. Seu conteúdo não é perdido ao se desligar a alimentação do microcontrolador. 
8 
 
3.3 – Memória de Programa (FLASH) 
 
Memória não volátil que serve para armazenar o programa escrito no microcontrolador. 
Como já citado ela pode ser limpa e escrita por várias, adequando-se ao desenvolvimento de novos 
programas e mudança de dispositivos. 
 
3.4 – Memória de Dados (RAM) 
 
Usada pelo programa durante sua execução, são guardados todos os resultados intermédios 
ou dados temporais durante a execução do programa que não cruciais para o dispositivo. Os dados 
contidos nessa memoria são perdidas quando cessada a alimentação. 
 
3.5 - Registo 
 
Um registo é um circuito eletrônico que consegue memorizar o estado de um byte. 
 
 
Figura 10: Estrutura de um Registo. 
 
3.6 - SFR – Registo de Função Especial 
 
Nos microcontroladores os seus bits estão interligados fisicamente aos circuitos internos, 
tais como temporizadores, conversores A/D, osciladores, portas série e outros. Como um byte tem 
oito bits, é como se fossem oito interruptores que comandam outros pequenos circuitos dentro do chip 
e os SFR têm exatamente essa função de alocar 8 bits para cada tipo de aplicação existente 
internamente. 
 
 
Figura 11: SFR. 
 
 
 
 
 
 
 
 
9 
 
 
3.7 - Portas de Entrada/Saída – I/O 
 
São Registos ligados aos pinos do microcontrolador e são chamados de Portas ou PORT. 
Onde cada pino pode ser configurado como entrada ou saída através de software. Como normalmente 
cada porta I/O é controlado por um SFR cada bit desse registo determina o estado do pino 
correspondente do microcontrolador. 
 
 
Figura 12:SFR de PORTs I/O. 
 
 
 
3.8 - Interrupções 
 
É uma característica do microcontrolador em que só se fará a leitura de suas entradas no 
momento em que elas estiverem em modo de ativação e assim poder executar uma ação. Se essa 
característica não fosse usada o microcontrolador ficaria a todo momento fazendo a leitura do estado 
da sua entrada tornando impraticável sua utilização. Essa característica é de certo modo delega pelo 
microcontrolador a um ‘perito’ da estrutura interna que reage ao haver necessidade. 
 
3.9 - CPU – Unidade Central de Processamento 
 
É unidade que memoriza e controlatodos os processos dentro do microcontrolador, sendo 
subdividida em: Decodificador de Instruções parte eletrônica que reconhece as instruções de 
programa fazendo os outros circuitos funcionarem com base nisso. ALU é a Unidade Lógica e 
Aritmética, sendo responsável por todas as operações lógicas e matemáticas. Acumulador é um SFR 
responsável pela operação da ALU, usado para armazenar todos os dados de execução de uma 
operação e também os resultados de uso de continuação do processamento. 
 
 
3.10 - Oscilador 
 
O módulo oscilador se trata de componentes que oferecem uma oscilação continua de sinal, 
normalmente configurado para usar um cristal de quartzo e as vezes em conjunto com um ressoador 
(capacitor) cerâmico para melhor estabilidade de oscilação, possibilita a operação síncrona do 
microcontrolador advinda dos pulsos dados pelo oscilador. A não necessidade de estabilidade de 
oscilação dada por uma dada aplicação abre a possibilidade de um oscilador RC 
(resistência/Capacitor). 
 
 
 
 
 
10 
 
 
 
3.11 - Arquitetura Interna 
 
É a forma de troca de informação entre o CPU e a Memória. Os microcontroladores mais 
modernos usam duas formas distintas de arquitetura: 
 
 Von-Neumann 
 
Se tem uma única zona de memória disponível e um barramento de dados de 8 bits de modo 
a ser sobrecarregado por ter todos os dados trocados usando somente estas 8 linhas e isso deixa a 
comunicação lenta e sem eficiência. A CPU só pode ler ou escrever dados de/para a memória sendo 
impossível ambas ao mesmo tempo devido a utilização do barramento com os dados. 
 
Figura 13: Arquitetura von-Neumann. 
 
 Harvard 
 
Os microcontroladores detentoras desta arquitetura é composto de dois barramentos, um de 
8 bits que liga a CPU à RAM, e outro com várias linhas (12, 14 ou 16) ligando a CPU à ROM. Desse 
modo a CPU pode fazer a leitura de uma instrução ao mesmo tempo que acessa a memória de dados. 
 
Figura 14: Arquitetura Harvard. 
 
 
11 
 
4 - CONCEITOS DE ELETRÔNICA 
 
Devido à grande necessidade da utilização de estruturas e componentes de circuitos 
eletrônicos usado no correto funcionamento dos microcontroladores faremos aqui um estudo destes. 
 
4.1 – Oscilador Externo 
 
É um circuito indispensável para o funcionamento do microcontrolador e que também define 
a velocidade a que ele vai funcionar podendo operar entre quatro opções: 
 Oscilador LP: Oscilador de baixo consumo (Low Power); 
 Oscilador XT: Cristal / Ressonador (Capacitor); 
 Oscilador HS: Oscilador de alta Velocidade (High Speed); 
 Oscilador RC: Resistencia/Condensador (Capacitor). 
 
Cada tipo de oscilador é caracterizado pela frequência de oscilação e consequentemente pelo 
cristal/capacitores usados como mostra a tabela 1. 
 
Tabela 2: Tipos de Osciladores e seus componentes 
Tipo Frequência Capacitor 1 Capacitor 2 
LO 
32 kHz 
200 kHz 
68 – 100 pF 
15 – 33 pF 
68 – 100 pF 
15 – 33 pF 
XT 
2 MHz 
4 MHz 
15 – 33 pF 
15 – 33 pF 
15 – 33 pF 
15 – 33 pF 
HS 
4 MHz 
10 MHz 
15 – 33 pF 
15 – 33 pF 
15 – 33 pF 
15 – 33 pF 
 
 
Figura 15: Conexão de Osciladores com Crystal/Capacitor e outro com RC. 
 
 
Figura 16: Tipos de Crystal de Quartzo. 
 
12 
 
Esses cristais são de mesma frequência, mas diferem na sua construção e funcionamento. 
Em quanto o primeiro gera um trem de pulsos com 200mV em 100ns o segundo gera pulsos com 2V 
no mesmo período de tempo. 
 
Os pinos do cristal 2 tem as seguintes nomenclaturas: 
 
Pin 1: NC (pino sem conexão interna); 
Pin 7: GND; 
Pin 8: Saída TTL; 
Pin 14: +5Vdc. 
 
O oscilador externo RC tem com resultado ser mais sensível e mais econômico de todos. Sua 
precisão se deve a tolerância de erro dos seus componentes e a temperaturas que o podem afetar. 
 
4.2 – Estado Lógico de pinos I/O 
 
Quando se deseja introduzir um estado logico baixo ou alto (0V ou 5V) a uma entrada através 
de botões de pulso temos que considerar a utilização de duas logicas de estado. 
 
 
Figura 17: Pinos configurados com: a) Logica Negativa e b) Logica Positiva. 
 
Lógica Negativa – nesse estado logico o Pino I/O é alimentado com tensão (5V), ao 
pressionar o botão de pulso a tensão estará agora sobre o resistor pois a corrente passa toda por ele e 
com isso o pino fica sem tensão (0V). Resumindo: inicial o pino está com tensão e ao pressionar o 
botão esse fica sem tensão. 
Lógica Positiva – nesse estado lógico o Pino I/O está sem alimentação (0V), ao pressionar 
o botão de pulso o pino é alimentado com tensão (5V) devido ao resistor ser um caminho menos 
favorável para a corrente. Resumindo: inicialmente o pino está sem tensão e ao pressionar o botão 
esse fica com tensão. 
 
4.3 – Optoacopladores 
 
Os optoacopladores são componentes muito uteis quando se deseja separar a parte de 
comando da parte de potência de um circuito. Em uma de suas versões, se trará basicamente de um 
LED que ao ser acionado ilumina a base de um fototransistor, fazendo este conduza corrente entre o 
coletor emissor. 
 
 
Figura 18: Circuito utilizando optoacoplador, com saída negativa quando ativo. 
13 
 
 Na configuração da figura 18, quando aplicado no pin I/O um nível lógico alto (5V) o LED 
do optoacoplador e o fototransistor conduzem corrente a terra e assim se tem um nível lógico baixo 
(0V) na Saída. Ao desativar o LED o fototransistor não conduz fazendo com que se tenha um nível 
lógico alto (5V) na Saída. 
 
Já na configuração da figura 19, quando aplicado um nível lógico alto (5V) no pin I/O, o 
LED do optoacoplador acende e o fototransistor conduz para pino de saída um nível lógico alto (5V). 
Porem havendo um nível lógico baixo (0V) na entrada, o fototransistor permanecerá aberto entre 
coletor e emissor, tendo como resultado um nível lógico baixo (0V) na Saída. 
 
 
Figura 19: Circuito utilizando optoacoplador, com saída positiva quando ativo. 
 
4.4 - PWM 
 
É um recurso muito poderoso pois com ele se pode obter uma tensão analógica a partir de 
um sinal digital, porem sendo essa saída na verdade meramente digital, ou seja, podendo assumir os 
estados 0 e 1. 
 
O nome PWM é uma sigla originada do inglês (Pulse Width Modulation), que significa 
Modulação por Largura de Pulso. Trata-se de uma onda com frequência constante (período fixo) e 
largura de pulso (duty cycle) variável. 
 
 
Figura 20: PWM. 
 
Este é um tipo de geração de sinal muito importante, através dele é possível implementar um 
conversor digital analógico com um único pino do microcontrolador, uma vez que controlando a 
largura do pulso é possível obter uma tensão analógica variável. 
 
 
 
 
 
 
 
 
 
14 
 
4.5 – Analógico x Digital 
 
 Sistema analógico: é um tipo de sinal contínuo que varia em função do tempo, 
podendo assumir qualquer valor dentro de um intervalo de máximo e mínimo. 
 
 Sistema digital: é um sinal com valores discretos (descontínuos) no tempo, só podem 
assumir valores alto e baixo (0 ou 1, 0V ou 5V, etc.). 
 
 
Figura 21: Sinais digital e analógico. 
 
 
 
15 
 
5 – BASIC: PRINCIPAIS COMANDOS E SUAS ESTRUTURAS NO PROTON IDE 
 
 VARIÁVEIS 
As variáveis são dados temporariamente armazenados em um programa BASIC. Elas são 
criadas usando a palavra-chave DIM. Como o espaço de uma memória RAM em PIC é um pouco 
limitado em tamanho, a escolha do tamanho certo de uma variável para uma tarefa especifica é 
importante. As variáveis podem ser do tipo BITS, BYTES, WORDS, DWORDS ou FLOATS. 
FLOAT – são variáveis que podem conter números com casas decimais podendo conter um 
valor ente -1e37até +1e38, mas por causa da arquitetura do compilador de 32 bits, deve-se pensar no 
uso de um valor máximo e mínimo entre -2147483646,999 a 2147483646,999, o que torna a mais 
precisa dos tipos de variáveis. Porém, mais do que o tipo DWORD, e isso tem um preço quando se 
faz cálculos e comparações com uma variável FLOAT, pois usará mais espaço de código dentro do 
PIC. 
DWORD – Essas variáveis podem conter um valor entre -2147483648 a 2147483647 
tornando este a maior dos tipos da família de variáveis, no entanto usará mais espaço de código do 
PIC. 
WORD – Essas variáveis podem conter valores entre 0 e 65535, que normalmente é grande 
o suficiente para a maioria das aplicações. Ela usa bastante memória, mas não tanto como o tipo 
DWORD. 
BYTE – Podem conter um valor entre 0 e 255, sendo menor, mais rápido e mais eficiente 
do que os outros tipos de variáveis citado. 
BIT – Essas variáveis podem conter valor 0 ou 1, são criadas sempre 8 de cada vez devido 
ao tamanho dos registradores, portanto não se poupa espaço na RAM ao declara-la. 
 
 REPRESENTAÇÕES NUMÉRICAS 
Binário usa o prefixo %. Exemplo: %0101; 
Hexadecimal usa o prefixo $. Exemplo $0A; 
Caracteres é um byte cercado por aspas. Ex. “a” representando o valor 97; 
Decimal esses valores não usam prefixo. 
Pontos Flutuantes são criadas usando o ponto decimal. Ex. 3.14(3,14). 
 
 OPERADORES RELACIONAIS 
São usados para comparar dois valores. O resultado pode ser usado para tomar uma decisão 
sobre o fluxo do programa. 
 
Operador Relação Tipo de Expressão 
= Igualdade X=Y 
== Igualdade X==Y (mesmo que acima Igualdade) 
< > Desigualdade X< >Y 
!= Desigualdade X != Y (mesmo que acima Desigualdade) 
< Menor que X < Y 
> Maior que X > Y 
<= Menor ou igual a X <= Y 
>= Maior ou Igual a X >= Y 
 
 OPERADORES LOGICOS BOOLEANOS 
As funções IF-THEN-ELSE-ENDIF, WHILE-WEND, e REPEAT-UNTIL são as condições 
que suportam os operadores lógicos NOT, AND, OR e XOR. 
NOT – inverte o resultado de uma condição, mudando falso para verdadeiro e vice-versa. 
AND, OR e XOR – junta os resultados de duas condições e produz um único 
verdadeiro/falso resultado. 
 
16 
 
 OPERADORES MATEMÁTICOS 
Addition '+'. 
Subtraction '-'. 
Multiply '*'. 
Multiply HIGH '**'. 
Multiply MIDDLE '*/'. 
Divide '/'. 
Modulus '//'. 
Bitwise AND '&'. 
Bitwise OR '|'. 
Bitwise XOR '^'. 
Bitwise SHIFT LEFT '<<'. 
Bitwise SHIFT RIGHT '>>'. 
Bitwise Complement '~'. 
ABS. 
ACOS 
ASIN 
ATAN 
COS. 
DCD. 
DIG. 
EXP 
LOG 
LOG10 
MAX. 
MIN. 
NCD. 
POW 
REV. 
SIN. 
SQR. 
TAN 
DIV32. 
 
Adiciona variáveis e / ou constantes. 
Subtrai variáveis e / ou constantes. 
Multiplica variáveis e / ou constantes. 
Retorna os 16 bits do resultado multiplicar 16-bit. 
Retorna os 16 bits do meio o resultado multiplicar 16-bit. 
Divide as variáveis e / ou constantes. 
Retorna o resto da divisão um valor por outro. 
Retorna o bit E de dois valores. 
Retorna o bit OR de dois valores. 
Retorna o XOR bit a bit de dois valores. 
Desloca os bits de um valor deixou um número especificado de casas. 
Desloca os bits de um valor certo um determinado número de lugares. 
Inverte os bits em uma variável. 
Retorna o valor absoluto de um número. 
Retorna a ARC cosseno de um valor em radianos. 
Retorna o arco seno de um valor em radianos. 
Retorna o arco tangente de um valor em radianos. 
Retorna o cosseno de um valor em radianos. 
Descodificador 2 n -Alimentação de um valor de quatro bits. 
Retorna o dígito decimal especificado de um valor positivo. 
Deduzir a função exponencial de um valor. 
Retorna o logaritmo natural de um valor. 
Retorna o LOG de um valor. 
Retorna o máximo de dois números. 
Retorna o mínimo de dois números. 
Codificador de prioridade de um valor de 16 bits. 
Calcula uma variável para o poder do outro. 
Inverte a ordem dos menores bits em um valor. 
Retorna o seno de um valor em radianos. 
Retorna a raiz quadrada de um valor. 
Retorna a tangente de um valor em radianos. 
15-bit divide x 31 bit. 
 
 
17 
 
 
 DECLARE 
 
Sintaxe: [DECLARE] código da diretiva a alterar = valor da modificação 
Visão geral: Ajusta certos aspectos do código produzido, frequência de cristal, porta LCD e 
pinos de transmissão de série. 
Exemplo: DECLARE XTAL 4 ou DECLARE XTAL = 4 (Declara que o cristal é de 
4MHz). 
 
 DELAYMS 
 
Sintaxe: DELAYMS duração 
Visão geral: Atrasa a execução em x milissegundos (ms). Os atrasos podem ser até 65535ms 
(65,535 segundos) de duração. 
Exemplo: DELAYMS 100 (Atrasa a execução em 100ms). 
 
 DEVICE 
 
Sintaxe: DEVIDE digito do dispositivo 
Visão geral: Informa ao compilador qual o microcontrolador PIC está sendo usado. 
Exemplo: DEVICE = 16F877A. 
 
 DIM 
 
Sintaxe: DIM Variável {as} {Extensão ou tamanho} 
Visão geral: Todas as variáveis definidas pelo usuário devem ser declaradas usando a 
instrução DIM. 
Exemplo: DIM NUM AS BYTE (declara a variável NUM como sendo Byte (8bits)). 
 
 END 
 
Sintaxe: END 
Visão geral: A declaração END faz parar a compilação de origem, e cria um loop infinito. 
 
 GOTO 
 
Sintaxe: GOTO rótulo 
Visão geral: Ira para um rótulo definido e continua a execução de lá. 
Exemplo: GOTO LA (pula para a execução do rótulo LA) ... LA: (executa as instruções 
contidas no rótulo LA). 
 
 HIGH 
 
Sintaxe: HIGH PORT ou PORT.Bit 
Visão geral: Coloca um PORT ou um bit em estado lógico alto. Para um PORT, isso 
significa preenche-lo de 1´s. Para um bit isso significa defini-lo como 1. 
Exemplo: HIGH PORTB.4 (Coloca o pino 4 do PORT B em nível lógico alto). 
 
 
 
 
18 
 
 
 LOW 
 
Sintaxe: LOW PORT ou PORT.Bit 
Visão geral: Coloca um PORT ou um bit em estado lógico baixo. Para um PORT, isso 
significa preenche-lo com 0’s. Para um bit isso significa defini-lo como 0. 
Exemplo: LOW PORTB.4 (Coloca o pino 4 do PORT B em nível lógico baixo). 
 
 SYMBOL 
 
Sintaxe: SYMBOL Nome {=} Valor 
Visão geral: Atribui um codinome para um registro, varável, ou valores constantes. 
Exemplo: SYMBOL LED =PORTB.4 (atribui ao pino 4 do PORT B o nome LED). 
 
 INPUT 
Sintaxe: INPUT PORT ou PORT.Pin 
Visão geral: Faz com que um PORT especifico ou um pino seja utilizado como entrada. 
Exemplo: INPUT PORTA.0 (faz o pino 0 do PORT A uma entrada). 
 
 OUTPUT 
Sintaxe: OUTPUT PORT ou PORT.Pin 
Visão geral: Faz com que um PORT especifico ou um pino seja utilizado como saída. 
Exemplo: OUTPUT PORTA.0 (faz o pino 0 do PORT A uma saída). 
 
 TRIS 
Sintaxe: TRIS PORT ou PORT.Pin 
Visão geral: Configura os pinos ou PORT’s como entrada ou saída. Faz Registro de 
configuração I/O de PORT ou um pino especifico, que pode se dar de modo binário (8bits), 
hexadecimal ou decimal, sendo os dois primeiros mais comuns. 
1 = Entrada 
0 = Saída 
Exemplos: 
TRISA = %11110 (% para expressar a configuração em binário, desse modo o pino 
0 do PORT A é configurado como saída e os pinos 1, 2, 3 e 4 
como entradas). 
 
TRISA = $1E ($ para expressar a configuração em hexadecimal). 
 
TRISA = 30 (Ao converter o binário ou hexadecimal temos que o valor em 
decimal é 30, essas 3 formas para o compilador não será 
problema pois ao converte para linguagem de máquina o 
resultado será sempre binário em relação aos pinos do PORT 
configurado). 
 
 FOR...NEXT...STEP 
 
Sintaxe: FOR Variável = Contagem inicial TO contagem final {STEP {+ -} incremento} 
Visão geral: A instrução FOR...NEXT se encarrega de fazer repetições de instruções que 
permanecem dentro do laço FOR...NEXT. O parâmetro STEP afeta o incremento segundoo valor 
declarado depois desta palavra, ao omiti-lo o incremento é de uma unidade. 
Exemplo: FOR i = 0 TO 9 STEP 3 
NEXT 
19 
 
 IF – THEN - ELSE 
 
Sintaxe: If expressão 1 {AND / OR expressão 2} Then rótulo 
Visão geral: Com a instrução IF – THEN podemos tomar decisões ao longo de um programa, 
baseado em condições específicas definidas pelo programador. 
Exemplo: If PORTA.0 = 1 Then PORTB.0 =1 
 
 SELECT – CASE - ENDSELECT 
 
Sintaxe: SELECT Expressão 
 CASE Condição 
 Instrução 
 CASE ELSE 
 Instrução 
 ENDSELECT 
Visão geral: Avalia uma expressão então executa continuamente um bloco de código 
BASIC com base nas comparações, com Condição(s). Depois de executar um bloco de código, o 
programa continua a linha seguinte até chegar a ENDCASE. Se não houver casos verdadeiros 
encontrados e nem um ELSE CASE, o código levará a execução do ENDSELECT. 
Exemplo: SELECT VAR1 
 CASE 1 
 RESUL=1 
 
CASE 2 
 RESUL=2 
 
 CASE ELSE 
 RESUL=0 
 ENDSELECT 
 
 ALL_DIGITAL = TRUE 
Visão geral: Esta instrução define todos os pinos como digitais, inclusive os analógicos. 
 
 ADCON1 
Visão geral: Esta instrução define a configuração de pinos como Analógicos. 
Exemplo: ADCON1=%10000001 o bit 7 configura a justificação, os bits 6/5/4 não 
tem função, 3/2/1/0 configuram os canais 
utilizados. 
 
 EREAD 
 
Sintaxe: variável = EREAD endereço 
Visão geral: Ler as informações contidas na EEPROM on-board, disponível em alguns tipos 
de PIC. 
Exemplo: DIM VAR1 AS BYTE ‘uma variável é declara e o seu conteúdo é o 
 VAR1 = EREAD 0 contido na posição 0 da memória EEPROM.’ 
 
 
20 
 
 
 EWRITE 
 
Sintaxe: EWRITE endereço, [conteúdo] 
Visão geral: Escreve informações na memória eeprom on-board disponível em alguns PIC. 
Exemplo: EWRITE 0, [“MECATRONICA”] 
‘Escreve na memória os caracteres da palavra MECATRONICA, de modo que cada letra 
equivale a uma posição começando de 0.’ 
 
 PRINT 
 
Sintaxe: PRINT Item {, Item} 
Visão geral: Envia texto um módulo LCD. Item pode ser uma constante, varável, expressão, 
modificador ou lista de string. Os operadores modificadores não agem para modificar, mas sim para 
indicar o que se quer escrito no LCD. Para textos se deve seguir a tabela ASCII para caracteres 
especiais e entre aspas (“ texto”). 
Modificadores: 
 AT – Indica a posição do curso no LCD [AT Xpos (1 to n), Ypos (1 to n)], ou seja, 
[PRINT AT nºlinha, nºcoluna]. 
 CLS – Limpa o LCD. 
 BIN{1...32} – mostra dígitos binários no display 
 DEC{1...10} – mostra dígitos decimais no display 
 HEX{1...8} – mostra dígitos hexadecimais no display 
 Outros ... 
Exemplo: PRINT AT 1, 1, “MINHA NOTA=”, DEC 10 
 Este exemplo faz com que se escreva a frase “MINHA NOTA=” a partir da 
primeira linha e primeira coluna e após o igual, o número 10 em decimal, ficando ‘MINHA 
NOTA=10’ no LCD. 
 
Existe ainda comandos padronizados para controlar e manipular o LCD como mostrado 
abaixo na tabela 3. 
 
Tabela 3: Comandos para LCD. 
Comando Operação 
$FE, 1 Limpa o LCD e move o cursor para a posição home. 
$FE, 2 Move o cursor para a primeira linha da primeira coluna. 
$FE, $10 Move o cursor uma posição à esquerda. 
$FE, $14 Move o cursor uma posição a direita. 
$FE, $18 Desloca todo os caracteres do display a esquerda. 
$FE, $1C Desloca todo os caracteres do display a direita. 
$FE, $0C Desliga o cursor. 
$FE, $0E Cursor sublinhado. 
$FE, $0F Cursor piscando. 
$FE, $C0 Move o cursor para o início da segunda linha. 
$FE, $94 Move o cursor para o início da terceira linha. 
$FE, $D4 Move o cursor para o início da quarta linha. 
 
 
 
21 
 
 
 ADIN 
Sintaxe: Variável = ADIN n°canal 
Visão geral: Ler o valor do conversor A/D on-board. 
Exemplo: VAR = ADIN 0 Coloca o valor da conversão do canal 0 na variável VAR. 
 
 SERVO 
Sintaxe: SERVO Pino, Valor da Rotação 
Visão geral: Controla o centro de controle de um servo motor. Pino equivale ao pino do 
PORT escolhido em que o servo é conectado. Valor de Rotação é uma constante ou variável WORD 
dedicada ao posicionamento do motor podendo assumir valores entre 500 a 2500, sendo 1500 o valor 
central de posicionamento. 
Exemplo: SERVO PORTD.0, 1500 Posiciona o servo ligado ao pino 0 do PORT 
centralmente. 
 
 PWM 
Sintaxe: PWM Pino, Nível, Ciclo 
Visão geral: Gera uma saída com Modulação por Largura de Pulso em pino, em seguida, 
retorna o pino para o estado de entrada. 
 
 
 
 
 
 
 
 
22 
 
6 – EXEMPLOS E APLICAÇÕES 
 
Fazer um programa é simplesmente elaborar uma lista de instruções para o microcontrolador 
executa-las sequencialmente. Ao escrever o programa se faz extrema importância que essa sequência 
de execução esteja bem defina para se atingir o objetivo desejado. É como uma receita de bolo: 
 
1 – Pega os Ingredientes; 
2 – Mistura os Ingredientes; 
3 – Coloca a Mistura na Forma; 
4 – Leva a Forma ao Forno; 
5 – Tira a Forma do Forno e espera esfriar; 
6 – Come o Bolo. 
 
Claramente essa seria a sequência correta de programação para se fazer um bolo. Mas e se 
fosse feito uma sequência como abaixo? 
 
1 – Leva a Forma ao Forno; 
2 – Come o Bolo; 
3 – Tira a Forma do Forno e espera esfriar; 
4 – Mistura os Ingredientes; 
5 – Coloca a Mistura na Forma; 
6 – Pega os Ingredientes. 
 
Certamente todas as instruções foram informadas, porém com ordenamento incorreto. Na 
primeira instrução se pode até levar a Forma ao Forno, mas sem a mistura dos ingredientes e assim 
não tem como comer o bolo antes de fazê-lo, é obvio, e isso causará um erro de execução. Por isso se 
faz de grande importância o conhecimento correto da sequência de instruções dada ao 
microcontrolador. 
 
6.1 – Primeiros Programas com o PIC 16F877A 
 
Para se aprender a programar um microcontrolador é importante começar o assunto com 
exemplos práticos e simples, isso ajuda a entender como a arquitetura do PIC e as instruções do 
programa estão sendo usados. 
 
Os circuitos estarão baseados nos conhecimentos mostrados em páginas anteriores. 
 
Para melhorar a compreensão dos projetos que faremos na sequencia desse material, 
utilizaremos uma sequência simples de elaboração dos programas, como mostrado abaixo 
 
 Declaração do Microcontrolador; 
 Declaração do Oscilador; 
 Nomear os pinos ou PORTs a serem usados; 
 Configurar os pinos ou PORTs como entradas ou saídas; 
 Configuração dos PORTs como Digitais ou Analogicos; 
 Declaração de Varáveis; 
 *Declaração de outros componentes (se necessário); 
 Instruções e/ou rotinas. 
 
Obs.: Vale ressaltar que o Proton IDE ler as linhas de programação sequencialmente e que 
comentários no programa são feitos com a adição do acento grave ( ` ) à frente das palavras da linha. 
23 
 
6.2.1 – Projeto 1: Fazendo um LED piscar. 
 
Circuito 
 
 
Figura 22: Circuito do Projeto 1. 
 
Programa 
 
Device = 16F877A 'Declara qual o Microcontrolador 
Xtal 4 'Declara o Oscilador 
 
Symbol LED = PORTB.0 'Nomeia o pino 0 do PORT B como LED 
 
TRISB.0 = 0 'Declara o pino o do PORT B como saída 
 
AQUI: 'Rótulo da rotina 
 High LED 'Coloca o LED em nível lógico Alto 
 DelayMS 1000 'Atrasa a execução do programa em 1000ms 
 
 Low LED 'Coloca o LED em nível lógico Baixo 
 DelayMS 1000 'Atrasa a execução do programa em 1000ms 
 
 GoTo AQUI 'Manda o programa executar a rotina do rótulo AQUI 
 
End 'Informa o fim do programa 
 
 
ComentandoDevice = 16F877A declara qual o microcontrolador usado. Xtal 4 declara qual o oscilador 
usado. Symbol LED = PORTB.0 nomeia o pino do PORT B como LED facilitando. TRISB.0 = 0 
declara que o pino 0 do PORT B será usado como saída. AQUI: é o rótulo de uma rotina a ser 
executada. High LED coloca 5V no pino 0 do PORT B. DelayMS 1000 atrasa o programa em 1000 
milissegundos ou 1 segundo. Low LED coloca 0V no pino 0 do PORT B. Goto AQUI faz com que 
a rotina do rótulo AQUI seja executada. End informa ao compilador o fim do programa. 
Assim o LED ascenderá, permanecendo assim por 1 segundo e apagará por mais 1 segundo 
até que a rotina seja repetida. 
 
24 
 
 
6.2.2 – Projeto 2: Ligar e Desligar 2 LEDs alternadamente. 
 
Circuito 
 
 
Figura 23: Circuito do Projeto 2. 
 
Programa 
 
Device = 16F877A 'Declara qual o Microcontrolador 
Xtal 4 'Declara o Oscilador 
 
TRISB = %00000000 'Declara o PORT B como saída 
 
PORTB = 0 'Coloca 0V em todos os pinos do PORT B 
 
AQUI: 'Rótulo da rotina 
 High PORTB.0 'Coloca o 5V no pino 0 do PORT B 
 Low PORTB.7 'Coloca o 0V no pino 7 do PORT B 
 DelayMS 500 'Atrasa a execução do programa em 500ms 
 
 Low PORTB.0 'Coloca 0V no pino 0 do PORT B 
 High PORTB.7 'Coloca 5V no pino 7 do PORT B 
 DelayMS 500 'Atrasa a execução do programa em 500ms 
 
 GoTo AQUI 'Manda o programa executar a rotina do rótulo AQUI 
 
End 'Informa o fim do programa 
 
Comentando 
 
A maioria das instruções são bem parecidas com o do projeto 1. Neste projeto 
TRISB=%00000000 declara de forma binaria que todos os pinos do PORT B serão usados como 
saídas. PORTB=0 faz com que todos pinos do PORT B fiquem com 0V. A rotina executada dentro 
do rótulo AQUI: faz com que enquanto o pino 0 tenha 5V o pino 7 tenha 0V e vice-versa, de modo 
que na simulação da figura 23 os led’s ascendam e apaguem alternadamente, ou seja, enquanto um 
ascende o outro apaga e vice-versa. 
 
 
25 
 
 
6.2.3 - Projeto 3: Fazer uma contagem binaria começando com 0, 1 e depois com potencias 
de 2 (2x) até 128. 
 
Circuito 
 
 
Figura 24: Circuito do Projeto 3. 
 
Programa 
 
Device = 16F877A 'Declara qual o Microcontrolador 
Xtal 4 'Declara o Oscilador 
 
TRISB = %00000000 'Declara o PORT B como saída 
 
PORTB = 0 'Coloca 0V em todos os pinos do PORT B 
 
AQUI: 'Rótulo da rotina 
 PORTB = %00000000 'PORT B igual a 0 
 DelayMS 150 'Atrasa a execução do programa em 150ms 
 PORTB = %00000001 'PORT B igual a 1 
 DelayMS 150 'Atrasa a execução do programa em 150ms 
 
 PORTB = %00000010 'PORT B igual a 2 
 DelayMS 150 'Atrasa a execução do programa em 150ms 
 PORTB = %00000100 'PORT B igual a 4 
 DelayMS 150 'Atrasa a execução do programa em 150ms 
 PORTB = %00001000 'PORT B igual a 8 
 DelayMS 150 'Atrasa a execução do programa em 150ms 
 PORTB = %00010000 'PORT B igual a 16 
 DelayMS 150 'Atrasa a execução do programa em 150ms 
 PORTB = %00100000 'PORT B igual a 32 
 DelayMS 150 'Atrasa a execução do programa em 150ms 
 PORTB = %01000000 'PORT B igual a 64 
 DelayMS 150 'Atrasa a execução do programa em 150ms 
 PORTB = %10000000 'PORT B igual a 128 
 DelayMS 150 'Atrasa a execução do programa em 150ms 
 
 GoTo AQUI 'Manda o programa executar a rotina do rótulo AQUI 
End 'Informa o fim do programa 
26 
 
Comentando 
 
O que se tem de diferente nesse programa em relação aos demais é a configuração do nível 
lógico dos pinos do PORT B de forma binária. PORTB = %00000001 é uma forma binaria (o 
símbolo ‘%’ é a representação binária na programação) de indicar quais os pinos estarão com 0V ou 
5V, nível lógico baixo ou alto, assim a configuração citada anteriormente faz com que o pino 0 do 
PORT B fique com 5V e os demais pinos do PORT fiquem com 0V, com representação decimal igual 
a 1. O programa faz uma contagem binaria com as saídas, de modo que comece com 0, depois 1 e em 
seguida faça a contagem da potencias de 2 até 128. Isto fará com que os led’s ascendam de forma 
crescente. 
 
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________ 
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________ 
 
6.2.4 – Projeto 4: Utilizando botões nas entradas para acionar saídas. Utilizando as 
instruções IF – THEN. 
 
Circuito 
 
 
Figura 25: Circuito do Projeto 4. 
 
27 
 
Programa 
 
Device = 16F877A 'Declara qual o Microcontrolador 
Xtal 4 'Declara o Oscilador 
 
Symbol LED1 = PORTB.0 'Nomeia pino 0 do PORT B 
Symbol LED2 = PORTB.1 'Nomeia pino 1 do PORT B 
Symbol BOTAO = PORTD.0 'Nomeia pino 0 do PORT D 
 
TRISB = 0 'Configura o PORT B como saída 
TRISD.0 = 1 'Configura o pino 0 do PORT D como entrada 
 
PORTB=0 'Coloca os pinos do PORT B em nível lógico alto 
 
TEST: 'teste do botão 
 If BOTAO = 0 Then LIGAR1 'Condição 'Se' 1 para o botão 
 If BOTAO = 1 Then LIGAR2 'Condição 'Se' 2 para o botão 
 
LIGAR1: 
 High LED1 'Liga LED1 
 Low LED2 'Desliga LED2 
 DelayMS 50 'Atraso de execução 
 GoTo TEST 'Retorna para teste do botão 
 
LIGAR2: 
 Low LED1 'Desliga LED1 
 High LED2 'Liga LED2 
 DelayMS 50 'Atraso de execução 
 GoTo TEST 'Retonar para teste de botão 
 
 End 
 
Comentando 
 
Nesta programação temos três pontos importantes a se analisar. A primeira coisa que na 
figura 25 se observa é o botão B1 no MCLR que servirá como reset, ou seja, numa lógica positiva 
que enquanto o botão B1 não for pressionado o microcontrolador não tem alimentação (0V) e 
consequentemente não executara nenhuma instrução, mas ao pressioná-lo uma tensão de 5V fará a 
alimentação e colocará o microcontrolador em funcionamento. O segundo ponto importante é o outro 
botão B2 no pino 0 do PORT D (configurado como entrada no TRISD.0=1 enomeado como 
BOTAO) que servirá como uma entrada digital (sensor) que tem a função de ligar e desligar as saídas 
referentes ao LED1 e LED2. A última coisa a se relatar é a utilização da instrução IF – THE dentro 
rótulo TEST:, que tem a função de impor uma condição de análise e de ação dentro do programa 
para assim saber qual a resposta a se dar dependendo do estado lógico do botão B2. 
 
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________ 
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________ 
 
28 
 
6.2.5 - Projeto 5: Contagem de 0 a 9 com display de 7 segmentos. 
 
Os displays que será utilizado nesta parte da programação e simulação será o Display de 
Leds de sete segmentos, dado que os números são compostos através de sete traços cada qual com 
seu respectivo Led que ao combina-los podemos formar números de 0 a 9. 
 
A figura 26, mostra como é a nomenclatura de cada traço do display. Desta forma temos um 
pino para controlar cada um dos segmentos (A à G). Vale ressaltar que se tem diferentes tipos desse 
display, mas utilizaremos um genérico, dado que essa explicação trata de uma simples explicação do 
seu funcionamento para que assim se possa ter a possibilidade de utiliza-lo na programação e 
simulação. 
 
 
Figura 26: Display de 7 segmentos genérico. 
 
Circuito 
 
 
Figura 27: Circuito do Projeto 5. 
 
 
 
 
 
 
 
 
29 
 
 
Programa 
 
Device = 16F877A 'Declara qual o Microcontrolador 
Xtal 4 'Declara o Oscilador 
 
Symbol DISPLAY = PORTB 'Nomeia pino 0 do PORT B 
 
TRISB = 0 'Configura o PORT B como saída 
 
Dim CONT As Byte 'Declara a variável CONT como Byte 
 
PORTB=0 'Coloca os pinos do PORT B em nível lógico alto 
 
INICIO: 
For CONT = 0 To 9 'Faz um laço com a variável CONT indo de 0 a 9 
 
 If CONT=0 Then DISPLAY=%00111111 'coloca 0 no display 
 If CONT=1 Then DISPLAY=%00000110 'coloca 1 no display 
 If CONT=2 Then DISPLAY=%01011011 'coloca 2 no display 
 If CONT=3 Then DISPLAY=%01001111 'coloca 3 no display 
 If CONT=4 Then DISPLAY=%01100110 'coloca 4 no display 
 If CONT=5 Then DISPLAY=%01101101 'coloca 5 no display 
 If CONT=6 Then DISPLAY=%01111101 'coloca 6 no display 
 If CONT=7 Then DISPLAY=%00000111 'coloca 7 no display 
 If CONT=8 Then DISPLAY=%01111111 'coloca 8 no display 
 If CONT=9 Then DISPLAY=%01100111 'coloca 9 no display 
 DelayMS 150 
 
If CONT=9 Then INICIO 'Volta ao início da contagem indo de 0 a 9 
 
Next 'continua o laço de contagem até a variável alcançar o valor final 
 
End 
 
Comentando 
 
Para essa aplicação temos uma instrução nova que a FOR – NEXT que se trata de um laço 
onde a variável tem uma contagem de início e um fim, sendo que a cada contagem a rotina dentro 
desse laço é executada até que o laço chegue à sua contagem final. A contagem no display é feita 
colocando 0V ou 5V nos pinos referentes a cada segmento a que se quer acionar para representar o 
número escolhido, onde tal procedimento é feito pela indicação do nível lógico de cada pino do PORT 
B nomeado como DISPLAY, de forma binaria, como por exemplo em DISPLAY=%00111111 
indicando os pinos 0 a 6 como 5V e 7 a 8 como 0V, mostrando 0 no display. 
 
 
________________________________________________________________________________ 
________________________________________________________________________________ 
________________________________________________________________________________ 
________________________________________________________________________________ 
________________________________________________________________________________ 
________________________________________________________________________________ 
________________________________________________________________________________ 
________________________________________________________________________________ 
________________________________________________________________________________ 
________________________________________________________________________________ 
________________________________________________________________________________ 
30 
 
6.2.6 - Projeto 6: Utilizando o Display de Cristal Líquido (LCD). 
 
Os LCD’s são muito mais poderosos que os displays de 7 segmentos, dado que possuem 
muito mais caracteres e são alfanuméricos. Porém são mais caros e com uma visualização inferior, 
pois os caracteres não possuem iluminação própria e são de tamanho bem reduzido. 
 
Os módulos LCD são ideais para aplicações alfanuméricas ou com gráficos. Os 
alfanuméricos têm disponibilidade de grande variedade de configurações, como: uma linha, duas 
linhas e quatro linhas sendo as mais comuns. A quantidade de colunas tem são variáveis, sendo 
comumente encontrada com 16, 20 e 40 colunas por linha. 
 
Como podemos ver existem muitos displays de cristal líquido (LCD) no mercado, mas 
utilizaremos o modelo padrão em aplicações, o de duas linhas e 16 caracteres cada uma. Uma 
característica importante desse display é que ele possui um drive de controle interno. Assim a 
comunicação será feita com ele através de uma comunicação paralela, passando comando e os 
caracteres que desejamos escrever, diretamente em código ASCII. 
 
 
Figura 28: Display LCD com 2 linhas e 16 colunas cada uma, total de 32 caracteres. 
 
Pinagem 
 
Os pinos 1 e 2 (VSS e VDD) do LCD corresponde a alimentação GND e Vdc 
respectivamente, onde a tensão máxima suportada é de 5 Vdc. Já o pino 3 VEE corresponde ao 
controle de contraste, assim um potenciômetro é conectado a ele para ter esse controle. 
 
O pino 4 ‘RS’ (Register Select) é utilizado para definir o tipo de informação passada através 
da comunicação paralela. Quando o RS é 0 a informação enviada é um comando ou instrução. Se RS 
for 1 A informação enviada é um registro de dados ou caractere alfanumérico. 
 
O pino 5 ‘R/W’ (Read/Write), é um pino utilizado para ler dados a partir da tela do LCD ou 
escrever uma entrada no LCD. Se R/W=0 o LCD está habilitado para se poder escrever dados na tela. 
Se R/W=1 o LCD habilita a leitura de seus dados. Em muitos casos esse pino não é utilizado, ficando 
permanentemente ligado ao Vss, assim o LCD opera somente em modo de escrita. Por isso é preciso 
garantir o térmico das operações internas do módulo de LCD através de tempos pré-estabelecidos. 
 
O pino 6 ‘E’ (Enable), é um pino de habilitação, ou seja, se E=0 o LCD é desativado para 
receber dados, mas se E=1 então o LCD é capaz de trabalhar de modo a podermos escrever ou ler 
dados no mesmo. 
 
Os pinos 7 a 14 (D0 a D7) equivalem ao barramento de dados paralelo. Apesar da existência 
de 8 vias de dados, esses displays podem operar com 4 vias (D4 a D7) já que as demais vias ficam 
semfunções, assim as informações são enviadas em dois pacotes de 4 bits cada um. 
 
31 
 
Ao se trabalhar com 8 bits, estes deverão ser conectados em um só PORT e nunca em PORTs 
diferentes do microcontrolador. Ao se trabalhar com somente 4 bits mais significativos do LCD, estes 
devem ser conectados aos quatro bits menos significativos ou aos quatro bits mais significativos do 
PORT escolhido. 
 
Os pinos E (pino 6) e RS (pino 4) podem ser conectados em qualquer PORT do 
microcontrolador. O pino R/W deve estar conectado à terra (GND) para indicar ao LCD que se está 
trabalhando com escrita de dados. 
 
No Proton IDE é necessário fazer algumas declarações para o uso de displays alfanuméricos 
para o uso do comando PRINT. 
 
1 – DECLARE LCD TYPE 1 ou 0 - Informa ao compilador o tipo de display a ser utilizado 
pelo comando PRINT, se (Gráfico ou Alfanumérico) 
2 – DECLARE LCD_DTPIN PORT.PIN – identifica o PORT e os pinos que as vias de 
dados do LCD está ligada. Por exemplo: Se utilizado uma via de dados de 8 bits o comando seria 
“DECLARE LCD_DTPIN PORTB.0” ou Se utilizado uma via de 4 bits seria “DECLARE LCD_DTPIN PORTB.4”. 
3 – DECLARE LCD_ENPIN PORT.PIN – Identifica o PORT e o pino que a via de 
habilitação (enable) LCD está ligada. 
4 – DECLARE LCD_RSPIN PORT.PIN – Identifica o PORT e o pino que a via RS do 
LCD está ligada. 
5 – DECLARE LCD_INTERFACE 4 ou 8 – Informa ao compilador o tamanho da via de 
dados do LCD utilizada. 
6 – DECLARE LCD_LINES 1, 2 ou 4 – Informa ao compilador o número de linhas do 
LCD utilizada. 
 
Circuito 
 
 
Figura 29: Circuito do Projeto 6. 
 
 
 
32 
 
Programa 1 
 
Device = 16F877A 
Xtal 4 
 
Declare LCD_Type 0 'Informa que o LCD é Alfanumerico 
Declare LCD_DTPin PORTB.4 'Informa os pinos de Dados 
Declare LCD_ENPin PORTB.3 'Informa o pino do Enable 
Declare LCD_RSPin PORTB.2 'Informa o pino RS 
Declare LCD_Interface 4 'Informa a quantidade de bits em um pacote de dados 
Declare LCD_Lines 2 ' Informa o numero de linhas do LCD 
 
 
Print At 1, 1, "MECATRONICA" 'Imprime no LCD 
 
Comentando 
 
Neste programa é feito os declares para o LCD funcionar com a instrução Print e depois está 
função imprime no LCD a mensagem ‘MECATRONICA’, o Modificador At faz com que o primeiro 
caractere do texto inicie na primeira linha e primeira coluna do LCD. 
 
Programa 2 
 
Device = 16F877A 
Xtal 4 
 
Dim INDICE As Byte 'declara a variável 
Dim CHAR As Byte 'declara a variável 
 
EWrite 0, [" IFCE LIMOEIRO "] 'coloca na memoria das pos. 0 a 16 
EWrite 17, [" MECATRONICA "] 'coloca na memoria das pos. 17 a 32 
 
Declare LCD_Type 0 'Informa que o LCD é Alfanumerico 
Declare LCD_DTPin PORTB.4 'Informa os pinos de Dados 
Declare LCD_ENPin PORTB.3 'Informa o pino do Enable 
Declare LCD_RSPin PORTB.2 'Informa o pino RS 
Declare LCD_Interface 4 'Informa a quantidade de bits em um pacote de dados 
Declare LCD_Lines 2 ' Informa o numero de linhas do LCD 
 
INICIO: 
 Cls 'Limpa o LCD 
 For INDICE = 0 To 15 
 CHAR = ERead INDICE 'Ler a memoria na posição INDICE e coloca em CHAR 
 DelayMS 100 
 Print $FE, 14, $FE, $0C, CHAR 'Move uma pos. a direita, desliga cursor 
 Next 'e imprime o caractere de CHAR 
 
 DelayMS 300 
 
 Print $FE, 2 'Retorna inicio primeira linha 
 For INDICE = 0 To 15 
 CHAR = ERead INDICE 'Ler a memoria na posição INDICE e coloca em CHAR 
 DelayMS 100 
 Print $FE, $1C, CHAR 'Move os caracteres p/ direita 
 Next 
 DelayMS 300 
 
 
 
 
33 
 
 
 For INDICE = 15 To 0 Step -1 
 CHAR = ERead INDICE 
 DelayMS 100 
 Print $FE, $18, CHAR 'Move os caracteres p/ esquerda 
 Next 
 DelayMS 300 
 
 Print $FE, $C0 'desliga o cursor 
 For INDICE = 17 To 32 
 CHAR = ERead INDICE 
 DelayMS 100 
 Print $FE, 14, $FE, $0C, CHAR 'Move uma pos. direita, desl. cursor 
 Next 'e imprime CHAR 
 DelayMS 300 
 
 GoTo INICIO 
 
 
 
Comentando 
 
Neste programa foi usado a escrita e leitura de memória onde cada caractere dos textos 
equivale colocados nela equivale a uma posição. Na impressão dos caracteres no LCD, as letras foram 
colocadas uma de cada vez para a primeira linha, movidas da esquerda para direita e em seguida da 
direita para a esquerda. Depois o segundo texto foi impresso no LCD também uma letra por vez. 
 
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________ 
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________ 
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________ 
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________ 
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________ 
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________ 
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________ 
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________ 
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________ 
 
34 
 
 
6.2.7 - Projeto 7: Utilizando conversor Analógico/Digital (A/D). 
 
O conceito de sinais analógicos e digitais foram descritos anteriormente, dado a 
característica do PIC só processar sinais digitais e muitas vezes termos que trabalhar com variáveis 
analógicas agora temos que utilizar o conversor A/D, eles são necessários para o processamento de 
sinais como de temperatura, corrente e tensão elétrica, posicionamento ou sinal de um sensor. Por 
tudo isso é que se faz importante saber suas características e seu funcionamento. 
 
Para melhor entendimento da teoria da conversão dos sinais analógicos em dados digitais, 
um exemplo prático com o sensor de temperatura ira nos ajudar. Sensores de temperatura fornecem 
informações analógicas (tensão) proporcional a temperatura, assim, para que se possa ser analisado 
pelo microcontrolador, se faz necessárioum conversor A/D. 
 
O PIC 16F877A possui um conversor A/D de 10 bits com 8 entradas independentes. É do 
tipo aproximações sucessivas. 
 
O menor passo, ou resolução, é o menor valor da grandeza analógica medica que causará 
mudança de leitura do estado digital pelo conversor à medida que o valor anterior é lido pelo A/D. É 
dado diretamente pelo seu número de bits e pode ser expresso por: 
 
𝑟𝑒𝑠𝑜𝑙𝑢çã𝑜 = 
𝑉𝑅𝐸𝐹
2𝑛
 
 
Em que VREF é uma tensão de referência e n é o número de bits do conversor. 
 
Cada um dos n bits que compõem a informação digital representa uma parcela da tensão 
analógica a ser convertida, de forma que a soma de todas as contribuições de cada um dos n bits forma 
a tensão de entrada do conversor A/D. Assim a parcela de tensão proporcional ao bit m do conversor 
A/D é dada por: 
 
𝑉𝑒𝑛𝑡𝑟𝑎𝑑𝑎 = 
𝑏𝑚2
(𝑚−1)
2𝑛
 𝑉𝑟𝑒𝑓 
 
Em que: bm é o valor do bit m, ou seja, 0 ou 1. 
 
Vamos supor que o A/D para o exemplo da temperatura e que seja de 4 bits, a tensão de 
referencia seja de 5V e o valor da conversão em binário seja 1101. A tensão de entrada, é: 
 
𝑉𝑒𝑛𝑡𝑟𝑎𝑑𝑎 = 
(1𝑥23 + 1𝑥22 + 0𝑥21 + 1𝑥20)
24
 (5) = 4,0625𝑉 
 
Este valor de tensão é equivalente a uma dada temperatura, e por isso o valor convertido 
(1101) equivale a mesma temperatura. Assim, temos que duas conversões devem ser feitas, uma para 
o sinal analógico em digital e a outra de digital para a unidade desejada que representa a grandeza a 
ser medida como por exemplo °C. 
35 
 
 
Figura 30: Relação entre sinal analógico, digital e grandeza medida. 
 
Existem muitas maneiras de implementar um A/D. O estudo aqui será do sistema de 
conversão chamado de aproximação sucessiva. 
 
Nesse tipo de conversor, a conversão é realizada do bit mais significativo (Msb) para o 
menos significativo (Lsb). Dado que o Msb por se só representa metade da tensão de referência, 
conhecer o estado deste bit (0 ou 1) significa saber se a tensão de entrada é maior ou menor que a 
metade da referência. Conhecido o Msb, representa metade da metade (1/4) da tensão de referência. 
Assim até o Lsb. 
 
Supondo um A/D de 4 bits e Vref de 5V: 
 
Tabela 4: Valor de cada bit para o exemplo. 
Bit Tensão 
4 (Msb) 2,5000 V 
3 1,2500 V 
2 0,6250 V 
1 (Lsb) 0,3250 V 
 
Supondo uma tensão de entrada de 3,3V. a conversão então seria: 
 
1 – Testa-se o bit mais significativo, ou seja, a tensão de entrada é maior do que 2,5? Sim, 
então este bit vale 1. 
2 – Testa-se o próximo bit, ou seja a tensão de entrada é maior do que 3,75V (2,5V+1,25V)? 
Não, então o bit é 0. 
3 – Testa o próximo bit, a tensão de entrada é maior do que 3,125V (2,5V+0,625V)? Sim, 
então o bit é 1. 
4 – Por fim o bit menos significativo, a tensão de entrada é maior do que 3,4375V 
(2,5V+0,625V+0,3125V)? Não, então o bit é 0. 
Desse modo o valor final da conversão de 3,3V de entrada em binário é 1010. 
 
É uma forma de conversão rápida e para um conversor de n bits são necessárias interações, 
“que independem do valor a ser convertido”. 
 
 
 
 
36 
 
Quatro registradores controlam a operação do conversor: 
 ADRESH – byte mais significativo da conversão; 
 ADRESL – byte menos significativo da conversão; 
 ADCON0 – registrador de controle 0; 
 ADCON1 – registrador de controle 1. 
 
O conversor gera um resultado binário de 10 bits e armazena o resultado nos registros 
ADRESL e ADRESH. 
 
Apesar do microcontrolador possuir diversos canais analógicos, internamente só existe um 
sistema de conversão. Por isso, somente um canal pode ser utilizado de cada vez. Para começar a 
utiliza-lo temos que aprender a configurar os canais de maneira correta. 
 
Inicialmente se deve definir, conforme as necessidades do projeto, qual a quantidade de 
canais analógicos que serão necessários. Em um microcontrolador que possui vários canais, se pode 
utilizar todos ou parte deles, deixando os outros pinos configurados como I/O digitais. É impossível 
configurar individualmente cada canal. Existem valores padrões de configuração que devem ser 
respeitados. 
 
Primeiro passo é configurar os canais de entrada que serão utilizados para introduzir o sinal 
analógico do conversor A/D e os canais para tensões de referência. Isto se faz selecionando a 
combinação correspondente aos bits PCFG3, PCFG2, PCFG1 e PCFG0 do registro de controle 
ADCON1. 
 
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 
ADFM --- --- --- PCFG3 PCFG2 PCFG1 PCFG0 
Figura 31: Dados de configuração do registrador ADCON1. 
 
Para esta configuração se deve analisar a tabela 5, que defini quais pinos do PORT A ou E 
serão entradas do conversor A/D. 
 
Tabela 5: Pinos de entrada analógicas e tensão de referência. 
PCFG3: 
 
PCFG0 
AN7 
 
RE2 
AN6 
 
RE1 
AN5 
 
RE0 
AN4 
 
RA5 
AN3 
 
RA3 
AN2 
 
RA2 
AN1 
 
RA1 
AN0 
 
RA0 
 
VREF+ 
 
VREF- 
0000 A A A A A A A A VDD VSS 
0001 A A A A VREF+ A A A RA3 VSS 
0010 D D D A A A A A VDD VSS 
0011 D D D A VREF+ A A A RA3 VSS 
0100 D D D D A D A A VDD VSS 
0101 D D D D VREF+ D A A RA3 VSS 
0110 D D D D D D D D VDD VSS 
0111 D D D D D D D D VDD VSS 
1000 A A A A VREF+ VREF- A A RA3 RA2 
1001 D D A A A A A A VDD VSS 
1010 D D A A VREF+ A A A RA3 VSS 
1011 D D A A VREF+ VREF- A A RA3 RA2 
1100 D D D A VREF+ VREF- A A RA3 RA2 
1101 D D D D VREF+ VREF- A A RA3 RA2 
1110 D D D D D D D A VDD VSS 
1111 D D D D VREF+ VREF- D A RA3 RA2 
37 
 
Além da configuração dos pinos analógicos, conforme a tabela apresentada, não se pode 
esquecer de configurar os registradores TRISA e TRISE, de forma que os canais utilizados estejam 
ajustados para entrada (TRIS = 1). Estando o canal analógico como saída, o sistema de conversão 
continuará funcionando, mas os valores convertidos serão equivalentes aos níveis alto (1 = VDD) e 
baixo (0=VSS). 
 
Outra questão importante de se observar é o fato da utilização das tensões de referência. A 
conversão é feita ao se comparar a tensão do pino de entrada analógica em relação as tensões de 
referencia VREF + e VREF -. Assim, quando a tensão de entrada for igual a tensão VREF +, a conversão 
tem como resultado o valor máximo (1024) e sendo a tensão de entrada igual a VREF – o resultado 
será zero (0). Pode-se ter quatro tipos de referências, sendo duas internas (VDD e VSS), e duas externas, 
ligadas aos pinos RA2 (VREF -) e RA3 (VREF +). Ao exemplificarmos com a aplicação de uma tensão 
variando de 0V a 5V na entrada analógica e utilizando referencias internas onde VREF + = VDD(5V) e 
VREF - = VSS(0V) e em outra aplicação um sensor varia de 1V a 4V. Para que não se perca a resolução 
do A/D, então trabalha-se com tensões de referências externas com VREF +(RA3) = 4V e VREF – (RA2) 
= 1V. É importante respeitar os limites elétricos impostos a essas referências: 
 
Tabela 6: Limites elétricos. 
Referência Mínimo (V) Máximo (V) 
VREF + VDD – 2,5 VDD + 0,3 
VREF - VSS – 0,3 VREF + - 2,0 
(VREF + = VREF -) 2,0 VDD + 0,3 
 
 
O próximo fato a ser aprendido é a importância da velocidade e consequentemente aos 
tempos de amostragem que devem ser respeitados para uma correta utilização do conversor A/D. 
Inicia-se entendo o funcionamento interno do sistema de conversão. 
 
Para se evitar problemas de ruído e varações da entrada analógica durante o processo de 
inversão (vale lembrar que nada é absolutamente instantâneo), Internamento o PIC utiliza uma 
estrutura chamada Sample and Hold (S/H), com tradução ‘amostragem e retenção’. O PIC possui 
internamente, um capacitor (120pF) ligado ao canal analógico em uso. Assim, ele fica carregado

Outros materiais