O documento fornece uma introdução aos microcontroladores da família PIC, descrevendo suas principais características e componentes. Ele se concentra no microcontrolador PIC16F84, explicando detalhadamente seus registros, memória, portas I/O, temporizador e operação de interrupção.
4. Cap´
ıtulo 1
Introdu¸˜o aos Microcontroladores
ca
1.1 Introdu¸˜o
ca
As circunstˆncias que se nos deparam hoje no campo dos microcontroladores tˆm os seus prim´rdios
a e o
no desenvolvimento da tecnologia dos circuitos integrados. Este desenvolvimento tornou poss´ ıvel
armazenar centenas de milhares de transistores num unico chip. Isso constituiu um pr´-requisito
´ e
para a produ¸˜o de microprocessadores e, os primeiros computadores foram constru´
ca ıdos adicio-
nando perif´ricos externos tais como mem´ria, linhas de entrada e sa´
e o ıda, temporizadores e outros.
Um crescente aumento do n´ ıvel de integra¸˜o, permitiu o aparecimento de circuitos integrados
ca
contendo simultaneamente processador e perif´ricos. Foi assim que o primeiro chip contendo um
e
microcomputador e que mais tarde haveria de ser designado por microcontrolador, apareceu.
1.2 Hist´ria
o
´
E no ano de 1969 que uma equipa de engenheiros japoneses pertencentes ` companhia BUSICOM
a
chega aos Estados Unidos com a encomenda de alguns circuitos integrados para calculadoras a
serem implementados segundo os seus projetos. A proposta foi entregue ` INTEL e Marcian Hoff
a
foi o respons´vel pela sua concretiza¸˜o. Como ele tinha tido experiˆncia de trabalho com um
a ca e
computador (PC) PDP8, lembrou-se de apresentar uma solu¸˜o substancialmente diferente em
ca
vez da constru¸˜o sugerida. Esta solu¸˜o pressupunha que a fun¸˜o do circuito integrado seria
ca ca ca
determinada por um programa nele armazenado. Isso significava que a configura¸˜o deveria ser
ca
mais simples, mas tamb´m era preciso muito mais mem´ria que no caso do projeto proposto pelos
e o
engenheiros japoneses. Depois de algum tempo, embora os engenheiros japoneses tenham tentado
encontrar uma solu¸˜o mais f´cil, a id´ia de Marcian venceu e o primeiro microprocessador nasceu.
ca a e
Ao transformar esta id´ia num produto concreto, Frederico Faggin foi de uma grande utilidade
e
para a INTEL. Ele transferiu-se para a INTEL e, em somente 9 meses, teve sucesso na cria¸˜o de
ca
um produto real a partir da sua primeira concep¸˜o. Em 1971, a INTEL adquiriu os direitos sobre
ca
a venda deste bloco integral. Primeiro eles compraram a licen¸a ` companhia BUSICOM que n˜o
c a a
tinha a m´ ınima percep¸˜o do tesouro que possu´ Neste mesmo ano, apareceu no mercado um
ca ıa.
microprocessador designado por 4004. Este foi o primeiro microprocessador de 4 bits e tinha a
velocidade de 6 000 opera¸˜es por segundo. N˜o muito tempo depois, a companhia Americana
co a
CTC pediu ` INTEL e ` Texas Instruments um microprocessador de 8 bits para usar em terminais.
a a
Mesmo apesar de a CTC acabar por desistir desta id´ia, tanto a Intel como a Texas Instruments
e
continuaram a trabalhar no microprocessador e, em Abril de 1972, os primeiros microprocessadores
de 8 bits apareceram no mercado com o nome de 8008. Este podia endere¸ar 16KB de mem´ria,
c o
possu´ 45 instru¸˜es e tinha a velocidade de 300 000 opera¸˜es por segundo. Esse microprocessador
ıa co co
foi o pioneiro de todos os microprocessadores atuais. A Intel continuou com o desenvolvimento
do produto e, em Abril de 1974 pˆs c´ fora um processador de 8 bits com o nome de 8080 com a
o a
capacidade de endere¸ar 64KB de mem´ria, com 75 instru¸˜es e com pre¸os a come¸arem em $360.
c o co c c
Uma outra companhia Americana, a Motorola, apercebeu-se rapidamente do que estava a
acontecer e, assim, pˆs no mercado um novo microprocessador de 8 bits, o 6800. O construtor
o
chefe foi Chuck Peddle e al´m do microprocessador propriamente dito, a Motorola foi a primeira
e
4
5. companhia a fabricar outros perif´ricos como os 6820 e 6850. Nesta altura, muitas companhias
e
j´ se tinham apercebido da enorme importˆncia dos microprocessadores e come¸aram a introduzir
a a c
os seus pr´prios desenvolvimentos. Chuck Peddle deixa a Motorola para entrar para a MOS
o
Technology e continua a trabalhar intensivamente no desenvolvimento dos microprocessadores.
Em 1975, na exposi¸˜o WESCON nos Estados Unidos, ocorreu um acontecimento cr´
ca ıtico na
hist´ria dos microprocessadores. A MOS Technology anunciou que ia pˆr no mercado micropro-
o o
cessadores 6501 e 6502 ao pre¸o de $25 cada e que podia satisfazer de imediato todas as en-
c
comendas. Isto pareceu t˜o sensacional que muitos pensaram tratar-se de uma esp´cie de vigarice,
a e
considerando que os competidores vendiam o 8080 e o 6800 a $179 cada. Para responder a este
competidor, tanto a Intel como a Motorola baixaram os seus pre¸os por microprocessador para
c
$69,95 logo no primeiro dia da exposi¸˜o. Rapidamente a Motorola pˆs uma a¸˜o em tribunal
ca o ca
contra a MOS Technology e contra Chuck Peddle por viola¸˜o dos direitos de autor por copiarem
ca
ao copiarem o 6800. A MOS Technology deixou de fabricar o 6501, mas continuou com o 6502. O
6502 ´ um microprocessador de 8 bits com 56 instru¸˜es e uma capacidade de endere¸amento de
e co c
64KB de mem´ria. Devido ao seu baixo custo, o 6502 torna-se muito popular e, assim, ´ instalado
o e
em computadores como KIM-1, Apple I, Apple II, Atari, Comodore, Acorn, Oric, Galeb, Orao,
Ultra e muitos outros. Cedo aparecem v´rios fabricantes do 6502 (Rockwell, Sznertek, GTE, NCR,
a
Ricoh e Comodore adquiriram a MOS Technology) que, no auge da sua prosperidade, chegou a
vender microprocessadores ` raz˜o de 15 milh˜es por ano !
a a o
Contudo, os outros n˜o baixaram os bra¸os. Frederico Faggin deixa a Intel e funda a Zilog Inc.
a c
Em 1976, a Zilog anuncia o Z80. Durante a concep¸˜o deste microprocessador, Faggin toma uma
ca
decis˜o cr´
a ıtica. Sabendo que tinha sido j´ desenvolvida uma enorme quantidade de programas
a
para o 8080, Faggin conclui que muitos v˜o permanecer fieis a este microprocessador por causa
a
das grandes despesas que adviriam das altera¸˜es a todos estes programas. Assim, ele decide que
co
o novo microprocessador deve ser compat´ ıvel com o 8080, ou seja, deve ser capaz de executar
todos os programas que j´ tenham sido escritos para o 8080. Al´m destas caracter´
a e ısticas, outras
caracter´ısticas adicionais foram introduzidas, de tal modo que o Z80 se tornou um microprocessador
muito potente no seu tempo. Ele podia endere¸ar directamente 64KB de mem´ria, tinha 176
c o
instru¸oes, um grande n´mero de registros, uma op¸˜o para refreshing de mem´ria RAM dinˆmica,
c˜ u ca o a
uma unica alimenta¸˜o, maior velocidade de funcionamento, etc. O Z80 tornou-se um grande
´ ca
sucesso e toda a gente se transferiu do 8080 para o Z80. Pode dizer-se que o Z80 se constituiu
sem sombra de d´vida como o microprocessador de 8 bits com maior sucesso no seu tempo. Al´m
u e
da Zilog, outros novos fabricantes como Mostek, NEC, SHARP e SGS apareceram. O Z80 foi o
cora¸ao de muitos computadores como o Spectrum, Partner, TRS703, Z-3 e Galaxy, que foram
c˜
aqui usados.
Em 1976, a Intel apareceu com uma vers˜o melhorada do microprocessador de 8 bits e designada
a
por 8085. Contudo, o Z80 era t˜o superior a este que, bem depressa, a Intel perdeu a batalha. Ainda
a
que mais alguns microprocessadores tenham aparecido no mercado (6809, 2650, SC/MP etc.), j´ a
tudo estava ent˜o decidido. J´ n˜o havia mais grandes melhorias a introduzir pelos fabricantes
a a a
que fundamentassem a troca por um novo microprocessador, assim, o 6502 e o Z80, acompanhados
pelo 6800, mantiveram-se como os mais representativos microprocessadores de 8 bits desse tempo.
1.3 Microcontroladores versus Microprocessadores
Um microcontrolador difere de um microprocessador em v´rios aspectos. Primeiro e o mais impor-
a
tante, ´ a sua funcionalidade. Para que um microprocessador possa ser usado, outros componentes
e
devem-lhe ser adicionados, tais como mem´ria e componentes para receber e enviar dados. Em
o
resumo, isso significa que o microprocessador ´ o verdadeiro cora¸˜o do computador. Por outro
e ca
lado, o microcontrolador foi projetado para ter tudo num s´. Nenhuns outros componentes exter-
o
nos s˜o necess´rios nas aplica¸˜es, uma vez que todos os perif´ricos necess´rios j´ est˜o contidos
a a co e a a a
nele. Assim, n´s poupamos tempo e espa¸o na constru¸˜o dos dispositivos.
o c ca
1.4 Microcontroladores da fam´ PIC
ılia
A seguir s˜o apresentas algumas das caracter´
a ısticas mais importantes a respeito da arquitetura dos
microcontroladores PIC da Microchip.
5
6. 1.4.1 Unidade de Mem´ria
o
A mem´ria ´ a parte do microcontrolador cuja fun¸˜o ´ guardar dados. A maneira mais f´cil de
o e ca e a
explicar ´ descrevˆ-la como uma grande prateleira cheia de gavetas. Se supusermos que marcamos
e e
as gavetas de modo a elas n˜o se confundirem umas com as outras, ent˜o o seu conte´do ser´
a a u a
facilmente acess´ıvel. Basta saber a designa¸˜o da gaveta e o seu conte´do ser´ conhecido.
ca u a
Figura 1.1: Exemplo de unidade de mem´ria.
o
Os componentes de mem´ria s˜o exatamente a mesma coisa. Para um determinado endere¸o,
o a c
n´s obtemos o conte´do desse endere¸o. Dois novos conceitos foram apresentados: endere¸amento
o u c c
e mem´ria. A mem´ria ´ o conjunto de todos os locais de mem´ria (gavetas) e endere¸amento nada
o o e o c
mais ´ que selecionar um deles. Isto significa que precisamos de selecionar o endere¸o desejado
e c
(gaveta) e esperar que o conte´do desse endere¸o nos seja apresentado (abrir a gaveta). Al´m de ler
u c e
de um local da mem´ria (ler o conte´do da gaveta), tamb´m ´ poss´ escrever num endere¸o da
o u e e ıvel c
mem´ria (introduzir um conte´do na gaveta). Isto ´ feito utilizando uma linha adicional chamada
o u e
linha de controle. N´s iremos designar esta linha por R/W (read/write) - ler/escrever. A linha de
o
controle ´ usada do seguinte modo: se r/w=1, ´ executada uma opera¸˜o de leitura, caso contr´rio
e e ca a
´ executada uma opera¸˜o de escrita no endere¸o de mem´ria.
e ca c o
A mem´ria ´ o primeiro elemento, mas precisamos de mais alguns para que o nosso microcon-
o e
trolador possa trabalhar.
1.4.2 Unidade Central de Processamento
Vamos agora adicionar mais 3 locais de mem´ria a um bloco espec´
o ıfico para que possamos ter
as capacidades de multiplicar, dividir, subtrair e mover o seus conte´dos de um local de mem´ria
u o
para outro. A parte que vamos acrescentar ´ chamada “central processing unit” (CPU) ou Unidade
e
Central de Processamento. Os locais de mem´ria nela contidos chamam-se registros.
o
Figura 1.2: Unidade Central de Processamento.
6
7. Os registros s˜o, portanto, locais de mem´ria cujo papel ´ ajudar a executar v´rias opera¸˜es
a o e a co
matem´ticas ou quaisquer outras opera¸˜es com dados, quaisquer que sejam os locais em que estes
a co
se encontrem.
Vamos olhar para a situa¸˜o actual. N´s temos duas entidades independentes (mem´ria e CPU)
ca o o
que est˜o interligadas, deste modo, qualquer troca de dados ´ retardada bem como a funcionalidade
a e
do sistema ´ diminu´
e ıda. Se, por exemplo, n´s desejarmos adicionar os conte´dos de dois locais
o u
de mem´ria e tornar a guardar o resultado na mem´ria, n´s necessitamos de uma liga¸˜o entre
o o o ca
a mem´ria e o CPU. Dito mais simplesmente, n´s precisamos de obter um ”caminho”atrav´s do
o o e
qual os dados possam passar de um bloco para outro.
1.4.3 Barramentos - Bus
Este “caminho” designa-se por barramento (bus). Fisicamente ele corresponde a um grupo de 8,
16 ou mais fios.
Existem dois tipos de bus: bus de dados e de endere¸o. O n´mero de linhas do primeiro
c u
depende da quantidade de mem´ria que desejamos endere¸ar e o n´mero de linhas do outro de-
o c u
pende da largura da palavra de dados, no nosso caso ´ igual a oito. O primeiro bus serve para
e
transmitir endere¸os do CPU para a mem´ria e o segundo para ligar todos os blocos dentro do
c o
microcontrolador.
Figura 1.3: Barramentos do microcontrolador.
Neste momento, a funcionalidade j´ aumentou mas um novo problema apareceu: n´s temos uma
a o
unidade capaz de trabalhar sozinha, mas que n˜o possui nenhum contato com o mundo exterior,
a
ou seja, conosco! De modo a remover esta deficiˆncia, vamos adicionar um bloco que cont´m v´rias
e e a
localiza¸˜es de mem´ria e que, de um lado, est´ ligado ao bus de dados e do outro `s linhas de sa´
co o a a ıda
do microcontrolador que coincidem com pinos do circuito integrado e que, portanto, n´s podemos
o
ver com os nossos pr´prios olhos.
o
1.4.4 Unidade de entrada/sa´ (I/O)
ıda
Estas localiza¸˜es que acabamos de adicionar, chamam-se portas. Existem v´rios tipos de portas:
co a
de entrada, de sa´ e de entrada/sa´
ıda ıda. Quando trabalhamos com portas primeiro de tudo ´ e
necess´rio escolher a porta com que queremos trabalhar e, em seguida, enviar ou receber dados
a
para ou dessa porta.
Quando se est´ a trabalhar com ele, a porta funciona como um local de mem´ria. Qualquer
a o
coisa de que se est´ a ler ou em que se est´ a escrever e que ´ poss´ identificar facilmente nos
a a e ıvel
pinos do microcontrolador.
1.4.5 Comunica¸˜o s´rie
ca e
Anteriormente, acrescentamos ` unidade j´ existente a possibilidade de comunicar com o mundo
a a
exterior. Contudo, esta maneira de comunicar tem os seus inconvenientes. Um dos inconve-
7
8. Figura 1.4: Porta de entrada/sa´ de dados.
ıda
nientes b´sicos ´ o n´mero de linhas que ´ necess´rio usarmos para transferir dados. E se for
a e u e a
necess´rio transferi-los a uma distˆncia de v´rios quilˆmetros? O n´mero de linhas vezes o n´mero
a a a o u u
de quilˆmetros n˜o atesta a economia do projeto. Isto leva-nos a ter que reduzir o n´mero de linhas
o a u
de modo a que a funcionalidade se mantenha. Suponha que estamos a trabalhar apenas com trˆs e
linhas e que uma linha ´ usada para enviar dados, outra para os receber e a terceira ´ usada como
e e
linha de referˆncia tanto do lado de entrada como do lado da sa´
e ıda. Para que isto trabalhe n´s pre-
o
cisamos de definir as regras para a troca de dados. A este conjunto de regras chama-se protocolo.
Este protocolo deve ser definido com antecedˆncia de modo que n˜o haja mal entendidos entre as
e a
partes que est˜o a comunicar entre si. Por exemplo, se um homem est´ a falar em francˆs e o outro
a a e
em inglˆs, ´ altamente improv´vel que efetivamente e rapidamente, ambos se entendam. Vamos
e e a
supor que temos o seguinte protocolo. A unidade l´gica ”1”´ colocada na linha de transmiss˜o at´
o e a e
que a transferˆncia se inicie. Assim que isto acontece, a linha passa para n´ l´gico ’0’ durante
e ıvel o
um certo per´ ıodo de tempo (que vamos designar por T), assim, do lado da recep¸˜o ficamos a saber
ca
que existem dados para receber e, o mecanismo de recep¸˜o, vai ativar-se. Regressemos agora ao
ca
lado da emiss˜o e comecemos a pˆr zeros e uns l´gicos na linha de transmiss˜o correspondentes
a o o a
aos bits, primeiro o menos significativo e finalmente o mais significativo. Vamos esperar que cada
bit permane¸a na linha durante um per´
c ıodo de tempo igual a T, e, finalmente, depois do oitavo
bit, vamos pˆr novamente na linha o n´ l´gico ”1”, o que assinala a transmiss˜o de um dado. O
o ıvel o a
protocolo que acabamos de descrever ´ designado na literatura profissional por NRZ (N˜o Retorno
e a
a Zero).
Figura 1.5: Comunica¸˜o serial.
ca
1.4.6 Unidade de temporiza¸˜o
ca
Agora que j´ temos a unidade de comunica¸˜o s´rie implementada, n´s podemos receber, enviar e
a ca e o
processar dados.
Contudo, para sermos capazes de utilizar isto na ind´stria precisamos ainda de mais alguns
u
blocos. Um deles ´ o bloco de temporiza¸˜o que nos interessa bastante porque pode dar-nos
e ca
informa¸˜es acerca da hora, dura¸˜o, protocolo, etc. A unidade b´sica do temporizador ´ um
co ca a e
contador que ´ na realidade um registro cujo conte´do aumenta de uma unidade num intervalo
e u
de tempo fixo, assim, anotando o seu valor durante os instantes de tempo T1 e T2 e calculando
8
9. Figura 1.6: Temporizador (timer ).
a sua diferen¸a, n´s ficamos a saber a quantidade de tempo decorrida. Esta ´ uma parte muito
c o e
importante do microcontrolador, cujo dom´ınio vai requerer muita da nossa aten¸˜o.
ca
1.4.7 Watchdog timer
Uma outra coisa que nos vai interessar ´ a fluˆncia da execu¸˜o do programa pelo microcontro-
e e ca
lador durante a sua utiliza¸˜o. Suponha que como resultado de qualquer interferˆncia (que ocorre
ca e
freq¨entemente num ambiente industrial), o nosso microcontrolador para de executar o programa
u
ou, ainda pior, desata a trabalhar incoerentemente.
Figura 1.7: Watchdog timer.
Claro que, quando isto acontece com um computador, n´s simplesmente carregamos no bot˜o
o a
de reset e continuamos a trabalhar. Contudo, no caso do microcontrolador n´s n˜o podemos
o a
resolver o nosso problema deste modo, porque n˜o temos bot˜o. Para ultrapassar este obst´culo,
a a a
precisamos de introduzir no nosso modelo um novo bloco chamado watchdog (c˜o de guarda). Este
a
bloco ´ de facto outro contador que est´ continuamente a contar e que o nosso programa p˜e a zero
e a o
sempre que ´ executado corretamente. No caso de o programa encravar, o zero n˜o vai ser escrito
e a
e o contador, por si s´, encarregar-se-´ de fazer o reset do microcontrolador quando alcan¸ar o seu
o a c
valor m´ximo. Isto vai fazer com que o programa corra de novo e desta vez corretamente. Este ´
a e
um elemento importante para que qualquer programa se execute confiavelmente, sem precisar da
interven¸˜o do ser humano.
ca
1.4.8 Conversor anal´gico-digital (A/D)
o
Como os sinais dos perif´ricos s˜o substancialmente diferentes daqueles que o microcontrolador
e a
pode entender (zero e um), eles devem ser convertidos num formato que possa ser compreendido
pelo microcontrolador. Esta tarefa ´ executada por interm´dio de um bloco destinado ` convers˜o
e e a a
anal´gica-digital ou com um conversor A/D. Este bloco vai ser respons´vel pela convers˜o de uma
o a a
informa¸˜o de valor anal´gico para um n´mero bin´rio e pelo seu trajeto atrav´s do bloco do CPU,
ca o u a e
de modo a que este o possa processar de imediato.
Figura 1.8: Conversor anal´gico-digital (A/D).
o
9
10. 1.4.9 O microcontrolador
Neste momento, a configura¸˜o do microcontrolador est´ j´ terminada, tudo o que falta ´ introduzi-
ca a a e
la dentro de um aparelho eletrˆnico que poder´ acessar aos blocos internos atrav´s dos pinos deste
o a e
componente. A Figura 1.9 ilustra o aspecto interno de um microcontrolador.
Figura 1.9: Configura¸˜o f´
ca ısica do interior de um microcontrolador.
As linhas mais finas que partem do centro em dire¸˜o ` periferia do microcontrolador corre-
ca a
spondem aos fios que interligam os blocos interiores aos pinos do inv´lucro do microcontrolador.
o
A Figura 1.10 representa a parte principal de um microcontrolador.
Numa aplica¸˜o real, um microcontrolador, por si s´, n˜o ´ suficiente. Al´m dele, n´s necessi-
ca o a e e o
tamos do programa que vai ser executado e de mais alguns elementos que constituir˜o um interface
a
l´gico para outros elementos.
o
1.5 Programa
Escrever um programa ´ uma parte especial do trabalho com microcontroladores e ´ designado por
e e
programa¸~o . Vamos tentar escrever um pequeno programa numa linguagem que seremos n´s a
ca o
criar e que toda a gente ser´ capaz de compreender.
a
INICIO
REGISTRO1=LOCAL_DE_ MEMORIA_A
REGISTRO2=LOCAL_DE_ MEMORIA_B
PORTO_A=REGISTRO1+REGISTRO2
FIM
O programa adiciona os conte´dos de dois locais de mem´ria e coloca a soma destes conte´dos na
u o u
porta A. A primeira linha do programa manda mover o conte´do do local de mem´ria ”A”para um
u o
dos registros da unidade central de processamento. Como necessitamos tamb´m de outra parcela,
e
vamos colocar o outro conte´do noutro registro da unidade central de processamento (CPU). A
u
instru¸ao seguinte pede ao CPU para adicionar os conte´dos dos dois registros e enviar o resultado
c˜ u
obtido para a porta A, de modo a que o resultado desta adi¸˜o seja vis´ para o mundo exterior.
ca ıvel
Para um problema mais complexo, naturalmente o programa que o resolve ser´ maior.
a
A tarefa de programa¸˜o pode ser executada em v´rias linguagens tais como o Assembler, C
ca a
e Basic que s˜o as linguagens normalmente mais usadas. O Assembler pertence ao grupo das
a
linguagens de baixo n´ ıvel que implicam um trabalho de programa¸˜o lento, mas que oferece os
ca
melhores resultados quando se pretende poupar espa¸o de mem´ria e aumentar a velocidade de
c o
execu¸˜o do programa. Como se trata da linguagem mais freq¨entemente usada na programa¸˜o de
ca u ca
microcontroladores, ela ser´ discutida num cap´
a ıtulo mais adiantado. Os programas na linguagem
C s˜o mais f´ceis de se escrever e compreender, mas, tamb´m, s˜o mais lentos a serem executados
a a e a
que os programas assembler. Basic ´ a mais f´cil de todas para se aprender e as suas instru¸˜es
e a co
10
12. s˜o semelhantes ` maneira de um ser humano se exprimir, mas tal como a linguagem C, ´ tamb´m
a a e e
de execu¸˜o mais lenta que o assembler. Em qualquer caso, antes que escolha entre uma destas
ca
linguagens, precisa de examinar cuidadosamente os requisitos de velocidade de execu¸˜o, de espa¸o
ca c
de mem´ria a ocupar e o tempo que vai demorar a fazer o programa em assembly.
o
Depois de o programa estar escrito, n´s necessitamos de introduzir o microcontrolador num
o
dispositivo e po-lo para trabalhar. Para que isto aconte¸a, n´s precisamos de adicionar mais alguns
c o
componentes externos. Primeiro temos que dar vida ao microcontrolador fornecendo-lhe a tens˜o a
(a tens˜o el´trica ´ necess´ria para que qualquer instrumento eletrˆnico funcione) e o oscilador cujo
a e e a o
papel ´ an´logo ao do cora¸˜o que bate no ser humano. A execu¸˜o das instru¸˜es do programa
e a ca ca co
´ regulada pelas pulsa¸˜es do oscilador. Logo que lhe ´ aplicada a tens˜o, o microcontrolador
e co e a
executa uma verifica¸˜o dele pr´prio, vai para o princ´
ca o ıpio do programa e come¸a a execut´-lo. O
c a
modo como o dispositivo vai trabalhar depende de muitos parˆmetros, os mais importantes dos
a
quais s˜o a competˆncia da pessoa que desenvolve o hardware e do programador que, com o seu
a e
programa, deve tirar o m´ximo do dispositivo.
a
12
13. Cap´
ıtulo 2
O Microcontrolador PIC16F84
O PIC 16F84 pertence a uma classe de microcontroladores de 8 bits, com uma arquitetura RISC .
A estrutura gen´rica ´ a do mapa que se segue, que nos mostra os seus blocos b´sicos.
e e a
2.1 Componentes b´sicos do PIC
a
Mem´ria de programa (FLASH) - para armazenar o programa que se escreveu. Como a
o
mem´ria fabricada com tecnologia FLASH pode ser programa e limpa mais que uma vez. ela
o
torna-se adequada para o desenvolvimento de dispositivos.
EEPROM - mem´ria dos dados que necessitam de ser salvaguardados quando a alimenta¸˜o ´
o ca e
desligada. Normalmente ´ usada para guardar dados importantes que n˜o se podem perder quando
e a
a alimenta¸˜o, de repente, “vai abaixo”. Um exemplo deste tipo de dados ´ a temperatura fixada
ca e
para os reguladores de temperatura. Se, durante uma quebra de alimenta¸˜o, se perdessem dados,
ca
n´s precisar´
o ıamos de proceder a um novo ajustamento quando a alimenta¸˜o fosse restabelecida.
ca
Assim, o nosso dispositivo, perderia efic´cia.
a
RAM - mem´ria de dados usada por um programa, durante a sua execu¸˜o. Na RAM, s˜o
o ca a
guardados todos os resultados interm´dios ou dados tempor´rios durante a execu¸˜o do programa
e a ca
e que n˜o s˜o cruciais para o dispositivo, depois de ocorrer uma falha na alimenta¸˜o.
a a ca
PORTA A e PORTA B s˜o liga¸˜es f´
a co ısicas entre o microcontrolador e o mundo exterior. A
porta A tem cinco pinos e a porta B oito pinos.
CONTADOR/TEMPORIZADOR ´ um registro de 8 bits no interior do microcontrolador
e
que trabalha independentemente do programa. No fim de cada conjunto de quatro ciclos de rel´gio
o
do oscilador, ele incrementa o valor armazenado, at´ atingir o valor m´ximo (255), nesta altura
e a
recome¸a a contagem a partir de zero. Como n´s sabemos o tempo exato entre dois incrementos
c o
sucessivos do conte´do do temporizador, podemos utilizar este para medir intervalos de tempo, o
u
que o torna muito util em v´rios dispositivos.
´ a
UNIDADE DE PROCESSAMENTO CENTRAL faz a conex˜o com todos os outros a
blocos do microcontrolador. Ele coordena o trabalho dos outros blocos e executa o programa do
utilizador.
2.2 CISC x RISC
J´ foi dito que o PIC16F84 tem uma arquitetura RISC. Este termo ´ encontrado, muitas vezes, na
a e
literatura sobre computadores e necessita de ser explicada aqui, mais detalhadamente. A arquite-
tura de Harvard ´ um conceito mais recente que a de von-Neumann. Ela adveio da necessidade
e
de pˆr o microcontrolador a trabalhar mais rapidamente. Na arquitetura de Harvard, a mem´ria
o o
de dados est´ separada da mem´ria de programa. Assim, ´ poss´ uma maior fluˆncia de dados
a o e ıvel e
13
14. Figura 2.1: Esquema do microcontrolador PIC16F84.
Figura 2.2: Arquiteturas Harvard versus von Neumann.
atrav´s da unidade central de processamento e, claro, uma maior velocidade de funcionamento. A
e
separa¸˜o da mem´ria de dados da mem´ria de programa, faz com que as instru¸˜es possam ser
ca o o co
representadas por palavras de mais que 8 bits. O PIC16F84, usa 14 bits para cada instru¸˜o, o
ca
o ca ´
que permite que que todas as instru¸˜es ocupem uma s´ palavra de instru¸˜o. E tamb´m t´
co e ıpico da
arquitetura Harvard ter um repert´rio com menos instru¸˜es que a de von-Neumann’s, instru¸˜es
o co co
essas, geralmente executadas apenas num unico ciclo de rel´gio.
´ o
Os microcontroladores com a arquitetura Harvard, s˜o tamb´m designados por microcontroladores
a e
RISC. RISC prov´m de Computador com um Conjunto Reduzido de Instru¸˜es (Reduced Instruc-
e co
tion Set Computer). Os microcontroladores com uma arquitetura von-Neumann s˜o designados
a
por microcontroladores CISC. O nome CISC deriva de Computador com um Conjunto Complexo
de Instru¸oes (Complex Instruction Set Computer).
c˜
Como o PIC16F84 ´ um microcontrolador RISC, disso resulta que possui um n´mero reduzido
e u
de instru¸oes, mais precisamente 35 (por exemplo, os microcontroladores da Intel e da Motorola
c˜
tˆm mais de cem instru¸˜es). Todas estas instru¸˜es s˜o executadas num unico ciclo, exceto no caso
e co co a ´
de instru¸˜es de salto e de ramifica¸˜o. De acordo com o que o seu fabricante refere, o PIC16F84
co ca
geralmente atinge resultados de 2 para 1 na compress˜o de c´digo e 4 para 1 na velocidade, em
a o
rela¸˜o aos outros microcontroladores de 8 bits da sua classe.
ca
2.3 Aplica¸˜es
co
O PIC16F84, ´ perfeitamente adequado para muitas variedades de aplica¸˜es, como a ind´stria
e co u
e c ´
autom´vel, sensores remotos, fechaduras el´tricas e dispositivos de seguran¸a. E tamb´m um
o e
dispositivo ideal para cart˜es inteligentes, bem como para dispositivos alimentados por baterias,
o
por causa do seu baixo consumo.
A mem´ria EEPROM, faz com que se torne mais f´cil usar microcontroladores em dispositivos
o a
onde o armazenamento permanente de v´rios parˆmetros, seja necess´rio (c´digos para transmis-
a a a o
sores, velocidade de um motor, freq¨ˆncias de recep¸˜o, etc.). O baixo custo, baixo consumo,
ue ca
facilidade de manuseamento e flexibilidade fazem com que o PIC16F84 se possa utilizar em ´reas
a
em que os microcontroladores n˜o eram anteriormente empregues (exemplo: fun¸˜es de tempo-
a co
14
15. riza¸˜o, substitui¸˜o de interfaces em sistemas de grande porte, aplica¸˜es de coprocessamento,
ca ca co
etc.).
A possibilidade deste chip de ser program´vel no sistema (usando somente dois pinos para a
a
transferˆncia de dados), d˜o flexibilidade do produto, mesmo depois de a sua montagem e teste
e a
estarem completos.
Esta capacidade, pode ser usada para criar linhas de produ¸˜o e montagem, para armazenar
ca
dados de calibragem dispon´ ıveis apenas quando se proceder ao teste final ou, ainda, para aperfei¸oar
c
os programas presentes em produtos acabados.
2.4 Rel´gio / ciclo de instru¸˜o
o ca
O rel´gio (clock), ´ quem d´ o sinal de partida para o microcontrolador e ´ obtido a partir de
o e a e
um componente externo chamado oscilador. Se considerasse-mos que um microcontrolador era
um rel´gio de sala, o nosso clock corresponderia ao pˆndulo e emitiria um ru´ correspondente
o e ıdo
ao deslocar do pˆndulo. Tamb´m, a for¸a usada para dar corda ao rel´gio, podia comparar-se `
e e c o a
alimenta¸˜o el´trica.
ca e
O clock do oscilador, ´ ligado ao microcontrolador atrav´s do pino OSC1, aqui, o circuito
e e
interno do microcontrolador divide o sinal de clock em quatro fases, Q1, Q2, Q3 e Q4 que n˜o a
se sobrep˜em. Estas quatro pulsa¸˜es perfazem um ciclo de instru¸˜o (tamb´m chamado ciclo de
o co ca e
m´quina) e durante o qual uma instru¸˜o ´ executada. A execu¸˜o de uma instru¸˜o, ´ antecedida
a ca e ca ca e
pela extra¸˜o da instru¸˜o que est´ na linha seguinte. O c´digo da instru¸˜o ´ extra´ da mem´ria
ca ca a o ca e ıdo o
de programa em Q1 e ´ escrito no registro de instru¸˜o em Q4.
e ca
A decodifica¸˜o e execu¸˜o dessa mesma instru¸˜o, faz-se entre as fases Q1 e Q4 seguintes. Na
ca ca ca
Figura 2.3 podemos observar a rela¸˜o entre o ciclo de instru¸˜o e o clock do oscilador (OSC1)
ca ca
assim como as fases Q1-Q4. O contador de programa (Program Counter ou PC) guarda o endere¸o c
da pr´xima instru¸˜o a ser executada.
o ca
Figura 2.3: Ciclo de instru¸˜o e o clock.
ca
2.4.1 Pipelining
Cada ciclo de instru¸˜o inclui as fases Q1, Q2, Q3 e Q4. A extra¸˜o do c´digo de uma instru¸˜o
ca ca o ca
da mem´ria de programa, ´ feita num ciclo de instru¸˜o, enquanto que a sua decodifica¸˜o e
o e ca ca
execu¸ao, s˜o feitos no ciclo de instru¸˜o seguinte. Contudo, devido ` sobreposi¸˜o – pipelining (o
c˜ a ca a ca
microcontrolador ao mesmo tempo que executa uma instru¸˜o extrai simultaneamente da mem´ria
ca o
o c´digo da instru¸˜o seguinte), podemos considerar que, para efeitos pr´ticos, cada instru¸˜o
o ca a ca
demora um ciclo de instru¸˜o a ser executada. No entanto, se a instru¸˜o provocar uma mudan¸a
ca ca c
no conte´do do contador de programa (PC), ou seja, se o PC n˜o tiver que apontar para o endere¸o
u a c
seguinte na mem´ria de programa, mas sim para outro (como no caso de saltos ou de chamadas
o
de subrotinas), ent˜o dever´ considerar-se que a execu¸˜o desta instru¸˜o demora dois ciclos. Isto
a a ca ca
acontece, porque a instru¸˜o vai ter que ser processada de novo, mas, desta vez, a partir do endere¸o
ca c
15
16. correto. O ciclo de chamada come¸a na fase Q1, escrevendo a instru¸˜o no registro de instru¸˜o
c ca ca
(Instruction Register - IR). A decodifica¸˜o e execu¸˜o continua nas fases Q2, Q3 e Q4 do clock.
ca ca
Figura 2.4: Pipeline.
2.4.2 Fluxograma das Instru¸˜es no Pipeline
co
TCY0 ´ lido da mem´ria o c´digo da instru¸˜o MOVLW 55h (n˜o nos interessa a instru¸˜o que
e o o ca a ca
foi executada, por isso n˜o est´ representada por retˆngulo).
a a a
TCY1 ´ executada a instru¸˜o MOVLW 55h e ´ lida da mem´ria a instru¸˜o MOVWF PORTB.
e ca e o ca
TCY2 ´ executada a instru¸˜o MOVWF PORTB e lida a instru¸˜o CALL SUB1.
e ca ca
TCY3 ´ executada a chamada (call) de um subrotina CALL SUB1 e ´ lida a instru¸˜o BSF
e e ca
PORTA,BIT3. Como esta instru¸˜o n˜o ´ a que nos interessa, ou seja, n˜o ´ a primeira instru¸˜o
ca a e a e ca
da subrotina SUB1, cuja execu¸˜o ´ o que vem a seguir, a leitura de uma instru¸˜o tem que ser
ca e ca
feita de novo. Este ´ um bom exemplo de uma instru¸˜o a precisar de mais que um ciclo.
e ca
TCY4 este ciclo de instru¸˜o ´ totalmente usado para ler a primeira instru¸˜o da subrotina
ca e ca
no endere¸o SUB1.
c
TCY5 ´ executada a primeira instru¸˜o da subrotina SUB1 e lida a instru¸˜o seguinte.
e ca ca
2.5 Significado dos pinos
´
O PIC16F84 tem um total de 18 pinos. E mais freq¨entemente encontrado num tipo de encap-
u
sulamento DIP18, mas, tamb´m pode ser encontrado numa c´psula SMD de menores dimens˜es
e a o
que a DIP. DIP ´ uma abreviatura para Dual In Package (Empacotamento em duas linhas). SMD
e
´ uma abreviatura para Surface Mount Devices (Dispositivos de Montagem em Superf´
e ıcie), o que
sugere que os pinos n˜o precisam de passar pelos orif´
a ıcios da placa em que s˜o inseridos, quando
a
se solda este tipo de componente.
Figura 2.5: Pinagem do PIC16F84.
Os pinos no microcontrolador PIC16F84, tˆm o seguinte significado:
e
16
17. • Pino no 1, RA2 Segundo pino da porta A. N˜o tem nenhuma fun¸˜o adicional.
a ca
• Pino no 2, RA3 Terceiro pino da porta A. N˜o tem nenhuma fun¸˜o adicional.
a ca
• Pino no 3, RA4 Quarto pino da porta A. O TOCK1 que funciona como entrada do tempo-
rizador, tamb´m utiliza este pino.
e
• Pino no 4, MCLR Entrada de reset e entrada da tens˜o de programa¸˜o Vpp do microcon-
a ca
trolador .
• Pino no 5, Vss massa da alimenta¸˜o.
ca
• Pino no 6, RB0, bit 0 da porta B. Tem uma fun¸˜o adicional que ´ a de entrada de interrup¸˜o.
ca e ca
• Pino no 7, RB1 bit 1da porta B. N˜o tem nenhuma fun¸˜o adicional.
a ca
• Pino no 8, RB2 bit 2 da porta B. N˜o tem nenhuma fun¸˜o adicional.
a ca
• Pino no 9, RB3 bit 3 da porta B. N˜o tem nenhuma fun¸˜o adicional.
a ca
• Pino no 10, RB4 bit 4 da porta B. N˜o tem nenhuma fun¸˜o adicional.
a ca
• Pino no 11, RB5 bit 5 da porta B. N˜o tem nenhuma fun¸˜o adicional.
a ca
• Pino no 12, RB6 bit 6 da porta B. No modo de programa ´ a linha de clock
e
• Pino no 13, RB7 bit 7 da porta B. Linha de dados no modo de programa
• Pino no 14, Vdd p´lo positivo da tens˜o de alimenta¸˜o.
o a ca
• Pino no 15, OSC2 para ser ligado a um oscilador.
• Pino no 16, OSC1 para ser ligado a um oscilador.
• Pino no 17, RA0 bit 0 da porta A. Sem fun¸˜o adicional.
ca
• Pino no 18, RA1 bit 1 da porta A. Sem fun¸˜o adicional.
ca
2.6 Gerador de rel´gio – oscilador
o
O circuito do oscilador ´ usado para fornecer um rel´gio (clock), ao microcontrolador. O clock
e o
´ necess´rio para que o microcontrolador possa executar um programa ou as instru¸˜es de um
e a co
programa.
2.6.1 Tipos de osciladores
O PIC16F84 pode trabalhar com quatro configura¸˜es de oscilador. Uma vez que as configura¸˜es
co co
com um oscilador de cristal e resistˆncia-condensador (RC) s˜o aquelas mais freq¨entemente us-
e a u
adas, elas s˜o as unicas que vamos mencionar aqui.
a ´
Quando o oscilador ´ de cristal, a designa¸˜o da configura¸˜o ´ de XT, se o oscilador for uma
e ca ca e
resistˆncia em s´rie com um condensador, tem a designa¸˜o RC. Isto ´ importante, porque h´
e e ca e a
necessidade de optar entre os diversos tipos de oscilador, quando se escolhe um microcontrolador.
Figura 2.6: Clock de um microcontrolador com um ressonador.
17
18. 2.6.2 Oscilador XT
O oscilador de cristal est´ contido num inv´lucro de metal com dois pinos onde foi escrita a
a o
freq¨ˆncia a que o cristal oscila. Dois condensadores cerˆmicos devem ligar cada um dos pinos do
ue a
cristal ` massa. Casos h´ em que cristal e condensadores est˜o contidos no mesmo encapsulamento,
a a a
´ tamb´m o caso do ressonador cerˆmico ao lado representado. Este elemento tem trˆs pinos
e e a e
com o pino central ligado ` massa e os outros dois pinos ligados aos pinos OSC1 e OSC2 do
a
microcontrolador. Quando projetamos um dispositivo, a regra ´ colocar o oscilador t˜o perto
e a
quanto poss´ do microcontrolador, de modo a evitar qualquer interferˆncia nas linhas que ligam
ıvel e
o oscilador ao microcontrolador.
Figura 2.7: Clock de um microcontrolador a partir de um cristal de quartzo.
2.6.3 Oscilador RC
Em aplica¸˜es em que a precis˜o da temporiza¸˜o n˜o ´ um factor cr´
co a ca a e ıtico, o oscilador RC torna-se
mais econˆmico. A freq¨ˆncia de ressonˆncia do oscilador RC depende da tens˜o de alimenta¸˜o,
o ue a a ca
da resistˆncia R, capacitˆncia C e da temperatura de funcionamento.
e a
Figura 2.8: Oscilador RC.
A Figura 2.8 mostra como um oscilador RC deve ser ligado a um PIC16F84. Com um valor
para a resistˆncia R abaixo de 2,2kΩ, o oscilador pode tornar-se inst´vel ou pode mesmo parar de
e a
oscilar. Para um valor muito grande R (1M por exemplo), o oscilador torna-se muito sens´ ıvel `
a
umidade e ao ru´ ´
ıdo. E recomendado que o valor da resistˆncia R esteja compreendido entre 3kΩ e
e
100kΩ. Apesar de o oscilador poder trabalhar sem condensador externo (C = 0pF), ´ conveniente,
e
ainda assim, usar um condensador acima de 20pF para evitar o ru´ e aumentar a estabilidade.
ıdo
Qualquer que seja o oscilador que se est´ a utilizar, a freq¨ˆncia de trabalho do microcontrolador ´
a ue e
a do oscilador dividida por 4. A freq¨ˆncia de oscila¸˜o dividida por 4 tamb´m ´ fornecida no pino
ue ca e e
OSC2/CLKOUT e, pode ser usada, para testar ou sincronizar outros circuitos l´gicos pertencentes
o
ao sistema.
Ao ligar a alimenta¸˜o do circuito, o oscilador come¸a a oscilar. Primeiro com um per´
ca c ıodo de
oscila¸˜o e uma amplitude inst´veis, mas, depois de algum tempo, tudo estabiliza.
ca a
Para evitar que esta instabilidade inicial do clock afete o funcionamento do microcontrolador,
n´s necessitamos de manter o microcontrolador no estado de reset enquanto o clock do oscilador
o
n˜o estabiliza. A Figura 2.10 mostra uma forma t´
a ıpica do sinal fornecido por um oscilador de
cristal de quartzo ao microcontrolador quando se liga a alimenta¸˜o.ca
18
19. Figura 2.9: Rela¸˜o entre o sinal de clock e os ciclos de instru¸˜o.
ca ca
Figura 2.10: Sinal de clock do oscilador do microcontrolador depois de ser ligada a alimenta¸˜o.
ca
2.7 Reset
O reset ´ usado para pˆr o microcontrolador num estado conhecido. Na pr´tica isto significa
e o a
que `s vezes o microcontrolador pode comportar-se de um modo inadequado em determinadas
a
condi¸˜es indesej´veis. De modo a que o seu funcionamento normal seja restabelecido, ´ preciso
co a e
fazer o reset do microcontrolador, isto significa que todos os seus registros v˜o conter valores iniciais
a
pr´-definidos, correspondentes a uma posi¸˜o inicial. O reset n˜o ´ usado somente quando o micro-
e ca a e
controlador n˜o se comporta da maneira que n´s queremos, mas, tamb´m pode ser usado, quando
a o e
ocorre uma interrup¸˜o por parte de outro dispositivo, ou quando se quer que o microcontrolador
ca
esteja pronto para executar um programa .
De modo a prevenir a ocorrˆncia de um zero l´gico acidental no pino MCLR (a linha por cima
e o
de MCLR significa o sinal de reset ´ ativado por n´
e ıvel l´gico baixo), o pino MCLR tem que ser
o
ligado atrav´s de uma resistˆncia ao lado positivo da alimenta¸˜o. Esta resistˆncia deve ter um
e e ca e
valor entre 5kΩ e 10kΩ. Uma resistˆncia como esta, cuja fun¸˜o ´ conservar uma determinada
e ca e
linha a n´ l´gico alto, ´ chamada resist^ncia de pull up.
ıvel o e e
Figura 2.11: Utiliza¸˜o do circuito interno de reset.
ca
O microcontrolador PIC16F84, admite v´rias formas de reset:
a
19
20. 1. Reset quando se liga a alimenta¸˜o, POR (Power-On Reset)
ca
2. Reset durante o funcionamento normal, quando se p˜e a n´ l´gico baixo o pino MCLR do
o ıvel o
microcontrolador.
3. Reset durante o regime de SLEEP (dormir).
4. Reset quando o temporizador do watchdog (WDT) transborda (passa para 0 depois de atingir
o valor m´ximo).
a
5. Reset quando o temporizador do watchdog (WDT) transborda estando no regime de SLEEP.
Os reset mais importantes s˜o o primeiro e o segundo. O primeiro, ocorre sempre que ´ ligada
a e
a alimenta¸˜o do microcontrolador e serve para trazer todos os registros para um estado inicial. O
ca
segundo que resulta da aplica¸˜o de um valor l´gico baixo ao pino MCLR durante o funcionamento
ca o
normal do microcontrolador e, ´ usado muitas vezes, durante o desenvolvimento de um programa.
e
Durante um reset, os locais de mem´ria da RAM (registros) n˜o s˜o alterados. Ou seja, os
o a a
conte´dos destes registros, s˜o desconhecidos durante o restabelecimento da alimenta¸˜o, mas
u a ca
mant´m-se inalterados durante qualquer outro reset. Ao contr´rio dos registros normais, os SFR
e a
(registros com fun¸˜es especiais) s˜o reiniciados com um valor inicial pr´-definido. Um dos mais
co a e
importantes efeitos de um reset, ´ introduzir no contador de programa (PC), o valor zero (0000),
e
o que faz com que o programa comece a ser executado a partir da primeira instru¸˜o deste.
ca
2.7.1 Brown-out Reset
Reset quando o valor da alimenta¸˜o desce abaixo do limite permitido ´ chamado de Brown-out
ca e
Reset.
O impulso que provoca o reset durante o estabelecimento da alimenta¸˜o (power-up), ´ gerado
ca e
pelo pr´prio microcontrolador quando detecta um aumento na tens˜o Vdd (numa faixa entre 1,2V
o a
e 1,8V). Esse impulso perdura durante 72ms, o que, em princ´ ıpio, ´ tempo suficiente para que
e
o oscilador estabilize. Esse intervalo de tempo de 72ms ´ definido por um temporizador interno
e
PWRT, com um oscilador RC pr´prio. Enquanto PWRT estiver actio, o microcontrolador mant´m-
o e
se no estado de reset. Contudo, quando o dispositivo est´ a trabalhar, pode surgir um problema
a
n˜o resultante de uma queda da tens˜o para 0 volts, mas sim de uma queda de tens˜o para um
a a a
valor abaixo do limite que garante o correto funcionamento do microcontrolador. Trata-se de
um facto muito prov´vel de ocorrer na pr´tica, especialmente em ambientes industriais onde as
a a
perturba¸˜es e instabilidade da alimenta¸˜o ocorrem freq¨entemente. Para resolver este problema,
co ca u
n´s precisamos de estar certos de que o microcontrolador entra no estado de reset de cada vez que
o
a alimenta¸˜o desce abaixo do limite aprovado.
ca
Figura 2.12: Exemplos de quedas na alimenta¸˜o abaixo do limite.
ca
Se, de acordo com as especifica¸˜es el´tricas, o circuito interno de reset de um microcontrolador
co e
n˜o satisfizer as necessidades, ent˜o, dever˜o ser usados componentes electronics especiais, capazes
a a a
20
21. de gerarem o sinal de reset desejado. Al´m desta fun¸˜o, estes componentes, podem tamb´m
e ca e
cumprir o papel de vigiarem as quedas de tens˜o para um valor abaixo de um n´ especificado.
a ıvel
Quando isto ocorre, aparece um zero l´gico no pino MCLR, que mant´m o microcontrolador
o e
no estado de reset, enquanto a tens˜o
a n˜o estiver dentro dos limites que garantem um correto
a
funcionamento.
2.8 Unidade Central de Processamento
A unidade central de processamento (CPU) ´ o c´rebro de um microcontrolador. Essa parte ´
e e e
respons´vel por extrair a instru¸˜o, decodificar essa instru¸˜o e, finalmente, execut´-la.
a ca ca a
Figura 2.13: Esquema da unidade central de processamento - CPU.
A unidade central de processamento, interliga todas as partes do microcontrolador de modo
a que este se comporte como um todo. Uma das sua fun¸˜es mais importante ´, seguramente,
co e
decodificar as instru¸˜es do programa. Quando o programador escreve um programa, as instru¸˜es
co co
assumem um claro significado como ´ o caso por exemplo de MOVLW 0x20. Contudo, para
e
que um microcontrolador possa entendˆ-las, esta forma escrita de uma instru¸˜o tem que ser
e ca
traduzida numa s´rie de zeros e uns que ´ o opcode (operation code ou c´digo da opera¸˜o).
e e o ca
Esta passagem de uma palavra escrita para a forma bin´ria ´ executada por tradutores assembler
a e
(ou simplesmente assembler). O c´digo da instru¸˜o extra´ da mem´ria de programa, tem
o ca ıdo o
que ser decodificado pela unidade central de processamento (CPU). A cada uma das instru¸˜es co
do repert´rio do microcontrolador, corresponde um conjunto de a¸˜es para a concretizar. Estas
o co
a¸˜es, podem envolver transferˆncias de dados de um local de mem´ria para outro, de um local de
co e o
mem´ria para os portos, e diversos c´lculos, pelo que, se conclui que, o CPU, tem que estar ligado
o a
a todas as partes do microcontrolador. Os bus de de dados e o de endere¸o permitem-nos fazer
c
isso.
2.8.1 Unidade L´gica Aritm´tica (ALU)
o e
A unidade l´gica aritm´tica (ALU – Arithmetic Logic Unit), ´ respons´vel pela execu¸˜o de
o e e a ca
opera¸˜es de adi¸˜o, subtra¸˜o, deslocamento (para a esquerda ou para a direita dentro de um
co ca ca
registro) e opera¸˜es l´gicas. O PIC16F84 cont´m uma unidade l´gica aritm´tica de 8 bits e
co o e o e
registros de uso gen´rico tamb´m de 8 bits.
e e
2.9 Registros
Por operando n´s designamos o conte´do sobre o qual uma opera¸˜o incide. Nas instru¸˜es com
o u ca co
dois operados, geralmente um operando est´ contido no registro de trabalho W (working register)
a
e o outro operando ou ´ uma constante ou ent˜o est´ contido num dos outros registros. Esses
e a a
21
22. Figura 2.14: Unidade l´gica-aritm´tica.
o e
Figura 2.15: Diagrama bloco mais detalhado do microcontrolador PIC16F84.
22
23. registros podem ser Registros de Uso Gen´rico (General Purpose Registers – GPR) ou Registros
e
com fun¸oes especiais (Special Function Registers – SFR). Nas instru¸˜es s´ com um operando,
c˜ co o
um dos operandos ´ o conte´do do registro W ou o conte´do de um dos outros registros. Quando
e u u
s˜o executadas opera¸˜es l´gicas ou aritm´ticas como ´ o caso da adi¸˜o, a ALU controla o estado
a co o e e ca
dos bits (que constam do registro de estado – STATUS). Dependendo da instru¸˜o a ser executada,
ca
a ALU, pode modificar os valores bits do Carry (C), Carry de d´ ıgito (DC) e Z (zero) no registro
de estado – STATUS.
2.9.1 Registro STATUS
O registro de estado (STATUS), cont´m o estado da ALU (C, DC, Z), estado de RESET (TO, PD)
e
e os bits para sele¸˜o do banco de mem´ria (IRP, RP1, RP0). Considerando que a sele¸˜o do banco
ca o ca
de mem´ria ´ controlada atrav´s deste registro, ele tem que estar presente em todos os bancos.
o e e
Os bancos de mem´ria ser˜o discutidos com mais detalhe no cap´
o a ıtulo que trata da Organiza¸˜o
ca
da Mem´ria. Se o registro STATUS for o registro de destino para instru¸˜es que afetem os bits Z,
o co
DC ou C, ent˜o n˜o ´ poss´ escrever nestes trˆs bits.
a a e ıvel e
Figura 2.16: Registrador STATUS.
bit 0 C (Carry) Transporte. Este bit ´ afetado pelas opera¸˜es de adi¸˜o, subtra¸˜o e desloca-
e co ca ca
mento. Toma o valor 1 (set), quando um valor mais pequeno ´ subtra´ de um valor maior
e ıdo
e toma o valor 0 (reset) quando um valor maior ´ subtra´ de um menor. 1= Ocorreu um
e ıdo
transporte no bit mais significativo 0= N˜o ocorreu transporte no bit mais significativo O
a
bit C ´ afetado pelas instru¸˜es ADDWF, ADDLW, SUBLW e SUBWF.
e co
bit 1 DC (Digit Carry) Transporte de d´ ıgito. Este bit ´ afetado pelas opera¸˜es de adi¸˜o,
e co ca
subtra¸˜o. Ao contr´rio do anterior, DC assinala um transporte do bit 3 para o bit 4 do
ca a
resultado. Este bit toma o valor 1, quando um valor mais pequeno ´ subtra´ de um valor
e ıdo
maior e toma o valor 0 quando um valor maior ´ subtra´ de um menor.
e ıdo
1= Ocorreu um transporte no quarto bit mais significativo
0= N˜o ocorreu transporte nesse bit
a
O bit DC ´ afetado pelas instru¸˜es ADDWF, ADDLW, SUBLW e SUBWF.
e co
bit 2 Z (bit Zero) Indica¸˜o de resultado igual a zero. Este bit toma o valor 1 quando o resul-
ca
tado da opera¸˜o l´gica ou aritm´tica executada ´ igual a 0.
ca o e e
1= resultado igual a zero
0= resultado diferente de zero
bit 3 PD (Bit de baixa de tens˜o – Power Down). Este bit ´ posto a 1 quando o microcontro-
a e
lador ´ alimentado e come¸a a trabalhar, depois de um reset normal e depois da execu¸˜o da
e c ca
instru¸˜o CLRWDT. A instru¸˜o SLEEP p˜e este bit a 0 ou seja, quando o microcontrolador
ca ca o
entra no regime de baixo consumo / pouco trabalho. Este bit pode tamb´m ser posto a 1,
e
no caso de ocorrer um impulso no pino RB0/INT, uma varia¸˜o nos quatro bits mais signi-
ca
ficativos da porta B, ou quando ´ completada uma opera¸˜o de escrita na DATA EEPROM
e ca
ou ainda pelo watchdog.
1 = depois de ter sido ligada a alimenta¸˜o
ca
0 = depois da execu¸˜o de uma instru¸˜o SLEEP
ca ca
bit 4 TO Time-out transbordo do Watchdog. Este bit ´ posto a 1, depois de a alimenta¸˜o ser
e ca
ligada e depois da execu¸˜o das instru¸˜es CLRWDT e SLEEP. O bit ´ posto a 0 quando
ca co e
23
24. o watchdog consegue chegar ao fim da sua contagem (overflow = transbordar), o que indica
que qualquer coisa n˜o esteve bem.
a
1 = n˜o ocorreu transbordo
a
0 = ocorreu transbordo
bits 5 e 6 RP1:RP0 (bits de sele¸˜o de banco de registros). Estes dois bits s˜o a parte mais
ca a
significativa do endere¸o utilizado para endere¸amento direto. Como as instru¸˜es que en-
c c co
dere¸am directamente a mem´ria, disp˜em somente de sete bits para este efeito, ´ preciso
c o o e
mais um bit para poder endere¸ar todos os 256 registros do PIC16F84. No caso do PIC16F84,
c
RP1, n˜o ´ usado, mas pode ser necess´rio no caso de outros microcontroladores PIC, de
a e a
maior capacidade.
01 = banco de registros 1
00 = banco de registros 0
bit 7 IRP (Bit de sele¸˜o de banco de registros). Este bit ´ utilizado no endere¸amento indireto
ca e c
da RAM interna, como oitavo bit.
1 = bancos 2 e 3
0 = bancos 0 e 1 (endere¸os de 00h a FFh)
c
2.9.2 Registro OPTION
Figura 2.17: Registrador OPTION.
bits 0 a 2 PS0, PS1, PS2 (bits de sele¸˜o do divisor Prescaler). Estes trˆs bits definem o factor
ca e
de divis˜o do prescaler. Aquilo que ´ o prescaler e o modo como o valor destes trˆs bits
a e e
afectam o funcionamento do microcontrolador ser´ estudado na se¸˜o referente a TMR0.
a ca
Figura 2.18: Prescaler.
bit 3 PSA (Bit de Atribui¸˜o do Prescaler). Bit que atribui o prescaler ao TMR0 ou ao watchdog.
ca
1 = prescaler atribu´ ao watchdog
ıdo
0 = prescaler atribu´ ao temporizador TMR0
ıdo
bit 4 T0SE (bit de sele¸˜o de bordo actio em TMR0). Se for permitido aplicar impulsos em
ca
TMR0, a partir do pino RA4/TOCK1, este bit determina se os impulsos activos s˜o os
a
impulsos ascendentes ou os impulsos descendentes.
1 = bordo descendente
0 = bordo ascendente
bit 5 TOCS (bit de sele¸˜o de fonte de clock em TMR0). Este pino escolhe a fonte de impulsos
ca
que vai ligar ao temporizador. Esta fonte pode ser o clock do microcontrolador (freq¨ˆncia
ue
24
25. de clock a dividir por 4) ou impulsos externos no pino RA4/TOCKI.
1 = impulsos externos
0 = 1 do clock interno
4
bit 6 INTEDG (bit de sele¸˜o de bordo de interrup¸˜o). Se esta interrup¸˜o estiver habilitada,
ca ca ca
´ poss´ definir o bordo que vai ativar a interrup¸˜o no pino RB0/INT.
e ıvel ca
1 = bordo ascendente
0 = bordo descendente
bit 7 RBPU (Habilita¸˜o dos pull-up nos bits da porta B). Este bit introduz ou retira as re-
ca
sistˆncias internas de pull-up da porta B.
e
1 = resistˆncias de pull-up desligadas
e
0 = resistˆncias de pull-up ligadas
e
2.10 Portas de I/O
Porta, ´ um grupo de pinos num microcontrolador que podem ser acessados simultaneamente,
e
e, no qual n´s podemos colocar uma combina¸˜o de zeros e uns ou ler dele o estado existente.
o ca
Fisicamente, porta ´ um registro dentro de um microcontrolador que est´ ligado por fios aos pinos
e a
do microcontrolador. Os portas representam a conex˜o f´
a ısica da Unidade Central de Processamento
(CPU) com o mundo exterior. O microcontrolador usa-os para observar ou comandar outros
componentes ou dispositivos. Para aumentar a sua funcionalidade, os mesmos pinos podem ter
duas aplica¸˜es distintas, como, por exemplo, RA4/TOCKI, que ´ simultaneamente o bit 4 da
co e
porta A e uma entrada externa para o contador/temporizador TMR0. A escolha de uma destas
duas fun¸˜es ´ feita atrav´s dos registros de configura¸˜o. Um exemplo disto ´ o TOCS, quinto bit
co e e ca e
do registro OPTION. Ao selecionar uma das fun¸˜es, a outra ´ automaticamente inibida.
co e
Figura 2.19: Rela¸˜o entre os registros TRISA e PORTA A.
ca
Todos os pinos das portas podem ser definidos como de entrada ou de sa´ ıda, de acordo com as
necessidades do dispositivo que se est´ a projetar. Para definir um pino como entrada ou como
a
sa´
ıda, ´ preciso, em primeiro lugar, escrever no registro TRIS, a combina¸˜o apropriada de zeros e
e ca
uns. Se no local apropriado de um registro TRIS for escrito o valor l´gico 1, ent˜o o correspondente
o a
pino da porta ´ definido como entrada, se suceder o contr´rio, o pino ´ definido como sa´
e a e ıda. Todos
as portas, tˆm um registro TRIS associado. Assim, para a porta A, existe o registro TRISA no
e
endere¸o 85h e, para a porta B existe o registro TRISB, no endere¸o 86h.
c c
2.10.1 Porta A
A porta A (PORTA) est´ associado a 5 pinos. O registro de dire¸˜o de dados correspondente ´ o
a ca e
TRISA, no endere¸o 85h. Tal como no caso da porta B, pˆr a 1 um bit do registro TRISA, equivale
c o
a definir o correspondente pino da porta A, como entrada e pˆr a 0 um bit do mesmo registro,
o
equivale a definir o correspondente pino da porta A, como sa´
ıda.
25