Você está na página 1de 98

CURSO DE MICROCONTROLADORES

Prof. Fbio Renato Elias Boaventura

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

O curso todo baseado no PIC 16F84, devido as suas facilidades de


desenvolvimento, por no necessitar de apagadores de EPROM, mas outros modelos
(16C711 com conversores A/D e 12C508 com apenas 8 pinos) tambm so
apresentados de forma resumida, com exemplos.

Avisos Importantes:
1) Toda a documentao do software Mplab requer do usurio proficincia em
ingls, e no faz parte deste curso, no responsabilizando o autor por eventuais
problemas e dificuldades individuais devido deficincia a lngua inglesa.
2) O Autor no se responsabiliza por eventuais problemas de funcionamento e
montagem dos circuitos aqui apresentados, sejam por erro do leitor ou qualquer
outro, pois muitas vezes um circuito no funciona porque est alm da
capacidade tcnica do montador naquele momento.

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
NDICE
1
2
3
3.1
4
4.1
4.2
4.3
4.4
5
5.1
5.1.1
5.1.2
5.2
5.2.1
5.2.2
5.3
5.3.1
5.3.2
5.3.3
5.4
5.5
6
6.1
6.2
6.2.1
6.2.2
6.2.3
6.2.4
6.3
6.4
6.5
6.5.1
7
7.1
7.1.1
7.1.2
7.1.3
7.1.4
7.1.5
7.2
7.2.1
7.2.2
7.2.3
7.2.4
7.2.5

Microcontroladores e suas aplicaes


Arquitetura Harvard X Von Neumann
Os microcontroladores PIC
O clock e os ciclos de mquina
O PIC 16F84
Introduo
Pinagem e caractersticas tcnicas bsicas
Nomenclatura dos pinos
Funcionamento dos registros e memria
Organizao da memria do PIC16F84
Memria de programa
Mapa da memria de programa
Stack
Memria de dados e registros de controle
Registros RAM de uso geral
Registros de funes especiais SFR
Registros de controle da CPU
Registro STATUS
Registro OPTION
Registro INTCON
Uso do stack
Endereamento indireto
EEPROM de dados
Principio de funcionamento
Registros de controle da EEPROM do PIC16F84
Registro EEADR
Registro EEDATA
Registro EECON1
Registro EECON2
Leitura da EEPROM
Esclarecimento sobre o primeiro trecho do programa.
Escrita na EEPROM
Como confirmar o fim da escrita na EEPROM
Portas de entrada e sada
PORTA, registro de controle e funo alternativa 29
Condies eltricas
Leitura e escrita
Funo alternativa no pino RA4
Inicializao
Sobre o TRIS
PORTB, registro de controle e funes especiais
Condies eltricas
Leitura e escrita
Pull-ups
Interrupo de mudana de estado no PORTB
Utilidade destas funes especiais

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
7.2.6
7.2.7
7.3
8
8.1
8.2
8.2.1
8.2.2
8.3
8.4
8.4.1
9
10
10.1
10.2
11
11.1
11.1.1
11.2
12
13
13.1
14
14.1
14.2
14.3
14.4
14.5
14.6
14.7
14.8
14.9
15
15.1
15.2
15.3
16
16.1
16.2
16.3
17
17.1
18
18.1
18.2
18.3
19
19.1

Funo alternativa do pino RBO


Inicializao e TRIS
Escrita e leitura seqenciais na mesma porta
Modulo TIMER 0
Mdulo time (sinal interno F_osc/4)
Modo contador (sinal externo no pino RA4/TOCKI)
Sem prescaler
Com prescaler
Interrupo TIMER 0
Prescaler
Prescaler para TIMER 0
Fusveis de configurao interna
Configuraes do oscilador
Modo RC
Modo cristal ou ressonador
Reset
Power on reset (POR)-circuito mnimo
Circuito POR mais elaborado
Situao dos principais registros aps o reset
Power up timer (PWRT)
Timer de partida do oscilador (OST)
Vantagens
Interrupes no PIC16F84
Principio de atendimento de interrupes
Determinando a fonte da interrupo
Cuidado ao desabilitar globalmente as interrupes
Interrupo da EEPROM
Interrupo do TIMER 0
Interrupo de mudanas no PORTB
Interrupo externa RB0/INT
Reset dos bits de requisio de interrupo
Salvando a situao atual durante o atendimento das interrupes
WATCH DOG
Finalidade e principio de funcionamento
Perodo do WATCH DOG
Uso com interrupo
Modo sleep (power down)
Saindo do modo sleep
Interrupo simultnea execuo da funo sleep
Estado SFR aps os vrios tipos de reset
Posies de identificao-ID
Gravao dos valores desejados nas posies de ID
O software do pic 16F84
Resumo do conjunto de instrues
Consideraes sobre as constantes
Conjunto de instrues detalhado e comentado
Exemplos de hardware e software
Caractersticas do circuito bsico

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
19.2
19.2.1
19.2.2
19.3
19.4
19.5
19.6
19.7
19.7.1
19.8
19.9
20
20.1
20.2
20.3
20.4
21
21.1
21.2
21.3
21.4
21.5
21.6
21.6.1
21.6.2
21.6.3
21.7
21.7.1
21.7.2
21.8
21.8.1
21.8.2
21.8.3
21.8.4
21.9
22
22.1
22.2
22.3
22.4
22.5
23
23.1
23.2
23.3

Programa bsico (padro) para os testes


Consideraes sobre o programa padro
Desligar o WATCH DOG
Exemplo 1-rotina de tempo baseada no clock
Exemplo 2-instrues de deslocamento
Exemplo 3-leitura de teclas
Exemplo 4-incrementa / decrementa valores em RAM
Exemplo 5-leitura e escrita na EEPROM
Cometrios sobre o programa
Exemplo 6-Interrupo do TIMER 0
Exemplo 7-funcionamento do WATCH DOG
A placa de gravao
Modo programao
Arquivo Hexadecimal
Hardware do gravador universal de PICs pela porta paralela
Uso da placa de gravao com os exemplos da apostila
O PIC16C711
Introduo
Pinagem e caracterstica eletricas bsicas
Princopais diferenas nos registros
Registro INTCON no PIC16C711
Registro PCON no PIC16C711
Registros de controle A/D
Registro ADCON0
Registro ADCON1
Registro ADRES
Utilizando o conversor A/D
Tempo de aquisio para o A/D
Tempo de espera para novas converses
Brown out reset
Reconhecimento dos tipos de reset
Tenso de brown out reset
Palavra de configurao do 16C711
Consideraes sobre os bits de status de reset
Exemplo de leitura no canal 0
O revolucionrio pic12C508 com apenas 8 pinos
Introduo
Pinagem e caractersticas eltricas bsicas
Principais diferenas em nvel de hardware e em nvel de software
Portas de I/O do 12c508
Exemplo com o 12c508
Viso geral das famlias PIC 12CXXX, PIC 16c5XX e PIC 16CXXX
Famlia 12CXXX
Famlia 16C5XX
Famlia 16CXXX
APNDICE

Compilando exemplos

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

1-Microcontroladores e suas aplicaes.


Praticamente estamos rodeados de aparelhos que possuem dentro de si um
microcontrolador, e nem mesmo temes conscincia disto.
Os vdeos cassetes, celulares, agendas eletrnicas, vrios brinquedos, alarmes de
automvel, so apenas alguns exemplos mais comuns.
Basicamente o microcontrolador (anteriormente chamado de microcomputador
de um s chip) um componente que possui todos os perifricos dos
microprocessadores comuns embutidos em uma s pastilha, facilitando assim o
desenvolvimento de sistemas pequenos e baratos, embora complexo e sofisticados.
Costuma apresentas em uma nica pastilha memrias de dados e programa,
canal serias, temporizadores, interfaces para displays, memria EEPROM, PWM, e
muito mais, dependendo do modelo.
O diagrama de blocos simplificado pode ser visto na figura 1.1

Figura 1.1-diagrama de blocos bsico de um microcontrolador.


Devido facilidade de estudo permitida pala fcil regravao da memria de
programa do PIC16F84 da Microchip, e tambm pelo fato do mesmo possuir todos os
perifricos dos demais membros da famlia PIC, o mesmo foi a escolhido como objeto
de estudo desta apostila.
Alm deste veremos alguns detalhes do PIC 17C711, que possui A/D interno e
do 12C508, revolucionrio microcontrolador com apenas 8 pinos.
Apresentamos ainda um resumo das famlias PIC 12C508, 16C5X e PIC
16CXXX.

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

2-Arquitetura Harvard X Von Neumann


A maioria dos microprocessadores comuns e vrios microcontroladores
existentes no mercador tem sua estrutura interna de memria de dados e programa
baseados na conhecida arquitetura Von Neumann, que prev um nico bus (via) de
comunicao entre memrias e CPU.
Basicamente podemos dizer que a seqncia de trabalho :

Os PICs utilizam uma arquitetura diferente conhecida como Harvard, que prev
vrias vias de comunicao entre CPU e perifricos, permitindo a realizao de vrias
operaes simultaneamente, que implica em aumento considervel na velocidade de
execuo e permiti ainda que a memria de dados e memria de programas tenham
tamanhos diferentes.
No PIC 16F84, por exemplo os dados so de 8 bits e as instrues so de 14 bits.
Esta facilidade permite ainda que numa nica palavra de 14 bits tenhamos o
cdigo da instruo, onde a mesma vai atuar e o eventual operando ou dado, se houver.
Criou-se ento uma terminologia chamada RISC (reduced Instructions Set
Computer-Computador com Set de Instrues Reduzido) que faz com que existam
instrues (mais ou menos 35, dependendo do modelo) enquanto alguns
microprocessadores tradicionais chegam a ter mais de 100 instrues.
Este set reduzido de instrues facilita muito o aprendizado.
Exemplo: somar 12 ao registro 24.
A)microprocessador comum:
3 bytes somar a operao
12 o operando
24 o local
B)microprocessador RISC:
1 palavra
somar + 12(operando) +24 (local)
de 14 bits
(tudo em uma nica linha)
Como as maiorias das instrues dos microprocessadores comuns usam 2 bytes
(existem instrues de 1 a 3 bytes tambm), vemos que o cdigo dos PICs j tem
basicamente a metade do tamanho, isto , 4 K no PIC so 4 K de instrues, enquanto
4K nos demais so aproximadamente 2K de instrues.
Outra vantagem da arquitetura Harvard esta no fato no fato de que enquanto uma
instruo esta sendo executa e valores lidos ou escritos na memria ou I/O pela via
apropriada, outra instruo j esta sendo carregada pela via da memria de programa.

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
Apenas como comparao , um 8051 padro, rodando a 12 MHz (sua
velocidade mxima tpica), executa a maioria das instrues em 1 us, enquanto para
executar em 1us o PIC precisa de apenas 4 MHz, ou seja, com 12 MHz o PIC ser 3
vezes mais rpido.
Obs: nem todos os modelos de PICs chegam a 12 MHz.

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

3-Os Microcontroladores PIC


toda a famlia PIC de microcontroladores possui as caractersticas descritas
anteriormente, como palavras de 14 bits (existem verses com 12 e de 16 bits tambm),
tecnologia RISC, alta velocidade e facilidade de aprendizado.
As memrias de programa vo desde 512 palavras at dispositivos mais
sofisticados co 16K repletos de perifricos com vrios canais seriais, PWM,
comparadores, vrios timers, entro outros.
Mo captulo 23 apresentaremos um resumo da famlia PIC para apreciao do
leitor.
Nesta apostila apenas o 16F84 ser estudado em profundidade, embora tenhamos
citaes e exemplos com 16C711 e o 12C508.
O 16F84 um membro da famlia PIC de microcontroladores com 1K de
programa em memria FLASH, possui 68 bytes de RAM para uso geral, 64 bytes de
EEPROM para dados, 4 fontes de interrupo, 1 time de 8 bits, 1 WATCH DOG, 1
prescaler (divisor de freqncias) de 8 bits e 13 bits de I/O individualmente
endereveis.
Devido tecnologia FLASH, este chip apagado e regravado automaticamente
pelos gravadores, dispensando as lmpadas ultravioletas comuns nos desenvolvimentos
com EPROM comum.
Como todos os membros da famlia Pic de microcontroladores tem os mesmos
perifricos bsicos, o leitor no sentir dificuldade na migrao de um modelo para
outro, devendo apenas estudar os detalhes de cada um conforme suas necessidades.

3.1-o clock e os ciclos de mquina.


Nos microcontroladores Pic o sinal de clock dividido internamente por quatro
gerando as fases conhecidas como Q1, Q2, Q3 e Q4.
Cada ciclo de instruo composto das 4 fases, de forma que cada ciclo
demanda ento de um tempo.
t=

1
( Fosc / 4)

Se o clock de 4MHz (T=250 ns), cada ciclo tem ento a durao de 1 us.
Obs: Para facilitar, em todos os exemplos da apostila ser usado este calor como
referncia do clock e tempo, exceto se indicado o contrrio.
Como j vimos, existem modelos que chegam a rodar com o clock de at
20MHz, com tempo de ciclo de 200 ns.
A maioria das instrues executada em apenas m ciclo, pois durante as fases
Q1 e Q4 o hardware interno executa uma instruo, outra j foi lida na memria e
aguarda o prximo ciclo.
As execues so as instrues que alteram o PC (program counter), que levam
dois ciclos, pois com a mudana do endereo a instruo j trazida da memria
descartada e outra , no novo PC, dever ser lida.

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

4-O PIC 16F84


4.1-introduo
O pic 16F84 um microcontrolador que pode operar de DC at 10MHz (ciclo de
instruo de 400 ns) e devido as suas caractersticas de projeto funciona com um
mnimo de componentes externos.
Possui ainda vrios circuitos auxiliares internamente, que aumentam bastante
sua flexibilidade e performance.
Suas principais caractersticas so:
- 1K(1024) palavras de 14 bits para programa
- 68 bytes de RAM para uso geral
- 64 bytes de EEPROM para dados
- Stack com 8 nveis
- Apenas 35 instrues
- 15 registros especficos em RAM para controle do chip e seus perifricos
- timer de 8 bits com opo de prescaler de 8 bits
- 13 pinos que podem ser configurados individualmente como entrada ou sada
- alta capacidade de corrente nos pinos de sada (podem acender um led
diretamente)
- capacidade de gerenciar interrupes externas (at 5 entradas), do timer e da
EEPROM
- WATCH DOG para recuperao e Reset em caso de travas no software
- Memria de programa protegida contra cpia
- Modo sleep para economia de energia
- Vrias opes de osciladores
Outras caractersticas e maiores detalhes sero estudados nos captulos
correspondentes

4.2-Pinagem e caractersticas eltricas bsicas

Figura 4.1-Pinos do 16F84 no encapsulamento DIP.

Faixa de tenso de alimentao: 2,0V a 6,0V (tpica 5,0V)

10

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
Consumo de corrente:1)<2 mA a 5V, 4MHz
2)60 uA a 2V, 32KHz
3)26 uA a 2V em standby
Descrio dos pinos agrupados por blocos:
Pino 14
Pino 5
Pino 17
Pino 18
Pino 1
Pino 2
Pino 3

Vdd
Vss
RA0
RA1
RA2
RA3
RA4/TOCKI

Tenso de alimentao
Referncia de Terra
Porta A, bit 0. Entrada ou sada digital
Porta A, bit 1. Entrada ou sada digital
Porta A, bit 2. Entrada ou sada digital
Porta A, bit 3. Entrada ou sada digital
Porta A, bit 4. Entrada ou sada digital,entrada
TIMER 0
Pino 4 MCLR
Entrada de reset em nvel 0
Pino 16 OSC1/CLKIN
Cristal de clock externo
Pino 15 OSC2/CLKOUT Cristal ou sada Fosc/4 em modo RC
Pino 6 RB0/INT
Porta B, bit 0. Entrada ou sada digital, ou
interrupo externa
Pino 7 RB1
Porta B, bit 1. Entrada ou sada digital
Pino 8 RB2
Porta B, bit 2. Entrada ou sada digital
Pino 9 RB3
Porta B, bit 3. Entrada ou sada digital
Pino 10 RB4
Porta B, bit 4. Entrada ou sada digital, interrupo
nas mudanas de estados
Pino 11 RB5
Porta B, bit 5. Entrada ou sada digital, interrupo
nas mudanas de estados
Pino 12 RB6
Porta B, bit 6. Entrada ou sada digital, interrupo
nas mudanas de estados
Pino 13 RB7
Porta B, bit 7. Entrada ou sada digital, interrupo
nas mudanas de estados

4.3-Nomenclatura dos pinos


Sempre que um pino for ativo em 0 ou sinalizar um evento sendo zerado, o
mesmo ser indicado por uma barra invertida \ aps o mesmo.
Exemplo: MCLR\.

4.4-Funcionamento dos registros e memria


Os membros da famlia 16CXXX podem acessar tanto direta como indiretamente
qualquer posio de memria RAM ou dos registros internos, pois esto todos mapeados no
mesmo bloco de memria (ver item 5.2).
Qualquer operao pode ser feita com qualquer registro (de dados ou de controle).
As operaes lgicas e aritmticas so realizadas por um bloco chamado de ULA
(unidade lgica e aritmtica) que possui um registro prprio chamado W(working register-o
popular acumulador), que no esta presente na RAM e no acessado por endereamento ( um
registro interno da ULA).

11

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
A ULA de 8 bits que permite realizar somas, subtraes, deslocamentos (shifts) e
operaes lgicas.
Os bits de sinalizao, ou flags, chamados Z (zero), C(carry) e DC(Digit Carry) refletem
os resultados de vrias operaes realizadas na ULA.

5-Organizao de memria no 16F84


A partir deste captulo estudaremos em detalhes o PIC 16F84, iniciando pelas
memrias internas ao mesmo.
Sempre que se fizer necessrio, um pequeno programa assembler, devidamente
comentado , ser includo. As instrues e detalhes de programao sero estudados no
captulo 18.
A partir deste ponto vamos ainda passar a usar as demonstraes originais das
portas, a saber.
Porta A
ser chamada PORTA de port A.
Porta B
ser chamada PORTB de port B.

5.1-Memria de Programa
Como j vimos, a famlia PIC possui em sua arquitetura segmentos de memria
separados para programas e dados, inclusive com palavras de tamanhos diferentes.
Como cada memria tem uma via separada no hardware interno, os dois blocos
podem ser acessados simultaneamente pelo programa em um mesmo ciclo de mquina,
que como j vimos permite instrues de uma s palavra e execuo em um nico ciclo.
O PC (contador de programa) da famlia 16CXXXtem 13 bits, permitindo
memria de programa de 8K.
O PIC 16F84 possui apenas 1K implementado (de 00H at 3FFH). Quaisquer
referncias a outras posies de memria sero deslocadas para este bloco de 1K.
Exemplo: as posies 72H, 472H, C72H e outras somadas 400H referem-se
sempre a posio original 72H.
No Reset o PC aponta para o endereo 000H e ao atender uma interrupo o PC
carregado com o endereo 004H.

5.1.1-Mapa da memria de programa


Na figura 5.1 temos um mapa da memria de programa . Como vemos entre o
endereo de reset (000H) e o incio da interrupo (004H) tem apenas 4 bytes. Se
interrupes forem usadas o usurio deve providenciar nos endereos 000H, 001H,
002H ou 003H um desvio para outro local da memria.
Exemplo:
000H goto 100H
;ao reset desvia para o endereo 100H
;
;
;
004H .........
;incio da interrupo
;
;
;

12

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
100H btfsc

RA0

;programa principal
000H

Reset

004H
005H
.
.
.
.
.
.
.
.
.
.
3FFH

Interrupo

Uso geral

Figura 5.1-Mapa de memria de programa do PIC 16F84

5.1.2-STACK
O stack foi projetado apenas para salvar o Pc para o qual retornar sempre que
uma interrupo ou sub-rotina for chamada. No stack o chip armazena apenas o PC de
retorno, no salvando as condies da mquina, ficando estes por conta do usurio.
O stack do PIC 16F84 tem 8 nveis de profundidade, ou seja, apenas 8 subrotinas e interrupes podem estar simultaneamente em execuo.
Cabe ao usurio gerenciar o mesmo.

5.2-Memria de dados e registro de controle


A memria de dados e memria de registros de controle nada mais so do que
um grupo de memria RAM organizadas em dois bancos de registradores (banco 0 e
banco 1).
Os flags RP1 e RP0 selecionam os bancos de registradores. Com 2 bits podemos
selecionar at 4 bancos, mas apenas os dois primeiros esto disponveis no PIC 16F84.
Desta forma RP1 deve ser mantido sempre em 0.
Os registros de controle so conhecidos por SFR (special function registers) e
sero assim denominados daqui a diante.
Os SFR e a memria RAM esto organizados no PIC 16F84 conforme a figura
5.2.
importante lembrar que a memria RAM no retm seus valores em caso de
falta de alimentao.

13

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
INDF
TMR0
PCL
STATUS
FSR
PORTA
PORTB
EEDATA
EEADR
PCLATH
INTCON
68 BYTES
DE USO
GERAL

00H
01H
02H
03H
04H
05H
06H
07H
08H
09H
0AH
0BH
OCH
.
.
4FH

