Você está na página 1de 136

I n t r odu çã o

a os
M icr ocon t r ola dor e s

PI C
1 6 F8 4 A

1
I n t r odu çã o a os M icr ocon t r ola dor e s

I n t r odu çã o
As circunst âncias que se nos deparam hoj e no cam po dos m icrocont roladores t êm os seus
prim órdios no desenvolvim ent o da t ecnologia dos circuit os int egrados. Est e desenvolvim ent o
t ornou possível arm azenar cent enas de m ilhares de t ransíst ores num único chip. I sso const it uiu
um pré- requisit o para a produção de m icroprocessadores e, os prim eiros com put adores foram
const ruídos adicionando periféricos ext ernos t ais com o m em ória, linhas de ent rada e saída,
t em porizadores e out ros. Um crescent e aum ent o do nível de int egração, perm it iu o aparecim ent o
de circuit os int egrados cont endo sim ult aneam ent e processador e periféricos. Foi assim que o
prim eiro chip cont endo um m icrocom put ador e que m ais t arde haveria de ser designado por
m icrocont rolador, apareceu.

H ist ór ia
É no ano de 1969 que um a equipa de engenheiros j aponeses pert encent es à com panhia BUSI COM
chega aos Est ados Unidos com a encom enda de alguns circuit os int egrados para calculadoras a
serem im plem ent ados segundo os seus proj ect os. A propost a foi ent regue à I NTEL e Marcian Hoff
foi o responsável pela sua concret ização. Com o ele t inha t ido experiência de t rabalho com um
com put ador ( PC) PDP8, lem brou- se de apresent ar um a solução subst ancialm ent e diferent e em
vez da const rução sugerida. Est a solução pressupunha que a função do circuit o int egrado seria
det erm inada por um program a nele arm azenado. I sso significava que a configuração deveria ser
m ais sim ples, m as t am bém era preciso m uit o m ais m em ória que no caso do proj ect o propost o
pelos engenheiros j aponeses. Depois de algum t em po, em bora os engenheiros j aponeses t enham
t ent ado encont rar um a solução m ais fácil, a ideia de Marcian venceu e o prim eiro
m icroprocessador nasceu. Ao t ransform ar est a ideia num produt o concret o, Frederico Faggin foi
de um a grande ut ilidade para a I NTEL. Ele t ransferiu- se para a I NTEL e, em som ent e 9 m eses,
t eve sucesso na criação de um produt o real a part ir da sua prim eira concepção. Em 1971, a I NTEL
adquiriu os direit os sobre a venda dest e bloco int egral. Prim eiro eles com praram a licença à
com panhia BUSI COM que não t inha a m ínim a percepção do t esouro que possuía. Nest e m esm o
ano, apareceu no m ercado um m icroprocessador designado por 4004. Est e foi o prim eiro
m icroprocessador de 4 bit s e t inha a velocidade de 6 000 operações por segundo. Não m uit o
t em po depois, a com panhia Am ericana CTC pediu à I NTEL e à Texas I nst rum ent s um
m icroprocessador de 8 bit s para usar em t erm inais. Mesm o apesar de a CTC acabar por desist ir
dest a ideia, t ant o a I nt el com o a Texas I nst rum ent s cont inuaram a t rabalhar no m icroprocessador
e, em Abril de 1972, os prim eiros m icroprocessadores de 8 bit s apareceram no m ercado com o
nom e de 8008. Est e podia endereçar 16KB de m em ória, possuía 45 inst ruções e t inha a
velocidade de 300 000 operações por segundo. Esse m icroprocessador foi o pioneiro de t odos os
m icroprocessadores act uais. A I nt el cont inuou com o desenvolvim ent o do produt o e, em Abril de
1974 pôs cá fora um processador de 8 bit s com o nom e de 8080 com a capacidade de endereçar
64KB de m em ória, com 75 inst ruções e com preços a com eçarem em $360.

Um a out ra com panhia Am ericana, a Mot orola, apercebeu- se rapidam ent e do que est ava a
acont ecer e, assim , pôs no m ercado um novo m icroprocessador de 8 bit s, o 6800. O const rut or
chefe foi Chuck Peddle e além do m icroprocessador propriam ent e dit o, a Mot orola foi a prim eira
com panhia a fabricar out ros periféricos com o os 6820 e 6850. Nest a alt ura, m uit as com panhias j á
se t inham apercebido da enorm e im port ância dos m icroprocessadores e com eçaram a int roduzir
os seus próprios desenvolvim ent os. Chuck Peddle deixa a Mot orola para ent rar para a MOS
Technology e cont inua a t rabalhar int ensivam ent e no desenvolvim ent o dos m icroprocessadores.

Em 1975, na exposição WESCON nos Est ados Unidos, ocorreu um acont ecim ent o crít ico na
hist ória dos m icroprocessadores. A MOS Technology anunciou que ia pôr no m ercado
m icroprocessadores 6501 e 6502 ao preço de $25 cada e que podia sat isfazer de im ediat o t odas
as encom endas. I st o pareceu t ão sensacional que m uit os pensaram t rat ar- se de um a espécie de
vigarice, considerando que os com pet idores vendiam o 8080 e o 6800 a $179 cada. Para
responder a est e com pet idor, t ant o a I nt el com o a Mot orola baixaram os seus preços por
m icroprocessador para $69,95 logo no prim eiro dia da exposição. Rapidam ent e a Mot orola pôs
um a acção em t ribunal cont ra a MOS Technology e cont ra Chuck Peddle por violação dos direit os

2
de aut or por copiarem ao copiarem o 6800. A MOS Technology deixou de fabricar o 6501, m as
cont inuou com o 6502. O 6502 é um m icroprocessador de 8 bit s com 56 inst ruções e um a
capacidade de endereçam ent o de 64KB de m em ória. Devido ao seu baixo cust o, o 6502 t orna- se
m uit o popular e, assim , é inst alado em com put adores com o KI M- 1, Apple I , Apple I I , At ari,
Com odore, Acorn, Oric, Galeb, Orao, Ult ra e m uit os out ros. Cedo aparecem vários fabricant es do
6502 ( Rockwell, Sznert ek, GTE, NCR, Ricoh e Com odore adquiriram a MOS Technology) que, no
auge da sua prosperidade, chegou a vender m icroprocessadores à razão de 15 m ilhões por ano !

Cont udo, os out ros não baixaram os braços. Frederico Faggin deixa a I nt el e funda a Zilog I nc.
Em 1976, a Zilog anuncia o Z80. Durant e a concepção dest e m icroprocessador, Faggin t om a um a
decisão crít ica. Sabendo que t inha sido j á desenvolvida um a enorm e quant idade de program as
para o 8080, Faggin conclui que m uit os vão perm anecer fieis a est e m icroprocessador por causa
das grandes despesas que adviriam das alt erações a t odos est es program as. Assim , ele decide
que o novo m icroprocessador deve ser com pat ível com o 8080, ou sej a, deve ser capaz de
execut ar t odos os program as que j á t enham sido escrit os para o 8080. Além dest as
caract eríst icas, out ras caract eríst icas adicionais foram int roduzidas, de t al m odo que o Z80 se
t ornou um m icroprocessador m uit o pot ent e no seu t em po. Ele podia endereçar direct am ent e 64KB
de m em ória, t inha 176 inst ruções, um grande núm ero de regist os, um a opção para refrescam ent o
de m em ória RAM dinâm ica, um a única alim ent ação, m aior velocidade de funcionam ent o, et c. O
Z80 t ornou- se um grande sucesso e t oda a gent e se t ransferiu do 8080 para o Z80.
Pode dizer- se que o Z80 se const it uiu sem som bra de dúvida com o o m icroprocessador de 8 bit s
com m aior sucesso no seu t em po. Além da Zilog, out ros novos fabricant es com o Most ek, NEC,
SHARP e SGS apareceram . O Z80 foi o coração de m uit os com put adores com o o Spect rum ,
Part ner, TRS703, Z- 3 e Galaxy, que foram aqui usados.

Em 1976, a I nt el apareceu com um a versão m elhorada do m icroprocessador de 8 bit s e designada


por 8085. Cont udo, o Z80 era t ão superior a est e que, bem depressa, a I nt el perdeu a bat alha.
Ainda que m ais alguns m icroprocessadores t enham aparecido no m ercado ( 6809, 2650, SC/ MP
et c.) , j á t udo est ava ent ão decidido. Já não havia m ais grandes m elhorias a int roduzir pelos
fabricant es que fundam ent assem a t roca por um novo m icroprocessador, assim , o 6502 e o Z80,
acom panhados pelo 6800, m ant iveram - se com o os m ais represent at ivos m icroprocessadores de 8
bit s desse t em po.

M icr ocon t r ola dor e s ve r su s M icr opr oce ssa dor e s


Um m icrocont rolador difere de um m icroprocessador em vários aspect os. Prim eiro e o m ais
im port ant e, é a sua funcionalidade. Para que um m icroprocessador possa ser usado, out ros
com ponent es devem - lhe ser adicionados, t ais com o m em ória e com ponent es para receber e
enviar dados. Em resum o, isso significa que o m icroprocessador é o verdadeiro coração do
com put ador. Por out ro lado, o m icrocont rolador foi proj ect ado para t er t udo num só. Nenhuns
out ros com ponent es ext ernos são necessários nas aplicações, um a vez que t odos os periféricos
necessários j á est ão cont idos nele. Assim , nós poupam os t em po e espaço na const rução dos
disposit ivos.

1 .1 Un ida de de M e m ór ia
A m em ória é a part e do m icrocont rolador cuj a função é guardar dados.
A m aneira m ais fácil de explicar é descrevê- la com o um a grande prat eleira cheia de gavet as. Se
supuserm os que m arcam os as gavet as de m odo a elas não se confundirem um as com as out ras,
ent ão o seu cont eúdo será facilm ent e acessível. Bast a saber a designação da gavet a e o seu
cont eúdo será conhecido.

3
Os com ponent es de m em ória são exact am ent e a m esm a coisa. Para um det erm inado endereço,
nós obt em os o cont eúdo desse endereço. Dois novos conceit os foram apresent ados:
endereçam ent o e m em ória. A m em ória é o conj unt o de t odos os locais de m em ória ( gavet as) e
endereçam ent o nada m ais é que seleccionar um deles. I st o significa que precisam os de
seleccionar o endereço desej ado ( gavet a) e esperar que o cont eúdo desse endereço nos sej a
apresent ado ( abrir a gavet a) . Além de ler de um local da m em ória ( ler o cont eúdo da gavet a) ,
t am bém é possível escrever num endereço da m em ória ( int roduzir um cont eúdo na gavet a) . I st o
é feit o ut ilizando um a linha adicional cham ada linha de cont role. Nós irem os designar est a linha
por R/ W ( read/ writ e) - ler/ escrever. A linha de cont role é usada do seguint e m odo: se r/ w= 1, é
execut ada um a operação de leit ura, caso cont rário é execut ada um a operação de escrit a no
endereço de m em ória.
A m em ória é o prim eiro elem ent o, m as precisam os de m ais alguns para que o nosso
m icrocont rolador possa t rabalhar.

1 .2 Un ida de Ce n t r a l de Pr oce ssa m e n t o


Vam os agora adicionar m ais 3 locais de m em ória a um bloco específico para que possam os t er as
capacidades de m ult iplicar, dividir, subt rair e m over o seus cont eúdos de um local de m em ória
para out ro. A part e que vam os acrescent ar é cham ada " cent ral processing unit " ( CPU) ou Unidade
Cent ral de Processam ent o. Os locais de m em ória nela cont idos cham am - se regist os.

4
Os regist os são, port ant o, locais de m em ória cuj o papel é aj udar a execut ar várias operações
m at em át icas ou quaisquer out ras operações com dados, quaisquer que sej am os locais em que
est es se encont rem .
Vam os olhar para a sit uação act ual. Nós t em os duas ent idades independent es ( m em ória e CPU)
que est ão int erligadas, dest e m odo, qualquer t roca de dados é ret ardada bem com o a
funcionalidade do sist em a é dim inuída. Se, por exem plo, nós desej arm os adicionar os cont eúdos
de dois locais de m em ória e t ornar a guardar o result ado na m em ória, nós necessit am os de um a
ligação ent re a m em ória e o CPU. Dit o m ais sim plesm ent e, nós precisam os de obt er um
" cam inho" at ravés do qual os dados possam passar de um bloco para out ro.

1 .3 Bu s

Est e " cam inho" designa- se por " bus" . Fisicam ent e ele corresponde a um grupo de 8, 16 ou m ais
fios.
Exist em dois t ipos de bus: bus de dados e de endereço. O núm ero de linhas do prim eiro depende
da quant idade de m em ória que desej am os endereçar e o núm ero de linhas do out ro depende da
largura da palavra de dados, no nosso caso é igual a oit o. O prim eiro bus serve para t ransm it ir
endereços do CPU para a m em ória e o segundo para ligar t odos os blocos dent ro do
m icrocont rolador.

Nest e m om ent o, a funcionalidade j á aum ent ou m as um novo problem a apareceu: nós t em os um a


unidade capaz de t rabalhar sozinha, m as que não possui nenhum cont act o com o m undo ext erior,
ou sej a, conosco! De m odo a rem over est a deficiência, vam os adicionar um bloco que cont ém
várias localizações de m em ória e que, de um lado, est á ligado ao bus de dados e do out ro às
linhas de saída do m icrocont rolador que coincidem com pinos do circuit o int egrado e que,
port ant o, nós podem os ver com os nossos próprios olhos.

1 .4 Un ida de de e n t r a da / sa ída
Est as localizações que acabam os de adicionar, cham am - se " port os" . Exist em vários t ipos de
port os: de ent rada, de saída e de ent rada/ saída. Quando t rabalham os com port os prim eiro de
t udo é necessário escolher o port o com que querem os t rabalhar e, em seguida, enviar ou receber
dados para ou desse port o.

5
Quando se est á a t rabalhar com ele, o port o funciona com o um local de m em ória. Qualquer coisa
de que se est á a ler ou em que se est á a escrever e que é possível ident ificar facilm ent e nos pinos
do m icrocont rolador.

1 .5 Com u n ica çã o sé r ie
Ant eriorm ent e, acrescent ám os à unidade j á exist ent e a possibilidade de com unicar com o m undo
ext erior. Cont udo, est a m aneira de com unicar t em os seus inconvenient es. Um dos inconvenient es
básicos é o núm ero de linhas que é necessário usarm os para t ransferir dados. E se for necessário
t ransferi- los a um a dist ância de vários quilóm et ros? O núm ero de linhas vezes o núm ero de
quilóm et ros não at est a a econom ia do proj ect o. I st o leva- nos a t er que reduzir o núm ero de linhas
de m odo a que a funcionalidade se m ant enha. Suponha que est am os a t rabalhar apenas com t rês
linhas e que um a linha é usada para enviar dados, out ra para os receber e a t erceira é usada
com o linha de referência t ant o do lado de ent rada com o do lado da saída. Para que ist o t rabalhe
nós precisam os de definir as regras para a t roca de dados. A est e conj unt o de regras cham a- se
prot ocolo. Est e prot ocolo deve ser definido com ant ecedência de m odo que não haj a m al
ent endidos ent re as part es que est ão a com unicar ent re si. Por exem plo, se um hom em est á a
falar em francês e o out ro em inglês, é alt am ent e im provável que efect ivam ent e e rapidam ent e,
am bos se ent endam . Vam os supor que t em os o seguint e prot ocolo. A unidade lógica " 1" é
colocada na linha de t ransm issão at é que a t ransferência se inicie. Assim que ist o acont ece, a
linha passa para nível lógico '0' durant e um cert o período de t em po ( que vam os designar por T) ,
assim , do lado da recepção ficam os a saber que exist em dados para receber e, o m ecanism o de
recepção, vai act ivar- se. Regressem os agora ao lado da em issão e com ecem os a pôr zeros e uns
lógicos na linha de t ransm issão correspondent es aos bit s, prim eiro o m enos significat ivo e
finalm ent e o m ais significat ivo. Vam os esperar que cada bit perm aneça na linha durant e um
período de t em po igual a T, e, finalm ent e, depois do oit avo bit , vam os pôr novam ent e na linha o
nível lógico " 1" , o que assinala a t ransm issão de um dado. O prot ocolo que acabam os de
descrever é designado na lit erat ura profissional por NRZ ( Não Ret orno a Zero) .

Com o nós t em os linhas separadas para receber e enviar, é possível receber e enviar dados
( inform ação) sim ult aneam ent e. O bloco que possibilit a est e t ipo de com unicação é designado por
bloco de com unicação série. Ao cont rário da t ransm issão em paralelo, aqui os dados m ovem - se
bit após bit em série, daqui provém o nom e de com unicação série. Depois de receber dados nós
6
precisam os de os ler e guardar na m em ória, no caso da t ransm issão de dados o processo é
inverso. Os dados vêm da m em ória at ravés do bus para o local de t ransm issão e dali para a
unidade de recepção de acordo com o prot ocolo.

1 .6 Un ida de de t e m por iza çã o

Agora que j á t em os a unidade de com unicação série im plem ent ada, nós podem os receber, enviar
e processar dados.

Cont udo, para serm os capazes de ut ilizar ist o na indúst ria precisam os ainda de m ais alguns
blocos. Um deles é o bloco de t em porização que nos int eressa bast ant e porque pode dar- nos
inform ações acerca da hora, duração, prot ocolo, et c. A unidade básica do t em porizador é um
cont ador que é na realidade um regist o cuj o cont eúdo aum ent a de um a unidade num int ervalo de
t em po fixo, assim , anot ando o seu valor durant e os inst ant es de t em po T1 e T2 e calculando a sua
diferença, nós ficam os a saber a quant idade de t em po decorrida. Est a é um a part e m uit o
im port ant e do m icrocont rolador, cuj o dom ínio vai requerer m uit a da nossa at enção.

1 .7 W a t ch dog

Um a out ra coisa que nos vai int eressar é a fluência da execução do program a pelo
m icrocont rolador durant e a sua ut ilização. Suponha que com o result ado de qualquer int erferência
( que ocorre frequent em ent e num am bient e indust rial) , o nosso m icrocont rolador pára de execut ar
o program a ou, ainda pior, desat a a t rabalhar incorrect am ent e.

Claro que, quando ist o acont ece com um com put ador, nós sim plesm ent e carregam os no bot ão de
reset e cont inuam os a t rabalhar. Cont udo, no caso do m icrocont rolador nós não podem os resolver
o nosso problem a dest e m odo, porque não t em os bot ão. Para ult rapassar est e obst áculo,
precisam os de int roduzir no nosso m odelo um novo bloco cham ado wat chdog ( cão de guarda) .
Est e bloco é de fact o out ro cont ador que est á cont inuam ent e a cont ar e que o nosso program a
põe a zero sem pre que é execut ado correct am ent e. No caso de o program a " encravar" , o zero não
vai ser escrit o e o cont ador, por si só, encarregar- se- á de fazer o reset do m icrocont rolador
quando alcançar o seu valor m áxim o. I st o vai fazer com que o program a corra de novo e dest a
vez correct am ent e. Est e é um elem ent o im port ant e para que qualquer program a se execut e
fiavelm ent e, sem precisar da int ervenção do ser hum ano.

1 .8 Con ve r sor a n a lógico - digit a l

Com o os sinais dos periféricos são subst ancialm ent e diferent es daqueles que o m icrocont rolador
pode ent ender ( zero e um ) , eles devem ser convert idos num form at o que possa ser com preendido
pelo m icrocont rolador. Est a t arefa é execut ada por int erm édio de um bloco dest inado à conversão
7
analógica- digit al ou com um conversor A/ D. Est e bloco vai ser responsável pela conversão de um a
inform ação de valor analógico para um núm ero binário e pelo seu t raj ect o at ravés do bloco do
CPU, de m odo a que est e o possa processar de im ediat o.

Nest e m om ent o, a configuração do m icrocont rolador est á j á t erm inada, t udo o que falt a é
int roduzi- la dent ro de um aparelho elect rónico que poderá aceder aos blocos int ernos at ravés dos
pinos dest e com ponent e. A figura a seguir, ilust ra o aspect o int erno de um m icrocont rolador.

Configu r a çã o física do in t e r ior de um


m icr ocon t r ola dor

As linhas m ais finas que part em do cent ro em direcção à periferia do m icrocont rolador
correspondem aos fios que int erligam os blocos int eriores aos pinos do envólucro do
m icrocont rolador. O gráfico que se segue represent a a part e principal de um m icrocont rolador.

8
Esqu e m a de u m m icr ocon t r ola dor com os se u s e le m e n t os bá sicos
e liga çõe s in t e r na s.

Num a aplicação real, um m icrocont rolador, por si só, não é suficient e. Além dele, nós
necessit am os do program a que vai ser execut ado e de m ais alguns elem ent os que const it uirão um
int erface lógico para out ros elem ent os ( que vam os discut ir em capít ulos m ais à frent e) .

1 .9 Pr ogr a m a

Escrever um program a é um a part e especial do t rabalho com m icrocont roladores e é designado


por " program ação" . Vam os t ent ar escrever um pequeno program a num a linguagem que serem os
nós a criar e que t oda a gent e será capaz de com preender.

I N I CI O
REGI STO1 = LOCAL_ D E_ M EM ORI A_ A
REGI STO2 = LOCAL_ D E_ M EM ORI A_ B
PORTO_ A= REGI STO1 + REGI STO2
FI M

9
O program a adiciona os cont eúdos de dois locais de m em ória e coloca a som a dest es cont eúdos
no port o A. A prim eira linha do program a m anda m over o cont eúdo do local de m em ória " A" para
um dos regist os da unidade cent ral de processam ent o. Com o necessit am os t am bém de out ra
parcela, vam os colocar o out ro cont eúdo nout ro regist o da unidade cent ral de processam ent o
( CPU) . A inst rução seguint e pede ao CPU para adicionar os cont eúdos dos dois regist os e enviar o
result ado obt ido para o port o A, de m odo a que o result ado dest a adição sej a visível para o
m undo ext erior. Para um problem a m ais com plexo, nat uralm ent e o program a que o resolve será
m aior.
A t arefa de program ação pode ser execut ada em várias linguagens t ais com o o Assem bler, C e
Basic que são as linguagens norm alm ent e m ais usadas. O Assem bler pert ence ao grupo das
linguagens de baixo nível que im plicam um t rabalho de program ação lent o, m as que oferece os
m elhores result ados quando se pret ende poupar espaço de m em ória e aum ent ar a velocidade de
execução do program a. Com o se t rat a da linguagem m ais frequent em ent e usada na program ação
de m icrocont roladores, ela será discut ida num capít ulo m ais adiant ado. Os program as na
linguagem C são m ais fáceis de se escrever e com preender, m as, t am bém , são m ais lent os a
serem execut ados que os program as assem bler. Basic é a m ais fácil de t odas para se aprender e
as suas inst ruções são sem elhant es à m aneira de um ser hum ano se exprim ir, m as t al com o a
linguagem C, é t am bém de execução m ais lent a que o assem bler. Em qualquer caso, ant es que
escolha ent re um a dest as linguagens, precisa de exam inar cuidadosam ent e os requisit os de
velocidade de execução, de espaço de m em ória a ocupar e o t em po que vai dem orar a fazer o
program a em assem bly.
Depois de o program a est ar escrit o, nós necessit am os de int roduzir o m icrocont rolador num
disposit ivo e pô- lo a t rabalhar. Para que ist o acont eça, nós precisam os de adicionar m ais alguns
com ponent es ext ernos. Prim eiro t em os que dar vida ao m icrocont rolador fornecendo- lhe a t ensão
( a t ensão eléct rica é necessária para que qualquer inst rum ent o elect rónico funcione) e o oscilador
cuj o papel é análogo ao do coração que bat e no ser hum ano. A execução das inst ruções do
program a é regulada pelas pulsações do oscilador. Logo que lhe é aplicada a t ensão, o
m icrocont rolador execut a um a verificação dele próprio, vai para o princípio do program a e com eça
a execut á- lo. O m odo com o o disposit ivo vai t rabalhar depende de m uit os parâm et ros, os m ais
im port ant es dos quais são a com pet ência da pessoa que desenvolve o hardware e do
program ador que, com o seu program a, deve t irar o m áxim o do disposit ivo.

10
M icr ocon t r ola dor PI C1 6 F8 4

I n t r odu çã o
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.

Memória de programa (FLASH) - para armazenar o programa que se escreveu.


Como a memória fabricada com tecnologia FLASH pode ser programa e limpa mais que uma vez. ela torna-se adequada
para o desenvolvimento de dispositivos.

EEPROM - memória dos dados que necessitam de ser salvaguardados quando a alimentação é desligada. Normalmente é
usada para guardar dados importantes que não se podem perder quando a alimentação, de repente, “vai abaixo”. Um
exemplo deste tipo de dados é a temperatura fixada para os reguladores de temperatura. Se, durante uma quebra de
alimentação, se perdessem dados, nós precisaríamos de proceder a um novo ajustamento quando a alimentação fosse
restabelecida. Assim, o nosso dispositivo, perderia eficácia.

RAM - memória de dados usada por um programa, durante a sua execução.


Na RAM, são guardados todos os resultados intermédios ou dados temporários durante a execução do programa e que não
são cruciais para o dispositivo, depois de ocorrer uma falha na alimentação.

PORTO A e PORTO B são ligações físicas entre o microcontrolador e o mundo exterior. O porto A tem cinco pinos e o
porto B oito pinos.

CONTADOR/TEMPORIZADOR é um registro de 8 bits no interior do microcontrolador que trabalha independentemente


do programa. No fim de cada conjunto de quatro ciclos de relógio do oscilador, ele incrementa o valor armazenado, até
atingir o valor máximo (255), nesta altura recomeça a contagem a partir de zero. Como nós sabemos o tempo exato entre
dois incrementos sucessivos do conteúdo do temporizador, podemos utilizar este para medir intervalos de tempo, o que o
torna muito útil em vários dispositivos.

UNIDADE DE PROCESSAMENTO CENTRAL faz a conexão com todos os outros blocos do microcontrolador. Ele
coordena o trabalho dos outros blocos e executa o programa do utilizador.

Esqu e m a do m icr ocon t r ola dor PI C1 6 F8 4

11
Ar qu it e t u r a s H a r va r d ve r su s von N e u m a n n

CI SC, RI SC
Já foi dito que o PIC16F84 tem uma arquitetura RISC. Este termo é encontrado, muitas vezes, na literatura sobre
computadores e necessita de ser explicada aqui, mais detalhadamente. A arquitetura de Harvard é um conceito mais recente
que a de von-Neumann. Ela adveio da necessidade de pôr o microcontrolador a trabalhar mais rapidamente. Na arquitetura
de Harvard, a memória de dados está separada da memória de programa. Assim, é possível uma maior fluência de dados
através da unidade central de processamento e, claro, uma maior velocidade de funcionamento. A separação da memória de
dados da memória de programa, faz com que as instruções possam ser representadas por palavras de mais que 8 bits. O
PIC16F84, usa 14 bits para cada instrução, o que permite que todas as instruções ocupem uma só palavra de instrução. É
também típico da arquitetura Harvard ter um repertório com menos instruções que a de von-Neumann's, instruções essas,
geralmente executadas apenas num único ciclo de relógio.

Os microcontroladores com a arquitetura Harvard, são também designados por "microcontroladores RISC". RISC provém
de Computador com um Conjunto Reduzido de Instruções (Reduced Instruction Set Computer). Os microcontroladores com
uma arquitetura von-Neumann são designados por 'microcontroladores CISC'. O nome CISC deriva de Computador com um
Conjunto Complexo de Instruções (Complex Instruction Set Computer).
Como o PIC16F84 é um microcontrolador RISC, disso resulta que possui um número reduzido de instruções, mais
precisamente 35 (por exemplo, os microcontroladores da Intel e da Motorola têm mais de cem instruções). Todas estas
instruções são executadas num único ciclo, exceto no caso de instruções de salto e de ramificação. De acordo com o que o
seu fabricante refere, o PIC16F84 geralmente atinge resultados de 2 para 1 na compressão de código e 4 para 1 na
velocidade, em relação aos outros microcontroladores de 8 bits da sua classe.

Aplica çõe s
O PIC16F84, é perfeitamente adequado para muitas variedades de aplicações, como a indústria automóvel, sensores
remotos, fechaduras elétricas e dispositivos de segurança. É também um dispositivo ideal para cartões inteligentes, bem
como para dispositivos alimentados por baterias, por causa do seu baixo consumo.
A memória EEPROM, faz com que se torne mais fácil usar microcontroladores em dispositivos onde o armazenamento
permanente de vários parâmetros, seja necessário (códigos para transmissores, velocidade de um motor, freqüências de
recepção, etc.). O baixo custo, baixo consumo, facilidade de manuseamento e flexibilidade fazem com que o PIC16F84 se
possa utilizar em áreas em que os microcontroladores não eram anteriormente empregues (exemplo: funções de
temporização, substituição de interfaces em sistemas de grande porte, aplicações de coprocessamento, etc.).
A possibilidade deste chip de ser programável no sistema (usando somente dois pinos para a transferência de dados), dão
flexibilidade do produto, mesmo depois de a sua montagem e teste estarem completos.
Esta capacidade, pode ser usada para criar linhas de produção e montagem, para armazenar dados de calibragem disponíveis
apenas quando se proceder ao teste final ou, ainda, para aperfeiçoar os programas presentes em produtos acabados.

