Você está na página 1de 236

Microcontroladores,

volume 1

Rhafael Pansani Godinho

Moacir Mendes da Costa Júnior


© 2013 by Universidade de Uberaba

Todos os direitos reservados. Nenhuma parte desta publicação poderá ser


reproduzida ou transmitida de qualquer modo ou por qualquer outro meio,
eletrônico ou mecânico, incluindo fotocópia, gravação ou qualquer outro tipo de
sistema de armazenamento e transmissão de informação, sem prévia autorização,
por escrito, da Universidade de Uberaba.

Universidade de Uberaba

Reitor:
Marcelo Palmério

Pró-Reitora de Ensino Superior:


Inara Barbosa Pena Elias

Pró-Reitor de Logística para Educação a Distância:


Fernando César Marra e Silva

Assessoria Técnica:
Ymiracy N. Sousa Polak

Produção de Material Didático:


• Comissão Central de Produção
• Subcomissão de Produção

Editoração:
Supervisão de Editoração
Equipe de Diagramação e Arte

Capa:
Toninho Cartoon

Edição:
Universidade de Uberaba
Av. Nenê Sabino, 1801 – Bairro Universitário

Catalogação elaborada pelo Setor de Referência da Biblioteca Central UNIUBE

Godinho, Rhafael Pansani.


G545m Microcontroladores, volume 1 / Rhafael Pansani Godinho, Moacir
Mendes da Costa Júnior. – Uberaba: Universidade de Uberaba, c2013.
236 p.: il.

ISBN 978-85-7777-499-9

1. Linguagem de programação (Computadores). 2. Compiladores


(Computadores). 3. Programação (Computadores). 4. Redes de
computadores – Protocolos. 5. Microcontroladores. I. Costa Júnior, Moacir
Mendes da. II. Universidade de Uberaba. III. Título.

CDD: 005.133
Sobre os autores
Rhafael Pansani Godinho

Formado em Engenharia de Computação, com ênfase em Automação


Industrial. Trabalha como desenvolvedor de sistemas microcontrolados
aplicados à indústria e engenheiro de computação (Automação industrial)
na empresa CAS Tecnologia Ltda.

Moacir Mendes da Costa Júnior

Formado em Engenharia de Computação, com ênfase em Automação


Industrial. Como projeto final de graduação construiu um sistema de
acendimento automatizado para fogões industriais, com a implementação
de uma rede CAN utilizando o PIC18F458, a utilização de comunicação
remota GSM/GPRS, a programação com RTOS e a gravação dos
microcontroladores pelo método de Bootloader.
Sumário
Apresentação................................................................................................................. X

Capítulo 1 Microcomputadores e microprocessadores – conhecendo


o SAP 1................................................................................. 1
1.1 Microcomputadores...................................................................................................3
1.2 Sistemas computacionais .........................................................................................7
1.2.1 Visão geral.......................................................................................................7
1.2.2 Blocos e conceitos básicos..............................................................................8
1.2.3 Números binários...........................................................................................11
1.3 SAP 1.......................................................................................................................13
1.3.1 Arquitetura......................................................................................................13
1.3.2 Descrição dos blocos.....................................................................................15
1.3.3 Conjunto de instruções..................................................................................20
1.3.4 Instruções de referência à memória..............................................................22
1.3.5 Mnemônicos...................................................................................................22
1.3.6 Programação..................................................................................................23
1.3.7 Ciclo de busca (Fetch)...................................................................................29
1.3.8 Ciclo de execução..........................................................................................31
1.3.9 Ciclo de máquina e ciclo de instrução...........................................................37
1.3.10 Microprocessadores ....................................................................................38
1.3.11 Descrição funcional......................................................................................39
1.3.12 Arquitetura de uma CPU..............................................................................42

Capítulo 2 Microcontrolador PIC .......................................................... 47


2.1 Microcontrolador PIC...............................................................................................49
2.1.1 História...........................................................................................................49
2.1.2 Arquitetura......................................................................................................51
2.1.3 Características gerais....................................................................................53
2.1.4 Estrutura física...............................................................................................55
2.1.5 Modelos..........................................................................................................58
2.2 Funcionalidades.......................................................................................................60
2.2.1 Timers e interrupções....................................................................................60
2.2.2 Conversores analógicos/digitais e comparadores analógicos......................61
2.2.3 USARTs..........................................................................................................61
2.2.4 Outras formas de comunicação.....................................................................62
2.2.5 Módulos CCP (Capture Compare Pulse) e PWM (Pulse-Width
Modulation).....................................................................................................63
2.2.6 Entrada/saída digital......................................................................................64
2.2.7 Sistema de proteção......................................................................................64
2.2.8 WatchDog.......................................................................................................65
2.3 Desbravando o microcontrolador PIC16F628A.......................................................67
2.3.1 Diagrama de pinagem....................................................................................68
2.3.2 Descrição funcional dos pinos.......................................................................69
2.4 Conhecendo o PIC16F877A....................................................................................70

Capítulo 3 Memória no microcontrolador PIC ..................................... 77


3.1 Memória computacional...........................................................................................78
3.1.1 Tipos de memória...........................................................................................81
3.2 Armazenamento dos dados na memória................................................................84
3.2.1 Modos de endereçamento.............................................................................86
3.3 Organização da memória no PIC............................................................................88
3.3.1 Arquitetura......................................................................................................88
3.3.2 Memória de dados.........................................................................................90
3.3.3 Memória de programa....................................................................................93
3.4 Registradores...........................................................................................................98
3.4.1 Registradores de uso geral............................................................................99
3.4.2 Registradores de funções especiais..............................................................99

Capítulo 4 Portas de I/O, clock, reset, interrupções, temporizadores


e contadores...................................................................... 127
4.1 Alimentação no microcontrolador PIC...................................................................129
4.2 Reset no microcontrolador PIC.............................................................................130
4.2.1 Configurando os contadores da função de acionamento ...........................132
4.3 Osciladores............................................................................................................134
4.3.1 O que é clock...............................................................................................135
4.3.2 Tipos de osciladores....................................................................................137
4.3.3 Configurações..............................................................................................141
4.4 Timers - temporizadores........................................................................................146
4.4.1 Tipos de timers.............................................................................................147
4.4.2 Configurações..............................................................................................149
4.5 Interrupções...........................................................................................................151
4.5.1 Tipos de interrupções...................................................................................152
4.5.2 Configurando as interrupções......................................................................154
4.6 Contadores............................................................................................................158
4.6.1 Configurando os contadores........................................................................160
4.7 Descerrando as portas de I/O do PIC16F877A.....................................................162
4.7.1 Instruções.....................................................................................................168
UNIUBE VII

Capítulo 5 Comunicação serial no microcontrolador PIC.................. 177


5.1 Comunicação serial em microcontroladores.........................................................179
5.2 Taxa de transmissão..............................................................................................180
5.3 Cabeamento..........................................................................................................181
5.4 Vias de comunicação.............................................................................................181
5.5 Modo de comunicação...........................................................................................181
5.6 Número de dispositivos conectados e o conceito mestre e escravo....................183
5.7 Métodos de transmissão........................................................................................184
5.7.1 Transmissão assíncrona..............................................................................185
5.7.2 Transmissão síncrona..................................................................................185
5.8 Protocolos de comunicação..................................................................................186
5.8.1 Protocolo RS-232.........................................................................................187
5.8.2 Protocolo I²C................................................................................................195
5.8.3 Protocolo SPI...............................................................................................198
5.8.4 Protocolo CAN.............................................................................................201
5.9 Construindo uma interface serial entre o PIC e o computador.............................204
5.9.1 Componentes de hardware..........................................................................205
5.9.2 Configurando o software..............................................................................211
Apresentação
Caro(a) aluno(a)

Você está recebendo mais um livro do curso de Engenharia Elétrica,


na modalidade de educação a distância. O livro é composto por cinco
capítulos discriminados, a seguir.

Capítulo 1: Microcomputadores e microprocessadores – conhecendo o


SAP 1.
Capítulo 2: Microcontrolador PIC.
Capítulo 3: Memória no microcontrolador PIC.
Capítulo 4: Portas de I/O, clock, reset, interrupções, temporizadores e
contadores.
Capítulo 5: Comunicação serial no microcontrolador PIC.

No primeiro capítulo, abordaremos alguns aspectos históricos que


remontam aos primórdios da computação eletrônica. Assim, estudare-
mos como surgiram os primeiros microcomputadores, quais eram as suas
funções e o que os levaram a ser uma máquina quase indispensável na
vida das pessoas nos dias de hoje.

O capítulo dois o levará a analisar qual o melhor modelo a ser utilizado


e quais as funções disponíveis nos PICs convencionais. Veremos que
são várias as opções de microcontroladores PIC disponíveis, sendo, em
sua maioria, voltados para aplicações diversas.

O terceiro capítulo trata dos estudos da memória no microcontrolador PIC,


muitas de nossas dúvidas serão esclarecidas, como por exemplo, como
os dados são armazenados em meios físicos. É isso que desbravaremos
no capítulo atual.
X UNIUBE

No capítulo quatro, veremos que, para utilizar alguma propriedade


do microcontrolador PIC, é necessário configurarmos uma série de
parâmetros que serve para orientá-lo na realização de uma função.

E, no quinto e último capítulo, vamos analisar a utilização desse método


de comunicação em microcontroladores PIC.

Esperamos que os conteúdos desenvolvidos possa contribuir de forma


representativa para a sua formação profissional.

Bons estudos!
Capítulo
Microcomputadores e
microprocessadores –
1
conhecendo o SAP 1

Rhafael Pansani Godinho

Introdução
Os conceitos que abordaremos, neste capítulo, remontam aos
primórdios da computação eletrônica. Assim, estudaremos como
surgiram os primeiros microcomputadores, quais eram as suas
funções e o que os levaram a ser uma máquina quase indispen-
sável na vida das pessoas nos dias de hoje.

A computação passou a fazer parte dos utensílios das pessoas a


partir dos primeiros microcomputadores que possuíam ferramentas
úteis, como calculadoras, registros de dados, jogos e outros.

Veremos que a velocidade do avanço tecnológico tomou propor-


ções maiores na medida em que surgia a concorrência entre
empresas que queriam cada vez mais desenvolver produtos
melhores para vencer seus concorrentes.

Neste capítulo, estudaremos sucintamente a evolução dos


microcomputadores, quais as suas características internas, como
são construídos, como são processados os dados e, principal-
mente, as características do SAP 1 (Computador simples quanto
possível).

No SAP 1, veremos a arquitetura utilizada, como os computadores


são construídos fisicamente, assim como as definições de processos
que acontecem internamente dentro de um computador.
2 UNIUBE

Considerando a importância atual dos equipamentos eletrônicos


“inteligentes”, é preciso que saibamos um pouco de sua
origem: os microprocessadores. Nesse sentido, estudaremos
as características gerais dos microprocessadores, como eles
trabalham e veremos resumidamente a evolução sofrida por esse
componente indispensável dentre as tecnologias atuais.

Este início de estudo é importante para visualizarmos onde tudo


começou, entendendo de maneira resumida como tudo funciona
dentro de um computador qualquer que seja o sistema computa-
cional.

Objetivos
Ao término dos estudos propostos neste capítulo, você estará apto a:

• definir sistemas computacionais;


• explicar como são feitos os sistemas computacionais;
• diferenciar microcomputadores e microprocessadores;
• definir a arquitetura do SAP 1;
• explicar o sistema interno do SAP 1;
• identificar as partes constitutivas da arquitetura de uma CPU.

Esquema
1.1 Microcomputadores
1.2 Sistemas computacionais
1.2.1 Visão geral
1.2.2 Blocos e conceitos básicos
1.2.3 Números binários
1.3 SAP 1
1.3.1 Arquitetura do SAP 1
1.3.2 Descrição dos blocos
1.3.3 Conjunto de instruções
UNIUBE 3

1.3.4 Instruções de referência à memória


1.3.5 Mnemônicos
1.3.6 Programação
1.3.7 Ciclo de busca (Fetch)
1.3.8 Ciclo de execução
1.3.9 Ciclo de máquina e ciclo de instrução
1.3.10 Microprocessadores
1.3.11 Descrição funcional
1.3.12 Arquitetura de uma CPU

1.1 Microcomputadores

Antes de estudarmos os microcomputadores, é importante salientarmos


que essa denominação refere-se aos computadores de pequeno porte,
que permitem ser instalados e movidos para ambientes pessoais
(escritório, residência).

O termo computador é derivado da palavra computação, que representa


tudo que envolve análise de dados. A computação existe muito antes
dos computadores; esse termo se refere à busca de soluções para
problemas.

Inicialmente, os computadores eram projetados e utilizados apenas


para solução de cálculos, sem nenhum monitor para visualização de
resultados. Suas aplicações destinavam aos serviços militares.

Com o passar dos anos, com aprimoramentos e evoluções nas suas


utilidades, os componentes eletrônicos tornaram-se melhores e cada
vez menores, o que possibilitou o surgimento de uma nova linha de
computadores.

Com o lançamento do primeiro microprocessador (Intel 4004), foi possível


o desenvolvimento dos pequenos computadores (pessoais), ditos kits
computacionais.
4 UNIUBE

Depois do surgimento do primeiro computador, não eram muitos os


que acreditavam que essa seria uma ferramenta utilizada por pessoas
comuns, devido ao alto custo e à baixíssima utilidade (eram utilizados
para diversão).

Em 1975, surgiu o projeto Altair 8800, desenvolvido pela MITS, uma


humilde companhia de componentes eletrônicos do Novo México. Esse
microcomputador foi o primeiro que atingiu grande escala de vendas pelo
seu baixo custo, e dentre os adeptos estava Paul Allen. Paul Allen, após
trabalhar na MITS, juntou-se a seu amigo Bill Gates, e juntos deram início
à maior e mais famosa companhia de softwares (parte lógica que controla
os recursos físicos) e equipamentos eletrônicos, a Microsoft.

O sucesso dos microcomputadores abre uma disputa entre várias


empresas que começam a competir quem produziria o melhor
microcomputador. A disputa foi o fator mais importante que levou ao
avanço tão rápido desse segmento. Em 1977, a Apple entra na briga
e lança, em 1978, o microcomputador com recursos que podiam ser
utilizados para ajudar nos negócios. A partir desse ponto, é assustador o
grau de evolução das tecnologias na área computacional. A briga entre
Microsoft e Apple cresceu a cada dia ao ponto de surgirem boatos que
essas empresas tinham o intuito maior de vencer uma à outra, do que
propriamente ter sucesso com suas ferramentas.

Os microcomputadores eram tidos como brinquedos desnecessários


no início de seu surgimento, mas pouco tempo depois eram tidos como
dispositivos de aprimoramento pessoal e com inúmeras aplicações
comerciais.

Não podemos deixar de mencionar a IBM, uma empresa consolidada,


que possuía sua própria linha de produtos voltados a grandes grupos
(empresas). Um fato curioso é que estavam para lançar no mercado um
microcomputador com recursos superiores aos de seus concorrentes
e eram tão rápidos os avanços tecnológicos, que tiveram que utilizar
UNIUBE 5

microprocessadores com tecnologia (8088 - 8 bits) inferior à já existente


(8086 – 16 bits). O motivo para esse fato curioso é que os novos
microprocessadores eram potentes demais para o restante da linha de
periféricos (dispositivos que podiam ser adaptados aos computadores
para melhorarem seu rendimento).

Assim como hoje, não bastava ter um hardware (dispositivos físicos do


computador) potente se não existisse um software que o controlasse
de forma correta. Tal fato fez com que as empresas que produziam os
microcomputadores, como a IBM, procurassem desenvolvedores dos
sistemas controladores, conhecidos como sistemas operacionais.

A IBM começou a procurar uma empresa que desenvolvesse um


sistema para seu microcomputador e foram parar na garagem de Paul
Allen e Bill Gates (Microsoft). Surgiu o sistema operacional para os
microcomputadores da IBM, o PC-DOS. Após muito tempo de trabalhos
para interagir hardware e software, em agosto de 1981, surgiu o IBM,
Personal Computer com microprocessador 8088, 64Kb de memória RAM
e unidade de disco flexível de 160 Kb.

Agora que acabamos de ver a história resumida do surgimento dos


primeiros microcomputadores, vamos estudar detalhadamente como
são construídos, como é feito o processamento dos dados, entender por
que tudo na computação é 0 e 1 (números binários).

SAIBA MAIS

Computador é uma máquina capaz de executar jogos, programas, desenhar


imagens etc. Por essa ampla utilidade, é conhecido também como
processador de dados.

Antes de tratarmos de assuntos mais aprofundados, vejamos, no Quadro


1, as definições de alguns termos que utilizaremos durante nosso estudo:
6 UNIUBE

Quadro1: Conceitos básicos

Conceito Definição
Números, nomes, qualquer informação utilizada na execução de
Dados
um problema.
É uma lista de instruções, necessária para ordenar o tratamento
Programa
dos dados pelo microcomputador.
Hardware Toda parte física contida em um microcomputador.
Software Toda parte lógica (abstrata) do microcomputador.
Computador Máquina executante de funções e tarefas.
Microcomputador Computador de pequeno porte.
Unidade Central de Processamento. União
UCP
da unidade de controle com a ULA.
Unidade Lógica e Aritmética. Responsável
ULA
pela execução das instruções.
Kernel Componente gerenciador e integrador de hardware e software.
Unidade de
Interpreta, busca e controla a execução das instruções.
controle
Comandos em linguagem de máquina que são interpretados pela
UCP. Exemplo de instruções:
Instruções
+ (soma), – (subtração), and (“e” – lógica), or (“ou” – lógica),
mover, copiar etc;

Todo computador (pequeno ou grande) possui um ciclo de instrução.


Esse ciclo é responsável por sequenciar a execução das instruções que
acontecem na UCP, como visto na Figura 1, a seguir:

Figura 1: Ciclo de instrução.


Fonte. Adaptado de Mano (2010).
UNIUBE 7

1.2 Sistemas computacionais

1.2.1 Visão geral

Um sistema computacional é todo sistema que processa informações


a partir da coleta de dados. Por meio dos microcomputadores, podem
existir vários sistemas computacionais, como, por exemplo, o próprio
microcomputador ou as redes entre microcomputadores. Dentre os
sistemas computacionais, destacamos o sistema operacional – o mais
importante e fundamental, ou seja, a vida do microcomputador.

Para conhecermos um pouco mais sobre os sistemas computacionais,


é importante que saibamos reconhecer suas diferenças. Existem dois
termos que caracterizam esses sistemas, arquitetura e organização.

• A arquitetura de um sistema computacional mais precisamente


de um microcomputador, corresponde à parte palpável (princípios
da construção física, conjunto de instruções). Para definirmos
de forma mais clara, podemos dizer que arquitetura representa
os componentes existentes e a forma com que são inseridos no
sistema.
• Organização é a característica dada à forma com que os recursos
(dispositivos físicos) se interagem (comunicação, acesso, execução,
tecnologia).

Para o funcionamento de um sistema computacional, é necessário um


processador e vários recursos/dispositivos (memórias, impressoras,
leitores de cd, mouse, teclados, outros) que auxiliem na execução dos
dados e tarefas.

Um sistema computacional, baseado em um microcomputador, é


constituído basicamente por uma UCP e diversos controladores de
recursos que se interligam e oferecem interação entre si.
8 UNIUBE

IMPORTANTE!

Para um sistema computacional funcionar corretamente vários fatores


devem ser verificados e inicializados. Essas verificações e inicializações são
executadas por um programa principal contido nos sistemas computacionais.

1.2.2 Blocos e conceitos básicos


Vamos dividir o sistema computacional em blocos e analisarmos suas
características. A Figura 2 nos mostra a interligação dos blocos.

Figura 2: Blocos de um sistema computacional


genérico.
Fonte: Adaptado de Lucefat (2010).

• CPU ou UCP – Unidade Central de Processamento (Central Proces-


sing Unit).

É conhecido como o cérebro dos sistemas computacionais. Dentre as


arquiteturas mais conhecidas e utilizadas atualmente, destacamos a
CISC e a RISC. Estudaremos no capítulo seguinte as características
dessas duas arquiteturas. A CPU é apenas um dentre os componentes
necessários para a vida de um sistema computacional, assim como
o cérebro humano não sobrevive sem as partes funcionais. A CPU é
responsável pelo processamento de toda informação, ela busca os
dados nas memórias ROM e RAM e executa ações baseadas nas
instruções de cada programa (dados armazenados).
UNIUBE 9

• ROM – Memória somente leitura (Read only memory)


Podemos chamar o componente memória ROM de consciência
dos sistemas. É nele que são armazenadas as características
de comportamento. Basicamente são essas características que
diferenciam os sistemas computacionais. Sua principal função
é conter os dados de inicialização do sistema, pois é nesse
componente que estão as instruções iniciais que orientam a CPU.
• RAM – Memória de acesso aleatório (Ramdom access memory)
O correto termo que deveria ser utilizado para essa memória é
“memória de leitura e escrita”, pois tanto a memória ROM quanto a
memória RAM podem ser acessadas em qualquer momento e em
qualquer posição. A memória RAM é a maior aliada do processador,
pois é ela que armazena toda informação que o processador precisa
para executar os processos. Existem vários tipos de níveis e tipos de
RAM, que variam de acordo com a estrutura do sistema.
• Clock – Relógio
Já que estamos fazendo correlação com o corpo humano, chegou
a hora de falarmos do coração dos sistemas, o “clock”. É ele
que determina a que frequência o sistema irá operar, quanto de
informação irá trafegar entre os componentes por segundo. Para
um sistema ser considerado veloz ou eficiente não basta possuir
alta frequência de operação, pois nenhum componente trabalha
sozinho, logo o desempenho do sistema é mais complexo do que
simplesmente a velocidade do clock.
• I/O – Entrada e saída (Input and output)
Assim como precisamos de nossos olhos para enxergar, de nossa
boca para comer, e de nossos braços e pernas para executarmos
ações, os sistemas computacionais precisam de dispositivos de
entrada e saída. São através deles que os sistemas interagem com
o meio externo (resto do mundo). A interatividade com o usuário
final é sem dúvidas o propósito de todo sistema computacional, seja
10 UNIUBE

ele um computador, uma calculadora ou qualquer outro. Afinal, que


propósito teria uma calculadora sem o display para enxergarmos os
resultados, ou que sentido teria o computador se não pudéssemos
inserir dados para serem tratados internamente (teclado, mouses,
impressora etc.). Na verdade, estamos falando de dispositivos de
I/O, porque o real componente de I/O são dispositivos internos que
podem assumir diversas formas, por exemplo, as portas USB, Serial,
PS2, áudio e muitos outros.
• Power Source – Fonte de energia
Tudo na natureza precisa de energia e os componentes eletrônicos
não são diferentes, pois precisam de energia para assumirem seus
papéis.
• Bus – Barramentos

Você conhece o mecanismo que permite ao ser humano


conseguir mexer um braço, fechar o olho, mastigar?

A resposta para essa questão não é simples, mas sabemos que nossos
órgãos são interligados por veias/artérias e neurotransmissores. Através
das veias/artérias, o sangue circula por nosso corpo e é através dos
neurotransmissores que os estímulos nervosos chegam até nossos
membros para executarmos ações. Nos sistemas computacionais, essas
mesmas funções são o que fazem tudo funcionar. O Bus são as ligações
entre cada componente ao seu cérebro (CPU). Pode variar conforme a
quantidade de informações no tráfego, fato proporcional à quantidade de
bits do processador.

SINTETIZANDO...

Todo dado que entra no sistema, vindo de meios externos, são tratados
pelo processador e armazenados na memória RAM até que tomem outros
destinos.
UNIUBE 11

1.2.3 Números binários

Os circuitos dos computadores operam números binários. É muito


fácil explicarmos o porquê de toda a lógica e os dados internos dos
computadores serem números binários.

Os números binários dentro dos computadores são números


extremamente “coletivos”. Em grandes quantidades sequenciais, podem
representar muito, e, ao contrário, se estão em pequenas quantidades.
Em sua maioria, os computadores atuais são máquinas de 32 e 64 bits
(sequência de oito números binários), ou seja, processam dados de
sequências de 32 bits (2³²=4294967296).

Relações entre sequências de bits:



– 8 bits representam um byte (1 byte);
– 1024 bytes representam um quilo byte (1 KB);
– 1024 KB representam um mega byte (1 MB);
– 1024 MB representam um giga byte (1 GB);
– 1024 GB representam um terabyte (1 TG).

Você pode estar se perguntando: – como os dados são armazenados


nas memórias? A resposta para essa pergunta é o que explicaremos na
sequência.

Registradores são componentes capazes de armazenar n bits dentro do


processador. Esse componente é utilizado na execução de programas.

Os componentes para armazenar os dados são nada além de micro


ou até nano transistores e capacitores que trabalham juntos para as
representações de zero e um. O que acontece internamente dentro das
memórias ou processadores, é que caminhos são abertos ou fechados
para a energia passar entre os transistores e carregar os capacitores
(1 – com energia, 0 – sem energia). Para manter os dados sem perda, o
sistema é constituído de recursos lógicos para reconhecer e reenergizar
os capacitores que representam cada dado.
12 UNIUBE

Por exemplo, é necessária uma sequência de oito transistores para


representar um byte (8 bits). As memórias e processadores são
constituídos por até milhões de transistores como os novos processadores
i7 (INTEL – mais de 700 milhões de transistores em uma única pastilha).

Existem outras tecnologias que são utilizadas para armazenar dados


como a memória flash, que utiliza outros componentes internos para
representar os valores de zero e um.

PONTO-CHAVE

Todos os dados existentes nos microcomputadores são representações


binárias. Uma imagem nada mais é que uma sequência binária, que é
tratada por software e reescrita nos monitores para visualização.

EXEMPLIFICANDO!

Exemplo 1
Quantos bytes existem em 1M byte?
1M byte = 1.024 K byte
1K byte = 1.024 byte
Então:
1.024x1.024 = 1.048.576 bytes

Exemplo 2
Quantos bits teremos, se somarmos 1K byte mais 500 bytes?
500 x 8 = 4.000 bits
+
1.024 x 8= 8.192
12.192 bits
UNIUBE 13

DICAS

Para fazer cálculos de conversão de bytes, utilizaremos o método de


etapas. GB para MB e MB para KB, e nunca GB para KB, pois podemos
nos equivocar.

Para utilizar toda a capacidade do sistema, os softwares e hardwares


devem ser compatíveis. Um processador de 16 bits não oferece recurso
para utilizar sistema operacional de 32 bits e um processador de 64 bits
não terá sua capacidade totalmente exigida se o sistema operacional
for de 32 bits (neste caso, devem existir recursos para estabelecer
compatibilidade entre eles).

1.3 SAP 1

Estudar a fundo o sistema computacional exigiria muito dos estudiosos


iniciantes; por esse motivo, estudaremos um computador simplificado
denominado SAP (Simple-As-Possible).

Mesmo sendo um computador simples, contém muitas informações,


inclusive avançadas. Para ficar mais claro, e menos complexo, o SAP
foi dividido em 3 gerações, SAP 1, SAP 2, SAP 3. Estudaremos o SAP
1, que nos dará condições de seguirmos nossos estudos. Neste sentido,
no computador SAP 1, veremos sua arquitetura, sua programação e seus
circuitos.

O SAP 1 tem a finalidade de introduzir os conceitos e ideias cruciais sem


sobrecarregar nossos estudos iniciais.

1.3.1 Arquitetura

Segue, na Figura 3, a estrutura da arquitetura do SAP 1 (um computador


com organização por barramentos). O representativo da Figura 3 mostra
os registradores usados no SAP 1.
14 UNIUBE

Figura 3: Arquitetura do SAP 1.


Fonte: Adaptado de Malvino (1985).

As saídas dos registradores para o barramento W são de três estados, o


que possibilita ordenadamente a transferência de dados. O restante das
saídas dos registradores é de dois estados; essas comandam as caixas
em que estão conectadas.
UNIUBE 15

A seguir, veremos uma breve descrição de cada caixa contida na Figura


3 (registradores da arquitetura SAP 1).

1.3.2 Descrição dos blocos

Todas as definições, a seguir, serão referenciadas na Figura 3, vista


anteriormente.

• Contador de Programa
Esse componente é o responsável por armazenar o programa, sendo
que todas as instruções são armazenadas sequencialmente (primeira
instrução no endereço 0000, segunda instrução no endereço 0001, e
assim por diante).

O contador de programa tem a tarefa de enviar à memória o endereço da


próxima instrução a ser buscada e executada. Isso acontece da seguinte
maneira:

1. contador de programa é zerado (0000) antes do início das tarefas


do computador;
2. envia para a memória o endereço 0000;
3. é incrementado em 1;
4. após instrução 0000 ser buscada e executada;
5. envia para a memória o endereço 0010;
6. é incrementado em 1;
7. após instrução 0010 ser buscada e executada;
8. envia para a memória o endereço 0011.

A função do contador é apontar qual a próxima instrução a ser executada.


Tal função o fez ser chamado de “ponteiro”.
16 UNIUBE

• Entrada e REM
Contém os registradores de chave de dados e de endereço. Tais
registradores nos permitem enviar 4 e 8 bits de dados à memória RAM.

PONTO-CHAVE

Todos os dados e instruções são escritos na memória RAM antes de serem


processados no computador.

O REM (registrador de endereços na memória) faz parte da memória do


SAP 1. Os endereços no contador de programa são repetidos no REM
durante um processamento. O endereço de 4 bits é aplicado à RAM pelo
REM, feito assim uma operação de leitura.

• RAM
A memória RAM (memória de acesso aleatório ou memória de leitura e
escrita) corresponde a um grupo de registradores endereçáveis.

Podemos, por meio dos registradores de chaves de dados e de


endereços, programar a RAM, permitindo-nos armazenar um programa
e os dados antes do processamento.

A RAM recebe endereços de 4 bits do REM executando, assim, uma


operação de leitura. Após a instrução ser colocada na memória e,
consequentemente, no barramento W, ela está pronta para ser usada
em algum componente do computador.

• Registrador de instruções
Antes de o computador processar uma instrução, ele busca na memória
essa instrução, executando uma operação de leitura, colocando os
endereços no barramento W. Nesse momento, o registrador de instruções
é preparado para carregamento na seguinte transição positiva do relógio.
O registrador de instruções faz parte da unidade de controle.
UNIUBE 17

O conteúdo contido no mesmo (um byte) é dividido em dois (parte


superior e parte inferior), recebendo o nome de “nibbles” cada parte
desse byte dividido. A parte superior é interligada diretamente ao bloco
“controlador-sequenciador”, que veremos no item seguinte. A parte
inferior corresponde a uma saída de três estados que pode ser lida no
barramento W, quando requisitada.

• Controlador sequenciador
O controlador sequenciador é o “guarda de trânsito” do computador SAP
1, é ele que prepara os blocos e sincroniza a operação do computador
enviando um sinal de para todos os registradores de memória.
Antes de cada processamento, é enviado um sinal ao contador de
programa (zera o contador de programa para 0000) e um sinal para
o registrador de instruções (elimina a última instrução no registrador de
instruções).

Todas as operações dos registradores ocorrem na transição positiva do


, sendo esse enviado pelo controlador sequenciador.

Se analisarmos a Figura 3, veremos que saem 12 bits do controlador


sequenciador; esses 12 bits formam uma palavra que controla todo o
resto do computador. Estes 12 bits são enviados por 12 fios que recebem
o nome de barramento de controle.

No exemplo seguinte, veremos que essa palavra de 12 bits determina


como os registradores se comportarão na próxima transição positiva
do (relógio). Para entendermos o que é cada representação, temos
que separar o valor alto (letra sem traço) e o valor baixo (letra com traço
superior).
18 UNIUBE

EXEMPLIFICANDO!

Exemplo 3
Envio da palavra .

alto e um baixo significam que o conteúdo de um programa é
retido no REM na próxima transição positiva.
baixo e um baixo significam que a palavra da RAM será
transferida para o acumulador na próxima transição positiva.

• Acumulador
O bloco acumulador é um registrador de memória intermediária; sua
função é armazenar dados intermediários durante o processamento de
uma instrução pelo computador (resultados das operações do somador-
subtrator). Analisando a Figura 3, veremos que o acumulador está ligado
diretamente no somador-subtrator por uma saída de dois estados e ao
mesmo tempo ao barramento W pela saída de três estados.

Complemento de • Somador subtrator


dois
Considerado a ULA do SAP 1, o somador-
É equivalente a uma
mudança de sinal subtrator realiza operações (soma e subtração
do decimal. Utiliza em complemento de dois).
um dos bits da
palavra para indicar
sinal positivo ou
negativo. Para visualizar, temos os seguintes exemplos.

EXEMPLIFICANDO!

Exemplo 4
Somador-subtrator atuando com complemento de 2.
Quando for baixo:
S=A+B
Quando for alto:
S = A + B’
UNIUBE 19

O somador-subtrator utiliza métodos assíncronos, fato que pode fazer


seu conteúdo variar logo que as palavras de entrada variem.

• Registrador B

Também um registrador de memória intermediária, utilizado nas


operações aritméticas.

Com baixo e uma transição positiva do relógio, é carregada a


palavra do barramento W para dentro do registrador B. A Saída de dois
estados do registrador B comanda o somador-subtrator, adicionando ou
subtraindo um número ao acumulador.

• Registrador de saída

Tudo o que é feito em um computador tem um propósito comum, dados


são processados com o intuito de se chegar a um resultado. Esse
resultado é chamado de dado de saída.

Os dados de saída, após serem processados, podem sair do computador


através do registrador de saída. Esse registrador carrega uma palavra do
acumulador na transição do relógio.

Em se tratando de microcomputadores, o registrador de saída se conecta


aos circuitos de interface que comandam os periféricos. Estes periféricos
são os responsáveis por transmitir os dados para o mundo exterior
(impressoras, monitores ou qualquer outra que transmita informações
físicas ou visuais para o usuário).

