Você está na página 1de 59

MIC

MICROCONTROLADORES

Elaborado por:

Edson Luiz Schultz


Fillipi K. R. de Campos

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).

2. Compreendendo alguns termos tcnicos


Na informtica e na microeletrnica, encontramos alguns termos tcnicos em comum que devem ser
compreendidos para que haja um progresso rpido no aprendizado de microcontroladores e microprocessadores.
O maior entrave no aprendizado vem do acmulo de dvidas. Para um rpido desenvolvimento, vamos
aprender o significado de alguns termos comuns.

Dados
Unidade central
de processamento

Memria

Entrada de
dados

Sada de
dados

Figura 1 Analogia Homem-Mquina

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.

A forma como a mquina transmite os dados


para o meio externo: impressora, monitor,
modem, etc.
Local da mquina onde guardamos as
informaes para que posteriormente sejam
processadas: disquete, HD, memria RAM,
etc.
Posio no crebro onde est a informao. Posio na memria onde est a informao.

4
CPU (unidade
central de
processamento)
Instruo

Local do crebro responsvel por tomar as


decises baseadas nas informaes que
dispomos e na nossa personalidade.
Ordem dada pelo crebro para executar
uma ao: amarrar o cadaro, saltar do
nibus, ligar a TV, etc.

Programa

O nosso planejamento um bom exemplo


de programa. Quando samos para passear,
temos uma programao na mente que nos
conduz a executar aes conforme vamos
recebendo dados do meio externo.

Barramento

Meio pelo qual a informao transmitida:


o som se propaga no ar, etc.

Largura do
barramento

Limite do meio para a transmisso das


informaes. Quando voc olha por uma
luneta, voc v apenas uma parte do cu.
Uma avenida de 3 faixas permite a
passagem simultnea de 3 carros.

Local da mquina que toma decises baseadas


nos dados e no programa armazenado na
memria.
Ordem dada pela CPU para executar uma ao
em funo ou no dos dados: ligar uma sada
se a entrada receber um sinal, limpar a
memria, etc.
Srie de instrues ordenadas de tal forma que
a mquina gere uma resposta complexa: para
imprimir, necessrio puxar o papel,
posicionar a cabea de impresso no ponto de
incio, fluir a tinta, deslocar a cabea de
impresso, etc.
A via pelo qual a informao transmitida.
Exemplo genrico: para os dados chegarem da
memria at a CPU, preciso um conjunto de
fios chamado barramento.
A quantidade de vias para a transmisso das
informaes. Exemplo genrico: uma via de 8
bits pode transmitir 8 estados lgicos ao
mesmo tempo.

3. Iniciando o estudo dos microcontroladores


Processamento
Os microcontroladores so mquinas capazes de processar informaes, como se fossem pequenos
computadores. O processo consiste em ler as entradas, executar uma lgica e atualizar as sadas. Isso feito
atravs das instrues colocadas em ordem pelo programador.

Figura 2 Diagrama do processamento do Microcontrolador

5
Para manter o nvel de uma caixa dgua o processo seria de acordo com o seguinte fluxograma:

Incio

N
Reservatrio vazio?

Ligar bomba de recalque

N
Reservatrio cheio?

Desligar bomba de recalque

Figura 3 Fluxograma de um processo programvel em um Microcontrolador

4. Arquiteturas
Arquitetura Von Neumann

Memria de
pr ogr am a e dados

8-Bits
CPU

Figura 4 Diagrama da arquitetura Von Neumann

Na arquitetura Von Neumann, a unidade central de processamento busca os dados e as instrues na


mesma unidade de memria.
Desvantagens: diminuio da largura de banda (no possvel carregar dados e instrues no mesmo
ciclo de mquina).

Arquitetura Harvard

CPU
12/14/16-Bits
Memria de
pr ogr am as

8-Bits
Memria de
dados

Figura 5 Diagrama da arquitetura Harvard

Na arquitetura Harvard, a unidade central de processamento busca os dados e as instrues em unidades