Re lógio / ciclo de inst r uçã o


O relógio (clock), é quem dá o sinal de partida para o microcontrolador e é obtido a partir de 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ído correspondente ao deslocar do pêndulo. Também, a força usada para dar corda ao relógio,
podia comparar-se à alimentação elétrica.

O clock do oscilador, é ligado ao microcontrolador através do pino OSC1, aqui, o circuito interno do microcontrolador
divide o sinal de clock em quatro fases, Q1, Q2, Q3 e Q4 que não se sobrepõem. Estas quatro pulsações perfazem um ciclo
de instrução (também chamado ciclo de máquina) e durante o qual uma instrução é executada.
A execução de uma instrução, é antecedida pela extração da instrução que está na linha seguinte. O código da instrução é
extraído da memória de programa em Q1 e é escrito no registro de instrução em Q4.
A descodificação e execução dessa mesma instrução, faz-se entre as fases Q1 e Q4 seguintes. No diagrama em baixo,
podemos observar a relação entre o ciclo de instrução e o clock do oscilador (OSC1) assim como as fases Q1-Q4.
O contador de programa (Program Counter ou PC) guarda o endereço da próxima instrução a ser executada.

12
Pipe lin in g
Cada ciclo de instrução inclui as fases Q1, Q2, Q3 e Q4. A extração do código de uma instrução da memória de programa, é
feita num ciclo de instrução, enquanto que a sua descodificação e execução, são feitos no ciclo de instrução seguinte.
Contudo, devido à sobreposição – pipelining (o microcontrolador ao mesmo tempo que executa uma instrução extrai
simultaneamente da memória o código da instrução seguinte), podemos considerar que, para efeitos práticos, cada instrução
demora um ciclo de instrução a ser executada. No entanto, se a instrução provocar uma mudança no conteúdo do contador
de programa (PC), ou seja, se o PC não tiver que apontar para o endereço seguinte na memória de programa, mas sim para
outro (como no caso de saltos ou de chamadas de sub-rotinas), então deverá considerar-se que a execução desta instrução
demora dois ciclos. Isto acontece, porque a instrução vai ter que ser processada de novo, mas, desta vez, a partir do endereço
correto. O ciclo de chamada começa na fase Q1, escrevendo a instrução no registro de instrução (Instruction Register – IR).
A descodificação e execução continua nas fases Q2, Q3 e Q4 do clock.

Fluxograma das Instruções no Pipeline

TCY0 é lido da memória o código da instrução MOVLW 55h (não nos interessa a instrução que foi executada, por isso não
está representada por retângulo).
TCY1 é executada a instrução MOVLW 55h e é lida da memória a instrução MOVWF PORTB.
TCY2 é executada a instrução MOVWF PORTB e lida a instrução CALL SUB_1.
TCY3 é executada a chamada (call) de um subprograma CALL SUB_1 e é lida a instrução BSF PORTA,BIT3. Como esta
instrução não é a que nos interessa, ou seja, não é a primeira instrução do subprograma SUB_1, cuja execução é o que vem
a seguir, a leitura de uma instrução tem que ser feita de novo. Este é um bom exemplo de uma instrução a precisar de mais
que um ciclo.
TCY4 este ciclo de instrução é totalmente usado para ler a primeira instrução do subprograma no endereço SUB_1.
TCY5 é executada a primeira instrução do subprograma SUB_1 e lida a instrução seguinte.

13
Sign ifica do dos pin os
O PIC16F84 tem um total de 18 pinos. É mais freqüentemente encontrado num tipo de encapsulamento DIP18, mas,
também pode ser encontrado numa cápsula SMD de menores dimensões que a DIP. DIP é uma abreviatura para Dual In
Package (Empacotamento em duas linhas). SMD é uma abreviatura para Surface Mount Devices (Dispositivos de
Montagem em Superfície), o que sugere que os pinos não precisam de passar pelos orifícios da placa em que são inseridos,
quando se solda este tipo de componente.

Os pinos no microcontrolador PIC16F84, têm o seguinte significado:

Pino nº 1, RA2 Segundo pino do porto A. Não tem nenhuma função adicional.
Pino nº 2, RA3 Terceiro pino do porto A. Não tem nenhuma função adicional.
Pino nº 3, RA4 Quarto pino do porto A. O TOCK1 que funciona como entrada do temporizador, também utiliza este pino.
Pino nº 4, MCLR Entrada de reset e entrada da tensão de programação Vpp do microcontrolador .
Pino nº 5, Vss massa da alimentação.
Pino nº 6, RB0, bit 0 do porto B. Tem uma função adicional que é a de entrada de interrupção.
Pino nº 7, RB1 bit 1do porto B. Não tem nenhuma função adicional.
Pino nº 8, RB2 bit 2 do porto B. Não tem nenhuma função adicional.
Pino nº 9, RB3 bit 3 do porto B. Não tem nenhuma função adicional.
Pino nº 10, RB4 bit 4 do porto B. Não tem nenhuma função adicional.
Pino nº 11, RB5 bit 5 do porto B. Não tem nenhuma função adicional.
Pino nº 12, RB6 bit 6 do porto B. No modo de programa é a linha de clock
Pino nº 13, RB7 bit 7 do porto B. Linha de dados no modo de programa
Pino nº 14, Vdd Pólo positivo da tensão de alimentação.
Pino nº 15, OSC2 para ser ligado a um oscilador.
Pino nº 16, OSC1 para ser ligado a um oscilador.
Pino nº 17, RA0 bit 0 do porto A. Sem função adicional.
Pino nº 18, RA1 bit 1 do porto A. Sem função adicional.

2.1 Gerador de relógio – oscilador


O circuito do oscilador é usado para fornecer um relógio (clock), ao microcontrolador. O clock é necessário para que o
microcontrolador possa executar um programa ou as instruções de um programa.

Tipos de osciladores

O PIC16F84 pode trabalhar com quatro configurações de oscilador. Uma vez que as configurações com um oscilador de
cristal e resistência-condensador (RC) são aquelas mais freqüentemente usadas, elas são as únicas que vamos mencionar
aqui.
Quando o oscilador é de cristal, a designação da configuração é de XT, se o oscilador for uma resistência em série com um
condensador, tem a designação RC. Isto é importante, porque há necessidade de optar entre os diversos tipos de oscilador,
quando se escolhe um microcontrolador.

Oscilador XT

O oscilador de cristal está contido num invólucro de metal com dois pinos onde foi escrita a freqüência a que o cristal
oscila. Dois condensadores cerâmicos devem ligar cada um dos pinos do cristal à massa. Casos há em que cristal e
14
condensadores estão contidos no mesmo encapsulamento, é também o caso do ressonador cerâmico ao lado representado.
Este elemento tem três pinos com o pino central ligado à massa e os outros dois pinos ligados aos pinos OSC1 e OSC2 do
microcontrolador. Quando projetamos um dispositivo, a regra é colocar o oscilador tão perto quanto possível do
microcontrolador, de modo a evitar qualquer interferência nas linhas que ligam o oscilador ao microcontrolador.

Clock de um microcontrolador a partir de um cristal de Clock de um microcontrolador com um ressonador


quartzo

OSCILADOR RC

Em aplicações em que a precisão da temporização não é um fator crí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, da resistência R, capacidade C e da
temperatura de funcionamento.

O diagrama acima, mostra como um oscilador RC deve ser ligado a um PIC16F84. Com um valor para a resistência R
abaixo de 2,2 K, o oscilador pode tornar-se instável ou pode mesmo parar de oscilar. Para um valor muito grande R (1M por
exemplo), o oscilador torna-se muito sensível à unidade e ao ruído. É recomendado que o valor da resistência R esteja
compreendido entre 3K e 100K. Apesar de o oscilador poder trabalhar sem condensador externo (C = 0 pF), é conveniente,
ainda assim, usar um condensador acima de 20 pF para evitar o ruído e aumentar a estabilidade. Qualquer que seja o
oscilador que se está a utilizar, a freqüência de trabalho do microcontrolador é a do oscilador dividida por 4. A freqüência
de oscilação dividida por 4 também é fornecida no pino OSC2/CLKOUT e, pode ser usada, para testar ou sincronizar outros
circuitos lógicos pertencentes ao sistema.

Relação entre o sinal de clock e os ciclos de instrução

Ao ligar a alimentação do circuito, o oscilador começa a oscilar. Primeiro com um período de oscilação e uma amplitude
instáveis, mas, depois de algum tempo, tudo estabiliza.

15
Sinal de clock do oscilador do microcontrolador depois de ser ligada a alimentação

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 não estabiliza. O diagrama em cima, mostra uma forma
típica do sinal fornecido por um oscilador de cristal de quartzo ao microcontrolador quando se liga a alimentação.

2.2 Reset
O reset é usado para pôr o microcontrolador num estado conhecido. Na prática isto significa que às vezes o
microcontrolador pode comportar-se de um modo inadequado em determinadas condições indesejáveis. De modo a que o
seu funcionamento normal seja restabelecido, é preciso fazer o reset do microcontrolador, isto significa que todos os seus
registros vão conter valores iniciais pré-definidos, correspondentes a uma posição inicial. O reset não é usado somente
quando o microcontrolador não se comporta da maneira que nós queremos, mas, também pode ser usado, quando ocorre
uma interrupção por parte de outro dispositivo, ou quando se quer que o microcontrolador 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 de MCLR significa o sinal
de reset é ativado por nível lógico baixo), o pino MCLR tem que ser ligado através de uma resistência ao lado positivo da
alimentação. Esta resistência deve ter um valor entre 5 e 10K. Uma resistência como esta, cuja função é conservar uma
determinada linha a nível lógico alto, é chamada “resistência de pull up”.

Utilização do circuito interno de reset

O microcontrolador PIC16F84, admite várias formas de reset:

a) Reset quando se liga a alimentação, POR (Power-On Reset)


b) Reset durante o funcionamento normal, quando se põe a nível lógico baixo o pino MCLR do microcontrolador.
c) Reset durante o regime de SLEEP (dormir).
d) Reset quando o temporizador do watchdog (WDT) transborda (passa para 0 depois de atingir o valor máximo).
e) Reset quando o temporizador do watchdog (WDT) transborda estando no regime de SLEEP.

Os reset mais importantes são o a) e o b). O primeiro, ocorre sempre que é ligada a alimentação do microcontrolador e serve
para trazer todos os registros para um estado inicial. O segundo que resulta da aplicação de um valor lógico baixo ao pino
MCLR durante o funcionamento normal do microcontrolador e, é usado muitas vezes, durante o desenvolvimento de um
programa.

Durante um reset, os locais de memória da RAM (registros) não são alterados. Ou seja, os conteúdos destes registros, são
desconhecidos durante o restabelecimento da alimentação, mas mantêm-se inalterados durante qualquer outro reset. Ao
contrário dos registros normais, os SFR (registros com funções especiais) são reiniciados com um valor inicial pré-definido.
Um dos mais importantes efeitos de um reset, é introduzir no contador de programa (PC), o valor zero (0000), o que faz
com que o programa comece a ser executado a partir da primeira instrução deste.

Reset quando o valor da alimentação desce abaixo do limite permitido (Brown-out Reset).

O impulso que provoca o reset durante o estabelecimento da alimentação (power-up), é gerado pelo próprio
microcontrolador quando detecta um aumento na tensão Vdd (numa faixa entre 1,2V e 1,8V). Esse impulso perdura durante
72ms, o que, em princípio, é tempo suficiente para que o oscilador estabilize. Esse intervalo de tempo de 72ms é definido
por um temporizador interno PWRT, com um oscilador RC próprio. Enquanto PWRT estiver ativo, o microcontrolador
mantém-se no estado de reset. Contudo, quando o dispositivo está a trabalhar, pode surgir um problema não resultante de
uma queda da tensão para 0 volts, mas sim de uma queda de tensão para um valor abaixo do limite que garante o correto
funcionamento do microcontrolador. Trata-se de um fato muito provável de ocorrer na prática, especialmente em ambientes
16
industriais onde as perturbações e instabilidade da alimentação ocorrem freqüentemente. Para resolver este problema, nós
precisamos de estar certos de que o microcontrolador entra no estado de reset de cada vez que a alimentação desce abaixo
do limite aprovado.

Exemplos de quedas na alimentação abaixo do limite

Se, de acordo com as especificações elétricas, o circuito interno de reset de um microcontrolador não satisfizer as
necessidades, então, deverão ser usados componentes eletrônicos especiais, capazes de gerarem o sinal de reset desejado.
Além desta função, estes componentes, podem também cumprir o papel de vigiarem as quedas de tensão para um valor
abaixo de um nível especificado. Quando isto ocorre, aparece um zero lógico no pino MCLR, que mantém o
microcontrolador no estado de reset, enquanto a voltagem não estiver dentro dos limites que garantem um correto
funcionamento.

2.3 Unidade Central de Processamento

A unidade central de processamento (CPU) é o cérebro de um microcontrolador. Essa parte é responsável por extrair a
instrução, decodificar essa instrução e, finalmente, executá-la.

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, decodificar as instruções do programa. Quando o
programador escreve um programa, as instruções assumem um claro significado como é o caso por exemplo de MOVLW
0x20. Contudo, para que um microcontrolador possa entendê-las, esta forma escrita de uma instrução tem que ser traduzida
numa série de zeros e uns que é o ‘opcode’ (operation code ou código da operação). Esta passagem de uma palavra escrita
para a forma binária é executada por tradutores assembler (ou simplesmente assembler). O código da instrução extraído da
memória de programa, tem que ser decodificado pela unidade central de processamento (CPU). A cada uma das instruções
do repertório do microcontrolador, corresponde um conjunto de ações para a concretizar. Estas ações, podem envolver
transferências de dados de um local de memória para outro, de um local de memória para os portos, e diversos cálculos,
pelo que, se conclui que, o CPU, tem que estar ligado a todas as partes do microcontrolador. Os bus de dados e o de
endereço permitem-nos fazer isso.

17
Unidade Lógica Aritmética (ALU)

A unidade lógica aritmética (ALU – Arithmetic Logic Unit), é responsável pela execução de operações de adição, subtração,
deslocamento (para a esquerda ou para a direita dentro de um registro) e operações lógicas. O PIC16F84 contém uma
unidade lógica aritmética de 8 bits e registros de uso genérico também de 8 bits.

Unidade lógica-aritmética e como funciona

Por operando nós designamos o conteúdo sobre o qual uma operação incide. Nas instruções com dois operandos, geralmente
um operando está contido no registro de trabalho W (working register) e o outro operando ou é uma constante ou então está
contido num dos outros registros. Esses registros podem ser “Registros de Uso Genérico” (General Purpose Registers –
GPR) ou “Registros com funções especiais” (Special Function Registers – SFR). Nas instruções só com um operando, um
dos operandos é o conteúdo do registro W ou o conteúdo de um dos outros registros. Quando são executadas operações
lógicas ou aritméticas como é o caso da adição, a ALU controla o estado dos bits (que constam do registro de estado –
STATUS). Dependendo da instrução a ser executada, a ALU, pode modificar os valores bits do Carry (C), Carry de dígito
(DC) e Z (zero) no registro de estado - STATUS.

Diagrama bloco mais detalhado do microcontrolador PIC16F84

18
Re gist r o STATUS

bit 0 C (Carry) Transporte


Este bit é afetado pelas operações de adição, subtração e deslocamento. Toma o valor ‘1’ (set), quando um valor mais
pequeno é subtraído de um valor maior e toma o valor ‘0’ (reset) quando um valor maior é subtraído de um menor.
1= Ocorreu um transporte no bit mais significativo
0= Não ocorreu transporte no bit mais significativo
O bit C é afetado pelas instruções ADDWF, ADDLW, SUBLW e SUBWF.

bit 1 DC (Digit Carry) Transporte de dígito


Este bit é afetado pelas operações de adição, subtração. Ao contrário do anterior, DC assinala um transporte do bit 3 para o
bit 4 do resultado. Este bit toma o valor ‘1’, quando um valor mais pequeno é subtraído de um valor maior e toma o valor
‘0’ quando um valor maior é subtraído de um menor.
1= Ocorreu um transporte no quarto bit mais significativo
0= Não ocorreu transporte nesse bit
O bit DC é afetado pelas instruções ADDWF, ADDLW, SUBLW e SUBWF.

bit 2 Z (bit Zero) Indicação de resultado igual a zero.


Este bit toma o valor ‘1’ quando o resultado da operação lógica ou aritmética executada é igual a 0.
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 microcontrolador é alimentado e começa a trabalhar, depois de um reset normal e depois da
execução da instrução CLRWDT. A instrução SLEEP põe este bit a ‘0’ ou seja, quando o microcontrolador entra no regime
de baixo consumo / pouco trabalho. Este bit pode também ser posto a ‘1’, no caso de ocorrer um impulso no pino RB0/INT,
uma variação nos quatro bits mais significativos do porto B, ou quando é completada uma operação de escrita na DATA
EEPROM ou ainda pelo watchdog.
1 = depois de ter sido ligada a alimentação
0 = depois da execução de uma instrução SLEEP

bit 4 TO Time-out ; transbordo do Watchdog


Este bit é posto a ‘1’, depois de a alimentação ser ligada e depois da execução das instruções CLRWDT e SLEEP. O bit é
posto a ‘0’ quando o watchdog consegue chegar ao fim da sua contagem (overflow = transbordar), o que indica que
qualquer coisa não esteve bem.
1 = não ocorreu transbordo
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 significativa do endereço utilizado para endereçamento direto. Como as instruções que
endereçam diretamente a memória, dispõem somente de sete bits para este efeito, é preciso mais um bit para poder
endereçar todos os 256 registros do PIC16F84. No caso do PIC16F84, RP1, não é usado, mas pode ser necessário no caso
de outros microcontroladores PIC, de 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 da RAM interna, como oitavo bit
1 = bancos 2 e 3
0 = bancos 0 e 1 (endereços de 00h a FFh)

O registro de estado (STATUS), contém o estado da ALU (C, DC, Z), estado de RESET (TO, PD) e os bits para seleção do
banco de memória (IRP, RP1, RP0). Considerando que a seleção do banco de memória é controlada através deste registro,
ele tem que estar presente em todos os bancos. Os bancos de memória serão discutidos com mais detalhe no capítulo que
19
trata da Organização da Memória. Se o registro STATUS for o registro de destino para instruções que afetem os bits Z, DC
ou C, então não é possível escrever nestes três bits.

Registro OPTION

bits 0 a 2 PS0, PS1, PS2 (bits de seleção do divisor Prescaler)


Estes três bits definem o fator de divisão do prescaler. Aquilo que é o prescaler e o modo como o valor destes três bits
afetam o funcionamento do microcontrolador será estudado na secção referente a TMR0.

bit 3 PSA (Bit de Atribuição do Prescaler)


Bit que atribui o prescaler ao TMR0 ou ao watchdog.
1 = prescaler atribuído ao watchdog
0 = prescaler atribuído ao temporizador TMR0

bit 4 T0SE (bit de seleção de bordo ativo em TMR0)


Se for permitido aplicar impulsos em TMR0, a partir do pino RA4/TOCK1, este bit determina se os impulsos ativos são os
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 que vai ligar ao temporizador. Esta fonte pode ser o clock do microcontrolador
(freqüência de clock a dividir por 4) ou impulsos externos no pino RA4/TOCKI.
1 = impulsos externos
0 = ¼ do clock interno

bit 6 INDEDG (bit de seleção de bordo de interrupção)


Se esta interrupção estiver habilitada, é possível definir o bordo que vai activar a interrupção no pino RB0/INT.
1 = bordo ascendente
0 = bordo descendente

bit 7 RBPU (Habilitação dos pull-up nos bits do porto B)


Este bit introduz ou retira as resistências internas de pull-up do porto B.
1 = resistências de “pull-up” desligadas
0 = resistências de “pull-up” ligadas

20
2.4 Portos
Porto, é um grupo de pinos num microcontrolador que podem ser acedidos simultaneamente, e, no qual nós podemos
colocar uma combinação de zeros e uns ou ler dele o estado existente. Fisicamente, porto é um registro dentro de um
microcontrolador que está ligado por fios aos pinos do microcontrolador. Os portos representam a conexão fí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 do porto 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 do registro OPTION. Ao selecionar uma das funções, a outra é automaticamente
inibida.

Relação entre os registros TRISA e PORTO A

Todos os pinos dos portos podem ser definidos como de entrada ou de saída, de acordo com as necessidades do dispositivo
que se está a projectar. Para definir um pino como entrada ou como saída, é preciso, em primeiro lugar, escrever no registro
TRIS, a combinação apropriada de zeros e uns. Se no local apropriado de um registro TRIS for escrito o valor lógico “1”,
então o correspondente pino do porto é definido como entrada, se suceder o contrário, o pino é definido como saída. Todos
os portos, têm um registro TRIS associado. Assim, para o porto A, existe o registro TRISA no endereço 85h e, para o porto
B existe o registro TRISB, no endereço 86h.

PORTO B

O porto B tem 8 pinos associados a ele. O respectivo registro de direção de dados chama-se TRISB e tem o endereço 86h.
Ao pôr a ‘1’ um bit do registro TRISB, define-se o correspondente pino do porto como entrada e se pusermos a ‘0’ um bit
do registro TRISB, o pino correspondente vai ser uma saída. Cada pino do PORTO B possui uma pequena resistência de
‘pull-up’ (resistência que define a linha como tendo o valor lógico ‘1’). As resistências de pull-up são ativadas pondo a ‘0’ o
bit RBPU, que é o bit 7 do registro OPTION. Estas resistências de ‘pull-up’ são automaticamente desligadas quando os
pinos do porto são configurados como saídas. Quando a alimentação do microcontrolador é ligada, as resistências de pull-up
são também desativadas.
Quatro pinos do PORTO B, RB4 a RB7 podem causar uma interrupção, que ocorre quando qualquer deles varia do valor
lógico zero para valor lógico um ou o contrário. Esta forma de interrupção só pode ocorrer se estes pinos forem
configurados como entradas (se qualquer um destes 4 pinos for configurado como saída, não será gerada uma interrupção
quando há variação de estado). Esta modalidade de interrupção, acompanhada da existência de resistências de pull-up
internas, torna possível resolver mais facilmente problemas freqüentes que podemos encontrar na prática, como por
exemplo a ligação de um teclado matricial. Se as linhas de um teclado ficarem ligadas a estes pinos, sempre que se prime
uma tecla, ir-se-á provocar uma interrupção. Ao processar a interrupção, o microcontrolador terá que identificar a tecla que
a produziu. Não é recomendável utilizar o porto B, ao mesmo tempo que esta interrupção está a ser processada.

O exemplo de cima mostra como os pinos 0, 1, 2 e 3 são definidos como entradas e 4, 5, 6 e 7 como saídas.

PORTO A

O porto A (PORTA) está associado a 5 pinos. O registro de direção de dados correspondente é o TRISA, no endereço 85h.
Tal como no caso do porto B, pôr a ‘1’ um bit do registro TRISA, equivale a definir o correspondente pino do porto A,
como entrada e pôr a ‘0’ um bit do mesmo registro, equivale a definir o correspondente pino do porto A, como saída.
21
O quinto pino do porto A tem uma função dupla. Nesse pino está também situada a entrada externa do temporizador TMR0.
Cada uma destas opções é escolhida pondo a ‘1’ ou pondo a ‘0’ o bit TOCS (bit de seleção de fonte de clock de TMR0).
Conforme o valor deste bit, assim o temporizador TMR0 incrementa o seu valor por causa de um impulso do oscilador
interno ou devido a um impulso externo aplicado ao pino RA4/TOCKI.

Este exemplo mostra como os pinos 0, 1, 2, 3 e 4 são declarados como entradas e os pinos 5, 6 e 7 como pinos de saída.

2.5 Organização da memória


O PIC16F84 tem dois blocos de memória separados, um para dados e o outro para o programa. A memória EEPROM e os
registros de uso genérico (GPR) na memória RAM constituem o bloco para dados e a memória FLASH constitui o bloco de
programa.

Memória de programa

A memória de programa é implementada usando tecnologia FLASH, o que torna possível programar o microcontrolador
muitas vezes antes de este ser instalado num dispositivo, e, mesmo depois da sua instalação, podemos alterar o programa e
parâmetros contidos. O tamanho da memória de programa é de 1024 endereços de palavras de 14 bits, destes, os endereços
zero e quatro estão reservados respectivamente para o reset e para o vetor de interrupção.

Memória de dados

A memória de dados compreende memória EEPROM e memória RAM. A memória EEPROM consiste em 64 posições para
palavras de oito bits e cujos conteúdos não se perdem durante uma falha na alimentação. A memória EEPROM não faz
parte diretamente do espaço de memória mas é acedida indiretamente através dos registros EEADR e EEDATA. Como a
memória EEPROM serve usualmente para guardar parâmetros importantes (por exemplo, de uma dada temperatura em
reguladores de temperatura), existe um procedimento estrito para escrever na EEPROM que tem que ser seguido de modo a
evitar uma escrita acidental. A memória RAM para dados, ocupa um espaço no mapa de memória desde o endereço 0x0C
até 0x4F, o que corresponde a 68 localizações. Os locais da memória RAM são também chamados registros GPR (General
Purpose Registers = Registros de uso genérico). Os registros GPR podem ser acedidos sem ter em atenção o banco em que
nos encontramos de momento.

Registros SFR

Os registros que ocupam as 12 primeiras localizações nos bancos 0 e 1 são registros especiais e têm a ver com a
manipulação de certos blocos do microcontrolador. Estes registros são os SFR (Special Function Registers ou Registros de
Funções

Especiais).

22
Organização da memória no microcontrolador PIC16F84

Bancos de Memória

Além da divisão em ‘comprimento’ entre registros SFR e GPR, o mapa de memória está também dividido em ‘largura’ (ver
mapa anterior) em duas áreas chamadas ‘bancos’. A seleção de um dos bancos é feita por intermédio dos bits RP0 e RP1 do
registro STATUS.

Exemplo :
bcf STATUS, RP0

A instrução BCF “limpa” o bit RP0 (RP0 = 0) do registro STATUS e, assim, coloca-nos no banco 0.

bsf STATUS, RP0

A instrução BSF põe a um, o bit RP0 (RP0 = 1) do registro STATUS e, assim, coloca-nos no banco 1.

Normalmente, os grupos de instruções muito usados são ligados numa única unidade que pode ser facilmente invocada por
diversas vezes num programa, uma unidade desse tipo chama-se genericamente Macro e, normalmente, essa unidade é
designada por um nome especifico facilmente compreensível. Com a sua utilização, a seleção entre os dois bancos torna-se
mais clara e o próprio programa fica mais legível.

BANK0 macro
Bcf STATUS, RP0 ;Selecionar o banco 0 da memória
Endm

BANK1 macro
Bsf STATUS, RP0 ; Selecionar o banco 1 da memória
Endm

23
Os locais de memória 0Ch – 4Fh são registros de uso genérico (GPR) e são usados como memória RAM. Quando os
endereços 8Ch – CFh são acedidos, nós acedemos também às mesmas localizações do banco 0. Por outras palavras,
quando estamos a trabalhar com os registros de uso genérico, não precisamos de nos preocupar com o banco em que
nos encontramos!

Contador de Programa

O contador de programa (PC = Program Counter), é um registro de 13 bits que contém o endereço da instrução que vai ser
executada. Ao incrementar ou alterar (por exemplo no caso de saltos) o conteúdo do PC, o microcontrolador consegue
executar as todas as instruções do programa, uma após outra.

Pilha

O PIC16F84 tem uma pilha (stack) de 13 bits e 8 níveis de profundidade, o que corresponde a 8 locais de memória com 13
bits de largura. O seu papel básico é guardar o valor do contador de programa quando ocorre um salto do programa
principal para o endereço de um subprograma a ser executado. Depois de ter executado o subprograma, para que o
microcontrolador possa continuar com o programa principal a partir do ponto em que o deixou, ele tem que ir buscar à pilha
esse endereço e carregá-lo no contador de programa. Quando nos movemos de um programa para um subprograma, o
conteúdo do contador de programa é empurrado para o interior da pilha (um exemplo disto é a instrução CALL). Quando
são executadas instruções tais como RETURN, RETLW ou RETFIE no fim de um subprograma, o contador de programa é
retirado da pilha, de modo a que o programa possa continuar a partir do ponto em que a sequência foi interrompida. Estas
operações de colocar e extrair da pilha o contador de programa, são designadas por PUSH (meter na pilha) e POP (tirar da
pilha), estes dois nomes provêm de instruções com estas designações, existentes nalguns microcontroladores de maior porte.

Programação no Sistema

Para programar a memória de programa, o microcontrolador tem que entrar num modo especial de funcionamento no qual o
pino MCLR é posto a 13,5V e a voltagem da alimentação Vdd deve permanecer estável entre 4,5V e 5,5V. A memória de
programa pode ser programada em série, usando dois pinos ‘data/clock’ que devem ser previamente separados do
dispositivo em que o microcontrolador está inserido, de modo a que não possam ocorrer erros durante a programação.

Modos de endereçamento

