Escolar Documentos
Profissional Documentos
Cultura Documentos
Apostila16F87x PDF
Apostila16F87x PDF
Departamento de Engenharia
Curso de Engenharia Eltrica
MICROCONTROLADORES
PIC16F87x
Microcontrolador PIC16F87x
SUMRIO
INTRODUO .......................................................................................................................................................... 4
CAPTULO I - O QUE O PIC16F628 .................................................................................................................. 6
PINAGEM DO PIC16F87X .................................................................................................................................... 6
CAPTULO II - CARACTERSTICAS DO PIC16F87X ...................................................................................... 10
CAPTULO III - MEMRIA DE PROGRAMA (FLASH EPROM), MEMRIA DE DADOS (RAM) E
MEMRIA DE DADOS PERMANENTES (EEPROM) ..................................................................................... 12
MEMRIA DE PROGRAMA (FLASH EPROM) ............................................................................................... 12
MEMRIA DE DADOS (RAM) .......................................................................................................................... 13
CAPTULO IV - REGISTRADORES DE FUNES ESPECIAIS ................................................................... 16
REGISTRADOR W (ACUMULADOR OU REGISTRADOR DE TRABALHO) E A ALU (UNIDADE LGICA E ARITMTICA) 16
REGISTRADOR STATUS (ENDEREO 03H E 83H) ................................................................................................... 17
REGISTRADOR PORTA (ENDEREO 05H)............................................................................................................... 18
REGISTRADOR PORTB (ENDEREO 06H)............................................................................................................... 18
REGISTRADOR PORTC (ENDEREO 07H)............................................................................................................... 18
REGISTRADOR PORTD (ENDEREO 08H)............................................................................................................... 19
REGISTRADOR PORTE (ENDEREO 09H) ............................................................................................................... 19
REGISTRADOR TRISA (ENDEREO 85H) ................................................................................................................ 19
REGISTRADOR TRISB (ENDEREO 86H) ................................................................................................................ 19
REGISTRADOR TRISC (ENDEREO 87H) ................................................................................................................ 20
REGISTRADOR TRISD (ENDEREO 88H) ................................................................................................................ 20
REGISTRADOR TRISE (ENDEREO 89H)................................................................................................................. 20
REGISTRADOR INDF (ENDEREOS 00H E 80H) E O FSR (ENDEREOS 04H E 84H)................................................... 20
REGISTRADOR TRM0 (ENDEREO 01H).................................................................................................................. 21
REGISTRADOR PCL (ENDEREOS 02H E 82H) E O PCLATH (ENDEREOS 0AH E 8AH)........................................... 21
REGISTRADOR EEDATA (ENDEREO 08H) ............................................................................................................ 23
REGISTRADOR EEADR (ENDEREO 09H) ............................................................................................................... 24
REGISTRADOR INTCON (ENDEREOS 0BH E 8BH)................................................................................................ 24
REGISTRADOR OPTION_REG(ENDEREO 81H)..................................................................................................... 25
REGISTRADOR EECON1 (ENDEREO 88H) ............................................................................................................. 26
REGISTRADOR EECON2 (ENDEREO 89H) ............................................................................................................. 26
CAPTULO V - CONJUNTO DE INSTRUES DO PIC16F87X.................................................................... 27
EXPLICAO DETALHADA DO CONJUNTO DE INSTRUES DO PIC.......................................................................... 30
CAPTULO VI - AS INTERRUPES DO PIC16F87X .................................................................................... 40
INTERRUPO DE TIMER 0.................................................................................................................................... 41
INTERRUPO EXTERNA (RB0/INT)....................................................................................................................... 41
INTERRUPCO POR MUDANA DE ESTADO (RB4 A RB7) ...................................................................................... 41
INTERRUPO DE FIM DE ESCRITA NA EEPROM ................................................................................................... 41
REGISTRADOR INTCON......................................................................................................................................... 42
CAPTULO VII - O CONTADOR/TEMPORIZADOR (TMR0)........................................................................ 44
CAPTULO VIII MODO POWER DOWN, MODO SLEEP E O WDT ......................................................... 48
O WACHTDOG TIMER (WDT)........................................................................................................................... 48
CAPTULO IX - ESCRITA E LEITURA NA EEPROM DO PIC16F87X ........................................................ 50
BIBLIOGRAFIA ...................................................................................................................................................... 52
Microcontrolador PIC16F87x
Microcontrolador PIC16F87x
INTRODUO
Um microprocessador um componente eletrnico, que devido s suas modernas tcnicas de
fabricao, consegue efetuar com rapidez, vrias funes e operaes lgicas e aritmticas, sob
controle de um programa externo, que dita para a mquina a seqncia das funes e os
operandos a serem utilizados.
A diferena bsica entre um microcontrolador e um microprocessador que o
microcontrolador j possui internamente vrios circuitos eletrnicos que o microprocessador
precisa usar externamente para ser funcional, tais como: memria de programa, memria de
dados, portas de entrada e sada de sinais (portas de I/O, Input/Output), circuito de reset, circuito
oscilador, contador/temporizador, portas lgicas para selecionar endereos, circuito de
comunicao serial e paralela, conversor A/D, etc.
Ao escolher um projeto microcontrolado em relao aos projetos digitais tradicionais, visa
entre outras coisas: reduo de custo; reduo do consumo de energia; reduo do tamanho do
equipamento; aumento da confiabilidade; proteo de software que vai gravado internamente e a
facilidade de implementao e de suas possveis modificaes atravs de programao.
Atualmente muitos equipamentos de nosso uso dirio, tais como: eletrodomsticos,
videocassetes, alarmes, celulares e brinquedos, entre outros, utilizam microcontroladores para
execuo de suas funes bsicas. Muitos microcontroladores so conhecidos pelos
desenvolvedores de projetos no Brasil, podemos citar os seguintes:
Microcontroladores da MOTOROLA.
O PIC pode ser visto externamente como um circuito integrado TTL ou CMOS normal,
mas internamente dispe de todos os dispositivos tpicos de um sistema microprocessado, ou
seja:
Uma CPU (Central Processor Unit - Unidade de Processamento Central) cuja finalidade
interpretar as instrues de programa.
Uma memria de programa Flash EPROM que possibilita a gravao cerca de 1000
vezes sem a necessidade de apagamento com ultravioleta.
Microcontrolador PIC16F87x
Uma srie de LINHAS de I/O para controlar dispositivos externos ou receber pulsos de
sensores, chaves, etc.
Uma memria EEPROM para gravar dados permanentes. Cada posio pode ser gravada
cerca de um milho de vezes.
Microcontrolador PIC16F87x
Microcontrolador PIC16F87x
FUNO
DESCRIO
RA0
AN0
Entrada analgica
RA1
AN1
RA2
AN3
Entrada analgica
VREF-/ CVREF
RA3
AN3
Entrada analgica
VREF+
RA4
T0CKI
C1OUT
Sada do comparador 1
RA5
Porta de entrada
SS
AN4
Entrada analgica
C2OUT
Sada do comparador 2
RB0
Porta de I/O digital. Pode ter Pull-up interno habilitado por software.
INT
Interrupo externa.
RB1
RB1
Porta de I/O digital. Pode ter Pull-up interno habilitado por software.
RB2
RB2
Porta de I/O digital. Pode ter Pull-up interno habilitado por software.
RB3
Porta de I/O digital. Pode ter Pull-up interno habilitado por software.
PGM
RB4
RB4
RB5
RB5
RB6/PGC
RB6
PGC
RB7
RA0/AN0
RA1/AN1
RA2/AN2/VREF-/ CVREF
RA3/AN3/VREF+
RA4/T0CKI/C1OUT
RA5/SS/AN4/C2OUT
RB0/INT
RB3/PGM
RB7/PGD
Microcontrolador PIC16F87x
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
PGD
RC0
T1OSO
T1CKI
RC1
T1OSI
CCP2
RC2
CCP1
RC3
RC2/CCP1
RC3/SCK/SCL
SCK
Entrada/sada de clock para comunicao serial SPI/I2C.
SCL
RC4/SDI/SDA
RC4
SDI
SDA
RC5
SDO
RC6
TX
CK
RC7
RX
DT
RD0
PSP0
RD1
PSP1
RD2
RC5/SDO
RC6/TX/CK
RC7/RX/DT
RD0/PSP0
RD1/PSP1
RD2/PSP2
RD3/PSP3
RD3
Microcontrolador PIC16F87x
PSP3
RD4
PSP4
RD5
PSP5
RD6
PSP6
RD7
PSP7
RE0
RD
AN5
Entrada analgica.
RE1
WR
AN6
Entrada analgica.
RE2
CS
AN7
Entrada analgica.
OSC1
CLKIN
OSC2
CLKOUT
MCLR
Vpp
Vss
Vss
VDD
VDD
RD4/PSP4
RD5/PSP5
RD6/PSP6
RD7/PSP7
RE0/RD/AN5
RE1/WR/AN6
RE2/CS/AN7
OSC1/CLKIN
OSC2/CLKOUT
MCLR/Vpp
Microcontrolador PIC16F87x
10
Microcontrolador de 40 pinos;
33 portas configurveis como entrada ou sada;
Cada porta, pode drenar no mximo 25 mA e fornecer no mximo 20 mA;
Freqncia mxima de operao de 4 a 20 MHz, depende das especificaes do chip;
Possui 15 fontes de interrupo, que so:
1. a interrupo externa;
2. interrupo por overflow do timer TMR0;
3. interrupo por overflow do timer TMR1;
4. interrupo por overflow do timer TMR2;
5. interrupo por mudana de nvel nos pinos da porta B (pinos RB7 a RB4);
6. interrupo por escrita completa na EEPROM;
7. interrupo da porta paralela (PSP);
8. interrupo dos conversores A/D;
9. interrupo de recepo da USART;
10. interrupo de transmisso da USART;
11. interrupo da comunicao serial (SPI e I2C);
12. interrupo do CCP1 (Capture/Compare/PWM);
13. interrupo do CCP2;
14. interrupo dos comparadores;
15. interrupo de coliso de dados (Bus Collision).
Memria de programao FLASH EPROM de 4 Kbytes (PIC16F874) ou 8 Kbytes
(PIC16F877). Pode-se escrever nessa memria cerca de 1000 vezes sem danific-la.
Memria de dados temporrios, RAM separada em bancos de memria. As primeiras
posies de cada banco so reservadas para registradores de funes especiais (SFR - Special
Function Registers). O restantes de cada banco so reservadas aos registradores de propsitos
gerais (GPR - General Purpose Registers). Todos os registradores da RAM so programveis
bit a bit;
Memria de dados permanentes, EEPROM de 256 Bytes. Pode-se escrever em cada bit dessa
memria cerca de 1 milho de vezes sem danific-la;
Via de programao com 14 bits e 35 instrues;
3 Mdulos de timer/counter ;
A faixa de tenso de trabalho est na faixa de 3 a 5,5 volts;
Baixa potncia de consumo - menos de 2 mA para 5 V, 4Mhz; cerca de 15 A para 2 V, 32
KHz e menos de 1A para 2 V (modo Standby);
Microcontrolador PIC16F87x
11
pode ser de 12, 14 ou 16 bits, dependendo do microcontrolador. Esse tipo de arquitetura permite
que enquanto uma instruo executada outra seja buscada na memria, o que torna o
processamento mais rpido. Alm disso, como o barramento de instrues maior do que 8 bits,
o OPCODE da instruo j inclui o dado e o local onde ela vai operar (quando necessrio), o que
significa que apenas uma posio de memria utilizada por instruo, economizando assim
muita memria de programa.
Desta forma, podemos observar que dentro da palavra o OPCODE, que pode ser de 12,
14 ou 16 bits, no sobra muito espao para o cdigo da instruo propriamente dito. Por isso, os
PICs utilizam uma tecnologia chamada RISC, que significa Reduced Instruction Set Computer
(Computador com conjunto de instrues reduzido). Desta forma, os PICs possuem cerca de 35
instrues (o nmero correto varia de acordo com o microcontrolador), muito menos que os
microcontroladores convencionais (CISC) que chegam a possuir mais de 100 instrues. Isto
torna o aprendizado muito mais fcil e dinmico, mas, por outro lado, implica no fato de que
muitas funes devem ser construdas, pois no possuem uma instruo direta, exigindo maior
habilidade do programador.
Nos microcontroladores PIC, o sinal de clock internamente dividido por quatro.
Portanto, para um clock externo de 4 MHz, temos um clock interno de 1 MHz, e
consequentemente, cada ciclo de mquina dura 1us.
A diviso do clock por quatro forma as fases Q1, Q2, Q3 e Q4. O program counter
(registrador PC) incrementado automaticamente na fase Q1 do ciclo de mquina e a instruo
seguinte buscada da memria de programa e armazenada no registrador de instrues no ciclo
Q4. Ela decodificada e executada no prximo ciclo, no intervalo de Q1 at Q4. Esta
caracterstica de buscar a informao num ciclo de mquina e execut-la no prximo
conhecida como PIPELINE. Ela permite que quase todas as instrues sejam executadas em
apenas um ciclo, gastando assim 1us (para um clock de 4 MHz) e tornando o sistema muito mais
rpido. As nicas excees referem-se s instrues que geram saltos no program counter,
como chamadas de rotinas e retornos. Ao executar essas instrues, o PIPELINE deve ser
primeiramente limpo para depois poder ser carregado novamente com o endereo correto,
consumindo para isso 2 ciclos de mquina. Esse PIPELINE facilmente implementado devido
arquitetura Havard.
12
Microcontrolador PIC16F87x
;**********************************************************************
list
p=16F877
; diretiva list para definir o processador
#include <p16F877.inc>
; definies de variveis do processador
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _XT_OSC
& _WRT_ENABLE_ON & _LVP_OFF & _CPD_OFF
; Variveis utilizadas pelo usurio
TEMP1 equ 20h
TEMP2 equ 21h
TEMP3 equ 22h
;**********************************************************************
13
Microcontrolador PIC16F87x
ORG 00H
; vetor de reset
goto Inicio
; vai para o inicio do programa
;**********************************************************************
;**********************************************************************
ORG 04H
; vetor de interrupo
retfie
; retorno de interrupo
;**********************************************************************
Inicio
bsf STATUS,RP0
movlw 06H
movwf ADCON1
clrf TRISA
clrf TRISB
clrf TRISC
clrf TRISD
clrf TRISE
bcf STATUS,RP0
loopmain
; Restante do cdigo do programa vai aqui
END
; diretiva de fim de programa
;**********************************************************************
14
Microcontrolador PIC16F87x
O banco 0 que selecionado zerando os bits RP0 (STATUS<5>) e RP1 (STATUS<6>). O banco
1 que selecionado setando o bit RP0. Os primeiros bytes da RAM so reservados aos
Registradores de Funes Especiais (SFR Special Function Registers), os bytes restantes de
cada banco so reservados aos Registradores de Propsitos Gerais (GPR General Purpose
Registers).
Tabela 2 Mapa da memria de dados do PIC16F628
End. Indir.
00h
End. Indir.
80h
End. Indir.
100h
End. Indir.
180h
TMR0
01h
OPTION REG
81h
TMR0
101h
OPTION REG
181h
PCL
02h
PCL
82h
PCL
102h
PCL
182h
STATUS
03h
STATUS
83h
STATUS
103h
STATUS
183h
FSR
04h
FSR
84h
FSR
104h
FSR
PORTA
05h
TRISA
85h
PORTB
06h
TRISB
86h
PORTC
07h
TRISC
87h
107h
187h
PORTD
08h
TRISD
88h
108h
188h
PORTE
09h
TRISE
89h
109h
189h
PCLATH
0Ah
PCLATH
8Ah
PCLATH
10Ah
PCLATH
INTCON
0Bh
INTCON
8Bh
INTCON
10Bh
INTCON
18Bh
PIR1
0Ch
PIE1
8Ch
EEDATA
10Ch
EECON1
18Ch
EECON2
18Dh
105h
PORTB
106h
184h
185h
TRISB
186h
18Ah
PIR2
0Dh
PIE2
8Dh
EEADR
10Dh
TMR1L
0Eh
PCON
8Eh
EEDATH
10Eh
18Eh
TMR1H
0Fh
8Fh
EEADRH
10Fh
18Fh
T1CON
10h
90h
TMR2
11h
SSPCON2
91h
T2CON
12h
PR2
92h
SSPBUF
13h
SSPADD
93h
SSPCON
14h
SSPSTAT
94h
CCPR1L
15h
95h
CCPR1H
16h
96h
CCP1CON
17h
97h
RCSTA
18h
TXSTA
98h
TSREG
19h
SPBRG
99h
TXREG
1Ah
9Ah
CCPR2L
1Bh
9Bh
CCPR2H
1Ch
9Ch
CCP2CON
1Dh
ADRESH
1Eh
CMCON
ADCON0
1Fh
CVRCON
16 BYTES
REGISTRADORES
DE PROPSITO
GERAL
9Dh
20h
REGISTRADORE
S DE PROPSITO
GERAL
REGISTRADORES DE
PROPSITO GERAL
16 BYTES
9Eh
9Fh
11Fh
A0h
120h
REGISTRADORES DE
PROPSITO GERAL
REGISTRADORES
DE PROPSITO
GERAL
80 BYTES
14Fh
80 BYTES
150h
96 BYTES
EFh
ESPELHO DO
BANCO 0
BANCO 0
BANCO 1
16Fh
F0h
170h
ESPELHO DO BANCO 0
BANCO 2
1EFh
ESPELHO DO
BANCO 0
BANCO 3
1F0h
Microcontrolador PIC16F87x
15
Microcontrolador PIC16F87x
16
Registradores:
Registrador W (Acumulador ou registrador de trabalho) e a ALU (Unidade Lgica e
Aritmtica)
A ALU (Arithmetic and Logic Unit) ou ULA (Unidade Lgica e Aritmtica) a
componente mais complexa do PIC por conter todos os circuitos destinados a desenvolver as
funes de clculo e manipulao de dados durante a execuo de um programa. A ALU uma
componente presente em todos os microprocessadores e dessa depende diretamente a capacidade
de clculo do micro em si.
A ALU do PIC16F87x est preparada para operar com 8 bits, ou seja valor numrico no
maior do que 255. Existem processadores com ALU de 16, 32, 64 bits ou mais. A famlia Intel
Pentium, por exemplo, dispe de uma ALU de 64 bits. A capacidade de clculo presente nesses
17
Microcontrolador PIC16F87x
7 bits para especificar em qual localizao de memria queremos inserir o nosso valor,
seja:
movlw
movwf
01H
0CH
onde a primeira instruo colocar no registrador W o valor 01H com a instruo MOVe Literal
para W e depois "moveremos" (copiaremos) esse valor para a localizao 0CH com a instruo
MOVe W para F.
Registrador STATUS (endereo 03h e 83h)
Esse registrador serve para mostrar o estado da ULA (bits de Carry e Zero), a forma do
ltimo reset e tambm para configurar a pgina de programao atual, quando necessrio.
N dos bits
Bit 7
bit 6
Bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
Bits
IRP
RP1
RP0
/TO
/PD
DC
Power on reset
R/W-0
R/W-0
R/W-0
R-1
R-1
R/W-x
R/W-x
R/W-x
18
Microcontrolador PIC16F87x
P/ bits 6-5=00 implica seleo do banco 0 (00 - 7Fh), para bits 6-5=01 implica seleo do banco
1 (80h - FFh), para bits 6-5=10 implica seleo do banco 2 (100 - 17Fh) e, para bits 6-5=11
implica seleo do banco 3 (180h - 1FFh). obs.: Cada banco de 128 bytes e somente o bit RP0
usado no PIC16F628 (considerar RP1=0).
Bit 4: /TO, bit de Time-Out. Vai a 1 aps power-up, instruo CLRWDT ou instruo SLEEP.
Vai a 0 aps ocorrer uma interrupo de WDT (Watch Dog Timer).
Bit 3: /PD, bit de Power-Down. Vai a 1 aps power-up ou instruo CLRWDT. Vai a 0 na
execuo da instruo SLEEP.
Bit 2: Z, bit de Zero. Vai a 1 quando o resultado de uma operao aritmtica ou lgica zero.
Vai a 0 quando o resultado de uma operao aritmtica ou lgica diferente de zero.
Bit 1: DC, Bit de Digit Carry/Borrow. Este bit vai a 1 quando ocorre um estouro dos 4 bits
inferiores de um registrador numa instruo de soma (addlw ou addwf) ou quando a subtrao
(sublw ou subwf) entre dois nibles inferiores negativa. zero quando a ltima operao na
ULA no ocasionou um estouro de dgito.
Bit 0: C, Bit de Carry/Borrow. Este bit vai a 1 quando ocorre um estouro do byte de um
registrador numa instruo de soma (addlw ou addwf) ou quando a subtrao (sublw ou subwf)
entre dois bytes positiva. Note que no caso da subtrao o Carry trabalha com a lgica
invertida. Obs.: As instrues de rotao de bits (rlf ou rrf) tambm alteram o valor do Carry.
Registrador PORTA (endereo 05H)
N dos bits
Bit 7
bit 6
Bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
Bits
RA5
RA4
RA3
RA2
RA1
RA0
Power on reset
R\W-x
R\W-x
R/W-x
R/W-x
R/W-x
R/W-x
Bit 7
bit 6
Bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
Bits
RB7
RB6
RB5
RB4
RB3
RB2
RB1
RB0/INT
Power on reset
R/W-x
R/W-x
R/W-x
R\W-x
R/W-x
R/W-x
R/W-x
R/W-x
Bit 7
bit 6
Bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
Bits
RC7
RC6
RC5
RC4
RC3
RC2
RC1
RC0
Power on reset
R/W-x
R/W-x
R/W-x
R\W-x
R/W-x
R/W-x
R/W-x
R/W-x
19
Microcontrolador PIC16F87x
Bit 7
bit 6
Bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
Bits
RD7
RD6
RD5
RD4
RD3
RD2
RD1
RD0
Power on reset
R/W-x
R/W-x
R/W-x
R\W-x
R/W-x
R/W-x
R/W-x
R/W-x
Bit 7
bit 6
Bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
Bits
RE2
RE1
RE0
Power on reset
R/W-x
R/W-x
R/W-x
bit 7
bit 6
Bit 5
Bit 4
bit 3
bit 2
bit 1
bit 0
Bits
TRISA4
TRISA3
TRISA2
TRISA1
TRISA0
Power on reset
R\W-1
R/W-1
R/W-1
R/W-1
R/W-1
bit 7
Bit 6
Bit 5
Bit 4
bit 3
bit 2
bit 1
bit 0
Bits
TRISB7
TRISB6
TRISB5
TRISB4
TRISB3
TRISB2
TRISB1
TRISB0
Power on reset
R/W-1
R/W-1
R/W-1
R\W-1
R/W-1
R/W-1
R/W-1
R/W-1
20
Microcontrolador PIC16F87x
bit 7
Bit 6
Bit 5
Bit 4
bit 3
bit 2
bit 1
bit 0
Bits
TRISC7
TRISC6
TRISC5
TRISC4
TRISC3
TRISC2
TRISC1
TRISC0
Power on reset
R/W-1
R/W-1
R/W-1
R\W-1
R/W-1
R/W-1
R/W-1
R/W-1
bit 7
Bit 6
Bit 5
Bit 4
bit 3
bit 2
bit 1
bit 0
Bits
TRISD7
TRISD6
TRISD5
TRISD4
TRISD3
TRISD2
TRISD1
TRISD0
Power on reset
R/W-1
R/W-1
R/W-1
R\W-1
R/W-1
R/W-1
R/W-1
R/W-1
bit 7
Bit 6
Bit 5
Bit 4
bit 3
bit 2
bit 1
bit 0
Bits
TRISE2
TRISE1
TRISE0
Power on reset
R/W-1
R/W-1
R/W-1
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
Bits
Power on reset
R/W-x
R/W-x
R/W-x
R/W-x
R/W-x
R/W-x
R/W-x
R/W-x
21
Microcontrolador PIC16F87x
Bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
Bits
Power on reset
R/W-x
R/W-x
R/W-x
R/W-x
R/W-x
R/W-x
R/W-x
R/W-x
Bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
Bits
Power on reset
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
Bit 7
bit 6
Bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
Bits
Power on reset
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
Microcontrolador PIC16F87x
22
00H
10
Point1
00H
10
Point2
Point1
11
Neste caso o PIC, aps ter executado movlw 10 passa a executar o call Point2. Antes de
desviar memoriza no Stack o endereo 0002H, ou seja, a prxima localizao ao call. Passa
ento a executar a instruo movlw 11, memorizada em correspondncia ao label Point2. E neste
ponto encontra uma nova instruo o return que, como podemos deduzir de seu nome, permite o
"RETORNO", ou seja, retorne a execuo da instruo imediatamente aps o call. Esta operao
denominada de: "chamada a subrotina", ou seja, uma interrupo momentnea do fluxo normal
do programa para "chamar" a execuo de uma srie de instrues, para depois retornar a
execuo normal do programa. Para poder retornar para onde havia interrompido, o PIC utiliza o
ltimo valor armazenado no Stack e o coloca de novo no Program Counter. A palavra stack em
ingls significa "pilha" e por esse fato possvel empilhar um endereo sobre o outro para ser
recuperado quando necessrio. Este tipo de memorizao era antes denominado de LIFO do
23
Microcontrolador PIC16F87x
ingls Last In First Out, onde o ltimo elemento armazenado (last in) deve necessariamente ser
o primeiro a sair (last out). Graas ao Stack possvel efetuar vrios call, um dentro do outro, e
manter sempre o retorno ao fluxo do programa quando se encontra uma instruo return.
Vejamos um outro exemplo:
ORG
Point1
movlw
call
goto
Point2
movlw
call
return
Point3
movlw
return
00H
10
Point2
Point1
11
Point3
12
No exemplo acima a rotina principal Point1 promove a chamada do primeiro call para
subrotina Point2, a subrotina Point2 chama outra subrotina no caso Point3, este ltimo por sua
vez, encontra um returm e retorna para Point2 que encontra o outro return e retorna para a
execuo da rotina Point1 que no caso a principal. Os endereos a serem memorizados no
stack so dois e quando vir a encontrar um segundo call procurar pelo return correspondente ao
primeiro e assim por diante. Diz-se ento que o call "nidificante", ou seja, um dentro do outro.
O PIC16F87X dispe de um stack de 8 nveis, ou seja um Stack que consegue armazenar
no mximo 8 chamadas subrotina. importante assegurar-se, durante a formulao de um
programa que, se tenha sempre uma instruo returm em correspondncia a um call para evitar o
perigo de desalinhamento do stack que em execuo pode gerar erros que dificilmente
encontraremos.
Registrador EEDATA (endereo 08h)
EEDATA o registrador de dados da EEPROM. Ele possui duas funes distintas: nas
operaes de escrita da EEPROM, ele deve ser preenchido com o dado a ser armazenado, j nas
operaes de leitura, ele armazena o dado lido.
N dos bits
Bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
Bits
Power on reset
R/W-x
R/W-x
R/W-x
R/W-x
R/W-x
R/W-x
R/W-x
R/W-x
24
Microcontrolador PIC16F87x
Bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
Bits
Power on reset
R/W-x
R/W-x
R/W-x
R/W-x
R/W-x
R/W-x
R/W-x
R/W-x
Bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
GIE
EEIE
T0IE
INTE
RBIE
T0IF
INTF
RBIF
Power-on-reset
R/W-0
R/W-0
R/W-0
R\W-0
R/W-0
R/W-0
R/W-0
R/W-x
25
Microcontrolador PIC16F87x
Bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
Bits
/RBPU
INTEDG
T0CS
T0SE
PSA
PS2
PS1
PS0
Power on reset
R/W-1
R/W-1
R/W-1
R\W-1
R/W-1
R/W-1
R/W-1
R/W-1
PS2
PS1
PS0
Divisor p/ o TMR0
Divisor p/ o WDT
16
32
16
64
32
128
64
256
128
26
Microcontrolador PIC16F87x
bit 7
Bit 6
Bit 5
Bit 4
bit 3
bit 2
bit 1
bit 0
Bits
EEIF
WRERR
WREN
WR
RD
Power on reset
R\W-0
R/W-x
R/W-0
R/S-0
R/S-0
27
Microcontrolador PIC16F87x
Observaes quanto aos termos utilizados na construo dos nomes das instrues e seus
argumentos:
; Endereo de TRISB
ou ento, referenciar o mesmo registrador com o seu nome simblico, neste caso tendo que ter a
certeza de ter inserido a diretiva INCLUDE "P16F628.INC" (mostrado no Apndice A desta
apostila):
movlw B'00000000'
movwf TRISB
Para facilitar o estudo das instrues do PIC, organizamos a seguir duas tabelas. Uma
com as instrues em ordem alfabtica e a outra com as instrues divididas em quatro grupos,
conforme as suas aplicaes:
Controles.
Microcontrolador PIC16F87x
28
29
Microcontrolador PIC16F87x
Argumentos
Descrio
f,d
f,d
F
f,d
f,d
f,d
30
Microcontrolador PIC16F87x
Descrio: Esta instruo soma o valor contido no acumulador W com o valor contido no
registrador endereado pelo parmetro f.
Exemplo: Vejamos um exemplo de soma entre dois registradores:
add1
equ
0CH
add2
equ
0DH
org
00H
movlw 10
;Primeiro somador = 10
movwf add1
movlw 15
;Segundo somador = 15
movwf add2
movf
add1,W
;W = add1
addwf
add2,W
;W = add1 + add2
3) ANDLW k
; Efetua o AND bit a bit entre W e uma constante k
Descrio: Efetua o AND bit a bit entre o valor contido no acumulador W e o valor constante k.
O resultado ser memorizado no acumulador.
Exemplo:
movlw 10101010B
andlw
11110000B
...
Depois de haver executado este trecho de programa o acumulador W ir valer
10100000B.
4) ANDWF f,d
; Efetua o AND bit a bit entre o valor contido em W e o valor
contido no registrador F.
Descrio: Esta instruo efetua o AND bit a bit entre o valor contido no acumulador W e o
valor contido no registrador endereado pelo parmetro f.
Exemplo: Freqentemente o AND ser utilizado para mascarar o valor de algum bit dentro de
um registrador. Se por exemplo quisssemos extrair do nmero binrio 01010101B os quatro
bits menos significativo a fim de obter o seguinte valor 00000101B, bastar preparar uma
mscara do tipo 00001111B e fazer o AND com o nosso valor, vejamos como:
movlw 01010101B ; Armazena em W o valor binrio
movwf 0CH
; Usa o endereo 0CH para armazenar o valor inicial da
mscara
movlw 00001111B ; Prepara a mscara do bit
andwf 0CH,W
; Efetua o AND e memoriza o resultado no acumulador W
O resultado em W ser 00000101B como descrito.
Microcontrolador PIC16F87x
31
W = 00001111 AND
f = 01010101 =
---------------W = 00000101
5) BCF f,b
; Zera o bit b do registrador F
Descrio: Esta instruo zera o bit b do registrador no endereo f .
Exemplo:
parm1
equ
0CH
movlw 11111111B ;Valor inicial
movwf parm1
bcf
parm1,0
Ao trmino do programa o registrador parm1 ser 11111110B.
6) BSF f,b
;Coloca em nvel alto o bit b no registrador F.
Descrio: Esta instruo coloca em um no bit b do registrador que est no endereo f.
Exemplo:
parm1 equ
0CH
movlw 00000000B ;Valore inicial
movwf parm1
bsf
parm1,0 ;D0=1
Ao terminar o programa o registrador parm1 ser 00000001B.
7) BTFSC f,b
; Pula a prxima instruo se o bit b do registrador F for 0
Descrio: Testa o bit b contido no registrador no endereo f e pula a prxima instruo se este
valer 0.
Exemplo:
parm1 equ
0CH
org
00H
movlw 11111110B ;Valor inicial
movwf parm1
loop
btfsc parm1,0
;bit0 = 0? Se for, pular prxima instruo.
goto
loop
;Se no, ficar no loop
Este programa executa um loop infinito. Entretanto, o mesmo programa no executar o
loop se substituirmos a instruo: movlw
11111110B
pela instruo: movlw
11111111B.
8) BTFSS f,b
; Pula a prxima instruo se o bit b do registrador F for 1
Descrio: Testa o bit b contido no registrador do endereo f e pula a instruo seguinte se este
for 1.
Exemplo:
parm1 equ
0CH
32
Microcontrolador PIC16F87x
org
00H
movlw 11111111B ;Valor inicial
movwf parm1
loop
btfss parm1,0 ;bit0 = 1 ? Se for, pular prxima instruo.
goto loop
;Se no, ficar no loop
Este programa executa um loop infinito. O mesmo programa no executar o loop se
substituirmos a instruo:
movlw 11111111B pela instruo: movlw 11111110B.
9) CALL k
; Chamada a uma subrotina
Descrio: Chama uma subrotina memorizada no endereo k. O parmetro k pode ser
especificado utilizando-se diretamente o valor numrico do endereo ou ento o relativo label.
Exemplo:
#define
LED1
1
org
00H
call
ledOn
; Chama a rotina ledOn
ledOn
btfsc PORTB,LED1
return
Quando a CPU do PIC encontra uma instruo CALL, memoriza no STACK o valor do
registrador PC+1 de modo a poder retornar para instruo aps o CALL, em seguida
escreve no PC o endereo da subrotina pulando a execuo desta ultima. O valor original
do PC ser recuperado pela subrotina com a execuo da instruo de retorno RETURN
ou RETLW.
No PIC16F628 esto disponveis 8 nveis de stack (pilha), ou seja a instruo CALL
dentro de uma subrotina pode ter no mximo 8 chamadas ou 8 nveis. As demais
chamadas sero sobrepostas s primeiras.
9) CLRF f
; Zera o registrador F
Descrio: Esta instruo zera o valor contido no registrador endereado pelo parmetro f.
Exemplo: Se quisermos zerar o registrador TMR0 no qual o endereo 01H hexadecimal, a
instruo a se executar ser:
clrf 01H
Ou, se no endereo do nosso cdigo incluirmos o arquivo P16F628.INC, poderemos utilizar
o nome simblico do registrador TMR0, ou seja, clrf TMR0.
11) CLRW
; Zera o registrador W
Descrio: Zera o valor contido no registrador W.
Exemplo:
clrw
12) CLRWDT
; Limpa o registrador WDT para no acontecer o Reset
Descrio: Esta instruo deve ser utilizada quando programarmos o PIC com a opo
Watchdog (fusvel WDTE). Nesta modalidade o PIC habilita um timer que, uma vez
Microcontrolador PIC16F87x
33
transcorrido um determinado tempo, efetua o reset do mesmo. Para evitar o reset do nosso
programa deveremos executar ciclicamente a instruo CLRWDT para zerar o timer antes deste
tempo. Se no zerarmos o WDT neste tempo, o circuito de watchdog (do ingls co de guarda)
interpretar este como um bloco de programa em execuo e efetuar o reset para bloquea-lo.
Exemplo:
org
00H
loop
clrwdt
goto loop
13) COMF f,d
; Efetua o complemento do registrador F
Descrio: Esta instruo efetua o complemento do valor contido no registrador
endereado pelo parmetro f.
Exemplo:
parm1 equ
0CH
org
00H
movlw 01010101B
movwf parm1
comf parm1,F
Ao trmino da execuo do programa o valor do registrador parm1 ser 10101010B.
14) DECF f,d
; Decrementa o contedo do registrador F
Descrio: Esta instruo decrementa o contedo do registrador endereado pelo parmetro f.
Exemplo:
movlw 23H
;Escreve em W o valor 23H
movwf 0CH
;Copia no registrador 0CH o valor de W
decf
0CH,F
;Decremente o valor contido no registrador 0CH
15) DECFSZ f,b
; Decrementa o valor do registrador f e pula a prxima instruo se o
resultado for zero.
Descrio: Decrementa o valor de registrador do endereo f e se o resultado for zero pula a
prxima instruo. Exemplo:
counter equ
0CH
org
00H
movlw 10
;counter = 10
movwf counter
loop
decfsz counter,F
;counter = counter 1, se counter = 0, pula prxima instruo
goto loop
;se no, continua no loop
Este programa executa 10 vezes a instruo decfsz at que counter seja = 0.
16) GOTO k
; Desvia a execuo do programa para o endereo especificado k.
Descrio: Determina o desvio incondicional do programa em execuo para o endereo k. O
parmetro k pode ser especificado utilizando-se diretamente um valor numrico do endereo ou
ento o relativo label.
Microcontrolador PIC16F87x
34
Exemplo:
org
00H
loop
goto loop
Este programa executa um cilclo (loop) infinito.
17) INCF f,d
; Incrementa o valor do registrador no endereo F.
Descrio: Incrementa o contedo do registrador no endereo f.
Exemplo:
movlw 23H
;Escreve em W o valor 23H
movwf 0CH
;Copia no registrador 0CH o valor de W
incf
0CH,F
;Incrementa de 1 valor contido no registrador 0CH
Microcontrolador PIC16F87x
35
movwf parm1
movlw 11111111B
iorwf
parm1,F
Ao trmino do programa o valor do registrador parm1 ser 11111111B.
21) MOVLW k
; Copia para W o valor constante k
Descrio: Passa ao acumulador W um valor constante k.
Exemplo:
org
00H
movlw 20
Aps ter executado este programa o acumulador W ir a 20.
22) MOVF f,d
;Copia o contedo do registrador f para o destino d
Descrio: Esta instruo copia o contedo do registrador endereado pelo parmetro f para o
parmetro de destino d. Exemplo: O exemplo a seguir copia o valor contido no registrador do
endereo 0CH no acumulador W:
movf 0CH,W
23) MOVWF f
; Copia o contedo do registrador W para o registrador F
Descrio: Esta instruo copia o contedo do registrador W no registrador de parmetro f.
Exemplo: Para copia o valor 10H no registrador TMR0. A instruo a se executar ser a
seguinte:
movlw 10H
;Escreve no registrador W o valor 10H
movwf TMR0
;e o memoriza no registrador TMR0
24) NOP
; Nenhuma operao
Descrio: Esta instruo no executa nenhuma operao mas til para inserir atrasos de um
ciclo de maquina ou mais.
Exemplo:
nop
nop
Os dois nops acima vai provocar um atraso de 2 uS se utilizarmos um cristal de 4MHz no nosso
hardware.
25) RETFIE
; Retorna de uma rotina de interrupo
Descrio: Esta instruo deve ser colocada no trmino de cada subrotina de controle de
interrupes para retornar o controle ao programa principal.
Exemplo:
org 00H
loop
goto loop ;Loop infinito
org 04H ;Interrupt vector
intHandler
retfie
;Retorna da interrupo
Neste cdigo o programa principal executa um loop infinito. Se habilitarmos uma das
interrupes do 16F628 ele no apenas verificar o controle como ir automaticamente ao
programa alocado no endereo 04H (no exemplo intHandler), a instruo RETFIE
determinar ento o retorno ao loop principal.
Microcontrolador PIC16F87x
36
26) RETLW k
; Retorna de uma rotina com uma constante k em W
Descrio: Esta instruo retorna o controle de uma rotina ao programa principal. A diferena
desta em relao instruo RETURN que retflw permite retornar, atravs do acumulador W,
o valor k ao programa principal.
Exemplo:
rtc equ
0CH
org
00H
call
mySub1
movwf rtc
...
mySub1
nop
retlw 10
Uma vez executado esse programa ele memorizar no registrador rtc o valor 10 passado
pela subrotina mySub1.
27) RETURN
; Retorna de uma rotina
Descrio: Esta instruo deve ser inserida no termino de cada subrotina para retornar a
execuo ao programa principal.
Exemplo:
org 00H
call mySub1
....
mySub1
nop
return
Nota: No PIC16F628 podemos fazer apenas 8 chamadas a subrotinas, do tipo:
org 00H
call mySub1
....
mySub1
call mySub2
return
mySub2
call mySub3
return
mySub3
return
37
Microcontrolador PIC16F87x
BIT7
BIT6
BIT5
BIT4
BIT3
BIT2
BIT1
BIT0
CARRY
BIT6
BIT5
BIT4
BIT3
BIT2
BIT1
BIT0
CARRY
Microcontrolador PIC16F87x
38
sleep
31) SUBLW k
; Subtraia de k o valor em W
Descrio: Subtrai a constante k do valor memorizado no acumulador W.
Exemplo:
org 00H
start
movlw
10
; W = 10
sublw
12
; W = 12 - 10
...
Depois de haver executado este programa o acumulador W ser 2.
32) SUBWF f,d
;Subtraia o valor contido em W do valor contido no registrador F.
Descrio: Esta instruo subtrai o valor contido no registrador W do valor contido no
registrador endereado pelo parmetro f.
Exemplo: Analisando um exemplo extrado do datasheet da Microchip:
Se inserirmos a instruo:
subwf REG1,F
Onde reg1 o endereo de um registrador qualquer especificado com a diretiva:
REG1 RES 1
Para o valor inicial de REG1=3 e W=2, teremos REG1=1 e C=1 porque o resultado
positivo.
Para o valor inicial de REG1=2 e W=2, teremos REG1=0 e C=1 porque o resultado
positivo.
Para o valor inicial de REG1=1 e W=2, teremos REG1=FFH ou seja -1 e C=0 porque o
resultado negativo.
33) SWAPF f,d
; Troca de nibbles.
Descrio: Troca o valor dos quatro bits mais significativo (D7-D4) contido no registrador do
endereo f com os quatro bits menos significativo(D3-D0) do mesmo.
Exemplo:
movlw 11110000B
;Valor inicial
swapf
parm1,F
Ao trmino do programa o registrador parm1 ser 00001111B.
34) XORLW k
; Efetua o OR exclusivo entre W e uma constante k
Descrio: Efetua o OR exclusivo entre o valor contido no acumulador W e o valor constante k.
Exemplo:
org
00H
start
movlw 00000000B
xorlw 11110000B
...
Aps haver executado este programa o acumulador W ser 11110000B.
35) XORWF f,d ; Efetua o OR exclusivo entre o valor contido em W e o valor contido no
registrador
Descrio: Esta instruo efetua o OR exclusivo(XOR) entre o valor contido no acumulador W
e o valor contido no registrador endereado pelo parmetro f.
Exemplo: Efetuar um XOR entre o registrador W e o registrador REG1 por ns definido no
endereo 0CH com a diretiva:
Microcontrolador PIC16F87x
39
Microcontrolador PIC16F87x
40
A interrupo uma tcnica particular do PIC que permite interceptar eventos externos
ao programa em execuo, interrompe momentaneamente a operao do programa em
andamento, controla o evento com uma subrotina apropriada e retorna para a execuo do
programa.
Fazendo uma analogia, podemos dizer que a interrupo para o PIC o que para ns
representaria uma chamada telefnica. Para recebermos um telefonema no precisamos nos
preocupar em ficar levantando continuamente o monofone do gancho para ver se tem algum
querendo falar conosco, mas podemos tranqilamente aguardar pelo toque da campainha quando
algum nos chamar. Quando ento apenas levantamos o monofone do gancho e interrompemos
momentaneamente o sistema de chamada, respondemos ao telefonema e, uma vez terminada a
conversao, retornamos o monofone ao gancho, ou seja, do ponto onde havamos interrompido.
evidente que assim como extremamente mais eficaz se ter uma campainha conectada
ao telefone extremamente mais eficaz controlar nosso evento com uma interrupo ao invs de
diretamente pelo programa.
O PIC16F87x esta preparado para controlar interrupes ao final de 15 eventos
diferentes, vejamos quais so:
Microcontrolador PIC16F87x
41
42
Microcontrolador PIC16F87x
GIE
EEIE
T0IE
INTE
RBIE
T0IF
INTF
RBIF
INTE (bit 4) se este bit estiver em 1 habilitar a interrupo de troca de estado sobre a
linha RB0
RBIE (bit 3) se este bit estiver em 1 habilitar a interrupo de troca de estado sobre uma
das linhas de RB4 a RB7
EEIE (bit 6) se este bit estiver em 1 habilitar a interrupo de final de escrita sobre um
endereo da EEPROM
GIE (bit 7) bit de habilitao geral de interrupo. Esse bit deve ser setado em 1 antes
dos demais.
Microcontrolador PIC16F87x
43
chamada do endereo 04H, no registrador INTCON est presente o flag que indica qual o evento
que gerou a interrupo vejamos:
RBIF (bit 0), se for 1 porque ocorreu uma interrupo de troca de estado de uma das
linhas de RB4 a RB7.
Microcontrolador PIC16F87x
44
10
TMR0
loop
goto
loop
o registrador TMR0 ser incrementado pelo hardware interno do PIC durante a execuo do
loop. Uma vez atingido o valor 255 o registrador TMR0 ser zerado automaticamente
recomeando ento a contagem, mas no do valor originalmente imposto e sim do zero.
A freqncia diretamente proporcional a freqncia de clock aplicada ao chip e pode
ser modificada programando-se oportunamente os seus bits de configurao. Na figura seguinte
est representada a cadeia de blocos interno do PIC que determina o funcionamento do
registrador TMR0.
Microcontrolador PIC16F87x
45
46
Microcontrolador PIC16F87x
Desta vez ser o sinal aplicado ao pino TOCKI do PIC a ser enviado diretamente ao
contador TMR0 determinando a freqncia de contagem. Aplicando-se por exemplo a este pino
uma freqncia par de 100Hz obteremos uma de contagem igual a cem incrementos por
segundo.
A presena da porta lgica XOR (exclusive OR) na entrada TOCKI do PIC permite
determinar o caminho do bit TOSE do registrador OPTION se o contador TMR0 deve ser
incrementado na descida do pulso (TOSE=1) ou na subida do pulso (TOSE=0) do sinal externo
aplicado.
Na figura seguinte est representada a correspondncia entre a cadncia do sinal externo
e o valor que assume o contador TMR0 :
O ltimo bloco a ser analisado para poder utilizar complemente o registrador TMR0 o
PRESCALER. Se configurar-mos o bit PSA do registrador OPTION em 0 enviamos ao
registrador TMR0 o sinal de sada do PRESCALER como visvel na figura abaixo:
47
Microcontrolador PIC16F87x
PS2
PS1
PS0
Divisor
500.000 = 4MHz/(4 * 2)
250.000 = 4MHz/(4 * 4)
125.000 = 4MHz/(4 * 8)
16
32
64
128
256
Microcontrolador PIC16F87x
48
49
Microcontrolador PIC16F87x
como um bloqueio de programa por motivo qualquer, e ser efetuado o reset da CPU.
O perodo mnimo para que a CPU seja resetada de cerca de 18ms (isso depender da
temperatura e da tenso de alimentao). Porem possvel programar o PRESCALER para
Wachtdog Timer para obter um tempo de retardo maior com cerca de 2 a 3 segundos.
Para configurar o Wachtdog Timer devemos habilitar na fase de programao o bit
WDTE do byte de configurao (no __CONFIG, incio do programa) .
Para ajustar o PRESCALER ao WDT, devemos agir sobre o bit PSA do registrador
OPTION_REG. O bit PSA dever setado em 1 com a instruo:
BSF OPTION_REG,PSA
Caso contrrio o prescaler estar ligado ao TIMER 0. Obviamente ajustando o prescaler
ao WTD no ser possvel ajust-lo para TIMER 0 e vice-versa.
Intervindo sobre o valor do bit PS0, PS1 e PS2 do mesmo registrador OPTION_REG
podemos obter diversos intervalos de retardo. A habilitao correta dever ser feita tendo em
conta o mximo retardo que podemos obter dentro do nosso programa entre a execuo de duas
instrues CLRWD sucessivas.
Na tabela seguinte est representada a correspondncia entre os valores destes bit's e
os intervalos que obteremos.
PS2
PS1
PS0
Divisor
18ms
36ms
72ms
144ms
16
288ms
32
576ms
64
1.152s
128
2.304s
50
Microcontrolador PIC16F87x
ciclo de mquina. EEDATA segurar o valor at que uma outra leitura seja ativada ou
at que seja escrita em EEDATA um outro valor diferente.
Exemplo:
bcf
STATUS,RP0
movf
movwf
bsf
bsf
bcf
movf
Endereco,W
EEADR
STATUS,RP0
EECON1,RD
STATUS,RP0
EEDATA,W
1.
2.
3.
4.
Exemplo: bcf
movf
movwf
movf
Microcontrolador PIC16F87x
51
movwf EEDATA
; Escrita do dado em EEDATA
bsf
STATUS,RP0 ; Vai para o banco 1
;programao da seqncia de controle
bsf
EECOM1,WREN
movlw 55h
; W = 55h
movwf EECON2
movlw 0Aah
; W = AAh
movwf EECON2
; Escrita do dado em EEDATA
; fim da programao da seqncia de controle
bsf
EECON1,WR ; Habilita a escrita
bcf
STATUS,RP0 ; Retorna ao banco 0
Obs.: Para economizar energia, recomenda-se colocar os bits 6 e 7 de EEADR (EEADR<7:6>)
desligados (clear). Com eles setados o consumo cerca de 400 A, j com eles clear o
consumo cerca de 150 A.
Microcontrolador PIC16F87x
52
BIBLIOGRAFIA
Barra de Ferramentas
Menu Principal
Janela do
gerenciador
Microcontrolador PIC16F87x
54
O Projeto no MpLab
Uma vez que voc abriu o MPLAB a primeira coisa a se fazer criar um projeto ou
abrir um projeto criado anteriormente. O projeto que vamos criar ter o nome de
LED.MCP. importante ressaltar que o projeto e o cdigo-fonte SEQLEDS.ASM tm
que ser salvos na mesma pasta.
No menu principal, na opo Project o MPLAB possui o Project Wizard que nos
facilita o trabalho de criao do projeto. A Figura 2 mostra a janela inicial do Project
Wizard.
55
Microcontrolador PIC16F87x
56
Microcontrolador PIC16F87x
J a linguagem C, tem prontos comandos que realizam, muitas vezes, mais de uma
instruo assembly.
A vantagem de usar Assembly que a arquitetura interna do microcontrolador
estudado fica muito clara, alm do desenvolvimento de programas menores e mais rpidos.
57
Microcontrolador PIC16F87x
58
Microcontrolador PIC16F87x
59
Microcontrolador PIC16F87x
60
Microcontrolador PIC16F87x
Compilando o Projeto
BUILD SUCCEEDED
61
Microcontrolador PIC16F87x
62
Microcontrolador PIC16F87x
opes Step InTo (execuo passo-a-passo). A tecla <F7> tambm realiza essa tarefa.
A Figura 10 mostra a como realizada a execuo passo-a-passo.
63
Microcontrolador PIC16F87x
64
Microcontrolador PIC16F87x
65
Microcontrolador PIC16F87x
66
Microcontrolador PIC16F87x
A Figura 14 mostra a janela que faz o controle dos estmulos externos. Para
acrescentar um pino que foi previamente configurado como entrada, basta clicar em Add
Row e configurar de acordo com a necessidade as colunas Pin e Action. A tecla Fire
habilita o estimulo externo.
Vamos ver agora explicaes mais detalhadas sobre as portas de entrada e sada e os
respectivos registradores de direo de dados: PORTA, PORTB, TRISA e TRISB.
Iniciaremos com o grupo RA0, RA1, RA2 e RA3 na qual representamos, na figura
seguinte, o esquema do estado de escrita extrado do data sheet da Microchip
(www.microchip.com):
Como dito acima, a configurao de uma linha como entrada ou sada depende do estado
do bit no registrador TRIS (TRISA para o PORTA e TRISB para o PORTB).
Pegaremos como exemplo a linha RA0 e analisaremos o funcionamento do estado de
sada seja quando a mesma funciona como entrada ou como sada.
Funcionamento como entrada
Para configurar a linha RA0 como entrada, devemos colocar em 1 o bit 0 do registrador
Microcontrolador PIC16F87x
68
TRISA,0
bcf
PORTA,0
obteremos a conduo do transistor P e portanto ir a +5 volts a linha RA0. Nesta condio ser
sempre possvel rever o valor enviado sobre a linha atravs do circuito de entrada.
Estado de sada da linha RA4
Analisaremos agora o funcionamento do estado de sada da linha RA4 que diferente de
todas as outras linhas de I/O enquanto compartilha o mesmo pino do PIC16c84 com o TOCKI o
qual iremos analisar no prximo passo.
Na figura seguinte est descrito o esquema de blocos do estado de sada extrado do data
sheet Microchip:
69
Microcontrolador PIC16F87x
Microcontrolador PIC16F87x
70
Microcontrolador PIC16F87x
71
Microcontrolador PIC16F87x
72
Teclado push-boton;
Display de 7 segmentos;
Controle de rels;
Conversor A/D;
PWM;
Projeto de frequencmetro.
Na figura dada abaixo mostra-se a interligao do PIC16F87x com esses dispositivos.
73
Microcontrolador PIC16F87x
TECLADO
MATRICIAL
L1
L2
L3
Vcc
L4
10K
C1
MCLR
1 MCLR
RB7 40
2 RA0
RB6 39
3 RA1
RB5 38
4 RA2
RB4 37
REL 1
5 RA3
RB3 36
REL 2
6 RA4
RB2
35
REL 3
7 RA5
RB1
34
8 RE0
RB0
33
ENT. AN. 1
ENT. AN. 2
ENTRADAS
ANALGICAS
ENT. AN. 3
9 RE1
10 RE2
PIC16F87X
C3
C2
PUSH-BOTON
INTERRUPO EXTERNA
32
VCC
31
GND
Buzzer
VCC
11
RD7 30
GND
12
RD6 29
13
RD5 28
14
RD4 27
15 RC0
RC7 26
16 RC1
RC6
17 RC2
RC5 24
18 RC3
RC4 23
RS
19 RD0
RD3 22
20 RD1
RD2 21
470
470
ULN2803
LEDS
4MHz
4511
470
RX
COM. SERIAL
TX
25
BCD/7SEG
DISPLAYs 7 SEG
RS
10K
V0
Vcc
E
R/W
B4
B0
B1
B2
B3
10
11
B5
12
3
2
1
B6
13
B7
14
74
Microcontrolador PIC16F87x
Ilton L. Barbacena
Claudio Afonso Fleury
1. INTRODUO
Os mdulos LCD so interfaces de sada muito til em sistemas microprocessados. Estes
mdulos podem ser grficos e a caracter. Os mdulos LCD grficos so encontrados com
resulues de 122x32, 128x64, 240x64 e 240x128 dots pixel, e geralmente esto disponveis
com 20 pinos para conexo. Os LCD comuns (tipo caracter) so especificados em nmero de
linhas por colunas e so encontrados nas configuraes previstas na Tabela 1.
Tabela 1 - Mdulos LCD disponveis
Nmero de
Colunas
Nmero de
Linhas
Quantidade de
pinos
14
12
14/15
16
14/16
16
14/16
16
14/16
20
14/16
20
14/16
20
14/16
24
14/16
24
14/16
40
16
40
16
75
Microcontrolador PIC16F87x
Os mdulos podem ser encontrados com LED backlight (com uma iluminao de fundo)
para facilitar as leituras durante a noite. Neste caso, a alimentao deste led faz-se normalmente
pelos pinos 15 e 16 para os mdulos comuns e 19 e 20 para os mdulos grficos, sendo os pinos
15 e 19 para ligao ao anodo e os pinos 16 e 20 para o catodo. A corrente de alimentao deste
led varia de 100 a 200mA, dependendo do modelo.
Estes mdulos utilizam um controlador prprio, permitindo sua interligao com com
outras placas atravs de seus pinos, onde deve ser alimentado o mdulo e interligado o
barramento de dados e controle do mdulo com a placa do usurio. Naturalmente que alm de
alimentar e conectar os pinos do mdulo com a placa do usurio dever haver um protocolo de
comunicao entre as partes, que envolve o envio de bytes de instrues e bytes de dados pelo
sistema do usurio.
A Tabela 2 descreve cada pino do mdulo ou do display para conexo deste a outras
placas:
Tabela 2 - Pinagem dos Mdulos LCD
Pino
Funo
Descrio
Alimentao
Terra ou GND
Alimentao
VCC ou +5V
V0
RS
R/W Seleo:
1 - Leitura, 0 - Escrita
1 ou (1 0) - Habilita, 0 - Desabilitado
B0
B1
B2
Barramento
10
B3
de
11
B4
Dados
12
B5
13
B6
14
B7
15
A (qdo existir)
16
K (qdo existir)
Seleo:
Chip select
1 - Dado, 0 - Instruo
LSB
MSB
Microcontrolador PIC16F87x
76
2. PROGRAMAO / INSTRUES
A Tabela 3 traz um resumo das instrues mais usadas na comunicao com os
mdulos LCD.
77
Microcontrolador PIC16F87x
MODO
RS
R/W
Cdigo
(Hexa)
Display
0C
Desliga
0A / 08
01
Liga
0E
Desliga
0C
10
14
Cursor Home
02
Cursor Piscante
0D
0F
Sentido de deslocamento do
Para a esquerda
04
Para a direita
06
Deslocamento da mensagem
Para a esquerda
07
Para a direita
05
Deslocamento da mensagem
Para a esquerda
18
Para a direita
1C
primeira linha
80
segunda linha
C0
78
Microcontrolador PIC16F87x
Limpa Display
RS
CDIGO
R/W
0
B7
B6
B5
B4
B3
B2
B1
B0
MSB
LSB
Esta instruo escreve o caracter ASCII 32 que corresponde ao branco ou barra de espao
em todos os endereos da DDRAM apagando a mensagem que estiver escrita. O cursor
retorna ao endereo zero, ou seja, posio mais a esquerda da primeira linha.
RS
CDIGO
R/W
0
B7
B6
B5
B4
B3
B2
B1
B0
MSB
LSB
Faz retornar o cursor para a posio mais a esquerda da primeira linha e faz voltar
posio original mensagens previamente deslocadas. O contedo da DDRAM permanece
inalterado.
RS
CDIGO
R/W
0
B7
B6
B5
B4
B3
B2
B1
B0
MSB
LSB
Esta instruo tem efeito somente durante a leitura ou escrita de dados, portanto, deve ser
ativada na inicializao.
-Estabelece o sentido de deslocamento do cursor (X=0 p/ esquerda, X=1 p/
direita)
79
Microcontrolador PIC16F87x
RS
CDIGO
R/W
0
B7
B6
B5
B4
B3
B2
B1
B0
MSB
LSB
A mensagem fica aparente quando D=1 e desaparece quando D=0, porm o contedo da
DDRAM fica inalterado. O cursor fica aparente quando C=1 e desaparece quando C=0,
porm as propriedades de escritas vigentes permanecem inalteradas. O cursor quando
aparente liga a ltima linha que compem o caracter, exceto quando B=1, que apresenta
em alternncia com uma matriz com todos os pontos negros em intervalos de 0,4
segundos. Quando B=1 e C=0, obteremos a ativao intermitente de uma matriz
completa (todos os pontos da matriz).
2.1.5 - Deslocamento do Cursor ou da Mensagem
RS
CDIGO
R/W
0
B7
B6
B5
B4
B3
B2
B1
B0
MSB
LSB
Desloca o cursor ou a mensagem sem que para isso tenha que escrever ou ler dados do
display. Utilizado para posicionamento dos dados no display.
FUNO
80
Microcontrolador PIC16F87x
RS
CDIGO
R/W
0
B7
B6
B5
B4
B3
B2
B1
B0
MSB
LSB
Y estabelece o modo de comunicao. Se Y=1 estabelece 8 bits e quando Y=0 ser 4 bits,
enviados em duas operaes, com os 4 bits (Nible) mais significativos sendo enviados
primeiro. N fixa o nmero de linhas: N=0 para uma linha e N=1 para duas ou mais
linhas. F fixa o tipo da matriz: F=0 para matriz 7x5 ou 8x5 e F=1 para matriz 10x5
(somente possvel quando apresentando em uma linha).
CGRAM uma regio da memria RAM destinada para criao de caracteres especiais,
como por exemplo: , , , etc.
RS
CDIGO
R/W
0
B7
B6
B5
B4
B3
B2
B1
B0
MSB
LSB
RS
CDIGO
R/W
0
B7
B6
B5
B4
B3
B2
B1
B0
MSB
LSB
81
Microcontrolador PIC16F87x
a segunda linha.
RS
CDIGO
R/W
1
B7
B6
B5
B4
B3
B2
B1
B0
BF
MSB
LSB
Busy Flag ou o bit 7 indica ao sistema onde est conectado o mdulo LCD, se o
controlador do mdulo est ocupado com alguma operao interna (BF=1), e neste caso,
no aceita nenhuma instruo at que BF volte para 0.
Alm disso, permite a leitura do contedo do contador de endereos (AC) expressa por
AAAAAAA. O contador de endereos pode conter tanto endereo da CGRAM como da
DDRAM, depende neste caso, da instruo anterior.
RS
CDIGO
R/W
0
B7
B6
B5
B4
B3
B2
B1
B0
MSB
LSB
82
Microcontrolador PIC16F87x
RS
CDIGO
R/W
1
B7
B6
B5
B4
B3
B2
B1
B0
MSB
LSB
Toda vez que alimentamos o mdulo LCD deve ser executado o procedimento de
inicializao, que consiste no envio de uma seqncia de instrues para configurar o modo de
operao para execuo de um dado programa de interfaceamento. Em muitos display este
procedimento ocorre automaticamente, dentro de condies especficas que envolve
temporizaes mnimas referente a transio do nvel lgico 0 para 1, ao ligarmos a fonte. Em
caso de dvidas, recomendamos o envio destas instrues aps o reset do sistema.
30
15mS
30
15mS
06
BF
0E
BF
01
34
15mS
34
15mS
06
BF
0E
BF
01
38
15mS
38
15mS
06
BF
0E
BF
01
83
Microcontrolador PIC16F87x
10
11
12
Microcontrolador PIC16F87x
84
7. Aps a escrita de dados na CGRAM envie a instruo 01, para posicionar o cursor.
8. Para escrever os caracteres especiais previamente gravados na CGRAM, utilize os cdigos de
00 at 07 correspondente aos endereos bases de 40, 48 at 78 em hexa.
9. Comandos teis:
Instruo
30H
38H
34H
20H
28H
24H
CONTROLE DISPLAY
Instruo
0EH
0FH
0CH
Display apagado
08H
MODO DE OPERAO
Instruo
07H
05H
06H
Microcontrolador PIC16F87x
85
04H
Instruo
01H
02H
14H
10H
1CH
18H
C0H
80H
Instruo
40H
00H
07H
Obs:
Aps o endereamento da CGRAM, o cursor se desloca para a primeira posio
da segunda linha (ou metade), portanto recomendado enviar a instruo 01 ou
limpa display e cursor home.
Microcontrolador PIC16F87x
86
4.2- INSTALAO
4.3 - OPERAO
Nunca instale ou desconecte o mdulo com sua alimentao ligada.
Sempre opere os mdulos respeitando sua gama de temperatura de operao.
Observe cuidadosamente os valores das tenses de alimentao e os nveis dos sinais
de controle.
Ajuste a tenso no pino 3 (V0) para obter o contraste mais conveniente para uma dada
aplicao.