• Indicador visual em binário

O indicador visual são oito LEDs em sequência que correspondem à


saída binária. Este componente nos permite visualizar o andamento da
saída do acumulador.

• Visão geral

O SAP-1 possui quatro grupos de dispositivos que, ao trabalharem em


conjunto, formam o microcomputador.
20 UNIUBE

A unidade de controle é constituída pelo contador de programa,


registrador de instruções e o controlador-sequencializador que criam
a palavra de controle, os comandos de limpar (preparação para novos
dados) e os pulsos do relógio. A ULA apresenta em sua estrutura
o acumulador, o somador-subtrator e um registrador B. A memória é
constituída de um REM e uma RAM. Para finalizar, têm-se os dispositivos
de entrada/saída que incluem as chaves de programação de entrada, a
porta de saída e o indicador visual binário.

1.3.3 Conjunto de instruções

Até agora, falamos dos hardwares de um computador, que, no entanto,


não passam de um aglomerado de componentes, se não tiverem um
programa para ordenar suas atividades.

O programa nada mais é que uma sequência de instruções que devem


ser carregadas na memória antecedendo o início do processamento no
computador.

O SAP-1 possui um conjunto de instruções que são utilizadas para


executar as operações básicas. Essas instruções em conjunto formam
o programa.

A seguir ,veremos o conjunto de instruções de um computador SAP-1.

• LDA (Load the Accumulator)


O LDA carrega o acumulador com o conteúdo que foi referido.

EXEMPLIFICANDO!

Exemplo 5
Instrução LDA 5H.
A = 1111 0000
O conteúdo do endereço de 8 bits 1111 0000 será carregado no acumulador.
UNIUBE 21

• ADD
A instrução ADD incrementa o conteúdo do endereço referenciado ao
conteúdo do acumulador.

EXEMPLIFICANDO!

Exemplo 6
Acrescentar o conteúdo 5, que está no endereço de memória 9H, no
acumulador que contém 1.
A = 0000 0001
R9 = 000 0101
O conteúdo de R9 é carregado no registrador B.
O somador-subtrator soma A + B.
A = 0000 0110 (valor 6)

• SUB
Inversamente, como acontece no ADD, esta instrução decrementa o
conteúdo do endereço referenciado, do conteúdo do acumulador.

EXEMPLIFICANDO!

Exemplo 7
Diminuir o conteúdo 5, que está no endereço de memória 9H, no acumulador
que contém 15.
A = 0000 1111
R9 = 000 0101
O conteúdo de R9 é carregado no registrador B.
O somador-subtrator subtrai B de A.
A = 0000 1010 (valor 10)
22 UNIUBE

• OUT
A instrução OUT é pura e não necessita de referenciar um endereço. A
função dessa instrução é mover o conteúdo do acumulador para o bloco
“porta de saída”.

• HLT
Uma instrução com finalidade importantíssima é a HLT; ela paralisa o
processamento dos dados, indicando o final de um programa. Todo
programa deve conter uma instrução HLT para indicar que aquela
sequência foi finalizada. O não uso da instrução HLT pode acarretar em
refugos (trash) que são respostas com significados não controlados.

1.3.4 Instruções de referência à memória

As instruções que vimos anteriormente (LDA, ADD, SUB) recebem o


nome de instruções de referência à memória, porque elas utilizam dados
que estão armazenados nas memórias.

As instruções OUT e HLT não são consideradas instruções de referência


à memória, porque não interagem diretamente com dados contidos na
memória.

1.3.5 Mnemônicos

O cérebro humano tem maior facilidade em memorizar dados, nomes ou


outro, quando informações estão contidas em sua descrição.

Mnemônicos é o nome dado às instruções abreviadas, como as que


vimos anteriormente. Estas instruções são chamadas dessa forma em
virtude de suas abreviações lembrarem as operações que ocorrerão no
ato de sua execução, como é o caso da instrução ADD, que é utilizada
para adicionar um dado ao acumulador.
UNIUBE 23

Outros exemplos de mnemônicos muito utilizados na computação são:


MUL: multiplicação
DIV: divisão
JMP: Jump (pular)
A maioria das siglas são representações de palavras escritas em inglês,
por esse motivo alguns mnemônicos não serão facilmente identificados
para nós. No Quadro 2, a seguir, colocamos algumas instruções do
SAP-1.

Quadro 2: Conjunto de instruções do SAP-1

Mnemônicos Operação

LDA Carrega os dados da RAM no acumulador


ADD Soma os dados da RAM com o acumulador
SUB Subtrai os dados da RAM com o acumulador
OUT Carrega os dados do acumulador no registrador de saída
HLT Parar o processamento

1.3.6 Programação

Para que o computador possa executar as instruções que desejamos,


é preciso utilizar uma espécie de código que ele consiga entender.
Quando existe uma sequência desses códigos, dizemos que existe uma
programação para o computador.

Vimos anteriormente as instruções que são utilizadas no SAP-1;


aprenderemos agora que cada uma delas possui um código que
chamaremos de código OP (código de operação). Este código é utilizado
pelo computador para identificar qual instrução está sendo requisitada
no momento. Vimos que tudo dentro do computador é interpretado por
números binários; nesse caso, não é diferente; listaremos na Tabela 1 os
referidos códigos OP de cada instrução que aprendemos.
24 UNIUBE

Tabela 1: Código OP referente às instruções do SAP 1

Mnemônico Código OP

LDA 0000

ADD 0001

SUB 0010

OUT 1110

HLT 1111

PONTO-CHAVE

Instrução = XXXX YYYY


XXXX corresponde ao campo de instrução
YYYY corresponde ao campo de endereço da memória

Para facilitar a compreensão, basearemos em exemplos de programação.

EXEMPLIFICANDO!

Exemplo 8
Armazenar as seguintes instruções:

Endereço Instrução

0000 ou 0H LDA FH

0001 ou 1H ADD EH

0011 ou 2H HLT

1. Converter as instruções para binário, se necessário, como segue:

LDA FH 0000 1111


UNIUBE 25

ADD EH 0001 1110

HLT 1111 XXXX

0000 é código OP da instrução LDA e 1111 é o equivalente binário de F


(número em hexadecimal).
0001 é o código OP da instrução ADD e 1110 é o equivalente binário de E
(número em hexadecimal).
1111 é o código OP da instrução HLT e XXXX, porque essa não é uma
instrução com referência à memória, logo a saída é considerada irrelevante.

2. Os três primeiros locais de memória têm agora estes dados:

0000 0000 1111

0001 0001 1110

0010 1111 XXXX

No exemplo anterior, os dados contidos nos endereços 1111 e 1110 foram


somados e foram adicionados na posição 0001 da memória e, posteriormente,
foi requisitada a parada do processamento pela instrução HLT.

Quando trabalhamos com a programação feita por meio dos mnemônicos,


dizemos que essa programação utilizou linguagem de montagem
(Assembly language).

Quando trabalhamos com cordões de 0/1 (binário) significa que estamos


programando em linguagem de máquina. Como o próprio nome diz, essa
é a linguagem mais pura possível de se programar.

Essas duas linguagens podem ser diferenciadas, é o que veremos nos


próximos exemplos.
26 UNIUBE

Dados para os próximos dois exemplos:

1 está contido no endereço 0110 (6H) da memória


4 está contido no endereço 0111 (7H) da memória
2 está contido no endereço 0100 (8H) da memória

EXEMPLIFICANDO!

Exemplo 9
Resolver o problema aritmético, utilizando as instruções de programação
com linguagem de montagem (assembly).
1+4–2

Endereço Instrução

0H LDA 6H

1H ADD 7H

2H SUB 8H

3H OUT

4H HLT

5H XX

6H 1H

7H 4H

8H 2H

Exemplo 10
Resolver o problema aritmético, utilizando as instruções de programação
com linguagem de máquina (binário).
1+4–2

Endereço Instrução
UNIUBE 27

0000 0000 0011

0001 0001 0111

0010 0010 0100

0011 1110 XXXX

0100 1111 XXXX

0101 XX

0110 0000 0001

0111 0000 0100

1000 0000 0010

Vamos analisar o que foi feito nos exemplos 9 e10.

Inicialmente, temos que considerar que os dados 1, 4 e 2 já estejam


armazenados nos respectivos endereços de memória, conforme a
descrição dos dados.

A sequência de operação deve ser respeitada para garantir o resultado


esperado.

Primeiro, adicionamos o valor inicial contido no endereço de memória


0110 (1 decimal) no acumulador, em seguida adicionamos o conteúdo no
endereço de memória 0111 (4 decimal) e, para finalizar nossa equação
aritmética, vamos subtrair o valor contido no endereço de memória 1000
do valor acumulado no acumulador.

A instrução OUT envia o conteúdo do acumulador para a porta de saída,


nos dando opção de utilizar esse dado em algum dispositivo de saída.
Conforme já estudamos, o contador do programa executa a chamada
sequencial da memória; por esse motivo é que devemos sempre
organizar as operações com cuidado.
28 UNIUBE

Antes de praticarmos com o exercício seguinte, é importante sabermos


como são representados os números negativos já que apenas temos 0
e 1 para representá-los.

Complemento de dois (C2) é simples de entendermos, bastando inverter


os 0s por 1s e os 1s por 0s e somar um (soma binária) após a inversão.
A figura abaixo demonstra os passos necessários para subtrair dois
números binários, o que, na verdade, irá acarretar uma soma destes
dois números.

bit

anteriormente é:
UNIUBE 29

1.3.7 Ciclo de busca (Fetch)

Cada instrução é buscada e executada pelas palavras de controle


geradas pela unidade de controle. O computador passa por diferentes
estados de temporização (estados T) durante as ações de busca e
execução das instruções. Nestes estados T, o computador muda os
conteúdos dos registros. Vejamos na Figura 4.

Figura 4: Sinais do relógio (clock) e de temporização.


Fonte: Adaptado de Malvino, 1985.

Veja que as mudanças de estados ocorrem na transição negativa do


clock. Uma importante notação é que a transição do clock ocorre no meio
de cada estado T.

Estado de endereço

No estado T1, o endereço no contador de programa é transferido para


o registrador de endereços da memória, por isso leva o nome de estado
de endereço.
30 UNIUBE

Os bits de controle Ep e LM estão ativos neste estado e o restante dos


bits de controle está inativo. O envio da palavra de controle feito pelo
controlador-sequencializador ocorre neste momento.

Estado de incremento

O incremento do contador ocorre no estado T2. O controlador-sequen-


cializador produz uma palavra de controle:

Estado de memória

No estado T3, ocorre a transferência da instrução da RAM endereçada


para o registrador de instrução. O nome dado ao estado T3 é estado de
memória e, desta vez, a palavra de controle produzida pelo controlador-
sequencializador é
UNIUBE 31

Ciclo de busca

Estes estados que acabamos de estudar são chamados de ciclo de


busca.

O que acontece neste ciclo de busca é o que veremos na sequência


seguinte:

1. no estado de endereço, e estão ativos; o contador de


programa monta o REM através do barramento W;

2. no estado de incremento, é o único bit de controle ativo; o


contador de programa é preparado para contar transições positivas
de clock e, posteriormente, a contagem é incrementada em 1;
3. no estado de memória, e estão ativos; o registrador é
preparado pela palavra da RAM endereçada através do barramento
W e, em seguida, o registrador é carregado com a palavra contida
na RAM endereçada.

1.3.8 Ciclo de execução

No item anterior, falamos sobre os estados de busca (T1,T2,T3), os


próximos 3 estados (T4, T5, T6), constituem o ciclo de execução do
SAP-1.

Veremos que cada instrução requer um trabalho de registradores


específicos. As transferências do registrador durante o ciclo de execução
dependem da instrução que está sendo executada.

As ações decorrentes das trocas de informações (dados processados)


entre os registradores são chamadas rotinas de controle.

Analisaremos as rotinas das instruções LDA, ADD, SUB, OUT.


32 UNIUBE

Rotina da instrução LDA

Vamos adotar o valor LDA 9H (0000 1001) para o registrador de


instruções (IR).

IR = 0000 1001

A Figura 5 contém as representações dos estados T4, T5 e T6.

O controlador-sequencializador recebe 0000 durante o estado T4 e o


REM recebe 1001.

No estado T4, podemos reparar que e são os únicos bits ativos.


Durante o estado T5, e passam a ser ativos; com isso, a palavra
de dados endereçada na RAM é carregada no acumulador no próximo
ciclo positivo do clock.

No estado T6, a rotina LDA envia um sinal chamado nop (quando todos
os bits estão inativos). Nesse estado, nenhuma operação é realizada.

Analisando a Figura 5 que nos mostra o diagrama de temporização das


rotinas LDA e de busca, veremos que ocorre o seguinte:

Figura 5: Rotina LDA (estado T4,T5 e T6).


Fonte: Adaptado de Malvino (1985).
UNIUBE 33

T1: e estão ativos. O endereço no contador de programa é


transferido para o REM durante o meio caminho da transição positiva
do clock.

T2: encontra-se ativo. O contador de programa é incrementado.

T3: e estão ativos. A palavra da RAM endereçada é transferida


para o registrador de instruções durante a transição positiva do clock.

T4: e estão ativos. Nesse momento, inicia a execução da rotina


LDA. O campo de endereço no registrador de instruções é movido para
o REM.

T5: e estão ativos. A palavra da RAM endereçada é transferida


para o acumulador na transição positiva do clock.

T6: nop. Vide Figura 6:

Figura 6: Diagrama de temporização de busca e LDA.


Fonte: Adaptado de Malvino, 1985.
34 UNIUBE

Rotina da instrução ADD

Agora, vamos adotar o valor ADD BH (0001 1011) para o registrador de


instruções (IR).

IR = 0001 1011

A Figura 7 contém as representações dos estados T4, T5 e T6.

Figura 7: Rotinas LDA e SUB (estado T4,T5 e T6).


Fonte: Adaptado de Malvino (1985).

No estado T4, o controlador-sequencializador recebe o campo de


instruções e o REM recebe o campo de endereços. Pela Figura 7,
veremos que e estão ativos.

e , quando estão ativos, permitem que o registrador B seja


preparado pela palavra da RAM endereçada. Essa operação ocorre no
meio caminho da transição positiva do relógio e representa o estado T5.

Durante T6, e estão ativos e, nesse momento, o acumulador é


preparado pelo somador-subtrator. Como acontece em todos os estados,
no meio caminho da transição positiva do clock, a soma é carregada no
acumulador.
UNIUBE 35

O diagrama de temporização da rotina ADD é representado na Figura


8, sendo a rotina de busca (T1, T2, T3) idêntica à da rotina LDA, vista
anteriormente.

Figura 8: Diagrama de temporização de busca e ADD.


Fonte: Adaptado de Malvino (1985).

Rotina da instrução SUB

A rotina da instrução SUB é semelhante à rotina da instrução ADD.


A Figura 8 também representa as partes ativas do SAP-1 durante a
execução da rotina SUB. No estado T6, alto é enviado ao somador-
subtrator.
36 UNIUBE

Rotina da instrução OUT

Vamos supor o conteúdo OUT XX (1110 XXXX) para o registrador de


instruções (IR).
IR = 1110 XXXX
O registrador de saída recebe a palavra de controle e, então, é
carregado com o conteúdo do acumulador.

e são os bits ativados no estado T4 da rotina OUT, conforme


visualizamos na Figura 9. Durante a execução dessa rotina, o registrador de
saída é carregado pelo acumulador. Nos estados T5 e T6 ocorrem os nops.

Figura 9: Instrução OUT (estado T4).


Fonte: Adaptado de Malvino (1985).

A Figura 10 contém as representações dos estados T4, T5 e T6, sendo


que o ciclo de busca é o mesmo dos anteriores.
UNIUBE 37

Figura: 10: Diagrama de temporização de busca e OUT.


Fonte: Adaptado de Malvino (1985).

Rotina da instrução HLT

A instrução HLT não requer uma rotina de controle pelo fato de não haver
trabalho dos registradores. O valor de HLT (1111) avisa ao controlador-
sequencializador para pausar o processamento dos dados desligando
o relógio.

1.3.9 Ciclo de máquina e ciclo de instrução

A união dos seis estados que estudamos anteriormente é conhecido


como ciclo de máquina. Na Figura 11, está representada a divisão deste
ciclo de máquina.
38 UNIUBE

Figura 11: Ciclo de instrução.


Fonte: Adaptado de Malvino (1985).

O ciclo de instrução representa todos os estados necessários para buscar


e executar uma instrução. É necessário pelo menos um ciclo de máquina
para executar uma instrução.

Cada transição do clock que no SAP-1 trabalha a 1 Khz, leva 1


milissegundos (ms), portanto um ciclo de máquina demora 6 ms para
ser executado por completo.

1.3.10 Microprocessadores

O microprocessador ou somente processador (CPU) é o componente


principal de um computador (cérebro). Todas as informações contidas
em um computador são manipuladas aqui, sendo essas codificadas em
binário.

Para não ficarmos perdidos em muita informação, destacaremos o


microprocessador 8085 da Intel.

• Microprocessador 8085
O microprocessador 8080 foi quem desencadeou a explosão do
microcomputador em todo o mundo, na década de 1970. Era o
microprocessador mais popular na época, embora tenha tido algumas
desvantagens como a necessidade de duas fontes de energia e a
necessidade externa de sinais de controle e de relógio.
UNIUBE 39

Pelo fato de não possuir os componentes necessários para seu


funcionamento em uma única pastilha, muitos não o consideravam uma
UCP (Unidade Central de Processamento) ou CPU.

Esse microprocessador possuía um contador de programa de 8 bits, 7


registradores, 40 pinos e trabalhava com clock de 2 Mhz.

Era considerado dez vezes mais eficiente que seu antecessor o modelo
8008 e foi base para evoluções como o modelo 8085, que era uma versão
melhorada do modelo 8080. O modelo 8085 manteve o mesmo conjunto
de instruções do 8080, embora já fosse considerado uma UCP pelo fato
de seus componentes estarem integrados em uma pastilha única.

Com o surgimento do modelo 8085, era possível obter um sistema


computacional simplificado com apenas três circuitos integrados (UCP,
memória e dispositivos de entrada/saída).

1.3.11 Descrição funcional

O microprocessador é um componente que tem sua “vida” controlada


por um relógio interno (clock). A frequência do relógio é chamada de
ciclo, que representa a quantidade de impulsos por segundo. Vimos
anteriormente que existe um estado alto de pulso e um estado baixo de
pulso, a união desses forma-se o ciclo.

A cada ciclo do clock, o processador executa uma instrução completa ou


parcialmente. CPI significa ciclos por instrução, esta sigla representa um
indicador do número médio de ciclos do clock, necessário para executar
cada instrução.

A capacidade (potência em processamento) do microprocessador é


diretamente ligada à quantidade de instruções por segundo que ele
é capaz de processar. Outro termo existente é o MIPS (Milhões de
Instruções Por Segundo).
40 UNIUBE

A construção das CPUs varia conforme o fabricante, mas basicamente


os principais elementos de um microprocessador são:

1.3.11.1 Unidade de instrução

Lê e decodifica os dados que entram e depois os envia à unidade


de execução. É subdividida pelos seguintes elementos:

Sequenciador
Sincroniza a execução das instruções no ritmo do clock.

Contador de programa
Contém o endereço da instrução em execução.

Registro de instrução
Contém o endereço da próxima instrução.

1.3.11.2 Unidade de execução

Executa as instruções requisitadas pela unidade de instrução. É


subdividida pelos seguintes elementos:
Unidade Lógica e Aritmética (ULA)
Operações básicas de aritmética.

Unidade de Ponto Flutuante (FPU)


Realiza os cálculos complexos (partes fracionárias) que
não são suportadas pela ULA.

Registrador de Status
Registrador de Dados ou Acumulador
Contém o valor atual da operação.
UNIUBE 41

1.3.11.3 Unidade de Gerenciamento de Entrada/Saída

Gerencia o fluxo de dados que entram e saem.


O microprocessador é constituído por um conjunto de unidades de
funcionamento que podemos visualizar na Figura 12.

Figura 12: Representação simplificada dos componentes internos de um micropro-


cessador.
Fonte: Adaptado de Microprocessador (2010).

Vejamos alguns detalhes importantes que são pertinentes aos


elementos da Figura 12:

• cache é uma memória rápida que auxilia a memória RAM na


execução dos dados.
• instrução é a operação elementar que o microprocessador pode
efetuar. A instrução é dividida em dois campos:
Código operacional / Campo operando
As instruções podem ser de acesso à memória, operações aritméticas,
operações lógicas e de controle.
42 UNIUBE

1.3.12 Arquitetura de uma CPU

A arquitetura de um microprocessador (Unidade Central de Processa-


mento) é determinada por seu conjunto de instruções.

Vimos que existem as arquiteturas CISC e RISC, que são basicamente


diferenciadas pela quantidade de instruções.

• CISC (Computador com Conjunto Complexo de Instruções): utiliza


instruções complexas.

• RISC (Computador com Conjunto Reduzido de Instruções): utiliza


as instruções básicas.

A arquitetura RISC leva vantagem sobre a CISC nas aplicações que


ela suporta, pois seu conjunto de instruções é simplificado, não
havendo o desperdício de processamento para executar instruções
desnecessárias. Uma desvantagem da arquitetura RISC é que ela não
possui determinadas instruções complexas que possivelmente seriam
necessárias em aplicações avançadas.

A arquitetura CISC é adotada em microprocessadores com capacidades


superiores, utiliza mais recursos e são componentes criados para atender
aplicações das mais diversas. Estas CPUs com arquitetura CISC gastam
mais tempo de processamento para executar cada instrução; por esse
motivo, perdem em termos de rendimento em relação à arquitetura RISC.

Resumo

Após muita “briga”, os caminhos de desenvolvimento dos microcompu-


tadores foram se afunilando de tal forma que, hoje, empresas diferen-
tes produzem equipamentos padronizados, em que o recurso de um
microcomputador serve em outros microcomputadores de fabricantes
UNIUBE 43

diferentes. Conforme estudamos, a evolução das tecnologias tornou possível


o surgimento de novas soluções no segmento da eletrônica computacional.

Vimos o funcionamento interno dos componentes contidos no SAP 1


(computador simples quanto possível), e principalmente entendemos como
os hardwares interpretam e armazenam os dados (lógica binária).

A constituição física de um sistema computacional é basicamente semelhan-


te para qualquer tipo. Estudamos com detalhes o sistema computacional
mais conhecido, o microcomputador. Separadamente foram estudados os
componentes que o compõem.

A importância da cooperatividade na eletrônica foi mais uma vez provada,


pois o sistema em si só funciona por completo quando há interatividade entre
todos os componentes.

Como o cérebro e o coração são os principais órgãos do nosso corpo, para


o computador, o processador e o clock funcionam como tais.

Foi visto que são muitos os processos que ocorrem para execução de uma
operação dentro dos microcomputadores. O tratamento de uma informação
até que se torne um dado concreto para ser visualizada pelo usuário ou para
ser utilizada dentro de outro processo é extremamente complexo, visto que
esse tratamento é subdividido em varias etapas e feito por vários componen-
tes, cada um com sua função.

Nada seria dos microcomputadores sem os excepcionais microprocessado-


res. Estudamos um pouco sobre a sua evolução e a sua constituição física.
Toda informação, todo processo que ocorre dentro de um microcomputa-
dor passa por esse componente. Tal motivo o leva ser considerado a mais
importante peça no funcionamento de um sistema computacional. Agora,
ficará mais fácil entendermos a utilidade e a capacidade dos microcompu-
tadores.
44 UNIUBE

Tendo como base nosso estudo sobre os microprocessadores, concluímos


que nunca devemos subestimar a tecnologia, ela é capaz de evoluir além
de nossa imaginação e expectativas.

Atividades

Atividade 1

Escreva qual é a diferença entre processadores de 8 bits e de 16 bits.

Atividade 2

Relacione para quais funções, dentro de um sistema computacional, a


memória ROM é importante.

Atividade 3

Responda qual a utilidade do contador de programa no SAP-1. Explique


como acontece o armazenamento das instruções no contador de
programa.

Atividade 4

Utilizando linguagem Assembly, resolva a equação 2 + 1 – 4. Represente


a resposta em complemento de dois.

Atividade 5

Escreva quantos pulsos positivos o clock dará para executar uma


instrução que requisita 3 ciclos de máquina, e quantos ciclos de instrução
serão executados.
UNIUBE 45

Referências

LUCEFAT. Revendo conceitos: Hardware. Disponível em: <http://blog.luferat.


net/2010/03/revendo-conceitos-hardware.html>. Acesso em: set. 2010.

MALVINO, Albert Paul. Microcomputadores e microprocessadores. São Paulo:


Editora McGraw-Hill do Brasil, 1985.

MANO, Rui, Unidade central de processamento, Disponível em: <http://


wwwusers.rdc.puc-rio.br/rmano/comp8ucp.html>. Acesso em set. 2010.

MICROPROCESSADOR. Disponível em:<http://pt.kioskea.net/contents/pc/


processeur.php3>. Acesso em: set. 2010.
Capítulo Microcontrolador PIC
2

Rhafael Pansani Godinho

Introdução
Com o passar do tempo, as tecnologias evoluem dando
origem a novas ferramentas. E, assim como muitas outras, o
microcontrolador PIC (Programmable Interface Controller) surgiu
de uma disputa tecnológica entre universidades dos Estados
Unidos (Harvard e Princeton) com o objetivo de atender a
solicitações do Departamento de Defesa Americano. Produzido
pela Microship, é muito utilizado no meio acadêmico por ser de fácil
aquisição e oferecer variedades de ferramentas para manipulá-lo.
Microcontrolador é hoje um dos componentes mais importantes
quando tratamos de projetos eletrônicos (equipamentos eletrônicos
em geral).

Vimos, nos capítulos iniciais, que o microcontrolador se estende


por muitos conceitos, que são incorporados até que se torne um
único equipamento com muitas ferramentas. Serão estudadas
neste capítulo características específicas dos microcontroladores
PIC, juntamente com a descrição de suas funcionalidades e sua
estrutura física.

Vamos aprender a analisar qual o melhor modelo a ser utilizado


e quais as funções disponíveis nos PICs convencionais. Veremos
que são várias as opções de microcontroladores PIC disponíveis,
48 UNIUBE

sendo em sua maioria voltados para aplicações diversas. Este


capítulo será fundamental para conhecermos o poderoso mundo
dos microcontroladores PIC, no qual vamos adquirir informações
que servirão de base para os próximos capítulos.

Objetivos
Ao finalizar os estudos propostos neste capítulo, esperamos que
você seja capaz de:

• entender o que é um microcontrolador;


• especificar o microcontrolador PIC de acordo com suas
características (físicas e funcionais);
• entender o uso dos pinos do microcontrolador PIC;
• utilizar as funcionalidades gerais ou particulares de determi-
nados microcontroladores PIC.

Esquema
2.1 Microcontrolador PIC
2.1.1 História
2.1.2 Arquitetura
2.1.3 Características gerais
2.1.4 Estrutura física
2.1.5 Modelos
2.2 Funcionalidades
2.2.1 Timers e interrupções
2.2.2 Conversores analógicos/digitais e comparadores analó-
gicos
2.2.3 USARTs
2.2.4 Outras formas de comunicação
2.2.5 Módulos CCP (Capture Compare Pulse) e PWM (Pulse-
Width Modulation)
2.2.6 Entrada/saída digital
UNIUBE 49

2.2.7 Sistema de proteção


2.2.8 Watchdog
2.3 Desbravando o microcontrolador PIC16F628A
2.3.1 Diagrama de pinagem
2.3.2 Descrição funcional dos pinos
2.4 Conhecendo o PIC16F877A

2.1 Microcontrolador PIC

2.1.1 História

A origem dos microcontroladores se dá pelos microprocessadores. Tudo


começou com esse componente que, com o passar do tempo, foi se
aprimorando (4 bits / 8 bits / 16 bits de processamento).

Mas, o que seria um microprocessador?


O que diferencia um microprocessador de um microcontro-
lador?

Os microprocessadores são componentes altamente desenvolvidos e que


exigem um sistema complexo para trabalhar em alguma aplicação. Para
suprir essa dificuldade de implementação de um sistema computacional,
as próprias empresas fabricantes de microprocessadores desenvolveram
os primeiros microcontroladores. Na década de 80, o Departamento
de Defesa Norte-americano requereu das Universidades de Harvard
e Princeton uma disputa tecnológica para desenvolvimento de um
equipamento que simplificasse os dispositivos inteligentes.

Oferecendo uma proposta mais eficiente, Princeton desenvolveu uma


arquitetura mais lenta, embora com menor número de falhas. Apesar
de Princeton ter ganhado a disputa apresentando uma tecnologia mais
confiável e simples, a arquitetura Harvard foi adotada mais tarde pela
General Instruments que começa a utilizá-la como interface controladora
50 UNIUBE

de periférico, dando origem à sigla PIC. Com o sucesso que este


equipamento proporcionou, surgiu a Microchip Technology, tendo como
seu produto principal os microcontroladores PIC.

A arquitetura Harvard sofre grande avanço com o surgimento dos


transistores e dos circuitos integrados, e com as melhorias promovidas
pela Microchip, surge uma potente ferramenta para desenvolvimento de
sistemas automáticos e inteligentes. Um sistema computacional consiste
em um microprocessador, memórias e portas de entrada e saída. Na
Figura 1, podemos notar que os microcontroladores são nada mais que
todos estes componentes incorporados em um único equipamento,
facilitando o uso das funcionalidades de um sistema computacional. É
dito sistema computacional todo sistema que, a partir de uma entrada,
resulta em uma saída através do processamento desses dados de
entrada.

Figura 1: Composição interna de um microcontrolador.


Fonte: Acervo EAD-Uniube.
UNIUBE 51

2.1.2 Arquitetura

A arquitetura Harvard, Figura 2, baseia-se na rapidez do processamento


das informações.

Figura 2: Estrutura da arquitetura Harvard.

Assumindo uma característica única de possuir duas memórias distintas,


ela oferece um ganho em velocidade de acesso aos dados de programa
ou aos dados armazenados. Essa divisão da memória permite que o
processador execute ao mesmo tempo uma instrução do programa
enquanto acessa a memória de dados.

Os microcontroladores que possuem arquitetura Harvard são ditos


microcontroladores RISC (Computador com Conjunto Reduzido de
Instruções) que confrontam os CISC (Computador com Conjunto
Complexo de Instruções). Se compararmos as duas arquiteturas em
disputa na década de 1980, veremos que a arquitetura de Harvard atende
melhor às necessidades do sistema que visa tempo de processamento
e perde se o sistema exige melhor rendimento.

Num primeiro momento, a confiabilidade era mais importante e vence a


disputa, mas com o avanço tecnológico, as melhorias feitas na arquitetura
Harvard a transformou na melhor opção de dispositivo de controle.
52 UNIUBE

SAIBA MAIS

Quanto maior o número de instruções, maiores serão as possibilidades de


controle dos dispositivos (execução de conjuntos complexos de instruções),
no caso os microcontroladores. Microprocessadores RISC são mais
utilizados quando os sistemas não exigem muitos recursos.

Vejamos o motivo de a arquitetura RISC ser considerada mais rápida


que a arquitetura CISC. Se pensarmos que CISC possui um conjunto
complexo de instruções, era de se imaginar que seriam mais rápidos.
De fato, isso tem fundamento, mas o que acontece é que muitas dessas
complexas instruções não são frequentemente utilizadas, fazendo
o sistema executar instruções sem precisão. A arquitetura RISC é
simplificada exatamente neste ponto, apenas as instruções que são muito
utilizadas foram inseridas nesse sistema, simplificando a quantidade de
circuitos internos que proporcionou capacidades mais altas de frequência
no processamento.

Em seguida, veremos um quadro comparativo (Quadro 1) entre as


arquiteturas Harvard e Von Neumann, destacando as características
principais:

Quadro 1: Quadro comparativo entre Harvard e Von Neumann

Harvard Von Neumann


Arquitetura mais complexa Arquitetura mais simples
Mais rápido, pois permite acesso
Lento e possui apenas uma memória
simultâneo às memórias
Em sua maioria RISC Geralmente CISC
Pipelining
Exemplos:
Exemplos:
4004 – 46 instruções
Microchip PICs – 35 e 76 instruções
8080 – 78 instruções
Intel 8086, 8088
Z80 – mais de 500 instruções
UNIUBE 53

Para entendermos o que é pipelining, vamos dividir o processamento


interno do microcontrolador PIC em dois ciclos (busca e execução) para
efeito de análise. Para a execução de uma instrução, é necessária a
execução prévia de um ciclo de busca.

Imagine um sistema que implemente um ciclo de busca e, ao mesmo


tempo, processe um ciclo de execução. Enquanto uma instrução está
sendo executada, outra está sendo lida. Um sistema com pipelining está
constantemente em execução (executando instruções). Isso representa
um ganho significativo de velocidade de processamento.

Analisando o Quadro 1, exposto anteriormente, veremos que a


arquitetura Harvard dos microcontroladores PIC possui pequeno número
de instruções. Tal simplificação das instruções permite um ganho na
rapidez de processamento.

2.1.3 Características gerais

Os microcontroladores PIC possuem altas taxas de processamento


devido à sua arquitetura ser do tipo RISC. São diferenciados uns dos
outros pelo tamanho, por processarem dados de 8/16/32 bits, por
funcionalidades internas, por capacidade de armazenagem de dados
internos e pela estrutura física.

Na medida em que as tecnologias evoluem, as funcionalidades aumentam


e o tamanho diminui. Em se tratando de componentes eletrônicos, quanto
menor o seu tamanho, melhor, pois a tendência é a miniaturização dos
equipamentos eletrônicos e sistemas simplificados.

A tensão recomendada de alimentação varia de 2.5 a 5.5 V. O consumo


