Escolar Documentos
Profissional Documentos
Cultura Documentos
COORDENAO DE MECNICA
CURSO DE TECNOLOGIA ELETROMECNICA
MICROCONTROLADOR
PIC16F628
SUMRIO
INTRODUO ................................................................................................................................................ 3
CAPTULO I - O QUE O PIC16F628 ........................................................................................................ 5
PINAGEM DO PIC16F628........................................................................................................................... 5
DESCRIO DOS PINOS ................................................................................................................................... 5
CARACTERSTICAS DOS PINOS......................................................................................................................... 8
CAPTULO II - CARACTERSTICAS DO PIC16F628.............................................................................. 9
CAPTULO III - MEMRIA DE PROGRAMA (FLASH EPROM), MEMRIA DE DADOS (RAM) E
MEMRIA DE DADOS PERMANENTES (EEPROM) ........................................................................... 11
MEMRIA DE PROGRAMA (FLASH EPROM) ..................................................................................... 11
MEMRIA DE DADOS (RAM) ................................................................................................................ 12
CAPTULO IV - REGISTRADORES DE FUNES ESPECIAIS ......................................................... 15
CAPTULO V - CONJUNTO DE INSTRUES DO PIC16F628........................................................... 26
EXPLICAO DETALHADA DO CONJUNTO DE INSTRUES DO PIC................................................................ 29
CAPTULO VI - AS INTERRUPES DO PIC16F628 ........................................................................... 39
CAPTULO VII - O CONTADOR/TEMPORIZADOR (TMR0).............................................................. 43
CAPTULO VIII MODO POWER DOWN, MODO SLEEP E O WDT............................................... 47
CAPTULO IX - ESCRITA E LEITURA NA EEPROM DO PIC16F628 ............................................... 50
BIBLIOGRAFIA ............................................................................................................................................ 52
APNDICE A - INTRODUO AO MPLAB............................................................................................ 53
APNDICE B DETALHES DOS PORTS ................................................................................................ 67
APNDICE C DISPLAY DE CRISTAL LQUIDO - LCD .................................................................... 72
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 memria de programa Flash EPROM (2048 words) que possibilita a gravao
cerca de 1000 vezes sem a necessidade de apagamento com ultravioleta.
Uma srie de LINHAS de I/O para controlar dispositivos externos ou receber pulsos
de sensores, chaves, etc.
Uma memria EEPROM de 128 bytes para gravar dados permanentes. Cada posio
pode ser gravada cerca de um milho de vezes.
FUNO
DESCRIO
RA0
AN0
RA1
AN1
RA3
AN3
RA0/AN0
RA1/AN1
RA3/AN3/CMP1
Sada do comparador 1
CMP1
RA4/T0CKI/CMP2
RA4
T0CKI
CMP2
Sada do comparador 2
RA5
Porta de entrada
MCLR
VPP
RA6
OSC2
RA6/OSC2/CLKOUT
No modo RC/INTOSC esse pino fornece sinal de clock
CLKOUT
RA7/OSC1/CLKIN
1
4
da freqncia de OSC1.
RA7
OSC1
CLKIN
RB0
INT
Interrupo externa.
RB1
RX
DT
RB2
TX
CK
RB0/INT
RB1/RX/DT
com
RB2/TX/CK
RB3
RB3/CCP1
CCP1
RB4
PGM
RB5
RB6
T1OSO
T1CKI
PGC
RB7
TIOSI
PGD
VSS
VSS
VDD
VDD
RB4/PGM
RB5
RB6/T1OSO/T1CKI/
PGC
RB7/T1OSI/PGD
o pino RA4/TOCKI tambm pode ser programado para ser a entrada de clock para o
TMR0 (timer 0 interno ao PIC).
RB0 a RB7, tambm so pinos de linhas de entrada e sada de sinais (linhas de I/O).
Mas eles tem outras funes: o pino RB0/INT tambm pode ser programado para ser
um pino de entrada de interrupo externa; os pinos RB4 a RB7 podem ser programados
para gerar interrupo quando houver mudana de nvel lgico em um deles e os pinos
RB6 e RB7 tambm so usados na programao do PIC, o primeiro serve como clock
serial e o segundo serve como data serial.
VDD e VSS, so pinos de alimentao. O VSS conectado ao TERRA (GND) e o VDD
tenso contnua de +5V. A tenso de alimentao nominal dos PICs de 5 Vcc, mas a
faixa de variao desta tenso depende do modelo estudado. No caso do PIC16F628, ela
vai de 2.0 a 6.0 Vcc.
/MCLR, o pino de reset. Este se refere ao Master Clear externo. Sempre que esse pino
for colocado em nvel lgico baixo (GND), o programa ser resetado e o processamento
paralisado. Ao ser colocado em nvel alto (+5V), a execuo do programa ser retomada
do ponto inicial (ORG 00H).
OSC1/CLKIN e OSC2/CLKOUT, so pinos de clock. Nestes pinos ligado o
oscilador.
overflow do timer TMR0, interrupo por mudana de nvel nos pinos da porta B
(pinos RB7 a RB4) e interrupo por escrita completa na EEPROM.
Memria de programao FLASH EPROM de 2 Kbytes. Pode-se escrever nessa
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 128 Bytes. Pode-se escrever em cada bit
3 Mdulos de timer/counter ;
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 set 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.
;*******************************************************************
***
list
p=16F628
#include <p16F628.inc>
processador
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
;***** DEFINIES DE VARIVEIS***************
w_temp EQU 0x20
; varivel usada para salvar o registrador de trabalho W
status_temp EQU 0x21
; varivel usada para salvar o registrador de STATUS
ORG
0x000
; Vetor de reset
goto main
; vai para o incio do programa
ORG 0x004
; Vetor de interrupo
movwf w_temp
; salva o contedo de W
movf STATUS,w
; move registrador de status para W
movwf status_temp
; salva o contedo de STATUS
; Cdigo da rotina de interrupo que pode ser escrito aqui ou em outro lugar
usando call sub_int
movf status_temp,w ; Copia STATUS_TEMP para W
movwf STATUS
; restaura o contedo do registrador de
STATUS
swapf w_temp,f
swapf w_temp,w
; restaura o contedo do registrador W
retfie
; retorno da interrupo
; Incio do programa principal
main
; Restante do cdigo do programa vai aqui
END
; diretiva de fim de programa
;**********************************************************************
MEMRIA DE DADOS (RAM)
Diferentemente da memria Flash EPROM destinada a conter o programa, a rea de
memria RAM visvel pelo resto do programa. Nela podemos escrever, ler, ou modificar
tranqilamente qualquer registrador do nosso programa a qualquer momento que for
necessrio. A nica limitao consiste de que alguns desses registradores desenvolvem
funes especiais para o PIC que no podem ser utilizados para outra coisa a no ser para
aquilo a qual eles esto reservados. Estes registradores encontram-se nas locaes base da
rea de memria RAM mostrada na Tabela 2.
A localizao de memria presente na RAM endereada diretamente em um
espao de memria que vai de 00H a 7FH dando um total de 128 bytes, denominado pgina
0 (ou banco 0). Um segundo espao de endereamento denominado pgina 1 (ou banco 1)
vai de 80H a FFH. Para acessar esse segundo espao necessrio recorrer a dois bits
auxiliares RP0 e RP1 do registrador de STATUS segundo a modalidade que iremos
explicar mais adiante. As primeiras 12 locaes da pgina 0 (de 00H a 0BH) e da pgina 1
(de 80H a 8BH) so aquelas reservadas as funes especiais para o funcionamento do PIC
e, como j foi dito, no podem ser utilizadas para outra coisa. As 68 locaes na pgina 0
reservados para as nossas variveis podem ser endereadas de 0CH a 4FH podemos aqui
utilizar livremente pelo nosso programa para memorizar variveis, contadores, etc.
Em resumo, podemos dizer que a memria RAM do PIC est dividida em dois
bancos. O banco 0 que selecionado zerando o bit RP0 (STATUS<5>) e o banco 1 que
selecionado setando o bit RP0. Os 12 primeiros bytes da RAM so reservados aos
Registradores de Funes Especiais (SFR Special Function Registers), os 116 bytes
restantes de cada banco so reservados aos Registradores de Propsitos Gerais (GPR
General Purpose Registers), mas somente 68 bytes destes GPR so implementados para o
PIC16F628.
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
181h
PCL
02h
PCL
82h
PCL
102h
PCL
182h
STATUS
03h
STATUS
83h
STATUS
103h
STATUS
183h
FSR
04h
FSR
84h
FSR
104h
FSR
184h
PORTA
05h
TRISA
85h
PORTB
06h
TRISB
86h
105h
PORTB
106h
185h
TRISB
186h
07h
87h
107h
187h
08h
88h
108h
188h
09h
89h
109h
189h
PCLATH
0Ah
PCLATH
8Ah
PCLATH
10Ah
PCLATH
18Ah
INTCON
0Bh
INTCON
8Bh
INTCON
10Bh
INTCON
18Bh
PIR1
0Ch
PIE1
8Ch
10Ch
18Ch
8Dh
10Dh
18Dh
8Eh
10Eh
18Eh
10Fh
18Fh
0Dh
TMR1L
0Eh
TMR1H
0Fh
8Fh
T1CON
10h
90h
TMR2
11h
T2CON
12h
PCON
91h
PR2
92h
13h
93h
14h
94h
CCPR1L
15h
95h
CCPR1H
16h
96h
CCP1CON
17h
RCSTA
18h
97h
TXSTA
98h
TXREG
19h
SPBRG
99h
RCREG
1Ah
EEDATA
9Ah
1Bh
EEADR
9Bh
1Ch
EECON1
9Ch
1Dh
EECON2
9Dh
1Eh
CMCON
1Fh
9Eh
VRCON
20h
REGISTRADOR
ES DE
PROPSITO
GERAL
11Fh
9Fh
A0h
120h
REGISTRADORES
DE PROPSITO
GERAL
REGISTRADORES
DE PROPSITO
GERAL
48 BYTES
14Fh
80 BYTES
96 BYTES
150h
F0h
70h 7Fh
BANCO 0
BANCO 1
1EFh
16Fh
EFh
170h
70h 7Fh
BANCO 2
1F0h
70h 7Fh
BANCO 3
Registradores:
1. 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 PIC16F628 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 80386, 486 e Pentium, por exemplo, dispe de uma ALU de 32 bits. A
capacidade de clculo presente nesses micros notavelmente superior em detrimento da
complexidade dos circuitos internos e consequentemente do espao ocupado.
A ALU referencia diretamente o registrador W denominado antigamente de
acumulador. Este registrador consiste de uma localizao de memria destinada a conter
um s valor de 8 bits. A diferena entre o registrador W e outras localizaes de memria
consiste no fato de que, por referenciar o registrador W, a ALU no pode fornecer nenhum
endereo, mas podemos acess-los diretamente. O registrador W ser utilizado
freqentemente para intermediar instrues do PIC.
Faamos um exemplo prtico. Suponhamos querer colocar na localizao de
memria 0CH da RAM o valor 01H. Procurando entre as instrues do PIC veremos
rapidamente que no existe uma nica instruo capaz de efetuar esta operao mas
deveremos necessariamente recorrer ao acumulador e usar duas instrues em seqncia.
Vejamos porque:
Como dissemos anteriormente, o opcode de uma instruo no pode exceder aos 14 bits e
assim teremos:
8 bits para especificar o valor que queremos colocar na localizao de memria,
7 bits para especificar em qual localizao de memria queremos inserir o nosso valor,
6 bits para especificar qual instruo queremos usar.
teremos um total de 8 + 7 + 6 = 21 bits.
Devemos ento recorrer a duas instrues, ou 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.
2. 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
R/W-0
R/W-0
R/W-0
R-1
R-1
R/W-x
R/W-x
R/W-x
Power on reset
bit 6
Bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
Bits
RA4/TOCKI
RA3
RA2
RA1
RA0
Power on reset
R\W-x
R/W-x
R/W-x
R/W-x
R/W-x
N dos bits
N dos bits
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
R/W-x
R/W-x
R/W-x
R\W-x
R/W-x
R/W-x
R/W-x
R/W-x
Power on reset
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
N dos bits
bit 7
Bit 6
Bit 5
Bit 4
bit 3
bit 2
bit 1
bit 0
TRISB7
TRISB6
TRISB5
TRISB4
TRISB3
TRISB2
TRISB1
TRISB0
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
R/W-x
R/W-x
R/W-x
R/W-x
R/W-x
R/W-x
R/W-x
R/W-x
N dos bits
Bits
Power on reset
Bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
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
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
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-0
R/W-0
R/W-0
R/W-0
R/W-0
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 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
Bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
R/W-x
R/W-x
R/W-x
R/W-x
R/W-x
R/W-x
R/W-x
R/W-x
N dos bits
Bits
Power on reset
Bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
R/W-x
R/W-x
R/W-x
R/W-x
R/W-x
R/W-x
R/W-x
R/W-x
N dos bits
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
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
N dos bits
PS2
PS1
PS0
Divisor p/ o TMR0
Divisor p/ o WDT
16
32
16
64
32
128
64
256
128
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
N dos bits
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:
Argumentos
Descrio
f,d
f,d
F
f,d
f,d
f,d
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.
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
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
; Zera o registrador W
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.
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
start
movlw 00001111B
iorlw 11110000B
Aps ser executado esse programa o acumulador W ser 11111111B.
20) IORWF f,d
; Efetua o OR inclusive entre o valor contido em W e o valor contido
no registrador F
Descrio: Esta instruo efetua o OR inclusive entre o valor contido no acumulador W e o
valor contido no registrador endereado pelo parmetro f.
Exemplo:
parm1 equ 0CH
org
00H
movlw 00001111B
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
BIT6
BIT5
BIT4
BIT3
BIT2
BIT1
BIT0
CARRY
BIT7
BIT6
BIT5
BIT4
BIT3
BIT2
BIT1
BIT0
CARRY
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:
REG1 EQU 0CH
podemos utilizar a instruo IORWF de duas formas, dependendo onde queremos
colocar o resultado, ou seja:
xorwf COUNTER,F ;COUNTER = COUNTER XOR W
ou ento:
xorwf COUNTER,W ;W = COUNTER XOR W
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 PIC16C84 esta preparado para controlar interrupes ao final de quatro eventos
diferentes, vejamos quais so:
1. Ao final da contagem do registrador TMR0, interrupo de TIMER 0.
1. Interrupo externa por mudana de nvel no pino RB0.
3. A troca de estado sobre uma das linhas de RB4 a RB7, interrupo por mudana de
estado.
4. Ao final da escrita sobre um endereo da EEPROM.
Interrupo de TIMER 0, essa interrupo acontece sempre que um contador de
tempo interno, denominado TMR0 (Timer 0), estoura, ou seja, como ele um contador de 8
bits, sempre que passar de 0xFF para 0x00. Ela utilizada normalmente para a contagem de
tempo. Como pode acontecer a qualquer momento, a contagem de tempo fica precisa, no
dependendo de anlises constantes durante o programa para garantir que o tempo seja
contado. Como veremos em exemplos, o TMR0 pode tanto ser incrementado internamente
pelo clock da mquina, como tambm por um sinal externo. Neste caso, ele passa a ser um
Registrador INTCON:
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.
RBIF (bit 0), se for 1 porque ocorreu uma interrupo de troca de estado de uma
das linhas de RB4 a RB7.
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 mas 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.
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:
PS2
PS
1
PS
0
Divisor
500.000 = 4MHz/(4 * 2)
250.000 = 4MHz/(4 * 4)
125.000 = 4MHz/(4 * 8)
16
32
64
128
256
PS2
PS1
PS0
Divisor
Perodo de retardo do
WDT
18ms
36ms
72ms
144ms
16
288ms
32
576ms
64
1.152s
128
2.304s
prximo 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
STATUS,RP0 ; Vai para o banco 0
movf
Endereo,W
; W = Endereo onde vai ser armazenado o dado
movwf EEADR
; Escrita do endereo em EEADR
movf
Dado,W
; W = Dado que ser armazenado na EEPROM
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.
BIBLIOGRAFIA
Barra de Ferramentas
Menu Principal
Janela do
gerenciador
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.
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.
A linguagem C traz a vantagem da rapidez no desenvolvimento dos programas.
Compilando o Projeto
BUILD SUCCEEDED
configuramos algum pino como entrada e necessitamos simular o programa com essa
configurao, temos a necessidade de alterar, de maneira assncrona, o valor (nvel alto
para baixo ou vice-versa) desse pino.
A Figura 13 mostra como abrir o Modo de Estmulos do PIC. Basta clicar em
Debugger e depois Stimulus Controller.
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 PIC16F628
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 PIC16F628
Microcontrolador PIC16F628
70
Microcontrolador PIC16F628
71
72
Microcontrolador PIC16F628
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
Os mdulos podem ser encontrados com LED backlight (com uma iluminao de fundo)
73
Microcontrolador PIC16F628
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 PIC16F628
74
2. PROGRAMAO / INSTRUES
A Tabela 3 traz um resumo das instrues mais usadas na comunicao com os
mdulos LCD.
75
Microcontrolador PIC16F628
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
76
Microcontrolador PIC16F628
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)
77
Microcontrolador PIC16F628
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
78
Microcontrolador PIC16F628
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
79
Microcontrolador PIC16F628
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
80
Microcontrolador PIC16F628
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
81
Microcontrolador PIC16F628
10
11
12
Microcontrolador PIC16F628
82
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 PIC16F628
83
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 PIC16F628
84
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.