INDF
OPTION
PCL
STATUS
FSR
TRISA
TRISB
EECON1
EECON2
PCLATH
INTCON
MAPEADO
NO
BANCO 0

80H
81H
82H
83H
84H
85H
86H
87H
88H
89H
8AH
8BH
8CH
.
.
CFH

Banco 0

Endereo

Banco 1

Endereo

Figura 5.2-memria de dados com SFR e RAM de uso geral no PIC 16F84.

5.2.1-Memria RAM de uso geral


A rea de memria RAM de uso geral, que deste ponto em diante ser chamada
apenas de RAM, vai do endereo 0CH at o endereo 4FH, totalizando 68 bytes
disponveis para o usurio.
Conforme a figura 5.2, os endereos 0CH at 4FH esto espelhados nos
endereos 8CH at CFH, isto , o acesso ao endereo 21H o mesmo que acessar o
endereo A1H.
Nesta rea com 68 bytes o usurio deve alocar todas as variveis de seu
programa, bem como salvar informaes teis quando chamar sub-rotinas ou atender
interrupes.

14

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

5.2.2-SFR
Os SFR so usados pela CPU e/ou perifricos para controlar o funcionamento do
chip conforme o desejado.
Pode ser dividido em dois tipos, controle/uso da CPU e controle/uso dos
perifricos.
No item 5.3 estudaremos os SFR dedicados a CPU. Os demais, utilizados pelos
perifricos, sero estudados nos captulos dedicados aos mesmos.

00H
01H
02H
03H
04H
05H
06H
07H
08H
09H
0AH
0BH

INDF
TMR0
PCL
STATUS
FSR
PORTA
PORTB
EEDATA
EEADR
PCLATH
INTCON

80H
81H
82H
83H
84H
85H
86H
87H
88H
89H
8AH
8BH

INDF
OPTION
PCL
STATUS
FSR
TRISA
TRISB
EECON1
EECON2
PCLATH
INTCON

BANCO 0
Endereamento indireto
Registro de contagem do TIMER 0
Parte baixo do PC
Registro STATUS
Ponteiro para endereamento indireto
Registro dos pinos do PORTA
Registro dos pinos do PORTB
No implementado
Dado lido/gravado na EEPROM
Endereo para ler/gravar na EEPROM
Parte alta do PC
Registro INTCON

Item 5.5
Cap. 8
Item 5.3.1
Item 5.5
Item 7.1
Item 7.2
Item 6.2.2
Item 6.2.1
Item 5.3.3

BANCO 1
Registro OPTION

Item 5.3.2

Direo dos pinos do PORTA


Direo dos pinos do PORTB
No implementado
Controle da EEPROM
Controle da EEPROM

Item 7.1
Item 7.2
Item 6.2.3
Item 6.2.4

5.3-Registros de controle da CPU.


So utilizados para controle da CPU, como interrupo, flags da ULA, timer e
outros.
So os registros STATUS, OPTION, INTCON, e registros de controle das
portas.
Bits indicados por R/W podem ser lidos e escritos.
Bits indicados por R s podem ser lidos.
Bits indicados por u tem seus valores inalterados.
Bits indicados por x tem seus valores indeterminados.
Esto detalhados na prxima tabela de visualizao.

15

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

5.3.1-Registro STATUS
Configura banco de registradores, flags da ULA, e outros
Bit 7
Bit 6
IRP
RP1
Endereo: 03H, 83H
reset:00011XXX
Bit 7-RW
Bit 6-

IRP
RP1

Bit 5-RW

RP0

Bit 4-R

TO\

Bit 3-R

PD\

Bit 2-RW

Bit 1-RW

DC

Bit 0-RW

Bit 5
RP0

Bit 4
TO\

Bit 3
PD\

Bit 2
Z

Bit 1
DC
valor

Bit 0
C
no

Seleciona bancos (para endereamento indireto).


(manter RP1 sempre zerado)
Seleciona bancos (no endereamento direto)
00=banco 0 (00H a 7FH)
01=banco 1 (80H a FFH)
10=banco 2 (100H a 17FH)-no implementado no pic 16F84
11=banco 3 (180H a 1FFH)-no implementado no pic 16F84
Bit sinalizador de Time-out
1=aps power-up, instruo CLRWDT ou SLEEP
0=ocorreu time-out do WATCH DOG
Bit power down
1=aps power-up ou pela instruo CLRWDT
Bit sinalizador de zero
1= o registro esta com valor 0
0= o registro no esta com valor de zero
Digit carry/Borrow
1=ocorreu um carry-out do 3 para o 4 bit
0=no ocorreu um carry out
Carry/Borrow
1=ocorreu um carry-out do 7 bit do resultado
0=no ocorreu um carry-out

Situao no Reset:Banco 0, bits sinalizadores de time-out e power-down setados,


bits da ULA indeterminados.

16

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

5.3.2-Registro OPTION
Configura prescaler, timers e outros.
Bit 7
RBPU\

Bit 6
INTEDG

Bit 5
TOCS

Bit 4
TOSE

Bit 3
PSA

Endereo: 81H
reset:11111111

Bit 7

Bit 2
PS2

Bit 1
PS1

Bit 0
PS0

valor

no

Habilita pull-ups da PORTB


1=PORTB Pull-ups desabilitados
0=PORTB Pull-ups habilitados
Como aceitar a interrupo externa int?
INTEDG 1=na subida do sinal no pino RBO/INT
0=na descida do sinal no pino RBO/INT
Fonte de clock do TIMER 0
1=transio pino RA4/TOCKI
TOCS
0=clock interno (CLKOUT=Fosc/4)
Como o clock incrementar o TIMER 0?
1=na subida do sinal no pino RA4/TOCKI
TOSE
0=na descida do sinal no pino RA4/TOCKI
Atribuio de prescaler
1=prescaler atribudo ao WATCH DOG
PSA
0=prescaler atribudo ao TMR0
PS2
Ajustam a taxa de diviso do prescaler
PS1
PS0
RBPU\

Bit 6-RW

Bit 5

Bit 4

Bit 3
Bit 2-RW
Bit 1-RW
Bit 0-RW

Os bits PS2, PS1 e PS0 selecionam a taxa do prescaler, e esto detalhados na


prxima tabela para facilitar a visualizao.
Observe que um mesmo ajuste d resultados diferentes co relao ao timer e ao
WATCH DOG.
PS2
0
0
0
0
1
1
1
1

PS1
0
0
1
1
0
0
1
1

PS0
0
1
0
1
0
1
0
1

Diviso do Timer
1:2
1:4
1:8
1:16
1:32
1:64
1:128
1:256

Diviso do WATCH DOG


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

Observe que quando o prescaler est direcionado ao timer seu primeiro ajuste
est em dividir por 2 (1:2).
Para assegurar uma taxa de 1:1 na freqncia de contagem do TIMER 0,
direcionar o prescaler para o WATCH DOG.
Situao no Reset: Pull-ups do PORTB desabilitados, interrupo interna aceita
na subida do pulso, TIMER 0com sinal externo, contando pela descida do sinal em
RA4/TOCKI, prescaler ao WATCH DOG com diviso por 128.

17

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

5.3.3-Registro INTCON
Bit 7
GIE

Bit 6
EEIE

Bit 5
TOIE

Bit 4
INTE

Bit 3
RBIE

Endereo: 0BH, 8BH


reset:0000000X

Bit 7-RW

GIE

Bit 6-

EEIE

Bit 5-RW

TOIE

Bit 4-R

INTE

Bit 3-R

RBIE

Bit 2-RW

TOIF

Bit 1-RW

INTF

Bit 0-RW

RBIF

Bit 2
TOIF

Bit 1
INTF

valor

Bit 0
RBIF

de

Bit global interrupt enable (habilitao global)


1=habilita as interrupes que estejam individualmente
selecionadas
0=desabilita todas as interrupes
Interrupo de fim de escrita na EEPROM
1=habilita interrupo de fim de escrita da EEPROM
0=desabilita interrupo de fim de escrita da EEPROM
Interrupo gerada pelo overflow no TMR0
1=habilitada
0=desabilitada
Interrupo externa RB0/INT
1=habilitada
0=desabilitada
Interrupo por mudanas na PORTB
1=habilitada
0=desabilitada
Sinaliza interrupo pelo overflow do TMR0(*)
1=ocorreu um overflow no TMR0
0=ainda no ocorreu overflow no TMR0
Sinaliza interrupo externa no pino RB0/INT (*)
Sinaliza interrupo de mudanas na PORTB (*)

(*) devem ser zerados pelo software.


Situao no Reset: interrupes individuais e globais desabilitadas, requisies de
interrupo do TMR0, interrupo RB0/INT desligadas. (o bit da interrupo em
mudanas de estado no afetado pelo reset).

5.4-Uso do Stack
diferente dos microprocessadores comuns, na famlia 16CXXX o stack no
possui um registro de ponteiro (ou stack pointer, como mais conhecido), acessvel ao
usurio.
O prprio stack, com seus 8 nveis, no acessvel ao programa (no permite
leitura ou escrita).
Sempre que um CALL (chamada de sub-rotina) ou uma interrupo ocorrer,
PC+1 ser salvo no stack para permitir ao programa voltar ao ponto em que se
encontrava antes.
Se mais de 8 CALLs ou interrupes forem atendidas simultaneamente, o 1
endereo de retorno ser perdido, sobrescrito pelo 9, e assim por diante, de forma
circular.
18

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
Como os membros da famlia 16CXXX no possuem flags sinalizadores de
overflow ou underflow do stack, o usurio deve ter extremo cuidado para no permitir
mais de 8 nveis de chamada ou retorno de simultneos.
5.5-Endereamento indireto
O SRF chamado INDF (endereo 00H da RAM) no na verdade um registro
fisicamente implementado.
Quando se acessa o registro INDF na verdade estamos acessando a posio
indicada pelo FSR (file selection register- endereo 04H), que atua como um ponteiro
para outras posies de memria.
Este o chamado o endereamento indireto de memria.
Vamos ver um exemplo bem simples:
CLRF

INDF
do
zerado.

;CLRF significa clear register onde f o nome


__________________endereo cujo contedo ser

Se tivermos no registro FSR o valor 20H, a instruo acima no vai escrever o


byte 00H na posio 00H da RAM, referente ao INDF , mas sim na RAM de endereo
20H, conforme apontado pelo SFR.
Importante: Nem o registro INDF e nem o FSR sofreram qualquer tipo de
alterao.

19

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

6-EEPROM de dados.
O PIC 16F84 possui 64 bytes de memria EEPROM que podem ser utilizados
como memria de dados. Sua principal vantagem em relao a RAM esta no fato de no
perder as informaes co a falta de alimentao. E. contrapartida, o tempo de escrita
pode passar dos 10 ms (lembre-se que a 10 MHz, o PIC 16F84 escreve na RAM comum
em 400 ns).
Sua principal utilizao est nos sistemas que devem memorizar dados como o
ltimo nmero discado em telefones, ajustes de som, cor, brilho, em televisores e outros
como memria das estaes nos rdios, cdigos personalizados de acesso. Entre vrias
outras possibilidades.
Estes 64 bytes no so diretamente endereados como a RAM normal, mas sim
atravs de 4 registros especialmente dedicados a este fim, que so:
-EEADR
endereo desejado para leitura ou escrita na EEPROM
-EEDATA
dado a escrever ou dado lido da EEPROM
-EECON1
registro de controle 1
-EECON2
registro de controle 2

6.1-Principio de funcionamiento
A EEPROM funciona como uma memria EPROM comum, isto , tem os dados
gravados eletricamente e no so perdidos com a falta de alimentao.
A principal diferena reside em que a mesma pode ser apagada eletricamente,
sem a necessidade das luzes ultravioletas das EPROMs comuns.
Possui ainda dispositivos internos para impedir o apagamento ou gravao
acidental por erro do programa ou rudos.
No caso da EEPROM do PIC 16F84 o usurio no precisa entender o
funcionamento da mesma, bastando manipular corretamente os registros conforme a
funo desejada.

6.2-Registros de controle da EEPROM do PIC 16F84


Neste item estudaremos como cada registro de controle da EEPROM funciona e
seu uso.
Sempre que necessrio, pequenos trechos de cdigo sero apresentados,
lembrando ao leitor que maiores detalhes sobre cada instruo podem ser vistos no
captulo 18.

6.2.1-EEADR- Endereo da EEPROM


Este registro de 8 bits, presente na RAM no endereo 09H, permite escolher at
256 posies diferentes.
Lembre-se que apenas as 64 primeiras (00H a 3FH) esto implementadas
no16F84.

20

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
Neste registro escrevemos o endereo onde queremos gravar ou o endereo que
desejamos LER da EEPROM.

6.2.2-EEDATA- Dado da EEPROM


Neste registro de 8 bits presente na RAM no endereo 08H, escrevemos o dado a
ser gravado no endereo EEADR, assim como teremos o dado lido da EEPROM quando
efetuamos leitura.

6.2.3-EECON1- Registro de controle n 1.


Registro que controla as operaes co a EEPROM. Apenas 5 bits esto
implementados.
Bit 7
-

Bit 6
-

Bit 5
-

Bit 4
EEIF

Bit 3
WRERR

Bit 2
WREN

Endereo: 88H
reset:0000X000

Bit 1
WR

Bit 0
RD

valor no

Bits 7, bit 6 e bit 5 no implementados, sempre lidos como 0.


Flag de interrupo de fim de escrita
1=j escreveu na EEPROM.(zerar pelo software)
0=ainda no acabou de escrever
Flag de erro na escrita da EEPROM
WRER
1=parou por reset do WATCH DOG
Bit 3-R/W
R
0=escrita completada com sucesso
Bit de habilitao de escrita na EEPROM
Bit 2-R/W WREN 1=Escrita na EEPROM permitida
0=No permitido escrever na EEPROM
Bit de inicio da escrita
1=inicia um ciclo de escrita.
Bit 1-(*)
WR
( zerado pelo hardware ao fim da escrita)
0=operao de escrita finalizada
Bit de inicio de leitura
1=inicia a leitura da EEPROM
Bit 0-(*)
RD
( zerado pelo hardware ao fim da escrita)
0=no inicia a operao de leitura
(*)-estes bits podem ser lidos, mas o software somente pode setar estes bits. Somente o
hardware pode zerar estes bits.
Bit 4-R/W

EEIF

Observaes Importantes:
A) a operao de escrita na EEPROM leva em mdia 10 ms.
B) A leitura realizada em apenas 1 ciclo de mquina.
Para iniciar uma operao de leitura ou escrita, basta acertar os valore de
EEADR e EEDATA (na escrita) e setar os bits RD ou WR conforme a operao
desejada.

21

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
Como a EEPROM no tem dados gravados imediatamente estes bits no podem
ser zerados pelo software para evitar um truncamento do processo interno de leitura e
principalmente de gravao.
Para proteo contra escritas indesejveis, WREN deve ser mantido zerado pelo
software, sendo setado somente quando for gravar um dado, e sendo novamente zerado
ao final da gravao.
As operaes de leitura no so afetadas pelo estado do bit WREN.
Se um reset ocorrer (MCLR\ ou WATCH DOG) durante uma operao de
escrita, a mesma no se completar e haver um erro, setando o bit WRERR. No reset
sem queda de alimentao , os registros EEADR e EEDATA no so alterados, e pela
verificao do bit WRERR o programa pode reinicias a gravao que foi interrompida.
No reset por power-up (ligao da alimentao ao circuito) o estado do bit
WRERR desconhecido e o programa deve proceder outra lgica para diferenciar os
dois tipos de reset e zerar o mesmo.
Sempre que uma operao de escrita for concluda com sucesso, o flag EEIF ser
setado e a interrupo da EEPROM ser requisitada.
O usurio pode decidir entre habilitar esta interrupo ou efetuar a varredura no
bit. Este bit deve ser zerado pelo software antes de terminar a rotina de interrupo.

6.2.4-EECON2
Este registro no necessita de ajustes por parte do usurio. usado durante o
processo de escrita na EEPROM conforme veremos no item 6.5.

6.3-Leitura da EEPROM
A leitura da EEPROM feita apenas endereando a posio desejada da mesma
e setando o bit RD em EECON1.Antes devemos escrever em EEADR o endereo
desejado.
Exemplo: Lendo o endereo 30H da EEPROM e salvando na RAM de endereo
25H(RP1=0 sempre).
bcf
registro f

STATUS,RP0

;bcf bit clear em f. Zera o bit indicado no

movlw
movwf
bsf
f

30H
EEADR
STATUS,RP0

;Seleciona o banco 0, onde est o registro EEADR


;registro W=constante 30H
;move o valor de w para EEADR, EEADR=30H
;bsf bit set em f. Seta o bit indicado no registro

bsf

EECON1

bcf
movf
EEPROM
movwf

STATUS,RP0
EEDATA,0

;seleciona o banco 1, onde est o registro EECON1


;faz RD=1 iniciando a leitura.
;A leitura leva apenas um ciclo
;volta ao banco 0, onde est EEDATA
;W=EEDATA, que o dado que estava na

25H

;escreve W na RAM com endereo 25H.

22

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

6.5-Escrita na EEPROM
Para demonstrar o processo de escrita na EEPROM vamos nos utilizar mais um
exemplo de programa bem simples e detalhado, escrevendo no endereo 20H da
EEPROM 0 dado 12H.
bcf
movlw
movwf
movlw
movwf
bsf
bcf

STATUS,RP0
20H
EEADR
12H
EEDATA
STATUS,RP0
INTCON,GIE

bsf
movlw(*)
movwf (*)
movlw (*)
movwf (*)
bsf(*)

EECON1,WREN
55H
EECON2
0AAH
EECON2
EECON1,WR

;Seleciona banco 0
;W=20H
;EEADR=W=20H
;W=12H
;EEDATA=W=12H
;seleciona banco 1 para EECON1
;e j desabilita interrupes
; pois INTCON est no banco 0 e 1
;permite escrita na EEPROM
;W=55H
;EECON2=55H
;W=0AAH
;EECON2=0AAH
;bit WR=1. inicia o processo de escrita.

As 5 interrupes marcadas com (*) so obrigatrias e nesta ordem, e sem as


mesmas o processo de escrita no ser executado.
As interrupes devem estar globalmente desabilitadas antes destas 5
instrues.(GIE=0).
Este mecanismo de escrever 55H e depois AAH no registro EECON2 antes de
fazer WR=1 evita que eventuais erros ou desvios inesperados de programa.possam setar
o bit WR e escrever em posies no desejadas. Aliado ao bit WREN permite grande
margem de segurana para dados da EEPROM.
Aps estas linhas de cdigo o bit WREN pode ser imediatamente zerado que no
atrapalhar o ciclo de escrita em andamento e teremos garantido a proteo a EEPROM.

6.5.1-Como configurar o fim da escrita na EEPROM


Aps este trecho podemos optar por duas linhas de raciocnio:
1) esperar a escrita acabar efetuando varredura no bit EEIF sem gerar interrupo,
criando uma sub-rotina de espera.
;considere que j estamos no banco 1
espera:
btfss
goto
bcf

EECON1,EEIF
espera
EECON1,EEIF

;se EEIF for 1 pula a prxima instruo.


;EEIF=0, volta para a linha espera
;EEIF=1,pulei a linha do goto
;e j zero o bit sinalizador
bsf
INTCON,GIE
;volta aceitar interrupes.
2)reabilitar as interrupes, inclusive a da EEPROM e ao fim da escrita atender a
mesma, resetando o bit EEIF.

23

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
o processo mais indicado, pois a escrita na EEPROM pode levar 10 ms ou
mais. Com clock de 10MHz, executamos 1 instruo a cada 400 ns, e nos 10 ms a CPU
j poder ter executado 25000 instrues.

24

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

7-Portas de entrada
As portas de entrada/sada so mais conhecidas por portas I/O, e sero assim
chamadas deste ponto em diante.
O PIC 16F84 possui 2 portas I/O, chamadas como vimos de PORTA e PORTB.
Alguns pinos das portas so multiplexados com outras funes, como
interrupo externa e contador externo.

7.1-PORTA, seu registro de controle de direo e sua funo


alternativa.
O PORTA composto de um latch de 5 bits e cada um de seus bits pode ser
individualmente ser ajustado com entrada ou sada, sendo tambm referenciados como
RA (RA0 RA4).
Para ajuste do bit da porta como entrada ou saida, um registro especial chamado
TRISA existe na RAM e quando um de seus bits est em 1 o bit correspondente do
PORTA entrada, e se for 0 ser sada.
No reset todos os bits nos registros TRISA e TRISB so setados, ajustando todos
os bits das portas como entrada.

7.1.1-Condies eltricas
BIT
PORTA bit 0(RA0)
PORTA bit 1(RA1)
PORTA bit 2(RA2)
PORTA bit 3(RA3)
PORTA bit 4(RA4)

ENTRADA
TTL
TTL
TTL
TTL
Schmidt Trigger

SADA
TTL
TTL
TTL
TTL
Open Drain