aproximado de corrente fica entre XuA a YmA (sendo X > 26 e Y < 20),
variando de acordo com a frequência do clock.
54 UNIUBE

É importante ressaltarmos que esses valores de consumo correspondem


apenas ao microcontrolador, caso esteja sendo usado um LED (consumo
de 10mA) em uma das portas do microcontrolador, por exemplo, este
valor deve ser incrementado no valor total de consumo.

Dados para PIC16F84:


• Clock de 4MHz = 2mA
• Clock de 32kHz = 150uA
• Stand-by = 70uA

Os microcontroladores PIC são principalmente diferenciados por suas


nomenclaturas, em que recebem uma organização por família. Vamos,
então, analisar a nomenclatura que segue o seguinte padrão:

[Família] + [Tipo de armazenamento do + [Modelo]


programa]
16 + F + 877

Resultando em: PIC 16F877

A família dos microcontroladores PIC define a tecnologia empregada


nesses componentes, podendo variar de capacidade de armazenamento
até taxas de processamento. Quanto ao tipo de armazenamento, existem
basicamente 2 tipos de microcontroladores PIC no mercado atualmente,
os que possuem memória de programa regravável (entre 1.000 até
10.000 aproximadamente) e os que possuem memória não volátil, com
gravação OTP (One Time Program) que significa que há apenas uma
chance para gravação.

O tipo de armazenamento do programa é caracterizado pelas letras “F”


e “C”, sendo que os com letra “F” possuem memória flash (EEPROM) e
os com letra “C” possuem memória EPROM (grava uma única vez). Os
microcontroladores PIC com a letra “F” são mais utilizados atualmente
justamente por sua capacidade de regravação do programa.
UNIUBE 55

IMPORTANTE!

Estudaremos os tipos de memória existente nos microcontroladores PIC


nos itens seguintes.

O modelo de memória pode variar conforme sua capacidade de


armazenamento ou funcionalidades. Por exemplo, um PIC 16F877
apresenta maior capacidade e funcionalidades com relação a um PIC
16F628. Tal referência nos leva à conclusão de que quanto maior for o
valor numérico do modelo, maiores seriam suas propriedades.

A nomenclatura da Microchip é particular e cada número representa uma


característica, em que o primeiro número tem um significado, o segundo,
outro significado e assim por diante.

Alguns modelos podem apresentar funcionalidades adicionais para


outros modelos com a mesma nomenclatura. O motivo é este modelo ter
sofrido atualização e recebido o caractere A no final de sua nomenclatura.
Exemplo disto é o PIC 16F877, que sofreu atualização e é encontrado
como 16F877A (foi adicionado um módulo com dois comparadores
analógicos e um módulo gerador de voltagem de referência).

2.1.4 Estrutura física

Mais uma vez, a tecnologia avança e surgem melhorias no mundo


da eletrônica, chegando a vez da miniaturização dos componentes
eletrônicos. O encapsulamento (estrutura física) também conhecido como
invólucro dos microcontroladores PIC é de um material plástico muito
resistente, com fim de protegê-los contra choques mecânicos.

Podemos encontrar microcontroladores PICs com as seguintes


características físicas Figuras 3 e 4:
56 UNIUBE

DIP:

Figura 3: Encapsulamento DIP de


um microcontrolador PIC.
Fonte: Acervo EAD-Uniube.

SMD (SOT23, SOIC, QFP etc.):

Figura 4: Encapsulamento tipo SMD de um microcon-


trolador PIC.
Fonte: Acervo EAD-Uniube.

A quantidade de pinos é específica conforme o modelo, podendo variar


de 6 a 100 pinos.

O que diferencia um encapsulamento do outro é apenas a forma física,


pois os microcontroladores PIC que encontramos nas duas opções
possuem os mesmos aspectos internos e as mesmas funcionalidades.
O que os diferencia é apenas a predisposição do espaço no circuito em
que serão empregados.
UNIUBE 57

Alguns microcontroladores PIC podem receber dados internos ou


externos ou até reprogramarem-se automaticamente sem a utilização
de um gravador físico. O processo responsável por essa gravação recebe
o nome de bootloader. O processo de envio dos dados ocorre de forma
simples, utilizando a porta serial para estabelecer a comunicação entre
o PIC e o componente bootloader (software específico para cada PIC).

O bootloader é necessário quando tratamos de PICs com encapsulamento


smd, pois a maioria dos gravadores que encontramos no mercado não
possibilita que os mesmos se encaixem para serem gravados. Sendo
assim, a forma mais prática e funcional é utilizar esse método.

AMPLIANDO O CONHECIMENTO

Conheça a linha completa de microcontroladores PIC.


Acesse o site <http://www.microchip.com>.

Vimos que existe uma vasta gama de microcontroladores PIC, variando


de tamanho, quantidade de pinos, capacidade de processamento,
capacidade de armazenagem do código fonte e, principalmente, por suas
funcionalidades.

Existe hoje no mercado a família 24 que processa dados de 16 bits e


também os mais recentes que processam dados com 32 bits.

EXEMPLIFICANDO!

Exemplo 1
Se, em um projeto, fossem necessárias 5 saídas digitais, 5 entradas digitais
e 3000 instruções (implementadas no programa), qual seria a melhor opção
dentre os microcontroladores estudados até agora?
58 UNIUBE

Resposta: todos da família 16 suprem a necessidade de entradas/


saídas digitais, embora sejam limitados pela memória de programa. O
microcontrolador ideal seria o PIC16F877, pois possui capacidade para até
9360 instruções, oferecendo até 33 opções de entrada/saída digital.

2.1.5 Modelos

No nosso estudo sobre microcontroladores PIC, estudaremos,


detalhadamente, no decorrer dos itens seguintes, apenas alguns
modelos. Esses modelos são fáceis de serem encontrados e nos
oferecem as funcionalidades que estudaremos.

Dentre os modelos existentes da família de microcontroladores PIC,


listaremos alguns mais utilizados e outros recém-lançados acompanhados
de alguns de seus diferenciais.

• PIC12F675:
– 8 pinos
– 1792B código

• PIC16C84 (“C” – gravável uma única vez):


– 18 pinos
– 1024B código

• PIC16F84:
– 18 pinos
– 1024B código

• PIC16F628A:
– 18 pinos
– 2kB código
– comparadores analógicos
– oscilador interno
– PWM
UNIUBE 59

• PIC16F877A:
– 40 pinos
– 8kB código
– conversores A/D
– PWM

• PIC18F452:
– 40 pinos
– 32kB código
– conversores A/D
– PWM

• PIC18F2550:
– 28 pinos
– 32kB código
– comunicação USB
– PWM

• PIC18F4550:
– 40 pinos
– 32kB código
– comunicação USB
– PWM

• PIC18F8520:
– 80 pinos
– 32kB código
– 5 CCP (PWM)
– 5 Timers
– 16x10 Bit Conversor A/D

• PIC24FJ128GA010:
– 100 pinos
– 128kB código
60 UNIUBE

– 84 I/O
– 5 Timers
– 16x10 Bit Conversor A/D
– PWM

• dsPIC30F3012:
– 18 pinos
– 64kB código
– recursos avançados de processamento

• dsPIC33FJ128MC708:
– 80 pinos
– 128kB código
– recursos avançados de processamento.

2.2 Funcionalidades

A maioria dos microcontroladores PIC são ferramentas universais, ou seja,


foram desenvolvidos com diversos recursos para atender à maioria das
aplicações, embora existam os microcontroladores que apresentam recursos
destinados a aplicações mais avançadas.

Veremos, a seguir, quais as principais funções e periféricos existentes em


um microcontrolador PIC, lembrando que algumas serão aprofundadas nos
itens seguintes.

2.2.1 Timers e interrupções

Timer é um item básico encontrado em todo microcontrolador PIC atual. Sua


utilização é bastante usual para fazermos interrupções no processamento do
programa, a fim de executar determinadas ações prioritariamente. O ajuste
dessa função é totalmente relacionado ao clock de processamento (ajustado
de acordo com a frequência e configurações).
UNIUBE 61

Estudaremos, a seguir, como configurar corretamente um Timer e quais


as diferenças entre os tipos existentes. Essa função é muito importante
para nosso estudo, pois é a base para aprendermos a controlar
corretamente o tempo de execução da lógica.

2.2.2 Conversores analógicos/digitais e comparadores analógicos

O conversor é analógico, como o próprio nome diz. É um dispositivo


que faz leituras de valores analógicos (variações de tensão). Com ele,
podemos efetuar leituras de tensões (limitadas pela tensão suportada
pelo microcontrolador, 3V-5V) que serão transformadas em valores
numéricos, assim poderemos fazer análises a partir desses dados.

A diferença entre um conversor e um comparador analógico é muito


grande. Tanto é que os microcontroladores que possuem conversores
analógicos apresentam um custo mais alto. O comparador analógico é
uma ferramenta de comparação de valores pré-ajustados que resultam
em um sinal digital na saída.

Com essa função, podemos ajustar uma saída digital de acordo com
dois ou mais valores de entrada analógica do microcontrolador, sendo
que pelo menos um desses valores será o valor de comparação. É muito
utilizado para aferirmos leituras de sensores (temperatura, umidade,
pressão etc.), em que configuramos o valor ideal, e assim que este valor
for ultrapassado, determinada saída do microcontrolador será atuada.

2.2.3 USARTs

A sigla USART (Universal Synchronous Asynchronous Receiver


Transmitter) se refere a um protocolo de comunicação serial. Esse
processo serial é a forma de envio de dados sequenciais (um por vez).
Apresenta simplicidade em sua estrutura de ligação, podendo haver
somente 2 fios (um para enviar e outro para receber).
62 UNIUBE

Os microcontroladores PIC, em sua maioria, já possuem uma


adaptação para utilização dessa comunicação, bastando efetuarmos as
configurações adequadas e estabelecer as ligações entre os dispositivos.
Lembrando que, para haver a troca de informação entre dispositivos com
características diferentes como o microcontrolador PIC e um computador,
há a necessidade de inserirmos um intermediador dos dados vindos do
microcontrolador para o protocolo particular do computador ou vice-versa.

EXEMPLIFICANDO!

Exemplo 2
Comunicação serial entre dois microcontroladores PIC de modelos
diferentes.

2.2.4 Outras formas de comunicação

Existem outras formas de efetuarmos a troca de informações utilizando


microcontroladores, sendo essas utilizadas especialmente para
aplicações específicas. Atualmente, a comunicação que predomina
nos equipamentos eletrônicos é a USB (Universal Serial Bus). Alguns
microcontroladores já possuíam essa forma de comunicação, como o
18F2550.
UNIUBE 63

Outras duas formas de comunicação são a I²C (Inter-Intergrated Circuit )


e a SPI (Serial Peripheral Interface), que nada mais são que protocolos
diferentes da comunicação serial, possuindo diferenças de aplicação em
algumas características.

Existe também a comunicação paralela que possui características


vantajosas para algumas aplicações, pois oferece envio de uma
sequência de dados de uma única vez. Podemos analisar, grosso modo,
como se essa comunicação fosse um aglomerado de comunicações
seriais ao mesmo tempo, fator que leva a concluir que a velocidade de
troca de informações é muito maior.

A dificuldade no tratamento dos dados, a quantidade elevada de fios


e com o avanço da velocidade de processamento dos dados, essa
comunicação está perdendo seu espaço, pois a comunicação serial
atende com louvor a maioria das aplicações e com baixo custo e
simplicidade.

2.2.5 Módulos CCP (Capture Compare Pulse) e PWM (Pulse-Width


Modulation)

Na eletrônica, é muito comum o uso de motores de corrente contínua


(motores DC ou CC). Tendo em vista este fato, os microcontroladores já
possuem, incorporados nos seus periféricos internos, dispositivos que
controlam a velocidade desses motores aplicando a mesma tensão de
saída.

PWM (Pulse-Width Modulation) significa modulação por largura de


banda. Este recurso serve para medirmos a largura (tempo) de um pulso
injetado numa porta do PIC por meio da leitura do valor do contador
Timer1 (estudaremos adiante a utilização do Timer1) quando ocorrer a
descida ou subida do pulso medido. Conseguimos com esse componente
controlar a intensidade de rotação de motores, a luminosidade de LEDs
(Light Emitting Diode) e muitos outros.
64 UNIUBE

O controlador PWM é muito útil para desenvolvermos equipamentos que


necessitem de precisão e que deixe o controle totalmente nas mãos do
programador. As portas do microcontrolador que suportam essa função
são nomeadas com a sigla CCP.

SAIBA MAIS

PWM – modulação por largura de pulso permite gerar um sinal pulsado de


frequência constante e largura de pulso variável.

2.2.6 Entrada/saída digital

Os microcontroladores PIC possuem uma grande quantidade de portas


de entrada e saída (I/Os) que conseguem fornecer ou drenar até 25mA,
conforme especificação do fabricante. A tensão é correspondente à
tensão de alimentação do microcontrolador PIC.

PONTO-CHAVE

Os pinos de entrada/saída podem ser configurados exclusivamente para


uma única função (somente entrada, somente saída ou ambos). Podem
apresentar melhor rendimento se forem bem-especificados. Veremos nos
itens seguintes como é feita a configuração para esses pinos.

2.2.7 Sistema de proteção

Os microcontroladores PIC possuem um sistema interno para reconhecer


falhas passadas, o que nos ajuda a encontrar a causa das mesmas. Como
são muito frágeis quanto à tensão de alimentação, existem ferramentas
que detectam tensões que podem provocar danos ao circuito interno.

A função responsável por indicar qual a causa do último reset é o “restart_cause”.


UNIUBE 65

2.2.8 WatchDog

O microcontrolador PIC possui muitas funcionalidades, o WatchDog


encontra-se na lista das mais interessantes. O significado do nome
WatchDog nos dá uma tradução muito curiosa (“cão de guarda”). Este
nome representa muito bem o seu papel dentro do funcionamento do
microcontrolador PIC.

O WatchDog é um contador independente da rotina da lógica. O que


acontece com este componente é que ele é incrementado internamente
e reseta automaticamente o PIC se uma determinada contagem (não
ajustável – representa um período de tempo) estourar.

Mas, o que impede o Watchdog de resetar o PIC todo o tempo?

A resposta é simples! No final de execução de cada ciclo, a


contagem do WatchDog deve ser zerada manualmente através
da função “restart_wdt( )” para impedir que a contagem estoure,
e assim dando início a uma nova contagem (geralmente inserida
no final do laço de repetição da lógica).

A sua utilização é única e exclusiva para fins de restabelecer o


sistema de um possível travamento, instabilidade da alimentação,
erros de lógica, aquecimento e outros motivos que ocasionem o
não cumprimento das instruções do microcontrolador PIC.

DICAS

Não é comum programadores optarem por lógicas com laços infinitos, caso
tenhamos que utilizar uma devemos desativar este recurso.
#FUSES WDT //Ativado
ou
#FUSES NOWDT // Desativado).
66 UNIUBE

Oscilador

O oscilador é um componente fundamental para o microcontrolador,


é ele que sincroniza todas as operações dos microcontroladores
(exceção WatchDog). É normalmente utilizado um cristal de quartzo
para ter a oscilação estabilizada (clock fixo). Alguns microcontroladores
possuem internamente dispositivos que eliminam essa necessidade até
determinadas frequências.

SAIBA MAIS

O PIC16F628/PIC16F628A possui um recurso que dispensa a utilização de


um cristal externo. Para isso, é possível configurarmos frequências até 4MHz
sem adicionar nenhum estabilizador de clock.

Teoricamente o ritmo do processador se daria simplesmente pelo ajuste


do oscilador, mas isso não acontece. Cada instrução é executada em
vários ciclos e essa quantidade de ciclos não é comum em todos os
modelos de microcontroladores.

Calcularemos corretamente qual a frequência do oscilador necessária


para cada aplicação ao estudarmos detalhadamente os Timers, pois
estão diretamente relacionados.

RELEMBRANDO

Os microcontroladores PIC são ferramentas universais, por isso possuem


muitas utilidades, havendo ainda muitas outras além das citadas neste
conteúdo.

Os fatores que influenciam o processamento das instruções de um


microcontrolador PIC são o modelo de microcontrolador e a frequência
do cristal estabilizador de quartzo escolhido.
UNIUBE 67

2.3 Desbravando o microcontrolador PIC16F628A

• 2k bytes de memória de programa:


- vamos descrever como são feitos os cálculos para saber o quanto
representa esse valor para os programadores. Trabalhamos com
binários (0 e 1), portanto será 2 elevado a 14 (tamanho em bits de
cada posição) dividido por 14:
2^14 = 16.384 / 14 = 1.170 *2(memória de programa/1000) = 2.340
instruções;

• 128 bytes de memória EEPROM:


- serve para fixar dados adquiridos durante a execução e não serem
perdidos após perder alimentação;

• 223 bytes de RAM:


- utilizada para criação de variáveis;

• 15 pinos de entrada/saída.

• 1 pino de interrupção;

• 3 timers contadores de 8/16/16 bits;

• PWM:
- lembrando que PWM significa modulação por largura de pulso,
podemos variar a luminosidade de um LED ou até controlar a
velocidade de um motor;

• USART:
- comunicação serial entre dispositivos;

• WatchDog:
- verificador de erros (reset automático);
68 UNIUBE

• Comparadores analógicos:
- compara uma tensão de entrada com relação a uma tensão fixa
definida em outra entrada.

EXEMPLIFICANDO!

Exemplo 4
O PIC16F628A suporta um programa de 3000 instruções? Qual PIC seria
sugerido para suprir essa necessidade?

Não, seu limite é de 2.340 instruções. O recomendado seria a utilização de


um microcontrolador que tivesse uma memória de programa superior a 3k.

2.3.1 Diagrama de pinagem

Na Figura 5, estão descritos cada pino existente no microcontrolador


PIC16F628A. Vamos perceber que a maioria dos pinos possui mais de
uma nomenclatura; isso significa que estes pinos possuem mais de uma
funcionalidade ajustada por parâmetros configurados manualmente (no
programa).

Figura 5: Diagrama de pinagem do microcontrolador PIC16F628A.


Fonte: Adaptado de: < http://msxrevival.files.wordpress.com/2012/03/pi-
c16f628a.jpg>
UNIUBE 69

2.3.2 Descrição funcional dos pinos

Quadro 2: Descrição funcional dos pinos

Ra2 Port A bit 2 – Entrada/Saída


PINO
AN2 Entrada analógica 2 para o comparador analógico
1
Vref Saída de tensão de referência do comparador analógico
Ra3 Port A bit 3 – Entrada/Saída
PINO
AN3 Entrada analógica 3 para o comparador analógico
2
CMP1 Saída do comparador 1
Ra4 Port A bit 4 – Entrada/Saída
PINO
CMP2 Saída do comparador 2
3
TOCKI Entrada do comparador TMR0
Ra5 Port A bit 5 – Entrada/Saída
PINO Reset quando tensão for igual Vss. Manter sempre
MCLR
4 igual Vcc para ligar microcontrolador
Vpp Entrada de tensão de programação
PINO
Vss GND ou terra “-V“
5

PINO Rb0 Port B bit 0 – Entrada/Saída


6 INT Entrada para interrupção
Rb1 Port B bit 1 – Entrada/Saída
PINO
RX Recepção da comunicação serial assíncrona (USART)
7
DT Dados para comunicação serial síncrona (USART)
Rb2 Port B bit 2 – Entrada/Saída
Transmissão da comunicação serial assíncrona
PINO TX
(USART)
8
Clock que permite comunicação serial síncrona
CK
(USART)

PINO Rb3 Port B bit 3 – Entrada/Saída


9 CCP1 PWM
PINO
Rb4 Port B bit 4 – Entrada/Saída
10
PGM Usado na programação com baixa tensão (5V)
70 UNIUBE

PINO
Rb5 Port B bit 5 – Entrada/Saída
11
Rb6 Port B bit 6 – Entrada/Saída

PINO T1OSO Saída para cristal externo


12 T1CK Entrada do contador TMR1
PGC Clock na programação serial (ICSF)
Rb7 Port B bit 7 – Entrada/Saída
PINO
T1OSI Entrada para cristal externo
13
PGD Entrada de dados da programação serial (ICSP)
PINO Alimentação positiva – colocar capacitor 100nF –
Vcc
14 250Vcc
Ra6 Port A bit 6 – Entrada/Saída
PINO OSC2 Saída para oscilador – cristal quartzo
15
Saída de frequência que entra em OSC1 – Ciclo de
CLKOUT
máquina
Ra7 Port A bit 7 – Entrada/Saída
PINO
OSC1 Entrada para oscilador – cristal quartzo
16
CLKIN Oscilador externo RC

PINO Ra0 Port A bit 0 – Entrada/Saída


17 AN0 Entrada analógica 0 para o comparador analógico

PINO Ra1 Port A bit 1 – Entrada/Saída


18 AN1 Entrada analógica 1 para o comparador analógico

RELEMBRANDO

O PIC16F628 possui um cristal oscilador interno, por isso não necessitamos


utilizar um cristal oscilador externo.

2.4 Conhecendo o PIC16F877A

Conhecendo a distribuição dos pinos do PIC16F877A e analisando a


Figura 6.
UNIUBE 71

Figura 6. Diagrama de pinagem do microcontrolador PIC16F877A.


Fonte: Adaptado de: <http://www.sabereletronica.com.br/secoes/leitura/1669>.

O PIC16F877A é um dentre dos mais conhecidos e utilizados microcon-


troladores da Microchip. Se olharmos a Figura 6, veremos que este
microcontrolador PIC possui 40 pinos, sendo que 33 podem ser progra-
mados atuando como entrada/saída ou alguma função específica (própria
de cada pino). Possui todas as funções pertencentes ao modelo visto
anteriormente com algumas funcionalidades a mais.

Vamos agora citar as funcionalidades que o destacam dos outros


modelos:

• 8 entradas analógicas;
• 3 timers (8/8/16 Bits);
• WatchDog;
• 2 módulos CCP (PWM);
• Disponibilidade no encapsulamento DIP e SMD;
• Fácil comercialização;
• Custo baixo;
72 UNIUBE

• Capacidade de memória de programa razoável;


• Memória flash interna (gravar dados que permaneceram mesmo
sem energia).

Pertence à família que processa dados de 8 bits, possui núcleo de 14 bits


de processamento e pode trabalhar com frequências até 20MHz.

EXEMPLIFICANDO!

Exemplo 5
Analisando dois sistemas independentes (igualmente configurados), um
utilizando cristal de 4mhz e outro cristal de 18MHz, qual deles oferece maior
velocidade de processamento? Quantas vezes maior?

Resposta: Quanto maior o valor do cristal, maior será a velocidade do


processamento. A relação é direta, então um será quatro vezes e meia mais
rápido.

Podemos executar diversas tarefas com o PIC16F877A; vamos destacar


algumas:

• ler tensões de dispositivos analógicos;


• controlar a velocidade de um motor;
• controlar a luminosidade de uma lâmpada ou um LED;
• construir placas de circuito impresso reduzida com encapsulamento smd;
• controlar 33 dispositivos diretamente sem auxílio de multiplexadores;
• armazenar dados coletados durante seu funcionamento;
• comunicar com outros dispositivos eletrônicos via comunicação
serial;
• controlar displays de LCD (caráter e gráfico);
• relógios digitais.
UNIUBE 73

O PIC16F877A é um dos mais conhecidos no meio da educação, por


ser um microcontrolador com muitos recursos, baixo custo e pode ser
encontrado facilmente no mercado e atende à maioria das aplicações.

Resumo

A história da evolução dos componentes eletrônicos está diretamente


ligada à vida dos microcontroladores atuais, cheios de tecnologias
e aprimoramentos. Neste capítulo, aprendemos de onde vieram os
microcontroladores, conhecemos o seu funcionamento interno e as
suas diferenças com os sistemas anteriores. Vimos que existem muitos
modelos de microcontroladores da Microchip disponíveis para diversas
aplicações.

Foram feitas visões superficiais de muitas das funcionalidades existentes


nesse componente. Importantes detalhes foram estudados e que farão
muita diferença na hora de desenvolvermos futuramente um projeto
completo que envolva microcontroladores. Conhecemos o alicerce para
a criação de projetos microcontrolados. Foi dada ênfase aos conceitos
mais importantes sobre a linhagem dos microcontroladores PIC.

Dentre os mais conhecidos e utilizados microcontroladores PIC (para


os educadores), vimos detalhadamente as características internas
(construção) e funcionais de dois desses equipamentos. As aplicações
citadas no decorrer do estudo podem perfeitamente ser implementadas.

Esse é o espírito deste aprendizado: focar corretamente os estudos,


sendo direcionados ao desenvolvimento. Com os conhecimentos
adquiridos, agora podemos evoluir nossos estudos e partir para novas
etapas. É importante que as definições referidas ao longo do capítulo,
sejam levadas adiante e, se possível, aprimoradas.
74 UNIUBE

Atividades

Atividade 1

Explique o que representa a nomenclatura RISC na eletrônica.

Atividade 2

Responda onde é utilizado o termo Pipelining.

Atividade 3

Quantas instruções o programador consegue inserir em um


microcontrolador com 6k bytes de memória de programa (14 bits por
posição)?

Atividade 4

Se a intenção do projeto for garantir a segurança de um equipamento,


quais os métodos que poderão ser implementados para assegurar um
bom funcionamento do microcontrolador ou pelo menos indicar as causas
de falhas?

Atividade 5

Quantas vezes podemos gravar um microcontrolador PIC da família


16CXXX e um da família 16FXXX?
UNIUBE 75

Referências
PEREIRA, Fábio. Microcontroladores PIC: técnicas avançadas. 5. ed. São Paulo:
Érica Ltda., 2007.

SILVA, Rafael. Introdução à família de microcontroladores


PIC: The Bug Magazine. 8º artigo. São Paulo, 2006.

ZANCO, Wagner da Silva. Microcontroladores PIC: técnicas de software e


hardware para projetos de circuitos eletrônicos. 10. ed. São Paulo: Érica Ltda., 2006.
Capítulo
Memória no
microcontrolador PIC
3

Rhafael Pansani Godinho

Introdução
Neste capítulo, teremos a oportunidade de estudar e compreender
o papel da memória nos microcontroladores. Para tanto, faremos
algumas comparações entre a memória humana e a memória
computacional. Com tais comparações, veremos que há muitas
semelhanças e que, principalmente, assumem o mesmo papel
dentro de seus minimundos.

Enfocaremos como os dados são armazenados em meios físicos e


as aplicações desses armazenamentos nos processos industriais.

Para acessar posições na memória, é necessário utilizar padrões


de linguagens e invocar funções que serão aprendidas no decorrer
do capítulo, juntamente com as definições próprias de cada uma.

A partir deste capítulo, trataremos a memória não como algo comple-


mentar para o processamento, mas sim como peça fundamental para
a vida da eletrônica “inteligente” (microprocessada).

Complementando o início de nosso estudo e já caminhando para


níveis mais práticos, o estudo da memória no microcontrolador
PIC será de grande importância para seguirmos nos capítulos
seguintes.
78 UNIUBE

Objetivos
Ao finalizar os estudos propostos neste capítulo, espera-se que
você saiba:

• identificar o que é memória computacional;


• inferir sobre a organização da memória no microcontrolador PIC;
• descrever o que são registradores;
• operar os registradores de funções especiais nos microcon-
troladores PIC.

Esquema
3.1 Memória computacional
3.1.1 Tipos de memória
3.2 Armazenamento dos dados na memória
3.2.1 Modos de endereçamento
3.3 Organização da memória no PIC
3.3.1 Arquitetura
3.3.2 Memória de dados
3.3.3 Memória de programa
3.4 Registradores
3.4.1 Registradores de uso geral
3.4.2 Registradores de funções especiais

3.1 Memória computacional

Vimos, anteriormente, a importância do processador para os equipa-


mentos eletrônicos. Equipamentos que processam dados obrigatoria-
mente necessitam armazenar os resultados de seu processamento e
reaproveitá-los na maioria das vezes.
UNIUBE 79

A memória surgiu a partir dessa necessidade de armazenar dados,


temporariamente ou permanentemente.

Acompanhando a evolução das tecnologias, as memórias se tornaram


algo muito valioso e alguns especialistas comparam-nas com a
memória humana. É antiga a comparação que se faz entre memórias
computacional e humana, pois ambas assumem papéis importantíssimos
nos seus minimundos.

Quando comparamos a memória humana com a memória computacional,


é que de fato percebemos o quanto esse equipamento tem vital
importância na eletrônica e logo percebemos o quanto é importante essa
comparação.

Utilizando um pouco nossa imaginação, podemos perceber que, para


alguns casos, a nossa memória supera a memória computacional e, em
outros casos, ocorre o contrário.

Para entendermos, de fato, o que significa memória, iremos um pouco


além da eletrônica. Quando precisamos utilizar alguma informação que
nos chegou em um determinado momento, o que fazemos? Pegamos
uma folha de papel e escrevemos. Esse ato de inserir informação em
um recipiente ou objeto é o mais simples método de armazenamento de
dados já conhecido.

Contudo, outra pergunta nos surge: se nosso organismo, ou mesmo,


nosso cérebro, é tão evoluído, por que precisamos armazenar essas
informações em meios físicos e não somente em nossas memórias?
Essa é uma pergunta de muitas respostas, pois a memória humana varia
de pessoa para pessoa, a capacidade de armazenamento varia conforme
a preparação sofrida pelo sistema (cérebro). Talvez por isso o cérebro
humano seja tão extraordinário, pois possui a capacidade de evoluir,
melhorar seu processamento e sua memória.
80 UNIUBE

Tocamos em um fato importante que é de muita relevância para nosso


estudo. A capacidade de evoluir do cérebro é o que nos torna criaturas
superiores às demais; no entanto, essa característica pode estar sujeita
a alterações devido ao aumento do uso das tecnologias na nossa vida.

Como já foi exaustivamente estudado pelos pesquisadores e estudiosos


como Darwin e sua teoria da evolução, os seres vivos evoluem conforme
necessidade de sobrevivência. Isso nos leva a pensar que poderemos
entrar num período de decadência (desuso) da memória humana.

Não mais memorizamos números telefônicos, compromissos ou qualquer


outro dado ou fato, nem sequer conseguimos registrar em nossas
memórias humanas imagens de momentos importantes que passamos,
pois fazemos de nossas câmeras, que hoje são digitais de alta tecnologia,
um bem indispensável que nos facilita quando queremos lembrar algo.

Dessa forma, tornamo-nos seres acomodados e queremos cada vez


mais ferramentas que nos ajudem e que, principalmente, nos poupem
algum trabalho.

Um ponto de vista defende a hipótese de que teremos de evoluir para


conseguirmos acompanhar a evolução das tecnologias, para assim
podermos utilizá-las.

Outro ponto de vista defende que a diminuição da necessidade de utilizar


as capacidades do cérebro irá provocar uma desaceleração, senão um
retardamento, da evolução de nossas funções cerebrais.

Bem, temos agora uma questão importante para refletirmos.

Agora, que já falamos um pouco sobre o que é memória, destacamos


dois tipos de memória, mas ambas possuindo o mesmo propósito, o de
armazenamento de dados, vamos nos deter na memória computacional.
Ela é um tipo de memória que utiliza a eletricidade ou a energia
magnética, como meio para armazenar os dados, e é também conhecida
como memória artificial.
UNIUBE 81

3.1.1 Tipos de memória

Alguns conceitos já foram vistos por nós nos capítulos anteriores. Agora,
iremos reforçar nosso aprendizado, descrevendo-os com maiores
detalhes.

Os vários tipos de memórias existentes são utilizados em diversas


aplicações. Para cada aplicação, existe um tipo de memória que
atende melhor à exigência do sistema. Complementando nosso estudo,
estudaremos os tipos de memórias mais conhecidas e que foram ou que
ainda são utilizadas na eletrônica.

Basicamente, as memórias estão classificadas em dois grandes grupos:


volátil e não volátil.

Memória volátil

Memória que necessita de uma fonte de alimentação para manter os


dados armazenados (Quadro 1).

Quadro 1: Memória volátil - exemplos

RAM (Random-Access Memory – Memória de Acesso Aleatório)


Essa memória permite gravações e acessos muito rápidos; por
esse motivo é utilizada pelo processador como “companheira” de
processamento e armazena todo tráfego de dados que ocorre em um
sistema que utiliza esses componentes.
SRAM (Static Random-Access Memory – RAM Estática)
Tipo de memória RAM que prioriza a velocidade de armazenamento e
não a capacidade em bytes.
DRAM (Dynamic Random-Access Memory – RAM Dinâmica)
A DRAM, contrário à memória SRAM, prioriza a capacidade em
detrimento da velocidade.
MRAM (Magnetoresistive Random-Access Memory – RAM Magneto-resistiva)
Nessa memória, os dados são armazenados por células magnéticas,
que consomem menor quantidade de energia e proporcionam maior
velocidade de leitura e gravação. Essa memória talvez não se
enquadre tão perfeitamente na categoria volátil, pois seus dados não
se perdem na falta de energia.
82 UNIUBE

Memória não volátil

Memória que não necessita de fonte de alimentação para manter os


dados armazenados (Quadro 2).

Quadro 2: Memória não volátil - exemplos

ROM (Read-Only Memory – Memória Somente de Leitura)


