Escolar Documentos
Profissional Documentos
Cultura Documentos
Conjunto de instrues
Descrio, exemplos e funes de cada instruo...
O programa MPLAB
Como instalar, como fazer seu primeiro programa, seguindo o programa passo a passo no simulador...
ndice Geral
CAPTULO I INTRODUO AOS MICROCONTROLADORES
Introduo
Histria
Microcontroladores versus Microprocessadores
1.1 Unidade de Memria
1.2 Unidade Central de Processamento
1.3 Barramentos
1.4 Unidade de Entrada e Sadas (I/O)
1.5 Comunicao Serial
1.6 Timer
1.7 Watchdog
1.8 Conversor Analgico - Digital
1.9 Programa
CAPTULO II MICROCONTROLADOR PIC16F84
Introduo
Arquitetura CISC, RISC
Aplicaes
Clock / Ciclo de Instruo
Pipelining
Descrio dos Pinos
2.1 Gerador de Clock - Oscilador
2.2 Reset
2.3 Unidade Central de Processamento
2.4 Portas
2.5 Organizao de Memria
2.6 Interrupes
2.7 Timer Livre TMR0
2.8 Memria de Dados EEPROM
CAPTULO III CONJUNTO DE INSTRUES
Introduo
Conjunto de Instrues da Famlia de Microcontroladores PIC16Cxx
Transferncia de Dados
Instrues Lgicas e Aritmticas
Operaes de BITs
Direcionando o Fluxo do Programa
Perodo de Execuo da Instruo
Listagem das Palavras - Word list
4.1 #DEFINE
4.2 INCLUDE
4.3 CONSTANT
4.4 VARIABLE
4.5 SET
4.6 EQU
4.7 ORG
4.8 END
Instrues Condicionais
4.9 IF
4.10 ELSE
4.11 ENDIF
4.12 WHILE
4.13 ENDW
4.14 IFDEF
4.15 IFNDEF
Diretivas de Dados
4.16 CBLOCK
4.17 ENDC
4.18 DB
4.19 DE
4.20 DT
Configurando Uma Diretiva
4.21 _CONFIG
4.22 PROCESSO
Operadores Aritmticos
Arquivos Criados Aps a Compilao
Macros
CAPTULOS V MPLAB
Introduo
5.1
5.2
5.3
5.4
5.5
5.6
5.7
5.8
CAPTULO VI EXEMPLOS
Introduo
6.1 Alimentando o Microcontrolador
6.2 Utilizao de Macros em Programas
Macro PRINT
6.3 Exemplos
Teclado
Optoacopladores
Rel
Gerando um Som
Display LCD
Comunicao em Srie
APNDICE A CONJUNTO DE INSTRUES
APNDICE B SISTEMAS NUMRICOS
Introduo
B.1 Sistema Numrico Decimal
B.2 Sistema Numrico Binrio
B.3 Sistema Numrico Hexadecimal
Concluso
APNDICE C GLOSSRIO
Introduo
Microcontrolador
Pino de entrada/sada (I/O)
Software
Hardware
Simulador
ICE
Emulador de EPROM
Assembler
Arquivo HEX
Arquivo LIST
Arquivo Fonte (Source File)
Deteco de erros (Debugging)
ROM, EPROM, EEPROM, FLASH, RAM
Endereamento
ASCII
Carry
Cdigo
Byte, Kilobyte, Megabyte
Flag
Vector de interrupo ou interrupes
Programador
Produto
CAPTULO I
Introduo aos Microcontroladores
Introduo
Histria
Microcontroladores versus Microprocessadores
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
1.9
Unidade de Memria
Unidade Central de Processamento
Barramentos
Unidade de Entrada e Sadas (I/O)
Comunicao Serial
Timer
Watchdog
Conversor Analgico - Digital
Programa
Introduo
As circunstncias que se nos deparam hoje no campo dos
microcontroladores tm os seus primrdios no desenvolvimento da tecnologia dos
circuitos integrados. Este desenvolvimento tornou possvel armazenar centenas de
milhares de transstores num nico chip. Isso constituiu um pr-requisito para a
produo de microprocessadores e, os primeiros computadores foram construdos
adicionando perifricos externos tais como memria, linhas de entrada e sada,
temporizadores e outros. Um crescente aumento do nvel de integrao, permitiu o
aparecimento de circuitos integrados contendo simultaneamente processador e
perifricos. Foi assim que o primeiro chip contendo um microcomputador e que
mais tarde haveria de ser designado por microcontrolador, apareceu.
Histria
no ano de 1969 que uma equipa de engenheiros japoneses pertencentes
companhia BUSICOM chega aos Estados Unidos com a encomenda de alguns
circuitos integrados para calculadoras a serem implementados segundo os seus
projetos. A proposta foi entregue INTEL e Marcian Hoff foi o responsvel pela sua
concretizao. Como ele tinha tido experincia de trabalho com um computador
(PC) PDP8, lembrou-se de apresentar uma soluo substancialmente diferente em
vez da construo sugerida. Esta soluo pressupunha que a funo do circuito
integrado seria determinada por um programa nele armazenado. Isso significava
que a configurao deveria ser mais simples, mas tambm era preciso muito mais
memria que no caso do projecto proposto pelos engenheiros japoneses. Depois de
algum tempo, embora os engenheiros japoneses tenham tentado encontrar uma
soluo mais fcil, a ideia de Marcian venceu e o primeiro microprocessador
nasceu. Ao transformar esta ideia num produto concreto, Frederico Faggin foi de
uma grande utilidade para a INTEL. Ele transferiu-se para a INTEL e, em somente 9
meses, teve sucesso na criao de um produto real a partir da sua primeira
concepo. Em 1971, a INTEL adquiriu os direitos sobre a venda deste bloco
integral. Primeiro eles compraram a licena companhia BUSICOM que no tinha a
mnima percepo do tesouro que possua. Neste mesmo ano, apareceu no
mercado um microprocessador designado por 4004. Este foi o primeiro
microprocessador de 4 bits e tinha a velocidade de 6 000 operaes por segundo.
No muito tempo depois, a companhia Americana CTC pediu INTEL e Texas
Instrumentos um microprocessador de 8 bits para usar em terminais. Mesmo
apesar de a CTC acabar por desistir desta ideia, tanto a Intel como a Texas
Instrumentos continuaram a trabalhar no microprocessador e, em Abril de 1972, os
primeiros microprocessadores de 8 bits apareceram no mercado com o nome de
8008. Este podia enderear 16KB de memria, possua 45 instrues e tinha a
1.3 Barramentos
Este "caminho" designa-se por "bus" . Fisicamente ele corresponde a um
grupo de 8, 16 ou mais fios. Existem dois tipos de bus: bus de dados e de
endereo. O nmero de linhas do primeiro depende da quantidade de memria que
desejamos enderear e o nmero de linhas do outro depende da largura da palavra
de dados, no nosso caso igual a oito. O primeiro bus serve para transmitir
endereos do CPU para a memria e o segundo para ligar todos os blocos dentro do
microcontrolador.
1.6 Timer
Agora que j temos a unidade de comunicao srie implementada, ns
podemos receber, enviar e processar dados.
10
1.7 Watchdog
Uma outra coisa que nos vai interessar a fluncia da execuo do
programa pelo microcontrolador durante a sua utilizao. Suponha que como
resultado de qualquer interferncia (que ocorre frequentemente num ambiente
industrial), o nosso microcontrolador pra de executar o programa ou, ainda pior,
desata a trabalhar incorretamente.
11
12
1.9 Programa
Escrever um programa uma parte especial do trabalho com
microcontroladores e designado por "programao". Vamos tentar escrever um
pequeno programa numa linguagem que seremos ns a criar e que toda a gente
ser capaz de compreender.
INICIO
REGISTO1=LOCAL_DE_ MEMORIA_A
REGISTO2=LOCAL_DE_ MEMORIA_B
PORTO_A=REGISTO1+REGISTO2
FIM
O programa adiciona os contedos de dois locais de memria e coloca a
soma destes contedos no porto A. A primeira linha do programa manda mover o
contedo do local de memria "A" para um dos registos da unidade central de
processamento. Como necessitamos tambm de outra parcela, vamos colocar o
outro contedo noutro registo da unidade central de processamento (CPU). A
instruo seguinte pede ao CPU para adicionar os contedos dos dois registos e
enviar o resultado obtido para o porto A, de modo a que o resultado desta adio
seja visvel para o mundo exterior. Para um problema mais complexo, naturalmente
o programa que o resolve ser maior.
A tarefa de programao pode ser executada em vrias linguagens tais como o
Assembly, C e Basic que so as linguagens normalmente mais usadas. O Assembly
pertence ao grupo das linguagens de baixo nvel que implicam um trabalho de
programao lento, mas que oferece os melhores resultados quando se pretende
poupar espao de memria e aumentar a velocidade de execuo do programa.
Como se trata da linguagem mais frequentemente usada na programao de
microcontroladores, ela ser discutida num captulo mais adiantado. Os programas
na linguagem C so mais fceis de se escrever e compreender, mas, tambm, so
mais lentos a serem executados que os programas assembly. Basic a mais fcil
de todas para se aprender e as suas instrues so semelhantes maneira de um
ser humano se exprimir, mas tal como a linguagem C, tambm de execuo mais
lenta que o assembly. Em qualquer caso, antes que escolha entre uma destas
linguagens, precisa de examinar cuidadosamente os requisitos de velocidade de
execuo, de espao de memria a ocupar e o tempo que vai demorar a fazer o
programa em assembly.
Depois de o programa estar escrito, ns necessitamos de introduzir o
microcontrolador num dispositivo e p-lo a trabalhar. Para que isto acontea, ns
precisamos de adicionar mais alguns componentes externos. Primeiro temos que
dar vida ao microcontrolador fornecendo-lhe a tenso (a tenso elctrica
necessria para que qualquer instrumento electrnico funcione) e o oscilador cujo
papel anlogo ao do corao que bate no ser humano. A execuo das instrues
do programa regulada pelas pulsaes do oscilador. Logo que lhe aplicada a
tenso, o microcontrolador executa uma verificao dele prprio, vai para o
princpio do programa e comea a execut-lo. O modo como o dispositivo vai
trabalhar depende de muitos parmetros, os mais importantes dos quais so a
competncia da pessoa que desenvolve o hardware e do programador que, com o
seu programa, deve tirar o mximo do dispositivo.
13
CAPTULO II
Microcontrolador PIC16F84
Introduo
Arquitetura CISC, RISC
Aplicaes
Clock / Ciclo de Instruo
Pipelining
Descrio dos Pinos
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
Introduo
O PIC 16F84 pertence a uma classe de microcontroladores de 8 bits, com
uma arquitetura RISC. A estrutura genrica a do mapa que se segue, que nos
mostra os seus blocos bsicos.
Memria de programa (FLASH) - para armazenar o programa que se escreveu.
Como a memria fabricada com tecnologia FLASH pode ser programa e limpa mais
que uma vez. ela torna-se adequada para o desenvolvimento de dispositivos.
EEPROM - memria dos dados que necessitam de ser salvaguardados quando a
alimentao desligada. Normalmente usada para guardar dados importantes
que no se podem perder quando a alimentao, de repente, vai abaixo. Um
exemplo deste tipo de dados a temperatura fixada para os reguladores de
temperatura. Se, durante uma quebra de alimentao, se perdessem dados, ns
precisaramos de proceder a um novo ajustamento quando a alimentao fosse
restabelecida. Assim, o nosso dispositivo, perderia eficcia.
RAM - memria de dados usada por um programa, durante a sua execuo.
Na RAM, so guardados todos os resultados intermdios ou dados temporrios
durante a execuo do programa e que no so cruciais para o dispositivo, depois
de ocorrer uma falha na alimentao.
PORTO A e PORTO B so ligaes fsicas entre o microcontrolador e o mundo
exterior. O porto A tem cinco pinos e o porto B oito pinos.
CONTADOR/TEMPORIZADOR um registo de 8 bits no interior do
microcontrolador que trabalha independentemente do programa. No fim de cada
conjunto de quatro ciclos de relgio do oscilador, ele incrementa o valor
armazenado, at atingir o valor mximo (255), nesta altura recomea a contagem
a partir de zero. Como ns sabemos o tempo exato entre dois incrementos
sucessivos do contedo do temporizador, podemos utilizar este para medir
intervalos de tempo, o que o torna muito til em vrios dispositivos.
UNIDADE DE PROCESSAMENTO CENTRAL faz a conexo com todos os outros
blocos do microcontrolador. Ele coordena o trabalho dos outros blocos e executa o
programa do utilizador.
14
15
Aplicaes
O PIC16F84, perfeitamente adequado para muitas variedades de
aplicaes, como a indstria automvel, sensores remotos, fechaduras elctricas e
dispositivos de segurana. tambm um dispositivo ideal para cartes inteligentes,
bem como para dispositivos alimentados por baterias, por causa do seu baixo
consumo.
A memria EEPROM, faz com que se torne mais fcil usar microcontroladores
em dispositivos onde o armazenamento permanente de vrios parmetros, seja
necessrio (cdigos para transmissores, velocidade de um motor, freqncias de
recepo, 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 no eram anteriormente empregues (exemplo: funes de
temporizao, substituio de interfaces em sistemas de grande porte, aplicaes
de coprocessamento, etc.).
A possibilidade deste chip de ser programvel no sistema (usando somente
dois pinos para a transferncia de dados), do flexibilidade do produto, mesmo
depois de a sua montagem e teste estarem completos.
Esta capacidade, pode ser usada para criar linhas de produo e montagem, para
armazenar dados de calibragem disponveis apenas quando se proceder ao teste
final ou, ainda, para aperfeioar os programas presentes em produtos acabados.
16
Pipelining
Cada ciclo de instruo inclui as fases Q1, Q2, Q3 e Q4. A extrao do
cdigo de uma instruo da memria de programa, feita num ciclo de instruo,
enquanto que a sua descodificao e execuo, so feitos no ciclo de instruo
seguinte. Contudo, devido sobreposio pipelining (o microcontrolador ao
mesmo tempo que executa uma instruo extrai simultaneamente da memria o
cdigo da instruo seguinte), podemos considerar que, para efeitos prticos, cada
instruo demora um ciclo de instruo a ser executada. No entanto, se a instruo
provocar uma mudana no contedo do contador de programa (PC), ou seja, se o
PC no tiver que apontar para o endereo seguinte na memria de programa, mas
sim para outro (como no caso de saltos ou de chamadas de subrotinas), ento
dever considerar-se que a execuo desta instruo demora dois ciclos. Isto
acontece, porque a instruo vai ter que ser processada de novo, mas, desta vez, a
partir do endereo correto. O ciclo de chamada comea na fase Q1, escrevendo a
instruo no registo de instruo (Instruction Register IR). A descodificao e
execuo continua nas fases Q2, Q3 e Q4 do clock.
17
18
Tipos de osciladores
O PIC16F84 pode trabalhar com quatro configuraes de oscilador. Uma vez
que as configuraes com um oscilador de cristal e resistncia-condensador (RC)
so aquelas mais frequentemente usadas, elas so as nicas que vamos mencionar
aqui.
Quando o oscilador de cristal, a designao da configurao de XT, se o
oscilador for uma resistncia em srie com um condensador, tem a designao 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 envlucro de metal com dois pinos
onde foi escrita a freqncia a que o cristal oscila. Dois condensadores cermicos
devem ligar cada um dos pinos do cristal massa. Casos h em que cristal e
condensadores esto contidos no mesmo encapsulamento, tambm o caso do
ressonador cermico ao lado representado. Este elemento tem trs pinos com o
pino central ligado massa e os outros dois pinos ligados aos pinos OSC1 e OSC2
do microcontrolador. Quando projectamos um dispositivo, a regra colocar o
oscilador to perto quanto possvel do microcontrolador, de modo a evitar qualquer
interferncia nas linhas que ligam o oscilador ao microcontrolador.
Clock de um microcontrolador a
partir de um cristal de quartzo
Clock de um microcontrolador
com um ressonador
OSCILADOR RC
Em aplicaes em que a preciso da temporizao no um fator crtico, o
oscilador RC torna-se mais econmico. A freqncia de ressonncia do oscilador RC
depende da tenso de alimentao, da resistncia R, capacidade C e da
temperatura de funcionamento.
19
2.2 Reset
O reset usado para pr o microcontrolador num estado conhecido. Na
prtica isto significa que s vezes o microcontrolador pode comportar-se de um
modo inadequado em determinadas condies indesejveis. De modo a que o seu
funcionamento normal seja restabelecido, preciso fazer o reset do
microcontrolador, isto significa que todos os seus registos vo conter valores
iniciais pr-definidos, correspondentes a uma posio inicial. O reset no usado
somente quando o microcontrolador no se comporta da maneira que ns
queremos, mas, tambm pode ser usado, quando ocorre uma interrupo por parte
de outro dispositivo, ou quando se quer que o microcontrolador esteja pronto para
executar um programa .
De modo a prevenir a ocorrncia de um zero lgico acidental no pino MCLR
(a linha por cima de MCLR significa o sinal de reset ativado por nvel lgico
baixo), o pino MCLR tem que ser ligado atravs de uma resistncia ao lado positivo
da alimentao. Esta resistncia deve ter um valor entre 5 e 10K. Uma resistncia
como esta, cuja funo conservar uma determinada linha a nvel lgico alto,
chamada resistncia de pull up.
20
21
22
23
Registo STATUS
24
25
2.4 Portas
Porto, um grupo de pinos num microcontrolador que podem ser acedidos
simultaneamente, e, no qual ns podemos colocar uma combinao de zeros e uns
ou ler dele o estado existente. Fisicamente, porto um registo dentro de um
microcontrolador que est ligado por fios aos pinos do microcontrolador. Os portos
representam a conexo fsica 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 aplicaes 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 funes feita atravs
dos registos de configurao. Um exemplo disto o TOCS, quinto bit do registo
OPTION. Ao selecionar uma das funes, a outra automaticamente inibida.
26
Todos os pinos dos portos podem ser definidos como de entrada ou de sada,
de acordo com as necessidades do dispositivo que se est a projectar. Para definir
um pino como entrada ou como sada, preciso, em primeiro lugar, escrever no
registo TRIS, a combinao apropriada de zeros e uns. Se no local apropriado de
um registo TRIS for escrito o valor lgico 1, ento o correspondente pino do porto
definido como entrada, se suceder o contrrio, o pino definido como sada.
Todos os portos, tm um registo TRIS associado. Assim, para o porto A,
existe o registo TRISA no endereo 85h e, para o porto B existe o registo TRISB, no
endereo 86h.
PORTO B
O porto B tem 8 pinos associados a ele. O respectivo registo de direo de
dados chama-se TRISB e tem o endereo 86h. Ao pr a 1 um bit do registo TRISB,
define-se o correspondente pino do porto como entrada e se pusermos a 0 um bit
do registo TRISB, o pino correspondente vai ser uma sada. Cada pino do PORTO B
possui uma pequena resistncia de pull-up (resistncia que define a linha como
tendo o valor lgico 1). As resistncias de pull-up so ativadas pondo a 0 o bit
RBPU, que o bit 7 do registo OPTION. Estas resistncias de pull-up so
automaticamente desligadas quando os pinos do porto so configurados como
sadas. Quando a alimentao do microcontrolador ligada, as resistncias de pullup so tambm desativadas.
Quatro pinos do PORTO B, RB4 a RB7 podem causar uma interrupo, que
ocorre quando qualquer deles varia do valor lgico zero para valor lgico um ou o
contrrio. Esta forma de interrupo s pode ocorrer se estes pinos forem
configurados como entradas (se qualquer um destes 4 pinos for configurado como
sada, no ser gerada uma interrupo quando h variao de estado). Esta
modalidade de interrupo, acompanhada da existncia de resistncias de pull-up
internas, torna possvel resolver mais facilmente problemas frequentes que
podemos encontrar na prtica, como por exemplo a ligao 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 interrupo. Ao processar a interrupo, o
microcontrolador ter que identificar a tecla que a produziu. No recomendvel
utilizar o porto B, ao mesmo tempo que esta interrupo est a ser processada.
27
28
EEPROM que tem que ser seguido de modo a evitar uma escrita acidental. A
memria RAM para dados, ocupa um espao no mapa de memria desde o
endereo 0x0C at 0x4F, o que corresponde a 68 localizaes. Os locais da
memria RAM so tambm chamados registos GPR (General Purpose Registers =
Registos de uso genrico). Os registos GPR podem ser acedidos sem ter em
ateno o banco em que nos encontramos de momento.
Registos SFR
Os registos que ocupam as 12 primeiras localizaes nos bancos 0 e 1 so
registos especiais e tm a ver com a manipulao de certos blocos do
microcontrolador. Estes registos so os SFR (Special Function Registers ou Registos
de Funes Especiais).
29
Bancos de Memria
Alm da diviso em comprimento entre registos SFR e GPR, o mapa de
memria est tambm dividido em largura (ver mapa anterior) em duas reas
chamadas bancos. A seleo de um dos bancos feita por intermdio dos bits RP0
e RP1 do registo STATUS.
Exemplo :
bcf STATUS, RP0
A instruo BCF limpa o bit RP0 (RP0 = 0) do registo STATUS e, assim,
coloca-nos no banco 0.
bsf STATUS, RP0
A instruo BSF pe a um, o bit RP0 (RP0 = 1) do registo STATUS e, assim,
coloca-nos no banco 1.
Normalmente, os grupos de instrues muito usados so 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 compreensvel. Com a sua utilizao,
a seleco entre os dois bancos torna-se mais clara e o prprio programa fica mais
legvel.
BANK0 macro
Bcf STATUS, RP0 ;Selecionar o banco 0 da memria
Endm
BANK1 macro
Bsf STATUS, RP0 ; Selecionar o banco 1 da memria
Endm
Os locais de memria 0Ch 4Fh so registos de uso genrico (GPR) e so
usados como memria RAM. Quando os endereos 8Ch CFh so acedidos, ns
acedemos tambm s mesmas localizaes do banco 0. Por outras palavras,
quando estamos a trabalhar com os registos de uso genrico, no precisamos
de nos preocupar com o banco em que nos encontramos!
Contador de Programa
O contador de programa (PC = Program Counter), um registo de 13 bits
que contm o endereo da instruo que vai ser executada. Ao incrementar ou
alterar (por exemplo no caso de saltos) o contedo do PC, o microcontrolador
consegue executar as todas as instrues do programa, uma aps outra.
Pilha
O PIC16F84 tem uma pilha (stack) de 13 bits e 8 nveis de profundidade, o
que corresponde a 8 locais de memria com 13 bits de largura. O seu papel bsico
guardar o valor do contador de programa quando ocorre um salto do programa
principal para o endereo 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 endereo e carreg-lo no contador de programa. Quando nos movemos de um
programa para um subprograma, o contedo do contador de programa
empurrado para o interior da pilha (um exemplo disto a instruo CALL). Quando
so executadas instrues 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 sequncia foi interrompida.
Estas operaes de colocar e extrair da pilha o contador de programa, so
designadas por PUSH (meter na pilha) e POP (tirar da pilha), estes dois nomes
30
Endereamento Direto
Endereamento Indireto
O endereamento indireto, ao contrrio do direto, no tira um endereo do
cdigo instruo, mas f-lo com a ajuda do bit IRP do registo STATUS e do registo
FSR. O local endereado acedido atravs do registo INDF e coincide com o
endereo contido em FSR. Por outras palavras, qualquer instruo que use INDF
como registo, na realidade acede aos dados apontados pelo registo FSR. Vamos
31
supor, por exemplo, que o registo de uso genrico de endereo 0Fh contm o valor
20. Escrevendo o valor de 0Fh no registo FSR, ns vamos obter um ponteiro para o
registo 0Fh e, ao ler o registo INDF, ns iremos obter o valor 20, o que significa
que lemos o contedo do registo 0Fh, sem o mencionar explicitamente (mas
atravs de FSR e INDF). Pode parecer que este tipo de endereamento no tem
quaisquer vantagens sobre o endereamento direto, mas existem problemas que s
podem ser resolvidos de uma forma simples, atravs do endereamento indireto.
Endereamento Indireto
Um exemplo pode ser enviar um conjunto de dados atravs de uma
comunicao srie, usando buffers e indicadores (que sero discutidos num captulo
mais frente, com exemplos), outro exemplo limpar os registros da memria
RAM (16 endereos neste caso) como se pode ver a seguir.
Quando o contedo do registo FSR igual a zero, ler dados do registo INDF
resulta no valor 0 e escrever em INDF resulta na instruo NOP (no operation =
nenhuma operao).
2.6 Interrupes
As interrupes so um mecanismo que o microcontrolador possui e que
torna possvel 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 ligao entre um
microcontrolador e o mundo real que nos rodeia. Geralmente, cada interrupo
muda a direo de execuo do programa, suspendendo a sua execuo, enquanto
o microcontrolador corre um subprograma que a rotina de atendimento de
32
bit 0 RBIF (flag que indica variao no porto B) Bit que informa que houve
mudana nos nveis lgicos nos pinos 4, 5, 6 e 7 do porto B.
1= pelo menos um destes pinos mudou de nvel lgico
0= no ocorreu nenhuma variao nestes pinos
bit 1 INTF (flag de interrupo externa INT) Ocorrncia de uma interrupo
externa
1= ocorreu uma interrupo externa
0= no ocorreu uma interrupo 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
atravs do bit INTEDG do registo OPTION). O subprograma de atendimento desta
interrupo, deve repor este bit a 0, afim de que a prxima interrupo possa ser
detectada.
33
34
35
36
37
38
39
40
41
42
43
44
Registo EECON1
45
46
CAPTULO III
Conjunto de Instrues
Introduo
Conjunto de Instrues da Famlia de Microcontroladores PIC16Cxx
Transferncia de Dados
Instrues Lgicas e Aritmticas
Operaes de BITs
Direcionando o Fluxo do Programa
Perodo de Execuo da Instruo
Listagem das Palavras - Word list
Introduo
J dissemos que um microcontrolador no como qualquer outro circuito
integrado. Quando saem da cadeia de produo, a maioria dos circuitos integrados,
esto prontos para serem introduzidos nos dispositivos, o que no o caso dos
microcontroladores. Para que um microcontrolador cumpra a sua tarefa, ns temos
que lhe dizer exatamente o que fazer, ou, por outras palavras, ns temos que
escrever o programa que o microcontrolador vai executar. Neste captulo iremos
descrever as instrues que constituem o assembly, ou seja, a linguagem de baixo
nvel para os microcontroladores PIC.
Transferncia de Dados
A transferncia de dados num microcontrolador, ocorre entre o registo de trabalho
(W) e um registo f que representa um qualquer local de memria na RAM interna
(quer se trate de um registo especial ou de um registo de uso genrico).
As primeiras trs instrues (observe a tabela seguinte) referem-se escrita de
uma constante no registo W (MOVLW uma abreviatura para MOV a Literal para
W), cpia de um dado do registo W na RAM e cpia de um dado de um registo
da RAM no registo W (ou nele prprio, caso em que apenas a flag do zero
afectada) . A instruo CLRF escreve a constante 0 no registo f e CLRW escreve a
constante 0 no registo W. A instruo SWAPF troca o nibble (conjunto de 4 bits)
mais significativo com o nibble menos significativo de um registo, passando o
primeiro a ser o menos significativo e o outro o mais significativo do registo.
47
Operaes de BITs
As instrues BCF e BSF pem a 0 ou a 1 qualquer bit de qualquer stio da
memria. Apesar de parecer uma operao simples, ela executada do seguinte
modo, o CPU primeiro l o byte completo, altera o valor de um bit e, a seguir,
escreve o byte completo no mesmo stio.
48
Consoante o estado lgico do bit do registo f que est a ser testado, a instruo
seguinte no programa ou no executada.
49
50
CAPTULO IV
Linguagem de Programao Assembly
Introduo
Exemplo de Um Programa Escrito
Diretivas de Controle
4.1 #DEFINE
4.2 include
4.3 constant
4.4 variable
4.5 set
4.6 equ
4.7 org
4.8 end
Instrues Condicionais
4.9 IF
4.10 ELSE
4.11 ENDIF
4.12 WHILE
4.13 ENDW
4.14 IFDEF
4.15 IFNDEF
Diretivas de Dados
4.16 CBLOCK
4.17 ENDC
4.18 DB
4.19 DE
4.20 DT
Configurando Uma Diretiva
4.21 _CONFIG
4.22 PROCESSOR
Operadores Aritmticos
Arquivos Criados Aps a Compilao
Macros
Introduo
A capacidade de comunicar da maior importncia nesta rea. Contudo, isso s
possvel se ambas as partes usarem a mesma linguagem, ou seja, se seguirem as
mesmas regras para comunicarem. Isto mesmo se aplica comunicao entre os
microcontroladores e o homem. A linguagem que o microcontrolador e o homem
usam para comunicar entre si designada por linguagem assembly. O prprio
ttulo no tem um significado profundo, trata-se de apenas um nome como por
exemplo ingls ou francs. Mais precisamente, linguagem assembly apenas
uma soluo transitria. Os programas escritos em linguagem assembly devem ser
traduzidos para uma linguagem de zeros e uns de modo a que um
microcontrolador a possa receber. Linguagem assembly e assembler so coisas
diferentes. A primeira, representa um conjunto de regras usadas para escrever um
programa para um microcontrolador e a outra, um programa que corre num
computador pessoal que traduz a linguagem assembly para uma linguagem de
zeros e uns. Um programa escrito em zeros e uns diz-se que est escrito em
linguagem mquina.
51
Linguagem Assembly
Os elementos bsicos da linguagem assembly so:
Labels (rtulos)
Instrues
Operandos
Directivas
Comentrios
52
deve ser satisfeita, para que uma instruo Goto seja executada. importante que
um rtulo (label) seja iniciado com uma letra do alfabeto ou com um trao baixo
_. O comprimento de um rtulo pode ir at 32 caracteres. tambm importante
que o rtulo comece na primeira coluna.
Instrues
As instrues so especficas para cada microcontrolador, assim, se quisermos
utilizar a linguagem assembly temos que estudar as instrues desse
microcontrolador. O modo como se escreve uma instruo designado por
"sintaxe". No exemplo que se segue, possvel reconhecer erros de escrita, dado
que as instrues movlp e gotto no existem no microcontrolador PIC16F84.
Operandos
Operandos so os elementos da instruo necessrios para que a instruo possa
ser executada. Normalmente so registos, variveis e constantes. As constantes
so designadas por literais. A palavra literal significa nmero.
Comentrios
Comentrio um texto que o programador escreve no programa afim de tornar
este mais claro e legvel. colocado logo a seguir a uma instruo e deve comear
com uma semi-vrgula ";".
53
Diretivas
Uma diretiva parecida com uma instruo mas, ao contrrio desta,
independente do tipo de microcontrolador e uma caracterstica inerente prpria
linguagem assembly. As diretivas servem-se de variveis ou registos para
satisfazer determinados propsitos. Por exemplo, NIVEL, pode ser uma designao
para uma varivel localizada no endereo 0Dh da memria RAM. Deste modo, a
varivel que reside nesse endereo, pode ser acedida pela palavra NIVEL. muito
mais fcil a um programador recordar a palavra NIVEL, que lembrar-se que o
endereo 0Dh contm informao sobre o nvel.
54
Diretivas de Controle
4.1 #DEFINE: Troca de uma poro de texto por outra
Sintaxe: #define<nome> [< texto atribudo a nome > ]
Descrio: De cada vez que a palavra <nome> aparece no programa, vai ser
substituda por <texto atribudo a nome>.
Exemplo:
#define ligado 1
#define desligado 0
Diretivas similares: #UNDEFINE, IFDEF, IFNDEF
4.2 INCLUDE: Incluir um arquivo adicional num programa
Sintaxe:
include <<nome_do_arquivo>>
include <nome_do_arquivo>
Descrio: A aplicao desta diretiva faz com que um arquivo completo seja
copiado para o local em que a diretiva include se encontra. Se o nome do arquivo
estiver entre aspas, estamos a lidar com um arquivo do sistema, se no estiver
55
entre aspas, mas sim entre os sinais < >, trata-se de um arquivo do utilizador. A
diretiva include, contribui para uma melhor apresentao do programa principal.
Exemplo:
include < regs.h >
include subprog.asm
4.3 CONSTANT: Atribui um valor numrico constante a uma designao
textual
Sintaxe: constant < nome > = < valor >
Descrio: Cada vez que < nome > aparece no programa, substitudo por <
valor > .
Exemplo:
constant MAXIMO = 100
constant Comprimento = 30
Diretivas similares: SET, VARIABLE
4.4 VARIABLE: Atribui um valor numrico varivel designao textual
Sintaxe: variable < nome > = < valor >
Descrio: Ao utilizar esta diretiva, a designao textual muda o seu valor.
Difere da diretiva CONSTANT no facto de, depois de a directiva ser aplicada, o valor
da designao textual poder variar.
Exemplo:
variable nivel = 20
variable tempo = 13
Diretivas similares: SET, CONSTANT
4.5 SET: Definir uma varivel assembly
Sintaxe: < nome_variavel > set <valor>
Descrio: varivel < nome_variavel > atribuda a expresso <valor> . A SET
semelhante a EQU, mas com a diretiva SET possvel tornar a definir a varivel
com outro valor.
Exemplo:
nivel set 0
comprimento set 12
nivel set 45
Diretivas similares: EQU, VARIABLE
4.6 EQU: Definindo uma constante em assembly
Sintaxe: < nome_da_constante > equ < valor >
Descrio: Ao nome de uma constante < nome_de_constante > atribudo um
valor < valor >
Exemplo:
cinco equ 5
seis equ 6
sete equ 7
56
Instrues Condicionais
4.9 IF: Ramificao condicional do programa
Sintaxe: if <termo_condicional>
Descrio: Se a condio em <termo_condicional> estiver satisfeita, a parte do
programa que se segue diretiva IF, dever ser executada. Se a condio no for
satisfeita, ento executada a parte que se segue s diretivas ELSE ou ENDIF.
Exemplo:
if nivel = 100
goto ENCHER
else
goto DESPEJAR
endif
Directivas similares: ELSE, ENDIF
4.10 ELSE: Assinala um bloco alternativo se a condio termo_condicional
presente em 'IF' no se verificar
Sintaxe: Else
Descrio: Usado com a diretiva IF como alternativa no caso de termo_condicional
ser falso.
Exemplo:
if tempo < 50
goto DEPRESSA
else
57
goto DEVAGAR
endif
Instrues similares: ENDIF, IF
4.11 ENDIF: Fim de uma seco condicional do programa
Sintaxe: endif
Descrio: Esta diretiva escrita no fim de um bloco condicional, para informar o
tradutor do assembly de que o bloco condicional terminou.
Exemplo:
if nivel = 100
goto METER
else
goto TIRAR
endif
Directivas similares: ELSE, IF
4.12 WHILE: A execuo da seco do programa prossegue, enquanto a
condio se verificar
Sintaxe:
while <condio>
...
endw
Descrio: As linhas do programa situadas entre WHILE e ENDW devem ser
executadas, enquanto a condio for verdadeira. Se a condio deixar de se
verificar, o programa dever executar as instrues a partir da linha que sucede a
ENDW. O nmero de instrues compreendidas entre WHILE e ENDW pode ir at
100 e podem ser executadas at 256 vezes.
Exemplo:
while i < 10
i=i+1
endw
4.13 ENDW: Fim da parte condicional do programa
Sintaxe: endw
Descrio: Esta diretiva escrita no fim do bloco condicional correspondente a
WHILE, assim, o assembler fica a saber que o bloco condicional chegou ao fim.
Exemplo:
while i < 10
i=i+1
endw
Directivas similares: WHILE
4.14 IFDEF: Executar uma parte do programa se um smbolo estiver
definido
Sintaxe: ifdef < designao >
Descrio: Se a designao <designao> tiver sido previamente definida
(normalmente atravs da diretiva #DEFINE), as instrues que se lhe sucedem
58
Diretivas de Dados
4.16 CBLOCK: Definir um bloco para as constantes nomeadas
Sintaxe:
Cblock [< termo >]
<rtulo> [:<incremente>], <rtulo> [:<incremente>]......
endc
Descrio: Esta diretiva usada para atribuir valores s constantes a seguir
nomeadas. A cada termo seguinte, atribudo um valor superior em uma unidade
ao anterior. No caso de <incremente> estar preenchido, ento o valor de
<incremente> que adicionado constante anterior.
O valor do parmetro <termo>, o valor inicial. Se no for dado, ento, por
defeito, considerado igual a zero.
Exemplo:
cblock 0x02
primeiro, segundo ;primeiro = 0x02, segundo = 0x03
terceiro ;terceiro = 0x04
endc
cblock 0x02
primeiro : 4, segundo : 2 ;primeiro = 0x06, segundo = 0x08
terceiro ;terceiro = 0x09
endc
Diretivas similares: ENDC
59
60
Operadores Aritmticos
61
62
Macros
As macros so elementos muito teis em linguagem assembly. Uma macro pode
ser descrita em poucas palavras como um grupo de instrues definido pelo
utilizador que acrescentado ao programa pelo assembler, sempre que a macro for
invocada. possvel escrever um programa sem usar macros. Mas, se as
utilizarmos, o programa torna-se muito mais legvel, especialmente se estiverem
vrios programadores a trabalhar no mesmo programa. As macros tm afinidades
com as funes nas linguagens de alto nvel.
Como as escrever:
<rtulo> macro
[<argumento1>,<argumento2>,...,<argumentoN>]
...
...
endm
Pelo modo como so escritas, vemos que as macros podem aceitar argumentos, o
que tambm muito til em programao.
63
Quando o argumento invocado no interior de uma macro, ele vai ser substitudo
pelo valor <argumentoN>.
Exemplo:
O exemplo de cima, mostra uma macro cujo propsito enviar para o porto B, o
argumento ARG1, definido quando a macro foi invocada. Para a utilizarmos num
programa, basta escrever uma nica linha: ON_PORTB 0xFF e, assim, colocamos o
valor 0xFF no porto B. Para utilizar uma macro no programa, necessrio incluir o
arquivo macro no programa principal, por intermdio da instruo #include
nome_da_macro.inc. O contedo da macro automaticamente copiado para o
local em que esta macro est escrita. Isto pode ver-se melhor no arquivo lst visto
atrs, onde a macro copiada por baixo da linha #include bank.inc.
64
CAPTULO V
MPLAB
Introduo
5.1 Instalando o Programa MPLAB
5.2 Introduo ao MPLAB
5.3 Escolhendo o Modo de Desenvolvimento
5.4 Implementando um Projeto
5.5 Gerando Novos Arquivos em Assembly
5.6 Escrevendo um Programa
5.7 Simulador MPSIM
5.8 Barra de Ferramenta Toolbar
Introduo
O MPLAB um pacote de programas que correm no Windows e que tornam mais
fcil escrever ou desenvolver um programa. Pode descrever-se ainda melhor como
sendo um ambiente de desenvolvimento para uma linguagem de programao
standard e destinado a correr num computador pessoal (PC). Anteriormente, as
operaes incidiam sobre uma linha de instruo e contemplavam um grande
nmero de parmetros, at que se introduziu o IDE "Integrated Development
Environment" (Ambiente Integrado de Desenvolvimento) e as operaes tornaramse mais fceis, usando o MPLAB. Mesmo agora, as preferncias das pessoas
divergem e alguns programadores preferem ainda os editores standard e os
intrpretes linha a linha. Em qualquer dos casos, o programa escrito legvel e
uma ajuda bem documentada est disponvel.
65
66
67
Como suposto irmos trabalhar com o Windows 95 (ou um sistema operativo ainda
mais moderno), tudo aquilo que diga respeito ao sistema operativo DOS, no deve
ser contemplado ao fazer a seleo da linguagem assembly. Contudo, se preferir
continuar a trabalhar em DOS, ento precisa de desmarcar todas as opes
relacionadas com o Windows e selecionar os componentes apropriados para o DOS.
68
Os utilizadores que j tenham o MPLAB instalado (verso mais antiga que esta),
necessitam da opo que se segue.
O propsito desta opo salvaguardar cpias de todos os arquivos que foram
modificados durante o processo de mudana da verso antiga para a verso mais
moderna do MPLAB. No nosso caso, deixaremos a opo NO selecionada, porque se
presume que estamos a fazer a primeira instalao do MPLAB no nosso
computador.
69
70
A instalao a decorrer
71
72
73
74
Depois de dar um nome ao projecto clique em OK. Veremos que aparece uma nova
janela, idntica que se mostra na figura seguinte.
75
76
77
78
Este programa tem que ser copiado numa janela que esteja aberta, ou copiado do
disco ou tirado da pgina da internet da MikroElektronika usando os comandos
copiar e colar. Quando o programa copiado para a janela "proba.asm", ns
podemos usar o comando PROJECT -> BUILD ALL (se no existirem erros) e, uma
nova janela idntica representada na figura seguinte, vai aparecer.
79
80
81
Simulador com janelas abertas para registos SFR, filas registos e variveis
O prximo comando num simulador DEBUG>RUN>STEP que inicia a simulao
passo a passo do programa. O mesmo comando pode ser introduzido atravs da
tecla <F7> do teclado (de um modo geral, todos os comandos mais significativos
tm teclas atribudas no teclado). Utilizando a tecla F7, o programa executado
passo-a-passo. Quando utilizamos uma macro, o arquivo que contm a macro
aberto (Bank.inc) e podemos prosseguir atravs da macro. Na janela dos registos
SFR, podemos observar como o registo de trabalho W recebe o valor 0xFF e como
este valor transferido para o porto B. Clicando de novo em F7 ns no
conseguimos nada porque o programa entra num "loop infinito". Loop infinito um
termo que iremos encontrar muitas vezes. Representa um loop (lao) do qual o
microcontrolador no pode sair, a menos que ocorra uma interrupo (se o
programa utilizar interrupes) ou, ento, quando executado o reset do
microcontrolador.
82
Sempre que se clica este cone, uma nova toolbar aparece. Se clicarmos quatro
vezes seguidas, a barra atual reaparece.
cone para abrir um projecto. O projecto aberto desta maneira contm todos os
ajustamentos do cran e de todos os elementos que so cruciais para o projecto
atual.
cone para guardar um projecto. O projecto guardado conserva todos os
ajustamentos de janelas e parmetros. Quando lermos o programa de novo,
tudo regressa ao cran, tal e qual como quando o programa foi fechado.
Para procurar uma parte do programa ou palavras de que necessitamos, em
programas maiores. Usando este cone podemos encontrar rapidamente uma
parte do programa, rtulos, macros, etc.
cone para cortar uma parte do texto. Este e os trs cones seguintes so
standardisados em todos os programas que lidam com arquivos de texto. Como
cada programa representado por uma poro de texto, estas operaes so
muito teis.
Para copiar uma poro de texto. Existe uma diferena entre este e o cone
anterior. Quando se corta, tira-se uma parte de texto para fora do cran (e do
programa), que poder ser colado a seguir. Mas, tratando-se de uma operao
de cpia, o texto copiado mas no cortado e permanece visualizado no cran.
83
Quando uma poro de texto copiado ou cortado, ela move-se para uma parte
da memria que serve para transferir dados no sistema operacional Windows.
Mais tarde, clicando neste cone, ela pode ser colada num texto, no stio onde
se encontra o cursor.
Guardar um programa (arquivo assembler).
Comear a execuo do programa a toda a velocidade. Essa execuo,
reconhecida pelo aparecimento de uma linha de estado amarela. Nesta
modalidade de execuo, o simulador executa o programa a toda a velocidade
at que interrompido pelo clicar no cone de trfego vermelho.
Pra a execuo do programa a toda a velocidade. Depois de clicar neste cone,
a linha de status torna-se de novo cinzenta e a execuo do programa pode
continuar passo a passo.
Execuo do programa passo a passo. Clicando neste cone, ns comeamos a
executar uma instruo na linha de programa a seguir linha atual.
Passar por cima. Como um simulador no mais que uma simulao da
realidade por software, possvel passar por cima de algumas instrues e o
programa prosseguir normalmente, depois disso. Normalmente, a parte do
programa que interessa ao programador a que se segue a esse salto por
cima.
Faz o reset do microcontrolador. Clicando neste cone, o contador de programa
posicionado no incio do programa e a simulao pode comear.
Clicando neste cone obtemos uma janela com um programa, mas neste caso na
memria de programa, onde podemos ver quais as instrues e em que
endereos.
Com a ajuda deste cone, obtemos uma janela com o contedo da memria RAM
do microcontrolador .
Clicando neste cone, aparece a janela dos registos SFR (registos com funes
especiais). Como os registos SFR so usados em todos os programas,
recomenda-se que, no simulador, esta janela esteja sempre ativa.
Se uma programa contiver variveis cujos valores necessitemos de acompanhar
(por exemplo um contador), ento necessria uma janela para elas, isso pode
ser feito usando este cone.
Quando certos erros num programa se manifestam durante o processo de
simulao, o programa tem que ser corrigido. Como o simulador usa o arquivo
HEX como entrada, a seguir correo dos erros, ns necessitamos de traduzir
de novo o programa, de maneira a que estas mudanas tambm sejam
transferidas para o simulador. Clicando neste cone, o projecto completo de
novo traduzido e, assim, obtemos a nova verso do arquivo HEX para o
simulador.
84
CAPTULO VI
Exemplos
Introduo
6.1 Alimentando o Microcontrolador
6.2 Utilizao de Macros em Programas
Macro PRINT
6.3 Exemplos
Teclado
Optoacopladores
Rel
Gerando um Som
Display LCD
Comunicao em Srie
Introduo
Os exemplos que se mostram neste captulo, exemplificam como se deve ligar o
microcontrolador PIC a perifricos ou a outros dispositivos quando projectamos o
nosso prprio sistema de microcontrolador. Cada exemplo contm uma descrio
detalhada do hardware com o esquema elctrico e comentrios acerca do
programa. Todos os programas podem ser copiados da pgina da internet da
MikroElektronika.
85
86
87
88
O modo como uma sequncia formada usando uma instruo dt, mostra-se no
seguinte exemplo:
org
0x00
goto
Main
String
89
6.3 Exemplos
LED - Dodos Emissores de Luz
Os LEDs so seguramente uns dos componentes mais usados em electrnica. LED
uma abreviatura para Light Emitting Diode (Dodo emissor de luz). Quando se
escolhe um LED, vrios parmetros devem ter-se em ateno: dimetro, que
usualmente de 3 ou 5mm (milmetros), corrente de funcionamento, habitualmente
de cerca de 10mA (pode ser menor que 2mA para LEDs de alta eficincia alta
luminosidade) e, claro, a cor que pode ser essencialmente vermelha ou verde,
embora tambm existam amarelos, laranjas, azuis, etc.
Os LEDs, para emitirem luz, tm que ser ligados com a polaridade correcta e a
resistncia de limitao de corrente tem tambm que ter o valor correcto para que
o LED no se estrague por sobreaquecimento. O plo positivo da alimentao deve
estar do lado do nodo e o negativo do lado do ctodo. Para identificar os terminais
do led, podemos ter em ateno que, normalmente, o terminal do ctodo mais
curto e, junto deste, a base do LED plana. Os LEDs s emitem luz se a corrente
fluir do nodo para o ctodo. Se for ao contrrio, a juno PN fica polarizada
inversamente e, a corrente, no passa. Para que o LED funcione correctamente,
deve ser adicionada uma resistncia em srie com este, que vai limitar a corrente
atravs do LED, evitando que este se queime. O valor desta resistncia
determinado pelo valor da corrente que se quer que passe atravs do LED. A
corrente mxima que pode atravessar um LED est estabelecida pelo fabricante. Os
LEDs de alto rendimento podem produzir uma sada muito satisfatria com uma
corrente de 2mA.
Para determinar o valor da resistncia em srie, ns necessitamos de saber o valor
da alimentao. A este valor vamos subtrair a queda de tenso caracterstica no
LED. Este valor pode variar entre 1,2v e 1,6v, dependendo da cor do LED. O
resultado desta subtraco a queda de tenso na resistncia Ur. Sabendo esta
tenso e a corrente, determinamos o valor da resistncia usando a frmula
R=Ur/I.
90
91
Teclado
As teclas de um teclado, so dispositivos mecnicos usados para desfazer ou
estabelecer as ligaes entre pares de pontos. As teclas podem aparecer com
vrios tamanhos e satisfazer vrios propsitos. As teclas ou interruptores que
vamos usar so tambm designadas por teclas-dip. Elas so muito usadas em
electrnica e so soldadas directamente na placa de circuito impresso. Possuem
quatro pinos (dois para cada contacto), o que lhes confere uma boa estabilidade
mecnica.
92
93
94
95
Optoacopladores
Os optoacopladores incluem um LED e um fototransistor juntos no mesmo
encapsulamento. O propsito do optoacoplador manter duas partes do circuito
isoladas entre si.
Isto feito por um certo nmero de razes:
Interferncia. Uma parte do circuito pode estar colocada num stio onde pode
captar um bocado de interferncia (de motores elctricos, equipamento de
soldadura, motores a gasolina, etc.). Se a sada deste circuito estiver ligada
atravs de um optoacoplador a um outro circuito, somente os sinais desejados
passam pelo optoacoplador. Os sinais de interferncia no tm fora suficiente
para activar o LED do optoacoplador e assim so eliminados. Exemplos tpicos
so unidades industriais com muitas interferncias que afectam os sinais nas
linhas. Se estas interferncias afectarem o funcionamento da seco de
controle, podem ocorrer erros e a unidade parar de trabalhar.
Isolamento e amplificao de um sinal em simultneo. Um sinal de
amplitude baixa, por exemplo de 3V, capaz de activar um optoacoplador e a
sada do optoacoplador pode ser ligada a uma linha de entrada do
microcontrolador. O microcontrolador requer uma entrada de 5v e, neste caso,
o sinal amplificado de 3v para 5v. Pode tambm ser utilizado para amplificar
um sinal de corrente. Ver em baixo como se pode usar uma linha de sada de
um microcontrolador para amplificar a corrente.
Tenso de isolamento elevada. Os optoacopladores possuem
intrinsecamente uma grande tenso de isolamento. Como o LED est
completamente separado do fototransistor, os optoacopladores podem exibir
uma tenso de isolamento de 3kv ou superior.
Os optoacopladores podem ser usados como dispositivos de entrada e de sada.
Alguns, fornecem funes adicionais tais como Schmitt trigger (a sada de um
Schmitt trigger 0 ou 1 ele transforma sinais descendentes ou ascendentes de
baixo declive em sinais zero ou um bem definidos). Os optoacopladores so
empacotados numa nica unidade, ou em grupos de dois ou mais num nico
encapsulamento. Eles podem tambm servir como fotointerruptores, uma roda com
ranhuras gira entre o LED e o fototransistor, sempre que a luz emitida pelo LED
interrompida, o transistor produz um impulso.
Cada optoacoplador necessita de duas alimentaes para funcionar. Ele pode ser
usado s com uma alimentao mas, neste caso, a capacidade de isolamento
perde-se.
Optoacoplador numa linha de entrada
O modo como trabalha simples: quando o sinal chega, o LED do optoacoplador
conduz e ilumina o fototransistor que est na mesma cpsula. Quando o transistor
comea a conduzir, a tenso entre o colector e o emissor cai para 0,5V ou menos o
que o microcontrolador interpreta como nvel lgico zero no pino RA4.
O exemplo em baixo, aplicvel em casos como um contador usado para contar
items numa linha de produo, determinar a velocidade do motor, contar o nmero
de rotaes de um eixo, etc.
Vamos supor que o sensor um microinterruptor. Cada vez que o interruptor
fechado, o LED iluminado. O LED transfere o sinal para o fototransistor fazendo
este conduzir, assim produzido um sinal BAIXO na entrada RA4 do
microcontrolador. No microcontrolador deve existir um programa que evite uma
falsa contagem e um indicador ligado s sadas do microcontrolador, que mostre o
estado actual da contagem.
96
97
98
99
100
101
Gerando um Som
Um diafragma pizoelctrico pode ser adicionado a uma linha de sada do
microcontrolador para se obterem tons, bips e sinais.
importante saber-se que existem dois tipos de dispositivos pizo emissores de
som. Um, contm componentes activos encontram-se dentro do envlucro e s
precisam de que lhe seja aplicada uma tenso contnua que emita um tom ou um
bip. Geralmente os tons ou bips emitidos por estes dispositivos sonoros no podem
mudar, pois so fixados pelos respectivos circuitos internos. No este o tipo de
dispositivo que vamos discutir neste artigo.
O outro tipo requer, para que possa funcionar, que lhe seja aplicado um sinal.
Dependendo da frequncia da forma de onda, a sada pode ser um tom, uma
melodia, um alarme ou mesmo mensagens de voz.
Para o pormos a funcionar, vamos fornecer-lhe uma forma de onda constituda por
nveis Alto e Baixo sucessivos. a mudana de nvel ALTO para BAIXO ou de BAIXO
para ALTO que faz com que o diafragma se mova para produzir um pequeno som
caracterstico. A forma de onda pode corresponder a uma mudana gradual (onda
sinusoidal) ou uma variao rpida (onda rectangular). Um computador um
instrumento ideal para produzir uma onda quadrada. Quando se utiliza a onda
quadrada produz-se um som mais spero.
Ligar um diafragma pizoelctrico uma tarefa simples. Um pino ligado massa e
o outro sada do microcontrolador, como se mostra na figura em baixo. Deste
modo, aplica-se uma forma de onda rectangular de 5v ao pizo. Para produzir um
alto nvel de sada, a forma de onda aplicada tem que ter uma maior grandeza, o
que requer um transistor e uma bobina.
102
103
O exemplo que se segue, mostra o uso de uma macro num programa. O programa
produz duas melodias que so obtidas, premindo T1 ou T2. Algumas das macros
apresentadas anteriormente so utilizadas no programa.
104
105
106
107
108
109
110
111
112
113
114
115
Display LCD
Cada vez mais os microcontroladores esto a usar displays de cristal lquido - LCD
para visualizarem a sada de dados. A discusso que se segue diz respeito ligao
de um display LCD Hitachi a um microcontrolador PIC. Estes displays LCD so
baseados no mdulo de LCD HD44780 da Hitachi, so baratos, fceis de usar e
permitem utilizar os 8x80 pixels de display. Estes displays LCD contm um conjunto
116
117
A leitura de dados do LCD feita da mesma maneira, mas a linha de controle tem
que estar a nvel alto. Antes de enviarmos comandos ou dados para o mdulo LCD,
este tem que ser iniciado. Comandos tpicos enviados depois de um reset podem
ser: ativar um display, visualizar um cursor e escrever os caracteres da esquerda
para a direita.
Depois de iniciado o LCD, ele fica pronto para continuar a receber dados ou
comandos. Se receber um caracter, ele escreve-o no display e move o cursor um
espao para a direita. O cursor marca o local onde o prximo caracter vai ser
escrito. Quando queremos escrever uma cadeia de caracteres, primeiro
necessitamos de estabelecer um endereo de incio e depois enviar os caracteres,
um de cada vez. Os caracteres que podem ser mostrados no display esto
guardados na RAM de display de dados (DD). O tamanho da DDRAM de 80 bytes.
O display LCD tambm possui 64 bytes de RAM Geradora de Caracteres (CG). Os
dados na RAM CG representam caracteres num mapa de 8 bits.
Cada caracter gasta at 8 bytes de RAM geradora de caracteres, assim, o nmero
total de caracteres que podem ser definidos pelos utilizador pode ir at oito. De
modo a ler o mapa de bits de caracteres no display LCD, temos primeiro que
estabelecer o endereo de incio na CGRAM (0 geralmente) e, a seguir, escrever
dados no display. A definio de caracter especial mostra-se na figura ao lado.
118
Uma maneira, verificar o bit BUSY que coincide com a linha de dados D7. Este
no , contudo, o melhor mtodo porque o LCD pode bloquear e o programa
permanecer para sempre num loop de verificao do bit BUSY. A outra maneira,
introduzir um tempo de espera no programa. Este perodo de tempo deve ser
suficientemente longo para permitir que o LCD termine a operao. As instrues
destinadas a ler ou escrever na memria de um LCD, mostram-se na tabela
anterior.
No princpio, dissemos que eram precisas 11 linhas de entrada e sada para
comunicar com um LCD. Contudo, tambm possvel comunicar com um LCD,
atravs de um bus de dados de apenas 4 bits. Deste modo, possvel reduzir para
sete o total de linhas de comunicao. Uma ligao, atravs de um bus de dados de
4 bits, mostra-se no diagrama em baixo. Neste exemplo, ns usamos um display
LCD com 2x16 caracteres e que o fabricante japons SHARP designa por
LM16X212. A mensagem character escrita na primeira linha e dois caracteres
especiais ~ e } so tambm mostrados. Na segunda linha, est a palavra
mikroElektronika.
119
120
121
122
123
124
125
126
O programa principal demonstra como usar o display LCD e gerar novos caracteres.
No incio do programa, ns necessitamos de declarar as variveis LCDbuf e
LCDtemp usadas pelos subprogramas para o LCD, bem como o porto do
microcontrolador a que o LCD vai ser ligado. O programa escreve a mensagem
characters: na primeira linha e apresenta tambm dois caracteres especiais ~ e
}. Na segunda linha mostra-se mikroElektronika.
127
128
129
130
131
132
133
Comunicao em Srie
SCI a abreviatura para Serial Communication Interface (Interface de
Comunicao Srie) e existe na maioria dos microcontroladores. No caso do
PIC16F84 o SCI no est disponvel em hardware, mas pode ser implementado por
software.
134
135
136
137
138
139
140
Apndice A
Conjunto de Instrues
A.1 MOVLW
A.2 MOVWF
A.3_MOVF
A.4 CLRW
A.5 CLRF
A.6_SWAPF
A.7 ADDLW
A.8 ADDWF
A.9 SUBLW
A.10
A.11
A.12
A.13
A.14
A.15
A.16
A.17
A.18
SUBWF
ANDLW
ANDWF
IORLW
IORWF
XORLW
XORWF
INC
DECF
A.19
A.20
A.21
A.22
A.23
A.24
A.25
A.26
A.27
RLF
RRF
COMF
BCF
BSF
BTFSC
BTFSS
INCFSZ
DECFSZ
A.28
A.29
A.30
A.31
A.32
A.33
A.34
A.35
GOTO
CALL
RETURN
RETLW
RETFIE
NOP
CLRWDT
SLEEP
[rtulo] MOVLW k
Descrio:
Operao:
k(W)
Operando:
0 k 255
Flag:
Nmero de palavras: 1
Nmero de ciclos:
Exemplo 1:
MOVLW 0x5A
Depois da instruo: W= 0x5A
Exemplo 2:
MOVLW REGISTAR
Antes da instruo: W = 0x10 e REGISTAR = 0x40
Depois da instruo: W = 0x40
[rtulo] MOVWF f
Descrio:
Operao:
W(f)
Operando:
0 f 127
Flag:
Nmero de palavras: 1
Nmero de ciclos:
Exemplo 1:
MOVWF OPTION_REG
Antes da instruo: OPTION_REG = 0x20
W = 0x40
Depois da instruo: OPTION_REG = 0x40
W = 0x40
Exemplo 2:
MOVWF INDF
141
[rtulo] MOVF f, d
Descrio:
Operao:
f(d)
Operando:
0 f 127, d [0, 1]
Flag:
Nmero de palavras:
Nmero de ciclos:
Exemplo 1:
MOVF FSR, 0
Antes da instruo: FSR = 0xC2
W = 0x00
Depois da instruo: W = 0xC2
Z=0
Exemplo 2:
MOVF INDF, 0
Antes da instruo: W = 0x17
FSR = 0xC2
contedo do endereo 0xC2 = 0x00
Depois da instruo: W = 0x00
FSR = 0xC2
contedo do endereo 0xC2 = 0x00
Z=1
142
[rtulo] CLRW
Descrio:
Operao:
0(W)
Operando:
Flag:
Nmero de palavras: 1
Nmero de ciclos:
Exemplo:
CLRW
Antes da instruo: W = 0x55
Depois da instruo: W = 0x00
Z=1
[rtulo] CLRF f
Descrio:
Operao:
0f
Operando:
0 f 127
Flag:
Nmero de palavras:
Nmero de ciclos:
Exemplo 1:
CLRF STATUS
Antes da instruo: STATUS = 0xC2
Depois da instruo: STATUS = 0x00
Z=1
Exemplo 2:
CLRF INDF
Antes da instruo: FSR = 0xC2
contedo do endereo 0xC2 = 0x33
Depois da instruo: FSR = 0xC2
contedo do endereo 0xC2 = 0x00
Z=1
143
[rtulo] SWAPF f, d
Descrio:
Operao:
Operando:
0 f 127, d [0, 1]
Flag:
Nmero de palavras:
Nmero de ciclos:
Exemplo 1:
SWAPF REG, 0
Antes da instruo: REG = 0xF3
Depois da instruo: REG = 0xF3
W = 0x3F
Exemplo 2:
SWAPF REG, 1
Antes da instruo: REG = 0xF3
Depois da instruo: REG = 0x3F
[rtulo] ADDLW k
Descrio:
Operao:
(W)+kW
Operando:
0 k 255
Flag:
C, DC, Z
Nmero de palavras:
Nmero de ciclos:
Exemplo 1:
ADDLW 0x15
Antes da instruo: W= 0x10
Depois da instruo: W= 0x25
Exemplo 2:
ADDLW REG
Antes da instruo: W = 0x10
REG = 0x37
Depois da instruo: W = 0x47
144
[rtulo] ADDWF f, d
Descrio:
Operao:
(W) + ( f ) d, d [0, 1]
Operando:
0 f 127
Flag:
C, DC, Z
Nmero de palavras:
Nmero de ciclos:
Exemplo 1:
ADDWF FSR, 0
Antes da instruo: W = 0x17
FSR = 0xC2
Depois da instruo: W = 0xD9
FSR = 0xC2
Exemplo 2:
ADDWF INDF,0
Antes da instruo: W = 0x17
FSR = 0xC2
contedo do endereo 0xC2 = 0x20
Depois da instruo: W = 0x37
FSR = 0xC2
Contedo do endereo 0xC2 = 0x20
[rtulo] SUBLW k
Descrio:
Operao:
k-(W)W
Operando:
0 k 255
Flag:
C, DC, Z
Nmero de palavras: 1
Nmero de ciclos:
Exemplo 1:
SUBLW 0x03
Antes da instruo: W= 0x01, C = x, Z = x
Depois da instruo: W= 0x02, C = 1, Z = 0 Resultado >
0
Antes da instruo: W= 0x03, C = x, Z = x
Depois da instruo: W= 0x00, C = 1, Z = 1 Resultado =
0
Antes da instruo: W= 0x04, C = x, Z = x
Depois da instruo: W= 0xFF, C = 0, Z = 0 Resultado <
0
145
Exemplo 2:
SUBLW REG
Antes da instruo: W = 0x10
REG = 0x37
Depois da instruo: W = 0x27
C = 1 Resultado > 0
[rtulo] SUBWF f, d
Descrio:
Operao:
( f ) - (W) d
Operando:
0 f 127, d [0, 1]
Flag:
C, DC, Z
Nmero de
palavras:
Nmero de
ciclos:
Exemplo:
SUBWF REG, 1
Antes da instruo: REG= 3, W= 2, C = x, Z = x
Depois da instruo: REG= 1, W= 2, C = 1, Z = 0 Resultado > 0
Antes da instruo: REG= 2, W= 2, C = x, Z = x
Depois da instruo: REG=0, W= 2, C = 1, Z = 1 Resultado = 0
Antes da instruo: REG=1, W= 2, C = x, Z = x
Depois da instruo: REG= 0xFF, W=2, C = 0, Z = 0 Resultado < 0
[rtulo] ANDLW k
Descrio:
Operao:
( W ) .AND. k W
Operando:
0 k 255
Flag:
Nmero de palavras: 1
Nmero de ciclos:
Exemplo 1:
ANDLW 0x5F
Antes da instruo: W= 0xA3 ;0101 1111(0x5F)
;1010 0011(0xA3)
Depois da instruo: W= 0x03 ;0000 0011(0x03)
146
Exemplo 2:
ANDLW REG
Antes da instruo: W = 0xA3 ;1010 0011(0xA3)
REG = 0x37 ;0011 0111(0x37)
Depois da instruo: W = 0x23 ;0010 0011(0x23)
[rtulo] ANDWF f, d
Descrio:
Operao:
(W) .AND. ( f ) d
Operando:
0 f 127, d [0, 1]
Flag:
Nmero de
palavras:
Nmero de
ciclos:
Exemplo 1:
ANDWF FSR, 1
Antes da instruo: W= 0x17, FSR= 0xC2 ;0001 1111(0x17)
;1100 0010(0xC2)
Depois da instruo: W= 0x17, FSR= 0x02 ;0000 0010(0x02)
Exemplo 2:
ANDWF FSR, 0
Antes da instruo: W= 0x17, FSR= 0xC2 ;0001 1111(0x17)
;1100 0010(0xC2)
Depois da instruo: W= 0x02, FSR= 0xC2 ;0000 0010(0x02)
[rtulo] IORLW k
Descrio:
Operao:
( W ) .OR. k W
Operando:
0 k 255
Flag:
Nmero de palavras:
Nmero de ciclos:
Exemplo 1:
IORLW 0x35
Antes da instruo: W= 0x9A
Depois da instruo: W= 0xBF
Z= 0
Exemplo 2:
IORLW REG
Antes da instruo: W = 0x9A
147
[rtulo] IORWF f, d
Descrio:
Operao:
(W) .OR. ( f ) d
Operando:
0 f 127, d [0, 1]
Flag:
Nmero de palavras:
Nmero de ciclos:
Exemplo 1:
IORWF REG, 0
Antes da instruo: REG= 0x13, W= 0x91
Depois da instruo: REG= 0x13, W= 0x93
Z= 0
Exemplo 2:
IORWF REG, 1
Antes da instruo: REG= 0x13, W= 0x91
Depois da instruo: REG= 0x93, W= 0x91
Z= 0
[rtulo] XORLW k
Descrio:
Operao:
( W ) .XOR. k W
Operando:
0 k 255
Flag:
Nmero de
palavras:
Nmero de
ciclos:
Exemplo 1:
XORLW 0xAF
Antes da instruo: W= 0xB5 ;1010 1111(0xAF)
;1011 0101(0xB5)
Depois da instruo: W= 0x1A ;0001 1010(0x1A)
148
Exemplo 2:
XORLW REG
Antes da instruo: W = 0xAF ;1010 1111(0xAF)
REG = 0x37 ;0011 0111(0x37)
Depois da instruo: W = 0x98 ;1001 1000(0x98)
Z=0
[rtulo] XORWF f, d
Descrio:
Operao:
(W) .XOR. ( f ) d
Operando:
0 f 127, d [0, 1]
Flag:
Nmero de
palavras:
Nmero de
ciclos:
Exemplo 1:
XORWF REG, 1
Antes da instruo: REG= 0xAF, W= 0xB5 ;1010 1111(0xAF)
;1011 0101(0xB5)
Depois da instruo: REG= 0x1A, W= 0xB5 ;0001 1010(0x1A)
Exemplo 2:
XORWF REG, 0
Antes da instruo: REG= 0xAF, W= 0xB5 ;1010 1111(0xAF)
;1011 0101(0xB5)
Depois da instruo: REG= 0xAF, W= 0x1A ;0001 1010(0x1A)
[rtulo] INCF f, d
Descrio:
Operao:
(f)+1d
Operando:
0 f 127, d [0, 1]
Flag:
Nmero de palavras:
Nmero de ciclos:
Exemplo 1:
INCF REG, 1
Antes da instruo: REG = 0xFF
Z=0
Depois da instruo: REG = 0x00
149
Z=1
Exemplo 2:
INCF REG, 0
Antes da instruo: REG = 0x10
W=x
Z=0
Depois da instruo: REG = 0x10
W = 0x11
Z=0
[rtulo] DECF f, d
Descrio:
Operao:
(f)-1d
Operando:
0 f 127, d [0, 1]
Flag:
Nmero de palavras:
Nmero de ciclos:
Exemplo 1:
DECF REG, 1
Antes da instruo: REG = 0x01
Z=0
Depois da instruo: REG = 0x00
Z=1
Exemplo 2:
DECF REG, 0
Antes da instruo: REG = 0x13
W=x
Z=0
Depois da instruo: REG = 0x13
W = 0x12
Z=0
[rtulo] RLF f, d
Descrio:
Operao:
Operando:
0 f 127, d [0, 1]
150
Flag:
Nmero de palavras: 1
Nmero de ciclos:
Exemplo 1:
RLF REG, 0
Antes da instruo: REG = 1110 0110
C=0
Depois da instruo: REG = 1110 0110
W = 1100 1100
C=1
Exemplo 2:
RLF REG, 1
Antes da instruo: REG = 1110 0110
C=0
Depois da instruo: REG = 1100 1100
C=1
[rtulo] RRF f, d
Descrio:
Operao:
Operando:
0 f 127, d [0, 1]
Flag:
Nmero de palavras:
Nmero de ciclos:
Exemplo 1:
RRF REG, 0
Antes da instruo: REG = 1110 0110
W=x
C=0
Depois da instruo: REG = 1110 0110
W = 0111 0011
C=0
Exemplo 2:
RRF REG, 1
Antes da instruo: REG = 1110 0110
C=0
Depois da instruo: REG = 0111 0011
C=0
151
[rtulo] COMF f, d
Descrio:
Operao:
( f) d
Operando:
0 f 127, d [0, 1]
Flag:
Nmero de palavras:
Nmero de ciclos:
Exemplo 1:
COMF REG, 0
Antes da instruo: REG= 0x13 ;0001 0011(0x13)
Depois da instruo: REG= 0x13 ;complementar
W = 0xEC ;1110 1100(0xEC)
Exemplo 2:
COMF INDF, 1
Antes da instruo: FSR= 0xC2
contedo de FSR = (FSR) = 0xAA
Depois da instruo: FSR= 0xC2
contedo de FSR = (FSR) = 0x55
[rtulo] BCF f, b
Descrio:
Operao:
0 f<b>
Operando:
0 f 127, 0 b 7
Flag:
Nmero de palavras:
Nmero de ciclos:
Exemplo 1:
BCF REG, 7
Antes da instruo: REG = 0xC7 ;1100 0111(0xC7)
Depois da instruo: REG = 0x47 ;0100 0111(0x47)
Exemplo 2:
BCF INDF, 3
Antes da instruo: W = 0x17
FSR = 0xC2
contedo do endereo em FSR (FSR) = 0x2F
Depois da instruo: W = 0x17
FSR = 0xC2
contedo do endereo em FSR (FSR) = 0x27
152
[rtulo] BSF f, b
Descrio:
Pr a 1, o bit b do registo f
Operao:
1 f<b>
Operando:
0 f 127, 0 b 7
Flag:
Nmero de palavras:
Nmero de ciclos:
Exemplo 1:
BSF REG, 7
Antes da instruo: REG = 0x07 ;0000 0111(0x07)
Depois da instruo: REG = 0x17 ;1000 0111(0x87)
Exemplo 2:
BSF INDF, 3
Antes da instruo: W = 0x17
FSR = 0xC2
contedo do endereo em FSR (FSR) = 0x2F
Depois da instruo: W = 0x17
FSR = 0xC2
contedo do endereo em FSR (FSR) = 0x28
[rtulo] BTFSC f, b
Descrio:
Operao:
Operando:
0 f 127, 0 b 7
Flag:
Nmero de
palavras:
Nmero de
ciclos:
Exemplo:
153
[rtulo] BTFSS f, b
Descrio:
Operao:
Operando:
0 f 127, 0 b 7
Flag:
Nmero de
palavras:
Nmero de
ciclos:
Exemplo:
[rtulo] INCFSZ f, d
Descrio:
Operao:
(f) + 1 d
Operando:
0 f 127, d [0, 1]
Flag:
Nmero de
palavras:
Nmero de
ciclos:
1 ou 2 dependendo do resultado
Exemplo:
154
[rtulo] DECFSZ f, d
Descrio:
Operao:
(f) - 1 d
Operando:
0 f 127, d [0, 1]
Flag:
Nmero de
palavras:
Nmero de
ciclos:
1 ou 2 dependendo do resultado
Exemplo:
[rtulo] GOTO k
Descrio:
Operao:
Operando:
0 k 2048
Flag:
Nmero de palavras: 1
Nmero de ciclos:
Exemplo:
155
[rtulo] CALL k
Descrio:
Operao:
Operando:
0 k 2048
Flag:
Nmero de
palavras:
Nmero de
ciclos:
Exemplo:
[rtulo] RETURN
Descrio:
Operao:
TOS
Operando:
Flag:
Contador de programa PC
Nmero de palavras: 1
Nmero de ciclos:
Exemplo:
RETURN
Antes da instruo: PC = x
TOS = x
Depois da instruo: PC = TOS
TOS = TOS - 1
156
[rtulo] RETLW k
Descrio:
Operao:
(k) W; TOS PC
Operando:
0 k 255
Flag:
Nmero de palavras: 1
Nmero de ciclos:
Exemplo:
RETLW 0x43
Antes da instruo: W = x
PC = x
TOS = x
Depois da instruo: W = 0x43
PC = TOS
TOS = TOS 1
[rtulo] RETLW k
Descrio:
Operao:
TOS PC ; 1 GIE
Operando:
Flag:
Nmero de palavras: 1
Nmero de ciclos:
Exemplo:
RETFIE
Antes da instruo: PC = x
GIE = 0
Depois da instruo: PC = TOS
GIE = 1
157
[rtulo] NOP
Descrio:
Operao:
Operando:
Flag:
Nmero de palavras: 1
Nmero de ciclos:
Exemplo:
NOP
[rtulo] CLRWDT
Descrio:
so postos a um.
Operao:
0 WDT
0 prescaler de WDT
1
1
Operando:
Flag:
Nmero de palavras:
Nmero de ciclos:
Exemplo:
CLRWDT
Antes da instruo: Contador de WDT = x
Prescaler de WDT = 1:128
Depois da instruo: Contador do WDT = 0x00
Prescale do WDT = 0
158
[rtulo] SLEEP
Descrio:
Operao:
0 WDT
0 prescaler do WDT
1
0 PD
Operando:
Flag:
Nmero de palavras:
Nmero de ciclos:
Exemplo 1:
SLEEP
Antes da instruo: Contador do WDT = x
Prescaler do WDT = x
Depois da instruo: Contador do WDT = 0x00
Prescaler do WDT = 0
159
Apndice B
Sistemas Numricos
Introduo
B.1 Sistema Numrico Decimal
B.2 Sistema Numrico Binrio
B.3 Sistema Numrico Hexadecimal
Concluso
Introduo
sempre difcil s pessoas, aceitarem coisas que diferem, em alguma coisa, do seu
modo de pensar. Essa , provavelmente, uma das razes pelas quais os sistemas
numricos diferentes do sistema decimal, ainda so difceis de entender. No
entanto, necessrio aceitar a realidade. O sistema numrico decimal que as
pessoas usam no seu dia a dia, foi agora ultrapassado pelo sistema binrio, que
usado pelos milhes de computadores de todo o mundo.
Todos os sistemas numricos possuem uma base. No sistema numrico a base
10, no sistema binrio a base 2 e, o sistema hexadecimal, tem base 16. O valor
representado por cada algarismo no sistema, determinado pela respectiva posio
em relao aos outros algarismos que constituem o nmero. A soma dos valores
representados por cada algarismo d-nos o nmero completo. Os sistemas binrio
e hexadecimal interessam-nos sobremaneira neste livro. Alm destes, iremos
tambm abordar o sistema decimal, de modo a compar-lo com os outros dois
sistemas. Apesar de o sistema decimal ser um assunto a que j estamos
acostumados, iremos discuti-lo de modo a facilitar a compreenso dos outros
sistemas.
160
Aquilo que falta para nos familiarizarmos com a lgica que usada no sistema
numrico binrio, saber extrair um valor numrico decimal de uma srie de zeros
e uns e, claro, de uma maneira que ns possamos entender. Este procedimento
designado por converso binrio-decimal.
Exemplo:
161
pelo qual ele vai ser multiplicado, finalmente, adicionando os resultados de todas
estas multiplicaes, obtemos o tal nmero decimal que ns j somos capazes de
entender. Continuando, vamos agora supor que dentro de cada gaveta existem
berlindes: 2 berlindes na primeira gaveta, 4 na segunda gaveta, 7 na terceira e 3
na quarta gaveta. Vamos agora dizer pessoa que vai abrir as gavetas para usar a
representao binria na resposta. Nestas circunstncias, a pergunta pode ser esta:
Quantos berlindes h na gaveta 01? e, a resposta, deve ser: Na gaveta 01
existem 100 berlindes. Deve notar-se que tanto a pergunta como a resposta so
muito precisas, apesar de no estarmos a utilizar a linguagem normal. Deve notarse tambm, que, para representarmos todos os nmeros decimais de 0 a 3, apenas
precisamos de dois smbolos binrios e que, se quisermos nmeros superiores a
estes, temos que ir acrescentando mais dgitos binrios. Para podermos representar
todos os berlindes que esto em qualquer das gavetas, precisamos de 3 algarismo
binrios. Ou seja, para representarmos os decimais de 0 a 7, bastam-nos trs
smbolos binrios, de 0 a 15, quatro, etc. Generalizando, o maior valor decimal, que
pode ser representado por intermdio por um determinado nmero de smbolos
binrios, coincide com 2 elevado a um expoente igual ao nmero de smbolos
binrios utilizados, subtrado de uma unidade.
Exemplo:
Isto significa que possvel representar os nmeros decimais de 0 a 15, apenas
com 4 algarismos binrios (incluem-se portanto os nmeros 0 e 15), ou seja, 16
valores diferentes. As operaes que se executam no sistema decimal, tambm
podem ser executadas no sistema binrio. Por razes de clareza e legibilidade,
neste apndice, s iremos abordar a adio e a subtraco.
As regras bsicas aplicveis adio binria, so:
162
Exemplo:
163
Exemplo:
Concluso
O sistema numrico binrio ainda o mais utilizado, o decimal o mais fcil de
perceber e o hexadecimal situa-se entre estes dois sistemas. O sistema
hexadecimal fcil de memorizar e fcil de converter para o sistema binrio, o que
faz, com que seja, um dos mais importantes sistemas numricos.
164
Apndice C
Glossrio
Introduo
Microcontrolador
Pino de entrada/sada (I/O)
Software
Hardware
Simulador
ICE
Emulador de EPROM
Assembler
Arquivo HEX
Arquivo LIST
Arquivo Fonte (Source File)
Deteco de erros (Debugging)
ROM, EPROM, EEPROM, FLASH, RAM
Endereamento
ASCII
Carry
Cdigo
Byte, Kilobyte, Megabyte
Flag
Vector de interrupo ou interrupes
Programador
Produto
Introduo
Como em muitos outros campos da actividade humana, tambm no caso dos
microcontroladores existem termos frequentemente usados e consensualmente
adoptados (a partir dos quais outras definies e noes so criadas). Assim, o
correcto entendimento de ideias base, permitem apreender, mais facilmente, outras
ideias.
Microcontrolador
um microprocessador e vrios perifricos num nico componente electrnico.
Software
Informao de que o microcontrolador necessita, para poder funcionar. O software
no pode apresentar quaisquer erros se quisermos que o programa e o dispositivo
funcionem como deve ser. O software pode ser escrito em diversas linguagens tais
como: Basic, C, Pascal ou assembly. Fisicamente um arquivo guardado no disco
do computador.
Hardware
Microcontrolador, memria, alimentao, circuitos de sinal e todos os componentes
ligados ao microcontrolador.
165
Simulador
Pacote de software para correr num PC que simula o funcionamento interno do
microcontrolador. um instrumento ideal para verificar as rotinas de software e
todas as pores de cdigo que no implicam ligao com o mundo exterior.
Existem opes para observar o cdigo quando nos deslocamos no programa para
trs e para a frente ou passo-a-passo e para deteco de erros.
ICE
ICE (In Circuit Emulator) ou emulador interno, um utenslio bastante til que se
liga entre um PC (e no um microcontrolador) e o dispositivo que estamos a
desenvolver. Isto permite, ao software, correr no computador PC, mas tudo se
passando como se fosse um microcontrolador real que estivesse inserido no
dispositivo. O ICE, possibilita que nos desloquemos atravs do programa, em
tempo real, para observar o que se est a passar dentro do microcontrolador e
como este comunica com o mundo exterior.
Emulador de EPROM
Um Emulador de EPROM, um dispositivo que no emula o microcontrolador
completo (como no caso do ICE), mas sim a sua memria. mais frequentemente
usado nos microcontroladores que possuem memria externa. Usando um
emulador de Eprom, ns evitamos estar sempre a escrever e a apagar, a memria
EPROM.
Assembler
Pacote de software que traduz cdigo fonte em cdigo que o microcontrolador pode
compreender. Uma parte deste software, destina-se tambm, deteco dos erros
cometidos, ao escrever o programa.
Arquivo HEX
Arquivo criado pelo tradutor assembler, quando traduz um arquivo fonte e que est
num formato que entendido pelos microcontroladores. Este arquivo aparece
normalmente sob a forma Nome_arquivo.HEX, daqui deriva a designao de
arquivo hex".
Arquivo LIST
Trata-se de um arquivo produzido pelo tradutor assembler, que contm todas as
instrues do arquivo fonte, o cdigo destino e os respectivos endereos e, ainda,
os comentrios que o programador escreveu. um arquivo muito til para detectar
os erros no programa. Este arquivo tem a extenso LST, daqui provm a sua
designao.
166
Endereamento
Determina e designa o local da memria a aceder.
ASCII
Abreviatura para American Standard Code for Information Interchange cdigo
standard americano para troca de dados. largamente utilizado e, em particular,
atribui a cada caracter alfanumrico (letra ou nmero) um cdigo de oito bits.
Carry
Bit de transferncia, associado s operaes aritmticas.
Cdigo
Arquivo ou parte do arquivo que contm as instrues do programa.
Flag
Normalmente, refere-se aos bits do registo de estado (status). Quando estes bits
so actuados (postos a 1 ou a 0), o programador notificado de que um
determinado acontecimento ocorreu. Se necessrio, esta ocorrncia pode motivar
uma resposta do programa.
Programador
167
Produto
O desenvolvimento de um produto, um misto de sorte e experincia. Em poucas
palavras, o estabelecimento de um tempo limite para a produo deve ser evitado,
j que, mesmos as requisies mais simples, necessitam de muito tempo para
serem desenvolvidas e melhoradas. Para implementar um projecto, ns
necessitamos de tempo, calma, raciocnio lgico e, o mais importante de tudo,
compreenso das necessidades do consumidor. O percurso tpico da criao de um
produto deve estar de acordo com o algoritmo seguinte:
168
O livro foi preparado com o devido cuidado e ateno, contudo, o editor no aceita
qualquer responsabilidade nem pela exatido da informao publicada nele, nem
por quaisquer conseqncias da sua utilizao.
http://www.mikroelektronika.co.yu/portuguese/product/books/picbook/00.htm
http://www.mikroe.com/pt/
169