Os locais da memória RAM podem ser acedidos direta ou indiretamente.

Endereçamento Direto

O endereçamento direto é feito através de um endereço de 9 bits. Este endereço obtém-se juntando aos sete bits do endereço
direto de uma instrução, mais dois bits (RP1 e RP0) do registro STATUS, como se mostra na figura que se segue. Qualquer
acesso aos registros especiais (SFR), pode ser um exemplo de endereçamento direto.

Bsf STATUS,
; Banco 1
RP0
movlw 0xFF ; w = 0xFF
movwf TRISA ; o endereço do registro TRISA é tirado do código da instrução movwf TRISA

24
Endereçamento Direto

Endereçamento Indireto

O endereçamento indireto, ao contrário do direto, não tira um endereço do código instrução, mas fá-lo com a ajuda do bit
IRP do registro STATUS e do registro FSR. O local endereçado é acedido através do registro INDF e coincide com o
endereço contido em FSR. Por outras palavras, qualquer instrução que use INDF como registro, na realidade acede aos
dados apontados pelo registro FSR. Vamos supor, por exemplo, que o registro de uso genérico de endereço 0Fh contém o
valor 20. Escrevendo o valor de 0Fh no registro FSR, nós vamos obter um ponteiro para o registro 0Fh e, ao ler o registro
INDF, nós iremos obter o valor 20, o que significa que lemos o conteúdo do registro 0Fh, sem o mencionar explicitamente
(mas através de FSR e INDF). Pode parecer que este tipo de endereçamento não tem quaisquer vantagens sobre o
endereçamento direto, mas existem problemas que só podem ser resolvidos de uma forma simples, através do
endereçamento indireto.

Endereçamento Indireto

Um exemplo pode ser enviar um conjunto de dados através de uma comunicação série, usando buffers e indicadores (que
serão discutidos num capítulo mais à frente, com exemplos), outro exemplo é limpar os registros da memória RAM (16
endereços neste caso) como se pode ver a seguir.

Quando o conteúdo do registro FSR é igual a zero, ler dados do registro INDF resulta no valor 0 e escrever em INDF resulta
na instrução NOP (no operation = nenhuma operação).

2.6 Interrupções

As interrupções são um mecanismo que o microcontrolador possui e que torna possível responder a alguns acontecimentos
no momento em que eles ocorrem, qualquer que seja a tarefa que o microcontrolador esteja a executar no momento. Esta é
uma parte muito importante, porque fornece a ligação entre um microcontrolador e o mundo real que nos rodeia.
Geralmente, cada interrupção muda a direção de execução do programa, suspendendo a sua execução, enquanto o
microcontrolador corre um subprograma que é a rotina de atendimento de interrupção. Depois de este subprograma ter sido
executado, o microcontrolador continua com o programa principal, a partir do local em que o tinha abandonado.

25
Uma das possíveis fontes de interrupção e como afeta o programa principal

O registro que controla as interrupções é chamado INTCON e tem o endereço 0Bh. O papel do INTCON é permitir ou
impedir as interrupções e, mesmo no caso de elas não serem permitidas, ele toma nota de pedidos específicos, alterando o
nível lógico de alguns dos seus bits.

Registro INTCON

bit 0 RBIF (flag que indica variação no porto B) Bit que informa que houve mudança nos níveis lógicos nos pinos 4, 5, 6 e
7 do porto B.
1= pelo menos um destes pinos mudou de nível lógico
0= não ocorreu nenhuma variação nestes pinos

bit 1 INTF (flag de interrupção externa INT) Ocorrência de uma interrupção externa
1= ocorreu uma interrupção externa
0= não ocorreu uma interrupção externa
Se um impulso ascendente ou descendente for detectado no pino RB0/INT, o bit INTF é posto a ‘1’ (o tipo de sensibilidade,
ascendente ou descendente é definida através do bit INTEDG do registro OPTION). O subprograma de atendimento desta
interrupção, deve repor este bit a ‘0’, afim de que a próxima interrupção possa ser detectada.

bit 2 TOIF (Flag de interrupção por transbordo de TMR0) O contador TMR0, transbordou.
1= o contador mudou a contagem de FFh para 00h
0= o contador não transbordou
Para que esta interrupção seja detectada, o programa deve pôr este bit a ‘0’

bit 3 RBIE (bit de habilitação de interrupção por variação no porto B) Permite que a interrupção por variação dos níveis
lógicos nos pinos 4, 5, 6 e 7 do porto B, ocorra.
1= habilita a interrupção por variação dos níveis lógicos
0= inibe a interrupção por variação dos níveis lógicos
A interrupção só pode ocorrer se RBIE e RBIF estiverem simultaneamente a ‘1’ lógico.

bit 4 INTE (bit de habilitação da interrupção externa INT) bit que permite uma interrupção externa no bit RB0/INT.
1= interrupção externa habilitada
0= interrupção externa impedida
A interrupção só pode ocorrer se INTE e INTF estiverem simultaneamente a ‘1’ lógico.

bit 5 TOIE (bit de habilitação de interrupção por transbordo de TMR0) bit que autoriza a interrupção por transbordo do
contador TMR0.
1= interrupção autorizada
0= interrupção impedida
A interrupção só pode ocorrer se TOIE e TOIF estiverem simultaneamente a ‘1’ lógico.
26
bit 6 EEIE (bit de habilitação de interrupção por escrita completa, na EEPROM) bit que habilita uma interrupção quando
uma operação de escrita na EEPROM termina.
1= interrupção habilitada
0= interrupção inibida
Se EEIE e EEIF (que pertence ao registro EECON1) estiverem simultaneamente a ‘1’, a interrupção pode ocorrer.

bit 7 GIE (bit de habilitação global de interrupção) bit que permite ou impede todas as interrupções
1= todas as interrupções são permitidas
0= todas as interrupções impedidas

O PIC16F84 possui quatro fontes de interrupção:

1. Fim de escrita na EEPROM


2. Interrupção em TMR0 causada por transbordo do temporizador
3. Interrupção por alteração nos pinos RB4, RB5, RB6 e RB7 do porto B.
4. Interrupção externa no pino RB0/INT do microcontrolador

De um modo geral, cada fonte de interrupção tem dois bits associados. Um habilita a interrupção e o outro assinala quando a
interrupção ocorre. Existe um bit comum a todas as interrupções chamado GIE que pode ser usado para impedir ou habilitar
todas as interrupções, simultaneamente. Este bit é muito útil quando se está a escrever um programa porque permite que
todas as interrupções sejam impedidas durante um período de tempo, de tal maneira que a execução de uma parte crítica do
programa não possa ser interrompida. Quando a instrução que faz GIE= 0 é executada (GIE= 0 impede todas as
interrupções), todas os pedidos de interrupção pendentes, serão ignorados.

Esquema das interrupções no microcontrolador PIC16F84

As interrupções que estão pendentes e que são ignoradas, são processadas quando o bit GIE é posto a ‘1’ (GIE= 1, todas as
interrupções permitidas). Quando a interrupção é atendida, o bit GIE é posto a ‘0’, de tal modo que, quaisquer interrupções
adicionais sejam inibidas, o endereço de retorno é guardado na pilha e, no contador de programa, é escrito 0004h – somente
depois disto, é que a resposta a uma interrupção começa!
Depois de a interrupção ser processada, o bit que por ter sido posto a ‘1’ permitiu a interrupção, deve agora ser reposto a
‘0’, senão, a rotina de interrupção irá ser automaticamente processada novamente, mal se efetue o regresso ao programa
principal.

Guardando os conteúdos dos registros importantes

A única coisa que é guardada na pilha durante uma interrupção é o valor de retorno do contador de programa (por valor de
retorno do contador de programa entende-se o endereço da instrução que estava para ser executada, mas que não foi, por
causa de ter ocorrido a interrupção). Guardar apenas o valor do contador de programa não é, muitas vezes, suficiente.
Alguns registros que já foram usados no programa principal, podem também vir a ser usados na rotina de interrupção. Se
nós não salvaguardamos os seus valores, quando acontece o regresso da sub-rotina para o programa principal os conteúdos
dos registros podem ser inteiramente diferentes, o que causaria um erro no programa. Um exemplo para este caso é o
conteúdo do registro de trabalho W (work register). Se supormos que o programa principal estava a usar o registro de
trabalho W nalgumas das suas operações e se ele contiver algum valor que seja importante para a instrução seguinte, então a
interrupção que ocorre antes desta instrução vai alterar o valor do registro de trabalho W, indo influenciar diretamente o
programa principal.

O procedimento para a gravação de registros importantes antes de ir para a sub-rotina de interrupção, designa-se por
‘PUSH’, enquanto que o procedimento que recupera esses valores, é chamado POP. PUSH e POP são instruções
27
provenientes de outros microcontroladores (da Intel), agora esses nomes são aceites para designar estes dois processos de
salvaguarda e recuperação de dados. Como o PIC16F84 não possui instruções comparáveis, elas têm que ser programadas.

Uma das possíveis causas de erros é não salvaguardar dados antes de executar um subprograma de interrupção

Devido à sua simplicidade e uso freqüente, estas partes do programa podem ser implementadas com macros. O conceito de
Macro é explicado em “Programação em linguagem Assembly”. No exemplo que se segue, os conteúdos de W e do registro
STATUS são guardados nas variáveis W_TEMP e STATUS_TEMP antes de correr a rotina de interrupção. No início da
rotina PUSH, nós precisamos de verificar qual o banco que está a ser selecionado porque W_TEMP e STATUS_TEMP
estão situados no banco 0. Para troca de dados entre estes dois registros, é usada a instrução SWAPF em vez de MOVF, pois
a primeira não afeta os bits do registro STATUS.

Exemplo é um programa assembler com os seguintes passos:

1. Verificar em que banco nos encontramos


2. Guardar o registro W qualquer que seja o banco em que nos encontramos
3. Guardar o registro STATUS no banco 0.
4. Executar a rotina de serviço de interrupção ISR (Interrupt Service Routine)
5. Recuperação do registro STATUS
6. Restaurar o valor do registro W

Se existirem mais variáveis ou registros que necessitem de ser salvaguardados, então, precisamos de os guardar depois de
guardar o registro STATUS (passo 3) e recuperá-los depois de restaurar o registro STATUS (passo 5).

28
A mesma operação pode ser realizada usando macros, desta maneira obtemos um programa mais legível. Os macros que já
estão definidos podem ser usados para escrever novos macros. Os macros BANK1 e BANK0 que são explicados no capítulo
“Organização da memória” são usados nos macros ‘push’ e ‘pop’.

Interrupção externa no pino RB0/INT do microcontrolador

A interrupção externa no pino RB0/ INT é desencadeada por um impulso ascendente (se o bit INTEDG = 1 no registro
OPTION<6>), ou por um impulso descendente (se INTEDG = 0). Quando o sinal correto surge no pino INT, o bit INTF do
registro INTCON é posto a ‘1’. O bit INTF (INTCON<1>) tem que ser reposto a ‘0’ na rotina de interrupção, afim de que a
interrupção não possa voltar a ocorrer de novo, quando do regresso ao programa principal. Esta é uma parte importante do
programa e que o programador não pode esquecer, caso contrário o programa irá constantemente saltar para a rotina de
interrupção. A interrupção pode ser inibida, pondo a ‘0’ o bit de controle INTE (INTCON<4>).

Interrupção devido ao transbordar (overflow) do contador TMR0

O transbordar do contador TMR0 (passagem de FFh para 00h) vai pôr a ‘1’ o bit TOIF (INTCON<2>), Esta é uma
interrupção muito importante, uma vez que, muitos problemas da vida real podem ser resolvidos utilizando esta interrupção.
Um exemplo é o da medição de tempo. Se soubermos de quanto tempo o contador precisa para completar um ciclo de 00h a
FFh, então, o número de interrupções multiplicado por esse intervalo de tempo, dá-nos o tempo total decorrido. Na rotina de
interrupção uma variável guardada na memória RAM vai sendo incrementada, o valor dessa variável multiplicado pelo
tempo que o contador precisa para um ciclo completo de contagem, vai dar o tempo gasto. Esta interrupção pode ser
habilitada ou inibida, pondo a ‘1’ ou a ‘0’ o bit TOIE (INTCON<5>).

Interrupção por variação nos pinos 4, 5, 6 e 7 do porto B

Uma variação em 4 bits de entrada do Porto B (bits 4 a 7), põe a ‘1’ o bit RBIF (INTCON<0>). A interrupção ocorre,
portanto, quando os níveis lógicos em RB7, RB6, RB5 e RB4 do porto B, mudam do valor lógico ‘1’ para o valor lógico ‘0’
ou vice-versa. Para que estes pinos detectem as variações, eles devem ser definidos como entradas. Se qualquer deles for
definido como saída, nenhuma interrupção será gerada quando surgir uma variação do nível lógico. Se estes pinos forem
definidos como entradas, o seu valor atual é comparado com o valor anterior, que foi guardado quando se fez a leitura
anterior do porto B. Esta interrupção pode ser habilitada/inibida pondo a ‘1’ ou a ‘0’, o bit RBIE do registro INTCON.

Interrupção por fim de escrita na EEPROM

Esta interrupção é apenas de natureza prática. Como escrever num endereço da EEPROM leva cerca de 10ms (o que
representa muito tempo quando se fala de um microcontrolador), não é recomendável que se deixe o microcontrolador um
grande intervalo de tempo sem fazer nada, à espera do fim da operação da escrita. Assim, dispomos de um mecanismo de
interrupção que permite ao microcontrolador continuar a executar o programa principal, enquanto, em simultâneo, procede à
escrita na EEPROM. Quando esta operação de escrita se completa, uma interrupção informa o microcontrolador deste fato.
O bit EEIF, através do qual esta informação é dada, pertence ao registro EECON1. A ocorrência desta interrupção pode ser
impedida, pondo a ‘0’ o bit EEIE do registro INTCON.

Iniciação da interrupção

Para que num microcontrolador se possa usar um mecanismo de interrupção, é preciso proceder a algumas tarefas
preliminares. Estes procedimentos são designados resumidamente por “iniciação”. Na iniciação, nós estabelecemos a que
interrupções deve o microcontrolador responder e as que deve ignorar. Se não pusermos a ‘1’ o bit que permite uma certa
interrupção, o programa vai ignorar a correspondente sub-rotina de interrupção. Por este meio, nós podemos controlar a

29
ocorrência das interrupções, o que é muito útil.

O exemplo de cima, mostra a iniciação da interrupção externa no pino RB0 de um microcontrolador. No sítio em que vemos
‘1’, isso significa que essa interrupção está habilitada. A ocorrência de outras interrupções não é permitida, e todas as
interrupções em conjunto estão mascaradas até que o bit GIE seja posto a ‘1’.

O exemplo que se segue, ilustra uma maneira típica de lidar com as interrupções. O PIC16F84 tem somente um endereço
para a rotina de interrupção. Isto significa que, primeiro, é necessário identificar qual a origem da interrupção (se mais que
uma fonte de interrupção estiver habilitada), e a seguir deve executar-se apenas a parte da sub-rotina que se refere à
interrupção em causa.

O regresso de uma rotina de interrupção pode efetuar-se com as instruções RETURN, RETLW e RETFIE.
Recomenda-se que seja usada a instrução RETFIE porque, essa instrução é a única que automaticamente põe a ‘1’ o
bit GIE, permitindo assim que novas interrupções possam ocorrer.

30
2.7 Temporizador TMR0

Os temporizadores são normalmente as partes mais complicadas de um microcontrolador, assim, é necessário gastar mais
tempo a explicá-los. Servindo-nos deles, é possível relacionar uma dimensão real que é o tempo, com uma variável que
representa o estado de um temporizador dentro de um microcontrolador. Físicamente, o temporizador é um registro cujo
valor está continuamente a ser incrementado até 255, chegado a este número, ele começa outra vez de novo: 0, 1, 2, 3, 4,
...,255, 0,1, 2, 3,..., etc.

Relação entre o temporizador TMR0 e o prescaler

O incremento do temporizador é feito em simultâneo com tudo o que o microcontrolador faz. Compete ao programador
arranjar maneira de tirar partido desta característica. Uma das maneiras é incrementar uma variável sempre que o
microcontrolador transvaza (passa de 255 para 0). Se soubermos de quanto tempo um temporizador precisa para perfazer
uma contagem completa (de 0 a 255), então, se multiplicarmos o valor da variável por esse tempo, nós obteremos o tempo
total decorrido.

O PIC16F84, possui um temporizador de 8 bits. O número de bits determina a quantidade de valores diferentes que a
contagem pode assumir, antes de voltar novamente para zero. No caso de um temporizador de 8 bits esse valor é 256. Um
esquema simplificado da relação entre um temporizador e um prescaler está representado no diagrama anterior. Prescaler é a
designação para a parte do microcontrolador que divide a freqüência de oscilação do clock antes que os respectivos
impulsos possam incrementar o temporizador. O número pelo qual a freqüência de clock é dividida, está definido nos três
primeiros bits do registro OPTION. O maior divisor possível é 256. Neste caso, significa que só após 256 impulsos de clock
é que o conteúdo do temporizador é incrementado de uma unidade. Isto permite-nos medir grandes intervalos de tempo.

31
Diagrama temporal de uma interrupção causada pelo temporizador TMR0

Quando a contagem ultrapassa 255, o temporizador volta de novo a zero e começa um novo ciclo de contagem até 255.
Sempre que ocorre uma transição de 255 para 0, o bit TOIF do registro INTCON é posto a '1'. Se as interrupções estiverem
habilitadas, é possível tirar partido das interrupções geradas e da rotina de serviço de interrupção. Cabe ao programador
voltar a pôr a '0' o bit TOIF na rotina de interrupção, para que uma nova interrupção possa ser detectada. Além do oscilador
de clock do microcontrolador, o conteúdo do temporizador pode também ser incrementado através de um clock externo
ligado ao pino RA4/TOCKI. A escolha entre uma destas opções é feita no bit TOCS, pertencente ao registro OPTION. Se
for selecionado o clock externo, é possível definir o bordo ativo do sinal (ascendente ou descendente), que vai incrementar o
valor do temporizador.

Utilização do temporizador TMR0 na determinação do número de rotações completas do eixo de um motor

Na prática, um exemplo típico que é resolvido através de um clock externo e um temporizador, é a contagem do número de
rotações completas do eixo de uma máquina, como por exemplo um enrolador de espiras para transformadores. Vamos
considerar que o ‘rotor’ do motor do enrolador, contém quatro pólos ou saliências. Vamos colocar o sensor indutivo à
distância de 5mm do topo da saliência. O sensor indutivo irá gerar um impulso descendente sempre que a saliência se
encontre alinhada com a cabeça do sensor. Cada sinal vai representar um quarto de uma rotação completa e, a soma de todas
as rotações completas, ficará registado no temporizador TMR0. O programa pode ler facilmente estes dados do
temporizador através do bus de dados.

O exemplo seguinte mostra como iniciar o temporizador para contar os impulsos descendentes provenientes de uma fonte de
clock externa com um prescaler 1:4.

32
O mesmo exemplo pode ser implementado através de uma interrupção do modo seguinte:

O prescaler tanto pode ser atribuído ao temporizador TMR0, como ao watchdog. O watchdog é um mecanismo que o
microcontrolador usa para se defender contra "estouros" do programa. Como qualquer circuito eléctrico, também os
microcontroladores podem ter uma falha ou algum percalço no seu funcionamento. Infelizmente, o microcontrolador
também pode ter problemas com o seu programa. Quando isto acontece, o microcontrolador pára de trabalhar e mantém-se
nesse estado até que alguém faça o reset. Por causa disto, foi introduzido o mecanismo de watchdog (cão de guarda). Depois
de um certo período de tempo, o watchdog faz o reset do microcontrolador (o que realmente acontece, é que o
microcontrolador executa o reset de si próprio). O watchdog trabalha na base de um princípio simples: se o seu
temporizador transbordar, é feito o reset do microcontrolador e este começa a executar de novo o programa a partir do
princípio. Deste modo, o reset poderá ocorrer tanto no caso de funcionamento correto como no caso de funcionamento
incorreto. O próximo passo é evitar o reset no caso de funcionamento correto, isso é feito escrevendo zero no registro WDT
(instrução CLRWDT) sempre que este está próximo de transbordar. Assim, o programa irá evitar um reset enquanto está a
funcionar correctamente. Se ocorrer o "estouro" do programa, este zero não será escrito, haverá transbordo do temporizador
WDT e irá ocorrer um reset que vai fazer com que o microcontrolador comece de novo a trabalhar correctamente.

O prescaler pode ser atribuído ao temporizador TMR0, ou ao temporizador do watchdog, isso é feito através do bit PSA no
registro OPTION. Fazendo o bit PSA igual a '0', o prescaler é atribuído ao temporizador TMR0. Quando o prescaler é
atribuído ao temporizador TMR0, todas as instruções de escrita no registro TMR0 (CLRF TMR0, MOVWF TMR0, BSF
TMR0,...) vão limpar o prescaler. Quando o prescaler é atribuído ao temporizador do watchdog, somente a instrução
CLRWDT irá limpar o prescaler e o temporizador do watchdog ao mesmo tempo. A mudança do prescaler está
completamente sob o controle do programador e pode ser executada enquanto o programa está a correr.

Existe apenas um prescaler com o seu temporizador. Dependendo das necessidades, pode ser atribuído ao
temporizador TMR0 ou ao watchdog, mas nunca aos dois em simultâneo.

33
Registro de Controle OPTION

bit 0:2 PS0, PS1, PS2 (bits de seleção do divisor prescaler)


O prescaler e como estes bits afetam o funcionamento do microcontrolador, são abordados na secção que trata de TMR0.

bit 3 PSA (bit de Atribuição do Prescaler)


Bit que atribui o prescaler ou ao temporizador TMR0 ou ao temporizador do watchdog
1 = o prescaler está atribuído ao temporizador do watchdog.
0 = o prescaler está atribuído ao temporizador TMR0.

bit 4 T0SE (seleção de bordo ativo em TMR0)


Se o temporizador estiver configurado para contar impulsos externos aplicados ao pino RA4/T0CKI, este bit vai determinar
quando a contagem irá incidir sobre os impulsos ascendentes ou descendentes do sinal.
1 = bordo descendente
0 = bordo ascendente

bit 5 T0CS (bit de seleção de fonte de clock para TMR0)


Este pino habilita o contador/temporizador TMR0 a incrementar o seu valor ou com os impulsos do oscilador interno, isto é,
a 1/4 das oscilações do clock do oscilador, ou através de impulsos externos aplicados ao pino

RA4/T0CKI.
1 = impulsos externos
0 = 1/4 do clock interno

bit 6 INTEDG (bit de seleção do bordo ativo da interrupção)


Se a ocorrência de interrupções estiver habilitada, este bit vai determinar qual o bordo em que a interrupção no pino
RB0/INT vai ocorrer.
1 = bordo ascendente
0 = bordo descendente

bit 7 RBPU (Bit de habilitação dos pull-up no porto B)


Este bit introduz ou retira as resistências de pull-up internas do porto B.
1 = resistências de 'pull-up' inseridas
0 = resistências de 'pull-up' retiradas

2.8 Memória de dados EEPROM


O PIC16F84 tem 64 bytes de localizações de memória EEPROM, correspondentes aos endereços de 00h a 63h e onde
podemos ler e escrever. A característica mais importante desta memória é de não perder o seu conteúdo quando a
alimentação é desligada. Na prática, isso significa que o que lá foi escrito permanece no microcontrolador, mesmo quando a
alimentação é desligada. Sem alimentação, estes dados permanecem no microcontrolador durante mais de 40 anos

34
(especificações do fabricante do microcontrolador PIC16F84), além disso, esta memória suporta até 10000 operações de
escrita.

Na prática, a memória EEPROM é usada para guardar dados importantes ou alguns parâmetros de processamento.
Um parâmetro deste tipo, é uma dada temperatura, atribuída quando ajustamos um regulador de temperatura para um
processo. Se esse valor se perder, seria necessário reintroduzi-lo sempre que houvesse uma falha na alimentação. Como isto
é impraticável (e mesmo perigoso), os fabricantes de microcontroladores começaram a instalar nestes uma pequena
quantidade de memória EEPROM.

A memória EEPROM é colocada num espaço de memória especial e pode ser acedida através de registros especiais. Estes
registros são:

• EEDATA no endereço 08h, que contém o dado lido ou aquele que se quer escrever.
• EEADR no endereço 09h, que contém o endereço do local da EEPROM que vai ser acedido
• EECON1 no endereço 88h, que contém os bits de controle.
• EECON2 no endereço 89h. Este registro não existe fisicamente e serve para proteger a EEPROM de uma escrita
acidental.

O registro EECON1 ocupa o endereço 88h e é um registro de controle com cinco bits implementados.
Os bits 5, 6 e 7 não são usados e, se forem lidos, são sempre iguais a zero.
Os bits do registro EECON1, devem ser interpretados do modo que se segue.

Registro EECON1

bit 0 RD (bit de controle de leitura)


Ao pôr este bit a '1', tem início a transferência do dado do endereço definido em EEADR para o registro EEDATA. Como o
tempo não é essencial, tanto na leitura como na escrita, o dado de EEDATA pode já ser usado na instrução seguinte.
1 = inicia a leitura
0 = não inicia a leitura

bit 1 WR (bit de controle de escrita)


Pôr este bit a '1' faz iniciar-se a escrita do dado a partir do registro EEDATA para o endereço especificado no registro
EEADR.
1 = inicia a escrita
0 = não inicia a escrita

bit 2 WREN (bit de habilitação de escrita na EEPROM). Permite a escrita na EEPROM.


Se este bit não estiver a um, o microcontrolador não permite a escrita na EEPROM.
1 = a escrita é permitida
0 = não se pode escrever

bit 3 WRERR ( Erro de escrita na EEPROM). Erro durante a escrita na EEPROM


Este bit é posto a '1' só em casos em que a escrita na EEPROM tenha sido interrompida por um sinal de reset ou por um
transbordo no temporizador do watchdog (no caso de este estar ativo).
1 = ocorreu um erro
0 = não houve erros

bit 4 EEIF (bit de interrupção por operação de escrita na EEPROM completa) Bit usado para informar que a escrita do
dadoo na EEPROM, terminou.
Quando a escrita tiver terminado, este bit é automaticamente posto a '1'. O programador tem que repor a '0' o bit EEIF no
seu programa, para que possa detectar o fim de uma nova operação de escrita.
1 = escrita terminada
0 = a escrita ainda não terminou ou não começou.

Lendo a Memória EEPROM


35
Pondo a ‘1’ o bit RD inicia-se a transferência do dado do endereço guardado no registro EEADR para o registro EEDATA.
Como para ler os dados não é preciso tanto tempo como a escrevê-los, os dados extraídos do registro EEDATA podem já
ser usados na instrução seguinte.

Uma porção de um programa que leia um dado da EEPROM, pode ser semelhante ao seguinte:

Depois da última instrução do programa, o conteúdo do endereço 0 da EEPROM pode ser encontrado no registro de
trabalho w.

Escrevendo na Memória EEPROM

Para escrever dados num local da EEPROM, o programador tem primeiro que endereçar o registro EEADR e introduzir a
palavra de dados no registro EEDATA. A seguir, deve colocar-se o bit WR a ‘1’, o que faz desencadear o processo. O bit
WR deverá ser posto a ‘0’ e o bit EEIF será posto a ‘1’ a seguir à operação de escrita, o que pode ser usado no
processamento de interrupções. Os valores 55h e AAh são as primeira e segunda chaves que tornam impossível que ocorra
uma escrita acidental na EEPROM. Estes dois valores são escritos em EECON2 que serve apenas para isto, ou seja, para
receber estes dois valores e assim prevenir contra uma escrita acidental na memória EEPROM. As linhas do programa
marcadas como 1, 2, 3 e 4 têm que ser executadas por esta ordem em intervalos de tempo certos. Portanto, é muito
importante desativar as interrupções que possam interferir com a temporização necessária para executar estas instruções.
Depois da operação de escrita, as interrupções podem, finalmente, ser de novo habilitadas.

Exemplo da porção de programa que escreve a palavra 0xEE no primeiro endereço da memória EEPROM:

Recomenda-se que WREN esteja sempre inativo, exceto quando se está a escrever uma palavra de dados na
EEPROM, deste modo, a possibilidade de uma escrita acidental é mínima.
Todas as operações de escrita na EEPROM ‘limpam’ automaticamente o local de memória, antes de escrever de novo
nele !

Con j u n t o de I n st r u çõe s

Conj unt o de I nst ruções da Fam ília PI C16Cxx de Microcont roladores

O conjunto completo compreende 35 instruções e mostra-se na tabela que se segue. Uma razão para
este pequeno número de instruções resulta principalmente do fato de estarmos a falar de um

36
microcontrolador RISC cujas instruções foram otimizadas tendo em vista a rapidez de funcionamento,
simplicidade de arquitetura e compacidade de código. O único inconveniente, é que o programador tem
que dominar a técnica “desconfortável” de fazer o programa com apenas 35 instruções.

Transferência de dados

A t ransferência de dados num m icrocont rolador, ocorre ent re o regist ro de t rabalho ( W) e um


