Você está na página 1de 10

Exsto Tecnologia

Conversão PIC16F84 para PIC16F628

Tutorial para conversão de programas feitos para


16F84 em programas para 16F628

Versão 1.0

04/2003
Conversão 16F84 para 16F628 2 de 2

Versão Principais Autores Descrição da Versão Data de Término


1.0 - José Domingos Adriano Versão inicial 14/03/2003

Exsto Tecnologia V 1.0


Conversão 16F84 para 16F628 3 de 3

Índice
Página

Introdução ................................................................................................................... 5
1 Características .......................................................................................................... 6
1.1 Temporizadores e comparadores ..................................................................... 6
1.2 Comparadores analógicos................................................................................ 6
1.3 CCP, USART e tensão de referência. .............................................................. 6
1.4 Terminais. ....................................................................................................... 6
1.5 Memória.......................................................................................................... 7
1.6 Oscilador......................................................................................................... 9
2 Guia de conversão 16F84 para 16F628 .................................................................. 10

Exsto Tecnologia V 1.0


Conversão 16F84 para 16F628 4 de 4

Lista de Figuras e Tabelas

Página
Tabela 1.1 – Comparação entre o 16F84 e o 16F628 ..................................................... 6
Figura 1.1 – Mapa de memória do PIC 16F84 ............................................................... 7
Figura 1.2 – Mapa de memória do PIC 16F628 ............................................................. 8

Exsto Tecnologia V 1.0


Conversão 16F84 para 16F628 5 de 5

Introdução
No universo dos microcontroladores PIC é muito difundido o uso do PIC16F84.
Existe grande quantidade de programas, livros e cursos baseados nesse dispositivo.
Porém, se comparado como ele, os PIC16F628 e PIC16F627 apresentam várias
vantagens que tornam preferível trabalhar com esses últimos.
O 16F84 é compatível “pino a pino” com, o 16F628, de forma que pode ser
realizada sua substituição sem alterações de hardware, bastando apenas alterar o
firmware.
O presente documento visa ser um tutorial para a alteração de softwares
inicialmente desenvolvidos para 16F84 para serem gravados em 16F628. São
apresentadas de forma resumidas as características de cada microcontrolador,
ressaltando as principais diferenças entre eles. Em seguida tem-se um guia para a
alteração do firmware.

Exsto Tecnologia V 1.0


Conversão 16F84 para 16F628 6 de 6

1 Características
A tabela abaixo apresenta uma comparação entre as principais características
desse dos microcontroladores:

Característica PIC 16F84 PIC16F628


Memória
Memória de Programa FLASH (palavras de 14 bits) 1024 2048
Memória de Dados RAM (bytes) 68 224
Memória de Dados EEPROM (bytes) 64 128
Periféricos
Temporizadores/Contadores 1 3
Comparadores analógicos - 2
Módulo CCP (Capture/Compare/PWM) - 1
Comunicação serial - USART
Tensão de referência interna - 1
Características Gerais
Número de Terminais 18 18
Número de Terminais de I/O 13 16
Detecção de Brown-out Não Sim
Interrupções 4 10
Modos de oscilador
LP, XT, HS Sim Sim
RC externo Sim Sim
RC interno Não Sim
Tabela 1.1 – Comparação entre o 16F84 e o 16F628

1.1 Temporizadores e contadores


O 16F84 possui apenas um temporizador, o Timer 0. Já o 16F628 possui 3,
Timer 0, Timer 1, Timer 2. A operação do Timer 0, porém é a mesma nos dois
componentes.

1.2 Comparadores analógicos


O PIC 16F628 possui dois comparadores analógicos que não existem no 16F84.
As entradas desses comparadores estão multiplexadas com RA0, RA1, RA2 e RA3, que
são os terminais 17, 18, 1 e 2, respectivamente. Como as entradas analógicas têm
prioridade sobre entradas e saída digitais, a configuração default desses terminais pe côo
entrada analógica. Faz-se necessário então desabilitar esse periférico. Isso é feito
atribuindo-se o valor 7 ao registro CMCON (banco 0), que é o registro de controle do
módulo comparador analógico.

1.3 CCP, USART e tensão de referência


