Escolar Documentos
Profissional Documentos
Cultura Documentos
Curso de Programação em PIC
Curso de Programação em PIC
CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
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
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
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
Compilando exemplos
CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
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
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
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
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.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.
12
CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
100H btfsc
RA0
;programa principal
000H
Reset
004H
005H
.
.
.
.
.
.
.
.
.
.
3FFH
Interrupo
Uso geral
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.
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.
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
Item 7.1
Item 7.2
Item 6.2.3
Item 6.2.4
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
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
Bit 6-RW
Bit 5
Bit 4
Bit 3
Bit 2-RW
Bit 1-RW
Bit 0-RW
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
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
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
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.
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.
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.
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
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
movlw
movwf
bsf
f
30H
EEADR
STATUS,RP0
bsf
EECON1
bcf
movf
EEPROM
movwf
STATUS,RP0
EEDATA,0
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.
EECON1,EEIF
espera
EECON1,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.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.
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.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.7-Inicislizao do TRIS
Funciona de modo semelhante ao PORTA.
27
CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
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.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).
30
CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
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:
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.
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.
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;
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.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
Se GIE=1
Quando qualquer interrupo que estiver sendo atendida, GIE ser zerado pelo
hardware e setado novamente ao fim desta.
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.
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.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.
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.
movf
movwf
movf
retfie
W2
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.
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
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
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
45
CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
registro W
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
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
47
CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
Constante binria:
Bxxxxxxxx
exemplo:01010101 = B01010101
Constante hexadecimal:
0xvalor ou valorH
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
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
exemplo
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
exemplo
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
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
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
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
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
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
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
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
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
MOVLW 10H
; W = 10H
RETURN - - ;retorna
ADDLW 1
--;faz w = 11H
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
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
60
CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
equ
0CH
goto
inicio
org
STATUS,RP0
61
CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
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
63
CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
equ
equ
equ
7
0CH
0DH
0
inicio
org
nop
retfie
;retorna da interrupo
;=======================================================================================
;inicio do programa logo aps o reset
inicio:
movlw
movwf
B'00000000'
INTCON
bsf
STATUS,RP0
movlw
movwf
B'11011111'
OPTION_REG
movlw
movwf
B'11111111'
TRISA
movwf
movwf
B'00000000'
TRISB
bcf
STATUS,RP0
;retorna ao banco 0 (padrao do Reset)
;=======================================================================================
principal:
bcf
call
bsf
call
PORTB,Led7
ms250
PORTB,Led7
ms250
goto
principal
;=======================================================================================
;rotina de tempo de 250 ms
ms250:
movlw
movwf
250
tempo
movlw
movwf
248
X
;+1
;+1
total2=2 us
nop
decfsz X
;1
;1
goto
ms250b
decfsz tempo
;2
;1
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
65
CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
equ
equ
0CH
0DH
0
inicio
org
nop
retfie
;retorna da interrupo
;=======================================================================================
;inicio do programa logo aps o reset
inicio:
movlw
movwf
clrf
clrf
B'00000000'
INTCON
PORTA
PORTB
bsf
STATUS,RP0
movlw
movwf
B'11011111'
OPTION_REG
movlw
movwf
B'11111111'
TRISA
movwf
movwf
B'00000000'
TRISB
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
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
ms250a:
66
CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
movlw
movwf
248
dt1
;+1
;+1
total2=2 us
nop
decfsz dt1
;1
;1
goto
ms250b
decfsz tempo
;2
;1
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
equ
equ
0CH
0DH
0
inicio
org
nop
retfie
;retorna da interrupo
;=======================================================================================
;inicio do programa logo aps o reset
inicio:
movlw
movwf
clrf
clrf
B'00000000'
INTCON
PORTA
PORTB
bsf
STATUS,RP0
movlw
movwf
B'11011111'
OPTION_REG
movlw
movwf
B'11111111'
TRISA
movwf
movwf
B'00000000'
TRISB
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
;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
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
goto
ms250b
decfsz tempo
;2
;1
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
equ
equ
0CH
0DH
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
nop
retfie
;retorna da interrupo
;=======================================================================================
;inicio do programa logo aps o reset
inicio:
movlw
movwf
clrf
clrf
B'00000000'
INTCON
PORTA
PORTB
bsf
STATUS,RP0
movlw
movwf
B'11011111'
OPTION_REG
movlw
movwf
B'11111111'
TRISA
movwf
movwf
B'00000000'
TRISB
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
btfsc
goto
PORTA,S1
vetec
Incf
btfss
goto
decf
valor
valor,6
S1ok
valor
S0Ab:
S1fech:
S1ok:
70
CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
Comf
movwf
call
goto
valor,W
PORTB
ms250
vetec
decf
btfss
goto
incf
valor
valor,7
S0ok
valor
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
movlw
movwf
248
dt1
;+1
;+1
total2=2 us
nop
decfsz dt1
;1
;1
goto
ms250b
decfsz tempo
;2
;1
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
equ
equ
0CH
0DH
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
movlw
movwf
B'11011111'
OPTION_REG
movlw
movwf
B'11111111'
TRISA
movwf
movwf
B'00000000'
TRISB
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
btfsc
goto
PORTA,S1
veS2S3
Incf
btfss
goto
decf
valor
valor,6
S1ok
valor
Comf
movwf
call
goto
valor,W
PORTB
ms250
vetec
decf
btfss
valor
valor,7
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
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
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
movlw
movwf
248
dt1
;+1
;+1
total2=2 us
nop
decfsz dt1
;1
;1
goto
ms250b
decfsz tempo
;2
;1
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
74
CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
;define
goto
inicio
;
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
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
movlw
movwf
B'11011111'
OPTION_REG
movlw
movwf
B'11111111'
TRISA
movwf
movwf
B'00000000'
TRISB
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
75
CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
;=======================================================================================
;
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
movlw
movwf
B'00000000'
INTCON
bsf
STATUS,RP0
movlw
movwf
B'11011111'
OPTION_REG
movlw
movwf
B'11111111'
TRISA
movwf
movwf
B'00000000'
TRISB
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
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.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.
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
80
CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
Neste captulo vamos estudar apenas as diferenas entre o 16F84 e o 16C711, sendo que
os demais perifricos funcionam de modo semelhante.
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
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
Bit 6
ADIE
Bit 5
TOIE
Bit 4
INTE
Bit 3
RBIE
Bit 2
TOIF
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 6
-
Bit 5
-
Bit 4
-
Bit 3
-
POR\
Bit 0-RW
BOR\
Bit 2
-
Bit 1
POR\
Bit 0
BOR\
valor de reset:0000000X
83
CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
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
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
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.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
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
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
Bit 13 a 7
5e4
CP
Bit 6
BODEN
Bit 3
PWRTE
Bit 2
WDTE
Bit 1
FOSC1
Bit 0
FOSC0
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.
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
movlw
movwf
B'00000000'
INTCON
clrf
clrf
PORTA
PORTB
;
;inicializa portas A e B
bsf
STATUS,RP0
movlw
movwf
B'11011111'
OPTION_REG
movlw
movwf
B'11111111'
TRISA
movwf
movwf
B'00000000'
TRISB
movlw
movwf
B'00000000'
OPTION_REG
movlw
movwf
B'00000010'
ADCON1
bcf
STATUS,RP0
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
;=======================================================================================
;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
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
movlw
movwf
248
dt1
;+1
;+1
total2=2 us
nop
decfsz dt1
;1
;1
goto
ms250b
decfsz tempo
;2
;1
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
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
CURSO DE MICROCONTROLADORES
Prof. Fbio Renato Elias Boaventura
equ
equ
equ
que
equ
equ
0
1
5
4
0CH
0DH
movlw B'00000000'
OPTION
movlw
movwf
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
movlw
movwf
248
X
;+1
;+1
total2=2 us
nop
decfsz X
;1
;1
goto
ms250b
decfsz tempo
;2
;1
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
16C84
1024x14
(eeprom)
10
13
16F84
1024x14
(flash)
368
36+
64
eeprom
36+
64
eeprom
36+
64
eeprom
176
176
10
13
8
8
52
52
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
default
default
INHX8M
error file
List file
default
default
;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