de memrias diferentes.
Vantagens: aumento da velocidade de processamento (pode-se ler dados e instrues no mesmo ciclo de
mquina), possibilidade de diferentes larguras de barramentos de dados e instrues.
Microcontroladores versus Microprocessadores
Um microcontrolador difere de um microprocessador em vrios aspectos. Primeiro e o mais importante,
a sua funcionalidade. Para que um microprocessador possa ser usado, outros componentes devem-lhe ser
adicionados, tais como memria e componentes para receber e enviar dados. Em resumo, isso significa que o
microprocessador o verdadeiro corao do computador. Por outro lado, o microcontrolador foi projetado para
ter tudo num s chip. Nenhum outro componente externo necessrio nas aplicaes, uma vez que todos os
perifricos necessrios j esto contidos nele. Assim, ns poupamos tempo e espao na construo dos
dispositivos.

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.

Figura 6 Analogia s posies de memria

Os componentes de memria so exatamente a mesma coisa. Para um determinado endereo, ns


obtemos o contedo desse endereo. Dois novos conceitos foram apresentados: endereamento e memria. A
memria o conjunto de todos os locais de memria (gavetas) e endereamento nada mais que selecionar um
deles. Isto significa que precisamos selecionar o endereo desejado (gaveta) e esperar que o contedo desse
endereo nos seja apresentado (abrir a gaveta). Alm de ler de um local da memria (ler o contedo da gaveta),
tambm possvel escrever num endereo da memria (introduzir um contedo na gaveta). Isto feito utilizando
uma linha adicional chamada linha de controle. Ns iremos designar esta linha por R/W (read/write) ler/escrever. A linha de controle usada do seguinte modo: se r/w=1, executada uma operao de leitura, caso
contrrio executada uma operao de escrita no endereo de memria.
A memria o primeiro elemento, mas precisamos de mais alguns para que o nosso microcontrolador
possa trabalhar.
Figura 7
Existem memrias de
diversos tamanhos

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

Figura 8 Diagrama em blocos simplificado dos Microcontroladores PIC

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.

Figura 9 Diagrama em blocos completo do Microcontrolador PIC 16F84

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.

7. Linguagem de Programao do PIC


Antes de comearmos a estudar o PIC necessrio entendermos como feita a programao do mesmo
e como feita a transferncia de arquivos para que o mesmo funcione conforme queremos.

.OBJ
*.ASM
ou
*.C

Compilador

.LST

(MPASM)

.ERR
.HEX
Programador
(icprog)

PIC GRAVADO

Figura 12 esquema de operao de programao e gravao do PIC

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

_XT_OSC & _CP_OFF & _WDT_OFF & _PWRTE_ON


; CP off, DATA off, WD off, PWT on, XT
radix dec
; padrao DECIMAL para valores sem identificao
include
<P16F84.INC>
; anexa arquivo com definicoes do 16F84
;.......................................................................
;-----------------Tabela de definicoes de RAM e constantes-------------W
equ
0
; referencia a W
Led7 equ
7
; led 7 esta em RB7
tempo equ
0CH
; define variavel tempo na RAM 0CH. (1a posicao)
X
equ
0DH
Y
equ
0EH
;----------------------------- Memoria de Programa -----------------------org
0
; define inicio do trecho a seguir em 000
goto inicio
; desvia para o programa principal onde inicia pelo
; ajuste dos registros de controle.
; Este desvio tem por objetivo deixar o endereco 004
; para a rotina de interrupcao.
;.............................. INICIO DA ROTINA DE INTERRUPCAO ..........
org
4
nop
; primeira instrucao da interrupcao.
retfie
; retorna da interrupcao.
;.............................. INICIO DO PROGRAMA ......................
inicio:
; endereco imediatamente apos fim da interrupcao
movlw B'00000000' ; W = 0
movwf INTCON
; INTCON = 0. Nenhuma interrupcao habilitada.
bsf
STATUS,RP0 ; Seleciona banco 1 para option e tris
movlw B'11011111' ;
movwf OPTION_REG ; Registro OPTION ajusta timer 0 clock interno
; e prescaler p/ Watch Dog (nao usamos)

12

movlw B'11111111' ; W = 255