regist ro ‘f’ que represent a um qualquer local de m em ória na RAM int erna ( quer se t rat e de um
regist ro especial ou de um regist ro de uso genérico) .

As prim eiras t rês inst ruções ( observe a t abela seguint e) referem - se à escrit a de um a const ant e no
regist ro W ( MOVLW é um a abreviat ura para MOVa Lit eral para W) , à cópia de um dado do regist ro
W na RAM e à cópia de um dado de um regist ro da RAM no regist ro W ( ou nele próprio, caso em
que apenas a flag do zero é afet ada) . A inst rução CLRF escreve a const ant e 0 no regist ro ‘f’ e
CLRW escreve a const ant e 0 no regist ro W. A inst rução SWAPF t roca o nibble ( conj unt o de 4 bit s)
m ais significat ivo com o nibble m enos significat ivo de um regist ro, passando o prim eiro a ser o
m enos significat ivo e o out ro o m ais significat ivo do regist ro.

Lógicas e arit m ét icas

De t odas as operações arit m ét icas possíveis, os m icrocont roladores PI C, t al com o a grande


m aioria dos out ros m icrocont roladores, apenas suport am a subt ração e a adição. Os bit s ou flags
C, DC e Z, são afet ados conform e o result ado da adição ou da subt ração, com um a única exceção:
um a vez que a subt ração é execut ada com o um a adição com um núm ero negat ivo, a flag C
( Carry) , com port a- se inversam ent e no que diz respeit o à subt ração. Por out ras palavras, é post a
a ‘1’ se a operação é possível e post a a ‘0’ se um núm ero m aior t iver que ser subt raído de out ro
m ais pequeno.

A lógica dent ro do PI C t em a capacidade de execut ar as operações AND, OR, EX- OR, com plem ent o
( COMF) e rot ações ( RLF e RRF) .
Est as últ im as inst ruções, rodam o cont eúdo do regist ro at ravés desse regist ro e da flag C de um a
casa para a esquerda ( na direção do bit 7) , ou para a direit a ( na direção do bit 0) . O bit que sai
do regist ro é escrit o na flag C e o cont eúdo ant erior dest a flag, é escrit o no bit sit uado do lado
opost o no regist ro.

Operações sobre bit s

As inst ruções BCF e BSF põem a ‘0’ ou a ‘1’ qualquer bit de qualquer sít io da m em ória. Apesar de
parecer um a operação sim ples, ela é execut ada do seguint e m odo, o CPU prim eiro lê o byt e
com plet o, alt era o valor de um bit e, a seguir, escreve o byt e com plet o no m esm o sít io.

Direção de execução de um program a

As inst ruções GOTO, CALL e RETURN são execut adas do m esm o m odo que em t odos os out ros
m icrocont roladores, a diferença é que a pilha é independent e da RAM int erna e é lim it ada a oit o
níveis. A inst rução ‘RETLW k’ é idênt ica à inst rução RETURN, excet o que, ao regressar de um
subprogram a, é escrit a no regist ro W um a const ant e definida pelo operando da inst rução. Est a
inst rução, perm it e- nos im plem ent ar facilm ent e list agens ( t am bém cham adas t abelas de lookup) .
A m aior part e das vezes, usam o- las det erm inando a posição do dado na nossa t abela
adicionando- a ao endereço em que a t abela com eça e, ent ão, é lido o dado nesse local ( que est á
sit uado norm alm ent e na m em ória de program a) .

37
A t abela pode apresent ar- se com o um subprogram a que consist e num a série de inst ruções
‘RETLW k’ onde as const ant es ‘k’, são m em bros da t abela.

Nós escrevem os a posição de um m em bro da nossa t abela no regist ro W e, usando a inst rução
CALL, nós cham am os o subprogram a que cont ém a t abela. A prim eira linha do subprogram a
‘ADDWF PCL, f’, adiciona a posição na t abela e que est á escrit a em W, ao endereço do início da
t abela e que est á no regist ro PCL, assim , nós obt em os o endereço real do dado da t abela na
m em ória de program a. Quando regressam os do subprogram a, nós vam os t er no regist ro W o
cont eúdo do m em bro da t abela endereçado. No exem plo ant erior, a const ant e ‘k2’ est ará no
regist ro W, após o ret orno do subprogram a.

RETFI E ( RETurn From I nt errupt – I nt errupt Enable ou regresso da rot ina de int errupção com as
int errupções habilit adas) é um regresso da rot ina de int errupção e difere de RETURN apenas em
que, aut om at icam ent e, põe a ‘1’ o bit GI E ( habilit ação global das int errupções) . Quando a
int errupção com eça, est e bit é aut om at icam ent e repost o a ‘0’. Tam bém quando a int errupção t em
início, som ent e o valor do cont ador de program a é post o no cim o da pilha. Não é fornecida um a
capacidade aut om át ica de arm azenam ent o do regist ro de est ado.

Os salt os condicionais est ão sint et izados em duas inst ruções: BTFSC e BTFSS. Consoant e o est ado
lógico do bit do regist ro ‘f’ que est á a ser t est ado, a inst rução seguint e no program a é ou não
execut ada.

Pe r íodo de e x e cu çã o da in st r u çã o
Todas as inst ruções são execut adas num único ciclo, excet o as inst ruções de ram ificação
condicional se a condição for verdadeira, ou se o cont eúdo do cont ador de program a for alt erado
pela inst rução. Nest es casos, a execução requer dois ciclos de inst rução e o segundo ciclo é
execut ado com o sendo um NOP ( Nenhum a Operação) . Quat ro oscilações de clock perfazem um
ciclo de inst rução. Se est iverm os a usar um oscilador com 4MHz de freqüência, o t em po norm al de
execução de um a inst rução será de 1µs e, no caso de um a ram ificação condicional de 2µs.

List agem das palavras

f qualquer local de m em ória num m icrocont rolador


W regist ro de t rabalho
b posição de bit no regist ro ‘f’
d regist ro de dest ino
label grupo de oit o caract eres que m arca o início de um a part e do program a ( rót ulo)
TOS cim o da pilha
[ ] opcional< > grupo de bit s num regist ro

38
* 1 Se o port o de ent rada/ saída for o operando origem , é lido o est ado dos pinos do
m icrocont rolador.
* 2 Se est a inst rução for execut ada no regist ro TMR0 e se d= 1, o prescaler at ribuído a esse
t em porizador é aut om at icam ent e lim po.
* 3 Se o PC for m odificado ou se result ado do t est e for verdadeiro, a inst rução é execut ada em
dois ciclos.

Pr ogr a m a çã o e m Lin gu a ge m Asse m bly

I n t r odu çã o
A capacidade de com unicar é da m aior im port ância nest a área. Cont udo, isso só é possível se
am bas as part es usarem a m esm a linguagem , ou sej a, se seguirem as m esm as regras para
com unicarem . I st o m esm o se aplica à com unicação ent re os m icrocont roladores e o hom em . A
linguagem que o m icrocont rolador e o hom em usam para com unicar ent re si é designada por
“ linguagem assem bly” . O próprio t ít ulo não t em um significado profundo, t rat a- se de apenas um
nom e com o por exem plo inglês ou francês. Mais precisam ent e, “ linguagem assem bly” é apenas
um a solução t ransit ória. Os program as escrit os em linguagem assem bly devem ser t raduzidos
para um a “ linguagem de zeros e uns” de m odo a que um m icrocont rolador a possa receber.
“ Linguagem assem bly” e “ assem bler” são coisas diferent es. A prim eira, represent a um conj unt o
de regras usadas para escrever um program a para um m icrocont rolador e a out ra, é um
program a que corre num com put ador pessoal que t raduz a linguagem assem bly para um a

39
linguagem de zeros e uns. Um program a escrit o em “ zeros” e “ uns” diz- se que est á escrit o em
“ linguagem m áquina” .

O pr oce sso de com un ica çã o e nt r e o hom e m e o m icr ocon t r ola dor

Fisicam ent e, “ Pr ogr a m a ” represent a um ficheiro num disco de com put ador ( ou na m em ória se
est iverm os a ler de um m icrocont rolador) e é escrit o de acordo com as regras do assem bly ou
qualquer out ra linguagem de program ação de m icrocont roladores. O hom em pode ent ender a
linguagem assem bly j á que ela é const it uída por sím bolos alfabét icos e palavras. Ao escrever um
program a, cert as regras devem ser seguidas para alcançar o efeit o desej ado. Um Tr a du t or
int erpret a cada inst rução escrit a em linguagem assem bly com o um a série de zeros e uns com
significado para a lógica int erna do m icrocont rolador.
Considerem os, por exem plo, a inst rução “ RETURN” que um m icrocont rolador ut iliza para regressar
de um subprogram a.
Quando o assem bler a t raduz, nós obt em os um a série de uns e zeros correspondent es a 14 bit s
que o m icrocont rolador sabe com o int erpret ar.

Ex e m plo: RETURN 00 0000 0000 1000

Analogam ent e ao exem plo ant erior, cada inst rução assem bly é int erpret ada na série de zeros e
uns correspondent e.
O result ado dest a t radução da linguagem assem bly, é designado por um ficheiro de “ execução” .
Muit as vezes encont ram os o nom e de ficheiro “ HEX” . Est e nom e provém de um a represent ação
hexadecim al desse ficheiro, bem com o o sufixo “ hex" no t ít ulo, por exem plo “ correr.hex" . Um a
vez produzido, o ficheiro de execução é inserido no m icrocont rolador at ravés de um program ador.

Um program a em Lin gu a ge m Asse m bly é escrit o por int erm édio de um processador de t ext o
( edit or) e é capaz de produzir um ficheiro ASCI I no disco de um com put ador ou em am bient es
próprios com o o MPLAB – que vai ser explicado no próxim o capít ulo.

Linguagem Assem bly

Os elem ent os básicos da linguagem assem bly são:

• Labels ( rót ulos)


• I nst ruções
• Operandos
• Diret ivas
• Com ent ários

Um La be l ( rót ulo) é um a designação t ext ual ( geralm ent e de fácil leit ura) de um a linha num
program a ou de um a secção de um program a para onde um m icrocont rolador deve salt ar ou,
ainda, o início de um conj unt o de linhas de um program a. Tam bém pode ser usado para execut ar
um a ram ificação de um program a ( t al com o Got o....) , o program a pode ainda cont er um a
condição que deve ser sat isfeit a, para que um a inst rução Got o sej a execut ada. É im port ant e que
um rót ulo ( label) sej a iniciado com um a let ra do alfabet o ou com um t raço baixo “ _” . O
com prim ent o de um rót ulo pode ir at é 32 caracteres. É t am bém im port ant e que o rót ulo com ece
na prim eira coluna.

40
I nst ruções
As inst ruções são específicas para cada m icrocont rolador, assim , se quiserm os ut ilizar a
linguagem assem bly t em os que est udar as inst ruções desse m icrocont rolador. O m odo com o se
escreve um a inst rução é designado por " sint axe" . No exem plo que se segue, é possível
reconhecer erros de escrit a, dado que as inst ruções m ovlp e got t o não exist em no
m icrocont rolador PI C16F84.

Operandos
Operandos são os elem ent os da inst rução necessários para que a inst rução possa ser execut ada.
Norm alm ent e são r e gist r os, va r iá ve is e con st a n t e s. As const ant es são designadas por
“ lit erais” . A palavra lit eral significa “ núm ero” .

Com ent ários


Com e n t á r io é um t ext o que o program ador escreve no program a a fim de t ornar est e m ais claro
e legível. É colocado logo a seguir a um a inst rução e deve com eçar com um a sem ivírgula " ; " .

Diret ivas
Um a dir e t iva é parecida com um a inst rução m as, ao cont rário dest a, é independent e do t ipo de
m icrocont rolador e é um a caract eríst ica inerent e à própria linguagem assem bly. As diret ivas
servem - se de variáveis ou regist ros para sat isfazer det erm inados propósit os. Por exem plo, NI VEL,
pode ser um a designação para um a variável localizada no endereço 0Dh da m em ória RAM. Dest e
m odo, a variável que reside nesse endereço, pode ser acedida pela palavra NI VEL. É m uit o m ais
fácil a um program ador recordar a palavra NI VEL, que lem bra que o endereço 0Dh cont ém
inform ação sobre o nível.

41
Ex e m plo de com o se e scr e ve u m pr ogr a m a
O exem plo que se segue, m ost ra com o um program a sim ples pode ser escrit o em linguagem
assem bly, respeit ando regras básicas.

Quando se escreve um program a, além das regras fundam ent ais, exist em princípios que, em bora
não obrigat órios é convenient e, serem seguidos. Um deles, é escrever no seu início, o nom e do
program a, aquilo que o program a faz, a versão dest e, a dat a em que foi escrit o, t ipo de
m icrocont rolador para o qual foi escrit o e o nom e do program ador.

Um a vez que est es dados não int eressam ao t radut or de assem bly, são escrit os na form a de
com e nt á r ios. Deve t er- se em at enção que um com ent ário com eça sem pre com pont o e vírgula e
pode ser colocado na linha seguint e ou logo a seguir à inst rução.
Depois dest e com ent ário inicial t er sido escrit o, devem incluir- se as diret ivas. I st o se m ost ra no
exem plo de cim a.

Para que o seu funcionam ent o sej a corret o, é preciso definir vários parâm et ros para o
m icrocont rolador, t ais com o:
- t ipo de oscilador
- quando o t em porizador do wat chdog est á ligado e
- quando o circuit o int erno de reset est á habilit ado.
Tudo ist o é definido na diret iva seguint e:

__CONFI G _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

Logo que t odos os elem ent os de que precisam os t enham sido definidos, podem os com eçar a
escrever o program a.
Prim eiro, é necessário definir o endereço para que o m icrocont rolador deve ir quando se liga a
42
alim ent ação. É est a a finalidade de ( org 0x00) .
O endereço para onde um program a salt a se ocorrer um a int errupção é ( org 0x04) .
Com o est e é um program a sim ples, é suficient e dirigir o m icrocont rolador para o início de um
program a com um a inst rução " got o M a in " ( Main = program a principal) .

As inst ruções encont radas em M a in , selecionam o banco 1 ( BANK1) de m odo a poder aceder- se
ao regist ro TRI SB, afim de que o port o B sej a definido com o um a saída ( m ovlw 0x00, m ovwf
TRI SB) .

O próxim o passo é selecionar o banco de m em ória 0 e colocar os bit s do port o B no est ado lógico
‘1’ e, assim , o program a principal fica t erm inado.
É preciso, no ent ant o, um out ro ciclo ( loop) , onde o m icrocont rolador possa perm anecer sem que
ocorram erros. Trat a- se de um ‘loop’ infinit o que é execut ado cont inuam ent e, enquant o a
alim ent ação não for desligada. Finalm ent e, é necessário colocar a palavra “ end" no fim de cada
program a, de m odo a inform ar o t radut or de assem bly de que o program a não cont ém m ais
inst ruções.

D ir e t iva s de con t r ole

4 .1 # D EFI N E Tr oca de u m a por çã o de t e x t o por ou t r a

Sin t a x e :
# define< nom e> [ < t ext o at ribuído a nom e > ]

D e scr içã o:
De cada vez que a palavra < nom e> aparece no program a, vai ser subst it uída por < t ext o at ribuído
a nom e> .

Ex e m plo:

# define ligado 1
# define desligado 0

D ir e t iva s sim ila r e s: # UNDEFI NE, I FDEF, I FNDEF

4 .2 I N CLUD E I n clu ir u m fich e ir o a dicion a l n u m pr ogr a m a

Sin t a x e :
include < < nom e_do_ficheiro> >
include “ < nom e_do_ficheiro> ”

D e scr içã o:
A aplicação dest a diret iva faz com que um ficheiro com plet o sej a copiado para o local em que a
diret iva “ include” se encont ra. Se o nom e do ficheiro est iver ent re aspas, est am os a lidar com um
ficheiro do sist em a, se não est iver ent re aspas, m as sim ent re os sinais < > , t rat a- se de um
ficheiro do ut ilizador. A diret iva “ include” , cont ribui para um a m elhor apresent ação do program a
principal.

Ex e m plo:
include < regs.h >
include “ subprog.asm ”

43
4 .3 CON STAN T At r ibui u m va lor n u m é r ico con st a n t e a um a de sign a çã o t e x t ua l

Sin t a x e :
const ant < nom e > = < valor >

D e scr içã o:
Cada vez que < nom e > aparece no program a, é subst it uído por < valor > .

Ex e m plo:
const ant MAXI MO = 100
const ant Com prim ent o = 30

D ir e t iva s sim ila r e s: SET, VARI ABLE

4 .4 VARI ABLE At r ibui u m va lor n u m é r ico va r iá ve l à de sign a çã o t e x t ua l

Sin t a x e :
variable < nom e > = < valor >

D e scr içã o:
Ao ut ilizar est a diret iva, a designação t ext ual m uda o seu valor.
Difere da diret iva CONSTANT no fat o de, depois de a diret iva ser aplicada, o valor da designação
t ext ual pode variar.

Ex e m plo:
variable nível = 20
variable t em po = 13

D ir e t iva s sim ila r e s: SET, CONSTANT

4 .5 SET D e fin ir um a va r iá ve l a sse m ble r

Sin t a x e :

< nom e_variavel > set < valor>

D e scr içã o:
À variável < nom e_variavel > é at ribuída a expressão < valor> . A diret iva SET é sem elhant e a
EQU, m as com a diret iva SET é possível t ornar a definir a variável com out ro valor.

Ex e m plo:
nível set 0
com prim ent o set 12
nível set 45

D ir e t iva s sim ila r e s: EQU, VARI ABLE

4 .6 EQU D e fin in do um a con st a n t e e m a sse m ble r

Sin t a x e :
< nom e_da_const ant e > equ < valor >

D e scr içã o:
Ao nom e de um a const ant e < nom e_de_const ant e > é at ribuído um valor < valor >

Ex e m plo:
cinco equ 5
seis equ 6
set e equ 7 I n st r u çõe s sim ila r e s: SET
44
4 .7 ORG D e fine o e nde r e ço a pa r t ir do qua l o pr ogr a m a é a r m a ze na do na m e m ór ia do
m icr ocon t r ola dor

Sin t a x e :
< rót ulo> org < valor>

D e scr içã o:
Est a é a diret iva m ais freqüent em ent e usada. Com est a diret iva nós definim os em que sít io na
m em ória de program a o program a vai com eçar.

Ex e m plo:
I nicio org 0x00
m ovlw 0xFF
m ovwf PORTB

Est as duas inst ruções a seguir à diret iva 'org', são guardadas a part ir do endereço 00.

4 .8 EN D Fim do pr ogr a m a

Sin t a x e :
end

D e scr içã o:
No fim do program a, é necessário colocar a diret iva 'end', para que o t radut or do assem bly
( assem bler) , saiba que não exist em m ais inst ruções no program a.

Ex e m plo:
.
.
m ovlw 0xFF
m ovwf PORTB
end

I n st r u çõe s con dicion a is

4 .9 I F Ra m ifica çã o con diciona l do pr ogr a m a

Sin t a x e :
if < t erm o_condicional>

D e scr içã o:
Se a condição em < t erm o_condicional> est iver sat isfeit a, a part e do program a que se segue à
diret iva I F, deverá ser execut ada. Se a condição não for sat isfeit a, ent ão é execut ada a part e que
se segue às diret ivas ELSE ou ENDI F.

Ex e m plo:

if nível = 100
got o ENCHER
else
got o DESPEJAR
endif

D ir e t iva s sim ila r e s: ELSE, ENDI F

4 .1 0 ELSE Assina la um bloco a lt e r na t ivo se a con diçã o t e r m o_ con diciona l pr e se n t e e m


'I F' n ã o se ve r ifica r

45
Sin t a x e :
Else

D e scr içã o:
Usado com a diret iva I F com o alt ernat iva no caso de t erm o_condicional ser falso.

Ex e m plo:
if t em po < 50
got o DEPRESSA
else got o DEVAGAR
endif

I n st r u çõe s sim ila r e s: ENDI F, I F

4 .1 1 EN D I F Fim de um a se cçã o con diciona l do pr ogr a m a

Sin t a x e :
endif

D e scr içã o:
Est a diret iva é escrit a no fim de um bloco condicional, para inform ar o t radut or do assem bly de
que o bloco condicional t erm inou.

Ex e m plo:
if nível = 100
got o METER
else
got o TI RAR
endif

D ir e t iva s sim ila r e s: ELSE, I F

4 .1 2 W H I LE A e x e cu çã o da se cçã o do pr ogr a m a pr osse gue , e n qu a n t o a con diçã o se


ve r ifica r

Sin t a x e :
while < condição>
.
endw

D e scr içã o:
As linhas do program a sit uadas ent re WHI LE e ENDW devem ser execut adas, enquant o a condição
for verdadeira. Se a condição deixar de se verificar, o program a deverá execut ar as inst ruções a
part ir da linha que sucede a ENDW. O núm ero de inst ruções com preendidas ent re WHI LE e ENDW
pode ir at é 100 e podem ser execut adas at é 256 vezes.

Ex e m plo:
while i < 10
i = i + 1
endw

4 .1 3 EN D W Fim da pa r t e con diciona l do pr ogr a m a

Sin t a x e :
endw

D e scr içã o:
Est a diret iva é escrit a no fim do bloco condicional correspondent e a WHI LE, assim , o assem bler
fica a saber que o bloco condicional chegou ao fim .

46
Ex e m plo:
while i < 10
i = i + 1
.
endw

D ir e t iva s sim ila r e s: WHI LE

4 .1 4 I FD EF Ex e cu t a r u m a pa r t e do pr ogr a m a se um sím bolo e st ive r de fin ido

Sin t a x e :
ifdef < designação >