Memória que pode ser gravada uma única vez e que não pode ser
apagada. São memórias somente para leitura. Contém informações de
fábrica e que são vitais para os sistemas em que foram implantadas.
PROM (Programmable Read-Only Memory)
Um tipo de memória ROM que é gravada por meio de reação física
entre elementos elétricos. Os dados não podem ser apagados nem
alterados.
EPROM (Erasable Programmable Read-Only Memory)
O primeiro tipo de memória que permite regravação. O método para
apagar os dados ocorre por meio da luz ultravioleta (luz do sol ou
elemento emissor).
EEPROM (Electrically-Erasable Programmable Read-Only Memory)
Uma variação da memória EPROM que, em vez de apagar os dados
armazenados por meio da luz ultravioleta, apaga-os por meios
elétricos. Pode ser apagada e reescrita entre 100.000 e 1 milhão de
vezes.
EAROM (Electrically-Alterable Programmable Read-Only Memory)
Uma variação da memória EEPROM, permite que os dados sejam
editados. A reescrita parcial dos dados faz com que esse tipo de
memória seja utilizado em aplicações específicas que necessitem
dessa característica. Os dados são apagados eletricamente.
FLASH
A memória flash é também uma variação moderna da memória
EEPROM, sendo modificado o método de inserção dos dados que
ocorrem bloco a bloco e não bit a bit, como a memória EEPROM.
CD-ROM/DVD-ROM
Essas memórias são os tipos de memórias mais conhecidos e que
contam com o maior número de equipamentos que as utilizam como
meio de armazenamento.

No Quadro 3, veremos uma comparação simplificada entre as memórias


EPROM, EEPROM e flash.
UNIUBE 83

Quadro 3: Comparação entre memórias de armazenamento não voláteis

Dispositivo EPROM FLASH EEPROM

Tamanho da célula 1.0 1.0 – 1.2 3.0

Mecanismo de
Eletricamente Eletricamente Tunelamento
programação
Mecanismo
Luz ultravioleta Tunelamento Tunelamento
para apagar

Tempo para apagar 20 minutos 1 segundo 0,005 segundos

Mínimo para apagar Todo chip Todo chip ou setor Byte

Tempo de gravação < 0,0001


< 0,0001 segundos 0,005 segundos
(por célula) segundos

Tempo de acesso 200 nano 200 nano


35 nano segundos
(leitura) segundos segundos

Fonte: Adaptado de De Martino (2010).

As pastilhas de memória EPROM possuem certa padronização. O


motivo é para também padronizarem os equipamentos que viabilizam o
apagamento da mesma, via luz ultravioleta.

AMPLIANDO O CONHECIMENTO

Você sabe quais são as principais diferenças entre as memórias RAM


e ROM?

As memórias RAM são para acessos rápidos e não mantêm os dados


sem fonte de energia. As memórias ROM são memórias para grandes
quantidades de armazenamento e possuem tecnologias com menor
velocidade de leitura e gravação, além de manterem os dados na ausência
da fonte de energia.
84 UNIUBE

3.2 Armazenamento dos dados na memória

O armazenamento de dados nas memórias RAM ocorre basicamente


através de capacitores e transistores. Sendo o capacitor responsável
por armazenar carga elétrica e o transistor para controlar a passagem
da mesma.

Se o capacitor estiver armazenando energia, tem-se um bit 1, caso


contrário tem-se um bit 0.

As memórias são formadas por um número elevado desses componentes.


Uma memória de 1 GB que utilizamos nos computadores, por exemplo,
é formada por cerca de 1 bilhão desse conjunto (transistor e capacitor).

As memórias são equipamentos simples de se construir se comparados com


microprocessadores ou outros componentes. Até o momento, as memórias
não conseguiram acompanhar o avanço dos microprocessadores. O
tempo de resposta de uma memória seja ela RAM ou outra, é muitas
vezes inferior à chamada do processador, fazendo-o “esperar”.
O “esperar” do processador não significa que ele irá parar seu
processamento, ele irá apenas executar seus ciclos continuadamente
até que a memória esteja pronta.

É importante sabermos que a memória não exerce nenhum tipo de


processamento, ela apenas é utilizada para armazenar dados. Por
esse motivo, é necessário utilizar um componente chamado controlador
de memória que serve para intermediar a troca de dados com o
microprocessador.

Vamos agora entender como são distribuídas as informações dentro


desse componente tão importante para o microcontrolador.

As diferentes posições de memória (espaços) são organizadas em uma


espécie de matriz (linha e coluna), como podemos ver na Figura 1.
UNIUBE 85

Figura 1: Circuito para memória flash.


Fonte: Adaptado de Morimoto (2010).

A leitura e gravação dos dados na memória ocorrem da seguinte maneira:


o controlador gera o RAS (Row Address Strobe – endereço de linha), em
seguida gera o CAS (Column Address Strobe – endereço da coluna).
Ao enviar o RAS, toda linha é ativada simultaneamente, e depois de
uma curta espera, o CAS é enviado, fechando o circuito e concluindo o
processo.

O cruzamento desses dois endereços (analise Figura 1) é o que


conhecemos como endereço de memória.

A seguir, conseguiremos visualizar, na Figura 2, como é o circuito interno


de acesso a uma memória flash.
86 UNIUBE

Figura 2: Circuito para memória flash.


Fonte: Adaptado de De Martino (2010).

3.2.1 Modos de endereçamento

Os locais da memória RAM podem ser acessados para escrita ou leitura


de forma direta ou indireta.

Endereçamento direto

No endereçamento direto, são enviados nove bits, sendo sete bits


da instrução e mais dois bits (RP1 e RP0) do registro de Status. Os
endereçamentos diretos são referentes às chamadas de registros
especiais (SFR). As figuras 3 e 4 melhor representam as separações
dos bits nos endereçamentos direto e indireto.
UNIUBE 87

bits

bits

Figura 3: Endereçamento direto.


Fonte: Adaptado de MICROCHIP (2012, p.24)

Endereçamento indireto

No endereçamento indireto, diferentemente do direto, são enviados oito


bits. O primeiro bit é o IRP do registro de STATUS e os demais sete bits
são do registro FSR. A forma de acesso indireto ocorre por ponteiros,
que são locais de memória que apontam para outros locais de memória.
Supondo que um registro de endereço 0Fh contém o valor vinte decimal,
escreveremos o valor de 0Fh no registro FSR para obtermos um ponteiro
que aponta para 0Fh.

Isso que acabamos de fazer foi nos referenciarmos ao endereço 0Fh


indiretamente, já que conseguimos acessar ou alterar seu conteúdo sem
mencioná-lo.

Existem aplicações específicas que utilizam esse recurso, que pode


parecer não muito útil à primeira vista.
88 UNIUBE

Figura 4: Endereçamento indireto.


Fonte. Adaptado de MICROCHIP (2012, p.25).

3.3 Organização da memória no PIC

3.3.1 Arquitetura

A arquitetura da memória nos microcontroladores PIC utiliza dois


barramentos de endereços distintos, um para acessar instruções e outro
para acessar os dados, como mostra a Figura 5.

Figura 5: Figura meramente ilustrativa de como seria a arquitetura do microcontrolador PIC


quanto à memória.
UNIUBE 89

Vamos imaginar a memória como uma gigantesca prateleira onde temos


muitas gavetas. Para encontrar determinadas gavetas, precisamos
de informações sobre elas (endereços). Uma memória dentro de um
microcontrolador PIC é muito parecida com essa referência que fizemos
anteriormente, a memória possui endereços para cada posição de
armazenamento.

Quando alguma informação estiver pronta para ser armazenada, funções


de registro deverão ser invocadas, e são elas as responsáveis por
localizar o espaço de memória especificado por um endereço.

A memória dentro de um microcontrolador PIC é dividida basicamente


em dois blocos, um para memória de dados e outro para a memória de
programa.

Os microcontroladores PIC são classificados por diversas características,


dentre elas o tamanho da palavra da memória de programa: 12, 14, 16
e recentemente os de 24 bits (dsPIC).

O tamanho da palavra da memória de programa define a quantidade de


instruções que o PIC suporta. O PIC de 12 bits possui 33 instruções, já
o PIC de 14 bits possui 35 instruções, e o PIC de 16 bits possui até 77
instruções.

Estudamos, nos capítulos anteriores, qual o papel do número de


instruções e vimos que quanto menor o número de instruções melhor
seria o rendimento do processamento de dados desse microcontrolador.
Alguns PICs podem chegar a uma taxa de processamento de até 5 MIPS
(cinco milhões de instruções por segundo), trabalhando com frequência
de 20 Mhz ou até mesmo 10 MIPS a 40 Mhz.

Estudaremos, nesse capítulo, características da memória de dados, que


também qualificam o microcontrolador PIC em determinadas categorias.
90 UNIUBE

DICAS

Lembre-se da importância de se preocupar com a capacidade de


armazenamento (memória). Isso é essencial no momento de escolhermos
um microcontrolador para um projeto.

3.3.2 Memória de dados

A memória de dados é constituída por dois tipos de memória: EEPROM


(Electrically-Erasable Programmable Read-Only Memory) e a RAM
(Random Access Memory). A memória EEPROM é utilizada para armaze-
nar informações mesmo após o microcontrolador ser desenergizado. A
memória RAM é chamada de memória de uso geral.

Ambas as memórias citadas são acessadas durante a execução do


programa.

Durante o processamento, todo o tráfego de dados intermediário ou


temporário passa pela memória RAM. A memória RAM é também
conhecida como memória temporária por ser uma memória volátil.

Geralmente, os microcontroladores possuem pequenas reservas de


memória que podem ser gravadas durante sua execução (memória
flash). O método de inserção das informações para os locais reservados
ocorre utilizando registros particulares (EEADR e EEDATA).

Na memória RAM, são carregadas todas as informações do programa e


dados do operador, assumindo um papel de importância elevada na vida
de um processamento, pois trabalha em conjunto com o processador
(microprocessador em se tratando de microcontroladores).

Dentro de uma memória RAM, encontramos um mapa que é utilizado


pelo programa para encontrar os dados.
UNIUBE 91

O mapa de memória é diferente para cada categoria de microcontrolador


da empresa Microchip, variando desde o endereço dos registradores até
a quantidade e tipo dos mesmos.

Nas figuras 6 e 7, visualizaremos as diferenças da constituição do mapa


de memória dos microcontroladores PIC16F62X e PIC16F87X.

Figura 6: Mapa da memória de dados de um microcontrolador PIC16F628 / 628A / 627.


Fonte: MICROSHIP (2010).
92 UNIUBE

Veremos que, como dissemos anteriormente, a memória é como


uma grande prateleira com muitas gavetas, sendo que essas gavetas
possuem endereços e são essencialmente utilizadas para abrigar os
registradores internos.

Ao tratarmos dos registradores, podemos dividir a memória RAM em duas


partes: uma responsável por abrigar os registradores de funções especiais
(SFR) e outra por abrigar os registradores de propósitos gerais (GPR).

Mais adiante falaremos dos registradores, quais suas funções e como são
utilizados.

Ao analisarmos as figuras 6 e 7, notamos que alguns nomes se


repetem em várias posições da memória. Isso atende ao fato de que,
no momento da execução do processamento, o programa não tenha
que ficar trocando os dados de posições. Trocando em miúdos, dentro
da memória existem posições que se referenciam a outras, além de ter
também posições que armazenam registros iguais, o que permite ao
programa executar ações repetidas.
UNIUBE 93

Figura 7: Mapa da memória de dados de um microcontrolador PIC16F877 / 876.


Fonte: Adaptado de MICROSHIP (2010).

É fundamental que saibamos que cada posição contida na memória


é uma representação de 8 bits. Cada bit é responsável por alguma
característica. Aqui serão estudadas algumas posições detalhadamente
ao longo deste estudo da memória do PIC.

SAIBA MAIS

A memória EEPROM serve para armazenar dados que serão escritos


durante a execução do programa. Podem ser manipuladas milhares de
vezes, sendo que, para leitura, não existe um limite. São utilizadas quando
há a necessidade de manter dados recebidos durante a execução do
sistema microcontrolado.

3.3.3 Memória de programa

A memória de programa representa o próprio sentido do seu nome. Essa


é a memória responsável por armazenar as instruções (programa). O
94 UNIUBE

conjunto de instruções forma o programa, que é escrito pelo usuário.


Ainda iremos estudar como se procede a gravação dos microcontroladores
PIC, portanto não devemos nos preocupar agora com esse processo.

Quanto à construção, a memória de programa utiliza tecnologia flash,


que é um tipo de memória derivada da memória EEPROM.

A memória flash pode ser considerada uma evolução de sua “mãe”, a


EEPROM. Ambas permitem serem gravadas e apagadas muitas vezes.

A diferença de modernização de uma para outra é a forma como são


escritos e armazenados os dados em cada uma. Na memória EEPROM,
a escrita é feita bit a bit e na memória flash a escrita ocorre bloco a bloco.

Os microcontroladores PIC atuais são ferramentas para utilização em


projetos em geral. A capacidade de se reprogramar até milhares de
vezes, oferece aos desenvolvedores uma oportunidade de fazer testes
sem que haja a necessidade de o programa estar totalmente completo.

Durante o desenvolvimento de um equipamento ou sistema, muitas vezes


ocorrem problemas na lógica, e, na maioria das vezes, esses problemas
somente serão vistos após testes reais. Já prevendo essas supostas
alterações, os desenvolvedores pensaram em integrar esse tipo de
memória nos microcontroladores.

SAIBA MAIS

Novas tecnologias em memória de armazenamento estão surgindo no


mercado (FRAM e MRAM), e logo substituirão as memórias EEPROMs em
determinadas aplicações.

A capacidade de armazenamento da memória de programa é a principal


especificação que devemos observar na escolha de um microcontrolador
PIC. O espaço destinado ao programa é o que talvez defina qual o custo
e o tamanho do microcontrolador.
UNIUBE 95

Para escolhermos um microcontrolador, inicialmente devemos analisar


sua nomenclatura. Estudamos o que representa cada letra e número
presente na nomenclatura desse equipamento, portanto sabemos que o
caractere “F” contido no meio do nome se refere aos microcontroladores
que possuem memória flash para o armazenamento do programa. Os
microcontroladores com o caractere “C” no nome são componentes que
podem ser gravados uma única vez.

No Quadro 4, estão listados alguns microcontroladores com suas


respectivas capacidades de memória.

Quadro 4: Lista de microcontroladores e suas capacidades de armazenamento

Microcontrolador Memória de Memória Qtde de


Memória RAM
PIC Programa EEPROM pinos
12C672 3584 bytes 128 bytes – 8

12F675 1792 bytes 64 bytes 128 bytes 8

16C77 8 Kbytes 368 bytes – 40

16F84 1024 bytes 68 bytes 64 bytes 18

16F628A 2048 bytes 224 bytes 128 bytes 18

16F877A 8 Kbytes 368 bytes 256 bytes 40

18F452 32 Kbytes 1536 bytes 256 bytes 40

18F4520 32 Kbytes 1536 bytes 256 bytes 40

18F8520 32 Kbytes 2048 bytes 1024 bytes 80

24FJ128GA010 128 Kbytes 8 Kbytes – 100

dsPIC30F2011 24 Kbytes 2048 bytes 1024 bytes 18 ou 28

Quanto à tecnologia empregada na memória de programa, veremos que


existem outros três tipos além do tipo flash que citamos anteriormente.
A diferença básica existente entre elas é a forma de gravação, que
identificaremos estudando cada uma separadamente. Importante
96 UNIUBE

sabermos que as variações de memória de programa que veremos, a


seguir, são todas memórias não voláteis, que não perdem os dados após
serem desenergizadas.

– ROM do tipo máscara: recebe esse nome por ser o nome


dado ao método de gravação. Essa memória já é gravada de
fábrica e possui o menor custo unitário. São identificadas pelo
sufixo “CR”.

– OTP: memória do tipo PROM. Essa memória sai de fábrica da


mesma forma que saem os CD’s “virgens”. Dados gravados
não podem ser apagados. São identificadas pelo sufixo “C”.

– EPROM: dispositivos ROM e OTP são encontrados com


memória do tipo EPROM, embora sejam mais caras e
normalmente são utilizadas em fases de desenvolvimento
e testes. São identificadas pelo sufixo “JW” em chips com
encapsulamento DIP e “CL” em chip com encapsulamento
PLCC.

– Flash: o tipo mais comum de memória utilizada nas famílias


de microcontroladores PIC. Permite um mínimo de 1000
regravações (grava/apaga). O custo é superior ao do tipo OTP,
embora esse não seja um agravante, já que as memórias
do tipo flash oferecem um recurso muito útil, que é o de
regravação não presente em nenhuma outra. São identificadas
pelo sufixo “F”.

A capacidade de armazenamento nos microcontroladores PIC da família


16 chega ao máximo 8 Kbytes, ou seja, 8192 posições de memória (bits).
Essas posições são divididas em blocos ou páginas, cada uma com 2
Kbytes (2048 posições), que é decorrente das limitações impostas pelas
instruções RISC.

Outros PICs, como o 16F628, que possuem apenas 2 Kbytes, possuem


apenas uma página de memória de programa.
UNIUBE 97

No Quadro 5, a seguir, temos o diagrama da estrutura interna de


endereçamento da memória de programa dos microcontroladores PIC
da família 16.

Quadro 5: Endereçamento e paginação da memória dos PICs da família 16

Endereço Descrição Nº Página/Bloco


0x0000 Vetor de Reset
...
0x0004 Vetor de Interrupção Página 0
...
0x07FF Final da Página 0

0x0800 Início da Página 1


... Página 1
0xFFF Final da Página 1

0x1000 Início da Página 2


... Página 2
0x17FF Final da Página 2

0x1800 Início da Página 3


... Página 3
0x1FFF Final da Página 3

Fonte: Adaptado de Pereira (2007).

O mecanismo de paginação (troca de página) é transparente, não sendo


necessária intervenção do usuário.

EXEMPLIFICANDO!

Somar o valor hexadecimal 10 com o conteúdo da porta A e armazenar na porta B


do PIC. Instruções em Assembly.
Endereço Instrução
...
0x07FE MOVF PORTA,W ;Move o conteúdo da porta A para W
0x07FF ADDLW 0X10 ;Soma 10 ao conteúdo de W
98 UNIUBE

0x0800 MOVMF PORTB ;Copia o conteúdo de W para porta B


0x0801 BCF INTCON,GIE ;Desliga as interrupções

3.4 Registradores

Os registradores são responsáveis pela execução de tudo em um


microcontrolador e estão localizados em determinadas posições da
memória RAM. São eles que manipulam o processamento dos dados e
funções. Em uma soma, por exemplo, vários registradores são invocados.
Esses registradores são agrupados em quatro blocos, como vimos nas
figuras 6 e 7.

Na Figura 8, encontramos um exemplo do papel dos registradores.

Figura 8: Exemplo de operação que ocorre durante uma execução.


Fonte: Adaptado de Caloni (2010).

A memória RAM é dividida em 2 conjuntos de registradores: registradores


de funções especiais e registradores de uso geral.
UNIUBE 99

3.4.1 Registradores de uso geral

Os registradores de uso geral são utilizados para executar ações como:


armazenamento temporário de dados e resultados que são criados no
decorrer da execução do programa. Podem conter qualquer tipo de
dados e não necessitam se referenciar ao banco de memória em que
se encontram. Esses registradores são os endereços restantes de cada
banco.

3.4.2 Registradores de funções especiais

Os registradores de funções especiais (SFRs) são registros que não


podem ser alterados. São predeterminados de fábrica e qualquer alteração
sofrida pode acarretar em mau funcionamento. São classificados em duas
categorias: SFR do CPU e SFR de periféricos.

Vamos descrever os registros do PIC16F887 para melhor entendermos


o que são os registradores e como são constituídos.

Usaremos a seguinte legenda (legenda de recursos disponíveis para


cada Bit) para classificar os bits dos registradores.

– R/W: Leitura e escrita


– R/S: Leitura e pode ser definido
– R: Somente Leitura
– W: Somente Escrita
– S: Pode ser definido
– (0): Bit é zerado após reset
– (1): Bit é definido após reset
– (x): Bit é desconhecido após reset

Iremos citar inúmeros registradores, a seguir, e estudaremos alguns deles


detalhadamente, de modo que possamos conhecer suas funções.
100 UNIUBE

SFRs do CPU
Registro STATUS

STATUS
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Nome do Bit IRP RP1 RP0 TO PD Z DC C
R/W R/W R/W R R/W R/W R/W
Recurso R (1)
(0) (0) (0) (1) (X) (X) (X)

O registro STATUS contém os estados da unidade lógica e aritmética


(ULA), do reset e dos bits do banco de memória selecionado.

Este registro não é utilizado pela PIC16F84, sempre


bit 7 IRP
lido sempre como “0”

Registros de seleção do banco de registros


bit 6, 5 RP1, RP0 • 00 = Banco 0 (00H – 7FH)
• 01 = Bano 1 (80H – FFH)

Time-out
• 1 = Após power-up (ligar), instrução
bit 4 TO CLRWDT (limpar Cão de Guarda) ou
instrução SLEEP (dormir)
• 0 = Um time-out do WDT ocorreu

Power-down
• 1 = Após power-up (ligar) ou instrução
bit 3 PD
CLRWDT (limpar Cão de Guarda)
• 0 = execução da instrução SLEEP (dormir)

Resultado da operação aritmética ou lógica


bit 2 Z • 1 = É igual a zero
• 0 = Não é zero
Estado de ocorrência de transbordamento do 4º bit
mais significativo
bit 1 DC
• 1 = Ocorreu
• 0 = Não ocorreu

Estado de ocorrência de transbordamento do 7º bit


mais significativo
bit 0 C
• 1 = Ocorreu
• 0 = Não ocorreu
UNIUBE 101

Registro OPTION_REG

OPTION

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Nome do
RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0
Bit
R/W R/W R/W R/W R/W R/W R/W
Recurso R/W (1)
(1) (1) (1) (1) (1) (1) (1)

O registro OPTION_REG nos permite configurar a interrupção externa


pelo pino RB0, a interrupção do timer0, o divisor do timer0 e o divisor do
WDT (Cão de guarda, que estudaremos nos capítulos seguintes).

Habilita/desabilita pull-up’s do PORTB
bit 7 RBPU • 1 = pull-up desabilitados
• 0 = pull-up habilitado
Seleção de borda para interrupção
• 1 = Interrupção ativa na subida de borda
bit 6 INTEDG em RB0/INT
• 0 = Interrupção ativa na descida de borda
em RB0/INT

Captura do clock do timer


bit 5 T0CS • 1 = Transição em RA4/T0CKI
• 0 = Instrução interna, oscilador interno

Seleção de borda para clock


• 1 = Incrementa no nível alto para baixo na
bit 4 T0SE transição em RA4/T0CKI
• 0 = Incrementa no nível baixo para alto na
transição em RA4/T0CKI

Seleção da Divisão Escalar do Timer


bit 3 PSA • 1 = Divisão ligada ao WDT
• 2 = Divisão ligada ao TMR0

• Divisão para contagem do timer e WDT


bit 2...0 PS2...PS0
(Cão de Guarda)
102 UNIUBE

EXEMPLIFICANDO!

Configurar o registrador OPTION_REG, para que a interrupção externa do


PIC trabalhe com subida (0 para 1).
Ajustar o bit 6 para valor 1.

SRFs de Interrupções
INTCON

INTCON
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Nome do
GIE PEIE T0IE INTE RBIE T0IF INTF RBIF
Bit
R/W R/W R/W R/W R/W R/W R/W R/W
Recurso
(0) (0) (0) (0) (0) (0) (0) (X)

O registro INTCON controla várias interrupções e pinos do portB,


inclusive o de interrupção INT.

• 1 = Habilita
• 0 = Desabilita

bit 7 GIE Bit de habilitação global das interrupções

bit 6 EEIE Habilita interrupção de “fim de escrita” para EEPROM

bit 5 T0IE Habilita interrupção para over-flow do Timer

bit 4 INTE Habilita interrupção pelo pino RB0/INT

bit 3 RBIE Habilita interrupção na mudança de estado no PORTB

Flag para leitura da interrupção over-flow para o timer


bit 2 T0IF • 1 = Houve interrupção pelo timer
• 0 = Não houve interrupção pelo timer
UNIUBE 103

Flag para leitura da interrupção pelo pino RB0/INT


• 1 = Houve interrupção pelo pino RB0/INT
bit 1 INTF
• 0 = Não houve interrupção pelo pino RB0/INT

Flag para leitura da interrupção na mudança de estado


no PORTB
• 1 = Houve interrupção na mudança de estado no
bit 0 RBIF
PORTB
• 0 = Não houve interrupção na mudança de
estado no PORTB

PIE1

PIE1

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Nome
- ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE
do Bit
R/W R/W R/W R/W
Recurso - R/W (0) R/W (0) R/W (0)
(0) (0) (0) (0)

O registro PIE1 é responsável por habilitar interrupções dos periféricos.

• 1 = Liga
• 0 = Desliga

bit 6 ADIE Habilita a interrupção do conversor A/D

bit 5 RCIE Habilita a interrupção da Recepção da porta serial

bit 4 TXIE Habilita a interrupção da Transmissão da porta serial

bit 3 SSPIE Habilita a interrupção da Porta Serial Síncrona (MSSP)

Habilita a interrupção do módulo CCP1 (Captura/Compara/


bit 2 CCP1IE
PWM)

bit 1 TMR2IE Habilita a interrupção por comparação PR2 e TMR2

bit 0 TMR1IE Habilita a interrupção de fim de contagem TMR1 (255 para 0)


104 UNIUBE

PIE2

PIE2

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Nome
OSFIE C2IE C1IE EEIE BCLIE ULPWUIE - CCP2IE
do Bit
R/W R/W R/W R/W R/W
Recurso R/W (0) - R/W (0)
(0) (0) (0) (0) (0)

O registro PIE2 habilita interrupções de periféricos.

PIR1 e PIR2

PIR1

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Nome
- ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF
do Bit
R/W R/W R/W
Recurso R (0) R (0) R/W (0) R/W (0) R/W (0)
(0) (0) (0)

PIR2

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Nome do
OSFIF C2IF C1IF EEIF BCLIF ULPWUIF - CCP2IF
Bit
R/W R/W R/W R/W R/W
Recurso R/W (0) - R/W (0)
(0) (0) (0) (0) (0)

Os registros PIR1 e PIR2 contêm flags das interrupções.

Registro PCON

PCON
Bit Bit Bit Bit
F Bit 4 Bit 1 Bit 0
7 6 3 2
UNIUBE 105

Nome do
- - ULPWUE SBOREN - - POR BOR
Bit
R/W
Recurso - - R/W (0) R/W (1) - - R/W (X)
(0)

O registro PCON contém flags que são utilizadas para diferenciar entre:
Reset de Power-on, Brown-out, Watchdog ou externo.

Registro PCL e PCLATH

PCL
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Bit Bit
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2
1 0
PCLATH
Bit 15 Bit 14 Bit 13 Bit 12 Bit 11 Bit 10 Bit 9 Bit 8
Bit Bit
- - - Bit 4 Bit 3 Bit 2
1 0

Os registros PCL e PCLATH possuem, somados, 13 bits, diferentemente


dos demais registros que contêm 8 bits. Esse registro contém 13 bits,
porque o tamanho da memória do PIC em questão é 2^13 = 8192. Por
esse motivo, são criados dois registradores diferentes para conterem os
13 bits responsáveis por armazenar o endereço da instrução que será
executada.

Registros PORTA e TRISA

PORTA
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Nome do Bit RA7 RA6 RA5 RA4 RA3 RA2 RA1 RA0
R/W R/W R/W R/W R/W R/W R/W
Característica R/W (X)
(X) (X) (X) (X) (X) (X) (X)
106 UNIUBE

TRISA

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Nome
TRISA7 TRISA6 TRISA5 TRISA4 TRISA3 TRISA2 TRISA1 TRISA0
do Bit

Recurso R/W (1) R/W (1) R/W (1) R/W (1) R/W (1) R/W (1) R/W (1) R/W (1)

O registro PORTA contém o estado das portas de entrada e saída. Esses


registradores são muito utilizados, pois sempre que for necessário utilizar
um pino do PIC, eles deverão ser convocados. Os estados das portas
podem ser acessados para escrita ou leitura de forma individual ou em
grupo.

O registro TRISA é utilizado para configurar os pinos das portas. 0 para


operarem como saída e 1 para operarem como entrada.

É por meio do registro PORTA que conseguimos controlar os pinos


do PIC. Para mandarmos um sinal alto de saída para um pino do PIC,
devemos invocar o registrador TRISA e referenciar.

Registros PORTB e TRISB, PORTC e TRISC, PORTD e TRISD,


Registros PORTE e TRISE

Os presentes registradores são idênticos aos anteriores, alterando


somente suas nomenclaturas (A por B ou C ou D ou E).

Cada bit das portas A,B,C,D,E contêm funções adicionais relacionadas


com algum periférico interno, que serão estudadas adiante.
UNIUBE 107

EXEMPLIFICANDO!

Trabalhando com saída para as portas A, B e C e com entrada para as


portas D e E do PIC16F877A:
Deve-se configurar os seguintes valores para as portas utilizando o registro TRIS:

TRISA = 0x00 TRISB = 0x00 TRISC = 0x00


TRISD = 0xFF TRISE = 0xFF

Registros ANSEL e ANSELH, PCON, PIE1, STATUS

ANSEL
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Nome
ANS7 ANS6 ANS5 ANS4 ANS3 ANS2 ANS1 ANS0
do Bit
R/W R/W R/W R/W R/W R/W R/W
Recurso R/W (1)
(1) (1) (1) (1) (1) (1) (1)

Os registros ANSEL e ANSELH são utilizados para configurar os pinos


para atuarem como entradas analógicas ou como entrada/saída digital.

Para configurar o pino como entrada/saída digital, o bit deve estar 0 e 1


para configurar o pino como entrada analógica.

Registro T1CON

T1CON

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Nome
T1GINV TMR1GE T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON
do Bit

Recurso R/W (0) R/W (0) R/W (0) R/W (0) R/W (0) R/W (0) R/W (0) R/W (0)

O registro T1CON contém os bits de controle de operação e configuração


do TMR1.
108 UNIUBE

Registro T2CON

T2CON

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Nome do
- TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0
Bit

Recurso - R/W (0) R/W (0) R/W (0) R/W (0) R/W (0) R/W (0) R/W (0)

O registro T1CON contém os bits de controle de operação e configuração


do TMR1.

Registro CCP1CON e CCP2CON

CCP1CON

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Nome do
P1M1 P1M0 DC1B1 DC1B0 CCP1M3 CCP1M2 CCP1M1 CCP1M0
Bit
R/W R/W R/W
Recurso R/W (0) R/W (0) R/W (0) R/W (0) R/W (0)
(0) (0) (0)

Os registros CCP1CON e CCP2CON contêm bits de configuração


e controle da saída modulada CCP1 (PWM) e CCP2 (PWM),
respectivamente.

Registro TXSTA

TXSTA

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Nome
CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D
do Bit
R/W R/W R/W R/W
Recurso R/W (0) R/W (0) R (1) R/W (0)
(0) (0) (0) (0)

O registro TXSTA contém bits que controlam e configuram saída de


dados pela porta serial:
UNIUBE 109

Bit que seleciona a origem do relógio (modo síncrono)


bit 7 CSRC • 1 = Mestre – Clock gerado internamente
• 0 = Escravo – Clock gerado por fonte externa
Bit que ativa transmissão de 9 bits ou 8 bits
bit 6 TX9 • 1 = 9 bits
• 0 = 8 bits
Bit que ativa a transmissão de dados
bit 5 TXEN • 1 = Ativada
• 0 = Desativa
Bit que seleciona o modo da porta serial EUSART
bit 4 SYBC • 1 = Síncrono
• 0 = Assíncrono
Bit de envio do indicador de parada “break” (modo
assíncrono)
bit 3 SENDB
• 1 = 9 bits
• 0 = 8 bits
Bit que seleciona alta velocidade de transmissão (modo
assíncrono)
bit 2 BRGH
• 1 = Alta velocidade
• 0 = Baixa velocidade
Bit de estado do Shift-Register de transmissão
bit 1 TRMT • 1 = Vazio
• 0 = Cheio

Bit 9 do dado transmitido, usado como endereço ou como


bit 0 TX9D
bit de paridade

Registro RCSTA

RCSTA
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Nome
SPEN RX9 SREN CREN ADDEN FERR OERR RX9D
do Bit
R/W R/W R/W R/W
Recurso R/W (0) R (0) R (0) R (X)
(0) (0) (0) (0)
110 UNIUBE

O registro TXSTA contém bits que controlam e configuram recepção de


dados pela porta serial:

Bit de ativação da porta serial EUSART


bit 7 SPEN • 1 = Ativada
• 0 = Desativada
Bit que ativa recepção de 9 bits ou 8 bits
bit 6 RX9 • 1 = 9 bits
• 0 = 8 bits
Bit que ativa recepção singular (modo síncrono e
modo mestre).
bit 5 SREN
• 1 = Ativada
• 0 = Desativada
Bit que ativa recepção contínua
bit 4 CREN • 1 = Ativada
• 0 = Desativada
Bit que ativa a detecção de endereço pelo bit 9
bit 3 ADDEN • 1 = Ativada
• 0 = Desativada

Bit de erro “enquadramento”


bit 2 FERR • 1 = Erro encontrado
• 0 = Erro não encontrado
Bit de erro “excedente”
bit 1 OERR • 1 = Erro encontrado
• 0 = Erro não encontrado

Bit 9 do dado transmitido, usado como endereço ou


bit 0 RX9D
como bit de paridade

Registro BAUDCTL

BAUDCTL

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Nome do
ABDOVF RCIDL - SCKP BRGH16 - WUE ABDEN
Bit
R/W R/W
Recurso R (0) R (1) - R/W (0) - R/W (0)
(0) (0)
UNIUBE 111

O registro BAUDCTL é o principal recurso necessário para a transmissão


assíncrona de dados da comunicação serial. Esse recurso é quem define
a velocidade de transmissão dos dados, sendo que, para haver uma
transmissão positiva do fluxo de informações, essa velocidade deve ser
conhecida e ajustada em ambos os periféricos em comunicação:

Flag de Overflow da detecção de auto-baud-rate (modo


assíncrono)
bit 7 ABDOVF
• 1 = Temporizador de Auto Baud Rate terminou
• 0 = Temporizador de Auto Baud Rate não terminou

Flag de recepção (modo assíncrono)