movwf TRISA
; TRISA = ffH. PortA toda entrada
movlw B'01111111' ; W = 0
movwf TRISB
; TRISB = 7fh. PortB.7 saida, demais entrada
bcf
STATUS,RP0 ; volto ao banco 0. Padrao do reset
;. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
principal:
;inicio do programa principal.
bcf
PORTB,Led7 ; fazendo PORTB pino 7 = 0 acende o led 7
call ms250
; espera 250 ms
bsf
PORTB,Led7 ; fazendo PORTB pino 7 = 1 apaga o led 7
call ms250
; espera 250 ms
goto principal
;...............................Rotina de tempo de 250 ms.
ms250:
; - O CALL para a rotina leva 2 us.
movlw 250
;+1
movwf tempo
;+1
total 1 = 4 us
ms250a:
movlw
248
;+1
movwf X
;+1
total 2 = 2 us
ms250b:
nop
;1
decfsz
X
; 1
248 x 4 us + (1 us nop + 2 us quando
; decfsz dah 0)
goto
ms250b
;2
da um tempo total 3 = 995 us
decfsz
tempo
;1
1 us pq tempo > 0 + 2 us goto dah um
;total 4 = 3 us
goto ms250a
;2 250 x (total 2 + total 3 + total 4) + 2 us
;quando tempo = 0
;
= total 5 = 250.002 us
return
; delay = total 1 + total 5 + 2 us return =
;250.008 us
END
; fim do programa fonte.

Exemplo do arquivo acima, mas em *.HEX,


:020000000628D0
:080008000000090000308B002C
:100010008316DF308100FF3085007F308600831239
:1000200086131520861715201028FA308C00F8301A
:0E0030008D0000008D0B19288C0B172808007E
:02400E00F13F80
:00000001FF

13

8. Configurao do Oscilador
O microcontrolador PIC 16F84 tem 4 maneiras diferentes de implementar:
1.
2.
3.
4.

Modo RC: Utiliza um conjunto RC externo;


HS: Cristal ou ressonador de alta velocidade (> 4 MHz);
XT: Cristal ou ressonador de baixa velocidade (de 100 kHz a 4 MHz);
LP: Cristal de baixa velocidade (<200 kHz).
Modo RC:

Nesta situao utilizado um resistor e um


capacitor para gerar uma oscilao, porm, no existe
uma preciso no clock.
Com Cext = 33 pF e um trimpot de 10 k em
Rext podemos ajustar uma freqncia de oscilao
fosc = 4 MHz.
Para verificar esta freqncia devemos
colocar um osciloscpio em [OSC2] de modo que a
freqncia fique fosc/4, ou seja, 1 MHz.
Figura 13 implementao do oscilador no modo RC

Modo Cristal:

Figura 14 Implementao no modo Cristal (XT)

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:

Figura 15 Circuito de reset POWER-ON do PIC

9. Configurao Mnima de um microcontrolador PIC.

Figura 16 circuito bsico para o funcionamento do PIC.

10. PORT A I/O


A porta A tem um modo de transmisso bidirecional de 5 bits. A direo depende do bit escolhido no
TRISA. Se bit = 1 o dado corresponde entrada e se bit = 0 o dado corresponde sada.
A porta A divida em dois blocos, bloco de RA0 at RA3.

15
Portas RA3:RA0.

Figura 18 - BLOCO RA4

Figura 17 - BLOCO RA0:RA3

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:

RA0 At RA3 = entrada e RA4 = sada.

11. PORT B I/O


A porta B tem um modo de transmisso bidirecional de 8 bits. A direo depende do bit escolhido no
TRISB. Se bit=0 o dado corresponde sada e se bit =1 o dado corresponde entrada.
A porta A divida em dois blocos, bloco de RB0 at RB3 e o Bloco RB4 at RB7.

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.

Exemplo de inicializao da PORTB.


Movlw
movwf
Bsf
Movlw
movlw
movwf

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

dado de sada e os demais de

17

12. Organizao da Memria de programa