D e scr içã o:
Se a designação < designação> t iver sido previam ent e definida ( norm alm ent e at ravés da diret iva
# DEFI NE) , as inst ruções que se lhe sucedem serão execut adas at é encont rarm os as diret ivas
ELSE ou ENDI F.

Ex e m plo:
# define t est e
.
ifdef t est e ; com o t est e foi definido
...............; as inst ruções nest as linhas vão ser execut adas
endif

D ir e t iva s sim ila r e s: # DEFI NE, ELSE, ENDI F, I FNDEF, # UNDEFI NE

4 .1 5 I FN D EF Ex e cu çã o de um a pa r t e do pr ogr a m a se o sím bolo nã o t ive r sido de finido

Sin t a x e :
ifndef < designação>

D e scr içã o:
Se a designação < designação> não t iver sido previam ent e definida ou se est a definição t iver sido
m andada ignorar at ravés da diret iva # UNDEFI NE, as inst ruções que se seguem deverão ser
execut adas, at é que as diret ivas ELSE ou ENDI F, sej am alcançadas.

Ex e m plo:
# define t est e
........
# undefine t est e
.........
ifndef t est e ; com o t est e não est á definido
........ ; as inst ruções nest as linhas são execut adas
endif

D ir e t iva s sim ila r e s: # DEFI NE, ELSE, ENDI F, I FDEF, # UNDEFI NE

D ir e t iva s de D a dos

4 .1 6 CBLOCK D e fin ir u m bloco pa r a a s con st a n t e s nom e a da s

Sin t a x e :
Cblock [ < t erm o > ]
< rót ulo> [ : < increm ent e> ] , < rót ulo> [ : < increm ent e> ] ......

47
endc

D e scr içã o:
Est a diret iva é usada para at ribuir valores às const ant es a seguir nom eadas. A cada t erm o
seguint e, é at ribuído um valor superior em um a unidade ao ant erior. No caso de < increm ent e>
est ar preenchido, ent ão é o valor de < increm ent e> que é adicionado à const ant e ant erior.
O valor do parâm et ro < t erm o> , é o valor inicial. Se não for dado, ent ão, por defeit o, é
considerado igual a zero.

Ex e m plo:
cblock 0x02
prim eiro, segundo ; prim eiro = 0x02, segundo = 0x03
t erceiro ; t erceiro = 0x04
endc

cblock 0x02
prim eiro : 4, segundo : 2 ; prim eiro = 0x06, segundo = 0x08
t erceiro ; t erceiro = 0x09
endc

D ir e t iva s sim ila r e s: ENDC

4 .1 7 EN D C Fim da de fin içã o de u m bloco de con st a nt e s

Sin t a x e :
endc

D e scr içã o:
Est a diret iva é ut ilizada no fim da definição de um bloco de const ant es, para que o t radut or de
assem bly saiba que não há m ais const ant es.

D ir e t iva s sim ila r e s: CBLOCK

4 .1 8 D B D e finir um byt e de da dos

Sin t a x e :
[ < t erm o> ] db < t erm o> [ , < t erm o> ,......,< t erm o> ]

D e scr içã o:
Est a diret iva reserva um byt e na m em ória de program a. Quando há m ais t erm os a quem é preciso
at ribuir byt es, eles serão at ribuídos um após out ro.

Ex e m plo:
db ‘t ’, 0x0f, ‘e’, ‘s', 0x12

I n st r u çõe s sim ila r e s: DE, DT

4 .1 9 D E – D e fin ir byt e n a m e m ór ia EEPROM

Sin t a x e :
[ < t erm o> ] de < t erm o> [ , < t erm o> ,......,< t erm o> ]

D e scr içã o:
Est a diret iva reserva um byt e na m em ória EEPROM. Apesar de ser dest inada em prim eiro lugar
para a m em ória EEPROM, t am bém pode ser usada em qualquer out ro local de m em ória.

Ex e m plo:
48
org H’2100’
de “ Versão 1.0” , 0

D ir e t iva s sim ila r e s: DB, DT

4 .2 0 D T D e fin in do um a t a be la de da dos

Sin t a x e :
[ < t erm o> ] dt < t erm o> [ , < t erm o> ,......,< t erm o> ]

D e scr içã o:
Est a diret iva vai gerar um a série de inst ruções RETLW, um a inst rução para cada t erm o.

dt “ Mensagem ” , 0
dt prim eiro, segundo, t erceiro

D ir e t iva s sim ila r e s: DB, DE

Con figu r a n do u m a dir e t iva

4 .2 1 _ _ CON FI G Est a be le ce r os bit s de configur a çã o

Sin t a x e :
__config< t erm o> ou __config < endereço> , < t erm o>

D e scr içã o:
São definidos o t ipo de oscilador, e a ut ilização do wat chdog e do circuit o de reset int erno. Ant es
de usar est a diret iva, t em que declarar- se o processador at ravés da diret iva PROCESSOR.

Ex e m plo:
__CONFI G _CP_OFF & _WDT_OFF & PWRTE_ON & _XT_OSC

D ir e t iva s sim ila r e s: __I DLOCS, PROCESSOR

4 .2 2 PROCESSOR D e fin in do o m ode lo de m icr ocon t r ola dor

Sin t a x e :
processor < t ipo_de_m icrocont rolador>

D e scr içã o:
Est a diret iva, est abelece o t ipo de m icrocont rolador em que o program a vai correr.

Ex e m plo:
processor 16f84

49
Ope r a dor e s a r it m é t icos de a sse m ble r

50
Fich e ir os cr ia dos a o com pila r u m pr ogr a m a
Os ficheiros result ant es da t radução de um program a escrit o em linguagem assem bly são os
seguint es:

• Ficheiro de execução ( nom e_do_program a.hex)


• Ficheiro de erros no program a ( nom e_do_program a.err)
• Ficheiro de list agem ( nom e_do_program a.lst )

O prim eiro ficheiro cont ém o program a t raduzido e que vai ser int roduzido no m icrocont rolador
quando est e é program ado. O cont eúdo dest e ficheiro não dá grande inform ação ao program ador,
por isso, não o irem os m ais abordar.
O segundo ficheiro cont ém erros possíveis que foram com et idos no processo de escrit a e que
foram not ificados pelo assem bler durant e a t radução. Est es erros t am bém são m encionados no
ficheiro de list agem “ list ” . No ent ant o é preferível ut ilizar est e ficheiro de erros “ err” , em casos em
que o ficheiro “ lst ” é m uit o grande e, port ant o, difícil de consult ar.
O t erceiro ficheiro é o m ais út il para o program ador. Cont ém m uit a inform ação t al com o o
posicionam ent o das inst ruções e variáveis na m em ória e a sinalização dos erros.

A seguir, apresent a- se o ficheiro ‘list ’ do program a dest e capít ulo. No início de cada página,
encont ra- se inform ação acerca do nom e do ficheiro, dat a em que foi criado e núm ero de página. A
prim eira coluna, cont ém o endereço da m em ória de program a, onde a inst rução m encionada
nessa linha, é colocada. A segunda coluna, cont ém os valores de quaisquer sím bolos definidos
com as diret ivas: SET, EQU, VARI ABLE, CONSTANT ou CBLOCK. A t erceira coluna, t em , o código
da inst rução que o PI C irá execut ar. A quart a coluna cont ém inst ruções assem bler e com ent ários
do program ador. Possíveis erros são m encionados ent re as linhas, a seguir à linha em que o erro
ocorreu.

51
52
No fim do ficheiro de list agem , é apresent ada um a t abela dos sím bolos usados no program a. Um a
caract eríst ica út il do ficheiro ‘list ’ é a apresentação de um m apa da m em ória ut ilizada. Mesm o no
fim , exist e um a est at íst ica dos erros, bem com o a indicação da m em ória de program a ut ilizada e
da disponível.

M a cr os
As m acros são elem ent os m uit o út eis em linguagem assem bly. Um a m acro pode ser descrit a em
poucas palavras com o “ um grupo de inst ruções definido pelo ut ilizador que é acrescent ado ao
program a pelo assem bler, sem pre que a m acro for invocada” . É possível escrever um program a
sem usar m acros. Mas, se as ut ilizarm os, o program a t orna- se m uit o m ais legível, especialm ent e
se est iverem vários program adores a t rabalhar no m esm o program a. As m acros t êm afinidades
com as funções nas linguagens de alt o nível.

Com o a s e scr e ve r :

< rót ulo> m acro


[ < argum ent o1> ,< argum ent o2> ,.....,< argum ent oN> ]
.........
.........
endm

Pelo m odo com o são escrit as, vem os que as m acros podem aceit ar argum ent os, o que t am bém é
m uit o út il em program ação.
Quando o argum ent o é invocado no int erior de um a m acro, ele vai ser subst it uído pelo valor
< argum ent oN> .

Ex e m plo:

O exem plo de cim a, m ost ra um a m acro cuj o propósit o é enviar para o port o B, o argum ent o
ARG1, definido quando a m acro foi invocada. Para a ut ilizarm os num program a, bast a escrever
um a única linha: ON_PORTB 0xFF e, assim , colocam os o valor 0xFF no port o B. Para ut ilizar um a
m acro no program a, é necessário incluir o ficheiro m acro no program a principal, por int erm édio
da inst rução # include “ nom e_da_m acro.inc” . O cont eúdo da m acro é aut om at icam ent e copiado
para o local em que est a m acro est á escrit a. I st o pode ver- se m elhor no ficheiro ‘lst ’ vist o at rás,
onde a m acro é copiada por baixo da linha # include “ bank.inc” .

53
CAPÍ TULO 6
Ex e m plos

I n t r odu çã o
Os exem plos que se m ost ram nest e capít ulo, exem plificam com o se deve ligar o m icrocont rolador
PI C a periféricos ou a out ros disposit ivos quando proj et am os o nosso próprio sist em a de
m icrocont rolador. Cada exem plo cont ém um a descrição det alhada do hardware com o esquem a
elét rico e com ent ários acerca do program a. Todos os program as podem ser copiados da página da
I nt ernet da ‘MikroElekt ronika’.

6 .1 Alim e n t a n do o m icr ocon t r ola dor


De um m odo geral, um a t ensão de alim ent ação carret a é da m aior im port ância para o bom
funcionam ent o do sist em a de m icrocont rolador. Pode com parar- se est e sist em a a um hom em que
precisa respirar. É provável que um hom em que respire ar puro viva m ais t em po que um que viva
num am bient e poluído.
Para que um m icrocont rolador funcione convenient em ent e, é necessário usar um a font e de
alim ent ação est ável, um a função de ‘reset ao ligar’ fiável e um oscilador. De acordo com as
especificações t écnicas fornecidas pelo fabricant e do m icrocont rolador PI C, em t odas as versões, a
t ensão de alim ent ação deve est ar com preendida ent re 2,0V e 6,0V. A solução m ais sim ples para
a font e de alim ent ação é ut ilizar um regulador de t ensão LM7805 que fornece, na sua saída, um a
t ensão est ável de + 5V. Um a font e com est as caract eríst icas, m ost ra- se na figura em baixo.

Para que o circuit o funcione corret am ent e, de m odo a obt er- se 5V est áveis na saída ( pino 3) , a
t ensão de ent rada no pino 1 do LM7805 deve sit uar- se ent re 7V e 24V. Dependendo do consum o
do disposit ivo, assim devem os usar o t ipo de regulador LM7805 apropriado. Exist em várias
versões do LM7805. Para um consum o de corrent e at é 1A, deve usar- se a versão TO- 220, com
um dissipador de calor apropriado. Se o consum o for som ent e de 50m A, pode usar- se o 78L05
( regulador com em pacot am ent o TO92 de m enores dim ensões para corrent es at é 100m A) .

6 .2 Ut iliza çã o de m a cr os e m pr ogr a m a s
Os exem plos que se apresent am nas secções seguint es dest e capít ulo, vão ut ilizar
freqüent em ent e as m acros WAI T, WAI TX e PRI NT, por isso elas vão ser explicadas com det alhe.
M a cr os W AI T, W AI TX
O ficheiro Wait .inc cont ém duas m acros WAI T e WAI TX. At ravés dest as m acros é possível
conseguir diferent es int ervalos de t em po. Am bas as m acros usam o preenchim ent o do cont ador
TMR0 com o int ervalo de t em po básico. Modificando o valor do prescaler, nós podem os variar o
int ervalo de t em po correspondent e ao enchim ent o do cont ador TMR0.

54
Se usarm os um oscilador ( ressonador) de 4MHz e para valores do prescaler de 0, 1 e 7 a dividir o
clock básico do oscilador, os int ervalos de t em po causados por t ransbordo do t em porizador TMR0,
serão nest es t rês casos de respect ivam ent e 0,512m S, 1,02m S e 65,3m S. Na prát ica isso significa
que o m aior int ervalo de t em po possível será de 256x65,3m S = 16,72 segundos.

Para se poderem usar m acros no program a principal, é necessário declarar as variáveis wcycle e
prescWAI T, com o é feit o nos exem plos que se seguem nest e capít ulo.
A Macro WAI T t em um argum ent o. O valor st andard at ribuído ao prescaler nest a m acro é 1
( 1,02m S) e não pode ser alt erado.
WAI T t im econst _1
t im e con st _ 1 é um núm ero de 0 a 255. Mult iplicando esse núm ero pelo t em po de enchim ent o,
obt em os o t em po t ot al: TEMPO= t im econst _1 x 1,02m S.
Ex e m plo: WAI T .100
O exem plo m ost ra com o gerar um at raso de 100x1,02m S no t ot al de 102m S.

55
Ao cont rário da m acro WAI T, a m acro WAI TX t em m ais um argum ent o que serve para at ribuir um
valor ao prescaler. Os dois argum ent os da m acro WAI TX são :
Tim e con st _ 2 é um núm ero ent re 0 e 255. Mult iplicando esse núm ero pelo t em po de enchim ent o,
obt em os o t em po t ot al:
TI ME= t im econst _1 x 1,02m S x PRESCext
PRESCe x t é um núm ero ent re 0 e 7 que est abelece a relação ent re o clock e o t em porizador
TMR0.
Ex e m plo: WAI TX .100, 7
O exem plo m ost ra com o gerar um int ervalo de t em po de 100x65,3 m S, ou sej a, de 6,53S.
MACRO PRI NT
A Macro PRI NT encont ra- se no ficheiro Print .inc. Est a m acro facilit a o envio de um a série de dados
ou caract eres para disposit ivos de saída t ais com o: display LCD, RS232, im pressora m at ricial,
...,et c. A m elhor m aneira de form ar a série, é usar um a diret iva dt ( definir t abela) . Est a inst rução
guarda um a série de dados na m em ória de program a, na form a de um grupo de inst ruções ret lw
cuj os operandos são os caract eres da cadeia de caract eres.

O m odo com o um a seqüência é form ada usando um a inst rução dt , m ost ra- se no seguint e
exem plo:
org 0x00
got o Main
St ring m ovwf PCL
St ring1 dt “ est a é a cadeia ‘ASCI I ’”
St ring2 dt “ Segunda série”
End
Main
m ovlw .5
call St ring
A prim eira inst rução depois do rót ulo Main, escreve a posição de um m em bro da cadeia ( st ring)
no regist ro w. A seguir, com a inst rução call salt am os para o rót ulo st ring, onde a posição de um
56
m em bro da seqüência é adicionada ao valor do cont ador de program a: PCL= PCL+ W. A seguir,
t erem os no cont ador de program a um endereço da inst rução ret lw com o m em bro da cadeia
desej ado. Quando est a inst rução é execut ada, o m em bro da cadeia vai ficar no regist ro w e o
endereço da inst rução a execut ar depois da inst rução call est ará guardado no cont ador de
program a. O rót ulo END é um m ódulo elegant e de m arcar o endereço em que a cadeia t erm ina.
A Macro PRI NT possui cinco argum ent os:
PRI NT m acro Addr, St art , End, Var, Out
Addr é um endereço onde um a ou m ais cadeias ( que se seguem um a após out ra) com eçam .
St a r t é o endereço do prim eiro caract er da cadeia.
En d é o endereço em que a cadeia t erm ina
Va r é a variável que t em o papel de m ost rar ( apont ar) os m em bros da cadeia

Ou t é um argum ent o que usam os para enviar o endereço do subprogram a que t rabalha com os
disposit ivos de saída, t ais com o: LCD, RS- 232 et c.

A m acro PRI NT escreve um a série de caract eres ASCI I , correspondent es a ‘MikroElekt ronika’ no
display LCD. A cadeia ocupa um a part e da m em ória de program a a com eçar no endereço 0x03.

6 .3 Ex e m plos
Diodos Em issores de Luz - LEDs
Os LEDs são seguram ent e uns dos com ponent es m ais usados em elet rônicas. LED é um a
abreviat ura para ‘Light Em it t ing Diode’ ( Diodo em issor de luz) . Quando se escolhe um LED, vários
parâm et ros devem t er- se em at enção: diâm et ro, que é usualm ent e de 3 ou 5m m ( m ilím et ros) ,
corrent e de funcionam ent o, habit ualm ent e de cerca de 10m A ( pode ser m enor que 2m A para
LEDs de alt a eficiência – alt a lum inosidade) e, claro, a cor que pode ser essencialm ent e verm elha
ou verde, em bora t am bém exist am am arelos, laranj as, azuis, et c.

Os LEDs, para em it irem luz, t êm que ser ligados com a polaridade carret a e a resist ência de
lim it ação de corrent e t em t am bém que t er o valor corret o para que o LED não se est rague por
sobreaquecim ent o. O pólo posit ivo da alim ent ação deve est ar do lado do ânodo e o negat ivo do
lado do cát odo. Para ident ificar os t erm inais do led, podem os t er em at enção que, norm alm ent e, o
t erm inal do cát odo é m ais curt o e, j unt o dest e, a base do LED é plana. Os LED’s só em it em luz se
a corrent e fluir do ânodo para o cát odo. Se for ao cont rário, a j unção PN fica polarizada
inversam ent e e, a corrent e, não passa. Para que o LED funcione corret am ent e, deve ser
adicionada um a resist ência em série com est e, que vai lim it ar a corrent e at ravés do LED, evit ando
que est e se queim e. O valor dest a resist ência é det erm inado pelo valor da corrent e que se quer
que passe at ravés do LED. A corrent e m áxim a que pode at ravessar um LED est á est abelecida pelo
fabricant e. Os LEDs de alt o rendim ent o podem produzir um a saída m uit o sat isfat ória com um a
corrent e de 2m A.

Para det erm inar o valor da resist ência em série, nós necessit am os de saber o valor da
alim ent ação. A est e valor vam os subt rair a queda de t ensão caract eríst ica no LED. Est e valor pode
variar ent re 1,2v e 1,6v, dependendo da cor do LED. O result ado dest a subt ração é a queda de
57
t ensão na resist ência Ur . Sabendo est a t ensão e a corrent e, det erm inam os o valor da resist ência
usando a fórm ula R= Ur / I .

Os LEDs podem ser ligados ao m icrocont rolador de duas m aneiras. Um a é fazê- los acender com o
nível lógico zero e a out ra com o nível lógico um . O prim eiro m ét odo é designado por lógica
NEGATI VA e o out ro por lógica POSI TI VA. O diagram a de cim a, m ost ra com o se faz a ligação
ut ilizando lógica POSI TI VA. Com o em lógica POSI TI VA se aplica um a volt agem de + 5V ao diodo
em série com a resist ência, ele vai em it ir luz sem pre que o pino do port o B forneça um valor
lógico 1 ( 1 = saída Alt a) . A lógica NEGATI VA requer que o LED fique com o ânodo ligado ao
t erm inal posit ivo da alim ent ação e o cát odo ligado ao pino port o B, at ravés da resist ência. Nest e
caso, quando um a saída Baixa do m icrocont rolador é aplicada à resist ência em série com o LED,
est e acende.

Liga çã o dos diodos LED a o Por t o B do m icr ocon t r ola dor

O exem plo que se segue, define o port o B com o de saída e põe a nível lógico um t odos os pinos
dest e port o, acendendo os LEDs.

58
Te cla do
As t eclas de um t eclado, são disposit ivos m ecânicos usados para desfazer ou est abelecer as
ligações ent re pares de pont os. As t eclas podem aparecer com vários t am anhos e sat isfazer vários
propósit os. As t eclas ou int errupt ores que vam os usar são t am bém designadas por “ t eclas- dip” .
Elas são m uit o usadas em elet rônicas e são soldadas diret am ent e na placa de circuit o im presso.
Possuem quat ro pinos ( dois para cada cont act o) , o que lhes confere um a boa est abilidade
m ecânica.

59
Ex e m plo de liga çã o de t e cla s, a os pin os do m icr ocon t r ola dor

O m odo com o funcionam é sim ples. Quando pressionam os um a t ecla, os dois cont act os são curt o-
circuit ados e é est abelecida um a ligação. No ent ant o, ist o não é t ão sim ples com o parece. O
problem a reside no fat o de a t ensão ser um a grandeza elét rica e na im perfeição dos cont act os
m ecânicos. Quer dizer, ant es que o cont act o se est abeleça ou sej a int errom pido, há um curt o
período de t em po em que pode ocorrer um a vibração ( oscilação) com o result ado do desaj ust e dos
cont act os, ou da velocidade diferent e de acionam ent o das t eclas ( que depende da pessoa que usa
o t eclado) . O t erm o associado a est e fenôm eno é designado por BOUNCE ( ressalt o) do int errupt or.
Se não o considerarm os quando est iverm os a escrever o program a, pode ocorrer um erro, ou
sej a, o program a pode det ect ar vários im pulsos apesar de a t ecla t er sido pressionada um a única
vez. Para evit ar ist o, um m ét odo é int roduzir um curt o período de espera quando se det ect a que
um cont act o é fechado. I st o assegura que a um a única pressão de t ecla, corresponde um único
im pulso. O t em po de espera ( t em po de DEBOUNCI NG) , é produzido por soft ware e o seu valor
depende da qualidade da t ecla e do serviço que est á a efet uar. Est e problem a pode ser
parcialm ent e resolvido por exem plo, colocando um condensador ent re os cont act os da t ecla, m as,
um program a bem feit o resolve m elhor o problem a. Ao escrever est e program a vai- se fazendo
variar o t em po de debouncing at é se verificar que a hipót ese de um a det ecção fica com plet am ent e
elim inada.
Nalguns casos, um a sim ples espera pode ser adequada, m as, se quiserm os que o program a
execut e várias t arefas ao m esm o t em po, um a espera significa, que o m icrocont rolador “ não faz
m ais nada” durant e um longo período de t em po, podendo falhar out ras ent radas ou, por exem plo,
não at ivar um display no m om ent o adequado.

A m elhor solução é t er um program a que det ect e quando se pressiona e em seguida se libert a a
t ecla. A m acro em baixo, pode ser usada para fazer o ‘debouncing’ de um a t ecla.

60
A m acro de cim a t em vários argum ent os que necessit am de serem explicados:
BUTTON m acro HiLo, Port , Bit , Delay, Address
H iLo pode ser ‘0’ ou ‘1’ e represent a o im pulso, descendent e ou ascendent e produzido quando se
pressiona um a t ecla e que faz com que o subprogram a sej a execut ado.
Por t é o port o do m icrocont rolador ao qual a t ecla est á ligada. No caso do PI C16F84 só pode ser o
Port o A ou o Port o B.
Bit é a linha do port o à qual a t ecla est á ligada.
D e la y é um núm ero ent re 0 e 255, usado para obt er o t em po necessário para que as oscilações
nos cont act os parem . É calculado pela fórm ula TEMPO = Delay x 1m s.
Addr e ss é o endereço para onde o m icrocont rolador vai depois de a t ecla prem ida, t er sido solt a.
A sub- rot ina sit uada nest e endereço cont ém a respost a a est e m ovim ent o.
Ex e m plo 1 : BUTTON 0, PORTA, 3, .100, Test er1_above
Chave1 est á ligada a RA3 ( bit 3 do port o A) , usa um t em po de ‘debouncing’ de 100 m ilisegundos
e zero é o nível lógico at ivo. O subprogram a que processa o m ovim ent o dest a t ecla encont ra- se a
part ir do endereço com o rót ulo Test er1_above.

Ex e m plo2 : BUTTON 1, PORTA, 2, .200, Test er2_below


Chave- 2 est á ligada a RA2 ( bit 2 do port o A) , usa um t em po de ‘debouncing’ de 200 m ilisegundos
e ‘1’ é o nível lógico at ivo. O subprogram a que processa o m ovim ent o dest a t ecla encont ra- se a
part ir do endereço com o rót ulo Test er2_below.
O exem plo que se segue, m ost ra com o se usa est a m acro num program a. O program a
TESTER.ASM acende e apaga um LED. O LED est á ligado ao bit 7 do port o B. A t ecla 1 é usada
para acender o LED. A t ecla 2 apaga o LED.

61
Opt oa copla dor e s
Os opt oacopladores incluem um LED e um fot ot ransist or j unt os no m esm o encapsulam ent o. O
propósit o do opt oacoplador é m ant er duas part es do circuit o isoladas ent re si.
I st o é feit o por um cert o núm ero de razões:
I n t e r fe r ê n cia . Um a part e do circuit o pode est ar colocada num sít io onde pode capt ar um
bocado de int erferência ( de m ot ores elét ricos, equipam ent o de soldadura, m ot ores a gasolina,
et c.) . Se a saída dest e circuit o est iver ligada at ravés de um opt oacoplador a um out ro circuit o,
som ent e os sinais desej ados passam pelo opt oacoplador. Os sinais de int erferência não t êm
“ força” suficient e para at ivar o LED do opt oacoplador e assim são elim inados. Exem plos t ípicos

62
são unidades indust riais com m uit as int erferências que afet am os sinais nas linhas. Se est as
int erferências afet arem o funcionam ent o da secção de cont role, podem ocorrer erros e a
unidade parar de t rabalhar.
I sola m e n t o e a m plifica çã o de um sina l e m sim u lt â n e o. Um sinal de am plit ude baixa, por
exem plo de 3V, é capaz de at ivar um opt oacoplador e a saída do opt oacoplador pode ser
ligada a um a linha de ent rada do m icrocont rolador. O m icrocont rolador requer um a ent rada de
5v e, nest e caso, o sinal é am plificado de 3v para 5v. Pode t am bém ser ut ilizado para
am plificar um sinal de corrent e. Ver em baixo com o se pode usar um a linha de saída de um
m icrocont rolador para am plificar a corrent e.
Te n sã o de isola m e n t o e le va da . Os opt oacopladores possuem int rinsecam ent e um a grande
t ensão de isolam ent o. Com o o LED est á com plet am ent e separado do fot ot ransist or, os
opt oacopladores podem exibir um a t ensão de isolam ent o de 3kv ou superior.
Os opt oacopladores podem ser usados com o disposit ivos de ent rada e de saída. Alguns, fornecem
funções adicionais t ais com o Schm it t t rigger ( a saída de um Schm it t t rigger é 0 ou 1 – ele
t ransform a sinais descendent es ou ascendent es de baixo declive em sinais zero ou um bem
definidos) . Os opt oacopladores são em pacot ados num a única unidade, ou em grupos de dois ou
m ais num único encapsulam ent o. Eles podem t am bém servir com o fot oint errupt ores, um a roda
com ranhuras gira ent re o LED e o fot ot ransist or, sem pre que a luz em it ida pelo LED é
int errom pida, o t ransist or produz um im pulso.
Cada opt oacoplador necessit a de duas alim ent ações para funcionar. Ele pode ser usado só com
um a alim ent ação m as, nest e caso, a capacidade de isolam ent o perde- se.

Opt oa copla dor n u m a lin h a de e n t r a da


O m odo com o t rabalha é sim ples: quando o sinal chega, o LED do opt oacoplador conduz e ilum ina
o fot ot ransist or que est á na m esm a cápsula. Quando o t ransist or com eça a conduzir, a t ensão
ent re o colet or e o em issor cai para 0,5V ou m enos o que o m icrocont rolador int erpret a com o
nível lógico zero no pino RA4.
O exem plo em baixo, é aplicável em casos com o um cont ador usado para cont ar it ens num a linha
de produção, det erm inar a velocidade do m ot or, cont ar o núm ero de rot ações de um eixo, et c.

Vam os supor que o sensor é um m icroint errupt or. Cada vez que o int errupt or é fechado, o LED é
ilum inado. O LED ‘t ransfere’ o sinal para o fot ot ransist or fazendo est e conduzir, assim é produzido
um sinal BAI XO na ent rada RA4 do m icrocont rolador. No m icrocont rolador deve exist ir um
program a que evit e um a falsa cont agem e um indicador ligado às saídas do m icrocont rolador, que
m ost re o est ado at ual da cont agem .

Ex e m plo de u m opt oa copla dor liga do a um a lin ha de e n t r a da

63
Opt oa copla dor n u m a lin h a de sa ída
Um opt oacoplador pode ser usado para separar o sinal de saída de um m icrocont rolador de um
disposit ivo de saída. I st o pode ser necessário para isolar o circuit o de um a t ensão alt a ou para
am plificar a corrent e. A saída de alguns m icrocont roladores est á lim it ada a 25m A. O
opt oacoplador pode servir- se do sinal de corrent e do m icrocont rolador para alim ent ar um LED ou
relé, com o se m ost ra a seguir:

64
Ex e m plo de u m opt oa copla dor liga do a um a lin ha de sa ída

O program a para est e exem plo é sim ples. Fornecendo um nível lógico ‘1’ ao pino 3 do port o A, o
LED vai ser at ivado e o t ransist or do opt oacoplador vai conduzir. A corrent e lim it e para est e
t ransist or é de cerca de 250m A.

O Re lé
Um relé é um disposit ivo elet rom ecânico que t ransform a um sinal elét rico em m ovim ent o
m ecânico. É const it uído por um a bobina de fio de cobre isolado, enrolado à volt a de um núcleo
ferrom agnét ico e por um a arm adura m et álica com um ou m ais cont act os.
Quando a t ensão de alim ent ação é ligada à bobina, est a vai ser at ravessada por um a corrent e e
vai produzir um cam po m agnét ico que at rai a arm adura fechando uns cont act os e / ou abrindo
out ros.

Quando a alim ent ação do relé é desligada, o fluxo m agnét ico da bobina irá desaparecer e
est abelece- se um a corrent e por vezes m uit o int ensa em sent ido inverso, para se opor à variação
do fluxo. Est a corrent e, pode danificar o t ransist or que est á a fornecer a corrent e, por isso, um
diodo polarizado inversam ent e deve ser ligado aos t erm inais da bobina, para curt o- circuit ar a
corrent e de rupt ura.

Liga ndo um r e lé a um m icr ocon t r ola dor , a t r a vé s de u m t r a n sist or

65
Muit os m icrocont roladores não conseguem alim ent ar um relé diret am ent e e, assim , é necessário
acrescent ar um t ransist or ao circuit o para obt er a corrent e necessária. Um nível ALTO na base do
t ransist or, faz est e conduzir, at ivado o relé. O relé pode est ar ligado a part ir dos seus cont act os a
qualquer disposit ivo elét ricos. Um a resist ência de 10k lim it a a corrent e na base do t ransist or. A
out ra resist ência de 10k ent re o pino do m icrocont rolador e a m assa, evit a que um ruído na base
do t ransist or faça at uar o relé int em pest ivam ent e. Dest e m odo, só um sinal bem definido
provenient e do m icrocont rolador pode at ivar o relé.

Liga ndo o opt oa copla dor e u m r e lé a um m icr ocon t r ola dor

Um relé pode t am bém ser at ivado at ravés de um opt oacoplador que at ua com o “ buffer” de
corrent e e ao m esm o t em po aum ent a a resist ência de isolam ent o. Est es opt oacopladores capazes
de fornecerem um a corrent e m uit o grande, contêm norm alm ent e um t ransist or ‘Darlingt on’ na
saída.
A ligação at ravés de um opt oacoplador é recom endada especialm ent e em aplicações de
m icrocont roladores que cont rolam m ot ores, j á que o ruído provocado pela at uação dos
com ut adores, pode regressar ao m icrocont rolador at ravés das linhas da alim ent ação. O
opt oacoplador faz at uar o relé e est e at iva o m ot or.
A figura em baixo, é um exem plo de um program a de at ivação do relé e inclui algum as m acros
ant eriorm ent e apresent adas.

66
67
Pr odu zin do u m som
Um diafragm a pizoeléct rico pode ser adicionado a um a linha de saída do m icrocont rolador para se
obt erem t ons, bips e sinais.
É im port ant e saber- se que exist em dois t ipos de disposit ivos pizo em issores de som . Um , cont ém
com ponent es at ivos encont ram - se dent ro do invólucro e só precisam de que lhe sej a aplicada um a
t ensão cont ínua que em it a um t om ou um bip. Geralm ent e os t ons ou bips em it idos por est es
disposit ivos sonoros não podem m udar, pois são fixados pelos respect ivos circuit os int ernos. Não
é est e o t ipo de disposit ivo que vam os discut ir nest e art igo.
O out ro t ipo requer, para que possa funcionar, que lhe sej a aplicado um sinal. Dependendo da
freqüência da form a de onda, a saída pode ser um t om , um a m elodia, um alarm e ou m esm o
m ensagens de voz.
Para o porm os a funcionar, vam os fornecer- lhe um a form a de onda const it uída por níveis Alt o e
Baixo sucessivos. É a m udança de nível ALTO para BAI XO ou de BAI XO para ALTO que faz com
que o diafragm a se m ova para produzir um pequeno som caract eríst ico. A form a de onda pode
corresponder a um a m udança gradual ( onda sinusoidal) ou um a variação rápida ( onda
ret angular) . Um com put ador é um inst rum ent o ideal para produzir um a onda quadrada. Quando
se ut iliza a onda quadrada produz- se um som m ais áspero.

Ligar um diafragm a pizoeléct rico é um a t arefa sim ples. Um pino é ligado à m assa e o out ro à
saída do m icrocont rolador, com o se m ost ra na figura em baixo. Dest e m odo, aplica- se um a form a
de onda ret angular de 5v ao pizo. Para produzir um alt o nível de saída, a form a de onda aplicada
t em que t er um a m aior grandeza, o que requer um t ransist or e um a bobina.

Liga çã o de u m dia fr a gm a pizoe lé ct r ico a um m icr ocon t r ola dor

Com o no caso de um a t ecla, podem os ut ilizar um a m acro que forneça um a ROTI NA BEEP ao
program a, quando for necessário.
BEEP m acro freq, durat ion:
fr e q: freqüência do som . Um núm ero m aior produz um a freqüência m ais alt a.
du r a t ion : duração do som . Quant o m aior o núm ero, m ais longo é o som .
Ex e m plo 1 : BEEP 0xFF, 0x02
Nest e caso, a saída do disposit ivo pizoeléct rico, t em a m aior freqüência possível e a duração de 2
ciclos de 65,3m S o que dá 130,6m S.
Ex e m plo 2 : BEEP 0x90, 0x05
Aqui, a saída do diafragm a pizoeléct rico, t em um a freqüência de 0x90 e um a duração de 5 ciclos
de 65,3m S. É m elhor experim ent ar diversos argum ent os para a m acro e selecionar aquele que
m elhor se aplica.

68
A seguir, m ost ra- se a list agem da Macro BEEP:

O exemplo que se segue, mostra o uso de uma macro num programa. O programa produz duas melodias que são obtidas,
premindo T1 ou T2. Algumas das macros apresentadas anteriormente são utilizadas no programa.

69
70
Re gist r os de de sloca m e n t o
Exist em dois t ipos de regist ros de deslocam ent o: de ent rada paralelo e regist ro de saída paralelo.
Os r e gist r os de de sloca m e n t o de e n t r a da recebem os dados em paralelo, at ravés de 8 linhas
e enviam - nos em série para o m icrocont rolador, at ravés de duas linhas. Os r e gist r os de
de sloca m e n t o de sa ída t rabalham ao cont rário, recebem os dados em série e quando um a linha
é habilit ada esses dados ficam disponíveis em paralelo em oit o linhas. Os regist ros de
deslocam ent o são norm alm ent e usados para aum ent ar o núm ero de linhas de ent rada e de saída
de um m icrocont rolador. At ualm ent e não são t ão usados, j á que os m icrocont roladores m ais
m odernos dispõem de um grande núm ero de linhas de ent rada e de saída. No caso dos
m icrocont roladores PI C16F84, o seu uso pode ser j ust ificado.

Re gist r o de de sloca m e n t o de e n t r a da 7 4 H C5 9 7
Os regist ros de deslocam ent o de ent rada, t ransform am os dados paralelo em dados série e
t ransferem - nos em série para o m icrocont rolador. O m odo de funcionam ent o é m uit o sim ples. São
usadas quat ro linhas para t ransferir os dados: clock , la t ch , loa d e da t a . Os dados são lidos
prim eiro dos pinos de ent rada para um regist ro int erno quando um a linha ‘lat ch’ é at ivada. A
seguir, com um sinal ‘load’ at ivo, os dados passam do regist ro int erno, para o regist ro de
deslocam ent o e, daqui, são t ransferidos para o m icrocont rolador por m eio das linhas ‘dat a’ ( saída
série) e ‘clock’.

O esquem a de ligações do regist ro de deslocam ent o 74HC597 ao m icrocont rolador, m ost ra- se a
seguir:

71
Liga çã o de u m r e gist r o de de sloca m e nt o de e nt r a da pa r a le lo a um m icr ocon t r ola dor
Para sim plificar o program a principal, pode ser usada um a m acro para o regist ro de deslocam ent o
de ent rada paralelo. A m acro HC597 t em dois argum ent os:
HC597 m acro Var, Var1
Va r variável para onde os est ados lógicos dos pinos de ent rada do regist ro de deslocam ent o de
ent rada paralelo, são t ransferidos
Va r 1 cont ador de ciclos
Ex e m plo: HC597 dados, cont ador
Os dados provenient es dos pinos de ent rada do regist ro de deslocam ent o são guardados na
variável dados. O cont ador/ t em porizador é usado com o cont ador de ciclos.
List agem da m acro:

Um exem plo de com o usar a m acro HC597 m ost ra- se no program a seguint e. Nest e program a, é
supost o que o byt e de dados é recebido nas ent radas paralelo do regist ro de deslocam ent o, a
part ir dest e, os bit s saem em série e ent ram no m icrocont rolador onde são guardados na variável
RX. Os LEDs ligados ao Port o B visualizam a palavra de dados.

72
73
Regist ro de deslocam ent o de ent rada paralela

Os regist ros de deslocam ent o de ent rada série e saída paralela, t ransform am dados série em
dados paralelo. Sem pre que ocorre um im pulso ascendent e de clock, o regist ro de deslocam ent o
lê o est ado lógico da linha de dados, guarda- o num regist ro t em porário e repet e oit o vezes est a
operação. Quando a linha ‘lat ch’ é at ivada, os dados são copiados do regist ro de deslocam ent o
para o regist ro de saída ( regist ro lat ch) onde ficam disponíveis em paralelo.

As ligações ent re um regist ro de deslocam ent o 74HC595 e um m icrocont rolador, m ost ram - se no
diagram a em baixo.

Liga çã o de u m r e gist r o de de sloca m e nt o de sa ída pa r a le lo a um m icr ocon t r ola dor

A m acro usada nest e exem plo é o ficheiro hc595.inc e é designada por HC595.

A m acro HC595 t em dois argum ent os:

HC595 m acro Var, Var1

Va r variável cuj o cont eúdo é t ransferido para as saídas do regist ro de deslocam ent o.

Va r 1 cont ador de ciclos ( loops)

Ex e m plo: HC595 Dados, cont ador

O dado que querem os t ransferir, é guardado na variável dados e a variável cont ador é usada
com o cont ador de ciclos.
74
Um exem plo de com o usar a m acro HC595 m ost ra- se no program a que se segue. Os dados
provenient es da variável TX são t ransferidos em série para o regist ro de deslocam ent o. Os LEDs
ligados às saídas paralelo do regist ro de deslocam ent o indicam os níveis lógicos dest as linhas.
Nest e exem plo, é enviado o valor 0xCB ( 1100 1011) e, port ant o, os LEDs ligados aos bit s set e,
seis, t rês, um e zero, vão acender.

75
76
CAPÍ TULO 6
Ex e m plos

D ispla ys de 7 - Se gm e n t os ( m u lt iple x a ge m )

Os segm ent os num display de 7 segm ent os podem ser selecionados de m odo a obt erm os
quaisquer dos caract eres hexadecim ais de 0 a F, um de cada vez, conform e se pode ver na
anim ação:

É possível o visionam ent o de núm eros com vários dígit os, ut ilizando displays adicionais. Em bora
sej a m ais confort ável t rabalhar com displays LCD ( displays de crist al líquido) , os displays de 7
segm ent os cont inuam a const it uir um st andard na indúst ria. I st o devido à sua robust ez em
relação à t em perat ura, visibilidade e am plo ângulo de visão. Os segm ent os são represent ados
pelas let ras m inúsculas: a, b, c, d, e, f, g, dp, em que dp represent a o pont o decim al.

Os 8 LEDs cont idos no display podem est ar dispost os nas configurações de ânodo com um ou de
cát odo com um . Nos displays de cát odo com um , o cát odo com um deve ser ligado à m assa e para
que os leds acendam , é preciso aplicar um a t ensão posit iva aos respect ivos ânodos ( 1 lógico) . Os
displays de ânodo com um apresent am o ânodo com um ligado a + 5V e acendem quando se aplica
um nível lógico zero aos cát odos respect ivos. O t am anho do display é m edido em m ilím et ros, que
corresponde à alt ura do display propriam ent e dit o ( não do encapsulam ent o m as sim do dígit o! ) .
No m ercado, est ão disponíveis displays com t am anho de 7, 10, 13.5, 20 ou 25m m . Podem
t am bém aparecer em diversas cores com o verm elho, laranj a e verde.

A m aneira m ais sim ples de alim ent ar um display é ut ilizando um ‘display driver’. Est es est ão
disponíveis para at é 4 displays.

Alt ernat ivam ent e, os displays podem ser at uados por int erm édio de um m icrocont rolador e, se
necessit arm os de m ais que um display, podem os ut ilizar o m ét odo de ‘m ult iplexagem ’.

A principal diferença ent re est es dois m ét odos, consist e no núm ero de linhas ut ilizadas para fazer
as ligações aos displays. Um ‘driver’ especial, pode necessit ar apenas de um a linha de “ clock” e
será o chip que o cont ém que irá aceder aos segm ent os e increm ent ar o display.

Se o m icrocont rolador for alim ent ar um único display, ent ão apenas serão necessárias 7 linhas ou
m ais um a se ut ilizarm os o pont o decim al. Se ut ilizarm os vários displays, ent ão precisam os de
um a linha adicional para cada display.

Para const ruirm os displays de 4, 5 ou 6 dígit os, devem os ligar em paralelo t odos os displays de 7
segm ent os.

A linha de cát odo com um ( no caso de displays de cát odo com um ) é t rat ada separadam ent e e é
post a a nível baixo durant e um curt o espaço de t em po para acender o display.

Todos os displays devem acender- se sucessivam ent e um após out ro e, est e processo, deve
repet ir- se cerca de 100 vezes por segundo, fazendo com que t odos os displays acesos em
sim ult âneo.

Sem pre que um display é selecionado, e para que a leit ura sej a carret a, o dado correspondent e a
esse display deve est ar disponível nas linhas que vão ligar aos segm ent os. At é 6 displays podem
ser acedidos dest e m odo, sem que o brilho desses displays sej a afet ado. Cada display é at ivado

77
durant e um sext o do t em po com bast ant e int ensidade e, a persist ência da im agem nos nossos
olhos, faz parecer que t odos os displays est ão t odos acesos ao m esm o t em po.

As t em porizações de t odos os sinais dest inados aos displays são produzidas pelo program a, a
grande vant agem de ser o m icrocont rolador a lidar com os displays, é a sua flexibilidade.

O program a do m icrocont rolador pode ser concebido para obt erm os um a cont agem crescent e ou
decrescent e no display, ou para produzir um cert o núm ero de m ensagens usando let ras do
alfabet o que são geradas facilm ent e.

O exem plo em baixo, m ost ra com o at ivar dois displays.

Liga ndo um m icr ocon t r ola dor a displa ys de 7 se gm e n t os n o m odo m u lt iple x a do

O ficheiro Led.inc cont ém duas m acros: LED_I nit e LED_Disp2. A prim eira m acro é usada para
iniciação do display. É nela que o período de refrescam ent o do display é definido bem com o quais
os pinos do m icrocont rolador que vão ser ligados aos displays. A segunda m acro é usada para
visualizar os núm eros de 0 a 99 nos dois displays.

A m acro LED_Disp2 t em um argum ent o:

LED_Disp2 m acro núm ero

num ero é o núm ero de 0 a 99 que vai ser m ost rado nos dígit os MSD e LSD.

Ex e m plo: LED_Disp2 0x34

Nest e caso, vai aparecer o núm ero 34 nos displays.

Nest e caso, o núm ero 34, vai aparecer nos dois displays

A im plem ent ação da m acro m ost ra- se na list agem que se segue.

78
79
O program a que se segue, exem plifica a ut ilização de m acros num program a. Est e program a faz
aparecer o núm ero ‘21’ nos dois displays de 7 segm ent os.

DI SPLAY LCD

Cada vez m ais os m icrocont roladores est ão a usar ‘displays de crist al líquido - LCD’ para
visualizarem a saída de dados. A discussão que se segue diz respeit o à ligação de um displa y
LCD H it a ch i a um m icrocont rolador PI C. Est es displays LCD são baseados no m ódulo de LCD
HD44780 da Hit achi, são barat os, fáceis de usar e perm it em ut ilizar os 8x80 pixels de display.
Est es displays LCD cont êm um conj unt o de caract eres ASCI I st andard e ainda caract eres
j aponeses, gregos e sím bolos m at em át icos.

D ispla y H it a ch i H D 4 4 7 8 0 de dua s lin ha s com 1 6 ca r a ct e r e s por lin h a

Cada um dos 640 pixels do display, podem ser acedidos individualm ent e, est a t arefa é execut ada
por chips de cont role m ont ados em superfície, na part e det rás do display.

I st o perm it e- nos poupar um a enorm e quant idade de fios e linhas de cont role, de t al m aneira que,
at ravés de poucas linhas é possível fazer a ligação do display ao m undo ext erior. É possível
com unicar com o ext erior at ravés de um bus de 8 bit s ou m esm o at ravés de um bus de dados de
apenas 4 bit s.

80
No caso de escolherm os um bus de dados de 8 bit s, o display requer um a alim ent ação de + 5V
m ais 11 linhas de ent rada e saída. Se opt arm os pelo bus de dados de 4 bit s, apenas precisam os
de 7 linhas m ais a alim ent ação. Quando o display LCD não est á habilit ado, as linhas de dados
t rist at e assum em o est ado de alt a im pedância ( com o se est ivessem desligadas do circuit o) o que
significa que não int erferem com o funcionam ent o do m icrocont rolador.

O LCD t am bém requer do m icrocont rolador m ais 3 linhas de “ cont role” .

A linha En a ble ( E) perm it e a at ivação do display e a ut ilização das linhas R/ W e RS. Quando a
linha de habilit ar ( Enable) est á a nível baixo, o LCD fica inibido e ignora os sinais R/ W e RS.
Quando ( E) est á a nível alt o, o LCD verifica os est ados das duas linhas de cont role e reage de
acordo com est es.

A linha Re a d.W r it e ( ) det erm ina o sent ido dos dados ent re o m icrocont rolador e o LCD. Quando
est á a nível baixo, os dados est ão a ser escrit os no LCD. Quando est á a nível alt o, os dados est ão
a ser lidos do LCD.

Com a aj uda da linha de Se le çã o de r e gist r o ( RS) , o LCD int erpret a o t ipo de dados present es
nas linhas de dados. Quando est á a nível baixo, est á a ser escrit a um a inst rução no LCD. Quando
est á a nível alt o é um caract er que est á a ser escrit o no LCD.

Est ado lógico nas linhas de cont role:

E 0 Acesso ao LCD inibido

1 Acesso ao LCD habilit ado

R/ W 0 Escrever dados no LCD

1 Ler dados do LCD

RS 0 I nst rução

1 Caract er

A escrit a dos dados no LCD, é feit a em várias et apas:

Pôr o bit R/ W a nível baixo

Pôr o bit RS a nível lógico 0 ( inst rução) ou a nível lógico 1 ( caract er)

Colocar o dado na linha de dados ( se for um a operação de escrit a)

Pôr a linha E a nível alt o

Pôr a linha E a nível baixo

Ler o dado das linhas de dados ( no caso de um a operação de leit ura)

A leit ura de dados do LCD é feit a da m esm a m aneira, m as a linha de cont role t em que est ar a
nível alt o. Ant es de enviarm os com andos ou dados para o m ódulo LCD, est e t em que ser
iniciado. Com andos t ípicos enviados depois de um reset podem ser: at ivar um display, visualizar
um cursor e escrever os caract eres da esquerda para a direit a.

Depois de iniciado o LCD, ele fica pront o para cont inuar a receber dados ou com andos. Se receber
um caract er, ele escreve- o no display e m ove o cursor um espaço para a direit a. O cursor m arca o
81
local onde o próxim o caract er vai ser escrit o. Quando querem os escrever um a cadeia de
caract eres, prim eiro necessit am os de est abelecer um endereço de início e depois enviar os
caract eres, um de cada vez. Os caract eres que podem ser m ost rados no display est ão guardados
na RAM de display de dados ( DD) . O t am anho da DDRAM é de 80 byt es.

O display LCD t am bém possui 64 byt es de RAM Geradora de Caract eres ( CG) . Os dados na RAM
CG represent am caract eres num m apa de 8 bit s.

Cada caract er gast a at é 8 byt es de RAM geradora de caract eres, assim , o núm ero t ot al de
caract eres que podem ser definidos pelo ut ilizador pode ir at é oit o. De m odo a ler o m apa de bit s
de caract eres no display LCD, t em os prim eiro que est abelecer o endereço de início na CGRAM ( 0
geralm ent e) e, a seguir, escrever dados no display. A definição de caract er ‘especial’ m ost ra- se
na figura ao lado.

Depois de definirm os um caract er especial e ant es de acederm os à RAM DD, o program a t em que
apont ar para o endereço da RAM DD. Escrever e ler dados de ou para a m em ória LCD faz- se a
part ir do últ im o endereço que é est abelecido usando a inst rução set - address ( definir endereço) .
Um a vez fixado o endereço da RAM DD, um novo caract er pode ser visualizado no local apropriado
do écran.

At é agora, encaram os as operações de escrit a ou leit ura relat ivam ent e a um LCD com o se est as
incidissem sobre um a m em ória norm al. Mas não é dist o que se t rat a. O cont rolador do LCD
precisa de 40 a 120 m icrossegundos ( µs) para ler e escrever. Out ras operações podem dem orar
at é 5m S. Durant e est e período de t em po, o m icrocont rolador não pode aceder ao LCD, assim ,
num program a, é preciso saber quando o LCD est á ocupado. Podem os resolver est e problem a de
duas m aneiras.

82
Um a m aneira, é verificar o bit BUSY que coincide com a linha de dados D7. Est e não é, cont udo, o
m elhor m ét odo porque o LCD pode bloquear e o program a perm anecer para sem pre num loop de
verificação do bit BUSY. A out ra m aneira, é int roduzir um t em po de espera no program a. Est e
período de t em po deve ser suficient em ent e longo para perm it ir que o LCD t erm ine a operação. As
inst ruções dest inadas a ler ou escrever na m em ória de um LCD, m ost ram - se na t abela ant erior.

No princípio, dissem os que eram precisas 11 linhas de ent rada e saída para com unicar com um
LCD. Cont udo, t am bém é possível com unicar com um LCD, at ravés de um bus de dados de
apenas 4 bit s. Dest e m odo, é possível reduzir para set e o t ot al de linhas de com unicação. Um a
ligação, at ravés de um bus de dados de 4 bit s, m ost ra- se no diagram a em baixo. Nest e
exem plo, nós usam os um display LCD com 2x16 caract eres e que o fabricant e j aponês SHARP
designa por LM16X212. A m ensagem ‘charact er’ é escrit a na prim eira linha e dois caract eres
especiais ‘~ ’ e ‘} ’ são t am bém m ost rados. Na segunda linha, est á a palavra ‘m ikroElekt ronika’.