7.1.2-Leitura e escrita
Ler a porta significa ler o estado presente nos pinos, enquanto escrever significa
escrever latchs de sada.
Todas as operaes de escrita so realizadas numa seqncia .
L MODOFICA ESCREVE
Como funciona ?
Quando se escreve em qualquer bit da porta, a CPU l o estado atual dos latches
de sada da porta toda, modifica os bits desejados e reescreve toda a porta nos latches de
sada.

7.1.3-Funo alternativa do pino RA4


O pino RA4 tambm pode ser usado como entrada de sinal externo pata o
TIMER 0 (estudaremos no captulo 8).
25

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

7.1.4-Inicializao
Sempre aps o reset as portas devem ser inicializadas escrevendo-se nas mesmas
, antes de ajustar o TRIS equivalente.
Exemplo: inicializando o PORTA com bits RA0 e RA1 sada e os demais
entrada.
Para tal TRISA deve ser escrito XXX11100, ento escreveremos 00011100 =
0CH
clrf
bsf
movlw
movwf
entrada

PORTA
STATUS,RP0
1CH
TRISA

;inicializa PORTA
; seleciona o banco 1 para acessar TRISA
;W=1CH=00011100
;ajusta RA0 e RA1 sadas, RA2, RA3 e RA4

7.1.5-Sobre o TRIS
Os registros TRISA e TRISB esto alocados no banco 1 de memria e podem se
alterados a qualquer momento pelo programa. Isto significa que um bit ajustado como
sada pode ser ajustado para ser entrada no decorrer do programa.
Isto permite que o projeto do hardware permita grande flexibilidade, usando um
s pino com as duas funes.

7.2-PORTB, seu registro de controle de direo e suas funes


especiais
O PORTB uma porta de 8 bits e assim como o PORTA, cada um de seus bits
pode ser configurado como entrada ou sada, pelo registro TRISB.
Cada bit do PORTB chamado de RB0, RB1,....,RB7.
Como no PORTA, para o PORTB:
Bit TRIS = 1Entrada (padro do reset)
Bit TRIS = 0Sada

7.2.1-Condies eltricas.
Quando I/O, todos os bits do PORTB so TTL.
RB0 SCHIMIDT TRIGGER quando usada para interrupo
externa

26

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

7.2.2-Leitura e escrita
Funcionam de forma semelhante ao PORTA. Na leitura o estado presente nos
pinos efetivamente carregado, e na escrita realizada a operao
LModificaEscreve j vista.

7.2.3-Pull-ups
Todos os bits do PORTB tem um pull-up interno. Para habilitar o funcionamento
dos mesmos de forma global, o bit RBPU\ (OPTION, bit 7) deve ser zerado. Este bit
setado no reset.
Individualmente, apenas os bits do TRISB ajustados como entrada tero os pullups habilitados, mesmo que RBPU\ = 0.

7.2.4-Interrupo de mudana de estado no PORTB.


Os pinos RB4 e RB7 tem como funo alternativa gerar um pedido de
interrupo sempre que o estado dos mesmos sofrer alterao (novamente, somente
aqueles configurados como entrada).
O estado dos pinos comparado ao estado anterior armazenado em um latch, e
se o estado foi alterado (de 1 para 0 ou de 0 para 1), o bit RBIF ser setado gerando a
interrupo (se estiver habilitada).
Esta interrupo pode fazer com que o chip saia do modo SLEEP (captulo 16) e
h duas maneiras de ressetar o pedido de interrupo: zerar o bit RBIF ou ler o PORTB.

7.2.5-Utilidade dessas funes especiais.


A caracterstica de possuir pull-ups internos e sair do modo SLEEP pela
mudana de estado em alguns bits permite a fcil implementao de teclados e
sobretudo de dispositivos que operam somente com o pressionar de determinadas teclas,
como controles remotos, por exemplo, economizando energia durante os perodos de
inatividade.
No se recomenda a varredura desses pinos do PORTB se a interrupo em
mudana de estado estiver habilitada.

7.2.6-Funo alternativa do pino RB0/INT (interrupo externa)


O pino RB0/INT tem como funo alternativa entrada para um sinal externo de
interrupo (item 14.7).

7.2.7-Inicislizao do TRIS
Funciona de modo semelhante ao PORTA.

27

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

7.3-Escrita e leitura seqenciais na mesma porta.


Devido a problemas inerentes a carga externa e ao funcionamento interno do
hardware de escrita e leitura, deve~se evitar escrever e ler na mesma porta
seqencialmente, para no correr o risco de que na leitura seja lido o bit que foi alterado
na instruo anterior, antes da mudana real ter ocorrido.
No fazer:
bcf
btfsz
goto

PORTB,1
PORTB,1
RB1_1

;faz RB1=0
;se RB1=0, pula a prxima instruo.
;RB1=1, vai para o label RB1_1

Corremos o risco de no ter dado tempo para que RB1 seja efetivamente zerado
e o goto seja executado.
Maneira segura:
bcf
nop
btfsz
goto

PORTB,1
PORTB,1
RB1_1

;faz RB1=0
;perde 1 ciclo
;se RB1=0, pula a prxima instruo.
;RB1=1, vai para o label RB1_1

Aqui demos um tempo entre alterar e ler o mesmo bit, assegurando que deu
tempo para a instruo ser executada externamente ao chip.

28

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

8-Mdulo TIMER 0
O PIC 16F84 possui um contador/temporizador (TIMER 0) de 8 bits que
incrementa seu valor a cada pulso na entrada RA4/TOCKI (modo contador) ou a cada
ciclo de instruo (modo timer) que ocorre a freqncia Fosc/4.
Quando ocorre o overflow de 255 para 0, o hardware seta o bit TOIF gerando o
pedido de interrupo do TIMER 0.
Suas principais caractersticas:
- 8 bits de contagem
- o registro TMR0 pode ser lido ou escrito a qualquer momento
- sinal de contagem interno ou externo
- pode ter o sinal de contagem dividido por um prescaler
- gerao de interrupo se estiver habilitada

8.1-Modo Timer (sinal interno Fosc/4)


Ao ajustarmos TOCS=0 (registro OPTION, bit 5), fazemos com que o TIMER 0
seja incrementado a cada ciclo de instruo (a 4 MHz, incrementa a cada 1 us).
Nestas condies o TIMER 0 funciona livremente. No existe um controle para
que o mesmo no seja incrementado. Se o timer o no for utilizados manter sua
interrupo sempre desabilitada com TOIE = 0 (INTCON, bit 5).
IMPORTANTE: sempre que se escreve um novo valor no registro TMR0, a
contagem suspensa por dois ciclos de mquina. Este atraso deve ser levado em conta
pelo software.

8.2-Modo contador (sinal esterno no pino RA4/TOCKI)


Com o bit TOCS=1 o TIMER 0 incrementar sua contagem a cada pulso
presente no pino RA4/TOCKI, que dever ser ajustado como entrada (TRISA, bit 4=1).
Para que o contador incremente na subida do sinal externo, o bit TOSE
(OPTION, bit 4) deve ser zerado, e para que o contador incremente na descida do sinal
externo, o bit TOSE deve ser setado.

8.2.1-Sem prescaler
Se no usarmos o prescaler (divisor de freqncia) os tempos em nvel alto e
baixo do sinal externo devem ser de pelo menos 2 Tosc (ou mais que Tciclo), devido
s limitaes na amostragem do sinal interno e ao no sincronismo entre sinal externo e
fases internas da CPU, que realizam amostragem no pino RA4/TOCKI duas vezes por
ciclo.

8.2.2-Com prescaler
Se o prescaler for utilizado, os pulsos do sinal externo sero divididos pelo valor
do prescaler.
Para permitir a amostragem necessrios que o perodo do sinal seja pelo menos
4X Tosc (1 ciclo) dividido pelo valor do prescaler, e o tempo alto ou baixo nunca
devem ser menores que 10 ns.

29

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
Como a sada do prescaler sincronizada com o clock interno, um pequeno
atraso pode ocorrer entre os pulsos do sinal e o efetivo incremento do registro TMR0.

8.3-Interrupo do TIMER 0
Quando o registro TMR0 muda de FFH (255) para 0, ocorre o chamado
overflow do timer, e o bit TOIF ser setado sinalizando o overflow e gerando o pedido
de interrupo.
Se a interrupo estiver habilitada (TOIE=1 e GIE=1), o endereo PC+1 ser
salvo no stack e ento o programa ser desviado para o endereo 004H onde tem inicio
a rotina de tratamento de interrupes.
Antes de finalizar a interrupo (instruo RETFIE), o bit TOIF deve ser zerado,
seno a interrupo ser novamente chamada.
Como o TIMER 0 fica parado no modo SLEEP, no h a possibilidade de sair
do modo SLEEP por esta interrupo.

8.4-Prescaler
Um outro registro de 8 bits est disponvel como divisor de freqncia,
permitindo divises de at 256 vezes na freqncia do sinal de entrada.
Este prescaler pode ser utilizado como extensor do tempo do WATCH DOG, de
modo mutuamente exclusivo, Isto se for utilizado pelo timer no estar disponvel ao
WATCH DOG, e vice versa. (maiores detalhes no captulo 15).
No item 5.3.2 temos os ajustes do prescaler (OPTION, bits 3, 2, 1 e 0).

8.4.1-Prescaler para o TIMER 0


Quando designado para o TIMER 0, o prescaler divide a freqncia de entrada
(externa ou interna) por 2, 4, 8,....., 256, conforme ajustes no OPTION.
Se desejarmos que no haja qualquer diviso do sinal para o TIMER 0, basta
designar o prescaler para o WATCH DOG, e teremos 1:1.
Embora o valor da diviso seja ajustado no OPTION, o registro onde
incrementada a contagem no acessvel ao usurio.
Este registro zerado sempre que se efetua qualquer escrita no registro TMR0.

30

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

9-Fusveis de configurao interna


O PIC 16F84 possui no endereo 2007H da memria de programa 14 bits
implementados que permitem ao usurio escolher a configurao de trabalho do chip.
Estes bits so acessveis somente na gravao ou verificao, e seu estado
quando o chip est apagado 1.
Bit 13 Bit 12 Bit 11 Bit 10
CP
CP
CP
CP

Bit 9
CP

Bit 8
CP

Bit 7
CP

Bit 6
CP

Endereo 2007H
uuuuuuuuuuuuuu

Bit 13 a 4

CP

Bit 3

PWRTE

Bit 2

WDTE

Bit 1

FOSC1

Bit 0

FOSC0

Bit 5
CP

Bit 4
CP

Bit 3
Bit 2
Bit 1
Bit 0
PWRTE WDTE FOSC1 FOSC0

valor no reset:

Bit de proteo do cdigo


1= cdigo desprotegido
0= cdigo protegido
Habilitao do power-up timer
1= power-up timer desabilitado
0= power-up timer habilitado
Bit de habilitao do WATCH DOG
1= WDT habilitado
0= WDT desabilitado
Seleciona tipo de oscilador
11= modo RC externo
10= modo cristal ou ressonador de alta velocidade HS
01= cristal ressonador de baixa velocidade XT
00= cristal de baixa potncia LP

IMPORTANTE:
O leitor no precisa se preocupar com esta posio de memria, pois os
gravadores permitem ao usurio apenas escolher as opes desejadas e ento efetua a
gravao automaticamente, sem que o usurio precise lembrar qual o nome de cada bit e
nem seu endereo.

31

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

10-Configuraes do oscilador
O PIC 16F84 pode funcionar com 4 modos de oscilador.
Ao gravar o chip devemos escolher qual o oscilador utilizado sob pena de no
funcionar ou at mesmo danificar o chip.
Os modos de funcionamento so:
1-RC, modo RC externo
2-HS, cristal ou ressonador de alta velocidade (> 4MHz)
3-XT, cristal ou ressonador de baixa velocidade (de 100 KHz a 4 MHz)
4-LP, cristal de baixa potncia (< 200 KHZ)
Estes valores so mais ilustrativos do que regras rgidas. possvel , por
exemplo, rodar a 10 MHz no modo XT, embora no seja aconselhvel.
Como os mais utilizados so o modo XT e o RC, vamos estudar apenas estes
dois. Caso o leitor desejar informaes mais detalhadas sobre estes e os outros modos,
dever recorrer aos manuais do fabricante.

10.1-Modo RC
Neste modo usamos um circuito RC externo para gerar oscilao. Neste modo
no temos preciso dos valores de clock, sendo mais usado nas aplicaes que no
requerem rotinas de tempo baseadas no clock interno, sendo tambm a alternativa mais
econmica.

Figura 10.1-Modo RC do PIC 16F84


No pino OSC1 ligamos a juno do resistor e o capacitor, e no pino OSC2 temos
a freqncia de clock dividida por 4 (Fosc/4).
Recomenda-se que Ro esteja entre 3 K e 100K, e Co pode nem existir,
embora recomenda-se valores acima de 20 pF para evitar rudos e melhoras a
estabilidade.

32

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
Com /co = 33pF e um trimpot de 10 K em Ro, podemos facilmente ajustar a
freqncia de clock em 4 MHz, gerando ciclo de instrues de 1 us.
Para tal coloque um osciloscpio ou frequencmetro no pino OSC2 e ajuste Ro
at que a freqncia indicada seja de 1 MHz (Fosc/4).
Importante: Mesmo ajustando a freqncia em 4 MHz como acima, o clock
poder cariar devido a variaes de temperatura e flutuaes na alimentao.

10.2-Modo cristal ou ressonador XT


Neste modo temos o circuito na figura 10.2

Figura 10.2-Modo XT
Para cristal de 4 MHz os capacitores podem ter valores entre 15 e 33 pF. Valores
maiores aumentam o tempo de estabilizao do oscilador, podendo at mesmo no
oscilar.

33

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

11-Reset
Vrios eventos podem resetar o chip:
- ao ligar, com power-on reset;
- pino MCLR\ ir a 0 durante operao normal ou SLEEP;
- Overflow do WATCH DOG durante operao normal ou durante SLEEP;

11.1-Power-on reset (POR)


O circuito mnimo para gerar o POR consiste apenas em ligar o pino MCLR\ ao
Vdd, eliminando os circuitos RC comumente utilizados.

Figura 11.1-Circuito mnimo para POR do PIC 16F84

11.1.1-Circuito de POR mais elaborado


H casos que se deseja ter a possibilidade de resetar o chip manualmente, ou
devido a problemas na alimentao precisamos de um circuito mais confivel. Nestas
condies, o circuito da figura 11.2 atende plenamente esta funo.

Figura 11.2-Circuito de Reset Melhorado do PIC 16F84 com reset manual

11.2-Situao dos principais registros aps o reset

34

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
Como ainda vamos estudar o WATCH DOG e alguns registros comportam-se de
maneira diferente dependendo do reset, veremos no item 16.6 o estado dos registros
aps os vrios tipos de reset.

35

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

12-POWER-UP (PWRT)
O PIC 16F84 possui ainda um sistema interno que gera um delay de 72 ms fixo,
a partir do final do POR (Power-on reset ou reset ao ligar a alimentao).
O chip j permanece em modo de reset durante o tempo normal de reset, seja
pelo RC externo ou pelo tempo de subida da fonte, quando o pino MCLR\ est direto
em Vdd.
Com este timer habilitado, mais 72 ms so adicionados neste tempo durante o
qual o estado do reset mantido.
Este recurso permite evitar que o reset seja no seja corretamente executado
principalmente por problemas de rudo ou demora na estabilizao da fonte.
O tempo de 72 ms normal, podendo variar pela variao do Vdd, temperatura,
....,etc.

36

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

13 Timer de partida do oscilador (Oscillator Start-up


Timer - OST)
quando utilizamos o modo XT, LP ou HS, este timer e automaticamente
acionado logo apes o tempo do PWRT, fazendo com que a CPU ainda espere mais
1024 perodos do oscilados para sair do reset.
til para garantir que o cristal ou ressonador j estejam estabilizados.

13.1-Vantagens
O uso combinado dos recursos de PWRT e OST, geralmente garante que a
operao de reset ser bem sucedida, permitindo o uso circuito mnimo de reset visto na
figura 11.1.
Se porm, a fonte estiver sujeita a flutuaes ou rudo excessivo, alm destes
recursos, o circuito da figura 11.2 o mais indicado.

37

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

14-Interrupes no PIC 16F84


1234-

O PIC 16F84 possui 4 sinalizadores internos de interrupo:


Interrupo externa pelo pino RB0/INT
Overflow do TIMER 0
Fim da escrita na EEPROM
Mudana nos pinos RB4 RB7

Com exceo da interrupo de fim de escrita na EEPROM, cujo bit sinalizador


est no registro EECON1 (item 6.2.3), todos os demais bits de controle de habilitao e
sinalizao esto no registro INTCON (item 5.3.3).
Basicamente podemos colocar assim:
Se GIE=0

nenhuma interrupo ser atendida, independente do estado dos bits


individuais de habilitao estarem ou no habilitando uma interrupo
em particular.

Se GIE=1

As interrupes que estiverem com seus bits de habilitao em 1 sero


atendidas, e as demais estaro desabilitadas.

Quando qualquer interrupo que estiver sendo atendida, GIE ser zerado pelo
hardware e setado novamente ao fim desta.

14.1-Princpio de atendimento de interrupes


Ao aceitar a interrupo, a CPU faz GIE = 0, para inibir que outras interrupes
possam interromper a que j esta sendo executada, salva no STACK o endereo de
retorno (a prxima aps o PC atual, isto , PC+1), e depois desvia para o endereo 004
da memria de programa.
Ao encontrar a instruo RTFIE (return from interrupt-volte da interrupo) a
CPU finaliza a interrupo em andamento, recuperando a PC do STACK e fazendo
novamente GIE = 1.
A instruo RTFIE nunca deve ser utilizada como retorno de sub-rotinas (ver
captulo 18, instrues RETLW e RETURN).
Para as interrupes externas, o atraso no inicio da rotina de interrupo de 3 a
4 ciclos de instruo.

14.2-Determinando a fonte da interrupo.


Como a interrupo sempre desvia o PC para o endereo 004H, o software deve
verificar nos bits de requisio de interrupes qual setado, determinando a fonte da
interrupo.
Estes bits, como j vimos, so: RBIF, INTF, TOIF, EEIF.
importante sempre frisar dois pontos:
1- Mesmo com GIE = 0, os bits so setados pela respectiva fonte interrupo. Por
exemplo, no overflow do TIMER 0, o bit TOIF ser setado, mesmo que TOIE = 0.

38

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
2- Com base nisto, antes de habilitar uma interrupo em particular o leitor deve
verificar se a mesma j no esta sendo requisitada (j est pendente), pois seu
atendimento imediato ao habilit-la pode no ser desejado.

14.3-Cuidados ao desabilitar globalmente as interrupes (GIE= 0)


Existem situaes nas quais o usurio dever inibir temporariamente as
interrupes, fazendo GIE = 0, como por exemplo na escrita da EEPROM (item 6.4).
Se porm, um pedido de interrupo for aceito no mesmo momento (lembra-se
que vrios eventos podem ocorrer simultaneamente execuo de uma instruo, como
amostragem dos sinais dos sinais de interrupo, por exemplo) corremos o risco de ter a
interrupo atendida, e ao voltar desta a instruo RTFIE far GIE = 1 novamente,
voltando o programa na posio imediatamente aps aquela onde fizemos GIE = 0.
Assim, pensamos que as interrupes esto desabilitadas, mas na verdade foram
reabilitadas pelo fim da interrupo que foi atendida.
Para assegurar que GIE = 0 devemos executar a seguinte seqncia :
garante:
(1)
bcf
(*)
(2)
btfsc
(3)
para
(4)

goto

INTCON, GIE
INTCON, GIE
garante

; fazemos GIE = 0
;
;se GIE = 0 pula a prxima instruo pelo motivo
;acima
;exposto, GIE pode ser 1 ainda. Neste caso volta
;zerar.
;continua com GIE = 0

(*) Devemos observar que uma interrupo pode ter sido atendida entre as
instrues 1 e 2 acima.

14.4- A interrupo da EEPROM


Sempre que uma operao na EEPROM for finalizada, o bit EEIF(EECON1, bit
4), ser setado, gerando o pedido de interrupo da EEPROM, que ser atendido se os
bits EEIE = 1 e GIE = 1.
Para maiores detalhes ver o capitulo 6.

14.5-interrupo do TIMER 0
Ao ocorrer um overflow no registro TMR0, o bit TOIF ser setado e a
interrupo do TIMER 0 ser requisitada, se TOIE e GIE = 1.
Lembre-se de que o TIMER 0, quando com clock interno (Fosc/4), ter seu
registro TMR0 incrementado sempre, independente dos bits de controle. No h
controle tipo contar/parar no TIMER 0.
Ver captulo 8 para maiores detalhes sobre o TIMER 0.

14.6-Interrupo de mudana no PORTB


39

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
Uma mudana de estado nos bits RB4 RB7 ajustados como entrada vai pedir a
CPU uma interrupo , setando o bit RBIF. Esta interrupo ser atendida se RBIE = 1
e GIE = 1.
Ver item 7.2.4 para maiores detalhes.

14.7-Interrupo externa RB0/INT


O pino RB0/INT, ao invs de I/O digital, pode ser usado como entrada para sinal
externo de interrupo.
Sempre que INTE = 1 e GIE = 1, uma variao de 1 para 0 (INTEDG = 1) ou de
0 para 1 (INTEDG = 0) neste pino far INTF = 1, sinalizando o pedido de interrupo
externa.