O mapa de memria de programa descrito abaixo segue o seguinte padro. Entre o endereo de Reset
(000H) e o incio da interrupo (004H) so apenas 4 bytes. Se as interrupes forem usadas, devemos
providenciar nos endereos 000H, 001H, 002H ou 003H um desvio para outro local da memria.
Exemplo:
000H

GOTO

100H

004H

100H

; ao resetar desvia para o endereo 100H


; inicio da interrupo.

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

Seleciona qual o Banco a ser usado


Banco 0
Banco1

Bit 4 -

TO\ - Bit Sinalizador de Time-out:


1 = Aps power-up, instruo CLRWDT ou SLEEP;
0 = Ocorreu Time-out do Watch Dog

Bit 3 -

PD\ - Bit Power Down


1 Aps o power-up ou pela instruo CLRWDT
0 = Pela execuo da instruo SLEE.

Bit 2 -

Z Bit Sinalizador de Zero


1 = O resultado da operao lgica ou aritmtica zero.
0 = O resultado da operao lgica ou aritmtica no zero.

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 -

RBPU\ Habilita o Pull-up da PORTB.


1 = PORTB pull-ups desabilitados.
0 = PORTB Pull-ups habilitados.

Bit 6 -

INTEDG Como ir aceitar a interrupo externa INT?


1 = Na subida do sinal no pino RBO/INT
0 = Na descida do sinal no pino RBO/INT

Bit 5 -

TOCS Fonte de clock do Timer 0.


1 = Transio no RA4/TOCKI
0 = Clock interno (CLKOUT = Fosc/4)

Bit 4 -

TOSE Como o clock externo incrementar o Timer 0?


1 = Na descida do sinal no pino RA4/TOCKI.
0 = Na subida do sinal no pino RA4/TOCKI.

Bit 3 -

Atribuio do Prescaler:
1 = Prescaler atribudo ao Watch Dog.
0 = Prescaler atribudo ao TMRO.

Bit 2, 1 e 0

PS2, PS1 e PS0 Selecionam a texa do prescaler, cfe. a seguir:

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

Diviso Watch Dog


1:1
1:2
1:4
1:8
1:16
1:32
1:64
1:128

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

GIE Bit Global Interrupt Enable ( habilitao global)


0 Habilita aas interrupes que estejam individualmente selecionadas.
1 Desabilita TODAS as interrupes.

Bit 6

- EEIE Interrupo de fim de escrita na EEPROM.


1 = Habilita interrupo de fim de escrita na EEPRO.
0 = Desabilita Interrupo de fim de escrita na EEPROM.

Bit 5

- TOIE Interrupo gerada pelo Overflow no TMRO.


1 = Habilitada.
0 = Desabilitada.

Bit 4

- INTE Interrupo externa ROB/INT.


1 = Habilitada.
0 = Desabilitada.

Bit 3

- RBIE Interrupo por mudanas na PORTB.


1 = Habilitada.
0 = Desavilitada.

Bit 2

- TOIF Sinaliza interrupo pelo Overflow do TMRO(*).


1 = Ocorreu overflow do TMRO.
0 = no ocorreu interrupo do TMRO.

Bit 1

- INTF Sinaliza interrupo externa no pino RBO/INT.


1 = Ocorreu interrupo ROB/INT.
0 = no ocorreu pedido de interrupo pelo RBO/INT.

Bit 0

- RBIF Sinaliza interrupo de mudanas na PORTB.


1 = Um ou mais bits RB7:RB4 mudou de estado.
0 Nenhum dos bits RB7:RB4 mudou de estado.

R/W-X
RBIF
Bit 0

22

12. Conjunto de Instrues


PIC16F84 tem um conjunto de 35 instrues, todas formadas por um palavra de 14 bits.
Nesta palavra est o cdigo da funo a ser executada, alm dos parmetros necessrios, como
constantes, registros, etc.
Algumas convenes:
Campo

Descrio

f
w ou W
b
k
d

registro entre 0 e 127(0 127)


registro W.
bit utilizados pela operao (de 0 a 7)
Constante ou label.
destino do resultado.
Se d = 0, resultado armazenado em W.
Se d =1, resultado armazenado no prprio
registrado indicado na operao ( f )