Liga çã o de u m displa y LCD a um m icr ocon t r ola dor

O ficheiro LCD .in c cont ém um grupo de m acros para ut ilizarm os quando t rabalham os com
displays LCD.

83
84
85
M a cr os pa r a LCD

LCD in it m acro usada para iniciar o port o a que o LCD est á ligado. O LCD é configurado para
t rabalhar no m odo de 4 bit s.

Ex e m plo: LCDinit

LCD cha r LCD a r g Escrever caract er ASCI I . O argum ent o é o caract er ASCI I .

Ex e m plo: LCDChar ‘d’

LCD w Escrever o caract er correspondent e ao cont eúdo do regist ro W.

Ex e m plo: m ovlw ‘p'

LCD w

LCD cm d LCD com m a nd Enviar com andos

Ex e m plo: LCDcm d LCDCH

LCD _ D D Adr D D Ra m Addr e ss Apont ar o endereço da DDRAM

Ex e m plo: LCD_DDAdr .3

LCD line line _ n um Colocar o cursor no início da prim eira ou da segunda linha

Ex e m plo: LCDline 2

Quando se t rabalha com um m icrocont rolador os núm eros são t rat ados na form a binária.

Com o t al, é difícil apresent á- los num display. É por isso que é necessário convert er esses
núm eros do sist em a binário para o sist em a decim al, de m odo a que possam ser facilm ent e
ent endidos. A seguir, apresent am - se as list agens de duas m acros LCD va l_ 0 8 e LCD va l_ 1 6 .

A m acro LCD va l_ 0 8 convert e um núm ero binário de oit o bit s num núm ero decim al ent re 0 e 255
e m ost ra o result ado num display LCD. É necessário declarar as seguint es variáveis no program a
principal: TEMP1, TEMP2, LO, LO_TEMP, Bcheck. O núm ero binário de oit o bit s é guardado na
variável LO. Quando a m acro é execut ada, o equivalent e decim al dest e núm ero vai ser m ost rado
no display LCD. Os zeros à esquerda não irão ser m ost rados.

86
A m acro LCD va l_ 1 6 convert e um núm ero binário de 16 bit s num núm ero decim al ent re 0 e
65535 e m ost rando- o no display LCD. As seguint es variáveis necessit am de ser declaradas no
program a principal: TEMP1, TEMP2, TEMP3, LO, HI , LO_TEMP, HI _TEMP, Bcheck. O núm ero
binário de 16 bit s, ocupa as variáveis LO e HI . Quando a m acro for execut ada, o equivalent e
decim al do núm ero será apresent ado no display LCD. Os zeros à esquerda do núm ero não são
m ost rados.

87
O program a principal dem onst ra com o usar o display LCD e gerar novos caract eres. No início do
program a, nós necessit am os de declarar as variáveis LCD buf e LCD t e m p usadas pelos
subprogram as para o LCD, bem com o o port o do m icrocont rolador a que o LCD vai ser ligado.

88
O program a escreve a m ensagem ‘charact ers: ’ na prim eira linha e apresent a t am bém dois
caract eres especiais ‘~ ’ e ‘} ’. Na segunda linha m ost ra- se ‘m ikroElekt ronika’.

89
Conversor Analógico- Digit al de 12 bit s

Se t udo no m undo dos m icrocont roladores é represent ado por “ 0’s" e “ 1’s" , com o é que chegam os
a um sinal igual a por exem plo 0,5 ou 0,77?

Part e do m undo ext erior a um com put ador consist e em sinais áudio. Além da fala e da m úsica,
exist em m uit as out ras grandezas que necessit am de ser int roduzidas num com put ador.
Hum idade, t em perat ura, pressão at m osférica, cor e níveis de m et anos são out ros exem plos.

A respost a é usar um conj unt o de linhas digit ais e j unt á- las de m odo a que elas possam “ ler” um
valor analógico. Um valor analógico é qualquer valor e n t r e 0 e 1. Tam bém se lhe pode cham ar
um “ valor fracionário” . Todas as grandezas necessit am de ser convert idas em valores ent re 0 e 1
de m odo a poderem ent rar num com put ador.

Trat a- se de um conceit o lat o. Que se t orna um pouco m ais com plexo quando t em que ser
aplicado.

Se t om arm os 8 linhas e fizerm os com que est as aceit em valores binários, a cont agem t ot al será
256 ( o que corresponde à cont agem at é 255 m ais o valor 0) .

Se j unt arm os est as 8 linhas num a “ caixa pret a” , elas passarão a ser designadas com o linhas de
saída e, assim , t em os que arranj ar um a linha de ent rada. Com est a configuração, nós podem os
det ect ar 255 increm ent os ent re zero e “ 1” . Est a caixa pret a é designada por CONVERSOR e,
com o est am os a convert er um valor Analógico num D igit al, o conversor é designado por
con ve r sor a na lógico- digit a l ou AD C ( Analog D igit al Convert er) .

Os conversores analógicos – digit ais podem ser classificados de acordo com diferent es
parâm et ros. Os parâm et ros m ais im port ant es são a r e solu çã o e o m odo de t r a n sfe r ir da dos.
Quando falam os de resolução, encont ram os conversores de 8 bit s, 10 bit s, 12 bit s, 14 bit s e 16
bit s. Com o os conversores de 12 bit s const it uem um st andard na indúst ria, o exem plo que vam os
analisar diz respeit o a um ADC de 12 bit s. O out ro parâm et ro im port ant e é o m odo com o os dados
são t ransferidos para um m icrocont rolador. A t ransferência pode fazer- se em série ou em
paralelo. A t ransm issão em paralelo é m ais rápida. Cont udo, est es conversores são norm alm ent e
m ais caros. A t ransm issão série é m ais lent a, m as é m ais barat a e ocupa m enos linhas do
m icrocont rolador, por isso, é a favorit a em m uit as aplicações.

A grandeza de um sinal analógico pode, m uit as vezes, ult rapassar o lim it e perm it ido num
conversor ADC. I st o pode danificar o conversor. Para prot eger a ent rada, dois diodos est ão ligados
com o se m ost ra no diagram a. Est a m ont agem , vai prot eger a ent rada do conversor, de t ensões
acim a de 5v e abaixo de 0v.

No nosso exem plo, nós usam os um conversor ADC de 12 bit s que é o LTC1286 ( Linear
Technology) . O conversor est á ligado ao m icrocont rolador at ravés de t rês linhas: dat a, clock e CS
( chip select - seleção de chip) . A linha CS é usada para selecionar um disposit ivo de ent rada, que
é possível selecionar out ros disposit ivos ( t ais com o: regist ro de deslocam ent o de ent rada, regist ro
de deslocam ent o de saída, conversor analógico digit al série) para ligar ao m icrocont rolador e
perm it ir usar as m esm as linhas de dados.

O circuit o em baixo, m ost ra com o ligar um conversor ADC, um a referência e um display LCD a
um m icrocont rolador. O display LCD foi adicionado para m ost rar o result ado da conversão AD.

90
Liga çã o de u m con ve r sor AD com volt a ge m de r e fe r ê n cia a um m icr ocon t r ola dor

A Macro usada nest e exem plo, cham a- se LTC86 e encont ra- se no ficheiro LTC1286.inc .

91
92
A Macro LTC86 t em t rês argum ent os:

LTC m acro Var_LO, Var_HT, Var

A variável Va r _ LO é onde o byt e m e nos sign ifica t ivo da conve r sã o é guardado

A variável Va r _ H I é onde o byt e m a is sign ifica t ivo da con ve r sã o é guardado

Va r cont ador de ciclos

Ex e m plo: LTC86 LO, HI , Count

Os quat ro bit s do valor m ais alt o est ão na variável H I e os oit o bit s m enos significat ivos da
conversão est ão na variável LO. Cou n t é um a variável auxiliar para cont ar o núm ero de
passagens no ciclo.

O exem plo que se segue, m ost ra com o as m acros são usadas no program a. O program a lê o
valor de um conversor ADC e m ost ra- o num display LCD. O result ado é dado em degraus. I st o é,
para 0V, o result ado é 0 e para 5V é 4095.

93
94
Com unicação Série

SCI é a abreviat ura para Serial Com m unicat ion I nt erface ( I nt erface de Com unicação Série) e
exist e na m aioria dos m icrocont roladores. No caso do PI C16F84 o SCI não est á disponível em
hardware, m as pode ser im plem ent ado por soft ware.

Tal com o no caso da com unicação im plem ent ada por hardware, nós vam os usar o st andard NRZ
( Não Ret orno a Zero) e o form at o conhecido por 8 ( 9) - N- 1, ou sej a, 8 ou 9 bit s de dados, sem bit
de paridade e com um bit de st op. No caso de lin h a livr e ( sem est ar a t ransm it ir dados) o est ado
é de n íve l lógico ‘u m ’. O início de t ransm issão ou bit de in ício ( St art Bit ) , t em o n íve l lógico
ze r o. Os bit s que se seguem ao bit de início são os bit s de dados ( o prim eiro bit é o m enos
significat ivo) e, finalm ent e, aparece o bit de st op que t em o n íve l lógico ‘u m ’. A duração do bit
de st op ‘T’ depende da velocidade de t ransm issão e é aj ust ada de acordo com as necessidades da
t ransm issão. Para um a t ransm issão à velocidade de 9600 bauds, T t em o valor de 104µS.

D e signa çõe s dos pinos no cone ct or RS2 3 2

Para poderm os ligar um m icrocont rolador a um port o série de um com put ador PC, nós precisam os
aj ust ar o nível dos sinais, só assim a com unicação poderá t er lugar. O nível do sinal num PC, é de
- 10V para o nível lógico um e + 10V para nível lógico zero. Com o os níveis lógicos num
m icrocont rolador são de + 5V para o nível lógico um e 0V para o nível lógico zero, nós precisam os
de um andar int erm édio para convert er est es níveis. Um circuit o int egrado proj et ado
especialm ent e para execut ar est e t rabalho, é o MAX232. Est e circuit o int egrado recebe sinais de –
10 e + 10V e convert e- os em 5V e 0 V, respect ivam ent e.

O circuit o para est e int erface, m ost ra- se no diagram a em baixo:

95
Liga çã o de u m m icr ocon t r ola dor a um PC u t iliza n do o CI de in t e r fa ce M AX2 3 2

O ficheiro RS232.inc cont ém um grupo de m acros usadas na com unicação série.

96
97
Ut ilização das m acros:

RS2 3 2 in it Macro para iniciar o pino RB0 com o linha de t ransm issão de dados ( pino – TX) .

Ex e m plo: RS232init

SEN D S_ st r in g Para enviar um caract er ASCI I . O argum ent o é o caract er ASCI I

Ex e m plo: SEND ‘g’

SEN D w Enviar o dado cont ido no regist ro W.

Ex e m plo:

m ovlw ‘t ’

SENDw

RECEI VE m acro na rot ina de int errupção, recebe dados pelo int erface RS232 e guarda- os no
regist ro RXD

Ex e m plo:

No início do program a principal, nós necessit am os de declarar as variáveis RS_TEMP1, RE_TEMP2,


TXD, RXD e o pino TX no m icrocont rolador. Depois de fazer o reset do m icrocont rolador o
program a envia um a m ensagens de boas- vindas para o com put ador PC: $ PI V1 6 F8 4 na lin h a $
e est á pront o para receber dados at ravés da linha RX.
Nós podem os enviar e receber dados de e para o com put ador PC at ravés de um program a de
com unicações. Quando o m icrocont rolador recebe um dado, ele devolve um a m ensagem para o
m onit or: Caract er recebido do PI C16F84: x, confirm ando que a recepção t eve sucesso.

Program a principal:

98
99
Apê n dice A
Con j u n t o de I n st r u çõe s
• • • •
• • • •
A.1 MOVLW A.10 SUBWF A.19 RLF A.28 GOTO

• • • •
A.2 MOVWF A.11 ANDLW A.20 RRF A.29 CALL

• • • •
A.3 MOVF A.12 ANDWF A.21 COMF A.30 RETURN

• • • •
A.4 CLRW A.13 I ORLW A.22 BCF A.31 RETLW

• • • •
A.5 CLRF A.14 I ORWF A.23 BSF A.32 RETFI E

• • • •
A.6 SWAPF A.15 XORLW A.24 BTFSC A.33 NOP

• • •
A.7 ADDLW A.16 XORWF A.25 BTFSS A.34

• • • •
A.8 ADDWF A.17 I NCF A.26 I NCFSZ CLRWDT
A.9 SUBLW A.18 DECF A.27 DECFSZ A.35 SLEEP

A.1 MOVLW Escrever constante no registro W

Sin t a x e : [ rót ulo] MOVLW k

k⇒(W)
D e scr içã o: A const ant e de 8- bit s k vai para o regist ro W .
Ope r a çã o:
Ope r a ndo: 0 ≤ k ≤ 255
Fla g: -
N ú m e r o de
1
pa la vr a s:
N ú m e r o de ciclos: 1
Ex e m plo 1 : MOVLW 0x5A
Depois da inst rução: W= 0x5A
Ex e m plo 2 : MOVLW REGI STAR
Ant es da inst rução: W = 0x10 e REGI STAR = 0x40
Depois da inst rução: W = 0x40

A.2 MOVWF Copiar W para f

Sin t a x e : [ rót ulo] MOVWF f

W⇒(f)
D e scr içã o: O cont eúdo do regist ro W é copiado para o regist ro f
Ope r a çã o:
Ope r a ndo: 0 ≤ f ≤ 127
Fla g: -
N ú m e r o de
1
pa la vr a s:
N ú m e r o de ciclos: 1
Ex e m plo 1 : MOVWF OPTI ON_REG
Ant es da inst rução: OPTI ON_REG = 0x20
W = 0x40
Depois da inst rução: OPTI ON_REG = 0x40
W = 0x40
Ex e m plo 2 : MOVWF I NDF
Ant es da inst rução: W = 0x17
FSR = 0xC2