Periféricos de CCP, USART e tensão de referência que existem no 16F628
estão, por padrão, no reset, desabilitados. Sua existência pode ser desconsiderada em
rotinas desenvolvidas inicialmente para 16F84.

1.4 Terminais.
O 16F628 pode trabalhar com até 3 terminais de I/O a mais que o 16F84. Esses
terminais. Esses terminais são pertencentes ao portal A. São eles os terminais 5, 15, 16,

Exsto Tecnologia V 1.0


Conversão 16F84 para 16F628 7 de 7

respectivamente RA5, RA6 e RA7. RA7 e RA6 são terminais multiplexados com o
oscilador do PIC. Se estiver sendo utilizado o modo de oscilador XT, LP, HS, RC
externos, esses terminais fazem parte do circuito oscilador e não há ligação do registro
PORTA com o pino do microcontrolador. Se estiver sendo utilizado o modo RC interno
(opção que não existe para o 16F84), não existe circuito externo para o oscilador, e
esses terminais podem ser utilizados como I/O.
RA5 pode ser utilizado somente como entrada, pois não existe driver de saída.
Para sua utilização como entrada deve-se configurar o MCLR ligado internamente para
Vdd, o que é feito através dos fusíveis (fuses).
Para utilização de rotinas desenvolvidas para 16F84 não há necessidade de
nenhuma alteração no código com relação aos terminais.

1.5 Memória
No que se refere à memória, o 16F628 apresenta grandes diferenças em relação
ao 16F84. As figuras abaixo apresentam a organização da memória do 16F84 e do
16F628.

Endereço Banco 0 Banco 1 Endereço


00h INDF INDF 80h
01h TMR0 OPTION_REG 81h
02h PCL PCL 82h
03h STATUS STATUS 83h
04h FSR FSR 84h
05h PORTA TRISA 85h
06h PORTB TRISB 86h
07h Não implementado 87h
08h EEDATA EECON1 88h
09h EEADR EECON2 89h
0Ah PCLATH PCLATH 8Ah
0Bh INTCON INTCON 8Bh
0Ch 8Ch

GPRS (acessa
68 bytes banco 0)

4Fh - CFh
50h D0h

Não implementado

7Fh FFh
Figura 1.1 – Mapa de memória do PIC 16F84

Exsto Tecnologia V 1.0


Conversão 16F84 para 16F628 8 de 8

Banco 0 Banco 1 Banco 2 Banco 3


INDF 00h INDF 80h INDF 100h INDF 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 184h
PORTA 05h TRISA 85h 105h 185h
PORTB 06h TRISB 86h PORTB 106h TRISB 186h
07h 87h 107h 187h
08h 88h 108h 188h
09h 89h 109h 189h
PCLATH 0Ah PCLATH 8Ah PCLATH 10Ah PCLATCH 18Ah
INTCON 0Bh INTCON 8Bh INTCON 10Bh INTCON 18Bh
PIR1 0Ch PIE1 8Ch 10Ch 18Ch
0Dh 8Dh 10Dh 18Dh
TMR1L 0Eh PCON 8Eh 10Eh 18Eh
TMR1H 0Fh 8Fh 10Fh 18Fh
T1CON 10h 90h 110h 190h
TMR2 11h 91h 111h 191h
T2CON 12h PR2 92h 112h 192h
13h 93h 113h 193h
14h 94h 114h 194h
CCP1L 15h 95h 115h 195h
CCP1H 16h 96h 116h 196h
CCP1CON 17h 97h 117h 197h
RCSTA 18h TXSTA 98h 118h 198h
TXREG 19h SPBRG 99h 119h 199h
RCREG 1Ah EEDATA 9Ah 11Ah 19Ah
1Bh EEADR 9Bh 11Bh 19Bh
1Ch EECON1 9Ch 11Ch 19Ch
1Dh EECON2 9Dh 11Dh 19Dh
1Eh 9Eh 11Eh 19Eh
CMCON 1Fh VRCON 9Fh 11Fh 19Fh
20h A0h 120h 1A0h

GPR GPR
80 bytes 48 bytes
GPR 14Fh
96 bytes 150h

EFh 16Fh 1EFh


