Escolar Documentos
Profissional Documentos
Cultura Documentos
PIC Para) Iniciantes PDF
PIC Para) Iniciantes PDF
www.baixebr.org
1
ndice Geral
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
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
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
2
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 PROCESSO
Operadores Aritmticos
Arquivos Criados Aps a Compilao
Macros
CAPTULOS 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 Assembler
5.6 Escrevendo um Programa
5.7 Simulador MPSIM
5.8 Barra de Ferramenta - Toolbar
3
CAPTULO VI EXEMPLOS
Introduo
6.1 Alimentando o Microcontrolador
6.2 Utilizao de Macros em Programas
Macros WAIT, WAITX
Macro PRINT
6.3 Exemplos
LED - Diodos Emissores de Luz
Teclado
Optoacopladores
Rel
Gerando um Som
Registradores de Deslocamento - Shift Registers
Displays de 7-Segmentos (multiplexagem)
Display LCD
Conversor Analgico-Digital de 12 bits
Comunicao em Srie
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
4
CAPTULO I
Introduo aos Microcontroladores
Introduo
Histria
Microcontroladores versus Microprocessadores
Introduo
Histria
5
velocidade de 300 000 operaes por segundo. Esse microprocessador foi o
pioneiro de todos os microprocessadores atuais. A Intel continuou com o
desenvolvimento do produto e, em Abril de 1974 ps c fora um processador de 8
bits com o nome de 8080 com a capacidade de enderear 64KB de memria, com
75 instrues e com preos a comearem em $360.
7
1.2 Unidade Central de Processamento
1.3 Barramentos
8
Neste momento, a funcionalidade j aumentou mas um novo problema
apareceu: ns temos uma unidade capaz de trabalhar sozinha, mas que no possui
nenhum contacto com o mundo exterior, ou seja, conosco! De modo a remover
esta deficincia, vamos adicionar um bloco que contm vrias localizaes de
memria e que, de um lado, est ligado ao bus de dados e do outro s linhas de
sada do microcontrolador que coincidem com pinos do circuito integrado e que,
portanto, ns podemos ver com os nossos prprios olhos.
9
quilmetros no atesta a economia do projecto. Isto leva-nos a ter que reduzir o
nmero de linhas de modo a que a funcionalidade se mantenha. Suponha que
estamos a trabalhar apenas com trs linhas e que uma linha usada para enviar
dados, outra para os receber e a terceira usada como linha de referncia tanto do
lado de entrada como do lado da sada. Para que isto trabalhe ns precisamos de
definir as regras para a troca de dados. A este conjunto de regras chama-se
protocolo. Este protocolo deve ser definido com antecedncia de modo que no
haja mal entendidos entre as partes que esto a comunicar entre si. Por exemplo,
se um homem est a falar em francs e o outro em ingls, altamente improvvel
que efetivamente e rapidamente, ambos se entendam. Vamos supor que temos o
seguinte protocolo. A unidade lgica "1" colocada na linha de transmisso at que
a transferncia se inicie. Assim que isto acontece, a linha passa para nvel lgico '0'
durante um certo perodo de tempo (que vamos designar por T), assim, do lado da
recepo ficamos a saber que existem dados para receber e, o mecanismo de
recepo, vai ativar-se. Regressemos agora ao lado da emisso e comecemos a pr
zeros e uns lgicos na linha de transmisso correspondentes aos bits, primeiro o
menos significativo e finalmente o mais significativo. Vamos esperar que cada bit
permanea na linha durante um perodo de tempo igual a T, e, finalmente, depois
do oitavo bit, vamos pr novamente na linha o nvel lgico "1" , o que assinala a
transmisso de um dado. O protocolo que acabamos de descrever designado na
literatura profissional por NRZ (No Retorno a Zero).
1.6 Timer
1.7 Watchdog
11
Configurao fsica do interior de um
microcontrolador
1.9 Programa
INICIO
REGISTO1=LOCAL_DE_ MEMORIA_A
REGISTO2=LOCAL_DE_ MEMORIA_B
PORTO_A=REGISTO1+REGISTO2
FIM
www.baixebr.org
13
CAPTULO II
Microcontrolador PIC16F84
Introduo
Arquitetura CISC, RISC
Aplicaes
Clock / Ciclo de Instruo
Pipelining
Descrio dos Pinos
Introduo
14
Esquema do microcontrolador PIC16F84
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 pr o
microcontrolador a trabalhar mais rapidamente. Na arquitetura de Harvard, a
memria de dados est separada da memria de programa. Assim, possvel uma
maior fluncia de dados atravs da unidade central de processamento e, claro, uma
maior velocidade de funcionamento. A separao da memria de dados da memria
de programa, faz com que as instrues possam ser representadas por palavras de
mais que 8 bits. O PIC16F84, usa 14 bits para cada instruo, o que permite que
que todas as instrues ocupem uma s palavra de instruo. tambm tpico da
arquitetura Harvard ter um reportrio com menos instrues que a de von-
Neumann's, instrues essas, geralmente executadas apenas num nico ciclo de
relgio.
15
estas instrues so executadas num nico ciclo, excepto no caso de instrues de
salto e de ramificao. De acordo com o que o seu fabricante refere, o PIC16F84
geralmente atinge resultados de 2 para 1 na compresso de cdigo e 4 para 1 na
velocidade, em relao aos outros microcontroladores de 8 bits da sua classe.
Aplicaes
16
Pipelining
TCY0 lido da memria o cdigo da instruo MOVLW 55h (no nos interessa a
instruo que foi executada, por isso no est representada por rectngulo).
TCY1 executada a instruo MOVLW 55h e lida da memria a instruo MOVWF
PORTB.
TCY2 executada a instruo MOVWF PORTB e lida a instruo CALL SUB_1.
TCY3 executada a chamada (call) de um subprograma CALL SUB_1 e lida a
instruo BSF PORTA,BIT3. Como esta instruo no a que nos interessa, ou seja,
no a primeira instruo do subprograma SUB_1, cuja execuo o que vem a
seguir, a leitura de uma instruo tem que ser feita de novo. Este um bom
exemplo de uma instruo a precisar de mais que um ciclo.
TCY4 este ciclo de instruo totalmente usado para ler a primeira instruo do
17
subprograma no endereo SUB_1.
TCY5 executada a primeira instruo do subprograma SUB_1 e lida a instruo
seguinte.
18
Tipos de osciladores
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.
OSCILADOR RC
19
freqncia de trabalho do microcontrolador a do oscilador dividida por 4. A
freqncia de oscilao dividida por 4 tambm fornecida no pino OSC2/CLKOUT e,
pode ser usada, para testar ou sincronizar outros circuitos lgicos pertencentes ao
sistema.
2.2 Reset
20
Utilizao do circuito interno de reset
21
Exemplos de quedas na alimentao abaixo do limite
22
executada por tradutores assembler (ou simplesmente assembler). O cdigo da
instruo extrado da memria de programa, tem que ser descodificado pela
unidade central de processamento (CPU). A cada uma das instrues do reportrio
do microcontrolador, corresponde um conjunto de aes para a concretizar. Estas
aes, podem envolver transferncias de dados de um local de memria para outro,
de um local de memria para os portos, e diversos clculos, pelo que, se conclui
que, o CPU, tem que estar ligado a todas as partes do microcontrolador. Os bus de
de dados e o de endereo permitem-nos fazer isso.
23
Diagrama bloco mais detalhado do microcontrolador PIC16F84
Registo STATUS
24
O bit DC afectado pelas instrues ADDWF, ADDLW, SUBLW e SUBWF.
O registo de estado (STATUS), contm o estado da ALU (C, DC, Z), estado
de RESET (TO, PD) e os bits para seleco do banco de memria (IRP, RP1, RP0).
Considerando que a seleco do banco de memria controlada atravs
deste registo, ele tem que estar presente em todos os bancos. Os bancos de
memria sero discutidos com mais detalhe no captulo que trata da Organizao
da Memria. Se o registo STATUS for o registo de destino para instrues que
afectem os bits Z, DC ou C, ento no possvel escrever nestes trs bits.
Registo OPTION
25
bits 0 a 2 PS0, PS1, PS2 (bits de seleco do divisor Prescaler)
Estes trs bits definem o factor de diviso do prescaler. Aquilo que o prescaler e o
modo como o valor destes trs bits afectam o funcionamento do microcontrolador
ser estudado na seco referente a TMR0.
2.4 Portas
26
Relao entre os registos TRISA e PORTO A
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
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
O exemplo de cima mostra como os pinos 0, 1, 2 e 3 so definidos como
entradas e 4, 5, 6 e 7 como sadas.
PORTO A
Memria de programa
Memria de dados
Registos SFR
29
Bancos de Memria
Exemplo :
bcf STATUS, RP0
BANK0 macro
Bcf STATUS, RP0 ;Selecionar o banco 0 da memria
Endm
BANK1 macro
Bsf STATUS, RP0 ; Selecionar o banco 1 da memria
Endm
Contador de Programa
Pilha
30
provm de instrues com estas designaes, existentes nalguns
microcontroladores de maior porte.
Programao no Sistema
Modos de endereamento
Endereamento Direto
Bsf STATUS,
; Banco 1
RP0
movlw 0xFF ; w = 0xFF
; o endereo do registo TRISA tirado do cdigo da instruo movwf
movwf TRISA
TRISA
Endereamento Direto
Endereamento Indireto
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
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
32
interrupo. Depois de este subprograma ter sido executado, o microcontrolador
continua com o programa principal, a partir do local em que o tinha abandonado.
Registo INTCON
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 3 RBIE (bit de habilitao de interrupo por variao no porto B) Permite que
a interrupo por variao dos nveis lgicos nos pinos 4, 5, 6 e 7 do porto B,
ocorra.
1= habilita a interrupo por variao dos nveis lgicos
0= inibe a interrupo por variao dos nveis lgicos
A interrupo s pode ocorrer se RBIE e RBIF estiverem simultaneamente a 1
lgico.
bit 4 INTE (bit de habilitao da interrupo externa INT) bit que permite uma
interrupo externa no bit RB0/INT.
1= interrupo externa habilitada
0= interrupo externa impedida
A interrupo s pode ocorrer se INTE e INTF estiverem simultaneamente a 1
lgico.
bit 5 TOIE (bit de habilitao de interrupo por transbordo de TMR0) bit que
autoriza a interrupo por transbordo do contador TMR0.
1= interrupo autorizada
0= interrupo impedida
A interrupo s pode ocorrer se TOIE e TOIF estiverem simultaneamente a 1
lgico.
bit 6 EEIE (bit de habilitao de interrupo por escrita completa, na EEPROM) bit
que habilita uma interrupo quando uma operao de escrita na EEPROM termina.
1= interrupo habilitada
0= interrupo inibida
Se EEIE e EEIF (que pertence ao registo EECON1) estiverem simultaneamente a 1,
a interrupo pode ocorrer.
bit 7 GIE (bit de habilitao global de interrupo) bit que permite ou impede
todas as interrupes
1= todas as interrupes so permitidas
0= todas as interrupes impedidas
34
Esquema das interrupes no microcontrolador PIC16F84
35
Uma das possveis causas de erros no salvaguardar dados antes de executar um
subprograma de interrupo
36
A mesma operao pode ser realizada usando macros, desta maneira
obtemos um programa mais legvel. Os macros que j esto definidos podem ser
usados para escrever novos macros. Os macros BANK1 e BANK0 que so explicados
no captulo Organizao da memria so usados nos macros push e pop.
Iniciao da interrupo
39
2.7 Temporizador Livre TMR0
40
Diagrama temporal de uma interrupo causada pelo temporizador TMR0
43
impulsos ascendentes ou descendentes do sinal.
1 = bordo descendente
0 = bordo ascendente
RA4/T0CKI.
1 = impulsos externos
0 = 1/4 do clock interno
EEDATA no endereo 08h, que contm o dado lido ou aquele que se quer
escrever.
EEADR no endereo 09h, que contm o endereo do local da EEPROM que vai ser
acedido
EECON1 no endereo 88h, que contm os bits de controle.
EECON2 no endereo 89h. Este registo no existe fisicamente e serve para
proteger a EEPROM de uma escrita acidental.
44
Registo EECON1
bit 4 EEIF (bit de interrupo por operao de escrita na EEPROM completa) Bit
usado para informar que a escrita do dado na EEPROM, terminou.
Quando a escrita tiver terminado, este bit automaticamente posto a '1'. O
programador tem que repr a '0' o bit EEIF no seu programa, para que possa
detectar o fim de uma nova operao de escrita.
1 = escrita terminada
0 = a escrita ainda no terminou ou no comeou.
45
Depois da ltima instruo do programa, o contedo do endereo 0 da
EEPROM pode ser encontrado no registrador w.
Para escrever dados num local da EEPROM, o programador tem primeiro que
enderear o registo EEADR e introduzir a palavra de dados no registo 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 operao de escrita, o
que pode ser usado no processamento de interrupes. Os valores 55h e AAh so
as primeira e segunda chaves que tornam impossvel que ocorra uma escrita
acidental na EEPROM. Estes dois valores so escritos em EECON2 que serve apenas
para isto, ou seja, para receber estes dois valores e assim prevenir contra uma
escrita acidental na memria EEPROM. As linhas do programa marcadas como 1, 2,
3 e 4 tm que ser executadas por esta ordem em intervalos de tempo certos.
Portanto, muito importante desativar as interrupes que possam interferir com a
temporizao necessria para executar estas instrues. Depois da operao de
escrita, as interrupes podem, finalmente, ser de novo habilitadas.
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
Transferncia de Dados
47
a operao possvel e posta a 0 se um nmero maior tiver que ser subtrado de
outro mais pequeno.
A lgica dentro do PIC tem a capacidade de executar as operaes AND, OR, EX-
OR, complemento (COMF) e rotaes (RLF e RRF).
Estas ltimas instrues, rodam o contedo do registo atravs desse registo e da
flag C de uma casa para a esquerda (na direo do bit 7), ou para a direita (na
direo do bit 0). O bit que sai do registo escrito na flag C e o contedo anterior
desta flag, escrito no bit situado do lado oposto no registo.
Operaes de BITs
49
*1 Se o porto de entrada/sada for o operando origem, lido o estado dos pinos do
microcontrolador.
*2 Se esta instruo for executada no registo TMR0 e se d=1, o prescaler atribudo
a esse temporizador automaticamente limpo.
*3 Se o PC for modificado ou se resultado do teste for verdadeiro, a instruo
executada em dois ciclos.
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
O processo de comunicao entre o homem e o microcontrolador
Linguagem Assembly
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.
O exemplo que se segue, mostra como um programa simples pode ser escrito em
linguagem assembly, respeitando regras bsicas.
54
Uma vez que estes dados no interessam ao tradutor de assembly, so escritos na
forma de comentrios. Deve ter-se em ateno que um comentrio comea
sempre com ponto e vrgula e pode ser colocado na linha seguinte ou logo a seguir
instruo.
Depois deste comentrio inicial ter sido escrito, devem incluir-se as diretivas. Isto
mostra-se no exemplo de cima.
Para que o seu funcionamento seja correto, preciso definir vrios parmetros para
o microcontrolador, tais como:
- tipo de oscilador
- quando o temporizador do watchdog est ligado e
- quando o circuito interno de reset est habilitado.
Tudo isto definido na diretiva seguinte:
Logo que todos os elementos de que precisamos tenham sido definidos, podemos
comear a escrever o programa.
Primeiro, necessrio definir o endereo para que o microcontrolador deve ir
quando se liga a alimentao. esta a finalidade de (org 0x00).
O endereo para onde um programa salta se ocorrer uma interrupo (org 0x04).
Como este um programa simples, suficiente dirigir o microcontrolador para o
incio de um programa com uma instruo "goto Main" (Main = programa
principal).
Diretivas de Controle
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
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
Descrio: Cada vez que < nome > aparece no programa, substitudo por <
valor > .
Exemplo:
constant MAXIMO = 100
constant Comprimento = 30
Exemplo:
variable nivel = 20
variable tempo = 13
Exemplo:
nivel set 0
comprimento set 12
nivel set 45
Exemplo:
cinco equ 5
seis equ 6
sete equ 7
56
Instrues similares: SET
Exemplo:
Inicio org 0x00
movlw 0xFF
movwf PORTB
Sintaxe: end
Exemplo:
movlw 0xFF
movwf PORTB
end
Instrues Condicionais
Sintaxe: if <termo_condicional>
Exemplo:
if nivel = 100
goto ENCHER
else
goto DESPEJAR
endif
Sintaxe: Else
Exemplo:
if tempo < 50
goto DEPRESSA
else
57
goto DEVAGAR
endif
Sintaxe: endif
Exemplo:
if nivel = 100
goto METER
else
goto TIRAR
endif
Sintaxe:
while <condio>
...
endw
Exemplo:
while i < 10
i=i+1
endw
Sintaxe: endw
Exemplo:
while i < 10
i=i+1
endw
58
sero executadas at encontrarmos as diretivas ELSE ou ENDIF.
Exemplo:
#define teste
ifdef teste ;como teste foi definido
... ;as instrues nestas linhas vo ser executadas
endif
Exemplo:
#define teste
...
#undefine teste
...
ifndef teste ;como teste no est definido
... ;as instrues nestas linhas so executadas
endif
Diretivas de Dados
Sintaxe:
Cblock [< termo >]
<rtulo> [:<incremente>], <rtulo> [:<incremente>]......
endc
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
59
4.17 ENDC: Fim da definio de um bloco de constantes
Sintaxe: endc
Descrio: Esta diretiva vai gerar uma srie de instrues RETLW, uma instruo
para cada termo.
dt Mensagem , 0
dt primeiro, segundo, terceiro
60
4.22 PROCESSOR: Definindo o modelo de microcontrolador
Operadores Aritmticos
61
Arquivos Criados Aps a Compilao
62
No fim do arquivo de listagem, apresentada uma tabela dos smbolos usados no
programa. Uma caracterstica til do arquivo list a apresentao de um mapa da
memria utilizada. Mesmo no fim, existe uma estatstica dos erros, bem como a
indicao da memria de programa utilizada e da disponvel.
Macros
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
Alm destes, existem sistemas de suporte para os produtos da Microchip, tais como
o PICSTART Plus e ICD (In Circuit Debugger - Deteco de erros com o
microcontrolador a funcionar). Este livro no aborda estes dois dispositivos que so
opcionais.
65
Os requisitos mnimos para um computador que possa correr o MPLAB, so:
A instalao propriamente dita, comea depois destes sete passos. As figuras que
se seguem explicam o significado de certas etapas dessa instalao.
66
cran de boas-vindas no incio da instalao do MPLAB
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.
Como qualquer outro programa, o MPLAB deve ser instalado num diretrio. O
diretrio escolhido, pode ser qualquer um no disco duro do computador. Se no
tiver razes fortes para no o fazer, deve aceitar a escolha indicada por defeito.
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
Introduzindo o MPLAB no menu iniciar
A janela que se mostra a seguir, tem a ver com uma parte do MPLAB em cuja
explicao no necessitamos de entrar em detalhes. Selecionando um diretrio
especial, o MPLAB guarda todos os arquivos relacionados com o linker, num
diretrio separado.
70
Seleo de um diretrio para os arquivos do sistema
A instalao a decorrer
71
Depois de concluda a instalao, aparecem dois crans de dilogo, um que
menciona as ltimas informaes e correes relativas ao programa e o outro que
um cran de boas vindas.
Se os arquivos de texto (Readme.txt) forem abertos, preciso, fech-los a seguir.
72
O cran depois de o MPLAB ser iniciado
Para que o MPLAB possa saber que ferramentas vo ser usadas na execuo do
programa que se escreveu, necessrio definir o modo de desenvolvimento. No
nosso caso, ns precisamos de preparar o simulador como preparamos uma
ferramenta que vamos usar. Clicando em OPTIONS---> DEVELOPMENT MODE, uma
nova janela idntica que se mostra na figura em baixo, ir aparecer:
73
Definindo um modo de desenvolvimento
74
Depois de dar um nome ao projecto clique em OK. Veremos que aparece uma nova
janela, idntica que se mostra na figura seguinte.
Com o rato, clique em "proba [.hex], o que ativa a opo 'Node properties', ao
fundo no lado direito. Clicando esta opo, obtm-se a janela seguinte.
75
Definindo os parmetros do assembler MPASM
76
Um arquivo assembler foi adicionado
Para abrir um novo arquivo, clica-se em FILE>NEW. Assim, obtemos uma janela de
texto dentro do espao de trabalho do MPLAB.
77
Um novo arquivo assembler foi aberto
A nova janela representa o arquivo onde o programa vai ser escrito. Como o nosso
arquivo assembler tem que ser designado por "proba.asm", vamos dar-lhe esse
nome. A designao do programa faz-se (como em todos os programas Windows)
clicando em FILE>SAVE AS. Deste modo, vamos obter uma janela anloga que se
mostra na figura seguinte.
Quando obtemos esta janela, precisamos de escrever 'proba.asm' por baixo de 'File
name:' e clicar em OK. Depois de fazer isto, podemos ver o nome do arquivo
'proba.asm', no cimo da nossa janela.
78
5.6 Escrevendo um Programa
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
Janela com as mensagens que se sucedem traduo do programa
assembler
Simulador, a parte do ambiente MPLAB que fornece uma melhor viso interna do
modo como o microcontrolador trabalha. Atravs de um simulador ns podemos
monitorizar os valores atuais das variveis, os valores dos registos e os estados
lgicos dos pinos dos portos. Para falar verdade, o simulador no d exatamente os
mesmos resultados em todos os programas. Se um programa for simples (como
aquele que estamos a utilizar como exemplo), a simulao no de grande
importncia, porque pr todos os pinos do porto B a nvel lgico um, no uma
tarefa difcil. Contudo, o simulador pode ser uma grande ajuda em programas mais
complicados que incluem temporizadores, diferentes condies em que alguma
coisa acontea e outros requisitos semelhantes (especialmente com operaes
matemticas). Simulao, como o prprio nome indica, "simula o funcionamento de
um microcontrolador". Como o microcontrolador executa as instrues uma a uma,
o simulador concebido para executar o programa passo a passo (linha a linha),
mostrando o que acontece aos dados dentro do microcontrolador. Quando o
programa est completamente escrito, convm que o programador, em primeiro
lugar, verifique o seu programa num simulador e, s a seguir o experimente numa
situao real. Infelizmente, muitas vezes as pessoas esquecem-se dos bons hbitos
e passam por cima desta etapa. As razes disto passam pela maneira de ser das
pessoas e pela falta de bons simuladores.
80
O incio da simulao do programa faz-se com o reset do microcontrolador
Alm dos registos SFR, pode ser til observar os contedos dos outros registos.
Uma janela com as filas-registos pode ser aberta, clicando em WINDOW->FILE
REGISTERS.
Se existirem variveis no programa, tambm conveniente observ-las. A cada
varivel pode ser atribuda uma janela (Watch Windows) clicando em WINDOW-
>WATCH WINDOWS.
81
Simulador com janelas abertas para registos SFR, filas registos e variveis
Como o MPLAB tem vrias componentes, cada uma dessas componentes tem a sua
prpria barra de ferramentas (toolbar). Contudo, existe uma barra de ferramentas
que uma espcie de resumo de todas as barras de ferramentas. Esta barra de
ferramentas , normalmente suficiente para as nossas necessidades e vai ser
explicada com mais detalhe. Na figura debaixo, podemos observar a barra de
ferramentas de que precisamos, juntamente com uma breve explicao de cada
cone. Por causa do formato limitado deste livro, esta barra apresentada como
uma barra suspensa. Contudo, normalmente, est colocada horizontalmente por
baixo do menu, ao longo do cran.
82
Barra de ferramentas universal com uma explicao sumria dos cones
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 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.
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.
84
CAPTULO VI
Exemplos
Introduo
6.1 Alimentando o Microcontrolador
6.2 Utilizao de Macros em Programas
Macros WAIT, WAITX
Macro PRINT
6.3 Exemplos
LED - Diodos Emissores de Luz
Teclado
Optoacopladores
Rel
Gerando um Som
Registradores de Deslocamento - Shift Registers
Displays de 7-Segmentos (multiplexagem)
Display LCD
Conversor Analgico-Digital de 12 bits
Comunicao em Srie
Introduo
85
Para que o circuito funcione correctamente, de modo a obter-se 5V estveis na
sada (pino 3), a tenso de entrada no pino 1 do LM7805 deve situar-se entre 7V e
24V. Dependendo do consumo do dispositivo, assim devemos usar o tipo de
regulador LM7805 apropriado. Existem vrias verses do LM7805. Para um
consumo de corrente at 1A, deve usar-se a verso TO-220, com um dissipador de
calor apropriado. Se o consumo for somente de 50mA, pode usar-se o 78L05
(regulador com empacotamento TO92 de menores dimenses para correntes at
100mA).
86
Se usarmos um oscilador (ressonador) de 4MHz e para valores do prescaler de 0, 1
e 7 a dividir o clock bsico do oscilador, os intervalos de tempo causados por
transbordo do temporizador TMR0, sero nestes trs casos de respectivamente
0,512mS, 1,02mS e 65,3mS. Na prtica isso significa que o maior intervalo de
tempo possvel ser de 256x65,3mS = 16,72 segundos.
87
Para se poderem usar macros no programa principal, necessrio declarar as
variveis wcycle e prescWAIT, como feito nos exemplos que se seguem neste
captulo.
A Macro WAIT tem um argumento. O valor standard atribudo ao prescaler nesta
macro 1 (1,02mS) e no pode ser alterado.
WAIT timeconst_1
timeconst_1 um nmero de 0 a 255. Multiplicando esse nmero pelo tempo de
enchimento, obtemos o tempo total: TEMPO=timeconst_1 x 1,02mS.
Exemplo: WAIT .100
O exemplo mostra como gerar um atraso de 100x1,02mS no total de 102mS.
Ao contrrio da macro WAIT, a macro WAITX tem mais um argumento que serve
para atribuir um valor ao prescaler. Os dois argumentos da macro WAITX so :
Timeconst_2 um nmero entre 0 e 255. Multiplicando esse nmero pelo tempo
de enchimento, obtemos o tempo total:
TIME=timeconst_1 x 1,02mS x PRESCext
PRESCext um nmero entre 0 e 7 que estabelece a relao entre o clock e o
temporizador TMR0.
Exemplo: WAITX .100, 7
MACRO PRINT
A Macro PRINT encontra-se no arquivo Print.inc. Esta macro facilita o envio de uma
srie de dados ou caracteres para dispositivos de sada tais como: display LCD,
RS232, impressora matricial, ...,etc. A melhor maneira de formar a srie, usar
uma directiva dt (definir tabela). Esta instruo guarda uma srie de dados na
memria de programa, na forma de um grupo de instrues retlw cujos operandos
so os caracteres da cadeia de caracteres.
88
O modo como uma sequncia formada usando uma instruo dt, mostra-se no
seguinte exemplo:
org 0x00
goto Main
String movwf PCL
String1 dt esta a cadeia ASCII
String2 dt Segunda srie
End
Main
movlw .5
call String
89
6.3 Exemplos
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.
90
Ligao dos dodos LED ao Porto B do microcontrolador
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
Exemplo de ligao de teclas, aos pinos do microcontrolador
93
A macro de cima tem vrios argumentos que necessitam de serem explicados:
BUTTON macro HiLo, Port, Bit, Delay, Address
HiLo pode ser 0 ou 1 e representa o impulso, descendente ou ascendente
produzido quando se pressiona uma tecla e que faz com que o subprograma seja
executado.
Port o porto do microcontrolador ao qual a tecla est ligada. No caso do
PIC16F84 s pode ser o Porto A ou o Porto B.
Bit a linha do porto qual a tecla est ligada.
Delay um nmero entre 0 e 255, usado para obter o tempo necessrio para que
as oscilaes nos contactos parem. calculado pela frmula TEMPO = Delay x 1ms.
Address o endereo para onde o microcontrolador vai depois de a tecla premida,
ter sido solta. A subrotina situada neste endereo contm a resposta a este
movimento.
Exemplo 1: BUTTON 0, PORTA, 3, .100, Tester1_above
Chave1 est ligada a RA3 (bit 3 do porto A), usa um tempo de debouncing de 100
milisegundos e zero o nvel lgico activo. O subprograma que processa o
movimento desta tecla encontra-se a partir do endereo com o rtulo
Tester1_above.
Exemplo2: BUTTON 1, PORTA, 2, .200, Tester2_below
Chave-2 est ligada a RA2 (bit 2 do porto A), usa um tempo de debouncing de
200 milisegundos e 1 o nvel lgico activo. O subprograma que processa o
94
movimento desta tecla encontra-se a partir do endereo com o rtulo
Tester2_below.
O exemplo que se segue, mostra como se usa esta macro num programa. O
programa TESTER.ASM acende e apaga um LED. O LED est ligado ao bit 7 do
porto B. A tecla 1 usada para acender o LED. A tecla 2 apaga o LED.
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.
96
Exemplo de um optoacoplador ligado a uma linha de entrada
97
Optoacoplador Numa Linha de Sada
Um optoacoplador pode ser usado para separar o sinal de sada de um
microcontrolador de um dispositivo de sada. Isto pode ser necessrio para isolar o
circuito de uma tenso alta ou para amplificar a corrente. A sada de alguns
microcontroladores est limitada a 25mA. O optoacoplador pode servir-se do sinal
de corrente do microcontrolador para alimentar um LED ou rel, como se mostra a
seguir:
Rel
98
Ligando um rel a um microcontrolador, atravs de um transistor
99
Ligando o optoacoplador e um rel a um microcontrolador
Um rel pode tambm ser activado atravs de um optoacoplador que actua como
buffer de corrente e ao mesmo tempo aumenta a resistncia de isolamento. Estes
optoacopladores capazes de fornecerem uma corrente muito grande, contm
normalmente um transistor Darlington na sada.
A ligao atravs de um optoacoplador recomendada especialmente em
aplicaes de microcontroladores que controlam motores, j que o rudo provocado
pela actuao dos comutadores, pode regressar ao microcontrolador atravs das
linhas da alimentao. O optoacoplador faz actuar o rel e este activa o motor.
A figura em baixo, um exemplo de um programa de activao do rel e inclui
algumas macros anteriormente apresentadas.
100
101
Gerando um Som
Como no caso de uma tecla, podemos utilizar uma macro que fornea uma ROTINA
BEEP ao programa, quando for necessrio.
BEEP macro freq, duration:
freq: frequncia do som. Um nmero maior produz uma frequncia mais alta.
duration: durao do som. Quanto maior o nmero, mais longo o som.
Exemplo 1: BEEP 0xFF, 0x02
Nesta caso, a sada do dispositivo pizoelctrico, tem a maior frequncia possvel e a
durao de 2 ciclos de 65,3mS o que d 130,6mS.
102
Exemplo 2: BEEP 0x90, 0x05
Aqui, a sada do diafragma pizoelctrico, tem uma frequncia de 0x90 e uma
durao de 5 ciclos de 65,3mS. melhor experimentar diversos argumentos para a
macro e seleccionar aquele que melhor se aplica.
A seguir, mostra-se a listagem da Macro BEEP:
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
Registos de deslocamento Shift Registers
105
O esquema de ligaes do registo de deslocamento 74HC597 ao microcontrolador,
mostra-se a seguir:
106
Um exemplo de como usar a macro HC597 mostra-se no programa seguinte. Neste
programa, suposto que o byte de dados recebido nas entradas paralelo do
registo de deslocamento, a partir deste, os bits saem em srie e entram no
microcontrolador onde so guardados na varivel RX. Os LEDs ligados ao Porto B
visualizam a palavra de dados.
107
108
Registo de Deslocamento de Entrada Paralela
109
O dado que queremos transferir, guardado na varivel dados e a varivel
contador usada como contador de ciclos.
110
111
Displays de 7-Segmentos (multiplexagem)
Sempre que um display seleccionado, e para que a leitura seja correcta, o dado
correspondente a esse display deve estar disponvel nas linhas que vo ligar aos
segmentos. At 6 displays podem ser acedidos deste modo, sem que o brilho
desses displays seja afectado. Cada display activado durante um sexto do tempo
112
com bastante intensidade e, a persistncia da imagem nos nossos olhos, faz
parecer que todos os displays esto todos acesos ao mesmo tempo.
numero o nmero de 0 a 99 que vai ser mostrado nos dgitos MSD e LSD.
113
114
115
O programa que se segue, exemplifica a utilizao de macros num programa. Este
programa faz aparecer o nmero 21 nos dois displays de 7 segmentos.
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
de caracteres ASCII standard e ainda caracteres japoneses, gregos e smbolos
matemticos.
Cada um dos 640 pixels do display, podem ser acedidos individualmente, esta
tarefa executada por chips de controle montados em superfcie, na parte detrs
do display.
Isto permite-nos poupar uma enorme quantidade de fios e linhas de controle, de tal
maneira que, atravs de poucas linhas possvel fazer a ligao do display ao
mundo exterior. possvel comunicar com o exterior atravs de um bus de 8 bits
ou mesmo atravs de um bus de dados de apenas 4 bits.
A linha Enable (E) permite a activao do display e a utilizao das linhas R/W e
RS. Quando a linha de habilitar (Enable) est a nvel baixo, o LCD fica inibido e
ignora os sinais R/W e RS. Quando (E) est a nvel alto, o LCD verifica os estados
das duas linhas de controle e reage de acordo com estes.
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.
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.
119
O arquivo LCD.inc contm um grupo de macros para utilizarmos quando
trabalhamos com displays LCD.
120
121
122
123
Macros para LCD
LCDinit macro usada para iniciar o porto a que o LCD est ligado. O LCD
configurado para trabalhar no modo de 4 bits.
Exemplo: LCDinit
Exemplo: LCDChar d
LCDw
Exemplo: LCD_DDAdr .3
Exemplo: LCDline 2
Como tal, difcil apresent-los num display. por isso que necessrio converter
esses nmeros do sistema binrio para o sistema decimal, de modo a que possam
ser facilmente entendidos. A seguir, apresentam-se as listagens de duas macros
LCDval_08 e LCDval_16.
A macro LCDval_08 converte um nmero binrio de oito bits num nmero decimal
entre 0 e 255 e mostra o resultado num display LCD. necessrio declarar as
seguintes variveis no programa principal: TEMP1, TEMP2, LO, LO_TEMP, Bcheck. O
nmero binrio de oito bits guardado na varivel LO. Quando a macro
executada, o equivalente decimal deste nmero vai ser mostrado no display LCD.
Os zeros esquerda no iro ser mostrados.
124
A macro LCDval_16 converte um nmero binrio de 16 bits num nmero decimal
entre 0 e 65535 e mostrando-o no display LCD. As seguintes variveis necessitam
de ser declaradas no programa principal: TEMP1, TEMP2, TEMP3, LO, HI, LO_TEMP,
HI_TEMP, Bcheck. O nmero binrio de 16 bits, ocupa as variveis LO e HI. Quando
a macro for executada, o equivalente decimal do nmero ser apresentado no
display LCD. Os zeros esquerda do nmero no so mostrados.
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
Conversor Analgico-Digital de 12 bits
Trata-se de um conceito lato. Que se torna um pouco mais complexo quando tem
que ser aplicado.
Se juntarmos estas 8 linhas numa caixa preta, elas passaro a ser designadas
como linhas de sada e, assim, temos que arranjar uma linha de entrada. Com esta
configurao, ns podemos detectar 255 incrementos entre zero e 1. Esta caixa
preta designada por CONVERSOR e, como estamos a converter um valor
Analgico num Digital, o conversor designado por conversor analgico-digital
ou ADC (Analog Digital Converter).
129
Ligao de um conversor AD com voltagem de referncia a um
microcontrolador
130
131
A Macro LTC86 tem trs argumentos:
Os quatro bits do valor mais alto esto na varivel HI e os oito bits menos
significativos da converso esto na varivel LO. Count uma varivel auxiliar
para contar o nmero de passagens no ciclo.
132
133
Comunicao em Srie
134
Ligao de um microcontrolador a um PC utilizando o CI de interface
MAX232
135
136
137
Utilizao das macros:
RS232init Macro para iniciar o pino RB0 como linha de transmisso de dados (pino
TX).
Exemplo: RS232init
Exemplo: SEND g
Exemplo:
movlw t
SENDw
Exemplo:
Programa principal:
138
139
140
Apndice A
Conjunto de Instrues
141
Antes da instruo: W = 0x17
FSR = 0xC2
Contedo do endereo 0xC2 = 0x00
Depois da instruo: W = 0x17
FSR = 0xC2
Contedo do endereo 0xC2 = 0x17
142
A.4 CLRW - Escrever 0 em W
143
A.6 SWAPF - Copiar o contedo de f para d, trocando a posio
dos 4 primeiros bits com a dos 4 ltimos
144
A.8 ADDWF - Adicionar W a f
145
Exemplo 2: SUBLW REG
Antes da instruo: W = 0x10
REG = 0x37
Depois da instruo: W = 0x27
C = 1 Resultado > 0
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)
147
contedo de REG = 0x37
Depois da instruo: W = 0x9F
Z=0
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
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
150
Flag: C
Nmero de palavras: 1
Nmero de ciclos: 1
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
151
A.21 COMF - Complementar f
152
A.23 BSF - Pr a 1 o bit b de f
153
A.25 BTFSS - Testar o bit b de f, saltar por cima se for = 1
154
operao REG = REG + 1 ter sido executada, for REG = 0, o
contador de programa aponta para o rtulo de endereo LAB_03.
Caso contrrio, o contador de programa contm o endereo da
instruo seguinte, ou seja, LAB_02.
155
A.29 CALL - Chamar um programa
156
A.31 RETLW - Retorno de um subprograma com uma
constante em W
157
A.33 NOP - Nenhuma operao
158
A.35 SLEEP - Modo de repouso
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.
Exemplo:
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 notar-
se 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:
Exemplo:
162
Exemplo:
O sistema numrico hexadecimal, tem uma base igual a 16. Se a base 16, vamos
precisar de 16 smbolos diferentes para algarismos. No sistema hexadecimal, os
algarismos so: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. As letras A, B, C, D, E
e F correspondem respectivamente aos decimais 10, 11, 12, 13, 14 e 15.
Escolhemos estes smbolos, afim de tornar a escrita dos nmeros mais fcil. Tal
como para o caso do sistema binrio, tambm aqui, ns podemos determinar,
atravs da mesma frmula, qual o maior nmero decimal que possvel
representar com um determinado nmero de algarismos hexadecimais.
Exemplo:
163
Exemplo:
Exemplo:
Exemplo:
Concluso
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
Microcontrolador
Software
165
Um outro modo de ver isto (especialmente se no estiver a funcionar) que
hardware aquilo em que se pode dar um pontap!
Simulador
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
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
Endereamento
ASCII
Carry
Cdigo
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
Dispositivo que torna possvel escrever software na memria do microcontrolador,
possibilitando, assim, que o microcontrolador funcione autonomamente.
Compreende uma seco de hardware, normalmente ligada a um dos portos do
microcontrolador e uma parte de software sob a forma de um programa que corre
num computador PC.
Produto
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