Escolar Documentos
Profissional Documentos
Cultura Documentos
MICROCONTROLADORES
Elaborado por:
REV.01
SUMRIO
1. Introduo .................................................................................................................................................... 2
2. Compreendendo alguns termos tcnicos ...................................................................................................... 3
3. Iniciando o estudo dos microcontroladores.................................................................................................. 4
4. Arquiteturas.................................................................................................................................................. 6
5. Microcontroladore PIC................................................................................................................................. 8
6. Microcontrolador PIC16F84 ........................................................................................................................ 9
7. Linguagem de Programao do PIC........................................................................................................... 10
8. Configurao dos Oscilador ...................................................................................................................... 13
9. Configurao Mnima de um microcontrolador PIC.................................................................................. 14
10. PORT A I/O ............................................................................................................................................. 14
11. PORT B I/O ............................................................................................................................................. 15
12. Organizao da Memria de programa .................................................................................................... 17
12. Conjunto de Instrues............................................................................................................................. 22
13. Usando o MpLab...................................................................................................................................... 32
14. Simulando sinais externos no MpLab ...................................................................................................... 48
15. Exemplos:................................................................................................................................................. 52
1. Introduo
O microcontrolador tambm chamado de microcomputador de um s chip porque rene vrios
elementos que no caso dos microprocessadores so desempenhados por outros circuitos separados(externos) por
ex. Memrias(RAM, ROM), temporizadores, comunicao serial,timers, conversores A/D e D/A etc.
Um microcontrolador inclui todos esses perifricos, mas na maioria dos casos so mais restritos, ou seja,
endeream menos memria. O microcontrolador usado para compor dispositivos eletrnicos dedicados de baixo
custo e com aplicaes objetivas. Podemos citar algumas aplicaes: 1) Injeo Eletrnica nos automveis; 2)
Controle interno de temperatura nos automveis; 3) Mquinas de lavar roupa; 4)Forno de Microondas; 5)
Controle de temperatura e alimentao de frangos em um avirio; 6) Robtica; entre muitas outras.
inegvel a propagao comercial dos microcontroladores nos ltimos anos e nas diversas reas:
Automotiva, Residencial, Comercial, Industrial e Rural(Agricultura).
Dados
Unidade central
de processamento
Memria
Entrada de
dados
Sada de
dados
Para entender melhor os conceitos, faamos uma analogia com o ser humano.
Termo
Dados
Dispositivos de
entrada de dados
Dispositivos de
sada de dados
Memria
Endereo de
memria
Homem
Informaes que utilizamos diariamente
para nossas atividades (tudo o que
ouvimos, vemos, sentimos, pensamos,
etc.).
Os sentidos que utilizamos para captar as
informaes: olfato, paladar, tato e
audio.
As formas como transmitimos os dados da
nossa mente para o meio externo: fala,
gestos, sinais, escrita, artes, etc.
Local do crebro onde guardamos as
informaes para que posteriormente
sejam processadas.
Mquina
Informaes utilizadas na mquina para gerar
alguma ao. Podem ter diversas origens mais
so utilizadas e armazenadas na forma digital.
A forma como o dado entra na mquina:
teclado, disquete, etc.
4
CPU (unidade
central de
processamento)
Instruo
Programa
Barramento
Largura do
barramento
5
Para manter o nvel de uma caixa dgua o processo seria de acordo com o seguinte fluxograma:
Incio
N
Reservatrio vazio?
N
Reservatrio cheio?
4. Arquiteturas
Arquitetura Von Neumann
Memria de
pr ogr am a e dados
8-Bits
CPU
Arquitetura Harvard
CPU
12/14/16-Bits
Memria de
pr ogr am as
8-Bits
Memria de
dados
7
Unidade de Memria
A memria a parte do microcontrolador cuja funo guardar dados.
A maneira mais fcil de explicar descrev-la como uma grande prateleira cheia de gavetas. Se supuser
que marcamos as gavetas de modo a elas no se confundirem umas com as outras, ento o seu contedo ser
facilmente acessvel. Basta saber a designao da gaveta e o seu contedo ser conhecido.
5. Microcontroladores PIC
Existem hoje muitos fabricantes de microcontroladores tais como: Atmel, Texas Instrumentos, National,
Intel entre outros, mas o nosso microcontrolador de estudo o PIC que fabricado pela Microchip; veja
http://www.microchip.com, para obter maiores informaes.
O microcontrolador PIC foi escolhido pela facilidade de encontrar literatura fora dos fabricantes, alm
de ser microcontrolador e programadores de baixo custo.
Os microcontroladores apresentam em uma nica pastilha, memrias de dados e programas, canal serial,
temporizadores, interfaces para displays, memria EEPRO, PWM, e diversos outros acessrios internos
dependendo do modelo.
Um diagrama de blocos simplificado pode ser visto na figura 8.
PORTAS
I/O
V
I
A
LGICA DE
CONTROLE
I
N
T
E
R
N
A
ROM
RAM
PERIFRICOS
Neste curso sero abordados os microcontroladores PIC 16F84 e PIC16F71. Mas qual a diferena entre
eles?
O microntrolador PIC 16F84 um dispositivo que contm 1 timer1024 bytes de memria flash eeprom.
(O PIC 16F84 um microcontrolador que pode operar de DC at 10 MHz (ciclo de instruo de 400 ns) e, devido
as suas caractersticas de projeto funciona com o mnimo de componentes externos. O PIC 16F84A pode operar
at 20 MHz).
O microntrolador PIC 16C84 um dispositivo que contm 1 timer1024 bytes de memria flash eeprom e
contm ainda quatros conversores A/D.
Na primeira etapa ser aprofundado com o PIC 16F84 para termos as noes bsicas dos
Microcontroladores PIC logo em seguida ser abordado o microcontrolador PIC 16C71 com conversores A/D.
6. Microcontrolador PIC16F84
Diagrama de blocos completo de um Microcontrolador PIC16F84.
Descrio da Pinagem
Figura 11
Figura 10
10
Pino no
1
2
3
4
5
6
7
8
9
10
Descrio/Nome
RA2
RA3
RA4/TOCKI
MCLR\
Vss
RB0/INT
RB1
RB2
RB3
RB4
11
RB5
12
RB6
13
RB7
14
Vdd
15
16
17
18
OSC2/CLKOUT
OSC1/CLKIN
RA0
RA1
Finalidade
PortA, bit2. Entrada ou sada digital.
PortA, bit3. Entrada ou sada digital
PortA, bit4. Entrada ou sada digital, ou entrada timer 0.
Entrada de Reset em nvel 0.
Referncia Terra
PortB, bit 0. Entrada ou Sada digital, ou interrupo externa.
PortB, bit 1. Entrada ou sada digital.
PortB, bit 2. Entrada ou sada digital.
PortB, bit 3. Entrada ou sada digital.
PortB, bit 4. Entrada ou sada digital.Interrupo nas mudanas de
estado.
PortB, bit 5. Entrada ou sada digital.Interrupo nas mudanas de
estado.
PortB, bit 4. Entrada ou sada digital.Interrupo nas mudanas de
estado.
PortB, bit 4. Entrada ou sada digital.Interrupo nas mudanas de
estado.
Tenso de Alimentao:
2,0 a 6,0 tpica: 5,0.
Cristal ou sada Fclock/4 em modo RC
Cristal ou clock externo.
Porta A, bit 0. Entrada ou sada digital.
Porta A, bit 1. Entrada ou sada digital.
.OBJ
*.ASM
ou
*.C
Compilador
.LST
(MPASM)
.ERR
.HEX
Programador
(icprog)
PIC GRAVADO
11
Para programarmos o PIC temos que seguir os passos descritos conforme a figura 12:
1o Passo deve-se gerar um arquivo fonte com as instrues do PIC, estas instrues podem ser escritas em
qualquer editor de texto, mas quando for salv-lo deve ter a extenso <arquivo>.ASM, isto significa que o
programa foi editado em assembler.
2o Passo, abre-se o programa chamado MPASM, fornecido gratuitamente pela Microchip, este programa ir
converter o programa editado em assembler em:
<arquivo>.OBJ arquivo compilado.
<arquivo>.LST a listagem do arquivo compilado.
<arquivo>.ERR Erros de compilao.
<arquivo>.HEX Gera o arquivo executvel no formato Intel Hex.
Quando solicitamos ao MPASM ele gera todos os arquivos acima automaticamente e grava, isto ocorre
caso no haja nenhum erro de programao. Se houver erro deve-se voltar ao programa <arquivo>.ASM e
arrumar o mesmo.
3o Passo, gravao no PIC, para gravar o <arquivo>.HEX necessrio ter programador/Hardware
tipo(PICStart, PICLab, PICFly, etc) e um programa que faa a interface com este programador.
Os arquivos que mais nos interessam so: *.HEX e *.ASM. Vamos verificar um exemplo:
Exemplo de um arquivo *.ASM
; =======
list p=16F84
__CONFIG
; processador 16F84
12
13
8. Configurao do Oscilador
O microcontrolador PIC 16F84 tem 4 maneiras diferentes de implementar:
1.
2.
3.
4.
Modo Cristal:
MODO
LP
XT
HS
FREQUNCIA
32 KHz
200 KHz
100 KHz
2 MHz
4 MHz
4 MHz
10 MHz
OSC1/C1
69 100 pF
15 33 pF
100 150 pF
15 33 pF
15 33 pF
15 33 pF
15 33 pF
OSC2/C2
69 100 pF
15 33 pF
100 150 pF
15 33 pF
15 33 pF
15 33 pF
15 33 pF
14
Power-ON Reset ( POR):
s vezes existe a necessidade de resetar o processo, neste caso existe um circuito:
15
Portas RA3:RA0.
PORTA
RA0
RA1
RA2
RA3
RA4/TOCK
BIT
BIT0
BIT1
BIT2
BIT3
BIT4
BUFFER TIPO
TTL
TTL
TTL
TTL
ST
FUNO
INPUT/OUTPUT
INPUT/OUTPUT
INPUT/OUTPUT
INPUT/OUTPUT
INPUT/OUTPUT OU CLOCK EXTERNO
Inicializando a PORTA:
Movlw
movwf
Bsf
Movlw
movlw
movwf
B'00000000'
INTCON
STATUS,RP0
B'11011111'
B'00001111'
TRISA
;
;
;
;
;
;
W = 0
INTCON = 0. Nenhuma interrupcao habilitada.
Seleciona banco 1 para option e tris
W = FH
TRISA = FH, assim:
16
Figura 20
Figura 19
PORTA
RB0/INT
RB1
RB2
RB3
RB4
RB5
RB6
BIT
BIT0
BIT1
BIT2
BIT3
BIT4
BIT5
BIT6
BUFFER TIPO
TTL/ST
TTL
TTL
TTL
TTL
TTL
TTL
FUNO
INPUT/OUTPUT, ou interrupo externa.
INPUT/OUTPUT.
INPUT/OUTPUT.
INPUT/OUTPUT.
INPUT/OUTPUT.
INPUT/OUTPUT.
INPUT/OUTPUT.
B'00000000'
INTCON
STATUS,RP0
B'11011111'
B'01111111'
TRISA
;
;
;
;
;
;
;
W = 0
INTCON = 0. Nenhuma interrupcao habilitada.
Seleciona banco 1 para option e tris
W = 7FH
TRISA = 7FH, assim:
entrada.
RB7
17
GOTO
100H
004H
100H
nananda
; programa principal.
000h
004h
005h
.
.
.
.
3FFh
Memria de dados e registro de controle:
000H
001H
002H
003H
004H
005H
006H
007H
008H
009H
00AH
00BH
0CH
4FH
INDF
TMRO
PCL
STATUS
FSR
PORTA
PORTB
-----------------EEDATA
EEADR
PCLATH
INTCON
INDF
OPTION
PCL
STATUS
FSR
TRISA
TRISB
-----------------EECON1
EECON2
PCLATH
INTCON
68 Bytes de uso
Geral
Mapeado no Banco
O.
080H
081H
082H
083H
084H
085H
086H
087H
088H
089H
08AH
08BH
08CH
CFH
18
Descrio dos comandos:
BANCO 0
000H
001H
002H
003H
004H
005H
006H
007H
008H
009H
00AH
00BH
INDF
TMRO
PCL
STATUS
FSR
PORTA
PORTB
-------EEDATA
EEADR
PCLATH
INTCON
Endereamento indireto
Registro de contagem do timer 0
Parte baixo do PC
Registro de Status
Ponteiro para endereamento indireto
Registro dos pinos da PORTA
Registro dos pinos da PORTB
No Implementado.
Dado lido/gravado na EEPROM.
Endereo para ler/gravar na EEPROM.
Parte alta do PC
Registro de INTCON.
BANCO 1
080H
081H
082H
083H
084H
085H
086H
087H
088H
089H
08AH
08BH
INDF
OPTION
PCL
STATUS
FSR
TRISA
TRISB
-------EECON1
EEOCN2
PCLATH
INTCON
Endereamento indireto
Registro OPTION
Parte baixo do PC
Registro de Status
Ponteiro para endereamento indireto
Direo dos pinos da PORTA
Direo dos pinos da PORTB
No Implementado.
Controle da EEPROM.
Controle da EEPROM.
Parte alta do PC
Registro de INTCON.
19
Registros Especiais
Os registros de funo especial so usados pela CPU e outros dispositivos com a funo de controlar o
dispositivo de operao.
Os registros especiais podem ser classificados dentro dois grupos: internos e perifricos. Primeiramente
iremos detalhar os registros internos conforme a seguir:
Registro STATUS:
R/W 0
IRP
Bit 7
R/W 0
RP1
R/W 0
RP0
R-1
TO\
R-1
PD\
R/W x
Z
R/W-x
DC
R/W-x
C
Bit 0
Bit 7 (R/W) IRP Seleciona bancos, para o PIC 16F84A dever ser mantido em zero pois:
0 seleciona Banco 0 e 1(00h 7Fh)
1 Seleciona Banco 2 e 3(100h 1FFh)
Bit 6,5
RP1
O
0
RP0
0
1
Bit 4 -
Bit 3 -
Bit 2 -
Bit 1 -
DC Digit Carry/Borrow
1 = Ocorreu um carry-out do 3 para o 4 bit.
0 = no ocorreu um carry out.
Bit 0 -
C Carry/Borrow
1 = Ocorreu um carry out do 7 bit do resultado.
0 = no ocorreu um carry-out.
20
Registro OPTION:
R/W 1
RBPU\
Bit 7
R/W 1
INTEDG
R/W 1
TOCS
R/W-1
TOSE
R/W-1
PSA
R/W 1
PS2
Bit 7 -
Bit 6 -
Bit 5 -
Bit 4 -
Bit 3 -
Atribuio do Prescaler:
1 = Prescaler atribudo ao Watch Dog.
0 = Prescaler atribudo ao TMRO.
Bit 2, 1 e 0
PS2
0
0
0
0
1
1
1
1
PS1
0
0
1
1
0
0
1
1
PSO
0
1
0
1
0
1
0
1
Diviso Timer
1:2
1:4
1:8
1:16
1:32
1:64
1:128
1:256
R/W-1
PS1
R/W-1
PS0
Bit 0
21
Registro INTCON:
R/W 0
GIE
Bit 7
R/W 0
EEIE
R/W 0
TOIE
R/W-0
INTE
R/W-0
RBIE
R/W 0
TOIF
R/W-0
INTF
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
R/W-X
RBIF
Bit 0
22
Descrio
f
w ou W
b
k
d
23
Instruo
Operando(s)
Descrio
Ciclos
Bits afetados
f,d
f,d
f
f,d
f,d
f,d
INCF
INCFSZ
f,d
f,d
IORWF
MOVF
MOVWF
NOP
RLF
f,d
f,d
f
f,d
RRF
f,d
SUBWF
SWAPF
XORWF
f,d
f,d
f,d
Soma W e F
1
And entre W e F 1
Zera F
1
Zera W
1
Complementa F 1
Decrementa F 1
Decrementa F
pula se f=0
1(2)
incrementa F
1
incrementa f,
pula se f = 0
1
OR entre W e F 1
move f
1
Move W para F 1
Nenhuma Oper. 1
Roda a esquerda
Pelo Carry
1
Roda direita
Pelo Carry
1
Subtrai W de F 1
Troca nibles em f 1
XOR entre W e f 1
C, DC, Z.
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
C
C
C, DC, Z
Z
f,b
f,b
f,b
BTFSS
f,b
Zera bit b em f 1
Seta bit b em f 1
Se bit b em F=0,
Pula
1(2)
Se bit b em f=1
Pula
1(2)
k
k
k
GOTO
IORLW
MOVLW
RETFIE
RETLW
RETURN
k
k
k
Ret. de sub-rotina 2
Entra no modo
SLEEP
1
SLEEP
SUBLW
XORLW
Soma W e K
1
And entre W e K 1
Chama sub-rotina 2
Zera timer do
Watch dog
1
Desvia para o
Label K
1
OR entre W e k 1
W=k
1
Retorne da interr. 2
Retorna W = k 2
k
k
Subtrai k de W 1
XOR entre W e k 1
C, DC, Z
Z
TO\, PD\
Z
2
TO\, PD\
C, DC, Z
Z
24
Para binria:
Bxxxxxxxx
Para decimal:
Dconstante
Para hexadecimal:
0xconstante
ou
constanteH
ADDLW k
W=W+k
Exemplo: 12 Hexa
0x12
ou
12H
Importante:
No
caso
da
constante comear com letra
deve-se colocar um zero antes.
Exemplo: E3H fica 0E3H.
Detalhando as instrues
Exemplo:
W
C,DC e Z
d=W+f
5
13
movlw 5
addlw 8
C,DC e Z
Exemplo:
Lt
equ
movlw
movwf
movlw
addwf
6
Lt
5
Lt,1
Lt
6
6
5
5
X
6
6
11
22H
ANDLW k
W
AND entre o valor em W e a constante k
movlw 10
W = W AND K
Com o valor de W ser feita a operao AND, bit andlw 4
a bit com o valor de k.
O resultado ser salvo em W.
Flags(bits afetados)
C,DC e Z
10
14
25
ANDWF f,d
Exemplo:
Ag
equ
movlw
movwf
movlw
andwf
B00001011
Ag
B00000111
Ag,0
Flags(bits afetados)
BCF
C,DC e Z
11
11
7
3
X
11
11
11
Ca
143
143
143
X
143
15
Can
0
0
0
X
0
128
Fr
12
12
X
12
12
C,DC e Z
Ca
equ
28H
movlw B10001111
movwf Ca
bcf
Ca,7
; observe que aps o comando BCF, o registro
Caneta tem o seguinte valor acumulado.
B00001111.
BSF f,b
Exemplo:
Can
movlw B00000000
movwf Can
bsf
Can,7
Flags(bits afetados)
Ag
Exemplo:
f,b
Flags(bits afetados)
W
33H
C,DC e Z
equ
28H
BTFSC f,b
Exemplo:
Fr
equ
movlw
movwf
btfsc
movlw
movlw
B00001100
Fr
Fr,1
8
4
15H
26
BTFSS f,b
Exemplo:
Qu
equ
movlw
movwf
btfss
movlw
movlw
B01001101
Qu
Qu,7
12
6
Qu
77
77
X
77
12
77
Pp
Av
15
15
X
15
X
X
2
2
15
15
X
2
Bo
5
5
5
X
5
0
Bo
5
5
0
X
5
5
18H
Flags(bits afetados)
CALL
Chamada de Sub-rotina
Exemplo:
Pp
Av
equ
equ
18H
20H
Zera o registro f.
Exemplo:
Bo
equ
21H
Exemplo:
Zera o registro W.
Bo
movlw 5
movwf Bo
clrw
equ
21H
CLRWDT
O registro do watch dog ser zerado, assim como o registro do prescaler ( se este estiver direcionado ao watch
dog). Bits TO\ e PD\ so setados.
O registro do watch Dog esta contando. Aps a instruo CLRWDT o registro do watch dog voltar a 0, e se
estiver usando prescaler, seu registro tambm ser zerado.
Se o Watch dog estiver habilitado, esta instruo dever ser executada de tempos em tempos pelo programa, para
evitar o time out do registro do watch dog e consequentemente o reset do sistema.
27
COMF
f,d
f,d
Exemplo:
Bo
equ
movlw B00110011
movlw Bo
comf Bo,F
Qj
movlw 10
movlw Qj
decf Qj,W
DECFSZ f,d
Exemplo:
Ma
equ
Pe
equ
Perde 2 ciclos.
equ
00110011
00110011
00110011
xxxxxxxx
00110011
11001100
Exemplo:
Qj
movlw 10
movlw Qj
decf Qj,W
GOTO k
Exemplo:
Gt
equ
equ
Qj
10
10
9
X
10
10
Ma
Pe
8
8
8
X
8
7
X
X
X
12
12
12
7
7
7
X
12
11
Qj
10
10
9
X
10
10
35H
25H
27H
volta:
movlw 8
movlw Ma
decfsz Ma,1
goto peso
goto volta
peso:
movlw 12
movlw Pe
decf Pe,1
goto volta
DECF f,d
Bo
Exemplo:
W
38H
Ma # 0,
ento no
pula a
prxima
instruo.
35H
Gt
PORTB
4
4
4
X
4
4
X
X
X
5
5
4
4
X
5
35H
movlw 4
movlw Gt
goto aciona
.
.
Aciona:
movlw 5
movwf PORTB
28
INCF f,d
Exemplo:
Ag
f = f +1
Se d = 0 ou W, o resultado ser salvo em W.
Se d = 1 ou F, o resultado ser salvo em f.
movlw 25
movlw Ag
incf Ag,1
INCFSZ f,d
Exemplo:
Fr
equ
Gr
equ
equ
15H
17H
Perde 2 ciclos.
volta:
movlw 5
movlw Frio
incfsz Frio,F
goto peso
goto volta
peso:
movlw 8
movlw Grama
decf Grama,0
goto volta
IORLW k
Exemplo:
Ag
25
25
25
X
25
26
Fr
Gr
5
5
5
X
5
4
X
X
X
8
8
7
4
4
4
X
8
8
30H
Fr # 0, ento
no pula a
prxima
instruo.
W
W = W OR k
OR entre o valor em W e a constante k.
Com o valor presente em W ser efetuada uma
operao lgica OR, bit a bit com a constante k.
O resultado ser salvo em W
10
10
movlw 10
iorlw 2
IORWF f,d
Exemplo:
d = W OR f
Pat
equ
movlw
movwf
movlw
andwf
B00001011
Pat
B00000111
Pat,1
Pat
11
11
7
7
X
11
11
15
33 H
MOVLW k
Exemplo:
W = constante k.
Pa
movlw 22
movlw 15
W
equ
33H
22
15
29
MOVWF f
Exemplo:
Move W para f.
Pdr
Cx
equ
equ
movlw
movwf
movlw
movwf
13
Pdr
7
Cx
MOVF f,d
Exemplo:
Move f para d.
O valor de f copiado para o destino d.
Se d = 0, o resultado ser salvo em W.
Se d = 1, o resultado ser salvo no f.
Srt
equ
Pdr
Cx
13
13
7
7
X
13
13
13
X
X
X
7
18H
16H
PORTA
Srt
7
7
7
7
X
7
15H
movf PORTA,0
movwf Srt
NOP
Nenhuma Operao.
Esta instruo no executa nenhuma operao na CPU, apenas perde 1 ciclo de mquina.
OPTION
Carrega o registro OPTION.
Esta instruo faz OPTION = W.
OPTION UM REGISTRO INTERNO DO PIC
RETFIE
Exemplo:
Retorne da interrupo.
Esta instruo promove o fim da interrupo que
esta em execuo.
O endereo de retorno recuperado d Stack e o
bit GIE setado.
movlw 34H
nop
retfie
goto TESTE
Perde 2 Ciclos.
RETLW k
Exemplo:
movlw 10
retlw 1
addlw 1
10
1
2
30
RETURN
Exemplo:
Retorne da Sub-Rotina
Pp
Av
equ
equ
Exemplo:
Pap
movlw B10001111
movwf Pap
rlf
Pap,0
RRF f,d
Exemplo:
Pap
movlw B10001111
movwf Pap
rrf
Pap,1
W
equ
Pp
Av
15
15
X
15
X
X
2
2
15
15
X
2
Pap
Carry
18 H
10001111 xxxxxxxx 0
10001111 00001111 0
00011110 00001111 1
W
18H
20H
equ
Pap
Carry
18 H
10001111 X
0
10001111 00001111 0
10001111 01000111 1
SLEEP
SUBLW k
W
W=kW
Subtrai W da constante k.
O registro W subtrado da constante k.
(complemento de 2). O resultado salvo em W.
Flags(bits afetados)
C,DC e Z
movlw 11
sublw 15
11
4
31
SUBWF f,d
Exemplo:
d=fW
Lit
equ
Subtrai W do registro f
O registro W subtrado do registro f
(complemento de 2).
d=f-W
Se d = 0 ou W, o resultado ser salvo em W.
Se d = 1 ou F, o resultado ser salvo em f.
movlw
movwf
movlw
subwf
14
Lit
10
Lit,1
Flags(bits afetados)
Lit
14
14
10
10
X
14
14
4
17H
C,DC e Z
SWAPF f,d
Exemplo:
Troca nibbles de f
Af
equ
Af
11110000
11110000
00001111
X
11110000
11110000
Lps
00110011
00110011
01001100
01111111
X
00110011
00110011
00110011
22H
O registro f tem seu bits 7~4 trocados pelos bits movlw B11110000
movwf Af
3~0.
swapf Af,0
Se d = 0, o resultado ser salvo em W.
Se d = 1, o resultado ser salvo em f.
Flags(bits afetados)
C,DC e Z
XORWF f,d
Exemplo:
d = W XOR f
Lps
equ
movlw
movwf
movlw
xorwf
B00110011
Lps
B01001100
Lp,0
17H
C,DC e Z
Exemplo:
XORLW k
W
W = W XOR k
XOR entre o valor em W e a constante k.
Com o valor presente em W ser efetuada uma
operao lgica XOR, bit a bit, com a constante
k.
Flags(bits afetados)
00110011
00111100
Movlw B00110011
XORLW B00001111
C,DC e Z
TRIS
Carrega o registro TRIS.
Esta instruo faz TRIS =W.
TRIS UM REGISTRO ENDEREVEL
PELO PROGRAMA
Exemplo:
movlw 15
movwf TRIS
TRIS
15
15
X
15
32
Figura 21
33
Figura 22
Marque a opo MPLAB-SIM Simulator e selecione PIC16F84 no menu direita, deixando sua
seleo conforme acima e depois d um clique no boto Apply e em seguida em OK.
Sua tela agora deve estar conforme a tela inicial.
34
I.1.4 - Ajustando o clock para simulao
Para podermos obter do simulador informaes precisas sobre nosso programa quando simulado, devemos
informar ao mesmo qual a freqncia de clock com que o chip funcionar.
Selecione na linha do menu do MpLab:
Options Development Mode e selecione a ficha Clock e obteremos a janela da Figura 23
Figura 23
35
II - Trabalhando com projetos
II.1 - Criando um novo fonte para trabalharmos com um projeto, iniciaremos um novo projeto sempre
pela criao de um novo fonte.
Execute a seguinte seqncia:
File > New
Um novo fonte de nome Untitled1 ser criado, e o MpLab lhe perguntar se deseja criar um novo
projeto.
Responda NO para prosseguir na criao do fonte.
Voc obter a tela da Abaixo.
Figura 24
Ajuste o tamanho da janela Untitled1 conforme sua convenincia.
36
Nesta janela digite o texto conforme figura 25:
Figura 25
Aps a digitao (confirme se o seu texto esta igual ao acima, sem erros), salve com o nome
EXEMPLO.ASM.
Como ? Aps escrever o programa, selecione nos menus:
File Save as...
e na janela aberta digite o nome exemplo.asm para o fonte E selecione no drive C a pasta C:\__________
Agora de um click no boto OK e sua tela dever estar conforme a figura 25 acima, mas com a barra de ttulo do
fonte trocada, ao invs de Untitled1, com o nome e caminho completos, C:\__________\exemplo.asm.
37
II.2 - Criando o projeto
Agora que j criamos o fonte vamos criar o projeto para trabalharmos com o mesmo.
Selecione Project New Project e a janela da figura 26 se abrir (veja na janela do fonte o nome e caminho do
arquivo (como dito anteriormente) :
Figura 26
Escreva no campo File Name: exemplo.pjt e de um click em OK (isto , salvar na pasta
C:\__________ o projeto como exemplo.pjt) IMPORTANTE: O fonte e o projeto devem estar na mesma pasta.
O nome do fonte no precisa ser o mesmo do projeto, mas usar o mesmo nome pode facilitar a organizao.
Sempre que um novo projeto criado, a janela Edit Project ser exibida automaticamente.
38
II.3 - Editando o projeto (novo ou j existente)
Entende-se por editar o projeto escolher qual fonte far parte do mesmo, sendo usado no processo de
compilao, alm de ajustar os parmetros do compilador.
Quando o projeto novo, esta opo aparecer automaticamente. Podemos ainda usar a edio do
projeto para trocar o fonte ou o compilador usado no desenvolvimento.
Para indicarmos o fonte de um projeto ou caso desejemos alterar os par metros do compilador,
devemos usar a seqncia:
Project Edit Project, e em nosso exemplo teremos a seguinte tela:
Figura 27
Observe que em nosso caso, o campo Target filename indica que o alvo, isto , o objetivo final de nosso
trabalho, a gerao do arquivo exemplo.hex, que ser o arquivo hexadecimal a ser gravado no pic.
Ajuste o campo Development mode para exibir MpLab-SIM, 16F84.
Ajuste o campo Language tool suite para Microchip.
No Campo Project files d um clique com o mouse em cima do texto exemplo [.hex] e observe que os
botes Add Node e Node Properties ficaro realados (caso ainda nao estejam).
Sua janela deve estar como a figura 27. Se no estiver, repita os ajustes.
Vamos comear a ajustar o Mplab para trabalhar com nosso projeto.
39
II.3.1 - Ajustando as propriedades do n principal, exemplo.hex
D um clique no boto Node Properties. A janela da figura 28 deve surgir (suas opes pr-selecionadas podem
estar diferentes):
Figura 28
Caso as opes marcadas sejam diferentes, use o mouse e ajuste os campos de forma a que suas opes fiquem
iguais as da figura 28 acima e depois de um clique no boto OK.
Este ajuste muito importante !
Sua tela retornar a da figura 27 (Edit Project).
Neste ponto informamos ao MpLab qual compilador usar, que arquivos gerar (listagem, erros, ...) formato do
arquivo *.HEX, entre outros.
Para cada projeto novo voc dever ajustar desta forma.
40
II.3.2 - Adicionando um fonte (tambm chamado de n )
Agora vamos informar ao MpLab qual fonte ser usado na compilao, dando um click no boto Add Node.
Nossa janela ficar como a figura 29:
Figura 29
Observe que a janela j aparece com a pasta atual do projeto e mostra em nosso caso o fonte criado
anteriormente, exemplo.asm. Selecione o fonte e d um click em OK.
41
Agora sua janela Edit Project deve estar conforme a figura 30.
Figura 30
Agora basta dar um clique no boto OK que o processo de edio do projeto estar completo.
Neste ponto voc dever estar com a janela como a da figura 25, mas com os nomes do projeto e do
fonte indicados nas barras de titulo do fonte e do Mplab.
A partir deste ponto j podemos compilar e simular o nosso programa.
OBSERVAES IMPORTANTES:
Se o MpLab travar repentinamente todo seu trabalho ser perdido.
Como garantir a preservao do trabalho?
Selecione Project Save Project
Selecione File Save All
Este procedimento de salvar antes de compilar automtico depois!
42
III - Compilando o programa
Para compilar o fonte basta teclar F10.
Se no houver erros de sintaxe (escrita) ou outros, haver a indicao de tudo OK, pela janela Build
Results, mensagem Build completed successfully, conforme figura 31.
Feche a janela Build Results.
IMPORTANTE: O fato da compilao no apresentar erros no significa que o programa funcionar conforme
o desejado, pois erros de lgica no so detectados pelo compilador.
Se houver erros, uma janela aparecera indicando todos os avisos e erros detectados pelo compilador.
Figura 31
43
III.1 - Exemplo de erro
No fonte presente na tela, na linha 17, escreva PORTAA ao invs de PORTA e ento compile novamente
teclando F10.
Sua janela Build Results dever ficar conforme a figura 32:
Figura 32
A mensagem Build failed na janela Build Results significa que existem erros na escrita do programa. A linha
Error nos d mais detalhes:
Nmero
do erro
Fonte compilada
com o erro
Descrio
do erro
Dica: Se voc clicar duas vezes na linha de erro da janela Build Results, o MpLab coloca o cursor exatamente na
linha do fonte onde est o erro!
44
V - Simulao simples
Veremos agora tcnicas para simular nosso programa, desde execuo passo a passo at animao.
V.1 - Simulando o fonte do projeto EXEMPLO
Para evitar qualquer problema devido a aes erradas que voc possa ter realizado, feche o MpLab e abra
novamente selecionando o projeto EXEMPLO.PJT, Compile teclando F10 e corrija eventuais erros de digitao
V.1.1 Principais teclas para controle da simulao
F6
RESET
Equivale ao reset da CPU. Posiciona o contador de programa no endereo 0000 e coloca uma
barra preta sobre a linha correspondente.
Esta barra indica a prxima instruo a ser simulada.
F7
STEP
A cada toque em F7 o MpLab executa uma instruo do programa. como se nosso processador
rodasse uma instruo a cada acionamento.
Se forma mantido pressionado, executar as instrues no intervalo de repetio automtica da
tecla.
Ctrl + F9
ANIMATE
F9
RUN
F5
STOP
45
V.1.4 - Observando registros da CPU durante a simulao: Alm de podermos ver o tempo de execuo podemos
ainda ver como os registros internos se comportam durante a execuo do programa.
No menu, selecione a seqncia:
Window Watch window New watch window e sua janela ficara como a figura 33:
Figura 33
Na janela ativa (Add Watch Symbol), no campo Symbol: escreva PORTA (os registros do PIC
devem ser selecionados em maisculas) e depois clique no boto Properties.
Voc pode ainda correr a barra de rolagem vertical e selecionar com o mouse o registro desejado.
46
Sua tela dever estar como a da figura 34, com uma nova janela, onde ajustaremos as propriedades de
visualizao do registro selecionado.
Ajuste Format para DECIMAL e Size para 8 bits, e ento de um clique no boto OK, fechando a janela
de propriedades do registro selecionado.
Figura 34
47
Sua tela deve estar parecida com a da figura 35
Figura 35
48
14. Simulando sinais externos no MpLab
Demonstrar a capacidade do MpLab em simular variaes externas nos pinos do PIC.
VI.2 - Procedimento
Inicie o MpLab e certifique-se de que o mesmo esta no modo de simulao do 16F84
Seguindo os passos j vistos para criao de fonte, projeto, dimensionamento de janelas e simulao, crie um
novo fonte e um novo projeto na pasta C:\__________, de nomes ESTIMULO.ASM e ESTIMULO.PJT.
Na janela Watch_1 acrescente o PORTA com propriedade em binrio.
Neste exemplo o PORTB ser incrementado somente se RA0 estiver em 1.
No fonte, conforme j visto anteriormente, digite (respeitando as tabulaes):
Figura 36
No menu principal selecione:
Debug Simulator Stimulus Asynchronous Stimulus
e voc devera obter uma janela conforme Abaixo:
49
Figura 37
Observe que existem 12 botes com nomes de Stim 1 Stim 12 e dentro dos parnteses a letra P.
Vamos ver cada ajuste em detalhes.
Com o boto direito do mouse clique no boto Stim 1 (P) e voc obter o menu da figura 38.
50
Figura 38
Observe que a opo Pulse esta selecionada. Esta a opo padro, indicada dentro dos parnteses como (P).
As opes para estmulo externo so:
Pulse (P) Da um pulso no pino selecionado (de 0 para 1 e retorna a 0)
Low (L) Coloca nivel 0 no pino
High (H) Coloca nivel 1 no pino
Toggle (T) Inverte o estado no pino (inicia sempre em 0)
Experimente dar uma funo diferente para cada boto e observa o resultado.
51
VI.3 - Como relacionar os pinos do PIC aos botes:
Observe que a primeira opo do menu Assign pin....
Selecionando esta opo um novo menu se abre, conforme a figura 39.
Figura 39
Neste menu, so selecionadas as portas que correspondero aos botes no MpLab.
De RA0 RA4 temos a PORTA.
De RB0 RB7 temos a PORTB.
52
; processador 16F84
__CONFIG
_XT_OSC & _CP_OFF & _WDT_OFF & _PWRTE_ON
; CP off, DATA off, WD off, PWT on, XT
radix dec
include
0CH
0DH
goto
inicio
;
;
;
;
; ===============================================================================
; || INICIO DO PROGRAMA: definicao de entradas e saida.
||
; || Nesse trecho, sao definidas toda PORTA com entrada e toda PORTB como
||
; || saida.
||
; || A placa para ensaios PicLab 4A utilizada neste curso possui Push-bottons ||
; || na PORTA e leds na PORTB, com possibilidade de interao.
||
=================================================================================
inicio:
movlw B'00000000'
movwf INTCON
; W = 0
; INTCON = 0. Nenhuma interrupcao habilitada.
bsf
STATUS,RP0
movlw B'11011111'
movwf OPTION_REG
53
movlw
movwf
movlw
movwf
B'11111111'
TRISA
B'00000000'
TRISB
;
;
;
;
W = 255
TRISA = ffH. PortA toda entrada
W = 0
TRISB = 00h. PortB. toda saida.
bcf
STATUS,RP0
; ===============================================================================
; || PROGRAMA PRINCIPAL: Nucleo do programa
||
; || Nesse trecho eh construido a rotina que deve ser seguida pelo PIC. Esse
||
; || eh o trecho onde serao desenvolvidas as particularidades de cada programa.||
; ===============================================================================
principal:
;inicio do programa principal.
;
;
;
;
;
;
;
bcf
call
bsf
call
PORTB,Led7
ms250
PORTB,Led7
ms250
goto
principal
;
;
;
;
===============================================================================
|| ROTINA DE TEMPO DE 250 ms: tempo de espera
||
|| Esse trecho gera uma pausa determinada pelos loops contidos nele. Ao ser ||
|| invocado pelo call, a rotina de tempo gera um atraso conhecido tambem
||
|| como delay que faz o programa esperar neste caso 1/4 de segundo
||
|| ate a linha do programa principal.
||
===============================================================================
ms250:
movlw 250
movwf tempo
ms250a:
movlw 248
movwf X
;+1
;+1
total 2 = 2 us
ms250b:
nop
decfsz X
goto
ms250b
;1
;2
;1
248 x 4 us + (1 us nop + 2 us quando decfsz
da um tempo total 3 = 995 us
decfsz tempo
goto
ms250a
;1
;2
;
return
da 0)
54
1) Mudana de Tempos.
EXEMPLO: TEMPOS ALTERNADOS.
tempao
equ
35H
bcf
PORTB,Led7
; fazendo PORTB pino 7 = 0 acende o led 7
movlw 10
call
time
; espera tempo
bsf
PORTB,Led7
; fazendo PORTB pino 7 = 1 apaga o led 7
movlw 5
call
time
; espera tempo
goto
principal
;...............................Rotina de tempo de 250 ms.
time:
movwf tempao
; move w para tempao
time1:
decfsz tempao,1
; decrementa tempao (-1) e pula quando for zero.
goto ms250
; vai para ms250, caso for diferente de zero.
Return
; termina a rotina call time
ms250:
;
movlw
2
;move 2 para w
movwf tempo
;move w para tempo
ms250a:
movlw 2
; move 2 para w
movwf X
; move w para X
ms250b:
nop
;sem operao
decfsz
X
; decrementa X (-1) e pula quando for zero.
goto
ms250b
decfsz tempo
goto
ms250a
goto time1
END
55
principal:
RB7
Vermelho
1
0
0
RB6
Verde
0
1
0
RB5
Amarelo
0
0
1
RB4
RB3
RB2
RB1
RB0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
movlw B10000000
movwf PORTB
movlw 10
call
time
; espera tempo
movlw B01000000
movwf PORTB
movlw 8
call
time
; espera tempo
movlw B00100000
movwf PORTB
movlw 8
call
time
; espera tempo
goto
principal
;...............................Rotina de tempo de 250 ms.
time:
movwf tempao
; move w para tempao
time1:
decfsz tempao,1
; decrementa tempao (-1) e pula quando for zero.
goto
ms250
; vai para ms250, caso for diferente de zero.
return
; termina a rotina call time
ms250:
;
movlw 2
;move 2 para w
movwf tempo
;move w para tempo
ms250a:
movlw 2
; move 2 para w
movwf X
; move w para X
ms250b:
nop
;sem operao
decfsz X
; decrementa X (-1) e pula quando for zero.
goto
ms250b
;vai para ms250b se for diferente de zero
decfsz tempo
; decrementa tempo (-1) e pula quando for zero.
goto
goto
end
ms250a
time1
3. Fazer um programa que simule um semforo, mas agora em um cruzamento duas vias.
56
5.
Alarme com duas entradas em uma sada com 6 ciclos no disparo do mesmo.
PORTA
Entrada
Varivel
RA5
X
RA4
X
RA3
X
RA2
X
RA1
S1
RA0
S0
RB6
0
RB5
0
RB4
0
RB3
0
RB2
0
RB1
0
RB0
0
PORTB
Sada
RB7
CORES 11
Declarao das variveis:
S0
S1
equ
equ
0;
1;
principal:
;inicio do programa principal.
testa_ra0:
btfss PORTA,S0
goto
testa_ra1
goto
dispara
testa_ra1:
btfss PORTA,S1
goto
principal
goto
dispara
dispara:
movlw B10000000
movwf PORTB
movlw 6
call
time
; espera tempo
movlw B10000000
movwf PORTB
goto
principal
;...............................Rotina de tempo de 250 ms.
time:
movwf tempao
; move w para tempao
time1:
decfsz tempao,1
; decrementa tempao (-1) e pula quando for zero.
goto
ms250
; vai para ms250, caso for diferente de zero.
return
; termina a rotina call time
ms250:
movlw 2
;move 2 para w
movwf tempo
;move w para tempo
ms250a:
movlw 2
; move 2 para w
movwf X
; move w para X
ms250b:
nop
;sem operao
decfsz X
;decrementa X (-1) e pula quando for zero.
goto
ms250b
;vai para ms250b se for diferente de zero
decfsz tempo
;decrementa tempo (-1) e pula quando for zero.
goto
goto
END
6.
ms250a
time1
Elabore um programa que simule um alarme com quatro entradas em uma sada com 8 ciclos no disparo do
mesmo.
57
7.
Uma forma de passo alternativo, que consome mais energia mais fornece muito mais torque esse:
principal:
Movlw
Movwf
movlw
call
Movlw
Movwf
movlw
call
Movlw
Movwf
movlw
call
Movlw
Movwf
movlw
call
goto
8.
; espera tempo
; espera tempo
; espera tempo
; espera tempo
58
9.
Figura 40
10. Fazer um programa que faa uma contagem de 0 at 99 usando display de 7 segmentos.