14.8-Reset dos bits de requisio de interrupo


IMPORTANTE:
O hardware no reseta os bits de pedido de interrupo INTF, RBIF, EEIF e
TOIF. Cabe ao usurio zerar os mesmos antes de executar a instruo RTFIE.

14.9-Salvando a situao atual durante o atendimento das interrupes


Como j vimos, somente o PC+1 salvo no Stack ao desviar para o endereo
004H, atendendo a interrupo.
Como praticamente todas as instrues usam o registro W e o STATUS,
sobretudo devido s manipulaes dos bancos de registradores e sinalizaes da ULA
(zero, carry, ...) convm ao usurio salvar os mesmos em posies reservadas da RAM
para poder recupera-los (vale para qualquer outra posio de memria que porventura
possa ser alterada na rotina de interrupo).
O trecho de programa a seguir armazena a seguir o registro W em uma posio
de RAM chamada de W2 e o STATUS em uma outra posio da RAM chamada de
STATUS2. Estas posies so determinadas pelo usurio ao escrever o programa.
004:
movwf
movf
movwf

movf
movwf
movf
retfie

W2

;primeira instruo da interrupo


;W2=W
STATUS,0 ;faz W=STATUS
STATUS2
;STATUS2=STATUS original
;
;
;rotina da interrupo
;
;
STATUS2,W ;finalizou a rotina de interrupo
;copia o STATUS antigo em W
STATUS
;e volta ao registro original
W2,0
;recupera o W original
;retorna
40

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

15-WATCH DOG
o WATCH DOG um timer especial que roda livremente sem qualquer ligao
com o clock ou na dependncia de sinais externos. O WATCH DOG funciona mesmo
que o clock seja retirado do sistema.
Se ocorrer um overflow do registro do WATCH DOG (este registro no
acessvel ao usurio), mais conhecido por time-out do WATCH DOG, a CPU ser
resetada, e se isto ocorrer durante o modo SLEEP a CPU retornar a operao normal,
no endereo logo aps a instruo SLEEP.
O WATCH DOG pode estar permanentemente ligado ou desligado, sendo esta
opo ajustada com o fusvel de programao WDTE (cap. 9), e este ajuste no pode ser
alterado durante a execuo do programa.

15.1-Finalidade e princpio de funcionamento.


A principal finalidade do WATCH DOG est em recuperar a CPU de eventuais
travamentos no programa, que podem ocorrer por interferncias externas ou at mesmos
erros no software.
Basicamente, se o WATCH DOG estiver habilitado, devemos de tempos em
tempos reset-lo, de forma a nunca ocorrer o overflow do mesmo.
Se em qualquer momento o programa travar, o WATCH DOG no ser resetado
e o seu registro sofrer um overflow, ocasionando o reset da CPU.

15.2-Perodo do WATCH DOG


O perodo do WATCH DOG de 18 ms, sem o prescaler, valor este ajustado na
fabricao do chip. Este tempo mdio pode ser alterado por variaes na temperatura,
na alimentao e nos processos de fabricao do chip.
Com prescaler ajustado para funcionar com o WATCH DOG, este tempo pode
chegar a at 2 segundos ou mais.
Observe no item 5.3.2 que as taxas de diviso para o WATCH DOG vo de 1:1
1:128 (128 X 18ms = 2,304 s).
So duas as instrues que zeram o registro do WATCH DOG: SLEEP (entra
em modo SLEEP) e CLRWDT (zera o WATCH DOG). Alm do registro do WATCH
DOG, estas instrues zeram tambm o registro do prescaler (o registro onde o prescaler
efetua a contagem, e no seu ajuste, feito no OPTION).
Sempre que ocorrer um overflow do WATCH DOG (time-out) o bit TO\ ser
zerado, devendo a rotina de inicializao verificar este bit para saber se o reset foi
normal ou gerado pelo WATCH DOG.

15.3-Uso com interrupo


Embora o reset do WATCH DOG pela instruo CLRWDT possa ser executado
a qualquer momento, recomenda-se no faze-lo nas interrupes, pois o programa pode
estar travado e ainda assim estar atendendo interrupes normalmente.
Como exemplo vamos citar a interrupo externa RB0/INT baseada nas
passagens do zero da rede. Com freqncia de 60 Hz temos 120 interrupes (duas por
ciclo) por segundo que ocorrem a aproximadamente 8,333 ms. Se o WATCH DOG
estiver com tempo mnimo (18 ms) e efetuamos o CLRWDT nas rotinas de zero da

41

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
rede, o time-out nunca ocorrer, e ainda assim um determinado trecho de programa fora
desta interrupo poder estar travado.

42

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

16-Modo SLEEP (Power Down)


O modo power-down, mais conhecido por modo SLEEP, faz com que o chip
entre em estado praticamente inerte, onde o chip em si passa a consumir
aproximadamente 60 uA (contra 7 mA em operao normal).
Se o hardware for projetado visando este modo, dever set tal que economize
energia nestas condies.
Esta caracterstica aliada aos pull-ups do PORTB e a interrupo nas mudanas
de estado permitem o projeto de sistemas para funcionar a bateria com longa durao,
como controles remotos em geral.
Para entrar no modo power-down, basta executar a instruo SLEEP.
Neste modo, se o WATCH DOG estiver habilitado,o mesmo sra zerado e
continuar rodando, o bit PD\ que sinaliza o modo power-down ser zerado e o bit TO\
(Time-out) ser setado, e o oscilador interno desligado, no gerando mais fases Q1 a Q4
do clock e parando tanto a CPU quanto o TIMER 0.
Se uma escrita estiver ocorrendo na EEPRM neste momento a mesma ser
finalizada normalmente.
O estado dos pinos I/O permanece inalterado.

16.1-Saindo do modo power-down (SLEEP)

Existem trs maneiras de sair do modo SLEEP:


Reset externo pelo pino MCLR\
Time-out do WATCH DOG, caso esteja habilitado
Interrupo externa RB0/INT, interrupo por mudanas no PORTB e
interrupo de fim de escrita na EEPROM.

O TIMER 0 no finaliza o modo SLEEP porque no funciona sem o clock.


Se sair pelo reset no pino MCLR\ a CPU iniciar pelo endereo 000H.
As interrupes citadas, para tirarem a CPU do SLEEP precisam estar com os
bits de requisio individuais habilitados, embora GIE no precise estar em 1.
Temos ento dois modos de funcionamento:
A)GIE = 0
A CPU volta a funcionar pela execuo da instruo imediatamente aps
a
instruo SLEEP. como se o SLEEP fosse uma sub-rotina, que parou
todo
o chip.
B)GIE = 1
A instruo imediatamente aps o SLEEP ser executada, e ento a
interrupo ser executada como uma interrupo qualquer.
Se por ventura desejarmos que a interrupo seja atendida sem que a
instruo aps o SLEEP seja executada antes, basta colocar NOP como a
instruo aps o SLEEP.

16.2-Interrupo simultnea execuo da instruo SLEEP


A execuo de qualquer instruo ocorre em 1 ciclo, que possui 4 fases p
pulsos de clock, como j vimos.

43

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
Se durante umas das fases Q1 a Q4 da instruo SLEEP ocorrer uma requisio
de interrupo, a CPU poder se comportar de 2 maneiras distintas:
1)A interrupo ocorreu antes da execuo total do SLEEP
O SLEEP no ser executado, sendo tratado como um NOP pela CPU. Desta
forma, o WATCH DOG no ser zerado, TO\ no ser setado e PD\ no ser zerado.
Em outras palavras, como se o SLEEP nunca tivesse existido.
2) A interrupo ocorreu imediatamente aps ou durante o reconhecimento do SLEEP
Embora entre em SLEEP a CPU voltar imediatamente ao normal (o SLEEP ter
se comportado como uma simples instruo), embora o WATCH DOG tenha sido
zerado e os bits de sinalizao ajustados, isto , TO\ = 1 e PD\ = 0.
Para que o programa saiba se realmente o SLEEP ocorreu basta ver se o bit PD\
=0. se no estiver, o SLEEP foi executado como um NOP.
Embora o WATCH DOG seja zerado pelo SLEEP, devemos por segurana
incluir a instruo CLRWDT imediatamente antes da instruo SLEEP, pois por
coincidncia o WATCH DOG pode estar sofrendo time-out durante execuo do
SLEEP (como no caso 1 acima).
16.3-Estado dos SFR aps os vrios tipos de reset
Temos na tabela a seguir o estado dos principais SFR aps os vrios tipos de
reset possveis.
As convenes para esta tabela so:
U = inalterado
- = no implementado
X = desconhecido
Q = depende de outras condies
SFR

PC
STATUS
W
TMR0
FSR
PORTA
TRISA
PORTB
TRISB
EEDATA
EEADR
EECON1
OPTION
INTCON

POR

MCLR\ normal ou aps SLEEP,


WATCH DOG em uso normal

Sai do SLEEP por interrupo ou


WATCH DOG

000H
000H
PC+1
00011XXX
000QQUUU
UUUQQUUU
XXXXXXXX
UUUUUUUU
UUUUUUUU
XXXXXXXX
UUUUUUUU
UUUUUUUU
XXXXXXXX
UUUUUUUU
UUUUUUUU
- - - XXXXX
- - - UUUUU
- - - UUUUU
- - - 11111
- - - 11111
- - - UUUUU
XXXXXXXX
UUUUUUUU
UUUUUUUU
11111111
11111111
UUUUUUUU
XXXXXXXX
UUUUUUUU
UUUUUUUU
XXXXXXXX
UUUUUUUU
UUUUUUUU
- - - 0X000
- - - 0Q000
- - - 0UUUU
11111111
11111111
UUUUUUUU
0000000X
0000000U
UUUUUUUU
Figura16.1-Estado dos SFR aps vrios tipos de reset.

44

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

17-Posies de identificao
Existem 4 endereos na memria de programa, de 2000H 2003H, que servem
para armazenar at 4 nibles (nmeros ou palavras de 4 bits) como identificao (ID),
check-sum ou cdigo outro cdigo desejado pelo usurio.
Estes valores no podem ser lidos durante a execuo normal do programa,
apenas durante a gravao/verificao do chip.
Apenas os 4 bits menos significativos so utilizados.
Bit 13
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
Exemplo: ID 3F18H = 0011 1111 0001 1000
Teremos :

2000H
2001H
2002H
2003H

xxxxxxxxxxxx0011
xxxxxxxxxxxx1111
xxxxxxxxxxxx0001
xxxxxxxxxxxx1000

17.1-Gravao dos valores desejados nas posies de ID.


O usurio no precisa se preocupar como estes bits so gravados na CPU, pois
os gravadores j providenciam um campo para escolha do ID, gravando-os
automaticamente ou no conforme desejo do usurio.

45

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

18-O SOFTWARE do PIC 16F84


O conjunto de instrues do PIC 16F84 formado por 35 instrues, todas
formadas por apenas uma palavra de 14 bits.
Nesta palavra esta o cdigo da funo a ser executada, alm dos parmetros
necessrios, como constantes, registros, bits.....
Neste captulo vamos apresentar o conjunto de instrues de forma resumida, no
seguinte formato:
INSTRUO
significado
Explicao:
Flags (bits) afetados:
Exemplo:
Podemos dividir o conjunto de instrues em trs tipos bsicos:
A) Operaes de byte com registros
B) Operaes de bit com registros
C) Operaes com constantes e de controle
As seguintes convenes sero utilizadas, pois so reconhecidas pelos
compiladores MPASM e MPASMWIN.
Campo
Descrio
f
registro entre 0 e 127 (0 7FH)
w ou W

registro W

bit utilizado pela operao (de 0 a 7)

constante ou label

destino do resultado
se d = 0, o resultado armazenado em W
se d = 1, o resultado armazenado no prprio registro indicado na
operao

d = 1 o padro quando no indicado


O formato do programa segue o seguinte padro:
label: operao (opcode) operando(s) ; comentrios
O campo label facultativo e indica posies particulares do programa.
O campo opcode sempre existe e indica qual a operao a ser realizada.
O campo operando existir se for necessrio instruo.
Aps o ponto e vrgula tudo ser ignorado pelo compilador.

18.1-Resumo do conjunto de instrues

46

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
Temos na figura 18.1 uma tabela resumida das instrues, e no item 18.3
iniciamos o estudo de cada instruo em particular.
OPERAES DE BYTE COM REGISTROS
INSTRUO

ADDWF
ANDWF
CLRF
CLRW
COMF
DECF
DECFSZ
INCF
INCFSZ
IORWF
MOVF
MOVWF
NOP
RLF
RRF
SUBWF
SWAPF
XORWF
BCF
BSF
BTFSC
BTFSS
ADDLW
ANDLW
CALL
CLRWDT
GOTO
IORLW
MOVLW
RETFIE
RETLW
RETURN
SLEEP
SUBLW
XORLW

OPERANDO

DESCRIO

f, d
f, d
f

CICLOS

Soma w e f
1
AND entre w e f
1
Zera f
1
Zera w
1
f, d
Complementa f
1
f, d
Decrementa f
1
f, d
Decrementa f, pula se f = 0
1(2)
f, d
Incrementa f
1
f, d
Incrementa f, pula se f = 0
1(2)
f, d
OR entre w e f
1
f, d
Move f
1
f
Move w para f
1
Nenhuma operao
1
f, d
Roda a esquerda pelo carry
1
f, d
Roda a direita pelo carry
1
f, d
Subtrai w de f
1
f, d
Troca nibles em f
1
f, d
XOR entre w e f
1
OPERAES DE BIT COM REGISTROS
f, b
Zera bit b em f
1
f, b
Seta bit b em f
1
f, b
Se bit b em f = 0, pula
1(2)
f, b
Se bit b em f = 1, pula
1(2) OPERANDO COM CONSTANTES DE CONROLE
K
Soma w e k
1
K
AND entre w e k
1
K
Chama sub-rotina
2
Zera o timer do WATCH DOG
1
K
Desvia para o label k
1
K
OR entre w e k
1
K
W=k
1
Retorna da interrupo
2
K
Retorna con w = k
2
Retorna da sub-rotina
2
Entra no modo SLEEP
1
K
Subtrai k de w
1
k
XOR entre w e k
1

BITS
AFETADOS

C,DC, Z
Z
Z
Z
Z
Z
Z
Z
Z
C
C
C, DC Z
Z
-

C, DC, Z
Z
TO\, PD\
Z
TO\, PD\
C, DC, Z
Z

Figura 18.1-Conjunto de instrues.


Sempre vale a pena recordar que cada instruo ser executada em apenas 1
ciclo de mquina (1 us a 4 MHz), exceto aquelas que alteram o PC, indicadas como 1(2)
ou 2 ciclos.
As instrues indicadas 1(2) levam 2 ciclos se o teste resultar verdadeiro.
Maiores detalhes sero apresentados nas instrues em particular.

47

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

18.2-Consideraes sobre as constantes


Para o compilador, as constantes tm o seguinte formato:
Constante decimal:
d valor ou D valor

exemplo: 20 decimal = d20 ou D20

Constante binria:
Bxxxxxxxx

exemplo:01010101 = B01010101

Constante hexadecimal:
0xvalor ou valorH

exemplo: 12 hexa = 0x12 ou 12H,


A0 hexa = 0A0H
Obs: a constante hexadecimal iniciada por letras (A-F) deve ser precedida de 0.
O compilador tem como padro valores hexadecimais, logo se no indicarmos o
tipo de constante o compilador assumir hexadecimal.
Exemplo:
movlw 20H
movlw 20
;para o compilador este 20 hexadecimal.
Em nossos exemplos redefiniremos as constantes para sistema decimal.

18.3-Conjunto de instrues detalhado e comentado


A partir de agora, vamos estudar cada instruo em particular, mostrando seu
funcionamento e fornecendo um exemplo.
Diferente da figura 18.1, onde colocamos as instrues por tipo, aqui as mesmas
sero classificadas em ordem alfabtica, para facilitar ao leitor consultar futuras.
Quando formos nos referir a um registro f nos exemplos, seu endereo ser
assim indicado:
Registro f no endereo 12H f (12H)
Existem instrues que permitem escolher se o resultado ser salvo em w ou no
prprio registro indicado na mesma (veja instruo COMF).
Outro ponto importante: instrues que movem valores na realidade apenas
movem uma copia do valor, permanecendo inalterado o registro original (veja a
instruo MOVWF).

Somar a constante k a w(w=w+k)


A constante k ser somada ao registro w e o valor resultante ser
escrito em w.(0 <= k <= 255)
Flags (bits) afetados C, DC, Z
exemplo
Temos w = 20H, a instruo
ADDLW 12H
Resultar em w = 32H
ADDLW k
Explicao

48

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
Somar o valor em w e o valor em f
O valor presente em w ser somado ao valor presente no registro
f
Se d = 1, o resultado ser salvo em w
Se d = 0, o resultado ser salvo em f
Flags (bits) afetados C, DC, Z
exemplo
Temos w = 10H e f = 12H,
a instruo ADDWF 12H, 0
;Resultar em w = 22H
a instruo ADDWF 12H
;Resultar em f (12H)=
22H

ADDWF f, d
Explicao

AND entre o valor em w e a constante k (w = w AND k)


Com o valor presente em w ser efetuada uma operao lgica
AND, bit a bit, com o valor em k. o resultado ser salvo em W.
Flags (bits) afetados Z
exemplo
Temos w = 55H,
a instruo ANDLW 33H,0 resultar em w = 11H
w = 55H = 01010101
& 33H = 00110011
00010001 = 11H
ANDLW k
Explicao

AND entre o valor em w e o valor em f (d = w AND f)


Com o valor presente em w ser efetuada uma operao lgica
AND, 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
Flags (bits) afetados Z
exemplo
Temos w = F5H e f (20H) = 12H
a instruo ANDWF 20H,0 resultar em w = 10H
a instruo ANDWF 20H resultar em f(20H) = 10H
w = F5H = 01010101
& f(20H) = 12H = 00110011
00010000 = 10H
ANDWF f, d
Explicao

Zera o bit b no registro f (bit clear f)


0 <= f <= 7
Explicao
O bit indicado por b ser zerado no registro f indicado
Flags (bits) afetados exemplo
Temos f(25H) = C9H = 11001001
A instruo BCF 25H, 3 resultar em
F(25H) = C1H = 11000001
BCF f, b

49

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
Seta o bit b no registro f (bit clear f)
0 <= f <= 7
Explicao
O bit indicado por b ser zerado no registro f indicado
Flags (bits) afetados exemplo
Temos f(25H) = C9H = 11001001
A instruo BCF 25H, 4 resultar em
F(25H) = C1H = 11010001

BSF f, b

Pula a instruo seguinte se o bit b no registro f for 0.


(bit test, skip if clear)
Explicao
O bit indicado por b no registro f ser verificado.
Se for 0 a prxima instruo ser ignorada
Se for 1 a prxima instruo ser executada normalmente
Flags (bits) afetados BTFSC f, b

IMPORTANTE: Esta configurao levar 2 ciclos de mquina se o bit for 0, pois a


instruo aps esta ser executada como NOP
exemplo

Temos f(10H) = 22H = 00100010


BTFSC 10H, 3
;testa o bit 3 (esta em 0)
GOTO SETADO
;se estivesse em 1 executaria este goto
BSF
10H, 3
;como esta em 0, executa esta instruo e
;escreve 1 em 10H, 3

Pula a instruo seguinte se o bit b no registro f for 1.


(bit test, skip if set)
Explicao
O bit indicado por b no registro f ser verificado.
Se for 1 a prxima instruo ser ignorada
Se for 0 a prxima instruo ser executada normalmente
Flags (bits) afetados BTFSS f, b

IMPORTANTE: Esta configurao levar 2 ciclos de mquina se o bit for 1, pois a


instruo aps esta ser executada como NOP

exemplo

Temos f(10H) = 55H = 01010101


BTFSC 22H, 4
;testa o bit 4 (esta em 1)
GOTO ZERADO
;se estivesse em 0 executaria este goto
BSF
10H, 3
;como esta em 1, executa esta instruo e
;escreve 0 em 22H, 4

50

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
Chamada de sub-rotina (sub rotina k)
O endereo PC+1 (prxima instruo) salvo no STACK.
Ento o programa desvia para o endereo k.
Flags (bits) afetados -

CALL k
Explicao

IMPORTANTE: Esta uma instruo de 2 ciclos de mquina

exemplo

No endereo 20H o programa chama a sub-rotina em 50H.


20H: CALL
50H
;o endereo 21H salvo no stack e o PC
; carregado com o endereo 50H
50H RETURN
;volta ao endereo 21H
21H MOVLW 10H ;Ao voltar continua a execuo
normalmente

CLRF f
Explicao
Flags (bits) afetados
exemplo

Zera o registro f
O registro f passar a ter o valor 0 e o flag de zero (Z) ser setado
Z
Temos f(25H) = 09H
A instruo CLRF 25H resultar em
F(25H) = 0