23
Instruo

Operando(s)

Descrio

Ciclos

Bits afetados

Operaes de byte com registros.


ADDWF
ANDWF
CLRF
CLRW
COMF
DECF
DECFSZ

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

Operaes de bits com registros


BCF
BSF
BTFSC

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)

Operando com constantes e de controle.


ADDLW
ANDLW
CALL
CLRWDT

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

Como programar o PIC: Binrio, Decimal ou Hexadecimal:


As constantes podem ser programadas em qualquer dessas bases, mas temos que referenciar da seguinte
maneira:

Para binria:
Bxxxxxxxx

Para decimal:
Dconstante

Exemplo: 00011000  B00011000

Exemplo: 24dec  D24 ou d24

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

A constante k ser somada ao registro W e o


resultado ser escrito em W.
(0 k 255).
Flags(bits afetados)
ADDWF f,d

C,DC e Z

d=W+f

O valor presente em W ser somado ao valor


presente de f.
Condies:
Se d = 0 ou W, o resultado ser em W
Se d = 1 ou F, o resultado ser em f
Flags(bits afetados)

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

; observe que o resultado 11 foi acumulado no


registro Lt.
Exemplo:

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:

AND entre o valor em W e o valor em f.


d = W AND F
Com o valor em W ser feita a operao lgica
AND, bit a bit.
Condies:
Se d = 0 ou W, o resultado ser em W
Se d = 1 ou F, o resultado ser em f

Ag

equ

movlw
movwf
movlw
andwf

B00001011
Ag
B00000111
Ag,0

Flags(bits afetados)

BCF

C,DC e Z

Zera o bit bno registro f (bit clear f)


0b7
O bit indicado por bser zerado no registro
findicado.

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

; observe que o resultado 3 foi acumulado no


registro W.

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:

Seta o bit b no registro f. (Bit set f).

Can

O bit indicado por b ser setado no bit f


indicado.

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

;observe que aps o comando BCF, o registro


Caneta tem o seguinte valor acumulado.
B10000000.

BTFSC f,b

Exemplo:

Pula a instruo seguinte se o bit bno registro


f for 0.

Fr

equ

movlw
movwf
btfsc
movlw
movlw

B00001100
Fr
Fr,1
8
4

O bit indicado por bno registro f ser


verificado.
Se for 0, a prxima instruo ser ignorada.
Se for 1, executa a prxima instruo
normalmente.
Esta instruo perde dois ciclos

15H

;observe que aps o comando BTFSC, o valor


acumulado em w 4, pois o Bit 1 zero,
portanto pula a prxima instruo.

26

BTFSS f,b

Exemplo:

Pula a instruo seguinte somente se o bit bno


registro f for 1.

Qu

equ

movlw
movwf
btfss
movlw
movlw

B01001101
Qu
Qu,7
12
6

O bit indicado por bno registro f ser


verificado.
Se for 1, a prxima instruo ser ignorada.
Se for 0, executa a prxima instruo
normalmente.
Esta instruo perde dois ciclos.

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

;observe que aps o comando BTFSS, o valor


acumulado em w 12, pois o Bit 7 zero,
portanto no pula a prxima instruo.

Flags(bits afetados)
CALL

Chamada de Sub-rotina

Exemplo:
Pp
Av

equ
equ

18H
20H

O endereo PC+1 (prxima instruo) salvo no


movlw 15
stack.
movwf Pp
Ento o programa desvia para o endereo k.
call tempo
...
Esta instruo perde 2 ciclos.
tempo:
Para finalizar o comando CALL deve-se colocar movlw 2
movwf Av
a instruo RETURN.
return
CLRF

Zera o registro f.

Exemplo:
Bo

equ

21H

O registro f passar a ter o valor e o Flag de zer movlw 5


movwf Bo
(Z) setado.
clrf Bo
CLRW

Exemplo:

Zera o registro W.

Bo

O registro W passar a ter o valor 0 e o Flag de


zer (Z) setado.

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

Os bits do registro fso complementados