100
Cont eúdo do endereço 0xC2 = 0x00
Depois da inst rução: W = 0x17
FSR = 0xC2
Cont eúdo do endereço 0xC2 = 0x17

A.3 MOVF Copiar f para d

Sin t a x e : [ rót ulo] MOVF f, d


D e scr içã o: O cont eúdo do regist ro f é guardado no local det erm inado pelo
operando d
Se d = 0 , o dest ino é o regist ro W
Se d = 1 , o dest ino é o próprio regist ro f
A opção d = 1 , é usada para t est ar o cont eúdo do regist ro f, porque a

f⇒(d)
execução dest a inst rução afet a a flag Z do regist ro STATUS.
Ope r a çã o:
Ope r a ndo: 0 ≤ f ≤ 127, d ∈ [0, 1]
Fla g: Z
N ú m e r o de
1
pa la vr a s:
N ú m e r o de ciclos: 1
Ex e m plo 1 : MOVF FSR, 0
Ant es da inst rução: FSR = 0xC2
W = 0x00
Depois da inst rução: W = 0xC2
Z = 0
Ex e m plo 2 : MOVF I NDF, 0
Ant es da inst rução: W = 0x17
FSR = 0xC2
cont eúdo do endereço 0xC2 = 0x00
Depois da inst rução: W = 0x00
FSR = 0xC2
cont eúdo do endereço 0xC2 = 0x00
Z = 1

A.4 CLRW Escrever 0 em W

Sin t a x e : [ rót ulo] CLRW


D e scr içã o: O cont eúdo do regist ro W passa para 0 e a flag Z do regist ro STATUS

0⇒(W)
t om a o valor 1.
Ope r a çã o:
Ope r a ndo: -
Fla g: Z
N ú m e r o de
1
pa la vr a s:
N ú m e r o de ciclos: 1
Ex e m plo: CLRW
Ant es da inst rução: W = 0x55

101
Depois da inst rução: W = 0x00
Z = 1

A.5 CLRF Escrever 0 em f

Sin t a x e : [ rót ulo] CLRF f


D e scr içã o: O cont eúdo do regist ro ‘f’ passa para 0 e a flag Z do regist ro STATUS

0⇒f
t om a o valor 1.
Ope r a çã o:
Ope r a ndo: 0 ≤ f ≤ 127
Fla g: Z
N ú m e r o de
1
pa la vr a s:
N ú m e r o de ciclos: 1
Ex e m plo 1 : CLRF STATUS
Ant es da inst rução: STATUS = 0xC2
Depois da inst rução: STATUS = 0x00
Z = 1
Ex e m plo 2 : CLRF I NDF
Ant es da inst rução: FSR = 0xC2
cont eúdo do endereço 0xC2 = 0x33
Depois da inst rução: FSR = 0xC2
cont eúdo do endereço 0xC2 = 0x00
Z = 1

A.6 SW APF Copia r o con t e ú do de f pa r a d, t r oca n do a posiçã o dos


4 pr im e ir os bit s com a dos 4 ú lt im os

Sin t a x e : [ rót ulo] SWAPF f, d


D e scr içã o: Os 4 bit s + significat ivos e os 4 bit s – significat ivos de f, t rocam de
posições.
Se d = 0 , o result ado é guardado no regist ro W
Se d = 1 , o result ado é guardado no regist ro f
Ope r a çã o: f <0:3>⇒ d <4:7>, f <4:7>⇒ d <0:3>,
Ope r a ndo: 0 ≤ f ≤ 127, d ∈ [0, 1]
Fla g: -
N ú m e r o de
1
pa la vr a s:
N ú m e r o de ciclos: 1
Ex e m plo 1 : SWAPF REG, 0
Ant es da inst rução: REG = 0xF3
Depois da inst rução: REG = 0xF3
W = 0x3F
Ex e m plo 2 : SWAPF REG, 1
Ant es da inst rução: REG = 0xF3
Depois da inst rução: REG = 0x3F

102
A.7 ADDLW Adicionar W a uma constante

Sin t a x e : [ rót ulo] ADDLW k


D e scr içã o: O cont eúdo do regist ro W , é adicionado à const ant e de 8- bit s k e o

(W)+k⇒W
result ado é guardado no regist ro W .
Ope r a çã o:
Ope r a ndo: 0 ≤ k ≤ 255
Fla g: C, D C, Z
N ú m e r o de
1
pa la vr a s:
N ú m e r o de ciclos: 1
Ex e m plo 1 : ADDLW 0x15
Ant es da inst rução: W= 0x10
Depois da inst rução: W= 0x25
Ex e m plo 2 : ADDLW REG
Ant es da inst rução: W = 0x10
REG = 0x37
Depois da inst rução: W = 0x47

A.8 ADDWF Adicionar W a f

Sin t a x e : [ rót ulo] ADDWF f, d


D e scr içã o: Adicionar os cont eúdos dos regist ros W e f
Se d= 0 , o result ado é guardado no regist ro W

(W) + ( f ) ⇒ d, d ∈ [0, 1]
Se d= 1 , o result ado é guardado no regist ro f
Ope r a çã o:
Ope r a ndo: 0 ≤ f ≤ 127
Fla g: C, D C, Z
N ú m e r o de
1
pa la vr a s:
N ú m e r o de ciclos: 1
Ex e m plo 1 : ADDWF FSR, 0
Ant es da inst rução: W = 0x17
FSR = 0xC2
Depois da inst rução: W = 0xD9
FSR = 0xC2
Ex e m plo 2 : ADDWF I NDF,0
Ant es da inst rução: W = 0x17
FSR = 0xC2
cont eúdo do endereço 0xC2 = 0x20
Depois da inst rução: W = 0x37
FSR = 0xC2
Cont eúdo do endereço 0xC2 = 0x20

103
A.9 SUBLW Subtrair W a uma constante

Sin t a x e : [ rót ulo] SUBLW k


D e scr içã o: O cont eúdo do regist ro W , é subt raído à const ant e k e, o result ado, é

k-(W)⇒W
guardado no regist ro W .
Ope r a çã o:
Ope r a ndo: 0 ≤ k ≤ 255
Fla g: C, D C, Z
N ú m e r o de
1
pa la vr a s:
N ú m e r o de ciclos: 1
Ex e m plo 1 : SUBLW 0x03
Ant es da inst rução: W= 0x01, C = x, Z = x
Depois da inst rução: W= 0x02, C = 1, Z = 0 Result ado > 0
Ant es da inst rução: W= 0x03, C = x, Z = x
Depois da inst rução: W= 0x00, C = 1, Z = 1 Result ado = 0
Ant es da inst rução: W= 0x04, C = x, Z = x
Depois da inst rução: W= 0xFF, C = 0, Z = 0 Result ado < 0
Ex e m plo 2 : SUBLW REG
Ant es da inst rução: W = 0x10
REG = 0x37
Depois da inst rução: W = 0x27
C= 1 Result ado > 0

A.10 SUBWF Subtrair W a f

Sin t a x e : [ rót ulo] SUBWF f, d


D e scr içã o: O cont eúdo do regist ro W é subt raído ao cont eúdo do regist ro f
Se d= 0 , o result ado é guardado no regist ro W

( f ) - (W) ⇒ d
Se d= 1 , o result ado é guardado no regist ro f
Ope r a çã o:
Ope r a ndo: 0 ≤ f ≤ 127, d ∈ [0, 1]
Fla g: C, D C, Z
N ú m e r o de
1
pa la vr a s:
N ú m e r o de ciclos: 1
Ex e m plo: SUBWF REG, 1
Ant es da inst rução: REG= 3, W= 2, C = x, Z = x
Depois da inst rução: REG= 1, W= 2, C = 1, Z = 0 Result ado
> 0
Ant es da inst rução: REG= 2, W= 2, C = x, Z = x
Depois da inst rução: REG= 0, W= 2, C = 1, Z = 1 Result ado
= 0
Ant es da inst rução: REG= 1, W= 2, C = x, Z = x
Depois da inst rução: REG= 0xFF, W= 2, C = 0, Z = 0 Result ado
< 0

104
A.11 ANDLW Fazer o “E” lógico de W com uma constante

Sin t a x e : [ rót ulo] ANDLW k


D e scr içã o: É execut ado o “ E” lógico do cont eúdo do regist ro W , com a const ant e k

( W ) .AND. k ⇒ W
O result ado é guardado no regist ro W .
Ope r a çã o:
Ope r a ndo: 0 ≤ k ≤ 255
Fla g: Z
N ú m e r o de
1
pa la vr a s:
N ú m e r o de ciclos: 1
Ex e m plo 1 : ANDLW 0x5F
Ant es da inst rução: W= 0xA3 ; 0101 1111 ( 0x5F)
; 1010 0011 ( 0xA3)
Depois da inst rução: W= 0x03; 0000 0011 ( 0x03)
Ex e m plo 2 : ANDLW REG
Ant es da inst rução: W = 0xA3 ; 1010 0011 ( 0xA3)
REG = 0x37 ; 0011 0111 ( 0x37)
Depois da inst rução: W = 0x23 ; 0010 0011 ( 0x23)

A.12 ANDWF Fazer o “E” lógico de W com f

Sin t a x e : [ rót ulo] ANDWF f, d


D e scr içã o: Faz o “ E” lógico dos cont eúdos dos regist ros W e f
Se d= 0 , o result ado é guardado no regist ro W

(W) .AND. ( f ) ⇒ d
Se d= 1 , o result ado é guardado no regist ro f
Ope r a çã o:
Ope r a ndo: 0 ≤ f ≤ 127, d ∈ [0, 1]
Fla g: Z
N ú m e r o de
1
pa la vr a s:
N ú m e r o de ciclos: 1
Ex e m plo 1 : ANDWF FSR, 1
Ant es da inst rução:W= 0x17, FSR= 0xC2; 0001 1111 ( 0x17)
; 1100 0010 ( 0xC2)
Depois da inst rução: W= 0x17, FSR= 0x02 ; 0000 0010 ( 0x02)
Ex e m plo 2 : ANDWF FSR, 0
Ant es da inst rução: W= 0x17, FSR= 0xC2; 0001 1111 ( 0x17)
; 1100 0010 ( 0xC2)
Depois da inst rução: W= 0x02, FSR= 0xC2; 0000 0010 ( 0x02)

A.13 IORLW Fazer o “OU” lógico de W com uma constante

Sin t a x e : [ rót ulo] I ORLW k


D e scr içã o: É execut ado o “ OU” lógico do cont eúdo do regist ro W , com a const ant e
105
( W ) .OR. k ⇒ W
de 8 bit s k , o result ado é guardado no regist ro W .
Ope r a çã o:
Ope r a ndo: 0 ≤ k ≤ 255
Fla g: Z
N ú m e r o de
1
pa la vr a s:
N ú m e r o de ciclos: 1
Ex e m plo 1 : I ORLW 0x35
Ant es da inst rução: W= 0x9A
Depois da inst rução: W= 0xBF
Z= 0
Ex e m plo 2 : I ORLW REG
Ant es da inst rução: W = 0x9A
cont eúdo de REG = 0x37
Depois da inst rução: W = 0x9F
Z = 0

A.14 IORWF Fazer o “OU” lógico de W com f

Sin t a x e : [ rót ulo] I ORWF f, d


D e scr içã o: Faz o “ OU” lógico dos cont eúdos dos regist ros W e f
Se d= 0 , o result ado é guardado no regist ro W

(W) .OR. ( f ) ⇒ d
Se d= 1 , o result ado é guardado no regist ro f
Ope r a çã o:
Ope r a ndo: 0 ≤ f ≤ 127, d ∈ [0, 1]
Fla g: Z
N ú m e r o de
1
pa la vr a s:
N ú m e r o de ciclos: 1
Ex e m plo 1 : I ORWF REG, 0
Ant es da inst rução: REG= 0x13, W= 0x91
Depois da inst rução: REG= 0x13, W= 0x93
Z= 0
Ex e m plo 2 : I ORWF REG, 1
Ant es da inst rução: REG= 0x13, W= 0x91
Depois da inst rução: REG= 0x93, W= 0x91
Z= 0

A.15 XORLW “OU- EXCLUSIVO” de W com uma constante

Sin t a x e : [ rót ulo] XORLW k


D e scr içã o: É execut ada a operação “ OU- Exclusivo” do cont eúdo do regist ro W ,

( W ) .XOR. k ⇒ W
com a const ant e k . O result ado é guardado no regist ro W .
Ope r a çã o:
Ope r a ndo: 0 ≤ k ≤ 255
Fla g: Z
N ú m e r o de 1
106
pa la vr a s:
N ú m e r o de ciclos: 1
Ex e m plo 1 : XORLW 0xAF
Ant es da inst rução: W= 0xB5 ; 1010 1111 ( 0xAF)
; 1011 0101 ( 0xB5)
Depois da inst rução: W= 0x1A; 0001 1010 ( 0x1A)
Ex e m plo 2 : XORLW REG
Ant es da inst rução: W = 0xAF ; 1010 1111 ( 0xAF)
REG = 0x37 ; 0011 0111 ( 0x37)
Depois da inst rução: W = 0x98 ; 1001 1000 ( 0x98)
Z = 0

A.16 XORWF “OU-EXCLUSIVO” de W com f

Sin t a x e : [ rót ulo] XORWF f, d


D e scr içã o: Faz o “ OU- EXCLUSI VO” dos cont eúdos dos regist ros W e f
Se d= 0 , o result ado é guardado no regist ro W

(W) .XOR. ( f ) ⇒ d
Se d= 1 , o result ado é guardado no regist ro f
Ope r a çã o:
Ope r a ndo: 0 ≤ f ≤ 127, d ∈ [0, 1]
Fla g: Z
N ú m e r o de
1
pa la vr a s:
N ú m e r o de ciclos: 1
Ex e m plo 1 : XORWF REG, 1
Ant es da inst rução: REG= 0xAF, W= 0xB5 ; 1010 1111
( 0xAF)
; 1011 0101 ( 0xB5)
Depois da inst rução: REG= 0x1A, W= 0xB5 001 1010
( 0x1A)
Ex e m plo 2 : XORWF REG, 0
Ant es da inst rução: REG= 0xAF, W= 0xB5; 1010 1111
( 0xAF)
; 1011 0101 ( 0xB5)
Depois da inst rução: REG= 0xAF, W= 0x1A ; 0001 1010
( 0x1A)

A.17 INCF Incrementar f

Sin t a x e : [ rót ulo] I NCF f, d


D e scr içã o: I ncrem ent ar de um a unidade, o cont eúdo do regist ro f.
Se d= 0 , o result ado é guardado no regist ro W

(f)+1⇒ d
Se d= 1 , o result ado é guardado no regist ro f
Ope r a çã o:
Ope r a ndo: 0 ≤ f ≤ 127, d ∈ [0, 1]
Fla g: Z
N ú m e r o de
1
pa la vr a s:
107
N ú m e r o de ciclos: 1
Ex e m plo 1 : I NCF REG, 1
Ant es da inst rução: REG = 0xFF
Z = 0
Depois da inst rução: REG = 0x00
Z = 1
Ex e m plo 2 : I NCF REG, 0
Ant es da inst rução: REG = 0x10
W= x
Z = 0
Depois da inst rução: REG = 0x10
W = 0x11
Z = 0

A.18 DECF Decrementar f

Sin t a x e : [ rót ulo] DECF f, d


D e scr içã o: Decrem ent ar de um a unidade, o cont eúdo do regist ro f.
Se d= 0 , o result ado é guardado no regist ro W

(f)-1⇒ d
Se d= 1 , o result ado é guardado no regist ro f
Ope r a çã o:
Ope r a ndo: 0 ≤ f ≤ 127, d ∈ [0, 1]
Fla g: Z
N ú m e r o de
1
pa la vr a s:
N ú m e r o de ciclos: 1
Ex e m plo 1 : DECF REG, 1
Ant es da inst rução: REG = 0x01
Z = 0
Depois da inst rução: REG = 0x00
Z = 1
Ex e m plo 2 : DECF REG, 0
Ant es da inst rução: REG = 0x13
W= x
Z = 0
Depois da inst rução: REG = 0x13
W = 0x12
Z = 0

A.19 RLF Rodar f para a esquerda através do Carry

Sin t a x e : [ rót ulo] RLF f, d


D e scr içã o: O cont eúdo do regist ro f é rodado um espaço para a esquerda, at ravés de
C ( flag do Carry) .
Se d= 0 , o result ado é guardado no regist ro W

108
( f <n>) ⇒ d<n+1>, f<7> ⇒ C, C ⇒ d<0>;
Se d= 1 , o result ado é guardado no regist ro f
Ope r a çã o:
Ope r a ndo: 0 ≤ f ≤ 127, d ∈ [0, 1]
Fla g: C
N ú m e r o de
1
pa la vr a s:
N ú m e r o de
1
ciclos:
Ex e m plo 1 : RLF REG, 0
Ant es da inst rução: REG = 1110 0110
C= 0
Depois da inst rução: REG = 1110 0110
W = 1100 1100
C= 1
Ex e m plo 2 : RLF REG, 1
Ant es da inst rução: REG = 1110 0110
C= 0
Depois da inst rução: REG = 1100 1100
C= 1

A.20 RRF Rodar f para a direita através do Carry

Sin t a x e : [ rót ulo] RRF f, d


D e scr içã o: O cont eúdo do regist ro f é rodado um espaço para a direit a, at ravés de C
( flag do Carry) .
Se d= 0 , o result ado é guardado no regist ro W

( f <n>) ⇒ d<n-1>, f<0> ⇒ C, C ⇒ d<7>;


Se d= 1 , o result ado é guardado no regist ro f
Ope r a çã o:
Ope r a ndo: 0 ≤ f ≤ 127, d ∈ [0, 1]
Fla g: C
N ú m e r o de
1
pa la vr a s:
N ú m e r o de
1
ciclos:
Ex e m plo 1 : RRF REG, 0
Ant es da inst rução: REG = 1110 0110
W= x
C= 0
Depois da inst rução: REG = 1110 0110
W = 0111 0011
C= 0
Ex e m plo 2 : RRF REG, 1
Ant es da inst rução: REG = 1110 0110
C= 0
Depois da inst rução: REG = 0111 0011
C= 0

109
A.21 COMF Complementar f

Sin t a x e : [ rót ulo] COMF f, d


D e scr içã o: O cont eúdo do regist ro f é com plem ent ado.
Se d= 0 , o result ado é guardado no regist ro W

() ⇒ d
Se d= 1 , o result ado é guardado no regist ro f
Ope r a çã o:
Ope r a ndo: 0 ≤ f ≤ 127, d ∈ [0, 1]
Fla g: Z
N ú m e r o de
1
pa la vr a s:
N ú m e r o de ciclos: 1
Ex e m plo 1 : COMF REG, 0
Ant es da inst rução: REG= 0x13 ; 0001 0011 ( 0x13)
Depois da inst rução: REG= 0x13 ; com plem ent ar
W = 0xEC ; 1110 1100 ( 0xEC)
Ex e m plo 2 : COMF I NDF, 1
Ant es da inst rução: FSR= 0xC2
cont eúdo de FSR = ( FSR) = 0xAA
Depois da inst rução: FSR= 0xC2
cont eúdo de FSR = ( FSR) = 0x55

A.22 BCF Pôr a “0” o bit b de f

Sin t a x e : [ rót ulo] BCF f, b

0 ⇒ f<b>
D e scr içã o: Lim par ( pôr a ‘0’) , o bit b do regist ro f
Ope r a çã o:
Ope r a ndo: 0 ≤ f ≤ 127, 0 ≤ b ≤ 7
Fla g: -
N ú m e r o de
1
pa la vr a s:
N ú m e r o de ciclos: 1
Ex e m plo 1 : BCF REG, 7
Ant es da inst rução: REG = 0xC7 ; 1100 0111 ( 0xC7)
Depois da inst rução: REG = 0x47 ; 0100 0111 ( 0x47)
Ex e m plo 2 : BCF I NDF, 3
Ant es da inst rução: W = 0x17
FSR = 0xC2
cont eúdo do endereço em FSR ( FSR) = 0x2F
Depois da inst rução: W = 0x17
FSR = 0xC2
conteúdo do endereço em FSR (FSR) = 0x27

A.23 BSF Pôr a “1” o bit b de f

Sin t a x e : [ rót ulo] BSF f, b


D e scr içã o: Pôr a ‘1’, o bit b do regist ro f
110
Ope r a çã o: 1 ⇒ f<b>
Ope r a ndo: 0 ≤ f ≤ 127, 0 ≤ b ≤ 7
Fla g: -
N ú m e r o de
1
pa la vr a s:
N ú m e r o de ciclos: 1
Ex e m plo 1 : BSF REG, 7
Ant es da inst rução: REG = 0x07 ; 0000 0111 ( 0x07)
Depois da inst rução: REG = 0x17 ; 1000 0111 ( 0x87)
Ex e m plo 2 : BSF I NDF, 3
Ant es da inst rução: W = 0x17
FSR = 0xC2
cont eúdo do endereço em FSR ( FSR) = 0x2F
Depois da inst rução: W = 0x17
FSR = 0xC2
cont eúdo do endereço em FSR ( FSR) = 0x28

A.24 BTFSC Testar o bit b de f, saltar por cima se for = 0

Sin t a x e : [ rót ulo] BTFSC f, b


D e scr içã o: Se o bit b do regist ro f for igual a zero, ignorar inst rução seguint e. Se
est e bit b for zero, ent ão, durant e a execução da inst rução at ual, a
execução da inst rução seguint e não se concret iza e é execut ada, em
vez dest a, um a inst rução NOP, fazendo com que a inst rução at ual,
dem ore dois ciclos de inst rução a ser execut ada.

0 ≤ f ≤ 127, 0 ≤ b ≤ 7
Ope r a çã o: I gnorar a inst rução seguint e se ( f< b> ) = 0
Ope r a ndo:
Fla g: -
N ú m e r o de
1
pa la vr a s:
N ú m e r o de ciclos: 1 ou 2 dependendo do valor lógico do bit b
Ex e m plo: LAB_01 BTFSC REG, 1; Test ar o bit 1 do regist ro REG
LAB_02 ........... ; I gnorar est a linha se for 0
LAB_03 ........... ; Execut ar est a linha depois da ant erior, se
for 1
Ant es da inst rução, o cont ador de program a cont ém o endereço
LAB_01.

Depois dest a inst rução, se o bit 1 do regist ro REG for zero, o cont ador
de program a cont ém o endereço LAB_03. Se o bit 1 do regist ro REG
for ‘um ’, o cont ador de program a cont ém o endereço LAB_02.

A.25 BTFSS Testar o bit b de f, saltar por cima se for = 1

Sin t a x e : [ rót ulo] BTFSS f, b


D e scr içã o: Se o bit b do regist ro f for igual a um , ignorar inst rução seguint e. Se
durant e a execução dest a inst rução est e bit b for um , ent ão, a
execução da inst rução seguint e não se concret iza e é execut ada, em
vez dest a, um a inst rução NOP, assim , a inst rução at ual dem ora dois

111
ciclos de inst rução a ser execut ada.

0 ≤ f ≤ 127, 0 ≤ b ≤ 7
Ope r a çã o: I gnorar a inst rução seguint e se ( f< b> ) = 1
Ope r a ndo:
Fla g: -
N ú m e r o de
1
pa la vr a s:
N ú m e r o de ciclos: 1 ou 2 dependendo do valor lógico do bit b
Ex e m plo: LAB_01 BTFSS REG, 1; Test ar o bit 1 do regist ro REG
LAB_02 ........... ; I gnorar est a linha se for 1
LAB_03 ........... ; Execut ar est a linha depois da ant erior, se
for 0
Ant es da inst rução, o cont ador de program a cont ém o endereço
LAB_01.

Depois dest a inst rução, se o bit 1 do regist ro REG for ‘um ’, o cont ador
de program a cont ém o endereço LAB_03. Se o bit 1 do regist ro REG
for zero, o cont ador de program a cont ém o endereço LAB_02.

A.26 INCFSZ Incrementar f, saltar por cima se der = 0

Sin t a x e : [ rót ulo] I NCFSZ f, d


D e scr içã o: D e scr içã o: O cont eúdo do regist ro f é increm ent ado de um a
unidade.
Se d = 0 , o result ado é guardado no regist ro W .
Se d = 1 , o result ado é guardado no regist ro f.
Se o result ado do increm ent o for = 0, a inst rução seguint e é
subst it uída por um a inst rução NOP, fazendo com que a inst rução

(f) + 1 ⇒ d
at ual, dem ore dois ciclos de inst rução a ser execut ada.
Ope r a çã o:
Ope r a ndo: 0 ≤ f ≤ 127, d ∈ [0, 1]
Fla g: -
N ú m e r o de
1
pa la vr a s:
N ú m e r o de ciclos: 1 ou 2 dependendo do result ado
Ex e m plo: LAB_01 I NCFSZ REG, 1; I ncrem ent ar o cont eúdo de REG de um a
unidade
LAB_02 ........... ; I gnorar est a linha se result ado = 0
LAB_03 ........... ; Execut ar est a linha depois da ant erior,
se der 0
Cont eúdo do cont ador de program a ant es da inst rução, PC =
endereço LAB_01. Se o cont eúdo do regist ro REG depois de a
operação REG = REG + 1 t er sido execut ada, for REG = 0, o cont ador
de program a apont a para o rót ulo de endereço LAB_03. Caso
cont rário, o cont ador de program a cont ém o endereço da inst rução
seguint e, ou sej a, LAB_02.

A.27 DECFSZ Decrementar f, saltar por cima se der = 0

Sin t a x e : [ rót ulo] DECFSZ f, d


D e scr içã o: O cont eúdo do regist ro f é decrem ent ado um a unidade.
112
Se d = 0 , o result ado é guardado no regist ro W .
Se d = 1 , o result ado é guardado no regist ro f.
Se o result ado do decrem ent o for = 0, a inst rução seguint e é
subst it uída por um a inst rução NOP, fazendo assim com que a inst rução

(f) - 1 ⇒ d
at ual, dem ore dois ciclos de inst rução a ser execut ada.
Ope r a çã o:
Ope r a ndo: 0 ≤ f ≤ 127, d ∈ [0, 1]
Fla g: -
N ú m e r o de
1
pa la vr a s:
N ú m e r o de ciclos: 1 ou 2 dependendo do result ado
Ex e m plo: LAB_01 DECFSZ REG, 1; Decrem ent ar o cont eúdo de REG de um a
unidade
LAB_02 ........... ; I gnorar est a linha se result ado = 0
LAB_03 ........... ; Execut ar est a linha depois da ant erior,
se der 0
Cont eúdo do cont ador de program a ant es da inst rução, PC = endereço
LAB_01.

Se o cont eúdo do regist ro REG depois de a operação REG = REG – 1 t er


sido execut ada, for REG = 0, o cont ador de program a apont a para o
rót ulo de endereço LAB_03. Caso cont rário, o cont ador de program a
cont ém o endereço da inst rução seguint e, ou sej a, LAB_02.

A.28 GOTO Saltar para o endereço

Sin t a x e : [ rót ulo] GOTO k

k ⇒ PC<10:0>, (PCLATH<4:3>) ⇒ PC<12:11>


D e scr içã o: Salt o incondicional para o endereço k .
Ope r a çã o:
Ope r a ndo: 0 ≤ k ≤ 2048
Fla g: -
N ú m e r o de
1
pa la vr a s:
N ú m e r o de ciclos: 2
Ex e m plo: LAB_00 GOTO LAB_01; Salt ar para LAB_01
:
LAB_01 ............
Ant es da inst rução: PC = endereço LAB_00
Depois da inst rução: PC = endereço LAB_01

A.29 CALL Chamar um programa

Sin t a x e : [rótulo] CALL k


D e scr içã o: Esta instrução, chama um subprograma. Primeiro, o endereço de retorno (PC+1) é
guardado na pilha, a seguir, o operando k de 11 bits, correspondente ao endereço

PC+1 ⇒ Topo da pilha (TOS – Top Of Stack)


de início do subprograma, vai para o contador de programa (PC).
Ope r a çã o:
Ope r a ndo: 0 ≤ k ≤ 2048

113
Fla g: -
N ú m e r o de
1
pa la vr a s:
N ú m e r o de ciclos: 2
Ex e m plo: LAB_00 CALL LAB_02 ; Chamar a sub-rotina LAB_02
LAB_01 :
:
LAB_02 ............
Antes da instrução: PC = endereço LAB_00
TOS = x
Depois da instrução: PC = endereço LAB_02
TOS = LAB_01

A.30 RETURN Retorno de um subprograma

Sin t a x e : [ rót ulo] RETURN

TOS ⇒ Cont ador de program a PC


D e scr içã o: O cont eúdo do t opo da pilha é guardado no cont ador de program a.
Ope r a çã o:
Ope r a ndo: -
Fla g: -
N ú m e r o de
1
pa la vr a s:
N ú m e r o de ciclos: 2
Ex e m plo: RETURN
Ant es da inst rução: PC = x
TOS = x
Depois da inst rução: PC = TOS
TOS = TOS - 1