Zera o registro W
O registro W passar a ter o valor 0 e o flag de zero (Z) ser
setado
Flags (bits) afetados Z
exemplo
Temos W = 21H
A instruo CLRW resultar em
W=0
CLRW
Explicao

Reseta o WATCH DOG


O registro WATCH DOG ser zerado, assim como o registro do
prescaler (se este estiver direcionado para o WATCH DOG).
Flags (bits) afetados TO\, PD\
CLRWDT
Explicao

IMPORTANTE: 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 conseqentemente o reset do sistema.
exemplo

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

51

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
Os bits do registro f so complementados (invertidos)
Cada bit do registro f ser invertido. Se for 0 ficar 1 e vice-versa
Se d = 0, o resultado ser salvo em w
Se d = 1, o resultado ser salvo em f
Flags (bits) afetados Z
exemplo
Temos f(21H) = 5AH = 01011010
A instruo COMF 21H resultar em f(21H) = A5H = 10100101
A instruo COMF 21H,0 resultar em w = A5H = 10100101
Neste ultimo caso , o resultado foi armazenado em W, mas o
registro f permaneceu inalterado.

COMF f, d
Explicao

Diminui em 1 o valor armazenado em f


(decrement f)
Explicao
O valor em f ser diminudo em 1 unidade.
Se d = 0, o resultado ser salvo em w
Se d = 1, o resultado ser salvo em f
Flags (bits) afetados Z
exemplo
Temos f (1CH) = 24H
A instruo DECF 1CH resultar em f (1CH) = 23H
A instruo DECF 1CH,0 resultar em w = 23H
DECF f, d

Diminui em 1 o valor armazenado em f e se f = 0, pula a


prxima instruo.
(decrement f, skip if 0)
Explicao
O valor em f ser diminudo em 1 unidade.
Se f resultar = 0, a prxima instruo ser ignorada.
Se f > 0, executa a prxima instruo normalmente.
Se d = 0, o resultado ser salvo em w
Se d = 1, o resultado ser salvo em f
Flags (bits) afetados DECFSZ f, d

IMPORTANTE: Esta configurao levar 2 ciclos de mquina se f resultar = 0, pois a


instruo aps esta ser executada como NOP
exemplo

Temos f(0DH) = 01H


DCFSZ 0DH
;f(0DH) = F(0DH) 1
GOTO maior
;se f(0DH) > 0 executa o GOTO
GOTO zerado
;resultou em 0
Se usarmos DECFSZ 0DH,0 a operao ser w = f(0DH) 1,
mas a lgica de desvio ser a mesma.

52

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
Desvia para o endereo k
O programa desviado para o endereo indicado por k.
um desvio incondicional, isto , no depende de nenhum teste
Flags (bits) afetados exemplo
A seqncia executada pelo programa abaixo a indicada pelos
nmeros esquerda (10H, 11H, 35H, ...) repetindo-se sempre
10H: MOVLW
10H ; w = 10H
11H: GOTO
35H ; desvia para 35H
...
...
35H: CLRW
;W=0
36H: GOTO
10H ; desvia para 10H

GOTO k
Explicao

Aumenta em 1 o valor armazenado em f


(increment f)
Explicao
f = f +1
se d = 0, o resultado ser salvo em w
se d = 1, o resultado ser salvo em f
Flags (bits) afetados Z
exemplo
Temos f(1CH) = F0H
A instruo INCF 1CH resultar em f(1CH)=F1H
A instruo INCF 1CH,0 resultar em w = F1H
INCF f, d

Diminui em 1 o valor armazenado em f e se f = 0, pula a


prxima instruo.
(increment f, skip if 0)
Explicao
O valor em f ser aumentado em 1 unidade.
Se f resultar = 0, a prxima instruo ser ignorada.
Se f > 0, executa a prxima instruo normalmente.
Se d = 0, o resultado ser salvo em w
Se d = 1, o resultado ser salvo em f
Flags (bits) afetados INCFSZ f, d

IMPORTANTE: Esta configurao levar 2 ciclos de mquina se f resultar = 0, pois a


instruo aps esta ser executada como NOP
exemplo

Temos f(0DH) = FFH


INCFSZ 0DH
;f(0DH) = F(0DH) + 1
GOTO maior
;se f(0DH) > 0 executa o GOTO
GOTO zerado
;resultou em 0
Se usarmos INCFSZ 0DH,0 a operao ser w = f(0DH) + 1,
mas a lgica de desvio ser a mesma.

53

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
OR entre o valor de w e a constante k
(inclusive OR literal with W)
Explicao
Com o valor presente em w ser executada uma operao lgica
OR, bit a bit com a constante k
O resultado ser salvo em W
Flags (bits) afetados Z
exemplo
Temos W = 96H
A instruo IORLW 17H resultar em w = 97H
W = 96H = 10010110
OR 17H = 00010111
10010111

IORLW k

OR entre o valor de w e o valor em f


(inclusive OR W with f)
Explicao
Com o valor presente em w ser executada 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
Flags (bits) afetados Z
exemplo
Temos w = 5CH e f(20H) = C5H
A instruo IORWF 20H,0 resultar em w = DDH
A instruo IORWF 20H resultar em f(20H) = DDH
W = 5CH = 01011100
OR f(20H) = C5H = 11000101
-11011101
IORWF f, d

W = constante k
(move literal to W)
Explicao
O registro w ser carregado com a constante k
Flags (bits) afetados exemplo
Temos w = 11H
A instruo MOVLW 33H resultar em w = 33H
MOVLW k

Move f para d
O dado no registro f copiado para o destino d
Se d = 0, o resultado ser salvo em w
Se d = 1, o resultado ser salvo no prprio f
Flags (bits) afetados Z
MOVF f, d
Explicao

IMPOTANTE: reescrever no prprio registro (d = 1) serve para verificar o flag de zero


sem alterar o w existente
exemplo

Temos f(2FH) = 0H e flag Z = 0


A instruo MOVF 2FH resultar em f(2FH) = 0H, e o flag de
zero Z = 1. (apenas testamos o zero).
A instruo MOVF 2FH,0 resultar em w = 0H , e flag Z = 1

54

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
MOVWF
Explicao
Flags (bits) afetados
exemplo

Move w para f
O dado carregado em w copiado para o registro f
Temos w = 78H e f(29H) = 10H
A instruo MOVWF 29H resultar em f(29H) = 78H
W permanece inalterado

Nenhuma operao
Esta instruo no executa nenhuma operao na CPU, apenas
perde 1 ciclo de mquina.
Flags (bits) afetados exemplo
10H
MOVLW 34H
;W = 34H
11H
NOP
;perde 1 ciclo
12H
MOVF 12H,0
;W = f(12H)
NOP
Explicao

Carrega o registro OPTION


OPTION
Explicao
Esta instruo faz OPTION = W
Flags (bits) afetados NO UTILIZAR ESTA INSTRUO PARA MANTER
COMPATIBILIDADE COM VERSES FUTURAS
Esta implementada para permitir
compatibilidade co a famlia 16C5X
OPTION um registro enderevel

Retorne da interrupo
Esta instruo promove o fim da interrupo que est em
execuo. O endereo de retorno recuperado do stack e o bit
GIE setado
Flags (bits) afetados RETFIE
Explicao

IMPORTANTE: Esta uma instruo de 2 ciclos de mquina


exemplo

Stack (topo de um total de 8 nveis) = 37H


120H
121H
122H
37H

MOVLW 34H
; W = 34H
NOP
- ;perde 1 us a 4 MHz
RETFIE
;retorna da interrupo
GOTO
TESTE -;retorna ao endereo que estava no
- ;topo do Stack com GIE = 1

55

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
Retorne da sub-rotina com w = k
Esta instruo promove o fim da sub-rotina que esta em
execuo, alm de fazer w = constante k
O endereo de retorno recuperado do stack
Flags (bits) afetados -

RETLW k
Explicao

IMPORTANTE: Esta uma instruo de 2 ciclos de mquina


exemplo

Stack (topo de um total de 8 nveis) = 40H


100H
101H
40H

MOVLW 10H
; W = 10H
RETLW- -1
- - ;retorna mas com w = 1
ADDLW 1
--;faz w = 2

Retorne da sub-rotina
Esta instruo promove o fim da sub-rotina que esta em execuo
O endereo de retorno recuperado do stack
Flags (bits) afetados RETURN
Explicao

IMPORTANTE: Esta uma instruo de 2 ciclos de mquina


exemplo

Stack (topo de um total de 8 nveis) = 40H


100H
101H
40H

MOVLW 10H
; W = 10H
RETURN - - ;retorna
ADDLW 1
--;faz w = 11H

Rotaciona esquerda pelo carry


(rotate left f through carry)
Explicao
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 no prprio f
Flags (bits) afetados C
exemplo
f(25H) = 00110011 e C =1
aps
10H
RLF 25H,1
teremos f(25H) = 01100111 e C = 0
RLF f, d

56

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
Rotaciona direita pelo carry
(rotate right f through carry)
Explicao
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 no prprio f
Flags (bits) afetados C
exemplo
f(25H) = 00110011 e C =1
aps
10H
RRF 25H,1
teremos f(25H) = 10011001 e C = 0

RRF f, d

SLEEP
A CPU entra no modo SLEEP e o oscilador para , WATCH DOG
e prescaler so zerados.
TO\ = 1 e PD\ = 0
Flags (bits) afetados TO\ e PD\
exemplo
100H SLEEP
SLEEP
Explicao

Subtrai w da constante k
(subtract w from literal)
Explicao
O registro w subtrado da constante k
(complemento de 2). O resultado salvo em w
w = k w (0<= k <= 255)
Flags (bits) afetados C, DC, Z
exemplo
Temos w = 1H
A instruo SUBLW 2 resultar em w = 2 1 = 1 e C = 1
(positivo)
Temos w = 3H
A instruo SUBLW 2 resultar em w = 2 3 = -1 = FFH e C = 0
(negativo)
SUBLW k

Subtrai w do registro f
(subtract w from f)
Explicao
O registro w subtrado do registro f
(complemento de 2).
d = f w (0<= k <= 255)
Se d = 0, o resultado ser salvo em w
Se d = 1, o resultado ser salvo no prprio f
Flags (bits) afetados C, DC, Z
exemplo
Temos f(20H) = 0 e w = 1
A instruo SUBWF 20H,1 resultar em f(20H) =0 1= -1= FFH
e C = 0 (negativo).
Temos f(20)H=FFH e w = 0
A instruo SUBWF 20H,1 resultar em f(20H) =FFH 0 = FFH
E C = 1 (positivo).
Observe que d = 1, logo w no alterado.
SUBWF f, d

57

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
Troca nibles de f
O registro f tem seus bits 7 a 4 trocados pelos bits de 3 a 0
Se d = 0, o resultado ser salvo em w
Se d = 1, o resultado ser salvo no prprio f
Flags (bits) afetados exemplo
Temos f(11H) = 25H
A instruo SWAPF 11H, 0 resultar em f(11H)= 25H e w = 52H
25H = 0100101
52H = 1010010

SWAPF f, d
Explicao

Carrega o registro TRIS


TRIS
Explicao
Esta instruo faz TRIS = W
Flags (bits) afetados NO UTILIZAR ESTA INSTRUO PARA MANTER
COMPATIBILIDADE COM VERSES FUTURAS
Esta implementada para permitir
compatibilidade co a famlia 16C5X
TRIS um registro enderevel pelo programa

XOR entre w e f
(exclusive OR W with f)
Explicao
Com o valor presente em w ser efetuada uma operao lgica
XOR, bit a bit, com o valor f.
(bits iguais XOR = 0, bits diferentes XOR = 1)
se d = 0, o resultado ser salvo em w
se d = 1, o resultado ser salvo em f
Flags (bits) afetados Z
exemplo
Temos w = 52H e f(20H) = 52H
A instruo XORWF 20H,0 resultar em w = 0
A instruo XORWF 20H resultar em f(20H) = 0
w = 52H = 01010010
XOR f(20H)-= 52H = 01010010
00000000
XORWF f, d

58

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
XOR entre w e constante k
(exclusive OR literal with W)
Explicao
Com o valor presente em w ser efetuada uma operao lgica
XOR, bit a bit, com a constante k.
(bits iguais XOR = 0, bits diferentes XOR = 1)
o resultado ser salvo em w
Flags (bits) afetados Z
exemplo
Temos w = 10101101
A instruo XORLW 3AH,0 resultar em w = 97H
w = ADH = 10101101
XOR - 3AH = 00111010
10010111

XORLW k

59

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

19-Exemplos de hardware e software


Neste captulo veremos exemplos que buscam iniciar o leitor na programao e
no uso do PIC 16F84.
Vamos partir de exemplos bem simples, praticamente sem funo operacional
especifica, at chegarmos a exemplos mais complexos.
Para todos os programas apresentados vamos utilizar o circuito apresentado na
figura 19.1, que poder ser montada pelo leitor.
Todos os programas aqui apresentados fora compilados no MPASMWIN e vale
ressaltar que somente este programa citado neste curso.

Figura 19.1-circuito dos exemplos

19.1-Caractersticas do circuito bsico


-

PORTB ligado a 8 leds (acendem quando o nvel for 0).


4 teclas NA (normalmente aberto) ligadas aos pinos RA0 RA3 (vo a nvel 0
ao fechar).
Pino RA4 disponvel para I\O conforme desejo do leitor.
Clock de 4 MHz com cristal (se o leitor desejar pode montar o circuito da figura
10.1).
Reset por POR (ao ligar).

60

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

19.2-Programa bsico para testes


Em todos os programas usaremos o corpo bsico apresentado na figura 19.2, que
contm p mnimo de instrues e permite ao leitor ter uma viso geral de como escrever
seus programas.
;======================================================================
;
Programa padrao para testes
;
Registros da CPU com letras maiusculas
;======================================================================
list p=16F84
;para qual processador o codigo sera gerado
radix dec
;padrao DECIMAL para valores sem identificacao
include
<P16F84.INC>;anexa arquivo com definicoes do 16F84
;======================================================================
;Tabela de definies de RAM e constantes
X

equ

0CH

;define variavel auxiliar X na RAM 0CH


;(primeira posicao)
Y
equ
0DH
;
W
equ
0
;facilita a referencia a w quando necessario
;======================================================================
;memria de programa
org

goto

inicio

org

;define o trecho a seguir em 000

;desvia para o label "inicio" deixando o


; endereo 004 para a rotina de interrupcao
;======================================================================
;inicio da rotina de interrupo
;interrupo sempre inicia em 004
;cdigo da interrupo
retfie
;retorna da interrupo
;======================================================================
;inicio do programa logo aps o reset
inicio:
movlw B'00000000' ;W = ajuste para os bits do INTCON
movwf INTCON
;INTCON = W
bsf

STATUS,RP0

;seleciona banco 1 para OPTION e TRIS

movlw B'11011111' ;W = ajuste para os bits do OPTION


movwf OPTION_REG ;OPTION = W.Definiu-se o nome OPTION_REG
;para evitar conflito com a instrucao OPTION
movlw B'11111111' ;W = ajuste para os bits do TRISA
movwf TRISA
;TRISA = W; bits= 1 entrada;bits=0 saida
movwf B'00000000' ;W = ajuste para os bits do TRISB
movwf TRISB
;TRISB = W; bits= 1 entrada;bits=0 sada
bcf
STATUS,RP0 ;retorna ao banco 0 (padrao do Reset)
;======================================================================
principal:
;codigo do programa
END

;fim do programa fonte

Figura 19.2-Programa padro para exemplos do curso.

61

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

19.2.1-Consideraes sobre o programa padro


Devemos observar a obrigatoriedade de seguir o padro indicado no captulo 18.
Label: operao
Operando
;comentrios
0
1
2
Margem do texto
Onde: label est na tabulao 0(coluna 1)
Operao est na tabulao 1
Operando est na tabulao 2
Comentrios aps o ; em qualquer ponto
Os principais itens do programa so:
A) Comentrios
Sempre que possvel devemos incluir comentrios em nossos programas para
fcil estudo posterior ou a compreenso por parte de outros leitores.
No programa assembler o comentrio fica logo aps o ;. Tudo que esta aps
; ignorado pelo compilador.
B) list p=
Aps o sinal de = colocamos o nome do processador que ser utilizado, pois o
compilador genrico e necessita saber qual o cdigo binrio que vai gerar para cada
instruo. Por exemplo, para o 16F84 (famlia 16CXXX) o CLRWDT tem cdigo
0064H e para o 17C42 (17CXXX) o CLRWDT tem cdigo 0004H.
C) radix dec
Informamos para o compilador que nmeros sem indicao de base (item 18.2)
devero ser considerados DECIMAIS, e no hexadecimais conforme o padro.
D) include<XYZ>
Informamos ao compilador para anexar ao nosso fonte, durante o processo de
compilao, o arquivo XYZ (no nosso caso, P16F84.INC).
Como j vimos, o compilador genrico e no sabe o endereo e outras
definies de cada processador. No list informamos o processador e no arquivo XYZ
esto as definies dos registros internos, como por exemplo, informa que o registro
EEADR est no endereo 09H (no 16C65A o endereo 09H pertence ao PORTE).
E) abe EQU 123
Os EQUs servem para que possamos atribuir substituies.
No programa padro definimos duas variveis em RAM com os nomes X e Y.
muito mais fcil lembrar, durante a elaborao do programa, que o contador de
interrupes est em X do que ficar memorizando seu endereo, principalmente num
programa de muitas variveis.
Todos os registros da CPU definido no include nada mais so do que EQUs
para cada um deles.
F) org
O org permite ao usurio iniciar um trecho do programa em um endereo
especifico na memria de programa.

62

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
No exemplo temos org 0 para indicar o endereo do reset e o org 4 para indicar o
inicio da interrupo.
Se desejarmos que a instruo indicada pelo label inicio seja alocada na posio
100H, devemos usar
org
100H
inicio: CLRW

;esta instruo estar no endereo 100H

No caso da interrupo, ao invs de org 4 poderamos usar:


org
0
;reset
goto inicio ;endereo 000. Todas as instrues tm apenas uma palavra
nop
;endereo 001
nop
;endereo 002
nop
;endereo 003
goto interrupo ;endereo 004. Primeira interrupo da instruo
G) END
Sinaliza para o compilador o fim do arquivo fonte.

19.2.2-Desligar o WATCH DOG


IMPORTANTE:
Nos exemplos 1 a 6 o WATCH DOG no est sendo utilizado.
Ao gravar o chip o usurio deve lembrar-se de ajustar o WATCH DOG para
off, caso contrrio o chip resetar de tempos em tempos (com o ajuste do OPTION em
11011111 o reset ser a cada 2,304 s).

63

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

19.3-Exemplo 1- Rotina de tempo baseado nos ciclos de clock.


;=======================================================================================
;
Programa exemplo 1
;
Registros da CPU com letras maisculas
;
Objetivo:
estudar rotina de tempo baseada em software
;
Funcionamento
pisca Led7 a cada 250 ms
;=======================================================================================
list p=16F84
;para qual processador o codigo sera gerado
radix dec
;padro DECIMAL para valores sem identificao
include <P16F84.INC>
;anexa arquivo com definies do 16F84
;=======================================================================================
;Tabela de definies de RAM e constantes
Led7
tempo
X

equ
equ
equ

7
0CH
0DH

;led 7 est em RB7


;varivel tempo na RAM 0CH
;define variavel auxiliar X na RAM 0CH
;(primeira posio)
Y
equ
0EH
;
W
equ
0
;facilita a referencia a w quando necessrio
;=======================================================================================
;memria de programa
org
goto

0
inicio

org

;define o trecho a seguir em 000


;desvia para o label "inicio" deixando o
;endereo 004 para a rotina de interrupo
;=======================================================================================
;inicio da rotina de interrupo

nop

;interrupo sempre inicia em 004


;cdigo da interrupo

retfie
;retorna da interrupo
;=======================================================================================
;inicio do programa logo aps o reset
inicio:
movlw
movwf

B'00000000'
INTCON

;W = ajuste para os bits do intcon


;INTCON = W

bsf

STATUS,RP0

;seleciona banco 1 para OPTION e TRIS

movlw
movwf

B'11011111'
OPTION_REG

;W = ajuste para os bits do OPTION


;OPTION = W.Definiu-se o nome OPTION_REG
;para evitar conflito com a istruo OPTION

movlw
movwf

B'11111111'
TRISA

;W=ajuste para od bits do TRISA


;TRISA = W; bits= 1 entrada;bits=0 saida

movwf
movwf

B'00000000'
TRISB

;W = ajuste para os bits do TRISB


;TRISB = W; bits= 1 entrada;bits=0 sada

bcf
STATUS,RP0
;retorna ao banco 0 (padrao do Reset)
;=======================================================================================
principal:
bcf
call
bsf
call

PORTB,Led7
ms250
PORTB,Led7
ms250

;fazendo PORTB pino 7=0 acende o led 7


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

goto
principal
;=======================================================================================
;rotina de tempo de 250 ms
ms250:
movlw
movwf

250
tempo

;o call para a rotina leva 2 us


;+1
;+1
total1= 4 us

movlw
movwf

248
X

;+1
;+1

total2=2 us

nop
decfsz X

;1
;1