(invertidos)
Cada bit fser invertido. Se for o ficar 1 e
vice-versa.
Se d=0 ou W, o resultado ser salvo em W.
Se d=1 ou F, o resultado ser salvo em f.
DECF

f,d

Exemplo:
Bo

equ

movlw B00110011
movlw Bo
comf Bo,F

Qj

O valor em fser diminudo em uma unidade.


Se d = 0 ou W, o resultado ser salvo em W.
Se d = 1 ou F, o resultado ser salvo em f.

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:

Diminui em 1 o valor armazenado em f.

Qj

O valor em fser diminudo em uma unidade.


Se d = 0 ou W, o resultado ser salvo em W.
Se d = 1 ou F, o resultado ser salvo em f.

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

Desvia para o endereo k.


O programa desviado para o endereo indicado
por k.
um desvio incondicional, isto , no depende
de nenhum teste.
A diferena entre GOTO e CALL para o
comando CALL deve-se encerrar com o
comando RETURN, para o GOTO no existe o
comando de retorno.

Bo

Exemplo:

Diminui em 1 o valor armazenado em f.

Diminui em 1 o valor armazenado em f e se


f= 0, pula a prxima instruo.
O valor presente em f ser diminudo de uma
unidade.
Se f resultar = 0, a prxima instruo ser
ignorada.
Se f resultar >0, executa a prxima instruo
normalmente.
Se d = 0, o resultado ser salvo em W.
Se d = 1, o resultado ser salvo em f.

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:

Aumenta em 1 o valor armazenado em f.

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

Aumenta em 1 o valor armazenado em f e se


f=0 pula a prxima instruo.

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:

O valor presente em fser aumentado de uma


unidade, e se f = 0 , a prxima instruo ser
ignorada.
Se f = 1 , executa a prxima instruo
normalmente.
Se d = 0, o resultado ser salvo em W.
Se d = 1, o resultado ser salvo em f.

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

OR entre o valor em W e o valor em f.

movlw
movwf
movlw
andwf

B00001011
Pat
B00000111
Pat,1

Com o valor presente em W ser efetuada uma


operao lgica OR, bit a bit com o valor em f.
Se d = 0, o resultado ser salvo em W.
Se d = 1, o resultado ser salvo em f.

Pat

11
11
7
7

X
11
11
15

33 H

;observe que o resultado 11 foi acumulado no


registro F.

MOVLW k

Exemplo:

W = constante k.

Pa

O registro W ser carregado com a constante k

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

O dado presente em W copado para o registro


f.

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

Retorne da subrotina com W = k.


Esta interrupo promove o fim da sub-rotina
W = constante k.
O endereo de retorno recuperado do Stack.
Perde 2 ciclos.

30

RETURN

Exemplo:

Retorne da Sub-Rotina

Pp
Av

equ
equ

Esta instruo promove o fim da sub rotina que


movlw 15
estava em execuo.
movwf Pp
O endereo de retorno recuperado do stack.
call tempo
...
Perde 2 ciclos
tempo:
movlw 2
movwf Av
return
RLF f,d

Exemplo:

Rotaciona esquerda pelo Carry.

Pap

O valor no registro f rotacionado em um bit,


para a esquerda, passando pelo Carry.
Se d = 0, o resultado ser salvo em W.
Se d = 1, o resultado ser salvo em f.

movlw B10001111
movwf Pap
rlf
Pap,0

RRF f,d

Exemplo:

Rotaciona direita pelo Carry.

Pap

O valor no registro f rotacionado em um bit,


para a direita, passando pelo Carry.

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

;observe que os bits 0 e 7


mudaram de estado devido a
rotao pelo carry.

Se d = 0 ou W, o resultado ser salvo em W.


Se d = 1 ou F, o resultado ser salvo em f.

W
18H
20H

equ

Pap

Carry

18 H
10001111 X
0
10001111 00001111 0
10001111 01000111 1

; observe que o bit 7 mudou


de estado devido a rotao
pelo Carry.
Exemplo:

SLEEP

A CPU entra no modo SLEEP e o oscilador para. movlw B10001111