A.31 RETLW Retorno de um subprograma com uma constante em W

Sin t a x e : [ rót ulo] RETLW k

(k) ⇒ W; TOS ⇒ PC
D e scr içã o: A const ant e k de 8 bit s, é guardada no regist ro W .
Ope r a çã o:
Ope r a ndo: 0 ≤ k ≤ 255
Fla g: -
N ú m e r o de
1
pa la vr a s:
N ú m e r o de ciclos: 2
Ex e m plo: RETLW 0x43
Ant es da inst rução: W= x
PC = x
TOS = x
Depois da inst rução: W = 0x43
PC = TOS
TOS = TOS – 1

114
A.32 RETFIE Retorno de uma rotina de interrupção

Sin t a x e : [ rót ulo] RETLW k


D e scr içã o: Ret orno de um a sub- rot ina de at endim ent o de int errupção. O cont eúdo
do t opo de pilha ( TOS) , é t ransferido para o cont ador de program a
( PC) . Ao m esm o t em po, as int errupções são habilit adas, pois o bit GI E

TOS ⇒ PC ; 1⇒ GIE
de habilit ação global das int errupções, é post o a ‘1’.
Ope r a çã o:
Ope r a ndo: -
Fla g: -
N ú m e r o de
1
pa la vr a s:
N ú m e r o de ciclos: 2
Ex e m plo: RETFI E
Ant es da inst rução: PC = x
GI E = 0
Depois da inst rução: PC = TOS
GI E = 1

A.33 NOP Nenhuma operação

Sin t a x e : [ rót ulo] NOP


D e scr içã o: Nenhum a operação é execut ada, nem qualquer flag é afet ada.
Ope r a çã o: -
Ope r a ndo: -
Fla g: -
N ú m e r o de
1
pa la vr a s:
N ú m e r o de ciclos: 1
Ex e m plo: NOP

A.34 CLRWDT Iniciar o temporizador do watchdog

Sin t a x e : [ rót ulo] CLRWDT


D e scr içã o: O t em porizador do wat chdog é repost o a zero. O prescaler do
t em porizador de Wat chdog é t am bém repost o a 0 e, t am bém , os
bit s do regist ro de est ado e são post os a ‘um ’.
Ope r a çã o: 0 ⇒ WDT
0 ⇒ prescaler de WDT
1⇒
1⇒
Ope r a ndo: -
Fla g:
N ú m e r o de
1
pa la vr a s:
N ú m e r o de ciclos: 1
Ex e m plo: CLRWDT

115
Ant es da inst rução: Cont ador de WDT = x
Prescaler de WDT = 1: 128
Depois da inst rução: Cont ador do WDT = 0x00
Prescale do WDT = 0

A.35 SLEEP Modo de repouso

Sin t a x e : [ rót ulo] SLEEP


D e scr içã o: O processador ent ra no m odo de baixo consum o. O oscilador pára.
O bit ( Power Down) do regist ro St at us é repost o a ‘0’. O bit ( Tim er
Out ) é post o a ‘1’. O t em porizador de WDT ( Wat chdog) e o

0 ⇒ WDT
respect ivo prescaler são repost os a ‘0’.
Ope r a çã o:
0 ⇒ prescaler do WDT
1 ⇒ ΤΟ
0 ⇒ PD
Ope r a ndo: -
Fla g:
N ú m e r o de
1
pa la vr a s:
N ú m e r o de ciclos: 1
Ex e m plo 1 : SLEEP
Ant es da inst rução: Cont ador do WDT = x
Prescaler do WDT = x
Depois da inst rução: Cont ador do WDT = 0x00
Prescaler do WDT = 0

Apê n dice B
M PLAB
I nt rodução

5.1 I nst alando o pacot e do program a MPLAB


5.2 I nt rodução ao MPLAB
5.3 Escolhendo o m odo de desenvolvim ent o
5.4 I m plem ent ando um proj ect o
5.5 Criando um novo ficheiro Assem bler
5.6 Escrevendo um program a
5.7 Sim ulador MPSI M
5.8 Barra de ferram ent as

116
I n t r odu çã o
O MPLAB é um pacot e de program as que correm no Windows e que t ornam m ais fácil escrever ou
desenvolver um program a. Pode descrever- se ainda m elhor com o sendo um am bient e de
desenvolvim ent o para um a linguagem de program ação st andard e dest inado a correr num
com put ador pessoal ( PC) . Ant eriorm ent e, as operações incidiam sobre um a linha de inst rução e
cont em plavam um grande núm ero de parâm et ros, at é que se int roduziu o I DE " I nt egrat ed
Developm ent Environm ent " ( Am bient e I nt egrado de Desenvolvim ent o) e as operações t ornaram -
se m ais fáceis, usando o MPLAB. Mesm o agora, as preferências das pessoas divergem e alguns
program adores preferem ainda os edit ores st andard e os int érpret es linha a linha. Em qualquer
dos casos, o program a escrit o é legível e um a aj uda bem docum ent ada est á disponível.

5 .1 I n st a la n do o pr ogr a m a - M PLAB

O MPLAB com preende várias part es:

- Agrupam ent o de t odos os ficheiros do m esm o proj ect o, num único proj ect o ( Proj ect Manager)
- Escrever e processar um program a ( Edit or de Text o)
- Sim ular o funcionam ent o no m icrocont rolador do program a que se acabou de escrever
( Sim ulador)

Além dest es, exist em sist em as de suport e para os produt os da Microchip, t ais com o o PI CSTART
Plus e I CD ( I n Circuit Debugger - Det ecção de erros com o m icrocont rolador a funcionar) . Est e
livro não aborda est es dois disposit ivos que são opcionais.

Os requisit os m ínim os para um com put ador que possa correr o MPLAB, são:
• Com put ado PC com m icroprocessador 486 ou superior
• Microsoft Windows 3.1x, Windows 95 ou versões m ais recent e do sist em a operat ivo Windows.
• Placa gráfica VGA
• 8MB de m em ória ( 32MB recom endados)
• 20MB de espaço no disco duro
• Rat o

Ant es de iniciarm os o MPLAB, t em os prim eiro que o inst alar. A inst alação é o processo de copiar
os ficheiros do MPLAB para o disco duro do com put ador, a part ir do CD respect ivo. Exist e um a
opção em cada nova j anela que perm it e regressar à ant erior. Assim , os erros não const it uem
problem a e o t rabalho de inst alação, t orna- se m ais fácil. Est e m odo de inst alação é com um à
m aioria dos program as Windows. Prim eiro, aparece um a j anela de boas vindas, a seguir pode- se
escolher ent re as opções indicadas e, no fim do processo, obt ém - se um a m ensagem que inform a
de que o program a est á inst alado e pront o a funcionar.

Passos para inst alar o MPLAB:


1. Correr o Windows da Microsoft
2. I nt roduzir o CD da Microchip na drive de CD.
3. ‘Clicar’ no bot ão ‘I NI CI AR’, sit uado no lado esquerdo do écran ao fundo e escolher a opção

117
Execut ar...
4. Clicar em ‘Procurar’ e seleccionar a drive de CD do seu com put ador
5. Descobrir o direct ório MPLAB na CD ROM
6. Clicar em SETUP.EXE e a seguir em OK.
7. Clicar novam ent e em OK na sua j anela de Execut ar

A inst alação propriam ent e dit a, com eça depois dest es set e passos. As figuras que se seguem
explicam o significado de cert as et apas dessa inst alação.

Écr a n de boa s- vinda s n o in ício da in st a la çã o do M PLAB

Logo no início, é necessário seleccionar quais os com ponent es do MPLAB com que vam os
t rabalhar. Com o, em princípio, não dispom os dos com ponent es de hardware originais da Microchip
t ais com o program adores ou em uladores, as únicas coisas que vam os inst alar é o am bient e
MPLAB, Assem bler, Sim ulador e inst ruções.

118
Se le cciona n do os com pon e n t e s do a m bie n t e de de se n volvim e n t o M PLAB

Com o é supost o irm os t rabalhar com o Windows 95 ( ou um sist em a operat ivo ainda m ais
m oderno) , t udo aquilo que diga respeit o ao sist em a operat ivo DOS, não deve ser cont em plado ao
fazer a selecção da linguagem assem bler. Cont udo, se preferir cont inuar a t rabalhar em DOS,
ent ão precisa de desm arcar t odas as opções relacionadas com o Windows e seleccionar os
com ponent es apropriados para o DOS.

Se le cciona n do o Asse m ble r e o sist e m a ope r a t ivo

Com o qualquer out ro program a, o MPLAB deve ser inst alado num direct ório. O direct ório
escolhido, pode ser qualquer um no disco duro do com put ador. Se não t iver razões fort es para
não o fazer, deve aceit ar a escolha indicada por defeit o.

119
Escolh e n do o dir e ct ór io e m qu e o M PLAB va i fica r inst a la do

Os ut ilizadores que j á t enham o MPLAB inst alado ( versão m ais ant iga que est a) , necessit am da
opção que se segue.
O propósit o dest a opção é salvaguardar cópias de t odos os ficheiros que foram m odificados
durant e o processo de m udança da versão ant iga para a versão m ais m oderna do MPLAB. No
nosso caso, deixarem os a opção NO seleccionada, porque se presum e que est am os a fazer a
prim eira inst alação do MPLAB no nosso com put ador.

Opçõe s pa r a os u t iliza dor e s que e st ã o a in st a la r um a nova ve r sã o do M PLAB por cim a de


ou t r a ve r sã o in st a la da , m a is a n t iga

120
O m enu I niciar ( START) cont ém um conj unt o de pont eiros para program as e é seleccionado
clicando na opção I NI CI AR ao fundo, no cant o esquerdo do écran. Para que o MPLAB t am bém
possa ser iniciado a part ir daqui, nós precisam os de deixar est a opção t al ela se nos apresent a.

I n t r odu zindo o M PLAB n o m e nu in icia r

A j anela que se m ost ra a seguir, t em a ver com um a part e do MPLAB em cuj a explicação não
necessit am os de ent rar em det alhes. Seleccionando um direct ório especial, o MPLAB guarda t odos
os ficheiros relacionados com o ‘linker’, num direct ório separado.

D e fin içã o do dir e ct ór io dos fich e ir os lin k e r

Geralm ent e, t odos os program as que correm no Windows, t êm os ficheiros do sist em a guardados
no direct ório Windows. Depois de m últ iplas inst alações, o direct ório Windows t orna- se dem asiado

121
grande e povoado. Assim , alguns program as perm it em que os seus ficheiros do sist em a fiquem
guardados nos m esm os direct órios em que est ão os program as. O MPLAB é um exem plo dist o e,
por isso, deve ser seleccionada a opção do fundo.

Se le cçã o de u m dir e ct ór io pa r a os fich e ir os do sist e m a

Depois de realizados est es passos, a inst alação inicia- se ao clicar em ‘Next ’.

Écran antes da instalação

A instalação não demora muito tempo e o processo de copiar os ficheiros pode ser visualizado numa
pequena janela no lado direito do écran.

122
A instalação a decorrer

Depois de concluída a instalação, aparecem dois écrans de diálogo, um que menciona as últimas
informações e correcções relativas ao programa e o outro que é um écran de boas vindas.
Se os ficheiros de texto (Readme.txt) forem abertos, é preciso, fechá-los a seguir.

I n for m a çõe s de “ú lt im o m inu t o”, r e spe it a n t e s à s ve r sõe s do pr ogr a m a e a cor r e cçõe s

123
Depois de clicar em ‘Finish’, a inst alação do MPLAB est á t erm inada.

5 .2 M PLAB
Quando t erm inam os o processo de inst alação, aparece- nos no écran o program a propriam ent e
dit o. Com o pode ver- se, o aspect o do MPLAB é o m esm o da m aioria dos program as Windows.
Pert o da área de t rabalho exist e um “ m enu” ( faixa azul em cim a, com as opções File, Edit , et c.) ,
“ t oolbar” ( barra com figuras que preenchem pequenos quadrados) e a linha de st at us no fundo da
j anela. Assim , pret ende- se seguir um a regra no Windows que é t ornar t am bém acessíveis por
baixo do m enu, as opções usadas m ais frequent em ent e no program a,. Dest e m odo, é possível
acedê- las de um m odo m ais fácil e t ornar o nosso t rabalho m ais rápido. Ou sej a, aquilo que est á
disponível na barra de ferram ent as, t am bém est á disponível no m enu.

O é cr a n de pois de o M PLAB se r in icia do

O propósit o dest e capít ulo é fam iliarizá- lo com o am bient e de desenvolvim ent o MPLAB e com
elem ent os básicos do MPLAB, t ais com o:

Escolher um m odo de desenvolvim ent o


Designar um proj ect o
Designar um ficheiro para o program a original
Escrever um program a elem ent ar na linguagem de program ação assem bler
Traduzir um program a para linguagem m áquina
I niciar o program a
Abrir um a nova j anela de sim ulação
Abrir um a nova j anela para as variáveis cuj os valores querem os observar ( wat ch window)
Guardar a j anela para as variáveis cuj os valores querem os observar ( j anela ant erior)
Definir breakpoint s no sim ulador ( pont os de paragem )

124
A preparação de um program a para ser lido num m icrocont rolador com preende várias et apas
básicas:

5 .3 Escolh e n do o m odo de de se n volvim e n t o


Para que o MPLAB possa saber que ferram ent as vão ser usadas na execução do program a que se
escreveu, é necessário definir o m odo de desenvolvim ent o. No nosso caso, nós precisam os de
preparar o sim ulador com o preparam os um a ferram ent a que vam os usar. Clicando em OPTI ONS- -
- > DEVELOPMENT MODE, um a nova j anela idênt ica à que se m ost ra na figura em baixo, irá
aparecer:

D e fin indo u m m odo de de se nvolvim e n t o

Nós devem os seleccionar a opção ‘MPLAB- SI M Sim ulat or’, porque é nest e am bient e que o nosso
program a vai ser experim ent ado. Além dest a opção, est á t am bém disponível a opção ‘Edit or Only’
( som ent e edit or) . Est a últ im a opção só é usada, se o que desej am os é apenas escrever o
program a e usar um program ador para t ransferir um ‘ficheiro hex’ para o m icrocont rolador. A
selecção do m odelo de m icrocont rolador é feit a no lado direit o. Com o o livro é baseado no
PI C16F84, é est e o m odelo de m icrocont rolador que deve ser seleccionado. Norm alm ent e, quando
com eçam os a t rabalhar com m icrocont roladores, usam os um sim ulador. Depois, à m edida que o
nível dos nossos conhecim ent os sobe, podem os escrever o program a no m icrocont rolador, logo
após a sua t radução. O nosso conselho, é que você use sem pre o sim ulador. Em bora possa
parecer que, assim , o program a dem ora m ais t em po a im plem ent ar, no fim vai ver que vale a
pena.

5 .4 I m ple m e n t a n do u m pr oj e ct o
Para com eçar a escrever um program a é preciso prim eiro criar um proj ect o. Clicando em PROJECT
- - > NEW PROJECT você pode dar um nom e ao seu proj ect o e guardá- lo num direct ório à sua
escolha. Na figura em baixo, um proj ect o designado por 't est .pj t ' est á a ser criado e é guardado
no direct ório c: \ PI C\ PROJEKTI \ .
Escolheu- se est e direct ório porque os aut ores t êm est e direct ório no seu com put ador. De um
m odo genérico, escolhe- se um direct ório que est á cont ido nout ro direct ório m aior e cuj o nom e
deve fazer lem brar os ficheiros que cont ém .

125
Abr in do um novo pr oj e ct o

Depois de dar um nom e ao proj ect o clique em OK. Verem os que aparece um a nova j anela,
idênt ica à que se m ost ra na figura seguint e.

Aj u st e dos e le m e n t os do pr oj e ct o

Com o rat o, clique em " proba [ .hex] ” , o que act iva a opção 'Node propert ies', ao fundo no lado
direit o. Clicando est a opção, obt ém - se a j anela seguint e.

126
Definindo os parâmetros do assembler MPASM

Na figura pode verificar- se que exist em m uit os parâm et ros diferent es. Cada um deles,
corresponde a um t erm o na “ linha de com andos” . Com o m em orizar est es parâm et ros é bast ant e
desconfort ável ou m esm o proibit ivo para principiant es, foi int roduzida possibilidade de um aj ust e
feit o graficam ent e. Observando a figura, verifica- se rapidam ent e quais as opções que est ão
seleccionadas. Clicando em OK, volt am os à j anela ant erior onde " Add node" é agora um a opção
act iva. Clicando nela, obt em os a seguint e j anela onde vam os dar o um nom e ao nosso program a
assem bler. Vam os cham ar- lhe " Proba.asm " , e vai ser o nosso prim eiro program a em MPLAB.

Abrindo um novo projecto

Clicando em OK, volt am os à j anela de inicial onde vem os adicionado um ficheiro assem bler.

127
Um ficheiro assembler foi adicionado

Clicando em OK volt am os ao am bient e MPLAB.

5 .5 Cr ia n do u m n ovo fich e ir o a sse m ble r ( e scr e ve n do u m n ovo


pr ogr a m a )
Depois de a part e de criação de " proj ect " , t er t erm inado, é alt ura de com eçarm os a escrever um
program a. Por out ras palavras, um novo ficheiro deve ser abert o e vai ser designado por
" proba.asm " . No nosso caso, o ficheiro t em que ser designado por " proba.asm " porque, em
proj ect os const it uídos por um único ficheiro ( com o é o caso do nosso) , o nom e do proj ect o e o
nom e do ficheiro font e t em que ser o m esm o.

Para abrir um novo ficheiro, clica- se em FI LE> NEW. Assim , obt em os um a j anela de t ext o dent ro
do espaço de t rabalho do MPLAB.

128
Um n ovo fich e ir o a sse m ble r foi a be r t o

A nova j anela represent a o ficheiro onde o program a vai ser escrit o. Com o o nosso ficheiro
assem bler t em que ser designado por " proba.asm " , vam os dar- lhe esse nom e. A designação do
program a faz- se ( com o em t odos os program as Windows) clicando em FI LE> SAVE AS. Dest e
m odo, vam os obt er um a j anela análoga à que se m ost ra na figura seguint e.

D a n do um n om e e gua r da ndo um novo fich e ir o a sse m ble r

Quando obt em os est a j anela, precisam os de escrever 'proba.asm ' por baixo de 'File nam e: ' e
clicar em OK. Depois de fazer ist o, podem os ver o nom e do ficheiro 'proba.asm ', no cim o da nossa
j anela.

5 .6 Escr e ve n do u m pr ogr a m a

129
Só depois de com plet adas t odas as operações precedent es é que nós podem os com eçar a
escrever um program a. Com o j á dispom os de um program a sim ples que foi escrit o na part e do
livro " Program ação em Linguagem Assem bler", vam os usar esse program a aqui, t am bém .

Est e program a t em que ser copiado num a j anela que est ej a abert a, ou copiado do disco ou t irado
da página da int ernet da MikroElekt ronika usando os com andos copiar e colar. Quando o
program a é copiado para a j anela " proba.asm " , nós podem os usar o com ando PROJECT - > BUI LD
ALL ( se não exist irem erros) e, um a nova j anela idênt ica à represent ada na figura seguint e, vai
aparecer.

130
Ja ne la com a s m e n sa ge n s qu e se su ce de m à t r a du çã o do pr ogr a m a a sse m ble r

Na figura podem os observar que obt em os o ficheiro " proba.hex" com o result ado do processo de
t radução, que é usado o program a MPASMWI N para t raduzir e que exist e um a m ensagem . De
t oda essa inform ação, a últ im a frase que aparece na j anela é a m ais im port ant e, j á que nos diz se
a t radução foi ou não bem sucedida. 'Build com plet ed successfully' é um a m ensagem que nos
indica que a t radução foi feit a com sucesso e que não apareceram erros.

No caso de serem indicados erros, precisam os de clicar duplam ent e nas m ensagens de erros da
j anela 'Build Result s'. Est e act o, t ransfere- nos aut om at icam ent e para o program a assem bler e
para a linha em que o erro se encont ra.

5 .7 Sim u la dor M PSI M


Sim ulador, é a part e do am bient e MPLAB que fornece um a m elhor visão int erna do m odo com o o
m icrocont rolador t rabalha. At ravés de um sim ulador nós podem os m onit orizar os valores act uais
das variáveis, os valores dos regist os e os est ados lógicos dos pinos dos port os. Para falar
verdade, o sim ulador não dá exact am ent e os m esm os result ados em t odos os program as. Se um
program a for sim ples ( com o aquele que est am os a ut ilizar com o exem plo) , a sim ulação não é de
grande im port ância, porque pôr t odos os pinos do port o B a nível lógico um , não é um a t arefa
difícil. Cont udo, o sim ulador pode ser um a grande aj uda em program as m ais com plicados que
incluem t em porizadores, diferent es condições em que algum a coisa acont eça e out ros requisit os
sem elhant es ( especialm ent e com operações m at em át icas) . Sim ulação, com o o próprio nom e
indica, " sim ula o funcionam ent o de um m icrocont rolador" . Com o o m icrocont rolador execut a as
inst ruções um a a um a, o sim ulador é concebido para execut ar o program a passo a passo ( linha a
linha) , m ost rando o que acont ece aos dados dent ro do m icrocont rolador. Quando o program a est á
com plet am ent e escrit o, convém que o program ador, em prim eiro lugar, verifique o seu program a
num sim ulador e, só a seguir o experim ent e num a sit uação real. I nfelizm ent e, m uit as vezes as
pessoas esquecem - se dos bons hábit os e passam por cim a dest a et apa. As razões dist o passam
pela m aneira de ser das pessoas e pela falt a de bons sim uladores.

A prim eira coisa que precisam os de fazer num a sit uação real, é o reset do m icrocont rolador com o
com ando DEBUG > RUN > RESET. Est e com ando faz com que surj a em negrit o a linha de início do
program a e que, o cont ador de program a cont enha o valor zero com o se pode verificar na linha de
est ado ( pc: 0x00) .

131
O in ício da sim u la çã o do pr ogr a m a fa z- se com o r e se t do m icr ocon t r ola dor

Um a das principais caract eríst icas de um sim ulador, é a possibilidade de observar o est ado dos
regist os dent ro do m icrocont rolador. Principalm ent e os regist os com funções especiais ( SFR) .
È possível abrir um a j anela com os regist os SFR, clicando em WI NDOW- > SPECI AL FUNCTI ON
REGI STERS, ou, no ícone SFR.

Além dos regist os SFR, pode ser út il observar os cont eúdos dos out ros regist os. Um a j anela com
as filas- regist os pode ser abert a, clicando em WI NDOW- > FI LE REGI STERS.
Se exist irem variáveis no program a, t am bém é convenient e observá- las. A cada variável pode ser
at ribuída um a j anela ( Wat ch Windows) clicando em WI NDOW- > WATCH WI NDOWS.

132
Sim u la dor com j a n e la s a be r t a s pa r a r e gist os SFR, fila s r e gist os e va r iá ve is

O próxim o com ando num sim ulador é DEBUG> RUN> STEP que inicia a sim ulação passo a passo do
program a. O m esm o com ando pode ser int roduzido at ravés da t ecla < F7> do t eclado ( de um
m odo geral, t odos os com andos m ais significat ivos t êm t eclas at ribuídas no t eclado) . Ut ilizando a
t ecla F7, o program a é execut ado passo- a- passo. Quando ut ilizam os um a m acro, o ficheiro que
cont ém a m acro é abert o ( Bank.inc) e podem os prosseguir at ravés da m acro. Na j anela dos
regist os SFR, podem os observar com o o regist o de t rabalho W recebe o valor 0xFF e com o est e
valor é t ransferido para o port o B. Clicando de novo em F7 nós não conseguim os nada porque o
program a ent ra num " loop infinit o" . Loop infinit o é um t erm o que irem os encont rar m uit as vezes.
Represent a um loop ( laço) do qual o m icrocont rolador não pode sair, a m enos que ocorra um a
int errupção ( se o program a ut ilizar int errupções) ou, ent ão, quando é execut ado o reset do
m icrocont rolador.

5 .8 Ba r r a de fe r r a m e n t a s
Com o o MPLAB t em várias com ponent es, cada um a dessas com ponent es t em a sua própria barra
de ferram ent as ( t oolbar) . Cont udo, exist e um a barra de ferram ent as que é um a espécie de
resum o de t odas as barras de ferram ent as. Est a barra de ferram ent as é, norm alm ent e suficient e
para as nossas necessidades e vai ser explicada com m ais det alhe. Na figura debaixo, podem os
observar a barra de ferram ent as de que precisam os, j unt am ent e com um a breve explicação de
cada ícon. Por causa do form at o lim it ado dest e livro, est a barra é apresent ada com o um a barra
suspensa. Cont udo, norm alm ent e, est á colocada horizont alm ent e por baixo do m enu, ao longo do
écran.

133
Ba r r a de fe r r a m e n t a s u n ive r sa l com u m a e x plica çã o su m á r ia dos ícon e s

Sign ifica do dos ícon s n a ba r r a de fe r r a m e n t a s

Sem pre que se clica est e ícon, um a nova ‘t oolbar’ aparece. Se


clicarm os quat ro vezes seguidas, a barra act ual reaparece.

Ì con para abrir um proj ect o. O proj ect o abert o dest a m aneira
cont ém t odos os aj ust am ent os do écran e de t odos os
elem ent os que são cruciais para o proj ect o act ual.
Í con para guardar um proj ect o. O proj ect o guardado conserva
t odos os aj ust am ent os de j anelas e parâm et ros. Quando lerm os
o program a de novo, t udo regressa ao écran, t al e qual com o
quando o program a foi fechado.
Para procurar um a part e do program a ou palavras de que
necessit am os, em program as m aiores. Usando est e ícon
podem os encont rar rapidam ent e um a part e do program a,
rót ulos, m acros, et c.
Í con para cort ar um a part e do t ext o. Est e e os t rês icons
seguint es são st andardisados em t odos os program as que lidam
com ficheiros de t ext o. Com o cada program a é represent ado por
um a porção de t ext o, est as operações são m uit o út eis.
Para copiar um a porção de t ext o. Exist e um a diferença ent re
est e e o ícon ant erior. Quando se cort a, t ira- se um a part e de
t ext o para fora do écran ( e do program a) , que poderá ser
colado a seguir. Mas, t rat ando- se de um a operação de cópia, o

134
t ext o é copiado m as não cort ado e perm anece visualizado no
écran.

Quando um a porção de t ext o é copiado ou cort ado, ela m ove- se


para um a part e da m em ória que serve para t ransferir dados no
sist em a operacional Windows. Mais t arde, clicando nest e ícon,
ela pode ser ‘colada’ num t ext o, no sít io onde se encont ra o
cursor.

Guardar um program a ( ficheiro assem bler) .

Com eçar a execução do program a a t oda a velocidade. Essa


execução, é reconhecida pelo aparecim ent o de um a linha de
est ado am arela. Nest a m odalidade de execução, o sim ulador
execut a o program a a t oda a velocidade at é que é int errom pido
pelo clicar no ícon de t ráfego verm elho.
Pára a execução do program a a t oda a velocidade. Depois de
clicar nest e ícon, a linha de st at us t orna- se de novo cinzent a e a
execução do program a pode cont inuar passo a passo.
Execução do program a passo a passo. Clicando nest e ícon, nós
com eçam os a execut ar um a inst rução na linha de program a a
seguir à linha act ual.
‘Passar por cim a’. Com o um sim ulador não é m ais que um a
sim ulação da realidade por software, é possível passar por cim a
de algum as inst ruções e o program a prosseguir norm alm ent e,
depois disso. Norm alm ent e, a part e do program a que int eressa
ao program ador é a que se segue a esse ‘salt o por cim a’.
Faz o reset do m icrocont rolador. Clicando nest e ícon, o cont ador
de program a é posicionado no início do program a e a sim ulação
pode com eçar.
Clicando nest e ícon obt em os um a j anela com um program a,
m as nest e caso na m em ória de program a, onde podem os ver
quais as inst ruções e em que endereços.

Com a aj uda dest e ícon, obt em os um a j anela com o cont eúdo


da m em ória RAM do m icrocont rolador .

Clicando nest e ícon, aparece a j anela dos regist os SFR ( regist os


com funções especiais) . Com o os regist os SFR são usados em
t odos os program as, recom enda- se que, no sim ulador, est a
j anela est ej a sem pre act iva.
Se um a program a cont iver variáveis cuj os valores necessit em os
de acom panhar ( por exem plo um cont ador) , ent ão é necessária
um a j anela para elas, isso pode ser feit o usando est e ícon.
Quando cert os erros num program a se m anifest am durant e o
processo de sim ulação, o program a t em que ser corrigido. Com o
o sim ulador usa o ficheiro HEX com o ent rada, a seguir à
correcção dos erros, nós necessit am os de t raduzir de novo o
program a, de m aneira a que est as m udanças t am bém sej am
t ransferidas para o sim ulador. Clicando nest e ícone, o proj ect o
com plet o é de novo t raduzido e, assim , obt em os a nova versão
do ficheiro HEX para o sim ulador.

135
136

Você também pode gostar