248 x4us +(1us nop+2us quando decfsz da 0

goto
ms250b
decfsz tempo

;2
;1

da um tempo total3 = 995 us


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

goto

;2
250 x(total2+total3+total4)+2 us
;
quando tempo=0=total5=250.002 us
;delay =total1+total5+2us do return = 250008 us

ms250a:

ms250b:

return

ms250a

64

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
END

;fim do programa

Sobre a rotina de tempo:


4 + 250 * (2 + 248*4 + 1 + 2 + 1 + 2) + 2 + 2 = 250.008 us
O leitor deve estudar atentamente como cada instruo funciona e o tempo
decorrido de cada uma para entender a rotina de tempo.
Nem sempre tempos exatos podem ser conseguidos.

65

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

19.4-Exemplo 2- Instrues de deslocamento


;=======================================================================================
;
Programa exemplo 2
;
Objetivo:
estudar instrues de deslocamento
;
Funcionamento
pisca os leds 7 a 0 nesta ordem e repete
;
OS LEDS ACENDEM EM 0. ver figura 19.1
;
;=======================================================================================
list p=16F84
;para qual processador o codigo sera gerado
radix dec
;padro DECIMAL para valores sem identificao
include <P16F84.INC>
;anexa arquivo com definies do 16F84
;=======================================================================================
;Tabela de definies de RAM e constantes
tempo
dt1

equ
equ

0CH
0DH

;varivel tempo na RAM 0CH


;define variavel auxiliar dt1 na RAM 0CH
;(primeira posio)
X
equ
0EH
;define variavel auxiliar X na RAM 0DH
Y
equ
0FH
;define variavel auxiliar Y na RAM 0EH
W
equ
0
;facilita a referencia a w quando necessrio
;=======================================================================================
;memria de programa
org
goto

0
inicio

org

;define o trecho a seguir em 000


;desvia para o label "inicio" deixando o endereo
;004 para a rotina de interrupo
;=======================================================================================
;inicio da rotina de interrupo

nop

;interrupo sempre inicia em 004


;cdigo da interrupo

retfie
;retorna da interrupo
;=======================================================================================
;inicio do programa logo aps o reset
inicio:
movlw
movwf
clrf
clrf

B'00000000'
INTCON
PORTA
PORTB

;W = ajuste para os bits do intcon


;INTCON = W
;inicializa PORTA e PORTB,ver itens 7.1.4 e7.2.7

bsf

STATUS,RP0

;seleciona banco 1 para OPTION e TRIS

movlw
movwf

B'11011111'
OPTION_REG

;W = ajuste para os bits do OPTION


;OPTION = W.Definiu-se o nome OPTION_REG
;para evitar conflito com a istruo OPTION

movlw
movwf

B'11111111'
TRISA

;W=ajuste para od bits do TRISA


;TRISA = W; bits= 1 entrada;bits=0 saida

movwf
movwf

B'00000000'
TRISB

;W = ajuste para os bits do TRISB


;TRISB = W; bits= 1 entrada;bits=0 sada

bcf
STATUS,RP0
;retorna ao banco 0 (padrao do Reset)
;=======================================================================================
principal:
movlw 255
;W=11111111
movwf X
;x=w=11111111
bcf
STATUS,C
;bit carry=0
repete:
rrf

btfss
goto

STATUS,C
principal

movf

X,W

escreve:
movwf
call
goto

;desloca o valor em X para a direita


;o bit 0 vai ao carry e o carry vai ao bit 7
;se C=1 pula a prxima instruo
;quando carry=0 acabou de deslocar 8 vezes
;W=valor em X que est escrito no PORTB
;ver instruo MOVF f,d

PORTB
ms250
repete

;PORTB=W=X
;espera 250 ms
;se carry=1
ainda no deslocou 8 vezes
;efetua novo deslocamento
;=======================================================================================
;rotina de tempo de 250 ms
ms250:
movlw
movwf

250
tempo

;o call para a rotina leva 2 us


;+1
;+1
total1= 4 us

ms250a:

66

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
movlw
movwf

248
dt1

;+1
;+1

total2=2 us

nop
decfsz dt1

;1
;1

248 x4 us + (1us nop + 2 us quando decfsz da 0

goto
ms250b
decfsz tempo

;2
;1

da um tempo total3 = 995 us


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

goto
return

;2
250 x(total2+total3+total4)+2 us
;
quando tempo=0=total5=250.002 us
;delay=total 1+total5+2 us do return = 250008 us

END

;fim do programa

ms250b:

ms250a

67

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

19.5-Exemplo 3-Leitura de teclas


;=======================================================================================
;
Programa exemplo 3
;
Objetivo:
estudar varredura de teclas
;
Funcionamento
tecla S0 solta: pisca leds 7 a 0 nesta ordem
;
tecla S0 pressionada: pisca de 0 a 7
;=======================================================================================
list p=16F84
;para qual processador o codigo sera gerado
radix dec
;padro DECIMAL para valores sem identificao
include <P16F84.INC>
;anexa arquivo com definies do 16F84
;=======================================================================================
;Tabela de definies de RAM e constantes
tempo
dt1

equ
equ

0CH
0DH

;varivel tempo na RAM 0CH


;define variavel auxiliar dt1 na RAM 0CH
;(primeira posio)
X
equ
0EH
;define variavel auxiliar X na RAM 0DH
Y
equ
0FH
;define variavel auxiliar Y na RAM 0EH
W
equ
0
;facilita a referencia a w quando necessrio
S0
equ
0
;S0 est ligada ao RA0(PORTA bit 0)
;=======================================================================================
;memria de programa
org
goto

0
inicio

org

;define o trecho a seguir em 000


;desvia para o label "inicio" deixando o endereo
;004 para a rotina de interrupo
;=======================================================================================
;inicio da rotina de interrupo

nop

;interrupo sempre inicia em 004


;cdigo da interrupo

retfie
;retorna da interrupo
;=======================================================================================
;inicio do programa logo aps o reset
inicio:
movlw
movwf
clrf
clrf

B'00000000'
INTCON
PORTA
PORTB

;W = ajuste para os bits do intcon


;INTCON = W
;inicializa PORTA e PORTB,ver itens 7.1.4 e7.2.7

bsf

STATUS,RP0

;seleciona banco 1 para OPTION e TRIS

movlw
movwf

B'11011111'
OPTION_REG

;W = ajuste para os bits do OPTION


;OPTION = W.Definiu-se o nome OPTION_REG
;para evitar conflito com a istruo OPTION

movlw
movwf

B'11111111'
TRISA

;W=ajuste para od bits do TRISA


;TRISA = W; bits= 1 entrada;bits=0 saida

movwf
movwf

B'00000000'
TRISB

;W = ajuste para os bits do TRISB


;TRISB = W; bits= 1 entrada;bits=0 sada

bcf
STATUS,RP0
;retorna ao banco 0 (padrao do Reset)
;=======================================================================================
principal:
movlw 255
;W=11111111
movwf X
;x=w=11111111
bcf
STATUS,C
;bit carry=0
repete:
btfss
rlf

PORTA,S0
X

btfsc
rrf
btfss
goto

PORTA,S0
X
STATUS,C
principal

movf

X,W

escreve:
movwf
call
goto

;Tecla S0 est em RA0. Se for 1 pula prxima instruo


;desloca o valor em X para a direita
;S0=0 desloca o valor em X para a esquerda
;o bit 0 vai ao carry e o carry vai ao bit 7
;se S0=1 este teste serve como um nop
;se est em 0, j fez o rlf ento pula
;se C=1 pula a prxima instruo
;quando carry=0 acabou de deslocar 8 vezes
;W=valor em X que est escrito no PORTB
;ver instruo MOVF f,d

;PORTB=W=X
;espera 250 ms
;se carry=1
ainda no deslocou 8 vezes
;efetua novo deslocamento
;=======================================================================================
;rotina de tempo de 250 ms
ms250:

PORTB
ms250
repete

;o call para a rotina leva 2 us

68

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
movlw
movwf

250
tempo

;+1
;+1

total1= 4 us

movlw
movwf

248
dt1

;+1
;+1

total2=2 us

nop
decfsz dt1

;1
;1

248 x4 us + (1us nop + 2 us quando decfsz da 0

goto
ms250b
decfsz tempo

;2
;1

da um tempo total3 = 995 us


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

goto
return

;2
;
;

250 x(total2+total3+total4)+2 us
quando tempo=0=total5=250.002 us
delay=total 1+total5+2 us do return = 250008 us

END

fim do programa

ms250a:

ms250b:

ms250a

69

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

19.6-Exemplo 4-incrementa/decrementa valores em RAM.


;=======================================================================================
;
Programa exemplo 4
;
Objetivo:
incrementar/decrementar posuo de memria pelas teclas
;
S0 e S1
;
Funcionamento
posio valor varia entre 0 e 63
;
inicia o valor em 32=00100000
;
S0valor=valor 1,se valor >0
;
S1valor=valor +1, se valor <63
;=======================================================================================
list p=16F84
;para qual processador o codigo sera gerado
radix dec
;padro DECIMAL para valores sem identificao
include <P16F84.INC>
;anexa arquivo com definies do 16F84
;=======================================================================================
;Tabela de definies de RAM e constantes
tempo
dt1

equ
equ

0CH
0DH

;varivel tempo na RAM 0CH


;define variavel auxiliar dt1 na RAM 0CH
;(primeira posio)
;define variavel auxiliar X na RAM 0DH
;define variavel auxiliar Y na RAM 0EH

X
equ
0EH
Y
equ
0FH
Valor equ
10H
W
equ
0
;facilita a referencia a w quando necessrio
S0
equ
0
;S0 est ligada ao RA0(PORTA bit 0)
S1
que
1
;S1 esta ligada a0 RA1(PORTA bit 1)
;=======================================================================================
;memria de programa
org
goto

0
inicio

;define o trecho a seguir em 000


;desvia para o label "inicio" deixando o endereo
;004 para a rotina de interrupo
;=======================================================================================
;inicio da rotina de interrupo
org

nop

;interrupo sempre inicia em 004


;cdigo da interrupo

retfie
;retorna da interrupo
;=======================================================================================
;inicio do programa logo aps o reset
inicio:
movlw
movwf
clrf
clrf

B'00000000'
INTCON
PORTA
PORTB

;W = ajuste para os bits do intcon


;INTCON = W
;inicializa PORTA e PORTB,ver itens 7.1.4 e7.2.7

bsf

STATUS,RP0

;seleciona banco 1 para OPTION e TRIS

movlw
movwf

B'11011111'
OPTION_REG

;W = ajuste para os bits do OPTION


;OPTION = W.Definiu-se o nome OPTION_REG
;para evitar conflito com a istruo OPTION

movlw
movwf

B'11111111'
TRISA

;W=ajuste para os bits do TRISA


;TRISA = W; bits= 1 entrada;bits=0 saida

movwf
movwf

B'00000000'
TRISB

;W = ajuste para os bits do TRISB


;TRISB = W; bits= 1 entrada;bits=0 sada

bcf
STATUS,RP0
;retorna ao banco 0 (padrao do Reset)
;=======================================================================================
principal:
;inicio do programa principal
movlw 32
;W=00100000
movwf valor
;valor=32
comf
valor,W
;complementa os bits em valor e salva em W
movwf PORTB
;escreve W nos leds
vetec:
btfss
goto

PORTA,S0
S0fech

;se PORTA,0=1(S0 aberta)pula


;se PORTA,0=0(S0 fechada)desvia

btfsc
goto

PORTA,S1
vetec

;se aberta, testa S1. Se PORTA,1=0(S1 fechado) pula


;S1 tambm aberta, repeta a espera de teclas

Incf
btfss
goto
decf

valor
valor,6
S1ok
valor

;chegou aqui porque S1 est fechada


;valor=valor+1
;se valor,bit 6=1 passou de 63
;aceitou S1
;no aceitou, volta

S0Ab:

S1fech:

S1ok:

70

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
Comf
movwf
call
goto

valor,W
PORTB
ms250
vetec

;complementa os bits em valor mas salva em W


;escreve nos leds
;250 ms entre repetio de teclas
;volta para ver teclas novamente

decf
btfss
goto
incf

valor
valor,7
S0ok
valor

;chegou aqui porque S0 est fechada


;valor=valor-1
;se valor,bit7=1,de 0 foi para 255
;valo >=0
;volta ao normal

S0fech:

S0ok:
comf
valor,W
;complementa os bits em valor mas salva em W
movwf PORTB
;escreve nos leds
call
ms250
;250 ms entre repetio de teclas
goto
vetec
;volta para ver teclas
;=======================================================================================
;rotina de tempo de 250 ms
ms250:
movlw
movwf

250
tempo

;o call para a rotina leva 2 us


;+1
;+1
total1= 4 us

movlw
movwf

248
dt1

;+1
;+1

total2=2 us

nop
decfsz dt1

;1
;1

248 x4 us + (1us nop + 2 us quando decfsz da 0

goto
ms250b
decfsz tempo

;2
;1

da um tempo total3 = 995 us


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

goto
return

;2
;
;

250 x(total2+total3+total4)+2 us
quando tempo=0=total5=250.002 us
delay=total 1+total5+2 us do return = 250008 us

END

fim do programa

ms250a:

ms250b:

ms250a

71

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

19.7-Exemplo 5-Leitura e escrita na EEPROM


;=======================================================================================
;
Programa exemplo 5
;
Objetivo:
testar leitura e escrita na EEPROM
;
Funcionamento
posio valor varia entre 0 e 63
;
inicia o valor em 32=00100000
;
S0valor=valor 1,se valor >0
;
S1valor=valor +1, se valor <63
;
S2se pressionado, salva valor+128 no endereo valor
;
S3enquanto estiver pressionado, l o dado do endereo
;
valor e escreve nos leds.
;=======================================================================================
list p=16F84
;para qual processador o codigo sera gerado
radix dec
;padro DECIMAL para valores sem identificao
include <P16F84.INC>
;anexa arquivo com definies do 16F84
;=======================================================================================
;Tabela de definies de RAM e constantes
tempo
dt1

equ
equ

0CH
0DH

;varivel tempo na RAM 0CH


;define variavel auxiliar dt1 na RAM 0CH
;(primeira posio)
;define variavel auxiliar X na RAM 0DH
;define variavel auxiliar Y na RAM 0EH

X
equ
0EH
Y
equ
0FH
Valor equ
10H
lido
equ
11H
;endereo do dado lido da EEPROM
gravado equ
12H
;endereo do dado gravado na EEPROM
W
equ
0
;facilita a referencia a w quando necessrio
S0
equ
0
;S0 est ligada ao RA0(PORTA bit 0)
S1
equ
1
;S1 esta ligada a0 RA1(PORTA bit 1)
S2
equ
2
;S2 esta ligada a0 RA2(PORTA bit 2)
S3
equ
3
;S3 esta ligada a0 RA3(PORTA bit 3)
;=======================================================================================
;inicio do programa
org
0
;define o inicio do trecho a seguir em 000
inicio:
movlw B'00000000'
;W = ajuste para os bits do intcon
movwf INTCON
;INTCON = W
clrf
PORTA
;inicializa PORTA e PORTB,ver itens 7.1.4 e7.2.7
clrf
PORTB
bsf

STATUS,RP0

;seleciona banco 1 para OPTION e TRIS

movlw
movwf

B'11011111'
OPTION_REG

;W = ajuste para os bits do OPTION


;OPTION = W.Definiu-se o nome OPTION_REG
;para evitar conflito com a istruo OPTION

movlw
movwf

B'11111111'
TRISA

;W=ajuste para os bits do TRISA


;TRISA = W; bits= 1 entrada;bits=0 saida

movwf
movwf

B'00000000'
TRISB

;W = ajuste para os bits do TRISB


;TRISB = W; bits= 1 entrada;bits=0 sada

bcf
STATUS,RP0
;retorna ao banco 0 (padrao do Reset)
;=======================================================================================
principal:
;inicio do programa principal
movlw 32
;W=00100000
movwf valor
;valor=32
comf
valor,W
;complementa os bits em valor e salva em W
movwf PORTB
;escreve W nos leds
vetec:
btfss
goto

PORTA,S0
S0fech

;se PORTA,0=1(S0 aberta)pula


;se PORTA,0=0(S0 fechada)desvia

btfsc
goto

PORTA,S1
veS2S3

;se aberta, testa S1. Se PORTA,1=0(S1 fechado) pula


;S1 tambm aberta, repeta a espera de teclas

Incf
btfss
goto
decf

valor
valor,6
S1ok
valor

;chegou aqui porque S1 est fechada


;valor=valor+1
;se valor,bit 6=1 passou de 63
;aceitou S1
;no aceitou, volta

Comf
movwf
call
goto

valor,W
PORTB
ms250
vetec

;complementa os bits em valor mas salva em W


;escreve nos leds
;250 ms entre repetio de teclas
;volta para ver teclas novamente

decf
btfss

valor
valor,7

;chegou aqui porque S0 est fechada


;valor=valor-1
;se valor,bit7=1,de 0 foi para 255

S0Ab:

S1fech:

S1ok:

S0fech:

72

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
goto
incf

S0ok
valor

;valo >=0
;volta ao normal

comf
movwf
call
goto

valor,W
PORTB
ms250
vetec

;complementa os bits em valor mas salva em W


;escreve nos leds
;250 ms entre repetio de teclas
;volta para ver teclas

btfss
goto
btfss
goto

PORTA,S2
salvar
PORTA,S3
ler

;v se salva ou l na EEPROM
;v se S2(salvar) est solta(s2=1)
;no est, vai salvar
;v se S3(ler) est solta(S3=1)
;no est, vai ler o dado

bcf
movf
movwf
iorl
movwf
bsf
bsf
movlw
movwf
movlw

STATUS,RP0
valor,W
EEADR
80H
EEDATA
STATUS,RP0
EECON1,WREN
55H
EECON2
0AAH

movwf
bsf

EECON2
EECON1,WR

;
;W=valor
;endereo=W=Valor
;W=W OR 80H=(seta bit 7)
;dado=valor com bit 7=1
;vai para o banco 1
;habilita a escrita,interrupo j desabilitada
;W=55H=1010101
;move o valor de W para registro EECON2
;W=0AAH=10101010.Obs- valores hexadecimais comeados com
;letras devem ter um 0 na frente
;EECON2 = W
;inicia o processo de escrita

EECON1,EEIF
espera2
EECON1,WREN
EECON1,EEIF
STATUS,RP0
vetec

;v se finalizou a escrita
;se EEIF = 0, ento ainda no terminou a escrita
;desabilita a escrita na EEPROM
;zera EECON1,EEIF
;volta para o banco 0
;

STATUS,RP0
valor,W
EEADR
STATUS,RP0
EECON1,RD
STATUS,RP0
EEDATA,W
lido
lido,W
PORTB

;vai para banco 0


;valor=W
;EEADR= W = endereo
;volta ao banco 1
;realiza leitura(salva em EEDATA)
;volta ao banco 0
;move valor de EEDATA para W
;move o valor de W para a varivel lido(11H)
;complementa(inverte) o valor armazenado em lido(11H)
;escreve nos leds o dado lido da EEPROM

S0ok:

veS2S3:

salvar:

espera2:
btfss
goto
bcf
bcf
bcf
goto
ler:
bcf
movf
movwf
bsf
bsf
bcf
movf
movwf
comf
movwf

espera1:
call
ms250
;aguarda 250 ms
btfss PORTA,3
;v se S3 esta fechada
goto
espera1
;est ento repete leitura
comf
valor
;W=valor complementado
movwf PORTB
;escreve valor nos leds
;=======================================================================================
;rotina de tempo de 250 ms
ms250:
movlw
movwf

250
tempo

;o call para a rotina leva 2 us


;+1
;+1
total1= 4 us

movlw
movwf

248
dt1

;+1
;+1

total2=2 us

nop
decfsz dt1

;1
;1

248 x4 us + (1us nop + 2 us quando decfsz da 0

goto
ms250b
decfsz tempo

;2
;1

da um tempo total3 = 995 us


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

goto
return

;2
;
;

250 x(total2+total3+total4)+2 us
quando tempo=0=total5=250.002 us
delay=total 1+total5+2 us do return = 250008 us

END

fim do programa

ms250a:

ms250b:

ms250a

73

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

19.7.1-Comentrios sobre o programa


Ao resetar, os leds indicam o endereo 32(00100000).
Pressionando S0, diminumos o endereo at chegar a 0.
Pressionando S1, aumentamos o endereo at o limite (a EEPROM tem apenas
64 bytes, de 0 a 63).
Ao pressionar S2, gravamos no endereo indicado binariamente nos leds o dado
endereo OR 128 (setamos o bit 7).
Exemplo: se o endereo for 10H(16 decimal=00010000) o dado gravado ser
90H (144 decimal=10010000).
Com os leds indicando o endereo 10H(00010000) se pressionarmos S4 os
mesmos mostraro o valor 90H(10010000) que estava na EEPROM.
Faa um teste: aps gravar alguns endereos, desligue e ligue a alimentao e
ento leia os endereos anteriormente gravados e verifique se esto corretos.
IMPORTANTE: quando gravamos um programa novo no PIC 16F84 os dados
j gravados na EEPROM de dados no so alterados.

74

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

19.8-Exemplo 6-Interrupo do TIMER 0 gerando onda quadrada com


T=200 us (interrupo a cada 100 us).
;=======================================================================================
;
Programa exemplo 6
;
Objetivo:
estudar interrupes
;
Funcionamento
complementa o PORTB a cada 100 us
;
PORTB comea = 01010101. a cada interrupo temos
PORTB=01010101 e depois 10101010 repetidamente.
;=======================================================================================
list p=16F84
;para qual processador o codigo sera gerado
radix dec
;padro DECIMAL para valores sem identificao
include <P16F84.INC>
;anexa arquivo com definies do 16F84
;=======================================================================================
;Tabela de definies de RAM e constantes
W
equ
0
;
saida equ
7
;sada de onda quadrada em RB7(led 7)
tempo equ
0CH
;
X
equ
0DH
;
Y
equ
0EH
;
W2
que
0FH
;espelho do W original
;=======================================================================================
;memria do programa
org

;define

goto

inicio

o inicio do trecho a seguir em 000

;
como o prprio programa uma interrupo, detenha-se na compreenso da mesma.
;=======================================================================================
;rotina de interrupo
org
movwf
comf
movf

4
W2
X
X,W

;
;salvo o W atual pois usarei o mesmo
;inverte X
;W=X

movwf
movlw
movwf

PORTB
165
TMR0

;PORTB recebe os bits complementados


;W = valor a carregar no TMR0
;TIMER 0 conta do valor ajustado at o overflow
;como quero um overflow de 100 us, deveria ajustar inicio
;em 256-100=156, mas devido ao atraso de 2 ciclos ao
;recarregar
o
TMR0,
o
atraso
do
atendimento
da
interrupo e o tempo das instrues, usamos o valor 165.
;reabilito interrupo TIMER 0 antes de voltar
;recupero o valor de W
;retorna da interrupo

altera:

bcf
INTCON,TOIF
movf
W2,W
retfie

;=======================================================================================
inicio:
movlw B'00000000'
;W = ajuste para os bits do intcon
movwf INTCON
;INTCON = W
bsf

STATUS,RP0

;seleciona banco 1 para OPTION e TRIS

movlw
movwf

B'11011111'
OPTION_REG

;W = ajuste para os bits do OPTION


;OPTION = W.Definiu-se o nome OPTION_REG
;para evitar conflito com a istruo OPTION

movlw
movwf

B'11111111'
TRISA

;W=ajuste para os bits do TRISA


;TRISA = W; bits= 1 entrada;bits=0 saida

movwf
movwf

B'00000000'
TRISB

;W = ajuste para os bits do TRISB


;TRISB = W; bits= 1 entrada;bits=0 sada

bcf
STATUS,RP0
;retorna ao banco 0 (padrao do Reset)
;=======================================================================================
principal:
movlw 55H
;W=01010101
movwf X
;
movwf PORTB
;PORTB inicializa com 01010101
movlw 165
;primeira carga do registro TMR0
movwf TMR0
;
bcf
INTCON,TOIF
;retiro eventual pedido pendente
bsf
INTCON,TOIE
;habilita a interrupo do TMR0
;=======================================================================================
;loop infinito, nada faz at que a prxima interrupo seja atendida
loop:
goto
END

loop

;fica aqui indefinidamente


;fim do programa

75

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

19.9-Exemplo 7-Funcionamento do WATCH DOG

;=======================================================================================
;
Programa exemplo 7
;
Objetivo:
estudar o watch dog
;
Funcionamento
se ficar mais de 2 segundos sem pressionar S0 o chip ser
;
resetado
;=======================================================================================
list p=16F84
;para qual processador o codigo sera gerado
radix dec
;padro DECIMAL para valores sem identificao
include <P16F84.INC>
;anexa arquivo com definies do 16F84
;=======================================================================================
;Tabela de definies de RAM e constantes
W
equ
0
;
Led7
equ
7
;
S0
equ
0
;
tempo equ
0CH
;
X
equ
0DH
;
Y
equ
0EH
;
;=======================================================================================
;memria do programa
org

;define

o inicio do trecho a seguir em 000

movlw
movwf

B'00000000'
INTCON

;W = ajuste para os bits do intcon


;INTCON = W

bsf

STATUS,RP0

;seleciona banco 1 para OPTION e TRIS

movlw
movwf

B'11011111'
OPTION_REG

;W = ajuste para os bits do OPTION


;OPTION = W.Definiu-se o nome OPTION_REG
;para evitar conflito com a istruo OPTION

movlw
movwf

B'11111111'
TRISA

;W=ajuste para os bits do TRISA


;TRISA = W; bits= 1 entrada;bits=0 saida

movwf
movwf

B'00000000'
TRISB

;W = ajuste para os bits do TRISB


;TRISB = W; bits= 1 entrada;bits=0 sada

inicio:

bcf
STATUS,RP0
;retorna ao banco 0 (padrao do Reset)
;=======================================================================================
principal:
clrw
;
movwf PORTB
;
movlw 10
;
movwf Y
;
seg1:
call
decfsz
goto
movlw
movwf

ms100
Y
seg1
255
PORTB

;
;
;
;
;

bcf
call
bsf
call

PORTB,Led7
ms100
PORTB.Led7
ms100

;
;
;
;

repete:

btfss PORTA,S0
;
clrwdt
;
goto
repete
;
;=======================================================================================
;rotina de tempo de 100 ms
ms100:
movlw
movwf

100
tempo

;apenas troquei 250 por 100


;
;

movlw
movwf

248
X

;
;

ms100a:

ms100b:
nop
decfsz X

;
;

goto
ms100b
decfsz tempo

;
;

goto

;
;
;
;

return
END

ms100a

fim do programa

76

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

20-A placa de gravao


A Microchip uma empresa que apostou em uma linha diversificada de chips
microcontroladores, de 8 a 40 pinos, de 6 a 33 entradas e sadas digitais e analgicas. As
capacidades de memria ROM vo de 512 bytes a 8 Kbytes e RAM de 56 a 376 bytes,
alm da memria Flash. Este captulo pretende abordar um programador universal de
PICS de 8, 18, 28 e 40 pinos, de baixo custo, ligado ao PC pela porta paralela. O
software de controle padro Windows. O protocolo de gravao o da MicrochipICSP (In Circuit Serial Programing) - aberto , e foi extrado das notas de aplicao
DS30189 e AN589. Na internet existem dezenas de circuitos compatveis com este,
alm de softwares de programao. No grava os chips 16C5X e 17C4X. de protocolo
diferente. Estes artigos tcnicos podem ser baixados no site do fabricante:
www.microchip.com

20.1-Modo programao
Para colocar o PIC em modo programao , necessrio manter em baixo nvel
os pinos RB6 e RB7(clock e dados) enquanto se produz um flanco ascendente de baixo
a Vpp (0V a 13,4V- tenso mnima para gravao) do pino MCLR (S1). Uma vez neste
estado, pode-se acessar a memria de programa, RB6 utilizado como entrada de clock
(sincronismo, relgio), RB7 utilizado para entrada de bits de comando e para entrada e
sada de bits de dados durante a operao srie.

20.2-Arquivo Hexadecimal
O arquivo com extenso .hex contm o programa compilado pelo software
MPASM do fabricante Microchip (ou qualquer outro software compilador). O arquivo
lido pelo programador e transferido ao PIC. O formato do arquivo Intel INHX8M,
padro mais utilizado. Uma outra alternativa interessante empregar compiladores na
linguagem C, gerando com o compilador C um arquivo .hex a ser gravado no PIC. No
curso no ser abordado este tipo de compilao.

20.3- Hardware do gravador universal de PICs pela porta paralela


O hardware composto por trs mdulos: fonte, lgica e soquetes.
Fonte: A alimentao do PIC padro de 5 volts. Para a gravao dos chips o
fabricante define a tenso superior a 13,4 volts para Vpp (tenso de programao). A
tenso de entrada no regulada de no mnimo 15 volts. Os diodos em srie aumentam
a tenso de sada.
Lgica e Sinalizao: atravs de portas lgicas buffers TTL, os sinais que saem
da porta paralela do PC so isolados e adequados para controle dos pinos data, clock e
Vpp. A sinalizao feita pelos leds que indicam os estados do circuito.
Soquetes: Como o gravador universal e permite leitura e gravao de dezenas
de PICs de 8, 18, 28 e 40 pinos, o circuito possui quatro soquetes na placa.

77

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

78

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
LADO COMPONENTES

LADO COBREADO

79

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

20.4- Uso da placa de gravao com os exemplos da apostila


Todos os exemplos fornecidos, bem como exemplos que sero dados para o
16C711 e o 12C508, funcionam na placa de gravao.
Basta gravar os chips e coloca-los no circuito teste, testando as funes
programadas.

80

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

21-O PIC 16C711 (com conversores A/D)


21.1-Introduo
O PIC 16C711 um microcontrolador que pode operar de DC at 20 MHz (ciclo
de instruo de 200 ns) e assim como o PIC 16F84 funciona com um mnimo de
componentes externos.
Diferente do PIC 16F84 que possui EEPROM de dados, o PIC 16C711 tem
como perifrico especial um conversor A/D de 8 bits com 4 canais multiplexados.
IMPORTANTE:
O PIC 17C711 NO POSSUI MEMRIA DE PROGRAMA EEPROM, SEDO
DISPONVEL PARA DESENVOLVIMENTO UMA VERSO COM JANELA,
APAGVEL COM LUZ ULTRAVIOLETA. A MICROCHIP NO RECOMENDA A
PROTEO DE CDIGO DE DISPOSITIVOS COM JANELA.

Suas principais caractersticas so:


1K (1024) palavras de 14 bits.
68 bytes de RAM para uso geral
Stack com 8 nveis
Apenas 35 instrues
16 registros especficos em RAM para controle do chip.
Timer 0 de 8 bits com opo de prescaler de 8 bits
13 pinos que podem ser configurados individualmente como entrada ou sada
alta capacidade de corrente nos pinos (podem acender um led diretamente)
capacidade de gerenciar interrupes externas(at 5 entradas), do timer 0 e do
A/D
Watch dog para recuperao e reset em caso de travas o software
Memria de programas protegida contra cpias.
Modo SLEEP para economia de energia
Vrias opes de osciladores
Brown-out reset

Neste captulo vamos estudar apenas as diferenas entre o 16F84 e o 16C711, sendo que
os demais perifricos funcionam de modo semelhante.

21.2-Pinagem e caractersticas eltricas bsicas

Figura 21.1-Pinos do PIC 16C711 no encapsulamento DIP

81

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
Descrio dos pinos agrupados por blocos
Pino 14 Vdd
Pino 5 Vss
Pino 17 RA0

Tenso de alimentao
Referncia de Terra
Porta A, bit 0. Entrada ou sada digital
Canal analgico 0
Pino 18 RA1
Porta A, bit 1. Entrada ou sada digital
Canal analgico 1
Pino 1 RA2
Porta A, bit 2. Entrada ou sada digital
Canal analgico 2
Pino 2 RA3
Porta A, bit 3. Entrada ou sada digital
Canal analgico 3
Pino 3 RA4/TOCKI
Porta A, bit 4. Entrada ou sada digital,entrada
TIMER 0
Pino 4 MCLR
Entrada de reset em nvel 0
Pino 16 OSC1/CLKIN
Cristal de clock externo
Pino 15 OSC2/CLKOUT Cristal ou sada Fosc/4 em modo RC
Pino 6 RB0/INT
Porta B, bit 0. Entrada ou sada digital, ou
interrupo externa
Pino 7 RB1
Porta B, bit 1. Entrada ou sada digital
Pino 8 RB2
Porta B, bit 2. Entrada ou sada digital
Pino 9 RB3
Porta B, bit 3. Entrada ou sada digital
Pino 10 RB4
Porta B, bit 4. Entrada ou sada digital, interrupo
nas mudanas de estados
Pino 11 RB5
Porta B, bit 5. Entrada ou sada digital, interrupo
nas mudanas de estados
Pino 12 RB6
Porta B, bit 6. Entrada ou sada digital, interrupo
nas mudanas de estados
Pino 13 RB7
Porta B, bit 7. Entrada ou sada digital, interrupo
nas mudanas de estados
Faixa de tenso de alimentao: 2,0V a 6,0V (tpica 5,0V)
Consumo de corrente:1)<2 mA a 5V, 4MHz
2)15 uA a 3V, 32KHz
3)1 uA em standby

21.3-Principais diferenas nos registros


Endereo

No PIC 16F84

No PIC16C711

08H
09H
88H
89H
87H

EEDATA
EEADR
EECON1
EECON2
No usado

ADCON0
ADRES
ADCON1
ADRES
PCON

82

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

21.4-Registro INTCON no PIC 16C711


Bit 7
GIE

Bit 6
ADIE

Bit 5
TOIE

Bit 4
INTE

Bit 3
RBIE

Bit 2
TOIF

Endereo: 0BH, 8BH

Bit 7-RW

GIE

Bit 6-

ADIE

Bit 5-RW

TOIE

Bit 4-R

INTE

Bit 3-R

RBIE

Bit 2-RW

TOIF

Bit 1-RW

INTF

Bit 0-RW

RBIF

Bit 1
INTF

Bit 0
RBIF

valor de reset:0000000X

Bit global interrupt enable (habilitao global)


1=habilita as interrupes que estejam individualmente
selecionadas
0=desabilita todas as interrupes
Interrupo do conversor A/D
1=habilita interrupo do A/D
0=desabilita interrupo do A/D
Interrupo gerada pelo overflow no TMR0
1=habilitada
0=desabilitada
Interrupo externa RB0/INT
1=habilitada
0=desabilitada
Interrupo por mudanas na PORTB
1=habilitada
0=desabilitada
Sinaliza interrupo pelo overflow do TMR0(*)
1=ocorreu um overflow no TMR0
0=ainda no ocorreu overflow no TMR0
Sinaliza interrupo externa no pino RB0/INT (*)
Sinaliza interrupo de mudanas na PORTB (*)

(*) devem ser zerados pelo software.

21.5-Registro PCON no PIC 16C711


Bit 7
-

Bit 6
-

Bit 5
-

Bit 4
-

Bit 3
-

Endereo: 0BH, 8BH


Bit 7 a 2
Bit 1-RW

POR\

Bit 0-RW

BOR\

Bit 2
-

Bit 1
POR\

Bit 0
BOR\

valor de reset:0000000X

No implementados. Lidos como 0


Bit de status do Power on reset
1=no ocorreu power on reset
0=ocorreu power on reset (deve ser setado pelo software logo aps
o power on reset)
Bit de status do Brown out
1=no ocorreu Brown out reset
0=ocorreu Brown out reset (deve ser setado pelo software logo
aps o Brown out reset)

83

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

21.6-Registros de controle do A/D


Os registros de controle do A/D so o ADCON1 e ADCON2. No registro
ADRES teremos o resultado da ltima converso realizada.

21.6.1-ADCON0
Bit 7
ADCS1

Bit 6
ADCS0

Bit 5
-

Bit 4
CHS1

Bit 3
CHS0

Bit 2
GO/DONE

Endereo: 08H

Bit 1
ADIF

Bit 0
ADON

valor de reset:00000000

No implementados. Lidos como 0


Seleo de clock para o A/D
00=Fosc/2
ADCS1
01=Fosc/8
ADCS0
10=Fosc/32
11=Frc (o clock deriva de um oscilador RC)
No implementado: sempre lido como 0
Seleciona em qual canal ser efetuada a amostragem e
converso
00=canal 0(RA0/AN0)
CHS1
CHS0
01=canal 1(RA1AN/1)
10=canal 2(RA2/AN2)
11=canal 3(RA3/AN3)
Inicio e situao da converso (somente ADON=1)
1=converso sendo realizada(setar para iniciar a converso)
GO/DONE\
0=converso finalizada ou ainda no est em progresso(o
hardware zera este bit ao fim da converso)
Flag (bit) de requisio de interrupo do A/D
ADIF
1=converso completa.(deve ser zerado pelo software)
0=converso no completa
Bit para ligar e desligar o mdulo A/D
ADON
1=mdulo A/D operando
0=mdulo A/D desligado. No consome corrente

Bit 7 a 2
Bit 7-RW
Bit 6-RW
Bit 5

Bit 4-RW
Bit 3-RW

Bit 2-RW

Bit 1-RW

Bit 0-RW

21.6.2-ADCON1
Bit 7
-

Bit 6
-

Bit 5
-

Bit 4
-

Bit 3
-

Bit 2
-

Endereo: 88H
Bit 7 a 2

Bit 1-RW PCFG1


Bit 0-RW PCFG0

Bit 1
PCFG1

Bit 0
PCFG0

valor de reset:00000000
No implementados. Lidos como 0
Configurao das portas do A/D
PCFG1

PCFG0

RA1 e RA1

RA2

RA3

Vref

0
0
1
1

0
1
0
1

analgica
analgica
analgica
I/O digital

analgica
analgica
I/O digital
I/O digital

analgica
Vref
I/O digital
I/O digital

Vdd
RA3
Vdd
Vdd

84

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

21.6.3-ADRES
Este registro de 8 bits, presente nos bancos 0 e 1 contm ovalor digital do sinal
cuja entrada analgica foi habilitada e convertida.

21.7-Utilizando o conversor A/D


Quando uma converso for finalizadas pelo mdulo A/D (o mesmo opera
durante o SLEEP) o resultado armazenado no registro ADRES, o bit GO/DONE\
zerado e o bit ADIF setado, sinalizando a interrupo de converso (somente atendida
se ADIE=1).
Os bits do PORTA configurados como entrada analgica devem ter seus
controles em TRISA setados.
Para efetuar uma converso devemos seguis alguns passos:
-configurar ADCON1, selecionando o modo dos pinos do PORTA
-Selecionar qual o canal a converter em ADCON0 (CHS1 e CHS0)
-Selecionar a freqncia de converso em ADCON0 (ADCS1 E ADCS0)
-Ligar o mdulo A/D em ADCON0(ADON=1)
-Ajustar a interrupo(se for utilizada) com ADIF=0, ADIE=1 e GIE=1
-Esperar o tempo de aquisio por parte do A/D (ver item 21.7.1)
-Iniciar a converso(GO/DONE\=1)
-Esperar o fim da converso (pela interrupo ou por varredura at que GO/DONE\= 0
ou ADIF=1.
-Ler o resultado da converso em ADRES
-Esperar para efetuar nova converso(ver item 2.7.2)

21.7.1-Tempo de aquisio para o A/D


Aps selecionarmos o canal desejado no mdulo A/D devemos esperar um
tempo para que a amostragem seja realizada e o capacitor interno carregado.
No entraremos em detalhes. Basta que o usurio deixe um tempo de
aproximadamente 15 us que dever ser suficiente para a maioria das aplicaes.

21.7.2-Tempo de espera para novas converses


Rodando a 4 MHz (caso dos exemplos) devemos esperar um tempo antes de
iniciar nova converso(6 us no pior dos casos para 20MHz), para qualquer seleo do
clock do A/D.

21.8-Brown-out reset
O Brown-out reset um reset que ocorre sempre que a alimentao cai a um
valor mnimo, mas no chega a zero, retornando ao valor normal.
Nestas condies o reset pelo pino MCLR\ no ocorre, mas a CPU pode ter se
perdido ou o estado de algum pino pode ter sido alterado erroneamente.
O 16C711 possui internamente um circuito detector de Brown reset que alm de
resetar a CPU sinaliza esta condio pelo bit BOR\ (item 21.5).

85

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

21.8.1-Reconhecimento dos tipos do reset


POR\ BOR\ TO\
0
X
1
1
0
X
1
1
0
1
1
0
1
1
U
1
1
1

PD\
1
X
1
0
U
0

Tipo de reset
Power down reset
Brown-out reset
Reset pelo watch dog
Sai do SLEEP pelo watch dog
Reset pelo MCLR\ em operao normal
Sai do SLEEP pelo MCLR\ ou por interrupo

21.8.2-Tenso de Brown-out reset


A tenso do pino Vdd que gera o brown-out reset de 4,0V com tolerncia de
mais ou menos 0,3V.

21.8.3-Palavra de configurao do 16C711.


Assim como o 16F84 (cap 9) o 16C711 tambm possui uma palavra de
configurao na memria de programa para ajuste do funcionamento do hardware.
Bit 13 Bit 12 Bit 11 Bit 10 Bit 9
CP

CP

CP

CP

CP

Bit 8

Bit 7

CP

CP

Bit 6
BODEN\

Endereo

Bit 5

Bit 4

CP

CP

Bit 3

Bit 2

Bit 1

Bit 0

PWRTE WDTE FOSC1 FOSC0

valor do reset: uuuuuuuuuuuuuu

Bit 13 a 7
5e4

CP

Bit 6

BODEN

Bit 3

PWRTE

Bit 2

WDTE

Bit 1

FOSC1

Bit 0

FOSC0

Bit de proteo do cdigo


1= cdigo desprotegido
0= cdigo protegido
Habilitao do Brown-out reset
1=Brown-out reset habilitado (garantir que PWRTE\=0)
0=Brown-out reset desabilitado
Habilitao do power-up timer
1= power-up timer desabilitado
0= power-up timer habilitado
Bit de habilitao do WATCH DOG
1= WDT habilitado
0= WDT desabilitado
Seleciona tipo de oscilador
11= modo RC externo
10= modo cristal ou ressonador de alta velocidade HS
01= cristal ressonador de baixa velocidade XT
00= cristal de baixa potncia LP

21.8.4-Consideraes sobre os bits de status de reset


Conforme as necessidades do sistema, o usurio deve proceder a uma verificao
dos bits POR\, BOR\, TO\, PD\ a cada reset para poder identificar qual o evento
responsvel para poder identificar qual o evento responsvel pelo mesmo e agir
conforme tal.

86

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
21.9-Exemplo de leitura no canal 0
Para este exemplo, considere o circuito da figura 21.1, onde um PIC 16C711
com clock de 4 MHz, 8 leds ligados ao PORTB e um potencimetro ligado ao pino
RA0/AN0.
Neste exemplo, o valor presente em RA0 ser convertido para seu equivalente
digital, com 8 bits de resoluo, escrito no PORTB.
Temos ento que 8 bits so 256 variaes para a escala de 0 a 5 V, logo, cada
incremento nos bits indicados pelos leds significa um incremento de aproximadamente
19.53 mV no sinal de entrada.

Figura 21.2-Circuito de testes para o mdulo A/D do PIC 16C711

87

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
;=======================================================================================
;
Programa exemplo 1 do capitulo 21
;
;
Objetivo:
mostrar o uso do mdulo A/D
;
Funcionamento
Conforme variamos o potencimetro temos nos leds ligados
;
ao PORTB o valor digital convertido. Espera fim de
;
varredura em ADIF
;=======================================================================================
list p=16C711
;para qual processador o codigo sera gerado
radix dec
;padro DECIMAL para valores sem identificao
include <16C711.INC>
;anexa arquivo com definies do 16F84
;=======================================================================================
;Tabela de definies de RAM e constantes
Led7
tempo
dt1

equ
equ
equ

7
0CH
0DH

;led 7 est em RB7


;varivel tempo na RAM 0CH
;define variavel auxiliar X na RAM 0CH
;(primeira posio)
valor equ
0EH
;
W
equ
0
;facilita a referencia a w quando necessrio
;=======================================================================================
;memria de programa
org

movlw
movwf

B'00000000'
INTCON

;W = ajuste para os bits do intcon


;INTCON = W = 0

clrf
clrf

PORTA
PORTB

;
;inicializa portas A e B

bsf

STATUS,RP0

;seleciona banco 1 para OPTION e TRIS

movlw
movwf

B'11011111'
OPTION_REG

;W = ajuste para os bits do OPTION


;OPTION = W.Definiu-se o nome OPTION_REG
;para evitar conflito com a istruo OPTION

movlw
movwf

B'11111111'
TRISA

;W=ajuste para od bits do TRISA


;TRISA = W; bits= 1 entrada;bits=0 saida

movwf
movwf

B'00000000'
TRISB

;W = ajuste para os bits do TRISB


;TRISB = W; bits= 1 entrada;bits=0 sada

movlw
movwf

B'00000000'
OPTION_REG

;W = ajuste para os bits do OPTION


;OPTION = W.Definiu-se o nome OPTION_REG
;para evitar conflito com a istruo OPTION

movlw
movwf

B'00000010'
ADCON1

;W=ajuste para os bits do ADCON1


;ADCON1 = W; bits= 1 entrada analgica;bits=0 entrada
;digital

bcf

STATUS,RP0

;retorna ao banco 0 (padrao do Reset)

;define o trecho a seguir em 000


;no foi reservada definio para interrupo, pois no
;sero utilizadas
;=======================================================================================
;inicio do programa logo aps o reset
inicio:

movlw B'10000001'
;W=ajuste para os bits do ADCON0
movwf ADCON0
;clock do A/D =Fosc/8, canal 0, mdulo ligado
;=======================================================================================
principal:
u10:
movlw
movwf

3
dt1

;perde 10 us
;1 ciclo
;1 ciclo

(1)
(2)

esp:
decfsz dt1
goto
esp

;1 ciclo se >0 seno 2 ciclos (3)


;2 ciclos se >0 seno 0
(4)

;=======================================================================================
;explicando o loop
;
;perde 1 us em (1)
;perde 1 us em (2)
;perde 1 us em (3)
porque no resultou >0 (3-1=2)
;perde 2 us em (4)
;perde 1 us em (3)
;perde 2 us em (4)
porque no resultou >0 (2-1=1)
;perde 2 us em (3)
porquw resultou em 0 (1-1=0), o goto ignorado
;=======================================================================================
bsf

ADCON0,GO

;inicia a converso

btfss

ADCON0,ADIF

;se ADIF=1 pula prxima isntruo

espera:

88

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
goto

espera

;ADIF=0 espera ir a 1
;terminou a converso
bcf
ADCON0,ADIF
;reseta flag de interrupo
movf
ADRES,W
;W=ADRES
movwf valor
;valor=ADRES
comf
valor,W
;w=valor complementado(invertido) pois os leds acendem em
;nvel 0
movwf PORTB
;escreve no PORTB
call
ms250
;espera 250 ms antes de repetir
;evita que os leds fiquem instveis devido a rudo
;e impreciso no potencimetro
goto
principal
;repete todo o ciclo de leitura
;=======================================================================================
;rotina de tempo de 250 ms
movlw
movwf

250
tempo

;o call para a rotina leva 2 us


;+1
;+1
total1= 4 us

movlw
movwf

248
dt1

;+1
;+1

total2=2 us

nop
decfsz dt1

;1
;1

248 x4 us + (1us nop + 2 us quando decfsz da 0

goto
ms250b
decfsz tempo

;2
;1

da um tempo total3 = 995 us


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

goto
return

;2
;
;

250 x(total2+total3+total4)+2 us
quando tempo=0=total5=250.002 us
delay=total 1+total5+2 us do return = 250008 us

END

fim do programa

ms250:

ms250a:

ms250b:

ms250a

89

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

22-O revolucionrio PIC 12C508, com apenas 8 pinos


22.1-Introduo
O PIC 12C508 um microcontrolador baseado na famlia 16C5X, possuindo
limitaes quanto a seus perifricos, mas em compensao usando apenas 8 pinos.
As verses mais usadas no desenvolvimento so EPROM e OTP(grava apenas
uma vez).
Suas principais caractersticas so:
-Funciona de DC at 4 MHz(tempo de ciclo de 1 us)
-33 instrues
-512 palavras de programa (1K no 12C509)
-25 bytes de RAM (41 no 12C509)
-Opo para oscilador interno fixo em 4 MHz
-Reset interno
Neste captulo vamos estudar apenas as diferenas entre o PIC 16F84 e o PIC
12C508, sendo que os demais perifricos(Watch Dog ,timer ,....) que existem neste
funcionam de modo semelhante.
IMPORTANTE:
O 12C508 no possui memria de programa EEPROM, tendo disponvel para
desenvolvimento uma verso EPROM com janela, apagvel por luz ultravioleta.
A Microchip no recomenda a proteo de cdigo de dispositivos com janela.

22.2-Pinagem e caractersticas eltricas bsicas

Figura 22.1-Pino do PIC 12C508 no encapsulamento DIP

Faixa de tenso de alimentao: 2,5V a 5,5V (tpica 5,0V)


Consumo de corrente:1)<2 mA a 5V, 4MHz
2)15 uA a 3V, 32KHz
3)1 uA em standby

90

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
Descrio dos pinos agrupados por blocos
Pino 1
Pino 8
Pino 7
Pino 6
Pino 5
Pino 4
Pino 3
Pino 2

Vdd
Vss
GPIO0
GPIO 1
GPIO2/TOCKI

Tenso de alimentao
Referncia de Terra
Porta A, bit 0. Entrada ou sada digital
Porta A, bit 1. Entrada ou sada digital
Porta A, bit 2. Entrada ou sada digital
entrada TIMER 0
GPIO3/MCLR\
Porta A, bit 3. Entrada digital ou MCLR\
GPIO4/OSC2
Porta A, bit 4. Entrada ou sada digital.
Entrada de clock
GPIO5/OSC1/CLKIN Porta A, bit 5. Entrada ou sada digital.
Entrada de clock

22.3-Diferenas principais a nvel de software e hardware


O PIC 12C508 tem memria de programa de apenas 12 bits de comprimento,
seu set de instrues ligeiramente diferente, seu stack tem apenas 2 niveis.
Devemos ainda considerar que o PIC 12C508 possui como perifricos apenas 6
bits de I/O e o timer 0, sendo os demais (watch dog. POR,....)so inerentes a todos os
PICs.

22.4-Porta I/O np PIC 12C508


No PIC 12C508 existe apenas uma porta de I/O, chamada de GPIO, mapeada no
mesmo endereo do PORTB do PIC 16F84, embora com apenas 6 bits mapeados(0 5).
Nos membros da famlia 15C5X os registros TRIS e OPTION no so
endereveis como na famlia 16CXXX, sendo necessrio acessa-los pelas instrues
equivalentes (ver set de instrues do 16F84), embora tenham funcionamento
equivalente.
Como o estudo da famlia d16C5X no o objetivo principal deste curso, vamos
apresentar apenas um circuito mnimo de testes e um programa bem simples.
Neste circuito utilizamos clock de 4 MHz, reset externo e temos ento 5 pinos
disponveis.

Figura 22.2-Circuito de exemplo com PIC 12C508


91

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

22.5-Exemplo com PIC 12C508. Acender leds conforme a situao das


chaves.
Neste exemplo temos 2 chaves ligadas em GPIO5 (S2) e GPIO4 (S1) e dois leds
ligados a GPIO0 (led6) e GPIO1 (led7).
A nomenclatura S2, S3, led6 e led7 a mesma utilizada no exemplo do 16F84.
;=======================================================================================
;
Programa exemplo do 12C508
;
;
Objetivo:
Ler teclas e acionar leds
;
Funcionamento se S2 e S3 soltas o led 6 pisca 1 vez e espera 1s
;
se S2 pressionada e S3 solta, led6 pisca 2 vezes e espera 1s
;
se S2 solta e S3 pressionada; led7
pisca 2 vezes e espera 1s
;
se S2 e S3 presionadas, led6 e led7 piscam 2 vezes e esperam 1s
;=======================================================================================
list p=12c508
;para qual processador o codigo sera gerado
radix dec
;padro DECIMAL para valores sem identificao
include <P12C508.INC> ;anexa arquivo com definies do 12C508
;=======================================================================================
;Tabela de definies de RAM e constantes
Led6
Led7
S2
S3
tempo
X

equ
equ
equ
que
equ
equ

0
1
5
4
0CH
0DH

;led 6 est em GPIO0


;led 7 est em GPIO1
;S2 est em GPIO5
;S3 est em GPIO4
;varivel tempo na RAM 0CH
;define variavel auxiliar X na RAM 0CH
;(primeira posio)
Y
equ
0EH
;
W
equ
0
;facilita a referencia a w quando necessrio
;=======================================================================================
;memria de programa
org

;define o trecho a seguir em 000

movlw B'00000000'
OPTION

;W = ajuste para os bits do intcon


;na famlia 12C5xxx e 16C5x os registros OPTION e TRIS no
;so endereveis(no esto na RAM)
;ver isntrues equivalentes (em cinza no cap 18)

movlw
movwf

;W=ajuste para od bits do GPIO


; GPIO = W; bits= 1 entrada;bits=0 saida

B'11111100'
GPIO

;=======================================================================================
principal:
btfss GPIO,S2
;se S2=off pula
goto
S2on
;S2 pressionado
btfss GPIO,S3
;se S3=off pula
goto
S3on
;S3 pressionado
Pisca1:
bcf
GPIO,Led7
;
bcf
GPIO,Led6
;
call
ms250
;
bsf
GPIO,Led7
;
bsf
GPIO,Led6
;
call
ms250
;
call
ms250
;
call
ms250
;
call
ms250
;
goto
principal
S2on:
btfss GPIO,S3
;
goto
S2S3on
;
S0S2:
bcf
GPIO,Led7
;
call
ms250
;
bsf
GPIO,Led7
;
call
ms250
;
bcf
GPIO,Led7
;
call
ms250
;
bsf
GPIO,Led7
;
call
ms250
;
call
ms250
;
call
ms250
;
call
ms250
;
goto
principal

92

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
;=======================================================================================
S3on:
btfss GPIO,S2
goto
S2S3on
;=======================================================================================
S0S3:
bcf
GPIO,Led6
;
call
ms250
;
bsf
GPIO,Led6
;
call
ms250
;
bcf
GPIO,Led6
;
call
ms250
;
bsf
GPIO,Led6
;
call
ms250
;
call
ms250
;
call
ms250
;
call
ms250
;
goto
principal
;=======================================================================================
S2S3on:
bcf
GPIO,Led6
;
bcf
GPIO,Led7
;
call
ms250
;
bsf
GPIO,Led6
;
bsf
GPIO,Led7
;
call
ms250
;
bcf
GPIO,Led6
;
bcf
GPIO,Led7
;
call
ms250
;
bsf
GPIO,Led6
;
bsf
GPIO,Led7
;
call
ms250
;
call
ms250
;
call
ms250
;
call
ms250
;
goto
principal
;=======================================================================================
;rotina de tempo de 250 ms
ms250:
movlw
movwf

250
tempo

;o call para a rotina leva 2 us


;+1
;+1
total1= 4 us

movlw
movwf

248
X

;+1
;+1

total2=2 us

nop
decfsz X

;1
;1

248 x4us +(1us nop+2us quando decfsz da 0

goto
ms250b
decfsz tempo

;2
;1

da um tempo total3 = 995 us


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

goto
return

;2
250 x(total2+total3+total4)+2 us
;
quando tempo=0=total5=250.002 us
;delay =total1+total5+2us do return = 250008 us

END

;fim do programa

ms250a:

ms250b:

ms250a

93

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
23-Viso geral das famlias PIC12CXXX, 16CXXX e 16C5X

23.1-Famlia 12CXXX
Item

Palavras de
Programa

RAM

Clock
max.(MHz)

Pinos
I/O

12C508

512x12

25

12C509

1024x12

41

12C671

1024x14

128

12C672

2048x14

128

25

Clock
max.(MHz)
4

Pinos
I/O
12

Principais
perifricos
1 timer,
Watch Dog
1 timer,
Watch Dog
1 timer,
Watch Dog
4 A/D
1 timer,
Watch Dog
4 A/D

23.2-Famlia 16C5X

16C52

Palavras de
Programa
384x12

16C54

512x12

25

20

12

16C54A

512x12

25

20

12

16C154

512x12

25

20

12

16C55

512x12

24

20

20

16C56

1024x12

25

20

12

16C156

1024x12

25

20

12

16C57

2048x12

72

20

20

16C58A

2048x12

73

20

12

16C158

2048x12

73

20

12

Item

RAM

94

Principais
perifricos
1 timer
1 timer,
Watch Dog
1 timer,
Watch Dog
1 timer,
Watch Dog
1 timer,
Watch Dog
1 timer,
Watch Dog
1 timer,
Watch Dog
1 timer,
Watch Dog
1 timer,
Watch Dog
1 timer,
Watch Dog

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
23.3-Famlia 16CXXX

192
80
80
128
36
128
192
128
128
192
192

Clock
max.(MHz)
20
20
20
20
20
20
20
20
20
20
20

Pinos
I/O
20
13
13
13
13
22
22
33
33
33
33

8192x14

368

20

22

16C67

8192x14

368

20

33

16C620

514x14

80

20

13

16C621 1024x14

80

20

13

16C622 2048x14

128

20

13

16C642 4096x14

176

20

22

16C662
16C710
16C71
16C711
16C715
16C72
16C73
16C73A
16C74
16C74A
16C76

4096x14
512x14
1024x14
1024x14
2048x14
2048x14
4096x14
4096x14
4096x14
4096x14
8192x14

176
36
36
68
128
128
192
192
192
192
368

20
20
20
20
20
20
20
20
20
20
20

33
13
13
13
13
22
22
22
33
33
22

16C77

8192x14

20

33

16F83

512x14
(flash)

10

13

1 timer, watch dog

16C84

1024x14
(eeprom)

10

13

1 timer, watch dog

16F84

1024x14
(flash)

368
36+
64
eeprom
36+
64
eeprom
36+
64
eeprom
176
176

5 A/D, usart, 12c, spi, 2 pwm, 3 timers, watch dog


Brown out detect
8 A/D, usart, 12c, spi, 2 pwm, 3 timers, watch dog
Brown out detect

10

13

1 timer, watch dog

8
8

52
52

12c, spi, 1 pwm, 3 timers


watch dog
5 A/D, 12c, spi, 1 pwm, 3 timers, watch dog

Item

Palavras de
Programa

RAM

1400
16C554
16C556
16C558
16C61
16C62
16C63
16C64
16C64A
16C65
16C65A

4096x14
512x14
1024x14
2048x14
1024x14
2048x14
4096x14
2048x14
2048x14
4096x14
4096x14

16C66

16C923 4096x14
16C924 4096x14

95

Principais perifricos
8 A/D, 12C, 2 D/A, 2 comparadores, 2 timers,
watch dog
1 timer, watch dog
1 timer, watch dog
1 timer, watch dog
1 timer, watch dog
12c, spi, 1pwm, 3 timers, watch dog
12c, spi, usart, 2 pwm, 3 timers, watch dog
Brown out
12c, spi, pwm, 3 timers, watch dog
12c, spi, 1 pwm, 3 timers, watch dog
Brown out detect
12c, spi, usart, 2 pwm, 3 timers, watch dog
12c, spi, usart, 2 pwm, 3 timers, watch dog,
Brown out
12c, spi, usart, 2 pwm, 3 timers, watch dog,
Brown out
12c, spi, 2 pwm, 3 timers, watch dog
Brown out detect
2 comparadores, 1 timer, watch dog
Brown out detect
2 comparadores, 1 timer, watch dog
Brown out detect
2 comparadores, 1 timer, watch dog
Brown out detect
2 comparadores, 1 timer, watch dog
Brown out detect
2 comparadores, 1 timer, watch dog
Brown out detect
4 A/D,1 timer, watch dog, Brown out detect
4 A/D, 1 timer, watch dog
4 A/D, 1 timer, watch dog, Brown out detect
4 A/D ,1 timer, watch dog, Brown out detect
5 A/D, 12C, spi, 1 pwm, 3 timers, watch dog
Brown out detect
5 A/D, usart, 12c, spi, 2 pwm, 3 timers, watch dog
5 A/D, usart, 12c, spi, 2 pwm, watch dog,
3 timers, Brown out detect
8 A/D, usart, 12c, spi, 2 pwm, 3 timers, watch dog
8 A/D, usart, 12c, spi, 2 pwm, 3 timers, watch dog

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
IMPORTANTE:
Estas tabelas foram baseadas em informaes de abril de 1997.
Devido a grande velocidade no desenvolvimento de novos produtos, estas
tabelas podem estar ligeiramente desatualizadas.

96

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura

APNDICE 1- Uso do compilador MpAsmWin


Este apndice tem apenas por objetivo auxiliar o leitor no inicio de seus
trabalhos com o compilador MPASMWIN da Microchip.
Este compilador est disponvel gratuitamente para download no site
www.microchip.com, assim como outras ferramentas como o MPLAB, bastando copilos e usar.
Apenas copie-o para um novo diretrio, por exemplo, c:\MPASMWIN
Neste diretrio, execute o programa MPASMWIN
(menu iniciarexecutarc:\MPASMWIN\MPASMWIN.exe) ou atravs de seu cone
em seu grupo de programas. conveniente criar um atalho para o mesmo em sua rea
de trabalho, para evitar toda a seqncia de cham-lo repetidas vezes.
Usando o MPASMWIN pela primeira vez.
Apenas execute o programa e veja a tela inicial. Nas opes disponveis,
selecione:
Radix:
Warning level:
Hex output:
Generated files:
Macro expansion:
Processor:

default
default
INHX8M
error file
List file
default
default

Desmarque a opo case sensitive


Marque a opo save settings on exit
Selecione exit e saia do programa.
Escrevendo e compilando o primeiro programa
Com qualquer editor de texto que salve sem formato(bloco de notas, Wordsalvar como somente texto,e outros) crie um arquivo de nome teste1.asm e salve-o
com as seguintes informaes:
listp=16F84
radix dec
org
0

;define o processador

inicio:
movlw 10H
addlw 20H
goto inicio
END
Compilando o primeiro programa
Salve e execute o MPASMWIN

97

CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
No campo source file name escreva: c:\MPASMWIN\teste1.asm e selecione o
boto ASSEMBLE. Uma janela mostrar o trabalho do compilador, indicando se
houve erros e quantos foram, mensagens, ...
Selecione OK e pronto.
O compilador ir gerar os seguintes arquivos:
teste1.cd possui informaes para o simulador, emulador, ...
teste1.err lista de erros, se houverem.
teste1.hex fornece o arquivo no formato hexa, para o gravador
teste1.lst mostra o trabalho e o arquivo gerado, com os includes que houverem, e o
cdigo gerado.
Estude bem o arquivo teste1.lst. muito til no aprendizado.

98

Você também pode gostar