movwf ppe
Watch dog e prescaler so zerados. TO\=1 e
sleep
PD\=0.
Exemplo:

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

; observe que o resultado 4 foi acumulado no


registro F.

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

XOR entre o valor W e o valor em f.


Com o valor presente em W ser efetuada a
operao lgica XOR, bit a bit, com o valor de f.

movlw
movwf
movlw
xorwf

B00110011
Lps
B01001100
Lp,0

17H

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
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

13. Usando o MpLab


Conceitos bsicos
I - Introduo e ajustes
O MpLab um ambiente integrado para o estudo e desenvolvimento com a famlia PIC de
microcontroladores.
Sua principal caracterstica a total integrao de seus mdulos com o ambiente Windows, permitindo a
fcil copia de arquivos e trechos de arquivos de um aplicativo para outro. Para se escrever um programa no
MpLab, precisamos antes assimilar o conceito de projeto.
I.1.1 - O Projeto no MpLab
Entende-se por projeto um conjunto de arquivos e informaes que diz ao MpLab qual a situao de um
certo trabalho em particular.
Por exemplo, num certo projeto designado EXEMPLO.PJT temos duas janelas abertas, exemplo.asm e
exemplo.lst. Em outro projeto designado TESTE.PJT temos trs janelas abertas, teste.asm, teste.lst. e File
Register Window. Com o gerenciamento de projetos presente no MpLab no precisamos lembrar quais as
janelas que cada projeto estava usando no momento em que encerramos o trabalho, pois ao carregarmos o projeto
desejado todas as informaes relativas ao mesmo sero recuperadas.
I.1.2 - Usando o MpLab pela primeira vez.
Crie uma pasta (diretrio) em seu HD com o nome C:\__________ vamos criar um novo projeto, de
nome EXEMPLO.PJT, neste diretrio.
Inicie o MpLab.
Sua tela dever ser parecida com a da Figura 21

Figura 21

33

1.3 - Selecionando o processador


Se o processador indicado no rodap no for o 16F84, siga a seguinte seqncia nos menus:
Options Development Mode, e selecione a ficha Tools e teremos a tela da Figura 22

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







Inicialmente selecione se a freqncia estar em MHz, KHz ou Hz;


No campo Desired Frequency entre a freqncia desejada, por exemplo, 4 para 4 Mhz ( O campo
Actual Frequency mostra a freqncia atual com que o simulador esta calculando os eventos);
No box Oscilator Type selecione modo XT;
D um clique em OK e na nova janela apenas responda OK novamente.
Veja no rodap do MpLab a freqncia sendo reconhecida pelo programa.

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

Linha do fonte 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

Roda o programa passo a passo dinamicamente, tornando possvel acompanhar visualmente a


seqncia do programa.

F9
RUN

Realiza a simulao rpida, sem atualizar a tela.


Ideal para simular situaes que tomariam muito tempo na animao
Apenas a janela StopWatch atualizada.

F5
STOP

Interrompe a simulao dinmica iniciada pelo Ctrl+F9 ou pelo F9.

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

15. Exemplos e exerccios:


Programa Teste:
;
Objetivo:
Estudar rotina de tempo baseada em software
;
Funcionamento:
Pisca o led 7 a cada 250 ms.
;================================================================================
;|| Essas diretivas iniciais sao sempre iguais em nossos programas
||
;================================================================================
list p=16F84

; processador 16F84

__CONFIG
_XT_OSC & _CP_OFF & _WDT_OFF & _PWRTE_ON
; CP off, DATA off, WD off, PWT on, XT
radix dec
include

; define padrao DECIMAL para valores sem identificacao


P16F84.INC> ; anexa o arquivo que contem as definicoes
; do PIC 16F84
; ===============================================================================
; || TABELA DE DEFINICOES DE RAM E CONSTANTES: definio de posicoes de memria||
; || Aqui sao declaradas (nomeadas) todas as posicoes de memoria utilizadas
||
; || durante TODO o programa. Como exemplo, podemos ver a variavel X que eh
||
; || usada na rotina de tempo.
||
; ===============================================================================
W
equ
0
; referencia a W
Led7
equ
7
; led 7 esta em RB7
tempo equ
X
equ