F0h 170h 1F0h
Acessa de Acessa de Acessa de
70h à 7Fh 70h à 7Fh 70h à 7Fh
7Fh FFh 17Fh 1FFh
Figura 1.2 – Mapa de memória do PIC 16F628

Como pode ser observado, existe uma grande diferença entre os dois mapas de
memórias. O 16F628 possui um total de 224 bytes e o 16F84 apenas 68.
Em primeiro lugar, o 16F628 possui quatro bancos de memória, enquanto o
16F84 possui dois. Contudo não existem registros nos bancos 2 e 3 três que não possam
ser acessados nos bancos 0 e 1. A única região de interesse nesses bancos é a região de
RAM de uso geral entre os endereços 120h e 14Fh, no banco dois.
Quanto aos registros de funções especiais (SFR – Special Function Registers), o
16F628 os possui nos mesmos endereços que o 16F84, excetuando-se os registros
relacionados com a memória EEPROM. No 16F628 todos esse registros se encontram
no banco 1, e seus endereços podem ser observados na figura 1.2. Para programas que
utilizam a EEPROM do 16F84 serem adaptados para o 16F628 as rotinas de aceso a
EEPROM devem ser alteradas.

Exsto Tecnologia V 1.0


Conversão 16F84 para 16F628 9 de 9

O 16F628 possui mais registros de uso geral (GPR – General Purpose Registers)
que o 16F84. Então programas desenvolvidos para 16F84 não terão problemas com falta
de memória. A mudança importante que deve ser observada é que no 16F84 os GPR
começam no endereço 0Ch, enquanto no 16F628 começam no 20h. Os endereços dos
registros devem ser alterados para ser adequar a faixa de endereços do 16F6268. Outra
observação importante é que acessando do endereço 8Ch ao CFh no banco 1 do 16F84
são acessados os registros de 0Ch a 4Fh do banco 0. No 16F628 os registros do banco 1
que acessam endereços correspondentes no banco 0 são apenas os de endereço entre
F0h e FFh.

1.6 Oscilador
Para a substituição do 16F84 pelo 16F628 não se faz necessária nenhuma
alteração do hardware do circuito. Porém, para reduzir componentes e
conseqüentemente o custo do sistema, pode-se optar por substituir um circuito oscilador
externo pelo oscilador interno do 16F628. O 16F628 apresenta a possibilidade escolher
entre duas freqüências para o oscilador interno, 4MHz e 37KHz. Nesse caso deve-se
considerar que o oscilador interno de 4MHz tem uma precisão inferior à de um
oscilador a cristal. Esse oscilador pode variar entre 3,65MHz e 4,28MHz.
Para utilizar o oscilador interno deve-se habilitar essa opção nos “fusíveis”. A
seleção da freqüência é feita por software pelo bit OSCF do registro PCON. Se OSCF
for “1” a freqüência é de 4MHz; se for “0”, a freqüência e 37KHz. A freqüência do
oscilador pode ser alterada a qualquer momento no programa.

Exsto Tecnologia V 1.0


Conversão 16F84 para 16F628 10 de 10

2 Guia de conversão 16F84 para 16F628


Segue abaixo um tutorial de consulta rápida para a alteração de programas.

Alterar o arquivo de definições


subsituir
#include<P16F84.INC>
por
#include<P16F628.INC>

Desabilitar os comparadores analógicos na inicialização


adicionar
MOVLW 07h
MOVWF CMCON
em um trecho que estiver acessando o banco 0.

SIM NÃO
Está sendo utilizada
a diretiva CBLOCK para declaração
de variáveis?

subsituir
Realocar as variáveis declaradas nos
CBLOCK 0Ch
endereços entre 0Ch e 20h para
por
endereços entre 20h e 0Fh
CBLOCK 20h

Estão sendo utilizados SIM


endereços de 8Ch a CFh no banco 1 para
acesso ao banco 0?

NÃO
Realocar as variáveis para endereços entre F0h e
FFh.
Realocar os respectivos endereços do banco 0
para a faixa entre 70h e 7Fh.

SIM
Estão sendo utilizadas rotinas
de aceso a EEPROM?

NÃO

Alterar as rotinas considerando que os registros


EEDATA e EEARD estão no banco 1.

Exsto Tecnologia V 1.0

Você também pode gostar