bit 6 RCIDL • 1 = Recepção parada
• 0 = Recepção acontecendo

Bit de seleção da polaridade do relógio síncrono


• Assíncrono:
1 = Dados invertidos no pino TX
bit 4 SCKP 0 = Dados normais no pino TX
• Síncrono:
1 = Sincronização de baixo para cima do relógio
0 = Sincronização de cima para baixo do relógio
Bit responsável por ajustar a velocidade de transmissão
(Baud Rate). Opera em conjunto com o bit BRH16 do
registro TXSTA
bit 3 BR6H16
• 1 = Alta velocidade
• 0 = Baixa velocidade

Bit que habilita o despertar pela porta serial


bit 1 WUE • 1 = Recepção parada
• 0 = Recepção acontecendo

Bit que habilita a detecção automática do Baud Rate


(modo assíncrono)
bit 0 ABDEN
• 1 = Detecção Automático
• 0 = Detecção Manual
112 UNIUBE

Registros SSPSTAT, SSPCON e SSPCON2

SSPSTAT
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Nome
SMP CKE D/A P S R/W UA BF
do Bit
R/W R/W R R
Recurso R (0) R (0) R (0) R (0)
(0) (0) (0) (0)

SSPCON

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Nome do
WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0
Bit
R/W R/W
Recurso R/W (0) R/W (0) R/W (0) R/W (0) R/W (0) R/W (0)
(0) (0)

SSPCON2

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Nome
GCEN ACKSTAT ACKDT ACKEN RCEN PEN RSEN SEM
do Bit
R/W R/W R/W R/W R/W
Recurso R/W (0) R/W (0) R/W (0)
(0) (0) (0) (0) (0)

Os registros SSPSTAT, SSPCON e SSPCON2 são responsáveis pelo


controle do modo de transmissão I2C:

Registro ADCON0 e ADCON1

ADCON0
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Nome GO/
ADCS1 ADCS0 CHS3 CHS2 CHS1 CHS0 ADON
do Bit DONE
R/W R/W R/W R/W R/W R/W R/W
Recurso R/W (0)
(0) (0) (0) (0) (0) (0) (0)
UNIUBE 113

ADCON1
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Nome
ADFM - VCFG1 VCFG0 - - - -
do Bit
Recurso R/W (0) - R/W (0) R/W (0) - - - -

Os registros ADCON0 e ADCON1 são responsáveis por configuração e


operação do conversor analógico que converte um valor de tensão em
valor digital, variando conforme a quantidade de bits escolhido para esse
valor (8 ou 10 bits para o PIC16F887).

Registros CM1CON0 e CM2CON0

CM1CON0
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Nome
C1ON C1OUT C1OE C1POL - C1R C1CH1 C1CH0
do Bit
R/W R/W R/W R/W R/W
Recurso R (0) R/W (0) -
(0) (0) (0) (0) (0)

CM2CON0
Bit 7 Bit 6 Bit 5 Bit 4 Bit3 Bit 2 Bit 1 Bit 0
Nome
C2ON C2OUT C2OE C2POL - C2R C2CH1 C2CH0
do Bit
R/W R/W R/W R/W R/W R/W
Recurso R (0) -
(0) (0) (0) (0) (0) (0)

Os registros CM1CON0 e CM2CON0 controlam o comparador C1


e C2, respectivamente. A seguir, a descrição dos bits do comparador
CM1CON0, que se aplicam também aos bits correspondentes no registro
CM2CON0:
114 UNIUBE

Bit de ativação do Comparador C1


bit 7 C1ON • 1 = Liga Comparador C1
• 0 = Desliga Comparador C2
Bit de saída do Comparador C1
• Se C1POL = 1
1 = Tensão analógica em C1Vin+ < C1Vin-
bit 6 C1OUT 0 = Tensão analógica em C1Vin+ > C1Vin-
• Se C1POL = 0
1 = Tensão analógica em C1Vin+ > C1Vin-
0 = Tensão analógica em C1Vin+ < C1Vin-
Bit de ativação da saída do comparador C1
bit 5 C1OE • 1 = Liga a saída do comparador ao pino C1OUT
• 0 = Saída do comparador é interna
Bit de seleção da polaridade da saída do comparador C1
bit 4 C1POL • 1 = Saída invertida do comparador C1
• 0 = Saída normal do Comparador C1
Bit de seleção da referência do comparador C1
• 1 = Entrada normal C1Vin+ é ligada à tensão de
bit 2 C1R
referência Vref
• 0 = Entrada normal C1Vin+ é ligada ao pino C1IN+

bit 1 C1CH1 e
Bit de seleção dos canais do comparador C1
e0 C1CH0

Quadro 6: Configuração do oscilador interno

C1CH1 C1CH0 Entrada do comparador C1Vin-


0 0 C1Vin- ligado ao pino C12IN0-
0 1 C1Vin- ligado ao pino C12IN1-
1 0 C1Vin- ligado ao pino C12IN2-
1 1 C1Vin- ligado ao pino C12IN3-

Registro VRCON

VRCON
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
UNIUBE 115

Nome
VREN VROE VRR VRSS VR3 VR2 VR1 VR0
do Bit
R/W R/W R/W R/W R/W R/W R/W R/W
Recurso
(0) (0) (0) (0) (0) (0) (0) (0)

O registro VRCON contém bits que controlam os comparadores


analógicos. A tensão de referência é armazenada neste registrador para
a comparação.

Bit de habilitação da tensão de referência do


Comparador C1
bit 7 VREN
• 1 = Liga a tensão de referência Vref
• 0 = Desliga a tensão de referência Vref
Bit de habilitação da tensão de referência do
Comparador C2
bit 6 VROE
• 1 = Liga ao pino a tensão de referência Vref
• 0 = Desliga ao pino a tensão de referência Vref
Bit de seleção da gama da tensão de Vref
bit 5 VRR • 1 = Gama baixa para tensão de referência Vref
• 0 = Gama alta para tensão de referência Vref
Bit de seleção da gama Vref do Comparador
bit 4 VRSS • 1 = Gama da tensão de referência de Vref+ a Vref-
• 0 = Gama da tensão de referência de Vdd a Vss

Seleção dos valores Vref para tensão de referência


• SE VRR = 1 – Tensão de referência obedece a fórmula:
bit
VR3...VR0 • Vref = [(VR3:VR0)/24]Vdd
3...0
• SE VRR = 0 – Tensão de referência obedece à fórmula:
• Vref = Vdd/4 + [(VR3:VR0)]/32)Vdd

Para usarmos os comparadores analógicos internos, é necessário


respeitarmos as configurações seguintes:

1. Configuração do módulo:
– Configurar o modo desejado através dos bits dos registradores
CM1CON0 e CM2CON0;
116 UNIUBE

– a interrupção deve ser desligada para fazer as mudanças de


modos.
2. Configurar o registro VRCON que configura a tensão de referência:
– escolher uma gama de tensão, através do bit VRR;
– configurar Vref, pelos bits VR3 a VR0;
– se necessário, ativar VROE;
– ativar VREN, que ativa a tensão de referência.
3. Ativar os bits CMIE do registrador PIE, bits PEIE e GIE do registrador
INTCON.
4. Ler os bits C1OUT e C2OUT do registrador CMCON.
5. Ler a flag CMIF do registrador PIR. Deve ser limpa por software
depois de ativada.

Registro OSCCON

OSCCON

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1


Nome
– IRCF2 IRCF1 IRCF0 OSTS HTS LTS
do Bit
Recurso – R/W (1) R/W (1) R/W (0) R (1) R (0) R (0)

O registro OSCCON é utilizado para controlar o relógio do sistema do


microcontrolador PIC, inclusive a seleção de frequência.

bit 6...4 – IRCF2...IRCF0 – Bits que determinam a taxa de divisão


da frequência do oscilador interno. A frequência do relógio interno é
controlada nesse registrador.

Quadro 7: Configuração do oscilador interno

Oscilador Frequência IRCF2 IRCF1 IRCF0


H 8 MHz 1 1 1
H 4 MHz 0 1 1
UNIUBE 117

H 2 MHz 1 0 1
H 1 MHz 0 0 1
H 500 KHz 1 1 0
H 250 KHz 0 1 0
H 125 KHz 1 0 0
L 31 KHz 0 0 0

Bits apenas de leitura que indica o estado do start-up/


time-out do oscilador
bit 3 OSTS
1 = Oscilador externo em uso
0 = Oscilador interno em uso (HFINTOC ou LFINTOSC)

Bit que indica se o oscilador HFINTOSC está estável


bit 2 HTS 1 = Estável
0 = Instável

Bit que indica se o oscilador LFINTOSC está estável


bit 1 LTS 1 = Estável
0 = Instável

Bit que seleciona qual oscilador será utilizado para o


relógio do sistema
bit 0 SCS
1 = Oscilador interno
0 = Oscilador externo

A configuração do oscilador é feita durante a programação do PIC. Em


outros estudos, veremos como fazer essa programação.

Registro OSCTUNE, OSCCON

O registro OSCTUNE é responsável pela sintonia da frequência do


oscilador.
118 UNIUBE

OSCTUNE
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Nome
– – – TUN4 TUN3 TUN2 TUN1 TUN0
do Bit
R/W
Recurso – – – R/W (0) R/W (0) R/W (0) R/W (0)
(0)

A configuração desse registrador é feita através do Quadro 8:

Quadro 8: Configuração da frequência pelo registrador OSCTUNE

Ajuste da Frequência TUN4 TUN3 TUN2 TUN1


Limite Superior de Operação 0 1 1 1
... ... ... ... ...
Frequência Calibrada 0 0 0 0
... ... ... ... ...
Limite Inferior de Operação 1 0 0 0

Registros de escrita e leitura na EEPROM

O microcontrolador PIC16F887 possui 256 bits que podemos utilizar para


armazenar dados. Para controlar a escrita e a leitura, serão utilizados os
registros: EECON1, EECON2, EEADR e EEDAT.

Registro EECON1

EECON1
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Nome
EEPGD – – – WRERR WREN WR RD
do Bit
Recurso R/W (X) – – – R/W (X) R/W (0) R/S (0) R/S (0)
UNIUBE 119

O registro EECON1 é um registro de controle de acesso à memória


EEPROM do microcontrolador PIC, assim como o EECON2, sendo esse
virtual (não existe fisicamente), é utilizado na sequência de escrita.

Registro EEADR

O registro EEADR é utilizado para armazenar o endereço onde ocorrerá


o acessado, na memória EEPROM.
Para que tudo se proceda corretamente, devemos trilhar os seguintes
passos:
1. escrever o endereço, que pode variar de 0x00 à 0xFF, no registro
EEADR;
2. selecionar o acesso à EEPROM, pelo bit EPGD contido no registro
EECON1;
3. para ler a posição, ativar o bit RD também contido no registro
EECON1;
4. os dados serão armazenados no registro EEDAT e estão prontos
para serem utilizados.

EXEMPLIFICANDO!

1- Ler um dado na memória EEPROM.


Instrução
BSF STATUS, RP1 ;
BCF STATUS, RP0 ; Acesso ao banco 2
MOVF ADDRESS, W ; Move o dado para o registro W
MOVWF EEADR ; Escreve no endereço
BSF STATUS, RP0 ; Acesso ao banco 3
BCF EECON1, EEPGD ; Seleciona EEPROM
BSF EECON1, RD ; Ler dado
BCF STATUS, RP0 ; Acesso ao banco 2
MOVF EEDATA, W ; Dados armazenados no registro W
120 UNIUBE

Registro EEDAT

2- Escrever um dado na memória EEPROM.


Instrução
BSF STATUS, RP1
BSF STATUS, RP0
BTFSC EECON, WR1 ; Aguarda a anterior para seguir
GOTO $-1 ;
BCF STATUS, RP0 ; Banco 2
MOVF ADRESS, W ; Move endereço para W
MOVWF EEADR ; Escreve no endereço
MOVF DATA, W ; Move o conteúdo para W
MOVWF EEDATA ; Escreve no endereço
BSF STATUS, RP0 ; Banco 3
BCF EECON1, EEPGD ; Seleciona EEPROM.
BSF EECON1, WREN ; Escrever na EEPROM habilitado.
BCF INCON, GIE ; Todas as interrupções desativadas.
MOVLW 55H ;
MOVWF EECON2 ;
MOVLW AAH ;
MOVWF EECON2 ;
BSF EECON1, WR ;
BSF INTCON, GIE ; Interrupções habilitadas.
BCF EECON1, WREN ; Escrever na EEPROM desabilitado.

Agora, que conhecemos os registradores, conseguimos programar um


microcontrolador PIC, embora seja um pouco difícil configurá-lo pelos
registros.

Para nos ajudar, já existem programas que facilitam a programação.


Esses programas são conhecidos como compiladores.
UNIUBE 121

Os compiladores utilizam linguagens de programações diferenciadas,


de acordo com o fabricante e versão. Vimos que, para programar uma
simples ação no microcontrolador PIC, devemos configurar alguns
registros com determinados valores.

O compilador que utiliza linguagem C, que estudaremos adiante,


proporciona nomenclaturas para cada tipo de função que queremos
utilizar e, para facilitar a programação, ele se encarrega de enviar para
o microcontrolador as configurações necessárias nos registros para
executar a função que solicitamos.

A seguir, iremos aprender a linguagem C e como devemos fazer para


programar o microcontrolador PIC utilizando um compilador C.

SAIBA MAIS

Os compiladores utilizados para programação em microcontroladores são


programas que transformam uma linguagem de alto nível (linguagem C)
para uma linguagem de baixo nível (hexadecimal), que são utilizadas pelos
microcontroladores PIC.

Resumo

Ao estudarmos o mundo dos microcontroladores, notamos o quanto


esse estudo é fascinante, quanta tecnologia está contida em um único
equipamento tão pequeno.

Nesse capítulo, reforçamos os conceitos de memória e vimos qual sua


importância na eletrônica moderna.

O estudo da memória interna de um microcontrolador foi importante para


entendermos onde e como as informações são armazenadas.

Estudamos as diferenças entre as várias memórias existentes e quais


são as aplicações específicas para cada uma delas.
122 UNIUBE

Vimos que o controle das ações de um microcontrolador está ligado


diretamente ao controle da memória, mais especificamente ao controle
independente de cada posição da memória.

Basicamente, a memória é dividida em duas partes, a memória de dados


e a memória de programa. Vimos que na memória de programa estão
contidas as instruções do programa e na memória de dados está contida
a memória RAM (memória que trabalha em conjunto com o processador).

O microcontrolador é uma ferramenta que conseguimos utilizar para


inúmeras tarefas, mas para conseguirmos programá-lo, devemos seguir
regras e utilizar as ferramentas disponíveis em cada um.

As ferramentas são o que chamamos de registradores. São eles que dão


operacionalidade para o microcontrolador. Os registradores existentes
estão armazenados em posições da memória de dados, que foram
estudadas nesse capítulo pelo mapa de memória.

No mapa de memória, conhecemos as posições de cada registrador de


um microcontrolador PIC específico.

Para descrever a funcionalidade de alguns dos diferentes registradores


existentes, escolhemos o PIC16F887 e estudamos, detalhadamente,
seus registradores.

Ao estudar os registradores, vimos que conhecer profundamente


as capacidades de cada microcontrolador PIC nos possibilita ter um
maior controle sobre seu potencial, e, tão logo, aproveitar melhor suas
capacidades.

Ter o domínio sobre o que fazemos e saber utilizar corretamente os


equipamentos eletrônicos com que trabalhamos é, possivelmente, um
diferencial que pode nos destacar entre os demais profissionais.
UNIUBE 123

Atividades

Atividade 1

Destaque a diferença básica entre uma memória não volátil e uma


memória volátil.

Atividade 2

Descreva como são armazenados os dados em uma memória.

Atividade 3

A organização da memória, dentro de um microcontrolador PIC, é bem


definida?

Atividade 4

Escreva em qual aspecto principal um microcontrolador PIC da família


“16F” se diferencia dos microcontroladores da família “16C”.

Atividade 5

Escreva qual é a importância dos registradores na vida do processamento


de um microcontrolador.

Atividade 6

Escreva qual a função da memória computacional.

Atividade 7

Existem semelhanças e diferenças entre a memória artificial e à memória


humana. Escreva uma semelhança e uma diferença.
124 UNIUBE

Atividade 8

As memórias artificiais são divididas em dois grandes grupos. Escreva


quais são eles.

Atividade 9

Responda:
a) qual é o nome de uma memória que não mantém os dados se for
removida a sua fonte de energia, e indique onde é utilizada;
b) se a memória artificial pode expandir sua capacidade de armaze-
namento conforme acontece com a memória humana.

Atividade 10

Defina o que são registradores.

Referências
ALECRI, Emerson. Memórias ROM e RAM. Disponível em: <http://
www.infowester.com/ memoria. php>. Acesso: dez. 2010.

ALECRI, Emerson. Memórias ROM e RAM. Disponível em: <http://


www.infowester.com/ memoria. php>. Acesso: dez. 2010.

CINEL. Microprocessadores e microcontroladores. Disponível em:


<http://www.cinelformacao.com/ mpics/files/ud3ud3cap1p5.html>.
Acesso em: dez. 2010.

DE MARTINO, J. M. Micro e minicomputadores: hardware – memória em


microcomputadores. Disponível em: <http://www.dca.fee.unicamp.br/courses/
EA078/1s2004 /arquivos/turma_ab/cap5_ 2.pdf>. Acesso em: dez. de 2010.

MICROCHIP. Datasheet PIC16F87X. Disponível em:<http://ww1.microchip.com/


downloads/en/ devicedoc/30292c.pdf.> Acesso em: dez. 2010. Atualizado em 2001.

MICROCHIP. Datasheet PIC16F62X. Disponível em:<http://www.jaycar.com.au/


images_uploaded/ 40044D.pdf >. Acesso em: dez. 2010. Atualizado em 2005.
UNIUBE 125

MICROCHIP. Introdução aos Microcontroladores PIC16F84A. Disponível


em: <http://www.trajanocamargo.com.br>

PEREIRA, Fábio, Microcomputadores PIC: técnicas avançadas. 5. ed. São Paulo:


Editora Érica Ltda., 2007.

SILVA, Rafael, Introdução à família de microcontroladores PIC – Artigo 8.


São Paulo: Editora The Bug! Magazine, 2006.
Capítulo
Portas de I/O, clock,
reset, interrupções,
4
temporizadores e
contadores
Rhafael Pansani Godinho

Introdução
Os conhecimentos adquiridos nos capítulos anteriores contribuíram
para um melhor entendimento do funcionamento dos recursos
disponíveis nos microcontroladores PIC. Entender como tudo ocorre
dentro do componente, mesmo que seja de modo simplificado,
ajudar-nos-á a compreender melhor os novos conceitos, as
funcionalidades e propriedades dos microcontroladores PIC que
estudaremos a partir deste capítulo.

Veremos que, para utilizar alguma propriedade do microcontrolador


PIC, é necessário configurarmos uma série de parâmetros, que
serve para orientar o mesmo para realizar uma função.

Nesse capítulo, serão estudados os temporizadores, as interrupções


e os contadores. Também entenderemos o papel do clock e
como configurá-lo. Além disso, tomaremos conhecimento da
utilização dos recursos principais e mais comuns disponíveis nos
microcontroladores PIC.

Estudaremos como configurar um temporizador (timer), configurar


portas para trabalhar como interrupções, criar um botão para reset e,
principalmente, como configurar as portas de I/O para trabalharem
como entrada e/ou saída digital.
128 UNIUBE

As configurações de cada função do microcontrolador PIC citadas


anteriormente serão devidamente estudadas e entendidas para as
utilizarmos corretamente.

Nosso estudo é voltado para o aprendizado sobre os


microcontroladores PIC programados em linguagem C. No
entanto, estudaremos apenas os fundamentos da linguagem C
nos capítulos seguintes.

Como veremos algumas funções do microcontrolador, iremos


listar algumas linhas de código que deverão ser utilizadas na
programação dessas funções, que, à primeira vista, se tornarão
“vazias” por não estarem integradas ao código (instruções do
programa) completo.

Para nos ajudar a entender os conceitos e propriedades, veremos


muitas ilustrações representativas das funcionalidades do
microcontrolador PIC, como utilização das portas de entrada e
saída digital.

Entendermos satisfatoriamente o conteúdo abordado nesse


capítulo nos permitirá utilizar recursos úteis e, em alguns casos,
fundamentais para determinadas aplicações.

Objetivos
Ao finalizar os estudos propostos neste capítulo, você estará
apto(a) a:

• descrever sobre o que o clock representa para o


processamento;
• configurar corretamente os osciladores interno e externo;
• escolher e configurar corretamente o temporizador para cada
projeto;
• utilizar os contadores, temporizadores e interrupções;
UNIUBE 129

• utilizar a porta reset dos microcontroladores PIC;


• utilizar em aplicações as portas de I/O digitais;
• escolher uma tensão de alimentação correta para o
microcontrolador PIC.

Esquema
4.1 Alimentação no microcontrolador PIC
4.2 Reset no microcontrolador PIC
4.2.1 Configurando os contadores da função de acionamento
4.3 Osciladores
4.3.1 O que é clock
4.3.2 Tipos de osciladores
4.3.3 Configurações
4.4 Timers - temporizadores
4.4.1 Tipos de timers
4.4.2 Configurações
4.5 Interrupções
4.5.1 Tipos de interrupções
4.5.2 Configurando as interrupções
4.6 Contadores
4.6.1 Configurando os contadores
4.7 Descerrando as portas de I/O do PIC16F877A
4.7.1 Instruções

4.1 Alimentação no microcontrolador PIC

Tudo na eletrônica é movido à energia, logo, o mesmo acontece com os


microcontroladores. É preciso alimentá-los com uma tensão contínua
(DC) para que seu sistema interno funcione.

Podemos escolher a tensão de trabalho desde que essa esteja dentro


da faixa de trabalho especificada para cada modelo. A maioria dos
microcontroladores PIC trabalha com tensão de 5Vdc (recomendada).
130 UNIUBE

Muitas fontes de alimentação não são precisas; pensando nisso, os


microcontroladores são desenvolvidos para suportar tensões com
variações de 0,5Vdc para mais ou para menos da especificada (4,5Vdc
a 5,5Vdc). Para entrada/saída digital, adotaremos tensões acima de
3Vdc como sinal alto e, abaixo de 2Vdc, como sinal baixo (desconsiderar
medições entre 3 e 2 Vdc para evitar leituras erradas).

Existem microcontroladores que foram criados especificamente para


trabalhar em sistemas de baixo consumo de energia. A tensão utilizada
nesses casos é de 3Vdc, podendo variar entre 2,7Vdc e 3,3Vdc. O clock
não deve ultrapassar 100KHz para manter um ritmo baixo de trabalho.

A utilização de tensões maiores para a alimentação dos microcontroladores


pode danificá-lo.

A tensão de alimentação é denominada tensão de referência e iremos


chamá-la de Vcc.

Para tentar diminuir possíveis ruídos que possam fazer com que o
microcontrolador não funcione corretamente, é importante inserirmos um
capacitor de 100nF entre a alimentação +5Vdc e o Gnd, como mostra a
Figura 1.

Figura 1: Alimentação do PIC.

4.2 Reset no microcontrolador PIC

Os microcontroladores PIC possuem componentes internos que


controlam o seu acionamento inicial, restando-nos pouco a fazer.
UNIUBE 131

Para que o PIC comece funcionar, é necessário inserirmos a alimentação,


como vimos anteriormente. Além da alimentação, necessitamos nos
preocupar com sua ativação.

No microcontrolador PIC existe o pino “MCLR” (Master Clear), que é


utilizado para ativar o seu funcionamento. Esse pino seria o liga/desliga
pensando de maneira simplificada.

Cada microcontrolador PIC possui suas particularidades. No caso da


ativação, isso também acontece, o PIC 16F628, por exemplo, possui
a capacidade de desabilitar esse pino “MCLR”, deixando-o para ser
utilizado como entrada/saída digital.

Para habilitar ou não a função de ativação, também chamada de reset,


utilizaremos o código #FUSES NOMCLR (desativar) ou #FUSES MCLR
(ativar). Nos microcontroladores em que não há essa opção, devemos
considerar que ela já esteja habilitada.

Quando a função reset está habilitada, o PIC não irá iniciar seu
processamento enquanto não houver excitação positiva no pino
“MCLR”. A Figura 2 demonstra como devemos fazer para acionar o
processamento.

Figura 2: Modelo excitação do pino de acionamento.

O resistor em série deve possuir valores em Ohms próximos de 1K.

Na condição da Figura 2, o PIC estará pronto para iniciar suas funções


programadas.
132 UNIUBE

4.2.1 Configurando os contadores da função de acionamento

Nessa situação, o pino “MCLR” nos permite utilizá-lo como função de


reset. Para montarmos um botão de reset utilizando esse pino, devemos
fazer como na Figura 3.

Figura 3: Modelo de um botão para atuar o comando reset


do PIC.

Quando o microcontrolador PIC é energizado (alimentado), ele executa


internamente uma inicialização e fica no aguardo da excitação do
pino “MCLR” para iniciar a execução do código fonte (instruções da
programação).

Contudo, podemos pensar: por que não utilizar o botão reset em série
com a alimentação? Dessa forma, cortar-se-ia a tensão e o PIC desligaria.
Vamos analisar a Figura 4 para entendermos melhor essa questão.

Figura 4: Modelo de um botão para atuar o comando reset


diretamente na alimentação do PIC.
UNIUBE 133

A resposta para essa pergunta é muito simples. Como dito anteriormente,


o PIC precisa ser inicializado até que esteja pronto para “trabalhar”. Esse
tempo pode variar conforme o modelo. Em algumas aplicações, uma
demora, por menor que seja, pode-se tornar um problema.

Na inicialização, o PIC executa funções particulares e vitais para seu


funcionamento e, somente depois de realizar essa inicialização, é que
ele começará a executar as instruções contidas no código programado
por nós.

Então, a utilização do botão de reset pelo pino “MCLR” garante uma


retomada mais rápida do funcionamento do sistema.

Na verdade, a função do reset é apenas zerar o contador de programa


que estudamos anteriormente. O contador de programa é quem diz ao
microcontrolador em que parte do programa está a execução.

Iremos, agora, conhecer outras formas de reset do microcontrolador.


O reset que vimos pelo pino MCLR é um reset manual. Existe outro reset
que é acionado automaticamente através da programação, o chamado
watchdog.

Esse reset automático pode ser habilitado ou desabilitado, conforme


configuração.

O que acontece internamente para ocorrer o reset automático é o


estouro de um contador interno que, ao chegar a um determinado valor
de contagem, que corresponde a alguns milissegundos, representa uma
demora muito grande de processamento do programa. O microcontrolador
entende essa demora como se tivesse ocorrido algum problema e, assim,
o reset acontece automaticamente.

Como o watchdog é um tipo de temporizador, veremos adiante como


acioná-lo.

Ainda existe o reset por baixa tensão, o chamado “Brown-out reset”.


134 UNIUBE

Resumidamente, esse reset acontece quando o sinal de tensão na


alimentação cai por motivos de perturbações na rede. Assim, para evitar
instabilidade, o microcontrolador irá manter-se no estado de pausa até
que a tensão se estabilize por um tempo de 72ms.

Agora que conhecemos como ligar o microcontrolador e sabemos que


temos o recurso para reiniciá-lo, vamos seguir com o estudo e entender
qual o papel do clock e como configurar as funcionalidades internas
desse componente tão rico em utilidade (PIC).

4.3 Osciladores

Iremos direcionar nosso estudo ao uso de componentes voltados aos


microcontroladores; dessa forma, ficará mais claro o aprendizado.

Quando falamos de osciladores, não é intuitivo dizer o que ele representa.

O termo oscilador significa que algo varia uniformemente conforme o


tempo. Na verdade, os osciladores são componentes eletrônicos vitais
para a vida de sistemas que possuem operações programadas, como os
computadores, microcontroladores, relógios e outros.

Um oscilador é o responsável por ditar o ritmo do sistema. Para ficar


claro, vamos imaginar a função do oscilador comparada à função de
algum órgão do corpo humano. Qual órgão seria? O coração. O coração
é responsável por estabelecer o ritmo do fluxo sanguíneo que percorre
nosso corpo, entre outras funções, como a de filtrar o sangue. O
oscilador nada mais é que esse “órgão” que será utilizado para orientar
o funcionamento do sistema.

Em um relógio, por exemplo, qual seria o papel do oscilador? Servir como


orientação para o sistema que identificará o momento de incrementar o
ponteiro dos segundos. O mais famoso oscilador que conhecemos é o
pêndulo, mostrado na Figura 5.
UNIUBE 135

Figura 5: Representação do movimento


de um pêndulo e o gráfico da velocidade
do mesmo.

O pêndulo é uma ferramenta mecânica criada para estabelecer um


período de pausa no tempo do relógio. Quando o pêndulo se desloca
de uma extremidade a outra, um segundo é incrementado no tempo
do relógio, alterando, assim, os ponteiros. O intervalo de tempo que o
pêndulo demora em percorrer o caminho é ajustado exatamente para
produzir esse intervalo de pausa entre os segundos.

4.3.1 O que é clock

Agora que ficou mais claro o que significa oscilador, partiremos para
os osciladores eletrônicos. Um oscilador eletrônico é um componente
que produz um sinal repetidamente, assim como o pêndulo. Esse sinal
é elétrico e pode ser dito pulsante pelo fato de seus níveis de tensão
variarem em alto e baixo (nível 1 e nível 0 – sinal digital). O nome dado
a essa troca constante de sinal alto e baixo é clock. O clock é um sinal
que coordena o sistema e resulta em uma onda quadrada, como mostra
a Figura 6.
136 UNIUBE

Figura 6: Onda quadrada gerada pelo oscilador

Na Figura 6, existe um termo chamado pulso, que representa uma


transição completa de um estado para outro (baixo/alto – alto/baixo).

O oscilador irá produzir milhões de transições de 0 e 1 (clock) em


uma determinada frequência, que é tratada pelo sistema interno do
microcontrolador e que resultará em uma espécie de contagem.

Essa contagem é o que irá determinar o momento certo de cada função


ser executada no sistema microcontrolado. Iremos estudar os timers logo
adiante e, nesse estudo, iremos entender melhor essa contagem e como
ela é entendida pelo sistema.
Para calcularmos o período do clock, utilizaremos a seguinte fórmula:

1
(período) T =
f
(frequência em Hz)

SAIBA MAIS

Quanto maior a frequência, maior é o número de instruções processadas por


segundo. O consumo de energia é diretamente proporcional à frequência em
Hz, ou seja, quanto maior a frequência maior será o consumo.
UNIUBE 137

EXEMPLIFICANDO!

Calcule a frequência do clock, sabendo que o período é: 0,000000125


segundos.
1
T=
f
1
f=
0,000000125

f = 8000000 Hz = 8MHz

4.3.2 Tipos de osciladores

São diversos os tipos de osciladores, que variam em sua construção


física, funcionamento e aplicação.

Veremos, agora, quais os tipos de osciladores existentes e estudaremos


detalhadamente o oscilador de cristal de quartzo que é comumente
utilizado junto aos sistemas microcontrolados ou, em outras palavras,
que são utilizados em conjunto com os microcontroladores PIC.

– Oscilador Hartley

O oscilador Hartley gera um sinal por meio de uma bobina e um capacitor.


LC é a nomeclatura dada a esse tipo de oscilador. Variando a indutância
da bobina ou a capacitância do capacitor é que conseguimos ajustar a
frequência do oscilador. Vejamos na fórmula seguinte como calcular essa
frequência. Produz-se uma senoide de amplitude e frequência constante.

1 1
f = ⋅
2π L ⋅C
138 UNIUBE

– Oscilador Colpitts

Esse oscilador é um tipo LC que utiliza indutor e dois capacitores em


paralelo, como representado na Figura 7. Para calcularmos a frequência
nesse tipo de oscilador, devemos utilizar a fórmula, a seguir:

1 1
f = ⋅
2π  C1 ⋅ C 2 
L⋅ 
 C1 + C 2 

Figura 7: Exemplo de oscilador de Colpitts.

– Oscilador Clapp

É também um tipo de oscilador LC que utiliza, além dos componentes já


conhecidos, o transistor. Esse oscilador oferece uma melhor estabilidade
da frequência devido ao uso de condensadores separados para sintonia
e para a realimentação capacitiva. Condensadores são os capacitores C1
para sintonia e C0 e C2 para compensar os valores de entrada. A Figura
8 demonstra um exemplo de oscilador Clapp que obedece ao cálculo da
frequência pela fórmula, a seguir.
UNIUBE 139

1 1 1 1 1 
f = ⋅  + + 
2π L  C0 C1 C2 

Figura 8: Exemplo de oscilador de


Clapp.

– Oscilador Pierce

O oscilador Pierce é um tipo de oscilador que utiliza cristal, resistores e


capacitores para produzir um sinal. Esse tipo de oscilador é muito utilizado
em relógios digitais pelo baixo custo e simplicidade de construção, como
esquematizado na Figura 9.

Figura 9: Exemplo de oscilador de Pierce


com cristal.
140 UNIUBE

– Oscilador de cristal de quartzo

O mais comum e utilizado oscilador com microcontroladores PIC é o


que utiliza um cristal de quartzo e dois capacitores que podem variar de
15pF a 100pF, dependendo da configuração escolhida. Esse oscilador
produz um sinal de clock constante e preciso, permitindo um bom
controle do tempo das ações internas. São utilizados em relógios digitais
e, principalmente, junto aos microcontroladores.

Podemos encontrar esse componente com muita facilidade no mercado.


A Figura 10 ilustra como seria a construção física de um cristal de quartzo.
Pode haver outras formas, de acordo com o fabricante e a tecnologia.

Figura 10: Imagem representativa de um cristal de quartzo.


UNIUBE 141

Além dos que estudamos, existem outros tipos de osciladores como:


oscilador por Ponte de Wien, de quadratura, por deslocamento de fase,
de relaxação e estável.

4.3.3 Configurações

A escolha da frequência e do modo que o oscilador trabalhará no


microcontrolador pode ser feita de quatro maneiras diferentes. Cada uma
com suas particularidades e de acordo com a necessidade da aplicação.

A configuração do clock é dependente da frequência. Podemos trabalhar


com muitos valores de frequência. Usualmente são utilizadas frequências
de 4MHz, 8MHz, 10MHz, 12MHz, 16MHz, 20MHz, que são facilmente
encontradas em revendedores de equipamentos eletrônicos. Esses
valores citados anteriormente são normalmente suficientes para a maioria
das aplicações. A escolha da frequência, juntamente com a determinação
dos parâmetros da programação, influenciarão no ritmo de execução das
operações do microcontrolador.

RELEMBRANDO

Quanto maior o clock, maior será a velocidade de operação do microcon-


trolador PIC.

Alguns PICs não suportam frequências maiores do que 20MHz como


o 16F877; já em outros PICs, como o 18F4550, é possível inserir
frequências de até 40MHz.

É importante ressaltarmos que a escolha de uma frequência alta


não significa obrigatoriamente que o microcontrolador trabalhará
mais rapidamente, pois existem outros fatores a serem levados em
consideração.
142 UNIUBE

Antes de começarmos a falar dos modos de operação do oscilador, é


importante que saibamos o que representam algumas nomenclaturas
que citaremos adiante.

Para configurar as diversas propriedades dos microcontroladores


PIC, é utilizada a nomenclatura “#FUSES modo_da_propriedade” na
programação. Estudaremos detalhadamente qual a importância e como
deve ser feita essa configuração nos capítulos seguintes. Também
devemos indicar ao sistema qual frequência do clock foi utilizada por
meio do código “#USE DELAY(CLOCK = 4000000) “, que indica que a
frequência é de 4MHz.

PONTO-CHAVE

Configurar o clock e o modo de operação do oscilador são pontos fundamen-


tais para a programação do microcontrolador.

Agora, iremos verificar as diferenças dos quatro modos de operação do


oscilador.

– Oscilador RC

Não necessita de precisão no clock e nem de grande velocidade de


operação. É simples, por utilizar uma rede RC, como ilustra a Figura 11.
Para habilitar esse modo, inserir código: #FUSES RC

Figura 11: PIC com oscilador RC.


UNIUBE 143

Para simplificar, foram desenvolvidos microcontroladores PIC com


esse tipo de oscilador interno, não havendo necessidade de inserirmos
componentes físicos para sua utilização nesse modo. Para utilizar, basta
habilitarmos o modo inserindo o código: #FUSES INTRC

– Oscilador LP

Utiliza configuração igual ao modo XT. Modo para trabalhar com


frequências menores que 200 KHz. Para notarmos a igualdade de
montagem, observe a Figura 12.

Para habilitar esse modo, devemos inserir o código:


#FUSES LP
//Configurar
#USE DELAY(CLOCK = “valor menor que 200KHz”)

Figura 12: Pic com oscilador LP- Clock < 200KHz.

– Oscilador XT

Esse modo permite a utilização de cristais até 4MHz. É a configuração


mais utilizada pela simplicidade e qualidade do clock. É simples por
utilizar apenas um cristal comum e dois capacitores. Na Figura 13,
podemos ver a simplicidade de sua montagem.
144 UNIUBE

Figura 13: PIC com oscilador XT - Clock <= 4MHz.

Para habilitar esse modo, inserir código:


#FUSES XT
Configurar
#USE DELAY (clock = “valor menor ou igual a 4Mhz”)

– Oscilador HS

Esse modo permite operar com cristais de alta frequência (acima de 4MHz).
O modo de ligação é idêntico ao oscilador XT. Vejamos na Figura 14.

Figura 14: Pic com oscilador HS – Clock > 4MHz.

Para habilitar esse modo, inserir código:


#FUSES HS.
Configurar
#USE DELAY (clock = “valor maior que 4Mhz”)
UNIUBE 145

Com o Quadro 1, podemos identificar de forma clara quais os valores


corretos dos componentes eletrônicos a serem utilizados com cada modo
de operação do oscilador.

Quadro 1: Diretivas de compilação

Modo de Faixa de variação dos


Frequência
operação capacitores a serem utilizados
32 KHz 68pF a 100pF
a LP
200 KHz 15pF a 33pF

2 MHz a 4 MHz XT 15pF a 33pF

4 MHz a 20 MHz acima HS 15pF a 33pF

A escolha física do tipo ou modo do oscilador deve ser compatível com


a configurada na programação, evitando conflitos.

EXEMPLIFICANDO!

Se desejássemos ter uma precisão elevada na temporização do


microcontrolador, a fim de indicar uma contagem de tempo, qual seria o
modo de operação que nos atenderia com melhor garantia? Dê um exemplo
de como poderíamos configurá-lo.
O oscilador por cristal de quartzo produz uma frequência constante e precisa.
Para configurá-lo e produzir um bom sinal de clock, utilizaríamos a seguinte
montagem:
146 UNIUBE

Na configuração interna feita na programação, utilizaremos os seguintes


parâmetros:
#FUSES XT
#USE DELAY(clock = 4000000)

4.4 Timers – temporizadores

Chamados de temporizadores, os timers são componentes fundamentais


para os microcontroladores. São eles que controlam a sequência dos
eventos.

Timer não é um controlador do tempo; é apenas uma ferramenta do


microcontrolador que nos permite manipular o tempo de execução de
instruções.

Nos microcontroladores PIC, timer consiste em um contador interno para


gerenciar o tempo de execução de instruções.

Como acontece nos relógios digitais, a indicação de tempo se dá através


de contagens que ocorrem em tempos fixos conhecidos. Então, podemos
dizer que o timer interno é um cronômetro para o microcontrolador.

Por que dissemos timer interno? O timer é qualquer componente que,


por intermédio de uma contagem (regressiva ou progressiva), controla a
execução de instruções ou eventos.

É simples imaginarmos exemplos de temporizadores. Em um micro-


-ondas, por exemplo, escolhemos a quantidade em segundos que
queremos que ele fique ligado. O temporizador interno começa a operar
no momento em que apertamos o botão iniciar e, automaticamente, o
micro-ondas irá desligar ao estourar o tempo programado. Esse estouro
de tempo é feito pelo temporizador, que efetuou uma contagem regres-
siva do tempo.
UNIUBE 147

Internamente, existe um temporizador no micro-ondas responsável por


fazer a contagem regressiva do tempo ajustado em que ficará ligado.

Nos microcontroladores PIC, existem tipos diferentes de temporizadores.


Veremos, agora, as características e o que os diferencia uns dos outros.

4.4.1 Tipos de timers

– Timer0
Timer0 é o timer mais utilizado por estar presente em todos os
microcontroladores PIC disponíveis atualmente.

Esse temporizador possui preescaler (divide a frequência do clock)


e contador de 8 bits; isso significa que sua contagem interna irá até
255 antes de ocorrer o estouro (overflow).

O clock desse temporizador é feito de forma externa através do pino


“T0CKI”. Em alguns casos, como no PIC16F628, existe um oscilador
interno, logo o clock do timer0 é interno.

– Timer1
Timer1 possui preescaler de 4 bits e contador de 16 bits. Com
esse timer1, podemos ajustar tempos maiores para execução de
instruções, pois sua contagem interna vai até 65535.

O timer1 possui o pino “T1CKI” responsável pelo recebimento do


clock externo (contagem). Assim, podemos desenvolver aplicações
que contêm pulsos dados a esse pino.

É importante sabermos que o evento timer1 ocorre independente-


mente do timer0.

– Timer2
Timer2 é também um temporizador com contador de 8 bits e 4 bits
para o preescaler.
148 UNIUBE

Vale ressaltarmos que a existência do timer2 é pelo propósito básico


de fornecer a base de tempo para o módulo CCP. No entanto,
podemos utilizá-lo para outras aplicações.

O timer2 possui dois sinais de saída: o primeiro é o sinal provocado


pelo estouro da contagem, que é utilizado como base de tempo
para o módulo CCP; o segundo sinal é proveniente do mesmo sinal
dividido pelo postscaler.

O segundo sinal é utilizado para chamada da interrupção timer2.

– Watchdog

O watchdog é o responsável pela contagem do tempo de reset


automático, comentado anteriormente nesse capítulo.

O uso do watchdog não é muito comum, mas é útil para controlarmos


uma aplicação crítica, com muitas funções complexas e que podem
oferecer risco ao processamento do PIC. Esse temporizador é
iniciado juntamente com a execução do programa e dará o reset
ao PIC, caso sua contagem estoure. Para não haver o estouro do
tempo e impedir o reset automático do PIC, devemos inserir, no final
da função principal (Void Main), a instrução “restart_wdt()”, que irá
zerar o contador do timer watchdog.

Muitas vezes, ao programarmos uma lógica, não nos preocupamos


tanto com o tempo de execução da mesma. Podemos, no momento
do desenvolvimento das linhas de código, inserir rotinas (sequência
de instruções) que podem travar a execução ou gerar erros elevados
ao processamento. O watchdog existe para tentar solucionar esse
problema que pode ocorrer durante a execução do programa. Se
o tempo de uma varredura completa das linhas de código demorar
mais que o tempo de estouro do watchdog, o PIC irá sofrer o reset.
UNIUBE 149

4.4.2 Configurações

Para efetuarmos a configuração dos temporizadores, é preciso conhecer


alguns conceitos que serão aplicados nas propriedades de cada função
dos temporizadores.

Preescaler : em microcontroladores, é a parte que divide a


frequência de oscilação do clock.
Postscaler : escolhe quantas vezes o estouro deve ocorrer para
executar a chamada da interrupção.

– Timer 0
Para configurar o timer0, devemos utilizar as seguintes configurações:
//Dentro da função principal
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_X);

Podemos alterar o valor do preescaler (X) pelos seguintes valores:


1, 2, 4, 8, 16, 32, 64, 128 e 256.

– Timer 1
Para configurar o timer1, devemos utilizar as seguintes configurações:
//Dentro da função principal
setup_timer_1(T1_INTERNAL|T1_DIV_BY_X);

Podemos alterar o valor do preescaler (X) pelos seguintes valores:


1, 2, 4 e 8.
Para habilitarmos a função de contagem externa, a configuração
se difere como a seguir:
//Dentro da função principal
setup_timer_1(T1_EXTERNAL|T1_DIV_BY_X);
150 UNIUBE

– Timer 2

Para configurar o timer2, devemos utilizar as seguintes configurações:


//Dentro da função principal
setup_timer_2(T2_DIV_BY_X,Y,Z);

As variáveis X, Y e Z podem variar conforme as especificações a


seguir:
(X): 1, 4 e 16.
Período de estouro (Y): 0 a 255.
Período de interrupção (Z): 1 a 16

– Watchdog

A configuração do temporizador watchdog ocorre de maneiras


diferentes conforme o compilador (software de programação de
microcontroladores PIC) utilizado.

No compilador PIC C, teremos as seguintes opções de configuração:


WDT_18MS, WDT_36MS, WDT_72MS, WDT_144MS,
WDT_288MS, WDT_576MS, WDT_1152MS, WDT_2304MS
Para configurar o watchdog, devemos utilizar as seguintes
configurações:

//Antes da função principal (Void Main)


#fuses WDT //habilitar o watchdog
#fuses NOWDT //desabilitar o watchdog

//Dentro da função principal


setup_wdt(WDT_144MS);
restart_wdt(); //zerar o contador do watchdog
UNIUBE 151

EXEMPLIFICANDO!

Montar um programa que utilize o temporizador watchdog. Configurar o


temporizador para 2304MS e inserir a função no final do programa para
zerar a contagem do watchdog.
#fuses WDT    
Void main()
{
setup_wdt(WDT_2304MS);
while (true)
{
//instruções do programa
restart_wdt();        
}
}

4.5 Interrupções

A interrupção é mais uma funcionalidade do microcontrolador PIC.


Essa função permite executar uma sequência de instruções a qualquer
momento da execução do programa.

Interrupção como o próprio nome diz, representa uma parada na


execução do programa, para executar instruções prioritárias. Ao terminar
de executar as instruções da interrupção, o sistema retorna à execução
do mesmo ponto em que parou.

Geralmente, são adicionadas instruções nas funções de interrupção que


necessitam ser executadas com maior velocidade e precisão.

Para exemplificarmos a utilidade da interrupção, daremos exemplo do


teclado do PC. O processamento do PC não fica a todo o momento
verificando se foi ou não pressionada alguma tecla do teclado, pois
se isso acontecesse, muito tempo seria perdido, já que o teclado não
é pressionado a todo o momento. Ao pressionarmos qualquer tecla
152 UNIUBE

do teclado, automaticamente é enviado um comando pela porta de


comunicação entre o teclado e o PC, que indicará ao processamento
para imediatamente tratar a informação vinda do teclado. Dessa maneira,
o sistema garante uma rápida resposta a esse dado externo proveniente
do teclado.

Dentro da função da interrupção, devemos inserir o mínimo de instruções


possível, e apenas aquelas que ficarão, a maior parte do tempo, ociosas.
A principal vantagem na utilização de interrupções é garantir o
recebimento de um dado sem ter que gastar tempo de processamento
com verificações desnecessárias, o que nos possibilita otimizar o
programa escrito.

Compreendemos, então, que o uso das interrupções se faz necessário


quando temos que realizar tarefas importantes.

Outra vantagem na utilização de interrupções é para diminuirmos o


consumo de energia. Caso a aplicação não exija muitos recursos do
microcontrolador e tenha a necessidade de se preocupar com o consumo
de energia (aplicações que envolvam pilhas ou baterias), podemos
colocar o PIC para “dormir” (modo sleep).

Colocando o PIC para “dormir” (função sleep(),) conseguimos diminuir


o ritmo do processamento, resultando em baixo consumo de energia.
O despertar do PIC ocorrerá no momento em que a interrupção for
chamada, e, assim, as instruções serão processadas.

Interrupção é muito útil em aplicações diversas, portanto é importante


entendermos bem o conceito de sua utilização.

4.5.1 Tipos de interrupções

Nos microcontroladores PIC, existem muitas interrupções que podemos


inserir.
UNIUBE 153

Basicamente, as interrupções são classificadas em assíncronas e


síncronas. Assíncronas são as interrupções geradas por eventos
externos e possuem um tempo de latência que varia entre três e quatro
ciclos de instrução. As interrupções síncronas são geradas por eventos
internos e possuem tempo de latência de 3 ciclos de instrução.

O tempo de latência é o atraso existente entre a ocorrência à chamada


da interrupção até ao efetivo desvio para execução da instrução.

Existem ainda outras duas classificações para as interrupções, são elas:


não mascarável e mascarável.

Não mascarável são as instruções que são, a todo o momento, atendidas


pela CPU, ou seja, são sempre executadas. Já, na instrução mascarável,
a execução é escolhida pelo programa, em que podemos definir quais
as interrupções que queremos trabalhar.

Nos microcontroladores PIC, encontramos apenas instruções do tipo


mascarável, pois podemos escolher sua ativação ou não.

Iremos citar cinco das interrupções mais utilizadas, que podemos inserir
em uma quantidade alta de aplicações:

– Interrupção Timer 0/ Timer 1/ Timer 2

A interrupção por timer ocorre quando há o estouro da contagem. No


timer 0, a contagem vai até 255; no timer 1, até 65535 e, no timer 2,
até 255.

Essa instrução é do tipo síncrona, portanto ocorre internamente ao


sistema do microcontrolador.

– Interrupção externa

A interrupção externa acontece quando o pino “RB0” sofre inversão


de estado (0 para 1 ou 1 para zero). Está presente em todos os
microcontroladores.
154 UNIUBE

Essa instrução, por ocorrer externamente ao microcontrolador, é do


tipo assíncrona.

– Interrupção entrada serial

A interrupção entrada serial ocorre quando o pino de entrada serial


“RX” recebe um dado, logo quando o primeiro bit do dado é recebido.
Também classificada como instrução assíncrona.

SAIBA MAIS

Para saber mais sobre as interrupções, consulte o datasheet de cada


microcontrolador para saber quais as interrupções disponíveis.

4.5.2 Configurando as interrupções

– Interrupção Timer 0/ Timer 1/ Timer 2


Para configurar a interrupção do timer, é necessário inserirmos a
seguinte configuração:
//Antes da função principal (Void Main)
#int_TIMERX //X número do timer (0,1 ou 2)
TIMER0X_isr()
{
/*inicialização da contagem se necessário pela função
setup_timer0(get_timer0() + “valor inicial da contagem”);
/*instruções*/
}
//Dentro da função principal
enable_interrupts(INT_TIMERX);
enable_interrupts(GLOBAL);
UNIUBE 155

A chamada da interrupção por timer0 ocorrerá obedecendo ao seguinte


cálculo:

Intervalo de chamada da prescaler . (256 - InicialTMR0) . 4


=
interrupçãoTIMER0 Frequência

Vamos explicar o que significa cada componente da fórmula:

Frequência: frequência do clock

256: limite da contagem interna do timer0

InicialTMR0: valor inserido para ajustar a contagem de início do


timer0

Preescaler: valor ajustado pela propriedade do timer0. Letra X = 8


bits (1,2,4,...256) setup_timer_0(RTCC_INTERNAL|RTCC_DIV_X);

4: constante

EXEMPLIFICANDO!

Ajustar o preescaler, para que o intervalo da interrupção TIMER0 seja igual


a 4 ms. A contagem inicial deve estar em 6.

Intervalo de chamada da prescaler . (256 - 6) . 4


=
interrupçãoTIMER0 4000000
Intervalo de chamada da
= 0,004 segundos
interrupçãoTIMER0
prescaler . (256 - 6) . 4
0,004 =
4000000
prescaler = 16
156 UNIUBE

O tempo de chamada da interrupção timer 1 é calculado pela mesma


fórmula do timer 0, alterando a contagem de 256 para 65536.

Para finalizar, o cálculo do tempo da chamada da interrupção do timer 2


é dado pela fórmula seguinte:

Intervalo de chamada da prescaler . postscaler . PR2 . 4


=
interrupçãoTIMER2 Frequência

A diferença deste cálculo com o do timer0 está apenas no acréscimo do


postscaler e a variável “PR2”, que indica onde será o transbordamento
da contagem.

O timer 2 não possui clock externo como os anteriores e nem opera em


modo de “dormir”.

Para configurar o registrador “PR2”, basta inserir os seguintes códigos


assembly:

MOVLW D’100’ ;
MOVWF PR2 ;

Como nosso estudo é voltado à programação por linguagem C, também


podemos ajustar o limitador de contagem da seguinte forma:

set_timer 2(PR2);

Neste caso, o “PR2” será um valor resultante do decremento de 256 pelo


valor escolhido.

EXEMPLIFICANDO!

Ajuste o timer 2 para transbordamento na contagem 200.


set_timer 2(get_timer0() + 56); //256-56 = 200
UNIUBE 157

– Interrupção externa
Para configurar a interrupção externa, é necessário inserirmos a
seguinte configuração:

//Antes da função principal (Void Main)


#int_EXT
EXT_isr()
{
/*instruções*/
}
//Dentro da função principal
ext_int_edge( H_TO_L ); //Alto para baixo ou (L_TO_H)
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);

– Interrupção entrada serial


Para configurar a interrupção por entrada de dados pela porta serial,
é necessário inserirmos a seguinte configuração:
//Antes da função principal (Void Main)
#int_RDA
RDA_isr()
{
/*instruções*/
}
//Dentro da função principal
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
158 UNIUBE

PARADA OBRIGATÓRIA

Em um programa que contém uma quantidade grande de instruções


complexas, consequentemente que demora supostamente 10 milissegundos
para varrer todas as instruções, como poderíamos garantir o recebimento
de um dado digital (nível alto externo proveniente de um sensor)? O dado
permanece no pino por 1 milissegundo.

Para garantir o recebimento do dado por algum pino do PIC, a varredura do


programa deve processar pelo menos uma vez a instrução de leitura do pino
do PIC. Como nosso programa demora 10 milissegundos para ser totalmente
processado e o tempo de permanência do dado é de apenas 1 milissegundo,
não conseguiremos receber o dado se utilizarmos uma leitura simples do pino
do PIC. Para solucionar esse problema, devemos utilizar o pino de interrupção
externa do PIC, que independentemente de onde esteja sendo processado o
programa, o PIC conseguirá identificar a mudança de estado (baixo para alto)
e, assim, conseguimos receber corretamente o dado.

4.6 Contadores

Uma das aplicações mais comuns que utilizam microcontroladores são


sistemas de contagem.

Uma contagem utiliza recursos mínimos de hardware, além de ser muito


simples a implementação do programa.

Para entendermos o que é contador, daremos exemplos de locais em


que supostamente poderiam ser utilizados.

Em uma rodovia, por exemplo, se necessitássemos conhecer a quantidade


de veículos que percorre um determinado trajeto, seria necessário contar
visualmente cada um, caso não houvesse nenhum sistema eletrônico ou
mecânico para realizar esse serviço.
UNIUBE 159

Outro exemplo seria a contagem de pessoas que frequentam um


determinado local (um shopping, uma estação rodoviária, uma loja, entre
outros).

É perfeitamente possível implementarmos um sistema que consiga


identificar a passagem de objetos por meio de sensores para efetuar
uma contagem. Essa contagem seria interpretada pela entrada digital
do microcontrolador e, assim, permitir ser tratada pela programação
do código fonte, resultando em qualquer que seja a aplicação final
(mostrador numérico, dados para relatório, entre outros).

Para desenvolvermos um sistema de contagem, primeiramente


precisamos estabelecer qual será o meio que serão viabilizados os
pulsos da contagem (um botão mecânico, um sensor digital, outros).
Em seguida, devemos escolher qual o método de inserção dos pulsos
(entrada digital) e viabilizar essa propriedade (configurar pino n para
entrada digital).

Após escolhido como os dados serão inseridos no microcontrolador,


devemos preparar o sistema para identificação dos pulsos que serão
recebidos. Esse passo representa a parte lógica (programação).

Existem outras formas de estabelecer uma contagem digital, sem a


utilização de microcontroladores.

Contadores que utilizam microcontrolador, geralmente são utilizados


quando há a necessidade de utilizar esse dado (contagem) para alguma
outra aplicação ou que esse dado receba um tratamento que resultará
em outra informação.

O assunto “contadores” se estende além do que já comentamos.


Contadores não são somente contagens físicas que podemos ver;
contadores são tudo que, por meio de interpretação, fornece uma
sequência consecutiva de números, progressiva ou regressiva.
160 UNIUBE

Ao estudarmos os temporizadores, estudamos os timers dos


microcontroladores PIC. Os timers são nada mais que contadores que
contam os pulsos do sinal de clock.

Internamente, sem que haja a necessidade de programarmos a captura


dos pulsos (transição baixo/alto – alto/baixo), o PIC executa uma contagem
que resultará em interrupções, se assim forem desejadas por nós.

Veremos, a seguir, que basicamente existem dois tipos de contagens que


podemos desenvolver com microcontroladores PIC.

4.6.1 Configurando os contadores

– Contador por programação

Na Figura 15, encontramos um exemplo implementado fisicamente


de como seria o recebimento de um sinal digital pelo PIC.

Figura 15: Exemplo de implementação para contagem


de pulsos via microcontrolador PIC.
UNIUBE 161

Para recebermos esse sinal, será necessário implementarmos, na


parte principal do programa, funções para reconhecer e receber o
dado, incrementando a contagem.

A instrução para receber o dado é: input_x(), sendo ‘x’ o nome da porta.

As instruções para viabilizar uma contagem podem ser as seguintes:


//Dentro da função principal
If (input_a(pin_a0))
{
variável++; //instrução que incrementa 1 na variável
}

– Contador por Timer1


Na implementação da Figura 16, foi utilizada a interrupção externa
para garantir o recebimento do pulso (dado de entrada digital).

Figura 16: Exemplo de implementação para contagem


via Timer1 do microcontrolador PIC.
162 UNIUBE

A interrupção ocorrerá sempre que for identificada a mudança de estado


no pino “RB0”.

As instruções para viabilizar uma contagem podem ser as seguintes:

//Antes da função principal (Void Main)


#int_EXT
EXT_isr()
{
variável++; //instrução que incrementa 1 na variável
}
//Dentro da função principal
ext_int_edge( H_TO_L ); //Alto para baixo ou (L_TO_H)
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);

4.7 Descerrando as portas de I/O do PIC16F877A

Agora, vamos conhecer profundamente as funcionalidades de um


microcontrolador PIC. Estudaremos o PIC16F877A, que oferece uma
gama alta de funções que podemos detalhar.

Para iniciar, detalharemos os pinos desse microcontrolador pela Figura


17. Em seguida, mostraremos as funcionalidades de cada pino.
UNIUBE 163

Figura 17: Representação dos pinos do microcontrolador 16F877A – Modelo DIP.


Fonte: Adaptado de Malvino (2011).

É importante lembrarmos que a letra “A” no final da nomenclatura apenas


representa que esse microcontrolador passou por melhorias, ou seja, foi
atualizado.

SAIBA MAIS

Geralmente, no mundo da eletrônica, as nomenclaturas são iguais. Há


apenas uma ou outra letra diferente significando fabricantes diferentes, o
que não acontece no microcontrolador PIC.
164 UNIUBE

O PIC16F877A é um dos microcontroladores mais utilizados. Quatro


das principais vantagens em sua escolha em um projeto são o custo, a
capacidade de armazenamento de programa, a facilidade de encontrá-lo
no mercado e a capacidade funcional.

Podemos, também, encontrá-lo em outras formas físicas, como veremos


na Figura 18.

Figura 18: Representação dos pinos do microcontrolador 16F877A – Modelo TQFP.


Fonte: Adaptado de Malvino, 2011.

O modelo TQFP possui quatro pinos que não apresentam funcionalidade;


o motivo de sua inserção é apenas para fins estruturais e visuais.

Já estudamos no capítulo “Microcontrolador PIC” algumas características


do microcontrolador 16F877A, mas como iremos estudar agora a
característica de cada pino, é importante relembrar o que já vimos.
UNIUBE 165

Resumo das funcionalidades do microcontrolador 16F877A:

– 40 pinos (33 programáveis);


– 8 entradas analógicas;
– 3 Timers (8/8/16 Bits);
– watchdog;
– 2 módulos CCP (PWM) ;
– Disponibilidade no encapsulamento DIP e SMD (TQFP ou PLCC);
– Memória flash interna (gravar dados que permanecem mesmo
sem energia);
– Trabalha com frequências até 20 MHz.

Agora, que conhecemos a quantidade e local em que estão os pinos do


PIC16F877A, vamos analisar a funcionalidade de cada pino pelo Quadro
2, a seguir.

Quadro 2: Descrição funcional dos pinos do PIC16F877A – Modelo DIP

Pino Função Descrição


MCLR Reset
1
Vpp Tensão de entrada
RA0 Entrada/Saída digital
2
AN0 Entrada analógica 0
RA1 Entrada/Saída digital
3
AN1 Entrada analógica 1
RA2 Entrada/Saída digital
AN2 Entrada analógica 2
4
VREF- Polo negativo da tensão de referência para conversor A/D
CVREF Tensão de referência do comparador analógico
RA3 Entrada/Saída digital
5 AN3 Entrada analógica 3
VREF+ Polo positivo da tensão de referência para conversor A/D
RA4 Entrada/Saída digital
6 T0CKI Clock externo do timer0
C1OUT Saída do comparador analógico 1
RA5 Entrada/Saída digital
AN4 Entrada analógica 4
7
SS SPI – entrada escrava
C2OUT Saída do comparador analógico 2
166 UNIUBE

Pino Função Descrição


RE0 Entrada/Saída digital
8 RD Ler porta paralela escrava
AN5 Entrada analógica 5
RE1 Entrada/Saída digital
9 WR Escrever porta paralela escrava
AN6 Entrada analógica 6
RE2 Entrada/Saída digital
10 CS Seleção do controle para porta paralela escrava
AN7 Entrada analógica 7
11 VDD Polo positivo da alimentação
12 VSS Polo negativo da alimentação (Referência Terra)
OSC1 Clock externo
13
CLKI Entrada oscilador externo
OSC2 Clock externo
14
CLKO Saída oscilador externo
RC0 Entrada/Saída Digital
15 T1OSO Saída oscilador do timer1
T1CKI Entrada clock externo do timer1
RC1 Entrada/Saída Digital
16 T1OSI Entrada oscilador do timer 1
CCP2 Saída comparador2 e saída PWM2
RC2 Entrada/Saída Digital
17
CCP1 Saída comparador1 e saída PWM1
RC3 Entrada/Saída Digital
18 SCK Entrada/Saída do clock da serial síncrona para SPI
SCL Entrada/Saída do clock da serial síncrona para i²C
RD0 Entrada/Saída Digital
19
PSP0 Pino 0 da porta paralela escrava
RD1 Entrada/Saída Digital
20
PSP1 Pino 1 da porta paralela escrava
RD2 Entrada/Saída Digital
21
PSP2 Pino 2 da porta paralela escrava

RD3 Entrada/Saída Digital


22
PSP3 Pino 3 da porta paralela escrava
RC4 Entrada/Saída Digital
23 SDI SPI – Entrada
SDA I²C Entrada/Saída
UNIUBE 167

Pino Função Descrição


RC5 Entrada/Saída Digital
24
SDO SPI – Saída
RC6 Entrada/Saída Digital
25 TX Saída da USART assíncrona
CK Clock síncrono da USART
RC7 Entrada/Saída digital
26 RX Entrada da USART assíncrona
DT Dado síncrono da USART
RD4 Entrada/Saída digital
27
PSP4 Pino 4 da porta paralela escrava
RD5 Entrada/Saída digital
28
PSP5 Pino 5 da porta paralela escrava
RD6 Entrada/Saída digital
29
PSP6 Pino 6 da porta paralela escrava
RD7 Entrada/Saída digital
30
PSP7 Pino 7 da porta paralela escrava
31 VSS Polo negativo da alimentação (Referência Terra)
32 VDD Polo positivo da alimentação
RB0 Entrada/Saída digital
33
INT Interrupção externa

34 RB1 Entrada/Saída digital

35 RB2 Entrada/Saída digital

RB3 Entrada/Saída digital


36
PGM Baixa tensão de programação ICSP

37 RB4 Entrada/Saída digital

38 RB5 Entrada/Saída digital

RB6 Entrada/Saída digital


39
PGC Clock programação ICSP

RB7 Entrada/Saída digital


40
PGD Dados programação ICSP

Fonte: Adaptado de MICROCHIP (2011).


168 UNIUBE

4.7.1 Instruções

No Quadro 3, a seguir, estão listadas as instruções que viabilizam as


funcionalidades do microcontrolador PIC, estudadas anteriormente:

Quadro 3: Instruções em linguagem C

Função Descrição Exemplo

output_high(); Nível alto para uma saída output_high(pin_d1);

output_low(); Nível baixo para uma saída output_low(pin_c1);

output_b(0b00000000); //
zera todos os pinos da
Enviar um byte para uma
output_x() porta a
porta
output_c(0b00000001); //
seta o pino a1 em 1
Recebe valor de um pino (1
input(pin_x) input(pin_a1)
bit)
Recebe valor de uma porta
input_x() (n bits, sendo n o número de variável = input_a();
pinos da porta)
Define a direção para os /*porta b com 8 bits
pinos da referida porta. 0 – seta bit de saída
set_tris_X()
Necessita da diretiva: 1 – seta bit de entrada*/
#use fast_io(x) set_tris_b(0b00000000);
Configura valor inicial para a
set_timerX() set_timer0(get_timer0()+6);
contagem do timer
Retorna valor atual da
get_timerX() set_timer0(get_timer0()+6);
contagem do timer
#FUSE XT;
/*configura oscilador
#FUSE Habilita uma propriedade
externo para trabalhar até
4MHz*/
#USE Configura a frequência do #USE
DELAY(clock=x) clock DELAY(clock=4000000)

As instruções encontradas na Tabela 3 são responsáveis por executar as


ações de entrada e saída digital. Para exemplificar, iremos demonstrar,
por meio de exemplos, a montagem e as respectivas linhas de código
UNIUBE 169

necessárias pra executar as ações de entrada ou saída de dados através


das portas do PIC.

Para configurar um pino como entrada ou saída, devemos utilizar a


função set_tris_x(). A seguir, veremos as formas corretas de configuração.

– Configurar toda a porta como entrada digital:


set_tris_x(0x00);

– Configurar toda a porta como saída digital:


set_tris_x(0xff);

– Configurar pinos como entrada/saída digital:


set_tris_x(0bYYYYYYYY)
Y: 1 para entrada digital e 0 para saída digital

Quando desejarmos configurar uma contagem inicial para os


temporizadores, a função set_timer X() deve ser utilizada sempre com a
função get_timer 0() pois ela retornará o valor atual da contagem, como
no exemplo da Tabela 3.

IMPORTANTE!

Um dado é toda e qualquer informação que trafega para dentro ou para


fora do PIC. Uma saída digital tem valor alto ou baixo, esse valor também
é chamado de dado.
170 UNIUBE

EXEMPLIFICANDO!

Construir o modelo físico de acionamento de um LED e indicar a instrução


necessária para acendê-lo. O LED deve ser aceso quando a saída digital
for sinal alto (5Vdc).

//linhas de código que geram um sinal de nível alto no pino RB2


set_tris_b(0b00000000); //Configura pinos da porta b como saída digital
output_high(pin_b2); //gera sinal de nível alto no pino RB2

Quando estivermos trabalhando com saídas digitais, o valor em volts


correspondente ao pino do PIC será igual à tensão de entrada Vcc.

Para trabalharmos com entradas digitais, é importante conhecermos a


lei de Ohm, pela fórmula a seguir:

U=R.I
Em que:
U = Tensão
R = Resistência
I = Corrente

Com a lei de Ohm, conseguimos calcular qual a corrente em fluxo no


pino do PIC.
UNIUBE 171

Agora perguntamos: - por que nos preocuparmos com a corrente? O


microcontrolador PIC foi projetado para trabalhar com, no máximo, 25mA
em cada um de seus pinos.

O PIC pode sofrer danos, caso um de seus pinos, trabalhando


como entrada, receba tensão maior que 5,5Vdc. Não há com o
que nos preocuparmos com relação à corrente; nesse caso, pois
quando configuramos o pino para trabalhar como entrada digital,
ele automaticamente se torna uma entrada com impedância infinita
(resistência muito alta), evitando altas correntes.

Como já visto anteriormente, para trabalharmos com uma entrada digital


no PIC, é recomendado inserirmos um resistor em paralelo com o pino do
PIC e terra. Esse resistor deve ser próximo de 10K Ohm e é utilizado para
escoar a corrente para o terra, e fornecer sinal baixo (tensão 0V), quando
o botão não estiver pressionado; caso contrário, o pino de entrada pode
assumir valor de tensão flutuante (não conhecidos).

Vejamos a importância em prepararmos corretamente as ações do PIC


por meio de uma correta configuração.

Lembre-se de que o nível lógico alto é representado pelo valor 1. Nível


lógico baixo é representado pelo valor 0.

EXEMPLIFICANDO!

Qual o valor que o resistor deve assumir para que o pino de saída digital RB0
do PIC forneça, aproximadamente, 15mA para acender um LED? Desenhe o
modelo físico para implementação desse acionamento por microcontrolador
PIC. Qual o comando para acender o LED por saída de nível alto?
Dados:
O LED consome 3V
Vcc = 5Vdc
U=R.I
172 UNIUBE

5 - 3 = R . 0,015
Queda de tensão no LED

R = 133 Ohm

//Instrução para acender o LED com saída nível alto


set_tris_b(0b00000000); //Configura pinos da porta b como saída digital
output_high(pin_b0);

Trabalhando como saída digital, devemos nos preocupar um pouco


mais, pois o PIC fornecerá 5Vdc e, dependendo da carga (resistência), a
corrente pode ultrapassar os 25mA.

Com esses dados, conseguiremos calcular a potência (watt) máxima e a


recomendada, fornecida por cada pino, respectivamente.

PESQUISANDO NA WEB

No datasheet dos microcontroladores PIC, conseguiremos encontrar


informações sobre suas capacidades (Tensão, corrente, entre outros).
Acesse: <http://www.microchip.com>. e confira!
UNIUBE 173

EXEMPLIFICANDO!

Calcular a potência dissipada pelo resistor, se a corrente que passa pelo


pino do PIC é de 18mA.
Dados:
Corrente = 18mA
Vcc = 5Vdc

P = U . I
P = 0,09 Watts
P = 0,09 Watts

De posse de muitas dessas informações que estudamos no capítulo atual,


estamos a um passo de desenvolvermos nosso primeiro projeto ou programa.

Nos capítulos seguintes, estudaremos outras funcionalidades complemen-


tares que nos permitirão desenvolver um projeto completo com muitas
capacidades.

O processo final para finalizarmos nosso aprendizado será a programa-


ção, em que nessa programação conterá todas as configurações de cada
função estudada até agora e nos capítulos seguintes.

Ao desenvolvermos um projeto microcontrolado, devemos sempre nos


preocupar que esse projeto desempenhe um ótimo papel dentro do sistema
em que está sendo utilizado.

A importância em estudar a base teórica de cada funcionalidade dos


microcontroladores PIC é muito alta, visto que é fundamental conhecermos
o que podemos utilizar e, principalmente, como utilizar isso.
174 UNIUBE

Resumo

Neste capítulo, começamos a trabalhar com as funcionalidades dos


microcontroladores PIC. Vimos características de algumas das funções
mais importantes e úteis para sua utilização.

Agora, conhecemos qual a tensão correta a ser utilizada para alimentar


o microcontrolador; além disso, aprendemos as formas corretas para
utilização das entradas e saídas digitais através de aplicações simples,
como: acender um LED (sinal de saída) e reconhecer um toque de um
botão (sinal de entrada).

Estudamos de maneira clara e objetiva as propriedades dos timers


existentes nos microcontroladores PIC e fomos criteriosos em suas
configurações, o que nos permitiu entender as variações que podem
ocorrer em seu funcionamento.

Conhecimentos foram adquiridos sobre os temporizadores, que,


nada mais são, que funções consequentes dos timers. Contadores e
interrupções também foram estudados, o que nos permite agora propor
uma gama alta de aplicações.

Atividades

Atividade 1

Escreva qual é a importância do clock para os microcontroladores.

Atividade 2

Escreva qual é a função do temporizador watchdog e, em seguida,


justifique se ele é ou não fundamental para o microcontrolador.
UNIUBE 175

Atividade 3

Calcule o intervalo de chamada da interrupção por timer0 para preescaler


8, contagem iniciada em 6 e frequência do clock em 4 MHz.

Atividade 4

Escreva qual é a funcionalidade do microcontrolador que nos permite


contar pulsos externos com eficiência e precisão. O que é preciso fazer
para utilizá-la?

Atividade 5

Calcule a corrente fornecida ao pino RC5 pelo circuito, a seguir, e


explique o porquê da utilização do resistor nesse circuito. Identifique e
escreva também como se identifica se o botão foi pressionado.

Referências

MALVINO, Albert Paul. Microcomputadores e microprocessadores.


São Paulo: Editora McGraw-Hill do Brasil, 1985.

MICROCHIP. Datasheet PIC16F87XA. Disponível em: <http://ww1.microchip.com/


downloads/en/ devicedoc/39582b.pdf >. Acesso em: mar. 2011. Atualizado em 2003.
176 UNIUBE

PEREIRA, Fábio. Microcomputadores PIC: técnicas avançadas. 5. ed.


São Paulo: Editora Érica Ltda, 2007.

SILVA, Rafael. Introdução à família de microcontroladores PIC:


artigo 8. São Paulo: Editora The Bug! Magazine, 2006.
Capítulo
Comunicação serial no
microcontrolador PIC
5

Moacir Mendes da Costa Júnior

Introdução
Atualmente, as tecnologias vêm substituindo as tradicionais formas
de comunicação, como os cabos analógicos RCA e a comunicação
paralela, por dispositivos equipados com a comunicação serial.

Em vários equipamentos, como as câmeras digitais, tocadores de


mp3 e pendrives, está presente a interface serial USB (Universal
Serial Bus).

A ligação entre aparelhos de DVD e BluRay a home theaters estão


sendo substituídos nas interfaces analógicas RCA e VGA para o
digital HDMI (High-Definition Multimedia Interface), transmitindo
dados não comprimidos de vídeo e imagem em um único cabo
e de forma digital, originando uma qualidade excepcional de
transmissão e um menor emaranhado de cabeamento.

Até mesmo os discos rígidos, que em sua maioria se comunicavam


de forma paralela com a placa-mãe através do cabo IDE, já foram
substituídos pelo padrão serial SATA (Serial ATA).

Por tudo isso, você pode perceber a importância dessa tecnologia.


Neste capítulo, vamos analisar a utilização desse método de
comunicação em microcontroladores PIC.
178 UNIUBE

Uma grande variedade de microcontroladores, sensores, memórias


e circuitos integrados já vêm preparados para essa tecnologia.
Vamos abordar as formas de comunicações seriais mais utilizadas
nesse segmento e, no final desse estudo, estaremos preparados
para escolher a que melhor se encaixa em cada tipo de projeto.

Após a apresentação dos principais conceitos, vamos ver uma


forma de se construir uma interface serial, responsável por fazer
a ligação entre o microcontrolador PIC e o computador.

Objetivos
Ao finalizar os estudos propostos neste capítulo, você estará apto a:

• explicar o funcionamento de uma comunicação serial;


• distinguir as várias formas de comunicação serial;
• decidir qual tipo de comunicação se encaixa melhor no
projeto;
• estabelecer uma comunicação serial entre o computador e o
microcontrolador PIC.

Esquema
5.1 Comunicação serial em microcontroladores
5.2 Taxa de transmissão
5.3 Cabeamento
5.4 Vias de comunicação
5.5 Modo de comunicação
5.6 Número de dispositivos conectados e o conceito mestre e
escravo
5.7 Métodos de transmissão
5.7.1 Transmissão assíncrona
5.7.2 Transmissão síncrona
5.8 Protocolos de comunicação
UNIUBE 179

5.8.1 Protocolo RS-232


5.8.2 Protocolo I²C
5.8.3 Protocolo SPI
5.8.4 Protocolo CAN
5.9 Construindo uma interface serial entre o PIC e o computador
5.9.1 Componentes de hardware
5.9.2 Configurando o software

5.1 Comunicação serial em microcontroladores

A transmissão de uma informação de um ponto a outro pode ser feita por


diversas formas entre os meios de comunicação existentes atualmente.

A comunicação serial proporciona uma forma eficiente de transmissão


de dados de um ponto a outro, tanto em dispositivos próximos como nos
componentes de uma placa de circuito, quanto em longas distâncias, a
exemplo da internet.

O caminho pelo qual a informação deve trafegar é chamado de canal de


comunicação.

Um canal pode ser criado através de fios, como por exemplo, nas linhas
telefônicas residenciais, ou também pelo ar, muito conhecido nas redes
de internet sem fio (wireless), ou ainda, pela luz, por meio das fibras
óticas.

Você pode perceber que há uma área muito extensa no estudo da


comunicação serial. Como estamos tratando do desenvolvimento
de projetos utilizando microcontroladores, vamos abordar mais
profundamente a transmissão através de fios.

Futuramente, após compreender o funcionamento da comunicação serial


para este tipo de canal, você terá mais facilidade no desenvolvimento de
180 UNIUBE

projetos que envolvam outros canais de comunicação, estabelecendo


uma transmissão sem fio, por exemplo.

A comunicação serial através de fios é dotada de uma larga variedade


de tecnologias similares, que são baseadas na transmissão de um bit por
vez através de um diferencial de tensão. Em geral, as diferenças entre
os tipos de comunicações seriais se dão nos níveis de tensão utilizados,
na velocidade com que os dados são transmitidos e na quantidade de
fios necessários para sua comunicação.

Existem vários fatores que definem uma forma de comunicação serial.


Dentre os principais, vamos discutir sobre os que são mais comuns no
projeto de circuitos baseados em microcontroladores.

5.2 Taxa de transmissão

A taxa de transmissão de dados é definida pelo número de mudanças


de sinal que ocorrem em um segundo e não deve ser confundida
com o número de bits transmitidos por segundo (bps). Isso porque,
em comunicações de alta velocidade, uma mudança de sinal pode
representar mais de um bit transferido.

Sendo assim, os modems são descritos com mais precisão em termos


de bits por segundo (bps), em vez de taxa de transmissão, expressa
em bauds.

Um exemplo são os modems de 9.600 bauds, que codificam 4 bits por


evento (mudança de sinal). Na realidade, eles operam a 2.400 bauds,
porém transmitem 9.600 bits por segundo, transmitindo 4 vezes mais
dados em um único evento.

SAIBA MAIS

A taxa de transmissão pode ser afetada por diversos fatores, tais como o
comprimento do cabo, a quantidade de ruído no ambiente, entre outros.
UNIUBE 181

5.3 Cabeamento

O comprimento do cabo para a comunicação serial afeta diretamente a


sua velocidade.

Dispositivos distantes um do outro que exigem um comprimento de


cabo muito longo podem causar erros na transmissão, fazendo com
que os dados tenham que ser retransmitidos, resultando em atrasos na
comunicação, ou ainda que esses dados se percam, causando falhas.

5.4 Vias de comunicação

As vias de comunicação são os fios que fazem a interligação dos


dispositivos. Seu conjunto é conhecido por barramento.

Quanto menor a quantidade de vias necessárias para que se faça a


comunicação entre os dispositivos, menor será o custo do projeto e mais
fácil sua implementação. Isso é devido a um menor custo de cabeamento,
e também pela maior simplicidade na confecção das placas de circuito,
por causa do menor número de trilhas. Há ainda uma economia nos
componentes eletrônicos pelo menor número de pinos nos circuitos
integrados.

Nas placas-mãe de computadores podem existir barramentos que


operem através de comunicação paralela, possuindo até 32 vias,
transmitindo 32 bits, simultaneamente.

5.5 Modo de comunicação


O modo de comunicação se traduz na forma com que os dados serão
transmitidos. Existem três modos de comunicação. O simplex, o
half-duplex e o full-duplex.

Um canal de comunicação onde os dados são transmitidos apenas em


uma direção é chamado de simplex. O rádio é um exemplo, em que a
182 UNIUBE

estação emissora transmite o sinal e os ouvintes apenas ficam escutando.


Outra forma de transmissão é o modo half-duplex. Nesse modo, os dados
podem ser transmitidos nas duas direções, porém uma de cada vez. Nos
aparelhos de walkie-talkie, você deve pressionar um botão para falar,
enquanto que a outra pessoa fica escutando. Posteriormente, a outra
pessoa faz o mesmo. As duas não conversam simultaneamente.

A Figura 1, a seguir, ilustra uma comunicação entre dois walkie-talkies.


Veja que a comunicação ocorre em um sentido, enquanto o outro fica
aguardando.

Figura 1: Comunicação half-duplex em um sentido

Para que o outro aparelho transmita a outra informação, ocorre o inverso,


como mostrado na Figura 2.


Figura 2: Comunicação half-duplex em outro sentido

Por último, temos a comunicação simultânea, chamada de full-duplex.


Nesse tipo de transmissão, os dados podem ser recebidos e transmitidos
ao mesmo tempo.
UNIUBE 183

Dois rádios podem se comunicar simultaneamente, transmitindo em uma


frequência e recebendo em outra frequência diferente.

IMPORTANTE!

Na criação de um projeto, o modo de comunicação desejado irá afetar na


complexidade do controle
Figura dos dados
3: Comunicação e também
full-duplex ocorrendona
nosquantidade
dois de vias de
sentidos simultaneamente
comunicação, refletindo no seu custo.

5.6 Número de dispositivos conectados e o conceito mestre


e escravo

É importante levar em conta, no projeto, o número de dispositivos que


serão interligados no mesmo barramento.

Existem projetos nos quais a comunicação deve ocorrer somente entre


dois dispositivos, mas também há outros projetos em que centenas de
equipamentos devem ser interligados por meio do mesmo barramento serial.

Um projeto simples em que um sensor deve captar a temperatura da


água de um aquário e enviá-la para o computador, exigirá que apenas
dois dispositivos se comuniquem no barramento, um dispositivo para
sensoriamento e o computador para exibição do valor.

Já, em outro caso, em que um sistema de alarme deve monitorar a


abertura de várias janelas, a cerca elétrica e as portas da casa, será
preciso a interligação de muitos dispositivos no barramento.
184 UNIUBE

Agora, imagine que nesse barramento do sistema de alarme, todos


os dispositivos interligados estejam monitorando e enviando suas
informações para o computador. Para que isso ocorra da forma correta, é
necessário que haja um controle que organize o tráfego das informações.

Esse controle é obtido sob o conceito mestre e escravo. Isso quer dizer
que deve existir um dispositivo mestre, que é encarregado de controlar
as comunicações do barramento. Em redes mais simples, ele faz a
requisição dos dados ao dispositivo escravo, que então os devolve ao
dispositivo mestre.

Esse método garante a organização do tráfego de informações no


barramento, onde normalmente existem um dispositivo mestre e vários
outros escravos, como válvulas e sensores; entretanto, há também
barramentos em que pode haver mais de um dispositivo mestre.

5.7 Métodos de transmissão

A transmissão dos bits não é realizada de qualquer forma. É preciso


existir um padrão para que o receptor possa receber os dados de forma
correta, realizando sua interpretação.

Para isso, são criados pacotes que são enviados a cada momento
regular. Em comunicações mais simples, esse pacote geralmente é um
caractere (ou seja, um byte) ou um conjunto deles.

Após o envio, é feita uma pausa, que não precisa ter uma duração
fixa. Quem recebe os dados deve saber o instante correto para ler os
bits individuais desse canal, reconhecendo exatamente onde o pacote
começa e quanto tempo decorre entre os bits.

Existem dois métodos usados para a transmissão dos dados. A


transmissão assíncrona, mais utilizada por ser mais simples, e a
transmissão síncrona, um pouco mais complexa, porém mais rápida.
UNIUBE 185

5.7.1 Transmissão assíncrona

Esse tipo de transmissão é caracterizado pelo envio de pequenos dados,


normalmente um caractere por vez. Além disso, na maioria das vezes,
eles não são transmitidos de forma regular, como em uma digitação em
um teclado de computador. Quando você está digitando, as teclas são
pressionadas em intervalos de tempo diferentes, sendo transmitidas ao
processador em intervalos irregulares.

Nos sistemas assíncronos, o receptor e o emissor devem ser pré-configura-


dos, para operarem praticamente na mesma frequência de clock.

Para que haja a correta comunicação, são definidos bits de controle, também
conhecidos como flags, que definem o começo e o fim do caractere a ser
transmitido, geralmente composto por alguns bits.

Esses flags e a mesma frequência de clock é que orientam o receptor na


remontagem dos dados recebidos.

Mensagens pequenas minimizam o risco de o oscilador do transmissor e o


do receptor variarem. Este tipo de comunicação permite que o transmissor
encaminhe quantas mensagens quiser, porém desconhecendo se o receptor
recebeu ou não. A eficiência desse método de transmissão é inferior à do
modo síncrono.

O usuário pode usar métodos que façam a checagem dos dados recebidos,
verificando se houve alguma corrupção ou falha na recepção.

5.7.2 Transmissão síncrona

Nos sistemas síncronos, os dados e a informação de tempo são transmitidos


de forma separada. O tempo é controlado pelo envio de pulsos de clock em
uma via, fazendo com que o receptor saiba o momento certo de efetuar a
leitura do bit enviado. Existem técnicas que compõem o sinal de clock e dados
186 UNIUBE

em um único canal, mas normalmente nos sistemas mais simples eles são
transmitidos em vias distintas.

Neste método de transmissão, os dados são enviados em blocos.


Não existem bits de controle no início e no fim do caractere e nem
irregularidades nos instantes de transmissão. De um modo geral:
o transmissor e o receptor se comunicam, sincronizam suas ações
e preparam-se para efetuar a comunicação, já sabendo a taxa de
transmissão e o tamanho dos dados ordenados e conhecidos.

Esse tipo de transmissão é mais indicado para a transferência de grandes


quantidades de informação, como, por exemplo, para receber os dados
de um scanner que está digitalizando uma imagem, linha a linha.

Ao final da transmissão, pode ser feita uma checagem da integridade dos


dados recebidos; caso haja algum erro nestes dados, toda a transmissão
é descartada.

SAIBA MAIS

Ainda que as interfaces seriais síncronas sejam mais rápidas, as assíncronas


são mais utilizadas pelo fato de terem um custo menor e serem mais fáceis
de construir.

5.8 Protocolos de comunicação

Os protocolos definem a linguagem pela qual os dispositivos irão se


comunicar.

Para que haja comunicação, é necessário que todos falem a mesma


“língua”, usando o mesmo protocolo. Eles foram criados a fim de
padronizar a comunicação entre os dispositivos.

Existem vários tipos de protocolos, em que cada um possui suas próprias


características.
UNIUBE 187

Foram criados muitos tipos de protocolos para a comunicação serial,


entre os principais, vamos fazer uma abordagem sobre os que são mais
comuns em microcontroladores.

Agora, vamos fazer uma abordagem sobre os protocolos: RS-232


(Recommended Standard 232), o I²C (Inter-Integrated Circuit), o SPI
(Serial Peripheral Interface) e, encontrado em alguns modelos mais
avançados de microcontroladores, o protocolo CAN (Controller Area
Network).

5.8.1 Protocolo RS-232

RS-232 é um protocolo de comunicação serial assíncrono largamente


usado em computadores e sistemas digitais.

O protocolo RS-232 é muito antigo e ainda o comumente usado em


conexões mais simples, devido à sua simplicidade de implementação,
por estar presente nos computadores pessoais e também pela maioria
dos microcontroladores possuírem essa funcionalidade.

Este protocolo foi padronizado pela norma EIA (Electronics Industries


Alliance). Este padrão apenas especifica características elétricas dos
circuitos e numeração dos pinos. Outras características que acompanham
o padrão, mas que não fazem parte da norma são: o conector em forma
de “D”, o uso de código ACII, o formato dos dados e a comunicação
assíncrona.

O RS-232 foi construído para operar em todos os modos de comunicação,


incluindo o modo full-duplex.

O cabeamento pode ser feito a uma distância de até 25 metros. Para


distâncias maiores, é recomendável o uso de cabos especiais, todavia
outros padrões seriais podem se apresentar melhores nesses casos. Sua
taxa de transmissão pode chegar aos 115.200 bits/s.
188 UNIUBE

Uma desvantagem deste protocolo é que ele permite somente a conexão


entre dois dispositivos no mesmo barramento, um em cada ponta.

DICAS

Por meio de uma conexão entre o microcontrolador e o computador, o


desenvolvedor ganha uma importante ferramenta, permitindo depurar
programas instalados no PIC, receber informações de sensores no
computador, enviar dados para o dispositivo entre outras funções.

• Detalhes da comunicação
A comunicação através do protocolo RS-232 é feita através do envio de
um conjunto de bits, normalmente um caractere de 8 bits. No capítulo
seguinte, estudaremos o que significam os 8 bits e qual é a diferença
entre um número decimal e um binário.

Geralmente, os caracteres enviados através de uma transmissão serial


seguem o padrão ASCII (American Standard Code for Information
Interchange) de 7 bits, exibidos nas Tabelas 1 e 2 a seguir:

Tabela 1: ASCII de 7 bits

Binário Decimal Hexa Símb. Binário Decimal Hexa Símb.


0010 0000 32 20 0100 0000 64 40 @
0010 0001 33 21 ! 0100 0001 65 41 A
0010 0010 34 22 " 0100 0010 66 42 B
0010 0011 35 23 # 0100 0011 67 43 C
0010 0100 36 24 $ 0100 0100 68 44 D
0010 0101 37 25 % 0100 0101 69 45 E
0010 0110 38 26 & 0100 0110 70 46 F
0010 0111 39 27 ' 0100 0111 71 47 G
0010 1000 40 28 ( 0100 1000 72 48 H
0010 1001 41 29 ) 0100 1001 73 49 I
UNIUBE 189

0010 1010 42 2A * 0100 1010 74 4A J


0010 1011 43 2B + 0100 1011 75 4B K
0010 1100 44 2C , 0100 1100 76 4C L
0010 1101 45 2D - 0100 1101 77 4D M
0010 1110 46 2E . 0100 1110 78 4E N
0010 1111 47 2F / 0100 1111 79 4F O
0011 0000 48 30 0 0101 0000 80 50 P
0011 0001 49 31 1 0101 0001 81 51 Q
0011 0010 50 32 2 0101 0010 82 52 R
0011 0011 51 33 3 0101 0011 83 53 S
0011 0100 52 34 4 0101 0100 84 54 T
0011 0101 53 35 5 0101 0101 85 55 U
0011 0110 54 36 6 0101 0110 86 56 V
0011 0111 55 37 7 0101 0111 87 57 W
0011 1000 56 38 8 0101 1000 88 58 X
0011 1001 57 39 9 0101 1001 89 59 Y
0011 1010 58 3A : 0101 1010 90 5A Z
0011 1011 59 3B ; 0101 1011 91 5B [
0011 1100 60 3C < 0101 1100 92 5C \
0011 1101 61 3D = 0101 1101 93 5D ]
0011 1110 62 3E > 0101 1110 94 5E ^
0011 1111 63 3F ? 0101 1111 95 5F _

Fonte: Adaptado de: <http://www.asciitable.com/>.

Tabela 2: Continuação da Tabela ASCII de 7 bits

Binário Decimal Hexa Símb.