0CH
0DH

; define variavel auxiliar tempo na RAM 0CH. (1a. posicao)

; -------------------------------- Memoria de Programa -------------------------org

; define inicio do trecho a seguir em 000

goto

inicio

;
;
;
;

desvia para o programa principal onde inicia pelo


ajuste dos registros de controle.
Este desvio tem por objetivo deixar o endereco 004
para a rotina de interrupcao.

; INICIO DA ROTINA DE INTERRUPCAO


org
4
nop
retfie

; primeira instrucao da interrupcao.


; retorna da interrupcao.

; ===============================================================================
; || 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:

; este endereco eh imediatamente apos a interrupcao

movlw B'00000000'
movwf INTCON

; W = 0
; INTCON = 0. Nenhuma interrupcao habilitada.

bsf
STATUS,RP0
movlw B'11011111'
movwf OPTION_REG

; Seleciona banco 1 para option e tris


;
; Registro OPTION ajusta timer 0 clock interno
; e prescaler p/ Watch Dog (nao usamos)


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

; volto ao banco 0. Padrao do reset

; ===============================================================================
; || 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

;
;
;
;

fazendo PORTB pino 7 = 0 acende o led 7


espera 250 ms
fazendo PORTB pino 7 = 1 apaga o led 7
espera 250 ms

===============================================================================
|| 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

; - O CALL para a rotina leva 2 us.


;+1
;+1
total 1 = 4 us

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
;

1 us pq tempo > 0 + 2 us goto da um total 4 = 3 us


250x(total2+total3+total4)+2 us quando tempo = 0
= total 5 = 250.002 us

return

; delay = total 1 + total 5 + 2 us return = 250.008 us

da 0)

; ------------------------------------------------------------------------------; para encerrar o programa, deve-se sempre utilizar o END.


END

; fim do programa fonte.

54
1) Mudana de Tempos.
EXEMPLO: TEMPOS ALTERNADOS.
tempao

equ

35H

; OBS. NO APAGAR NADA, APENAS ESCREVER DO PRINCIPAL PARA FRENTE.


principal:

;inicio do programa principal.

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

;vai para ms250b se for diferente de zero


; decrementa tempo (-1) e pula quando for zero.

goto
ms250a
goto time1

;vai para ms250a se for diferente de zero


;ze for zero vai para time1

END

; fim do programa fonte

55

2. Fazer um programa que simule um semforo 10 x Time; 8 x Time e 2 x Time.


PORTB
Sada
CORES
Ciclo 1
Ciclo 2
Ciclo 3

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

;inicio do programa principal.

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

;vai para ms250a se for diferente de zero


;ze for zero vai para time1
; fim do programa fonte

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

;vai para ms250a se for diferente de zero


;se for zero vai para time1
;fim do programa fonte

Elabore um programa que simule um alarme com quatro entradas em uma sada com 8 ciclos no disparo do
mesmo.

57
7.

Programa para o Controle motor de passo.


MOTOR DE PASSO

Figura 39 - O tipo de passo mais simples esse:

Motor de passo unipolar Meio Passo

Uma forma de passo alternativo, que consome mais energia mais fornece muito mais torque esse:

Motor de passo Bipolar Passo Completo

principal:
Movlw
Movwf
movlw
call
Movlw
Movwf
movlw
call
Movlw
Movwf
movlw
call
Movlw
Movwf
movlw
call
goto

8.

;PROGRAMA MOTOR PASSO UNIPOLAR


B00001000
PORTB
5
time
B00000100
PORTB
5
time
B00000010
PORTB
5
time
B00000001
PORTB
5
time
principal

; espera tempo

; espera tempo

; espera tempo

; espera tempo

Fazer um Programa para o Controle motor de passo, para passo completo.

58
9.

Fazer um programa que faa uma contagem de 0 at 9 usando display de 7 segmentos.

Figura 40
10. Fazer um programa que faa uma contagem de 0 at 99 usando display de 7 segmentos.