0110 0000 96 60 `
0110 0001 97 61 a
0110 0010 98 62 b
0110 0011 99 63 c
0110 0100 100 64 d
0110 0101 101 65 e
0110 0110 102 66 f
0110 0111 103 67 g
0110 1000 104 68 h
190 UNIUBE

0110 1001 105 69 i


0110 1010 106 6A j
0110 1011 107 6B k
0110 1100 108 6C l
0110 1101 109 6D m
0110 1110 110 6E n
0110 1111 111 6F o
0111 0000 112 70 p
0111 0001 113 71 q
0111 0010 114 72 r
0111 0011 115 73 s
0111 0100 116 74 t
0111 0101 117 75 u
0111 0110 118 76 v
0111 0111 119 77 w
0111 1000 120 78 x
0111 1001 121 79 y
0111 1010 122 7A z
0111 1011 123 7B {
0111 1100 124 7C |
0111 1101 125 7D }
0111 1110 126 7E ~

Fonte: Adaptado de <http://www.asciitable.com/>.

O tipo de codificação comumente usada pelo protocolo RS-232 para o


envio dos dados é o “start-stop assíncrono”. Ela define os bits de controle
que são adicionados no início e no final do caractere.

A Figura 4 representa um frame contendo os bits que podem ser usados


na transmissão. É usado um bit de início, representado pela letra “S”,
em seguida os bits de dados, sendo definidos a no máximo 8 bits, o uso
ou não de um bit de paridade “P”, e, por último, a marcação do final da
mensagem, feita por um ou dois bits de parada “T”.
UNIUBE 191

Figura 4: Mensagem usada na transmissão RS-232.

A próxima figura, Figura 5, mostra a ligação entre dois dispositivos através


dos sinais TX e RX.

Figura 5: Ligação entre dois dispositivos.

Note a inversão dos pinos RX e TX de cada um, para que a transmissão


de um dispositivo seja recebida pelo outro. O fio terra foi omitido da figura,
mas ele deve estar presente no circuito, sendo usado como referência
do sinal.

O padrão RS-232 especifica que um bit alto ‘1’ deve ser transmitido com
uma tensão negativa de, no máximo, -25V, e que um bit baixo ‘0’ deve
ter, no máximo, uma tensão positiva de +25V.

A transmissão de um pacote de 7 bits é demonstrada na Figura 6. Os


seguintes passos são executados no envio:

1. quando não há transmissão, o sinal TX fica com nível alto (-15V);


2. quando é preciso enviar um dado, o transmissor coloca a linha TX
em nível baixo (+15V), representando o bit de início (Start bit);
3. então são enviados os bits de dados, nesse caso, 7 bits;
4. um bit de paridade é enviado após os bits de dados;
5. finalmente, a linha TX envia mais 2 bits com nível alto (-15V), os bits
de parada (Stop bits).
192 UNIUBE

Figura 6: Transmissão RS-232 de um pacote de 7 bits.


Fonte: Adaptado de:<http://www.dataproductsplus.com/RS232-FAQ.asp>.

Note que um bit baixo ‘0’ é chamado de espaço (space) e um bit alto
‘1’ é chamado de marca (mark). Outro ponto a ser levado em conta é a
chamada região de transição; nesse caso, entre -3V e +3V. Ela é usada
para evitar que ruídos elétricos possam causar erros na transmissão.

• Paridade
Ruídos e distúrbios elétricos momentâneos podem causar mudanças nos
dados quando estão trafegando pelos canais de comunicação.

O bit de paridade é usado para verificar se houve ou não corrupção nos


dados transmitidos. Existem dois tipos de código de paridade: a paridade
par e a paridade ímpar.
Ele é calculado baseado no número de bits com valor ‘1’ dos dados a
serem transmitidos. Se a sua soma for par, a paridade será par; caso
contrário, será ímpar. No caso de a soma ser nula, como no caso do
binário “0”, a paridade será par.

Na recepção do pacote, a paridade do dado é recalculada pelo hardware


local e comparada com o bit de paridade recebido com os dados.
UNIUBE 193

Se algum bit mudar de estado, a paridade não irá coincidir, e um erro


será detectado. Mas, veja que, se dois bits mudarem, o erro não será
detectado.

Veja, a seguir, na Tabela 3, o cálculo do bit de paridade, usando paridade


par, para 4 bytes diferentes.

Tabela 3: Cálculo do bit de paridade

Byte de dados Quantidade de bits ‘1’ Bit de paridade


0000 0000 0 1
1011 0011 5 0
0010 0100 2 1
1111 1111 8 1

• Conectores
O conector mais utilizado para a conexão serial com o PC é o DB-9.
A descrição dos pinos é mostrada na Figura 7, logo abaixo do quadro.
Observe que cada pino recebe uma sigla de identificação. Veja o Quadro
1 seguinte:

Quadro 1: Siglas dos pinos do conector DB-9 da Porta Serial

Pino Nome Sentido Descrição


1 CD Entrada Portadora detectada
2 RXD Entrada Recepção de dados
3 TXD Saída Transmissão de dados
4 DTR Saída Terminal de dados pronto
5 GND Terra
6 DSR Entrada Conjunto de dados pronto
7 RTS Saída Pronto para enviar (PC)
8 CTS Entrada Envie os dados (Modem)
9 RI Entrada Indicador de telefone tocando
194 UNIUBE

Figura 7: Pinos do conector serial DB-9 macho.



Fonte: Adaptado de: <http://techpubs.sgi.com/library/tpl/cgi-bin/
getdoc.cgi?coll=linux&db=bks&fname=/SGI_EndUser/SGIconsole_
HW_CG/apb.html>.

Em circuitos mais simples, sem controle de fluxo, podem ser usados


apenas os pinos RX e o TX, possibilitando a utilização de um cabo
mais simples. Um cabo muito utilizado é o Flat RJ, aqueles usados em
aparelhos de telefone. Seu uso torna mais fácil a confecção das placas
de circuito impresso, economizando espaço e simplificando sua solda.

Usando somente os pinos RXD e TXD, mais um fio é necessário para


fazer a conexão dos dispositivos. Este pino é o terra, usado como
referência e que precisa ser comum aos dois equipamentos.

Não é recomendável utilizar cabos muito longos; quinze metros, ou


menos, é o indicado para este tipo de comunicação. A tensão nos fios
varia de 3 a 15 volts positivos ou negativos, não reconhecendo valores
próximos de zero.

Existe uma nomenclatura para identificação de quem irá enviar ou receber


os dados. DTE (Data Terminal Equipment) é quem faz o processamento,
UNIUBE 195

um computador é um exemplo. Já, quem faz a conexão, no nosso caso, o


dispositivo microcontrolado, é chamado de DCE (Data Circuit-terminating
Equipment).

Os nomes dos sinais são determinados do ponto de vista dos dispositivos


DTE. Se a norma EIA-232 fosse seguida corretamente, estes sinais
teriam sempre o mesmo nome e número do pino no lado do DCE. Porém,
em alguns casos, é muito difícil determinar quem é o DCE e o DTE,
tornando mais difícil essa padronização.

5.8.2 Protocolo I²C

Caso se necessite que diversos dispositivos se comuniquem no mesmo


barramento, uma solução seria usar o protocolo I²C, que foi originalmente
desenvolvido pela Philips na década de 80.

É um protocolo que usa um modo de comunicação síncrono, com


velocidade de comunicação moderada, podendo chegar a uma taxa de
transmissão de até 3,4 Mbps. A transmissão dos dados é feita no modo
half-duplex, ou seja, quando um dispositivo está comunicando, o outro
deve esperar.

Os dispositivos são interligados em um barramento de dois fios,


nomeados de serial data (SDA) e serial clock (SCL). A alimentação dos
dispositivos deve ser feita de forma separada.

Na Figura 8, estão destacados os dois pinos que fazem a comunicação


I²C no microcontrolador PIC16F877, o pino 18 (SCL) e o pino 23 (SDA).
196 UNIUBE

Figura 8: Destaque dos pinos SDA (23) e SCL (18) no PIC16F877.


Fonte: MICROCHIP, Datasheet PIC16F87X (2003).

Um exemplo de rede I²C é visto na Figura 9, em que existe um dispositivo


mestre e três escravos: um conversor Analógico/Digital, um conversor
Digital/Analógico e, por fim, um microcontrolador.

Figura 9: Exemplo de um barramento I²C.

O dispositivo mestre é responsável por requisitar ou enviar alguma


informação a qualquer um dos dispositivos escravos. Ou seja, toda a
organização do tráfego de dados no barramento deve ser feita pelo
dispositivo mestre.
UNIUBE 197

Para haver a correta comunicação entre os dispositivos, cada um é


configurado com um endereço único.

A comunicação ocorre da seguinte maneira: o dispositivo mestre envia


o pacote no barramento. Nesse pacote, está embutido o endereço do
escravo que deve recebê-lo. Todos os escravos vão receber o pacote,
porém somente aquele que possui o endereço correto é que vai tratar os
dados recebidos, o restante irá descartar o pacote.

Normalmente, são usados 7 bits de endereçamento, resultando um total


de 128 dispositivos diferentes que podem ser interligados ao barramento.
Mas, também existem dispositivos que aceitam até 10 bits, aumentando
essa capacidade. Porém, a quantidade de dispositivos também está
limitada à capacitância do barramento, que aumenta conforme a
quantidade de dispositivos pendurados, chegando a um ponto que
impossibilita a comunicação.

Na maioria das redes, existe somente um dispositivo mestre, mas há


casos em que podem existir mais de um.

A distância máxima do barramento I²C suportada é menor que a do


RS-232, sendo limitada a poucos metros. Por isso, o I²C é recomendado
para ser utilizado na própria placa de circuito.

Muitos microcontroladores possuem esta funcionalidade e não há


necessidade do uso de interfaces entre os dispositivos, o que aumenta
a agilidade no desenvolvimento, e ainda há economia de trilhas e espaço
nas placas de circuito.

No mercado, existem diversos circuitos integrados que utilizam o


protocolo I²C, tais como: sensores de temperatura, relógios de tempo
real (RTC), conversores A/D e D/A, memórias, entre vários outros.
198 UNIUBE

SAIBA MAIS

Um exemplo interessante em que é utilizado o protocolo I²C está no site


<http://www.mikrokopter.de/ucwiki/en/FlightCtrlManual#I2C_Bus> em inglês).
Trata-se de um helicóptero para praticantes de aeromodelismo, que pode ser
feito em casa. O protocolo é utilizado na comunicação entre o controlador
principal e os controladores dos motores. Os desenvolvedores o escolheram
principalmente pela boa velocidade de comunicação em conjunto com sua
simplicidade de implementação.

5.8.3 Protocolo SPI

Outro protocolo presente em vários microcontroladores é o SPI,


desenvolvido pela Motorola.

Da mesma forma que o I²C, ele utiliza o modo de comunicação


síncrono. Porém, uma importante característica que o diferencia é que
a transferência dos dados pode ser feita no modo full-duplex, permitindo
que cada dispositivo possa atuar tanto como emissor quanto como
receptor, ao mesmo tempo.

Ele permite uma velocidade maior que a do I²C, chegando a velocidades


maiores que 1Mbps, porém exige um pino a mais. E, ainda, no caso de
se usar vários dispositivos, outros pinos adicionais serão necessários,
como veremos em seguida.

Da mesma forma que no I²C, neste protocolo, os dispositivos devem ser


configurados em mestre ou escravo.

São necessários 4 pinos para a comunicação SPI no modo padrão,


desconsiderando os dois pinos de alimentação.

Os pinos reservados para a comunicação SPI no microcontrolador


PIC16F877 estão destacados na Figura 10. São usados os pinos 7 (SS),
o pino 18 (SCK), o 23 (SDI) e, por fim, o pino 24 (SDO).
UNIUBE 199

Figura 10: Destaque para os pinos SS (7), SCK (18), SDI (23) e SDO (24) utilizados
na comunicação SPI.
Fonte: MICROCHIP, Datasheet PIC16F87X. 2003.

Para efetuar a transmissão, três sinais são responsáveis pela transferên-


cia de dados entre o mestre e o escravo:

• SDO (Serial Data Out)


• SDI (Serial Data In)
• SCK (Serial Clock)

Outro pino, O SS (Slave Select) é ativado pelo mestre a fim de selecionar


com qual escravo será feita a comunicação. Veja, então, que deverá ser
utilizado um pino SS do dispositivo mestre para cada dispositivo escravo
que existir. Mas, também existem alguns métodos que minimizam esse
problema, sendo desenvolvido conforme o tipo de rede SPI. Note que, no
caso de se comunicar somente um dispositivo escravo, não é necessária
a utilização do SS.
200 UNIUBE

Um exemplo de uma rede utilizando o SPI é mostrado na Figura 11. Nela,


está representada a ligação de um dispositivo mestre a um escravo.

Figura 11: Exemplo de um barramento SPI.

A ativação do dispositivo escravo é feita através do pino SS. Note que


se trata de um pino com sinal invertido, ou seja, ele é ativado quando
seu valor é 0.

A comunicação ocorre da seguinte maneira: o mestre coloca a saída


SS correspondente ao dispositivo desejado em nível baixo, ativando o
escravo. O mestre, então, inicia os ciclos de clock.

Durante cada ciclo de clock SPI, ocorre uma transmissão full-duplex de


dados. Ao mesmo tempo em que o mestre envia um bit no pino SDO e o
escravo faz sua leitura no pino SDI, o escravo envia um bit no pino SDO
e o mestre realiza sua leitura no pino SDI.

A configuração deste protocolo é muito simples, tornando sua


programação menos complicada. Da mesma forma que o I²C, o protocolo
SPI é recomendado para ser usado em curtas distâncias, ficando restrita
geralmente à própria placa de circuito.
UNIUBE 201

Os cartões de memória SD, muito utilizados em câmeras digitais,


normalmente utilizam a comunicação SPI. Existe uma larga gama
de componentes criados para o protocolo SPI, dentre os quais estão
memórias EEPROM e Flash, conversores ADC, relógios de tempo real
(RTC), controladores CAN e diversos outros dispositivos.

5.8.4 Protocolo CAN

Um excelente protocolo serial a ser utilizado em grandes distâncias é o


CAN, desenvolvido pela BOSCH, no início da década de 80.

É um protocolo robusto que foi criado para ser utilizado em ambientes


hostis, com alto índice de ruídos e interferências ou, ainda, em sistemas
que necessitem de transmissão de mensagens com prioridade e
capacidade de serem enviadas em tempo real.

Entretanto, ainda podemos usá-lo em redes comuns onde são interligados


vários sensores e microcontroladores, garantindo um sistema bastante
confiável.

Para garantir toda essa confiabilidade, o protocolo CAN é dotado


de diversos mecanismos que garantem uma comunicação efetiva,
reconhecendo e tratando de forma eficaz erros que, porventura, venham
a ocorrer na rede.

No início, este protocolo era utilizado apenas pela indústria automotiva;


hoje em dia, já é utilizado em vários outros campos de aplicação: em
sistemas embarcados, como aviões e navios, indústrias automatizadas,
aplicações médicas e diversas outras áreas.

Na Figura 12, é exibida uma aplicação CAN típica de um veículo, possuindo


mais que um barramento CAN, operando a diferentes velocidades. Isso
ocorre porque nem todos os dispositivos precisam de um mesmo tempo
de resposta. Alguns são críticos, como o sistema de freio ABS, enquanto
que outros não são como o controle de ar condicionado.
202 UNIUBE

Gateway

Figura 12: Típica aplicação de uma rede CAN em um veículo.


Fonte: Ibrahim (2008).

O CAN utiliza o método de transmissão síncrono, sendo que o sincronismo


entre os dispositivos da rede é feito em relação ao início de cada mensagem
lançada ao barramento.

A velocidade da comunicação em um barramento CAN é inferior à do SPI. A


ISO-11898 especifica que um dispositivo no barramento é capaz de operar a
1Mbps por meio de um cabo de 40 metros.

A rede CAN não deve ser comparada com as redes I²C ou SPI. Como citado
anteriormente, o CAN é indicado para operar em ambientes externos, interli-
gando equipamentos a longas distâncias, enquanto que os outros protoco-
los em questão são indicados para a comunicação de dispositivos internos,
normalmente na mesma placa de circuito.

Para se fazer a comunicação dos equipamentos, torna-se necessário apenas


um par de fios, nomeados de CANH (High) e CANL (Low). A alimentação dos
dispositivos deve ser fornecida separadamente.
UNIUBE 203

A comunicação de um microcontrolador PIC a um barramento CAN pode


ser feita de duas formas; isso vai depender da família do microcontrolador
a ser usada. Porém, em ambas as formas de ligação, deve ser usado
um chip que fará a interpretação dos sinais elétricos do barramento,
chamado de transceiver. Um transceiver muito comum é o MCP2551,
da própria Microchip.

Alguns microcontroladores da família PIC18 já possuem um controlador


CAN embutido, como o PIC18F458, facilitando a construção do
dispositivo, seja pela construção do hardware, necessitando de uma
menor quantidade de componentes, seja pela programação do software,
com as instruções já contidas no micro. Esse tipo de ligação pode ser
observado na Figura 13.

Transceiver

Figura 13: Dispositivo CAN com o controlador separado do microcontrolador.


Fonte: Ibrahim (2008).

Um controlador CAN muito utilizado é o MCP2515, também da Microchip.


Note que a comunicação entre o controlador CAN e o microcontrolador
é feita utilizando o protocolo SPI.

Caso a decisão seja usar microcontroladores mais simples, como os da


família PIC12 ou PIC16, deve ser usado um controlador CAN separado,
204 UNIUBE

responsável por fazer a intermediação dos sinais do barramento com o


microcontrolador. Essa ligação é demonstrada na Figura 14.

Transceiver

Figura 14: Dispositivo com módulo do Controlador CAN integrado no PIC.


Fonte: Adaptado de Ibrahim (2008).

Apesar de todas as qualidades do protocolo CAN, seu custo de


implementação se torna maior que o dos outros padrões seriais. Os
microcontroladores e chips que suportam essa tecnologia são mais
difíceis de serem encontrados no mercado e, geralmente, são mais caros.

5.9 Construindo uma interface serial entre o PIC e o


computador

Normalmente, a interação do operador com os dispositivos microcon-


trolados é feita através de um teclado ou conjunto de teclas. Porém,
existe uma maneira que pode aumentar os recursos de interação entre
o usuário e o dispositivo.

Estamos falando da comunicação entre um microcontrolador e um PC.


Essa interação oferece inúmeras vantagens para o desenvolvedor e o
usuário do dispositivo microcontrolado.

Na visão do desenvolvedor, isso traria uma forma de avaliar o programa


gravado no PIC, recebendo e visualizando valores de variáveis e ainda
controlando pontos-chave do programa, facilitando sua depuração.
UNIUBE 205

Na visão do usuário, a interação com o dispositivo através do computador


traria maior conforto, podendo alterar parâmetros e visualizar eventos na
própria tela do computador.

A maneira mais simples de realizar essa comunicação é com a utilização


do protocolo RS-232, que está presente na porta serial do computador.
Agora, estudaremos como criar uma interface de comunicação entre o
microcontrolador e o computador. Esta interface pode ser utilizada em
qualquer tipo de circuito utilizando um microcontrolador PIC16F877 e a
porta serial do PC.

Sua função é converter os sinais TTL do microcontrolador para o padrão


RS-232 do PC, para transmissão dos dados pelo PIC, e, também o
contrário, para recepção dos dados enviados pelo computador.
Primeiramente, abordaremos os componentes eletrônicos que deverão
ser utilizados e, por último, as configurações da programação serial do
microcontrolador PIC16F877.

5.9.1 Componentes de hardware

Como estudamos anteriormente, o protocolo RS-232 é caracterizado por


transmitir os bits utilizando tensões positivas e negativas por meio dos
sinais RX e TX. O nível alto é reconhecido por uma tensão negativa e o
nível baixo por uma tensão positiva.

Porém, na maioria dos circuitos desenvolvidos para aplicações que


utilizam microcontroladores são utilizadas fontes de alimentação simples,
com tensões típicas de 5 ou 12 volts positivos.

Isso se torna um problema, pois como visto anteriormente, as portas


seriais dos computadores trabalham segundo o padrão RS-232, e
precisam de tensões positivas e negativas.
206 UNIUBE

Então, para resolver este problema, será preciso construir uma


fonte que forneça tensões positivas e negativas?

A resposta é não. Isso porque foram desenvolvidos circuitos


integrados que adaptam os níveis de tensão dos circuitos
comuns para o padrão RS-232.

A Figura 15 a seguir, mostra a utilização de um conversor de nível entre


um computador e um dispositivo microcontrolado. Note o protocolo
RS-232 entre o PC e o conversor, e do outro lado, os sinais transmitidos
em nível TTL.

Figura 15: Conversor de nível entre um PC e um microcontrolador.

Um CI conversor bastante utilizado pelos desenvolvedores é o MAX232,


da Maxim. Ele faz a conversão elétrica de sinais TTL (+5V) ou CMOS
(+15V), para o padrão RS-232, e também o contrário.

Logo a seguir, na Figura 16, vemos a identificação dos pinos e um típico


circuito do chip MAX232, apresentado no datasheet do fabricante Maxim.
Note que este chip é dotado de dois conversores.
UNIUBE 207

Figura 16: Identificação dos pinos e um típico circuito utilizando o MAX232.


Fonte: Maxim, (2003).

Neste circuito de interface, podemos observar que há somente uma


fonte de +5 volts, especificada pelo fabricante. As tensões negativas são
geradas exclusivamente por capacitores externos e pelo circuito interno
do chip, que possui um dobrador de tensão e um inversor de tensão.

Do lado esquerdo no desenho, que representa o diagrama interno,


podemos ver uma entrada e uma saída para a conexão dos circuitos
TTL/CMOS e, do outro lado, a entrada e a saída correspondente para o
protocolo RS-232.

Definido o chip que irá fazer a conversão dos sinais, resta agora fazer a
sua ligação com o microcontrolador.

Devemos tomar cuidado para não invertermos as linhas de comunicação


RX e TX. No diagrama a seguir, Figura 17, vemos como deve ser feita
a conexão dos pinos.
208 UNIUBE

Figura 17: Conexão serial entre o PIC16F877 e o MAX232.

Note que está sendo utilizado somente o primeiro conversor do MAX232,


sobrando ainda outro módulo conversor. O pino de saída R1 do MAX232
é ligado ao pino de recepção RX do PIC, e o pino de entrada T1 do
MAX232, por sua vez, é ligado ao pino de transmissão TX do PIC.

Definida a ligação entre o microcontrolador e o MAX232, resta-nos fazer


a interligação do MAX232 à porta serial do computador.

Na nossa demonstração, vamos usar o microcontrolador PIC16F877. Os


pinos RX e TX estão marcados na próxima figura. A recepção do sinal
vindo da porta serial do PC será feita pelo pino RX (26), e a transmissão
do PIC vai ser através do pino TX (25).

DICAS

Os pinos RX e TX da porta serial são, por padrão, os pinos 25 e 26 para o


PIC16F877, porém é possível modificar estes pinos caso necessite. Vide
Figura 18 a seguir.
UNIUBE 209

Figura 18: Destaque dos Pinos RX (26) e TX (25) do Microcontrolador PIC16F877/874.


Fonte: MICROCHIP, Datasheet PIC16F87X. 2003.

Os pinos que nos interessam da porta serial são mostrados na Figura 19.
Usaremos somente os pinos RX, TX e o terra, para referência do sinal.

Figura 19: Destaque dos pinos do conector DB-9 Fêmea do PC

Na Figura 20, temos o diagrama em blocos das ligações do barramento


serial entre os componentes do circuito. Observe o sentido de transmissão
dos dados e os pinos usados em cada componente.
210 UNIUBE

Figura 20: Conexão serial entre o PIC e o computador através do MAX232.

Analise também a presença do sinal RS-232 entre o MAX232 e a porta


serial, e o sinal TTL entre o microcontrolador e o MAX232.

É bom ressaltar ainda a ligação de todos os componentes em uma


mesma referência de sinal através do pino terra, o que é imprescindível
para o funcionamento do protocolo RS-232.

A Figura 21 apresenta um circuito de interface serial RS232-TTL.

Figura 21: Circuito de Interface RS232-TTL utilizando o MAX232.

Com esta interface, é possível que qualquer dispositivo microcontrolado


envie e receba dados do computador, através da porta serial. É
necessário que o desenvolvedor do dispositivo disponibilize os pinos
RX, TX e o terra do microcontrolador.
UNIUBE 211

A ligação entre o computador e o dispositivo microcontrolado deve ser


feita usando um cabo DB-9 fêmea.

A ligação dos pinos RX e TX do microcontrolador deve ser feita nas


saídas TTL RX e TTL TX mostradas no diagrama.

Este circuito exige uma fonte externa de +5V. Note que o circuito é
bastante simples, necessitando de apenas 4 capacitores de 1 µF e o
MAX232.

IMPORTANTE!

Existem modos de se obter a tensão de alimentação diretamente da porta


serial do computador. Isso é muito utilizado em dispositivos que não usam
baterias ou não são ligados em tomadas de energia, com ocorre nos mouses
e teclados. Uma forma de se conseguir uma tensão de +5V é utilizando
os pinos de saída DTR e RTS, em conjunto com alguns componentes
eletrônicos.

5.9.2 Configurando o software

A maioria dos microcontroladores possui um módulo USART (Universal


Synchronous Asynchronous Receiver Transmitter), que é um Transmissor
e Receptor Síncrono ou Assíncrono Universal.

Uma de suas funções é encapsular a mensagem a ser enviada,


convertendo o byte de dados em uma sequência de bits e adicionando
os bits de controle. No caso da recepção, ela é responsável por
desempacotar a mensagem recebida, devolvendo somente o caractere
recebido.

Isso facilita um pouco a vida do programador, tornando mais simples a


configuração da comunicação.
212 UNIUBE

Há várias configurações a serem feitas para a conexão RS-232. Veremos,


agora, como devemos proceder para receber e enviar os dados pela
interface serial.

Os parâmetros mais comumente configurados são:

1. a velocidade de transmissão;
2. a quantidade de bits do pacote a ser enviado;
3. a quantidade de bits de parada;
4. a paridade.

A velocidade é a quantidade de bits por segundo transmitida de um


dispositivo para outro. Taxas comuns são 300, 1.200, 2.400, 9.600, 19.200,
38.400, 57.600 e até 115.200. A quantidade de bits a ser enviada pode ser
configurada para até, no máximo, 9 bits. Para os bits de parada, podem ser
utilizados 1 ou 2 bits. A paridade pode ser desativada, ou, então, definida
em par ou ímpar, usando o nono bit de dados, mas ela deve ser tratada pelo
próprio programa do desenvolvedor.

É imprescindível que todas essas configurações devam ser definidas


igualmente nos dois dispositivos.

Nos microcontroladores PIC, uma vez configurado o uso da porta serial


no programa, os pinos RX e TX não poderão mais ser usados como pinos
digitais comuns.

No caso da comunicação RS-232, vamos configurar a USART no modo


assíncrono. Como o circuito de interface serial possui um pino para recepção
(RX) e outro para a transmissão (TX), é possível usar o modo full-duplex.

A transmissão e a recepção podem ser habilitadas independentemente.


Entretanto, quando a porta serial é habilitada, a USART irá controlar ambos
os pinos e um não poderá ser usado como um pino comum de I/O, enquanto
o outro estiver sendo usado para transmissão ou recepção; concluindo, os
dois pinos estarão ocupados.
UNIUBE 213

A USART pode ser configurada para transmitir oito ou nove bits de dados.
Normalmente, o bit 9 é usado para a transmissão do bit de paridade, o
que não é muito utilizado em circuitos mais simples.

O diagrama em blocos da Figura 22 representa os bits de controle dos


registradores usados para a transmissão de dados.

Figura 22: Diagrama em blocos simplificado da transmissão.


Fonte: Adaptado de MICROCHIP, USART. 2001.

Para a transmissão de dados, caso sejam usados os nove bits, o nono bit
deve ser alocado no bit TX9D do registrador TXSTA antes da escrita dos
outros 8 bits no registrador TXREG. Logo, após os dados serem escritos
no TXREG, os oito ou nove bits são movidos para dentro do registrador
de deslocamento.

A partir daí, eles são alocados um a um no pino TX, precedidos de um


bit de início, e seguidos por um bit de parada.

O uso de um registrador de deslocamento separado do registrador


TXREG permite que, enquanto um dado esteja sendo transmitido, o outro
já seja armazenado no registrador, tornando a transmissão mais rápida.

O próximo diagrama (Figura 23) representa as etapas da recepção dos dados.


214 UNIUBE

Figura 23: Diagrama em blocos simplificado da recepção de dados


Fonte: MICROCHIP, USART.2001

Da mesma forma que é feita na transmissão, a recepção pode ser


configurada para receber oito ou nove bits de dados, através do bit de
controle RX9 do registrador RXSTA.

Após a detecção do bit de início, os bits recebidos são deslocados do


pino RX para dentro do registrador de deslocamento, um de cada vez.
Após a leitura do último bit, o bit de parada é checado e os dados são
movidos para o buffer.

O buffer tem a função de armazenar os dados até que o registrador


RCREG seja esvaziado, transferindo os dados logo em seguida para o
registrador. No caso do nono bit estar habilitado, ele também é transferido
para o bit RX9D do registrador RCSTA.

O uso do registrador de deslocamento e de um buffer permite que o


programa instalado no PIC consiga ler os dados, rapidamente, a tempo
antes que chegue um terceiro byte; caso contrário, haverá um erro de
recepção.
UNIUBE 215

– Registradores da USART
Os registradores usados para controlar a USART são:

• SPBRG – Gerador de baud rate;


• TXSTA – Status e controle da transmissão;
• TCSTA – Status e controle da recepção;
• TXREG – Registrador de dados da transmissão;
• RCREG – Registrador de dados da recepção;
• PIR1 – Registrador do flag de interrupção periférica;
• PIE1 – Registrador de habilitação de interrupção periférica.

Gerador de baud rate


A configuração da taxa de transmissão deve ser feita nos registradores:

• SPBRG;
• TXSTA, no bit BRGH;
• TXSTA, no bit SYNC.

A taxa de transmissão desejada deve ser escrita no registrador SPBRG,


variando de 0 a 255 (1 byte). O bit SYNC seleciona entre os modos
síncrono ou assíncrono, devendo ter o valor 0 para o modo assíncrono.
Ainda para este modo, o bit BRGH é usado para selecionar entre alta e
baixa velocidade de transmissão.

Para o PIC16F877, existem duas fórmulas para o cálculo do valor usado


no registrador SPBRG, uma para cada opção do bit de alta velocidade.
É necessário conhecer a frequência do oscilador que será utilizado pelo
microcontrolador e, também, a taxa de transferência desejada para a
transmissão serial. As fórmulas são:

• , BRGH = 1
216 UNIUBE

• , BRGH = 0

O registrador SPBRG deve ter um valor inteiro entre 0 e 255. Se as


fórmulas resultarem em um valor diferente de um inteiro, haverá uma
diferença entre a taxa desejada e a taxa que será obtida. Dependendo da
aplicação, este erro será aceitável ou não. Veja que pode ser vantajoso
habilitar o bit de alta velocidade, mesmo usando uma baixa taxa de
transferência, isso porque este erro de conversão pode ser minimizado
usando sua fórmula.

EXEMPLIFICANDO!

Vamos agora fazer um cálculo para uma comunicação assíncrona RS-232


em que o circuito do microcontrolador possui um oscilador de 4 MHz e que
a taxa de transferência desejada seja de 9600 bauds.

O cálculo deve ser feito para cada fórmula, para os dois valores do bit BRGH.
Para BRGH = 1:

Para BRGH = 0:

O resultado que mais se aproxima de um número inteiro é o da


primeira opção, resultando em uma taxa de 9.600,35187 bauds,
caracterizando uma diferença insignificante da taxa desejada.
Portanto, este deverá ser o valor usado no registrador SPBRG.
UNIUBE 217

A configuração para este tipo de transmissão ficará assim:

• SYNC = 0
• BRGH = 1
• SPBRG = 25

Para se conseguir uma taxa de transmissão estável, é recomendável


a utilização de osciladores de cristal ou ressonadores cerâmicos.
Osciladores RC não são indicados para a comunicação RS-232 com o
computador.

- Registrador TXSTA

O Registrador de status e controle da transmissão TXSTA é usado


principalmente para o controle de transmissões, mas também possui
outras funções. É formado pelos seguintes bits de controle:

TXSTA
  Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Nome
CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D
do Bit

R/W R/W R/W R/W R/W R/W


Recurso R/W (0) R (1)
(0) (0) (0) (0) (0) (0)

O bit CRSC não tem efeito no modo assíncrono.

O bit TX9 habilita a transmissão do nono bit. Se ele estiver habilitado,


o bit TX9D no registrador TXSTA será adicionado aos 8 bits de dados
escritos no registrador TXREG.

O bit TXEN habilita as transmissões.

O bit SYNC deve estar desabilitado para selecionar o modo assíncrono.


218 UNIUBE

O bit BRGH define a taxa de transmissão entre alta e baixa. Ele permite
que uma maior amplitude de velocidade seja possível.

O bit TRMT indica que existem dados no registrador de deslocamento de


transmissão. Isso significa que existe uma transmissão em progresso.
Os dados que foram escritos no registrador TXREG são carregados para
o registrador de deslocamento de transmissão quando este registro é
esvaziado. O registrador de deslocamento de transmissão é interno e
não pode ser lido.

– Registrador RCSTA

O registrador RCSTA é principalmente usado para controlar a recepção,


porém também tem outras funções.

RCSTA
  Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Nome
SPEN RX9 SREN CREN ADDEN FERR OERR RX9D
do Bit
R/W R/W R/W R/W
Recurso R/W (0) R (0) R (0) R (X)
(0) (0) (0) (0)

Habilitando o bit SPEN, também são configurados ambos os pinos


associados com a USART, os pinos TX e RX.

O bit RX9 habilita a recepção do nono bit. Isso fará com que o nono bit
dos dados recebidos seja carregado dentro do bit RX9D no registrador
RCSTA.

O bit SREN não tem efeito no modo assíncrono.

O bit CREN habilita a recepção contínua de dados enquanto ele estiver


habilitado e desabilita a recepção quando estiver desabilitado.
UNIUBE 219

O bit ADDEN habilita a detecção de endereço no modo assíncrono de


nove bits e está disponível somente nos microcontroladores que possuem
a USART endereçável. Quando ele está habilitado, somente os dados
que contêm nove bits são recebidos.

O bit FERR indica que houve um erro nos dados recebidos, de forma que
o bit de parada não foi detectado. Este erro é frequentemente causado
por taxas de transferências incorretas.

O bit OERR indica um erro de transbordo. Isso acontece quando já


existe um byte no registrador de deslocamento e outro no FIFO, de modo
que não será possível receber o terceiro byte. Este byte será perdido e
nenhum outro dado será recebido até que o bit CREN seja desabilitado
e habilitado novamente. Entretanto, os dois bytes no FIFO ainda poderão
ser lidos do RCREG.

– Registradores de interrupção

São muitas as vantagens de usar interrupções para a comunicação serial.


Podemos destacar:

• não é necessário que o programa instalado no PIC perca tempo


verificando se algum dado foi recebido;
• aumentam a velocidade de resposta caso ocorra algum evento;
• reduzem as chances de ocorrer erros nas transmissões;
• são mais comumente usadas na recepção de dados.

Normalmente, as interrupções são mais usadas na recepção de dados


e não na transmissão. Na maioria dos programas, é impossível saber
quando um dado irá chegar e as interrupções proveem uma maneira
eficaz de evitar que o programa fique continuamente verificando se novos
dados foram recebidos.
220 UNIUBE

As interrupções da USART são controladas por três registradores:

• INTCON: registrador de controle de interrupções;


• PIE1: registrador de habilitação de interrupções periféricas;
• PIR1: registrador que contém flags de interrupções periféricas
utilizadas pelo PIE1.

Configurando a USART utilizando linguagem C

Um método de se configurar a USART de um modo bem simples é


através da linguagem C. Dessa forma, o processo de configurar os
registradores é feito praticamente usando uma linha de comando.

O compilador C tem incorporado rotinas que configuram a transmissão e


recepção no formato correto para a comunicação RS-232.

Veja a definição de uma linha de código:

#use rs232(BAUD = taxa, XMIT = pinoTx, RCV = pinoRX, BITS = n);

As variáveis que deverão ser modificadas para se fazer a configuração


estão indicadas pelas palavras taxa, pinoTX, pinoRX e n.

Essa linha de comando configura os pinos de transmissão e recepção


como pinoTX e pinoRX, ficando a critério do desenvolvedor decidir quais
serão estes pinos. Por padrão, os pinos 25 (pin_C6) e 26 (pin_C7) são
usados pelo PIC16F877.

As palavras pinoTX e pinoRX devem ser substituídas pelo nome do pino


que será usado, no caso de se usar a porta B do PIC16F877, ficaria
sendo de pin_B0 até pin_B7.

A velocidade de transmissão é definida pelo valor indicado em taxa e o


tamanho do pacote de dados é definido em n.

Os valores mais comuns para taxa são de 9.600, 19.200, 38.400, 57.600
e 115.200.
UNIUBE 221

Usualmente, o tamanho do pacote é de 8 bits.

Note que, embora o nome da diretiva seja rs232, devemos lembrar que
os sinais do PIC são de nível TTL.

Algumas funções que são muito importantes na comunicação serial são


as funções getchar() e putchar().

A função getchar() é responsável por receber algum caractere do


barramento. Veja um exemplo:

X = getchar();

Nessa linha, a função getchar() fica esperando receber o caractere e,


então, o armazena na variável X.

Vejamos, agora, um exemplo da função putchar():

putchar(Y);

Essa função irá transmitir para o barramento o caractere contido dentro


da variável Y.

Uma linha imprescindível que deve ser usada antes de se definir a


diretiva #use rs232 é a expressão:

#use delay (clock = m)


No lugar de m deverá estar o valor do clock utilizado no circuito para o
microcontrolador PIC.

É importante ressaltar que é possível definir mais de uma porta serial


nos microcontroladores PIC. Basta apenas adicionar a expressão stream
= nomedaporta, dentro da diretiva #uses rs232, que ficaria da seguinte
forma:

#use rs232(BAUD=9600, XMIT=pin_C6, RCV=pin_C7, BITS=8,


STREAM=portaserial2)
222 UNIUBE

Desse modo, para fazer a transmissão e a recepção de um caractere por


essa porta, devem ser usadas duas novas funções: fgetc(nomedaporta)
e fputc(variável, nomedaporta).

Para receber um caractere dentro de uma variável X com a função fgetc(),


utilizando a porta serial configurada anteriormente, a sintaxe ficará assim:
X = fgetc(portaserial2);

ao contrário, para transmitir um caractere armazenado na variável X, a


função fputc() ficará:
fputc(X, portaserial2);

veja que, desse modo, é possível selecionar por qual porta os dados
serão enviados ou recebidos.

EXEMPLIFICANDO!

Vejamos agora um exemplo de como ficaria a configuração de uma conexão


serial no PIC16F877 para um circuito com clock de 4MHz, usando uma taxa
de transferência de 9.600 bps, os pinos 25 e 26 definidos para transmissão
e recepção e, por fim, o pacote de dados com 8 bits de tamanho:

#use delay (clock = 4000000)


#use rs232(BAUD = 9600, XMIT = pin_C6, RCV = pin_C7, BITS = 8)
C = getchar();
putchar(C);

Note que a função getchar() ficará esperando um caractere ser recebido.


Quando ele chegar, será armazenado na variável C e, então, a função
putchar() irá reenviar o mesmo caractere, armazenado na variável C, para
o barramento serial novamente.
UNIUBE 223

Resumo

Este capítulo explorou os conceitos básicos de uma comunicação serial,


demonstrando o seu modo de funcionamento e algumas aplicações.

Está claro que, cada vez mais, a comunicação serial está presente em
nosso cotidiano. Ao acessarmos a internet, ao trabalharmos em um
computador ou mesmo se consumirmos algum produto industrializado,
lá está ou esteve presente algum tipo de rede serial.

Desse modo, precisamos compreendê-la, para que, ao criarmos algum


dispositivo, possamos utilizar uma arquitetura atual e moderna, conferindo
confiabilidade e robustez aos projetos.

Primeiramente, estudamos as principais características que definem uma


rede serial. Vimos a capacidade de transferência dos dados através da
taxa de transmissão, a quantidade de fios necessários para a interligação
dos dispositivos e suas formas de cabeamento.

Também analisamos os dois métodos usados para a transmissão dos


dados, a transmissão assíncrona e a transmissão síncrona e suas
aplicações.

Como o nosso foco está voltado para os dispositivos construídos com


microcontroladores PIC, fizemos uma breve descrição dos principais
protocolos seriais usados nestes microcontroladores.

Vimos que o protocolo RS-232 é indicado para ser usado em conexões


com o computador e que o CAN é recomendado para ambientes que
exigem bastante confiabilidade do sistema. Já, os protocolos I²C e SPI
são mais voltados para interligar componentes próximos um ao outro.

Por fim, detalhamos a criação de uma interface serial RS-232 entre


o computador e qualquer dispositivo que use um microcontrolador
PIC16F877. Para isso, utilizamos o conversor MAX232, e ainda vimos
224 UNIUBE

as configurações da USART, detalhando os ajustes dos parâmetros da


comunicação serial e alguns códigos em linguagem C.

Esse estudo demonstra o quanto a área de redes e comunicação serial


é importante para os estudantes que queiram ingressar nesse mundo.
Dominar os princípios básicos e estar ciente das tecnologias atualmente
existentes é fundamental para que o profissional tenha sucesso em sua
carreira.

Atividades

Atividade 1

Explique as diferenças entre os três modos de comunicação e dê


exemplos.

Atividade 2

Explique as principais diferenças entre os métodos de comunicação


síncronos e assíncronos. Dê exemplos de equipamentos que utilizam
cada um dos métodos.

Atividade 3

Faça uma pesquisa e descubra se existe algum protocolo serial que você
usa no seu dia a dia. Dê uma olhada na sua sala, no seu carro ou no
seu computador. Cite, pelo menos, três, e dê uma breve descrição dos
protocolos que encontrar.

Atividade 4

Existe um protocolo ideal? Como definir qual protocolo usar em


determinada aplicação?
UNIUBE 225

Atividade 5

Quais parâmetros devem ser definidos na programação em linguagem C


para estabelecer uma comunicação RS-232 entre o computador e o PIC?

Referências

ASCII TABLE. Disponível em: <http://www.asciitable.com/>. Acesso em:


mai. 2011. Atualizado em 2010.

IBRAHIM, Dogan. Advanced PIC microcontroller projects in C: from USB


to RTOS with PIC18F series. USA: Elsevier, 2008.

MAXIM. Datasheet MAX220-MAX249. Disponível em: <http://www. datasheetcatalog.


org/datasheet/ maxim/MAX220-MAX249.pdf>. Acesso em: mai. 2011.

MICROCHIP. Datasheet PIC16F87X. Disponível em:<http://ww1.microchip.


com/downloads/en/ devicedoc/39582b.pdf >. Acesso em: mai. 2011.

MICROCHIP. Datasheet PIC18FXX8. Disponível em:<http://ww1.microchip.


com/ downloads/en/devicedoc/41159d.pdf>. Acesso em: mai. 2011.

MICROCHIP, USART. Disponível em:<http://ww1.microchip.com/


downloads/en/ DeviceDoc/usart. pdf>. Acesso em: mai. 2011.

MIKROKOPTER, Disponível em: <http://www.mikrokopter.de>. Acesso em: mai. 2011.