Você está na página 1de 43

Universidade Estcio de S

Tecnlogo em Automao

Tutorial sobre o

Microcontrolador PIC16F628A
(verso 2.0)

http://www.wagnerzanco.com.br
suporte@wagnerzanco.com.br

Wagner da Silva Zanco


2007

ndice Analtico
Arquitetura interna do PIC16F628A
Principais caractersticas do PIC16F628A
Pinagem do PIC16F628A

Memria de Programa
Mapeamento da Memria RAM
Memria EEPROM
Registradores com Finalidades Especficas (SFRs)
STATUS
OPTION
INTCON
PIE1
PIR1
PCON
Set de Instrues do PIC16F628A
Portas de I/O
TRISA
TRISB
Inicializando o PORTA
Inicializando o PORTB
Acessando o Hardware
Exerccios
Interrupo
Reset
Power-on Reset (POR)
Power-up Timer
Brown-out Reset (BOR)
Estruturando um Programa em Assembly
Fluxograma
Exemplo 1: Acionando um LED com um boto
Bits de Configurao
Incluindo os Bits de Configurao no Cdigo Fonte
Bibliografia
Anexo 1: Slaids

Wagner da Silva Zanco

3
3
4
4
5
5
5
6
7
7
8
9
10
11
12
12
13
14
14
14
15
17
18
18
18
18
19
19
19
21
22
22
23

Arquitetura interna do PIC16F628A

Principais caractersticas do PIC16F628A


:
16 pinos de I/O;
Freqncia de at 20MHz;
Oscilador interno de 4MHz/37KHz;
2Kx14 bits de memria FLASH de programa;
224x8 bits de memria RAM para dados;
128x8 bits de memria EEPROM interna;
Mdulo TIMER 0 (timer /contador de 8 bits);
Mdulo TIMER 1 (timer /contador de 16 bits);
Mdulo TIMER 2 (timer de 8 bits);
Mdulo CCP (modos Capture, Compare e PWM);
Mdulo de referncia de tenso (16 passos);
Dois comparadores analgicos com referncia interna programvel de tenso;
Um canal de comunicao serial - USART;
Um watchdog timer;
Capacidade de corrente de 25 mA por pino de I/O;
35 instrues;
Dez fontes de interrupo independentes;
Modo de funcionamento sleep;
Tenso de operao entre 3v a 5v para as verses F, e 2v a 5v para verses LF.
Wagner da Silva Zanco

Pinagem do PIC16F628A

Memria de Programa
O PIC16F628A possui 2.048 localidades de memria de
programa. Todas as instrues que o PIC16F628A exe-cuta
possuem o mesmo tamanho, 14 bits, e cada instruo ocupa uma
localidade de memria de programa. O PIC16F628A possui um
barramento de endereos de 13 bits para acesso memria de
programa, o que d uma capacidade de endereamento de 8k,
porm somente 2k(2.048 localidades) foram implementados
fisicamente nesse componente, utilizando a faixa de endereos
0000h - 07FFh. Por isso, os ltimos 6k de localidades da memria
de programa (0800h -1FFFh) esto reservados, ou seja, no tm
utilidade nesse MCU, como mostra a figura 11. Observe tambm
que os endereos 01h, 02h e 03h esto reser-vados.

Figura 11

Wagner da Silva Zanco

Mapeamento da Memria RAM


A memria RAM dividida em quatro bancos e compartilhada pelos registradores de propsito geral (GPRs) e pelos registradores
com finalidades especficas(SFRs). A figura 12 mostra o mapeamento de memria RAM do PIC16F628A.
INDF
TMR0
PCL
STATUS
FSR
PORTA
PORTB

PCLATH
INTCON
PIR1
TMR1L
TMR1H
T1CON
TMR2
T2CON

CCPR1L
CCPR1H
CCP1CON
RCSTA
TXREG
RCREG

CMCON

00h
01h
02h
03h
04h
05h
06h
07h
08h
09h
0Ah
0Bh
0Ch
0Dh
0Eh
0Fh
10h
11h
12h
13h
14h
15h
16h
17h
18h
19h
1Ah
1Bh
1Ch
1Dh
1Eh
1Fh
20h

INDF
OPTION
PCL
STATUS
FSR
TRISA
TRISB

PCLATH
INTCON
PIE1
PCON

PR2

TXSTA
SPBRG
EEDATA
EEADR
EECON1
EECON2
VRCON
REGs de
propsitos
gerais
80 Bytes

REGs de
propsitos
gerais
96 Bytes
70h

acessos
70h-7Fh

7Fh
Bank 0

80h
81h
82h
83h
84h
85h
86h
87h
88h
89h
8Ah
8Bh
8Ch
8Dh
8Eh
8Fh
90h
91h
92h
93h
94h
95h
96h
97h
98h
99h
9Ah
9Bh
9Ch
9Dh
9Eh
9Fh
A0h

EFh
F0h

INDF
TMR0
PCL
STATUS
FSR
PORTB

PCLATH
INTCON

REGs de
propsitos
gerais
48 Bytes

acessos
70h-7Fh

FF
Bank 1

100h
101h
102h
103h
104h
105h
106h
107h
108h
109h
10Ah
10Bh
10Ch
10Dh
10Eh
10Fh

INDF
OPTION
PCL
STATUS
FSR
TRISB

PCLATH
INTCON

11Fh
120h

14Fh
150h
16Fh
170h

acessos
70h-7Fh

17Fh
Bank 2

180h
181h
182h
183h
184h
185h
186h
187h
188h
189h
18Ah
18Bh
18Ch
18Dh
18Eh
18Fh

1EFh
1F0h
1FFh

Bank 3

Memria EEPROM
O PIC16F628A possui 128 posies de memria EEPROM, com capacidade de armazenamento de 1 byte em cada posio. A faixa
de endereos usada para acesso a essa memria 00h - 7Fh. Esta uma memria no-voltil, o que significa que os dados continuam
armazenados em suas localidades mesmo sem alimentao. A memria EEPROM ser estudada com detalhes no captulo 13. O acesso a
essa memria feito por meio de alguns registradores especiais, que so:

Registradores com Finalidades Especficas (SFRs)


Quando vamos montar um programa, preciso configurar alguns registradores para garantir que o MCU funcione de forma
correta. Veja a seguir algumas informaes encontradas na descrio de um registrador. Guarde os significados com cuidado, pois sero
utilizados sempre que um registrador for descrito ao longo do livro.
Rbit de leitura
Wbit de escrita

Wagner da Silva Zanco

SU-n(0 ou 1) -x -q -

s pode ser setado


no implementado, lido como 0
valor assumido no Power-on Reset (POR)
valor desconhecido no (POR)
depende da condio

Veja em seguida a funo de cada bit dos registradores com finalidades especficas mais utilizados em aplicaes com o
PIC16F628A.

STATUS
Registrador STATUS

Endereos 03h, 83h, 103h e 183h

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-1

R-1

R/W - x

R/W - x

R/W - x

IRP

RP1

RP0

/TO

/PD

DC

Bit 7:

IRP: Bit de seleo de banco de memria (usado para endereamento indireto)


1 = Bancos 2 e 3 (100h - 1FFh)
0 = Bancos 0 e 1 (000h - 0FFh)

Bit 6 - 5:

RP1:RP0: Bit de seleo de banco de memria (usado para endereamento direto)


11 = Banco 3 (180h - 1FFh)
10 = Banco 2 (100h - 17Fh)
01 = Banco 1 (080h - 0FFh)
00 = Banco 0 (000h - 07Fh)

Bit 4:

/TO: Bit time out


1 = Depois de um power-up, instruo CLRWDT ou instruo SLEEP
0 = WDT gerou um Timeout
/PD: Bit power-down
1 = Ocorreu um power-up ou foi executada a instruo CLRWDT
0 = A instruo SLEEP foi executada

Bit 3:

Bit 2:

Z: Bit zero
1 = Indica que o resultado da ltima operao efetuada na ULA zero
0 = Indica que o resultado da ltima operao efetuada na ULA diferente de zero

Bit 1:

DC: Digit carry/borrow


1 = A ltima operao de soma (instrues ADD) ocasionou um estouro entre os bits 3 e 4, isto , o resultado
ultrapassou os 4 bits menos significativos
0 = A ltima operao efetuada de soma no ocasionou um estouro entre os bits 3 e 4

Bit 0:

C: Carry/borrow
1 = A ltima operao de soma (instrues ADD) ocasionou um estouro de carry, isto , o resultado
ultrapassou os 8 bits mais significativos
0 = A ltima operao de soma no ocasionou um estouro de carry
Observao: O bit C tambm afetado pelas instrues SUB, RLF e RRF.

Wagner da Silva Zanco

OPTION
Registrador OPTION

Endereos 81h e 181h

Bit 7

Bit 6

Bit 5

Bit 4

Bit 3

Bit 2

Bit 1

Bit 0

R/W - 1

R/W - 1

R/W - 1

R/W - 1

R/W - 1

R/W - 1

R/W - 1

R/W - 1

/RBPU

INTEDG

T0CS

T0SE

PSA

PS2

PS1

PS0

Bit 7:

/RBPU: Ativa os pull-up internos do PORTB


1 = Resistores pull-up do PORTB desativados
0 = Resistores pull-up do PORTB ativados

Bit 6:

/INTEDG: Configura a borda que ir gerar interrupo no pino RB0/INT


1 = Interrupo ocorrer na borda de subida
0 = Interrupo ocorrer na borda de descida
T0CS: Define a origem do incremento do registrador TMR0
1 = TMR0 ser incrementado externamente por uma mudana no pino RA4/T0KI
0 = TMR0 ser incrementado internamente pelo ciclo de instruo

Bit 5:

Bit 4:

T0SE: Define a borda em RA4/T0CKI que ir incrementar o TMR0


1 = O incremento ocorrer na borda de descida
0 = O incremento ocorrer na borda de subida
Observao: O bit 4 s tem validade se T0CS = 1.

Bit 3:

PSA: Define se o prescaler ser aplicado ao TMR0 ou ao WDT


1 = O prescaler ser aplicado ao WDT
0 = O prescaler ser aplicado ao TMR0

Bit 2-0:

PS2:PS0: Configura o valor aplicado ao prescaler


PS2:PS0

TMR0

WDT

000

1:2

1:1

001

1:4

1:2

010

1:8

1:4

011

1:16

1:8

100

1:32

1:16

101

1:64

1:32

110

1:128

1:64

111

1:256

1:128

INTCON
Registrador INTCON

Endereos 0Bh, 8Bh, 10Bh e 18Bh

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 - x

GIE

PEIE

T0IE

INTE

RBIE

T0IF

INTF

RBIF

Wagner da Silva Zanco

Bit 7:

GIE: Chave geral de habilitao das interrupes


1 = As interrupes habilitadas individualmente sero tratadas
0 = Nenhuma interrupo ser tratada

Bit 6:

PEIE: Habilita interrupo dos perifricos


1 = Habilita todas as interrupes dos perifricos
0 = Desabilita todas as interrupes dos perifricos

Bit 5:

T0IE: Habilita interrupo de estouro de TMR0


1 = Interrupo ser tratada
0 = Interrupo no ser tratada

Bit 4:

INTE: Habilita interrupo externa no pino RB0/INT


1 = Interrupo ser tratada
0 = Interrupo no ser tratada

Bit 3:

RBIE: Habilita interrupo por mudana de estado nos pinos RB7:RB4


1 = Interrupo ser tratada
0 = Interrupo no ser tratada

Bit 2:

T0IF: Flag que informa ocorrncia de estouro de TMR0


1 = TMR0 estourou (precisa ser apagado por software)
0 = TMR0 no estourou

Bit 1:

INTF: Flag que informa ocorrncia de interrupo no pino RB0/INT


1 = Ocorreu uma interrupo externa no pino RB0/INT (precisa ser apagado por software)
0 = No ocorreu uma interrupo externa no pino RB0/INT

Bit 0:

RBIF: Flag que informa ocorrncia de interrupo nos pinos RB7:RB4


1 = Ocorreu uma interrupo externa por mudana de estado num dos pinos RB7:RB4 (precisa ser apagado
por software)
0 = No ocorreu uma interrupo externa por mudana de estado num dos pinos RB7:RB4

PIE1
Registrador PIE1

Endereo 8Ch

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

EEIE

CMIE

RCIE

TXIE

CCP1IE

TMR2IE

TMR1IE

Bit 7:

EEIE: Bit de habilitao da interrupo de final de escrita na EEPROM


1 = Interrupo ser tratada
0 = Interrupo no ser tratada

Bit 6:

CMIE: Bit de habilitao da interrupo do comparador


1 = Interrupo ser tratada
0 = Interrupo no ser tratada

Bit 5:

RCIE: Bit de habilitao da interrupo de recepo de dados na USART

Wagner da Silva Zanco

1 = Interrupo ser tratada


0 = Interrupo no ser tratada
Bit 4:

TXIE: Bit de habilitao da interrupo de transmisso de dados na USART


1 = Interrupo ser tratada
0 = Interrupo no ser tratada

Bit 3:

NO IMPLEMENTADO: LIDO COMO ' 0 '

Bit 2:

CCP1IE: Bit de habilitao de interrupo do mdulo CCP


1 = Interrupo ser tratada
0 = Interrupo no ser tratada

Bit 1:

TMR2IE: Habilita interrupo de estouro de TMR2


1 = Interrupo ser tratada
0 = Interrupo no ser tratada

Bit 0:

TMR1IE: Habilita interrupo de estouro de TMR1


1 = Interrupo ser tratada
0 = Interrupo no ser tratada

PIR1
Registrador PIR1

Endereo 0Ch

Bit 7

Bit 6

Bit 5

Bit 4

Bit 3

Bit 2

Bit 1

Bit 0

R/W - 0

R/W - 0

R-0

R-0

R/W - 0

R/W - 0

R/W - 0

EEIF

CMIF

RCIF

TXIF

CCP1IF

TMR2IF

TMR1IF

Bit 7:

EEIF: Bit de sinalizao da interrupo de final de escrita na EEPROM


1 = Operao de escrita completa (limpar flag por software)
0 = Operao de escrita no terminada ou no comeou

Bit 6:

CMIF: Bit de sinalizao da interrupo do comparador


1 = Houve mudana de nvel lgico na sada do comparador
0 = No houve mudana de nvel lgico na sada do comparador

Bit 5:

RCIF: Bit de sinalizao da interrupo de recepo de dados na USART


1 = O buffer de recepo de USART est cheio
0 = O buffer de recepo de USART est vazio

Bit 4:

TXIF: Bit de sinalizao da interrupo de transmisso de dados na USART


1 = O buffer de transmisso de USART est vazio
0 = O buffer de transmisso de USART est cheio

Bit 3:

NO IMPLEMENTADO: LIDO COMO ' 0 '

Bit 2:

CCP1IF: Bit de sinalizao de interrupo do mdulo CCP


MODO DE CAPTURA
1 = O TMR1 fez a captura (limpar flag por software)
0 = O TMR1 no fez uma captura
Wagner da Silva Zanco

MODO COMPARADOR
1 = Ocorreu uma igualdade (TMR1=CCPR1)
0 = No ocorreu igualdade
MODO PWM
Sem uso para este modo
Bit 1:

TMR2IF: Sinaliza interrupo de estouro de TMR2


1 = Ocorreu uma igualdade (TMR2=PR2) (limpar flag por software)
0 = No ocorreu igualdade

Bit 0:

TMR1IF: Sinaliza interrupo de estouro de TMR1


1 = Houve estouro de TMR1 (limpar flag por software)
0 = No houve estouro de TMR1

PCON
Bit 7
U-0
-

Registrador PCON
Bit 6
Bit 5
U-0
U-0
-

Bit 4
U-0
-

Bit 3
R/W - 1
OSCF

Endereo 8Eh
Bit 2
Bit 1
U-0
R/W - 0
/POR

Bit 7: 4, 2:

NO IMPLEMENTADOS: LIDOS COMO ' 0 '

Bit 3:

OSCF: Bit de modo de operao de oscilador interno


1 = Clock de 4MHz
0 = Clock de 37KHz

Bit 1:

/POR: Bit de sinalizao de Power-on Reset (equipamento energizado)


1 = No houve um Power-on Reset
0 = Houve um Power-on Reset (setar flag por software depois do POR)

Bit 0:

/BOR: Bit de sinalizao de Brown-out Reset (reset por queda de tenso)


1 = No houve um Brown-out Reset
0 = Houve um Brown-out Reset (setar flag por software depois do BOR)

10

Wagner da Silva Zanco

Bit 0
R/W - x
/BOR

Set de Instrues do PIC16F628A


Mnemnicos

Operandos
ou
argumentos

14 bits de cdigo
Descrio

Ciclos

MSB

Status
afetado

LSB

Operaes com registradores


ADDWF

f,d

d (W + f)

00 0111 d f f f f f f f

C,DC,Z

ANDWF

f,d

d (W and f)

00 0101 d f f f f f f f

CLRF

Limpa f

00 0001 1 f f f f f f f

COMF

f,d

d complemento de f

00 1001 d f f f f f f f

DECF

f,d

d (f 1)

00 0011 d f f f f f f f

DECFSZ

f,d

d (f 1) e salta prxima linha se


resultado for zero

1(2)

00 1011 d f f f f f f f

INCF

f,d

d (f + 1)

00 1010 d f f f f f f f

INCFSZ

f,d

d (f + 1) e salta prxima linha se


resultado for zero

1(2)

00 1111 d f f f f f f f

IORWF

f,d

d (W ou f)

00 0100 d f f f f f f f

MOVF

f,d

d cpia de f

00 1000 d f f f f f f f

MOVWF

f cpia de W

00 0000 1 f f f f f f f

RLF

f,d

Rotaciona f um bit para a esquerda

00 1101 d f f f f f f f

RRF

f,d

Rotaciona f um bit para a direita

00 1100 d f f f f f f f

SUBWF

f,d

d (f W)

00 0010 d f f f f f f f

C,DC,Z

SWAPF

f,d

Inverte nibble alto com nibble baixo e


guarda resultado em d

00 1110 d f f f f f f f

XORWF

f,d

d (W xor f)

00 0110 d f f f f f f f

Operaes com bits


BCF

f,b

Clear (0) bit b do registrador f

01 00bb b f f f f f f f

BSF

f,b

set (1) bit b do registrador f

01 01bb b f f f f f f f

BTFSC

f,b

Testa bit b do registrador f e salta a


prxima linha se ele for zero

01 10bb b f f f f f f f

BTFSS

f,b

Testa bit b do registrador f e salta a


prxima linha se ele for um

01 11bb b f f f f f f f

Operaes com literais (valores numricos)


ADDLW

W (W + K)

11 111x kkkk

kkkk

C,DC,Z

ANDLW

W (W and K)

11 1001 kkkk

kkkk

IORLW

W (W ou K)

11 1000 kkkk

kkkk

MOVLW

WK

11 00xx kkkk

kkkk

SUBLW

W (K - W)

11 110x kkkk

kkkk

C,DC,Z

XORLW

W (W xor K)

11 1010 kkkk

kkkk

Z
Z

Operaes de controle
CLRW

Limpa Work

00 0001 0000 0011

NOP

No faz nada, apenas gasta tempo

00 0000 0xx0 0000

CALL

Chamada sub-rotina

10 0kkk kkkk

CLRWDT

Limpa WDT

00 0000 0110 0100

GOTO

Desvio para endereo

10 1kkk kkkk

RETFIE

Retorno de interrupo

00 0000 0000 1001

RETLW

Retorno de sub-rotina com K em W

11 01kk kkkk

RETURN

Retorno de sub-rotina

00 0000 0000 1000

Coloca PIC em modo Sleep para


economia de energia

00 0000 0110 0011

SLEEP

Wagner da Silva Zanco

kkkk
/TO, /PD

kkkk
kkkk

/TO, /PD

11

Potas de I/O
Quando Os pinos do PIC16F628A esto configurados como pinos de I/O (ou pinos digitais) eles so divididos em dois grupos:
PORTA(RA7:RA0) e PORTB(RB7:RB0). A figura a seguir mostra a funo de cada pino neste caso.

A tabela a seguir mostra os nveis de tenso correspondentes aos nveis lgicos 0 e 1 para um pino configurado como entrada e como
sada. Os valores apresentados na tabela so vlidos para tenses de alimentao entre 4,5V e 5,5V.
4,5V < VDD < 5,5V
Entrada

Mn

Mx

Nvel Lgico

VIL (tenso de entrada baixa)

0v

0,8v

VIH (tenso de entrada alta)

2v

VDD

VOL (tenso de sada baixa)

0,6v

VOH (tenso de sada alta)

VDD - 0,7v

Sada

Para configurar um como de I/O como entrada ou como sada temos de configurar o repectivo bit do registrador TRISx. O registrador
TRISA configura os pinos do PORTA enquanto que os pinos do PORTB configura os pinos do PORTB. Para configurar um pino como
entrada temos de aplicar nvel lgico 1 no respectivo bit do registrador TRISx. Para configurar um pino como sada temos de aplicar nvel
lgico 0 no respectivo bit do registrador TRISx.

TRISA
Registrador TRISA

Endereo 85h

Bit 7

Bit 6

Bit 5

Bit 4

Bit 3

Bit 2

Bit 1

Bit 0

R/W - 1

R/W - 1

R/W - 1

R/W - 1

R/W - 1

R/W - 1

R/W - 1

TRISA7

TRISA6

TRISA4

TRISA3

TRISA2

TRISA1

TRISA0

Bit 7:

TRISA7: Configura o pino RA7 como entrada ou sada


1 = RA7 configurado como entrada
0 = RA7 configurado como sada

Bit 6:

TRISA6: Configura o pino RA6 como entrada ou sada


1 = RA6 configurado como entrada
0 = RA6 configurado como sada

Bit 5:

O pino RA5 multiplexado com o reset (/MCLR) e com a tenso de programao (Vpp). Ele s pode ser configurado
como entrada. Isso feito desabilitando o bit de configurao Master Clear Enable. Esta configurao efetuada na
hora da programao.

Bit 4:

TRISA4: Configura o pino RA4 como entrada ou sada


1 = RA4 configurado como entrada
0 = RA4 configurado como sada

12

Wagner da Silva Zanco

Bit 3:

TRISA3: Configura o pino RA3 como entrada ou sada


1 = RA3 configurado como entrada
0 = RA3 configurado como sada

Bit 2:

TRISA2: Configura o pino RA2 como entrada ou sada


1 = RA2 configurado como entrada
0 = RA2 configurado como sada

Bit 1:

TRISA1: Configura o pino RA1 como entrada ou sada


1 = RA1 configurado como entrada
0 = RA1 configurado como sada

Bit 0:

TRISA0: Configura o pino RA0 como entrada ou sada


1 = RA0 configurado como entrada
0 = RA0 configurado como sada

TRISB
Registrador TRISB

Endereo 86h e 186h

Bit 7

Bit 6

Bit 5

Bit 4

Bit 3

Bit 2

Bit 1

Bit 0

R/W - 1

R/W - 1

R/W - 1

R/W - 1

R/W - 1

R/W - 1

R/W - 1

R/W - 1

TRISB7

TRISB6

TRISB5

TRISB4

TRISB3

TRISB2

TRISB1

TRISB0

Bit 7:

TRISB7: Configura o pino RB7 como entrada ou sada


1 = RB7 configurado como entrada
0 = RB7 configurado como sada

Bit 6:

TRISB6: Configura o pino RB6 como entrada ou sada


1 = RB6 configurado como entrada
0 = RB6 configurado como sada

Bit 5:

TRISB5: Configura o pino RB5 como entrada ou sada


1 = RB5 configurado como entrada
0 = RB5 configurado como sada

Bit 4:

TRISB4: Configura o pino RB4 como entrada ou sada


1 = RB4 configurado como entrada
0 = RB4 configurado como sada

Bit 3:

TRISB3: Configura o pino RB3 como entrada ou sada


1 = RB3 configurado como entrada
0 = RB3 configurado como sada

Bit 2:

TRISB2: Configura o pino RB2 como entrada ou sada


1 = RB2 configurado como entrada
0 = RB2 configurado como sada

Bit 1:

TRISB1: Configura o pino RB1 como entrada ou sada


1 = RB1 configurado como entrada
0 = RB1 configurado como sada

Bit 0:

TRISB0: Configura o pino RB0 como entrada ou sada


1 = RB0 configurado como entrada
0 = RB0 configurado como sada

Wagner da Silva Zanco

13

Observao: Todos os pinos do PORTA e do PORTB, exceto o pino RB5, so multiplexados com outras funes e a configurao
efetuada pelos registradores TRISx s funciona corretamente se o respectivo pino estiver configurado como I/O.

Inicializando o PORTA
Na palca de teste utilizada neste curso os pinos RA5, RA6 e RA7 no esto sendo utilizados como pinos de I/O. Nos pinos RA7:RA6
est conectado o cristal de 4MHz e o pino RA5/MCLR est sendo utilizado como pino de reset (/MCLR). Para configurar os pinos RA3:RA0
como I/O temos de inicializar o registrador CMCON com o valor 000001112. O pino RA4 implementado com sada de dreno aberto(open
drain output), o que significa que necessrio o auxlio de fonte externa. O cdigo a seguir uma proposta para inicializar o PORTA, na
qual os pinos RA1 e RA2 como entrada e os demais como sada.
;***********************************************************************************************************************************************************************************
BCF
STATUS,RP1
BSF
STATUS,RP0
;ALTERA PARA BANCO1
MOVLW B'00000110'
MOVWF TRISA
;DEFINE RA2:RA1 COMO ENTRADA E DEMAIS PINOS COMO SAIDA
BCF
STATUS,RP1
BCF
STATUS,RP0
;ALTERA PARA BANCO 0
MOVLW B'00000111'
;CONFIGURA RA3:RA0 COM I/O <2:0>
MOVWF CMCON
;***********************************************************************************************************************************************************************************

Inicializando o PORTB
O cdigo seguinte inicializa o PORTB. Configura todos os pinos como sada e desabilita os resistores pull-ups. Para configurar o pino
RB4/PGM como pino de I/O necessrio desabilitar a porgramao em baixa tenso (LVP). Esta desabilitao efetuada na hora da
prgramao comoser visto mais adiante.
;***********************************************************************************************************************************************************************************
BCF
STATUS,RP1
BSF
STATUS,RP0
;ALTERA PARA BANCO1
MOVLW B'00000000'
MOVWF TRISB
;DEFINE TODOS OS PINOS COMO SAIDA
MOVLW B'10000000'
MOVWF OPTION_REG
;PULL_UPS DESABILIADOS <7>
;DEMAIS BITS IRRELEVANTES
BCF
STATUS,RP1
BCF
STATUS,RP0
;ALTERA PARA BANCO 0
;***********************************************************************************************************************************************************************************

Acessando o Hardware
A interface (ou elo de ligao) entre os pinos do microcontrolador e os programa so os registradores PORTA e PORTB. Quando, por
exemplo, um determinado pino est configurado como sada, o nvel lgico aplicado pelo programa no respectivo bit daquele PORT
aparece no pino. Da mesma forma, quando um pino est configurado como entrada, a leitura do pino obtida por meio da leitura do
respectivo bit do PORT. Vemos a seguir um exemplo de uma leitura feita em um nico pino do PORT e uma leitura feita em todos os pinos
do PORT de uma vez.
;***********************************************************************************************************************************************************************************
;LENDO UM PINO (RA1)
BTFSS
PORTA,1
;PINO RA1 =1?
CLRF
TMR0
;NAO, LIMPA REGS TMR0
CLRF
TMR2
;SIM , LIMPA REGS TMR2
;***********************************************************************************************************************************************************************************
;LENDO TODO O PORTB
MOVF
PORTB,W
;W = CONTEUDO DO PORTB
MOVWF TEMP
;TEMP = W
;***********************************************************************************************************************************************************************************

Da mesma forma, podemos escrever em um nico pino do PORT ou ecrever em todos os pinos do PORT de uma s vez. A frao de
cdigo a seguir ilustra a idia.

14

Wagner da Silva Zanco

;***********************************************************************************************************************************************************************************
;ESCREVENDO EM UM PINO (RB2)
BCF
PORTB,2
;PINO RB2 =0
;***********************************************************************************************************************************************************************************
; ESCREVENDO EM TODO O PORTB
MOVLW B00001111
;W = 000011112
MOVWF TEMP
;TEMP = 000011112
;***********************************************************************************************************************************************************************************

Exerccios
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.

Qual a funo bsica de um computador? Explique.


Qual a principal diferena existente entre as arquiteturas Von-Neumann e Harvard?
Qual a funo da CPU num computador?
Como a memria vista pela CPU?
O que um perifrico?
Qual a funo das interfaces?
O que caracteriza uma CPU do tipo CISC e uma do tipo RISC?
O que diferencia um microprocessador de um microcontrolador?
Defina memria voltil e memria no-voltil.
Quais so as caractersticas das memrias do tipo EEPROM, Flash ROM e SRAM?

11. Qual tipo de memria de programa pode ter um MCU da famlia PIC?
12. Qual a funo dos registradores de uso geral e dos registradores com finalidades especficas?
13. Qual das caractersticas seguintes no pertence ao PIC16F628A?
a) 16 pinos de I/O
b) Mdulo TIMER 0
c) Mdulo CCP
d) Um canal de comunicao USART
e) Conversor A/D
14. Qual a funo do sinal de clock.
15. Defina ciclo de instruo.
16. O oscilador do PIC16F628A pode funcionar de quantos modos diferentes? Como feita a escolha?
17. Quais os parmetros que devem ser atendidos no desenvolvimento de um projeto de circuito eletrnico?
18. Caso optemos por utilizar um oscilador a cristal, em quais pinos do PIC16F628A devemos conect-lo? Qual faixa de valores de
capacitncia podem ter os capacitores que fazem parte do arranjo (C1 e C2)?
19. Quais os tipos de memria que integram o PIC16F628A e quais as suas respectivas funes?
20. Quantas localidades de memria de programa possui o PIC16F628A e quantas esto disponveis para armazenar instrues?
21. Quantas posies de memria RAM so ocupadas pelos registradores de uso geral (GPRs) e como se d a distribuio entre os
bancos de memria?
22. Quais as formas disponveis para acessar um dado na memria RAM?
23. Quantas localidades de memria EEPROM possui o PIC16F628A e qual a faixa de endereos utilizada para o acesso a elas?
24. Qual as funo dos bits Z e C do registrador STATUS?
25. Quais as localidades de memria RAM ocupadas pelo registrador INTCON?
26. Qual a funo do bit TMR1IE(PIE1<0>)?
27. Como podemos denominar um conjunto de instrues que o microcontrolador executa para que uma determinada tarefa seja
realizada?
28. Quais os campos que formam uma instruo? Defina-os.
29. Quantas instrues o PIC16F628A capaz de executar e como elas esto divididas?
30. Qual dos termos a seguir no encontrado no mnemnico de uma instruo?
a) DEC
b) CLR
c) INV
d) MOV
e) SWAP

Wagner da Silva Zanco

15

31. Qual a instruo que fora um determinado bit de um registrador assumir nvel lgico 1?
32. Qual a instruo que efetua a soma aritmtica do contedo do registrador WORK com o valor numrico especificado no operando da
instruo?
33. O que faz a instruo COMF f,d?
34. Qual a tarefa executada pela instruo MOVWF f?
35. Como esto divididos os pinos de I/O do PIC16F628A?
36. Quais os registradores responsveis pela configurao dos pinos de I/O como entrada ou como sada? Como feita essa
configurao?
37. Qual dos pinos de I/O do PIC16F628A s pode ser configurado como entrada?
38. Qual o nico pino de I/O do PIC16F628A que no multiplexado com outras funes?
39. Quais as maneiras de efetuarmos a leitura dos pinos de I/O configurados como entrada?
40. Quais as maneiras de efetuarmos a escrita dos pinos de I/O configurados como sada?
41. Em quais bancos de memria se encontram os registradores TRISA e TRISB?

16

Wagner da Silva Zanco

Interrupo
Uma interrupo um evento de hardware que, quando ocorre, provoca um desvio no programa, para que o evento seja tratado. Ao
trmino do tratamento do evento que deu origem interrupo, o programa retorna ao ponto em que parou quando ocorreu o desvio. O
PIC16F628A possui dez fontes de interrupo independentes:
Estouro de TMR0
Interrupo externa RB0/INT
Mudana de estado num dos pinos (RB7:RB4)
Trmino de escrita na EEPROM
Mdulo comparador
Interrupo de USART (recepo e transmisso)
Mdulo CCP
Estouro do TMR1
Interrupo quando TMR2=PR2
A interrupo pode ser tratada ou no. Para que uma interrupo seja tratada, ela precisa estar habilitada. A habilitao feita da
seguinte forma:
1 - Habilitar a chave individual (INTCON ou PIE1).
2 - Habilitar a interrupo de perifrico (INTCON<6>) se a fonte for um perifrico.
3 - Habilitar a chave geral de interrupo(INTCON<7>).
Cada interrupo pode ser habilitada individualmente e independente das demais. Essa habilitao feita por meio dos
registradores INTCON e PIE1 da seguinte forma:
Os flags de sinalizao das interrupes so setados automaticamente quando o evento responsvel pela interrupo ocorre, mas
precisam ser apagados manualmente dentro da rotina de interrupo. importante observar que o flag de sinalizao de qualquer uma das
interrupes ser setado quando o evento responsvel por ela ocorrer, mesmo se a respectiva interrupo estiver desabilitada.
Se uma determinada interrupo estiver habilitada e ocorrer o evento responsvel por ela, o flag de sinalizao correspondente ao
evento setado, a execuo do programa principal interrompida, o endereo da prxima instruo que seria executada, que est
armazenada no contador de programa, colocado em uma pilha e o programa desviado para a localidade 0x04, na qual ser executada
uma rotina responsvel pelo tratamento da interrupo. Quando a instruo RETFIE encontrada, o endereo resgatado da pilha e o
programa volta ao ponto em que ocorreu o desvio, como mostra a figura a seguir.

Wagner da Silva Zanco

17

Reset
No PIC16F628A, o reset pode ocorrer por vrios motivos. Pode ser interessante identificar o motivo do reset, para que as devidas
aes possam ser tomadas corretamente. Veja a seguir os tipos de reset que podem ocorrer no sistema:
Power-on reset (POR - ocorre quando o chip ligado)
/MCLR reset durante operao normal
/MCLR reset durante o sleep
WDT reset (operao normal)
Brown-out reset (BOR - reset devido baixa tenso de alimentao)
Veja na tabela seguinte o status dos flags afetados aps os respectivos resets.
/POR /BOD /TO /PD RESET
0

Power-on reset

Brown-out reset

WDT Reset

/MCLR
normal

Reset durante o sleep

durante

operao

X = desconhecido, U = no muda de nvel

Power-on Reset (POR)


Este um circuito interno ao MCU que o mantm em reset at que VDD alcance tenso suficiente quando a tenso de
alimentao ligada, para que o MCU possa funcionar corretamente.

Power-up Timer
um temporizador que pode ser ativado, fazendo com que o MCU se mantenha em reset por 72ms aps a alimentao ser
ligada. O uso do power-up timer permite que a tenso da fonte se estabilize, garantindo tambm a estabilidade do oscilador principal, antes
de o MCU entrar em funcionamento, evitando travamentos j na inicializao. O Power-up Timer ativado por meio do bit de configurao
PWRTE, desde que ele esteja setado. O Power-up Timer uma proteo adicional ao POR.

Brown-out Reset (BOR)


O PIC16F628A possui um circuito interno chamado BOR, que reseta o MCU quando a tenso de alimentao cai abaixo de 4v
por aproximadamente 100s. Quando a tenso de alimentao volta ao valor nominal, o BOR permite que o MCU seja reinicializado. O
BOR ativado por meio do bit de configurao BOREN, que ir ativ-lo quando setado. Ativar o BOR no ativa automaticamente o Powerup Timer (PWRT) como acontecia com o seu antecessor, o PIC16F628. No PIC16F628A o Power-up Timer deve ser habilitado
manualmente por meio do bit de configurao /PWRTE.
possvel utilizar um circuito de brown-out externo, mudando desta forma o ponto exato em que o reset ir ocorrer. O circuito
mostrado na figura a seguir uma sugesto do fabricante e far com que o MCU seja resetado quando a tenso de alimentao cair abaixo
de Vz + 0,7, sendo Vz a tenso de ruptura do diodo zener. Se o brown-out externo utilizado, desabilite o bit de configurao BOREN.
O BOR indicado para sistemas que necessitam ser desligados e religados rapidamente ou em locais onde queda de tenso da rede
eltrica comum. Nesses casos, o BOR impedir que o MCU trave, caso haja uma interrupo momentnea na tenso de alimentao.

18

Wagner da Silva Zanco

Estruturando um Programa em Assembly


1 passo - Ttulo, nome do projetista, data de concluso e verso do programa
2 passo - Arquivos include
3 passo - Paginao de memria
4 passo - Criar variveis
5 passo - Identificar flags utilizados no sistema
6 passo - Criar constantes
7 passo - Identificar os pinos que so usados como entrada e como sada
8 passo - Vetor reset
9 passo - Vetor de interrupo e rotinas de interrupo
10 passo - Configurao dos registradores com finalidades especficas
11 passo - Inicializao das variveis
12 passo - Rotina principal
13 passo - Sub-rotinas

Fluxograma
O fluxograma uma arma poderosa que pode auxiliar o programador na montagem do programa. Ele mostra como o programa
est estruturado, facilitando a montagem das sub-rotinas. As convenes que vamos utilizar no fluxograma so:

Observao: Em todos os fluxogramas encontrados neste livro, considera-se como "Incio" do 1 ao 11 passo.

Exemplo 1: Acionando um LED com um boto


O hardware mostrado na figura 29 implementado na placa Base de Teste 01, cujo diagrama esquemtico se encontra no
apndice B. Basta gravar o programa objeto no MCU e coloc-lo na placa, que ele funcionar sem problemas.

Wagner da Silva Zanco

19

O fluxograma ao lado informa: enquanto o boto1 (BT1) estiver


pressionado, o LED ficar aceso; enquanto o boto estiver solto, o
LED ficar apagado. Com o fluxograma pronto basta convert-lo na
Linguagem Assembly, substituindo cada bloco por uma ou mais
instrues, ou at mesmo por sub-rotina. Observe no diagrama
esquemtico que enquanto BT1 estiver solto, estar chegando 5V
(ou nvel 1) no pino RA1, visto que um pino de I/O configurado como
entrada possui alta impedncia. Quando BT1 pressionado, o pino
RA1 aterrado, o que faz com que chegue nvel 0 nele.

;**********************************************************************************************************************************************
;
PROGRAMA - ACIONAR UM LED COM BOTAO
;
DESENVOLVIDO POR WAGNER DA SILVA ZANCO
;
VERSAO 1.0
;
23/06/2003
;**********************************************************************************************************************************************
;
ARQUIVOS DE DEFINICOES
;**********************************************************************************************************************************************
#INCLUDE <P16F628A.INC>
; ARQUIVO PADRAO MICROCHIP PARA16F628A
;**********************************************************************************************************************************************
;
PAGINACAO DA MEMORIA
;**********************************************************************************************************************************************
;COMANDOS PARA ALTERACAO DE PAGINA DE MEMORIA PARA ENDERECAMENTO DIRETO
BANK0
MACRO
;MACRO PARA SELECIONAR BANCO 0
BCF
STATUS,RP0
BCF
STATUS,RP1
ENDM
;FIM DA MACRO BANK0
BANK1
MACRO
;MACRO PARA SELECIONAR BANCO 1
BSF
STATUS,RP0
BCF
STATUS,RP1
ENDM
;FIM DA MACRO BANK1
;**********************************************************************************************************************************************
;
ENTRADAS
;**********************************************************************************************************************************************
; PINOS QUE SERAO UTILIZADOS COMO ENTRADA
#DEFINE BOTAO1
PORTA,1
;0 --> PRESSIONADO
;1 --> LIBERADO
;**********************************************************************************************************************************************
;
SAIDAS
;**********************************************************************************************************************************************
;PINOS QUE SERAO UTILIZADOS COMO SAIDA
#DEFINE
LED
PORTB,0
;0 --> APAGADO
;1 --> ACESO
;**********************************************************************************************************************************************

;**********************************************************************************************************************************************
;
VETOR DE RESET
;**********************************************************************************************************************************************
ORG
0x00
;ENDERECO INICIAL DE PROCESSAMENTO
GOTO
INICIO
;DESVIA PARA INICIO
;**********************************************************************************************************************************************
;
INTERRUPCAO
;**********************************************************************************************************************************************
; AS INTERRUPCOES NAO SERAO UTILIZADAS
ORG
0x04
;ENDERECO INICAL DA INTERRUPCAO
RETFIE
;RETORNA DA INTERRUPCAO
;**********************************************************************************************************************************************
;
INICIO
;**********************************************************************************************************************************************
INICIO
BANK1
;ALTERA PARA BANCO1
MOVLW B'00000010'
MOVWF TRISA
;DEFINE RA1 COMO ENTRADA e DEMAIS BITS COMO SAIDA
MOVLW B'00000000'
MOVWF TRISB
;DEFINE O PORTB COMO SADA
MOVLW B'10000000'
MOVWF OPTION_REG
;PULL_UPS DESABILIADOS <7>
;DEMAIS BITS IRRELEVANTES
MOVLW B'00000000'

20

Wagner da Silva Zanco

MOVWF

INTCON

;CHAVE GERAL DE INTERRUPCAO DESLIGADA <7>


;DEMAIS BITS IRRELEVANTES

BANK0
MOVLW B'00000111'
;CONFIGURA RA3:RA0 COM I/O <2:0>
MOVWF CMCON
;**********************************************************************************************************************************************
;
INICIALIZACAO DAS VARIAVEIS
;**********************************************************************************************************************************************
CLRF
PORTA
;LIMPA PORTA
CLRF
PORTB
;LIMPA PORTB
;**********************************************************************************************************************************************
;ROTINA PRINCIPAL
MAIN
BTFSC
BOTAO1
;BOTAO1 ESTA PRESSIONADO?
GOTO
APAGA_LED
;NAO, DESVIA
GOTO
ACENDE_LED
;SIM, DESVIA
APAGA_LED
BCF
GOTO

LED
MAIN

;APAGA LED
;RETORNA AO INICIO

ACENDE_LED
BSF
LED
;ACENDE LED
GOTO
MAIN
;DESVIA
;**********************************************************************************************************************************************
END
;FIM DO PROGRAMA
;**********************************************************************************************************************************************

Bits de Configurao
Independente do programador utilizado, necessrio efetuar algumas configuraes que sero gravadas no chip na hora da
programao. O PIC16F628A possui um registrador para esta finalidade, o CONFIG, que pode ser acessado por meio do endereo 2007h.
Veja que este endereo est fora da faixa de endereos da memria de programa do componente, que vai de 0000h a 07FFh. Por isso ele
s pode ser acessado na hora da programao do MCU. Os itens configurados variam de componente para componente. O PIC16F628A
possui as seguintes opes de configurao:
Tipo de Oscilador
Watchdog Timer (WDT)
Power Up Timer
Brown Out Detect

Master Clear Enable


Low Voltage Progam
Data EE read Protect
Code Protect

Tipo de Oscilador - o PIC16F628A pode funcionar com vrios tipos de oscilador. A seleo feita por meio do registrador CONFIG e a
escolha tem de ser efetuada de acordo com o oscilador presente na placa em que vai rodar o programa. Eles podem ser:
LP
XT
HS
RC: CLOCKOUT
RC: I/O
INTOSC: CLKOUT
INTOSC: I/O
EC

Cristal de baixa potncia (at 200KHz)


Cristal/Ressonador (at 4MHz)
Cristal/Ressonador cermico de alta freqncia (at 20MHz)
RC externo com sada de clock. Essa opo fornece no pino RA6/OSC2/CLKOUT um sinal com freqncia
quatro vezes menor que a do oscilador principal.
RC externo sem sada de clock (RA6 disponvel como I/O)
Oscilador interno de 4MHz/37KHz com sada de clock. Essa opo fornece no pino RA6/OSC2/CLKOUT um
sinal com freqncia quatro vezes menor que a do oscilador principal.
Oscilador interno de 4MHz/37KHz sem sada de clock (RA6 e RA7 disponveis como I/O)
Oscilador externo. Nessa opo o pino RA6 funciona como I/O.

Watchdog Timer (WDT) - circuito temporizador que provocar um reset no programa sempre que ele produzir um Timeout. Sua utilizao
indicada para locais onde o programa no pode parar de funcionar, como no caso de um computador de bordo de um automvel. O WDT
tem um oscilador independente do oscilador principal. Isso significa que, se por algum motivo o oscilador principal travar, o WDT continua
em funcionamento. Voc pode habilitar ou desabilitar o funcionamento do WDT. O captulo 9 explica com mais detalhes o funcionamento
do WDT.
Power Up Timer - quando estiver ativada, far com que o MCU s comece a funcionar cerca de 72ms depois que a fonte de alimentao
for ligada. Isso garante que, quando ele comear a funcionar, o oscilador j estar estabilizado, evitando problemas como travamento.
Brown Out Detect - quando essa opo ativada, o MCU ir resetar, caso a tenso de alimentao caia abaixo de um determinado valor.
Caso no esteja ativada, o MCU pode travar quando ocorrer uma queda de tenso momentnea.
Master Clear Enable - habilita o pino RA5/MCLR/Vpp a funcionar como entrada de reset. Para configurar esse pino como I/O, essa opo
deve ser desabilitada.

Wagner da Silva Zanco

21

Low Voltage Program - essa opo ativa a programao em baixa voltagem. A menos que voc saiba o que est fazendo, deixe-a
desabilitada. necessrio que essa opo esteja desabilitada para que o pino RB4/PGM seja configurado como I/O.
Data EE read Protect - se estiver desativada, todos os dados armazenados na EEPROM interna podero ser lidos pelo programa de
gravao. Para proteger os dados armazenados na EEPROM, habilite essa opo.
Code Protect - a mais importante opo a ser configurada. Ativado o cdigo de proteo, ningum mais consegue ler o programa
gravado no chip, nem mesmo voc. O chip pode ser regravado, mas no pode ser lida a sua memria de programa, at que uma nova
gravao seja feita com essa opo desativada. Ativar o cdigo de proteo garante que o programa gravado no componente no ser
copiado de forma nenhuma, se o MCU estiver funcionando dentro das especificaes eltricas, definidas pelo fabricante.

Incluindo os bits de configurao no cdigo fonte


As configuraes correspondentes aos bits de configurao podem ser includas no cdigo-fonte por meio da diretiva __CONFIG.
As opes para o PIC16F628A so as seguintes:
_BOREN_ON
Ativa Brown-out Reset
_BOREN_OFF
Desativa Brown-out Reset
_CP_ON
Protege toda a memria de programa
_CP_OFF
Memria de programa desprotegida
_DATA_CP_ON
Memria EEPROM protegida
_DATA_CP_OFF
Memria EEPROM desprotegida
_PWRTE_OFF
Desativa Power Up Timer
_PWRTE_ON
Ativa Power Up Timer
_WDT_ON
Habilita Watchdog Timer
_WDT_OFF
Desabilita Watchdog Timer
_LVP_ON
Ativa Low Voltage Progam
_LVP_OFF
Desativa Low Voltage Progam
_MCLRE_ON
Habilita Master Clear
_MCLRE_OFF
Desabilita Master Clear
_RC_OSC_CLKOUT
RC externo com sada de clock
_RC_OSC_NOCLKOUT
RC externo sem sada de clock
_INTOSC_OSC_CLKOUT
Oscilador interno de 4MHz/37KHz com sada de clock
_INTOSC_OSC_NOCLKOUT
Oscilador interno de 4MHz/37KHz sem sada de clock
_EXTCLK_OSC
Oscilador de clock externo
_LP_OSC
Cristal de baixa potncia (at 200KHz)
_XT_OSC
Cristal/Ressonador (at 4MHz)
_HS_OSC
Cristal/Ressonador de alta freqncia (at 20MHz)
Vemos a seguir um exemplo de configurao para o registrador CONFIG, que pode ser includo no cdigo-fonte. A linha seguinte
diz que o Brown Out Detect (doravante denominado Brown Out Reset) est ativado, que todo o cdigo do programa est protegido, que o
Power Up Timer est ativado, que o WDT est desabilitado, que a programao em baixa tenso est desativada, que a memria
EEPROM est desprotegida, que o /MCLR est habilitado e que o oscilador a cristal. Quando o programa de gravao for executado,
essas opes j estaro selecionadas, facilitando, desta forma, o trabalho do programador. Observe que o caractere & usado como elo
de ligao entre as opes configuradas.
__CONFIG _BOREN_ON&_CP_OFF&_PWRTE_ON&_WDT_OFF&_LVP_OFF&_ DATA_CP_OFF &_MCLRE_ON&_XT_OSC

Bibliografia
ZANCO, WAGNER DA SILVA. Microcontroladores PIC16F628A/648A - Uma abordagem prtica e objetiva. So Paulo: rica, 2005.
PIC16F627A/628A/648A: Datasheet DS40300B. USA: MICROCHIP, 1999.

22

Wagner da Silva Zanco

Um Resumo da
Evoluo da Eletrnica

Wagner Zanco

A funo bsica de um computador


O computador basicamente um processador de
informaes. O usurio introduz as informaes no
computador por meio de um dispositivo de entrada como o
teclado, mouse etc. O computador processa as
informaes e retorna o resultado para o usurio por meio
de um dispositivo de sada como o Vdeo ou impressora.

Wagner Zanco

Arquitetura Von-Neumann

CPU um circuito integrado (CI) capaz de executar um conjunto


de tarefas denominadas instrues. A CPU gerencia todo o sistema e
executa os programas.
Memria Armazena os dados que sero processados e os
programas que sero executados.
Dispositivos de I/O So os responsveis pela entrada e sada
de dados do sistema.

Wagner Zanco

Organizao da Memria
A memria composta por vrias localidades podendo
armazenar um conjunto de bits em cada uma. Cada
localidade possui seu prprio endereo, sendo este um
valor numrico representado no sistema hexadecimal.
A unidade padro de armazenamento de dados na
memria o Byte.

Wagner Zanco

Arquitetura Harvard

Wagner Zanco

Von-Neumann versus Harvard

CPU CISC As CPUs utilizadas em computadores que seguem a


arquitetura Von-Neumann so do tipo CISC, as quais possuem um set
de instrues ampliado (muitas instrues).

CPU RISC As CPUs utilizadas em computadores que seguem a


arquitetura Harvard so do tipo RISC, as quais possuem um set de
instrues reduzido (poucas instrues).
Wagner Zanco

GERENCIANDO O SISTEMA
Para gerenciar o sistema a CPU precisa se comunicar
com a memria e com os dispositivos de I/O. Esta
comunicao pode ser de leitura ou de escrita.

Leitura - quando a CPU envia uma informao para ser armazenada numa
localidade de memria ou para um dispositivo de I/O. Por exemplo, quando a
CPU envia uma informao para o vdeo, dizemos que ela escreveu no vdeo.
Escrita - quando a CPU busca uma informao na memria ou num
dispositivo de I/O. Quando uma tecla pressionada no teclado e aparece no
vdeo, porque a CPU efetuou uma leitura no teclado e escreveu o dado lido no
vdeo.
Wagner Zanco

A CPU reconhece cada um dos dispositivos


de I/O, assim como cada localidade de
memria pelo seu respectivo endereo.

Wagner Zanco

CAPACIDADE DE PROCESSAMENTO DE UMA CPU

SET(conjunto)
de
instrues
-- SET(conjunto)
Velocidade de
com
que as instrues so executadas
instrues;
- Multiprocessamento (execuo de vrias instrues
- Velocidade com que as instrues so executadas;
simultneas)
-- Multiprocessamento
Quantidade de memria
capaz
desimultneas);
enderear
(execuo que
de vrias
instrues
- Etc.
-Quantidade de memria que capaz de enderear;
-

Comprimento da via de dados

- Etc.

Wagner Zanco

MEMRIAS SEMICONDUTORAS
So memrias implementadas em
circuitos integrados (chips de memria).
Esto divididas em dois grupos: Voltil e no-voltil.
Voltil a memrias que perde os dados armazenados
quando a energia desligada.
No-Voltil a memria que no perde os dados
armazenados quando a energia desligada.

Wagner Zanco

ROM
- Somente leitura
- programada eletricamente pelo usu
usurio
PROM
- Somente leitura
- programada eletricamente pelo usu
usurio
- Uma vez programada se transforma numa ROM
- No pode ser reprogramada

MEMRIA
NO-VOLTIL

EPROM
- Somente Leitura
- Program
Programvel Eletricamente pelo usu
usurio
- Possui uma janela que quando exposta a raios ultravioletas, seus dados s
so apagados
podendo ser reprogramada.
E2PROM
- Somente Leitura
- Program
Programvel Eletricamente pelo usu
usurio
- semelhante a uma EPROM s
s que seus dados s
so apagados atrav
atravs de uma tens
tenso
el
eltrica aplicada a um de seus pinos, podendo ser reprogramada da mesma
mesma forma que uma
EPROM.
FLASH-ROM: Identificados pelo sufixo F, estes componentes permitem ser
apagados/regravados mais de mil vezes atrav
atravs de sinais el
eltricos aplicados em alguns de
seus pinos, o que pode ser feito automaticamente por um circuito gravador de Flash como o
Picstart Plus, fabricado pela Microchip ou o JDM, cujo hardware encontrado facilmente na
internet. Estes componentes s
o para teste de programas e implementa
o
so a melhor op
opo
implementao
final dos circuitos, visto que est
esto ficando cada dia mais baratos.
Wagner Zanco

MEMRIA VOLTIL

DRAM
- Leitura e escrita
- Fabricada com capacitores
- Precisa de REFRESH para manter os dados armazenados, mesmo com a energia ligada.

SRAM
- Leitura e escrita
- Fabricada com FlipFlip-flops
- No precisa de refresh

REFRESH - uma simulao de leitura que feita em cada localidade de


memria com o objetivo de reforar os dados ali armazenados. Isso
necessrio porque a memria DRAM constituda de capacitores (armazena
energia e a perde em pouco tempo).
Wagner Zanco

MICROCONTROLADOR

um computador em um nico chip. O microcontrolador integra


em um nico invlucro CPU, memria e dispositivos de I/O. O
primeiro microcontrolador, o 8048, foi desenvolvido pela empresa
Intel no final da dcada de setenta.
Ao contrrio do microcontrolador, para se construir um computador
com um microprocessador necessrio utilizar memria externa e
dispositivos de I/O externos.
Wagner Zanco

FAMLIA PIC
Desenvolvida pela empresa
Microchip Technology Inc.
- PIC10 (8 bits) (menor microcontrolador do mundo)
- PIC12 (8 bits)
- PIC14 (8 bits)
- PIC16 (8 bits)
- PIC18 (8 bits)
- PIC24 (16 bits)
Wagner Zanco

Microcontroladores da Fam
Famlia PIC

- Arquitetura RISC (set de instrues reduzido)


- AT 40MHz
- Memria de Programas de 12, 14, 16 ou 24 Bits
- Memria de programa FlASH-ROM
- USART, Conversor A/D, I2C, CAN, SPI, Comparador,
PWM, RF, ECCP, Ethernet, USB etc.

Wagner Zanco

MEMRIA DE PROGRAMA
ROM TIPO MSCARA - O chip j sai da fbrica com o programa gravado nele, no
podendo ser regravado de forma nenhuma pelo usurio. O custo destes componentes
bem reduzido, mas s so viveis se adquiridos em grande quantidade. Estes
componentes so identificados pelo sufixo CR.

OTP - Estes dispositivos utilizam memria PROM para armazenar os programas. Eles
vem de fbrica vazios, sendo a gravao do programa feita pelo usurio, no podendo o
mesmo ser regravado. Isto impede a utilizao destes componentes na fase de
desenvolvimento e teste de programas. Os mesmos so identificados pelo sufixo C.
EPROM - Estes componentes possuem uma janela onde podemos, atravs da exposio
a raios ultravioletas, apagar os programas gravados no chip. Embora seja trabalhoso
efetuar o apagamento do programa, estes componentes podem ser utilizados na fase de
testes e desenvolvimento de programas. O sufixo pode ser JW para dispositivos com
encapsulamento do tipo DIP ou CL para dispositivos com encapsulamento do tipo PLCC.
FLASH

- Identificados pelo sufixo F, estes componentes permitem ser


apagados/regravados milhares de vezes atravs de sinais eltricos aplicados em alguns de
seus pinos, o que pode ser feito automaticamente por um circuito gravador de Flash como
o Picstart Plus, fabricado pela Microchip ou o JDM, cujo hardware encontrado facilmente
na internet. Estes componentes so a melhor opo para teste de programas e
implementao final dos circuitos, visto que esto ficando cada dia mais baratos.
Wagner Zanco

ARQUITETURA INTERNA DO PIC16F628A

Wagner Zanco

CARACTERSTICAS DO PIC16F628A
- 16 pinos de I/O;
- Freqncia de at 20MHz;
- Oscilador interno de 4MHz/37KHz;
- 2Kx14 bits de memria FLASH de programa;
- 224x8 bits de memria RAM para dados;
- 128x8 bits de memria E2PROM interna;
- TIMER0 (timer /contador de 8 bits);
- TIMER1 (timer /contador de 16 bits);
- TIMER2 (timer de 8 bits);
- 1 canal PWM com captura e amostragem (CCP);
- 2 comparadores analgicos com referncia interna programvel de tenso;
- 1 canal de comunicao USART serial;
- 1 Timer Watchdog;
- Capacidade de corrente de 25 mA por pino de I/O;
- 35 instrues;
- 10 fontes de interrupo independentes;
- Modo de funcionamento Sleep;
- Tenso de operao entre 3v a 5v (2v a 5v para verso LF).

Wagner Zanco

PINAGEM DO PIC16F628A

Wagner Zanco

PINAGEM DO PIC16F628A

Wagner Zanco

OSCILADOR

Qualquer instruo executada pela CPU utiliza como


referncia um sinal de clock que gerado por um
oscilador. O Oscilador pode ser externo ou interno.

Wagner Zanco

SINAL DE CLOCK
O sinal de clock uma onda quadrada que sincroniza
a execuo das instrues executadas pela CPU.

Os Microcontroladores PIC gastam quatro ciclos de clock (ciclo


de instruo) para executar uma instruo, salvo algumas
excees. O ciclo de instruo tambm chamado de clock
interno.
T(ciclo de instruo) = 1 / (Fosc/4)

Wagner Zanco

MODOS DE FUNCIONAMENTO DO
OSCILADOR DO PIC16F628A

Wagner Zanco

MEMRIA DE PROGRAMA DO PIC16F628A

Wagner Zanco

MEMRIA DE RAM DO PIC16F628A

A memria de RAM (ou de dados) do PIC16F628A


dividida em dois grupos:

-Registradores com finalidade especfica


-Registradores de uso geral

Obs:. Cada registrador do PIC16F628A ocupa uma


localidade de memria e pode armazenar 8 bits.

Wagner Zanco

MEMRIA DE DADOS DO PIC16F628A

Wagner Zanco

Bit 7:

IRP: Bit de seleo de banco de memria (usado para endereamento indireto)


1 = Bancos 2 e 3 (100h - 1FFh)
0 = Bancos 0 e 1 (000h - 0FFh)

Bit 6 - 5:

RP1:RP0: Bit de seleo de banco de memria (usado para endereamento direto)


11 = Banco 3 (180h - 1FFh)
10 = Banco 2 (100h - 17Fh)
01 = Banco 1 (080h - 0FFh)
00 = Banco 0 (000h - 07Fh)

Bit 4:

/TO: Bit time out


1 = Depois de um power-up, instruo CLRWDT ou instruo SLEEP
0 = WDT gerou um Timeout

Wagner Zanco

Bit 3:

/PD: Bit power-down


1 = Ocorreu um power-up ou foi executada a instruo CLRWDT
0 = A instruo SLEEP foi executada

Bit 2:

Z: Bit zero
1 = Indica que o resultado da ltima operao efetuada na ULA zero
0 = Indica que o resultado da ltima operao efetuada na ULA diferente de zero

Bit 1:

DC: Digit carry/borrow

1 = A ltima operao de soma (instrues ADD) ocasionou um estouro entre os bits 3 e


4, isto , o resultado ultrapassou os 4 bits menos significativos
0 = A ltima operao efetuada de soma no ocasionou um estouro entre os bits 3 e 4
Bit 0:

C: Carry/borrow

1 = A ltima operao de soma (instrues ADD) ocasionou um estouro de carry, isto ,


o resultado ultrapassou os 8 bits mais significativos
0 = A ltima operao de soma no ocasionou um estouro de carry

Wagner Zanco

Bit 7:

/RBPU: Ativa os resistores pull-ups internos do PORTB


1 = Resistores pull-ups do PORTB desativados
0 = Resistores pull-ups do PORTB ativados

Bit 6:

/INTEDG: Configura a borda que ir gerar interrupo no pino RB0/INT


1 = Interrupo ocorrer na borda de subida
0 = Interrupo ocorrer na borda de descida

Bit 5:

T0CS: Define a origem do incremento do registrador TMR0


1 = TMR0 ser incrementado externamente por uma mudana no pino RA4/T0KI
0 = TMR0 ser incrementado internamente pelo ciclo de instruo

Bit 4:

T0SE: Define a borda em RA4/T0CKI que ir incrementar o TMR0


1 = O incremento ocorrer na borda de descida
0 = O incremento ocorrer na borda de subida

Wagner Zanco

10

Wagner Zanco

Bit 7:

GIE: Chave geral de habilitao das interrupes


1 = As interrupes habilitadas individualmente sero tratadas
0 = Nenhuma interrupo ser tratada

Bit 6:

PEIE: Habilita interrupo dos perifricos


1 = Habilita todas as interrupes dos perifricos
0 = Desabilita todas as interrupes dos perifricos

Bit 5:

T0IE: Habilita interrupo de estouro de TMR0


1 = Interrupo ser tratada
0 = Interrupo no ser tratada

Bit 4:

INTE: Habilita interrupo externa no pino RB0/INT


1 = Interrupo ser tratada
0 = Interrupo no ser tratada
Wagner Zanco

Bit 3:

RBIE: Habilita interrupo por mudana de estado nos pinos RB7:RB4


1 = Interrupo ser tratada
0 = Interrupo no ser tratada

Bit 2:

T0IF: Flag que informa ocorrncia de estouro de TMR0


1 = TMR0 estourou (precisa ser apagado por software)
0 = TMR0 no estourou

Bit 1:

INTF: Flag que informa ocorrncia de interrupo no pino RB0/INT


1 = Ocorreu uma interrupo externa no pino RB0/INT (precisa ser apagado por
software)
0 = No ocorreu uma interrupo externa no pino RB0/INT

Bit 0:

RBIF: Flag que informa ocorrncia de interrupo nos pinos RB7:RB4


1 = Ocorreu uma interrupo externa por mudana de estado num dos pinos
RB7:RB4 (precisa ser apagado por software)
0 = No ocorreu uma interrupo externa por mudana de estado num dos pinos
RB7:RB4
Wagner Zanco

11

Bit 7:

EEIE: Bit de habilitao da interrupo de final de escrita na EEPROM


1 = Interrupo ser tratada
0 = Interrupo no ser tratada

Bit 6:

CMIE: Bit de habilitao da interrupo do comparador


1 = Interrupo ser tratada
0 = Interrupo no ser tratada

Bit 5:

RCIE: Bit de habilitao da interrupo de recepo de dados na USART


1 = Interrupo ser tratada
0 = Interrupo no ser tratada

Bit 4:

TXIE: Bit de habilitao da interrupo de transmisso de dados na USART


1 = Interrupo ser tratada
0 = Interrupo no ser tratada
Wagner Zanco

Bit 3:

NO IMPLEMENTADO: LIDO COMO ' 0 '

Bit 2:

CCP1IE: Bit de habilitao de interrupo do mdulo CCP


1 = Interrupo ser tratada
0 = Interrupo no ser tratada

Bit 1:

TMR2IE: Habilita interrupo de estouro de TMR2


1 = Interrupo ser tratada
0 = Interrupo no ser tratada

Bit 0:

TMR1IE: Habilita interrupo de estouro de TMR1


1 = Interrupo ser tratada
0 = Interrupo no ser tratada

Wagner Zanco

Bit 7:

EEIF: Bit de sinalizao da interrupo de final de escrita na EEPROM


1 = Operao de escrita completa (limpar flag por software)
0 = Operao de escrita no terminada ou no comeou

Bit 6:

CMIF: Bit de sinalizao da interrupo do comparador


1 = Houve mudana de nvel lgico na sada do comparador
0 = No houve mudana de nvel lgico na sada do comparador

Bit 5:

RCIF: Bit de sinalizao da interrupo de recepo de dados na USART


1 = O buffer de recepo de USART est cheio
0 = O buffer de recepo de USART est vazio

Bit 4:

TXIF: Bit de sinalizao da interrupo de transmisso de dados na USART


1 = O buffer de transmisso de USART est vazio
0 = O buffer de transmisso de USART est cheio
Wagner Zanco

12

Bit 3:

NO IMPLEMENTADO: LIDO COMO ' 0 '

Bit 2:

CCP1IF: Bit de sinalizao de interrupo do mdulo CCP


MODO DE CAPTURA
1 = O TMR1 fez a captura (limpar flag por software)
0 = O TMR1 no fez uma captura
MODO COMPARADOR
1 = Ocorreu uma igualdade (TMR1=CCPR1)
0 = No ocorreu igualdade
MODO PWM
Sem uso para este modo

Bit 1:

TMR2IF: Sinaliza interrupo de estouro de TMR2


1 = Ocorreu uma igualdade (TMR2=PR2) (limpar flag por software)
0 = No ocorreu igualdade

Bit 0:

TMR1IF: Sinaliza interrupo de estouro de TMR1


1 = Houve estouro de TMR1 (limpar flag por software)
0 = No houve estouro de TMR1

Wagner Zanco

Bit 7: 4, 2: NO IMPLEMENTADOS: LIDOS COMO ' 0 '


Bit 3:

OSCF: Bit de modo de operao de oscilador interno


1 = Clock de 4MHz
0 = Clock de 37KHz

Bit 1:

/POR: Bit de sinalizao de Power-on Reset (equipamento energizado)


1 = No houve um Power-on Reset
0 = Houve um Power-on Reset (setar flag por software depois do POR)

Bit 0:

/BOR: Bit de sinalizao de Brown-out Reset (reset por queda de tenso)


1 = No houve um Brown-out Reset
0 = Houve um Brown-out Reset (setar flag por software depois do BOR)

Wagner Zanco

Wagner Zanco

13

Wagner Zanco

PORTAS DE I/O
PORTA(RA7:RA0) e PORTB(RB7:RB0)

Wagner Zanco

NVEIS DE TENSO CORRESPONDENTES


AOS NVEIS LGICOS 0 e 1

Wagner Zanco

14

CONFIGURANDO OS PINOS DE I/O COMO


ENTRADA OU COMO SADA

Cada bit do TRISA configura o respectivo pino do PORTA

Wagner Zanco

CONFIGURANDO OS PINOS DE I/O COMO


ENTRADA OU COMO SADA

Cada bit do TRISB configura o respectivo pino do PORTB

Wagner Zanco

INICIALIZANDO O PORTA

Wagner Zanco

15

INICIALIZANDO O PORTB

Wagner Zanco

LENDO O PORT

Wagner Zanco

ESCREVENDO NO PORT

Wagner Zanco

16

Tratamento de uma interrupo

Wagner Zanco

Power-on Reset (POR)

RESET

Este um circuito interno ao MCU que o mantm em reset at que


VDD alcance tenso suficiente quando a tenso de alimentao
ligada, para que o MCU possa funcionar corretamente.

Power-up Timer
um temporizador que pode ser ativado, fazendo com que o
MCU se mantenha em reset por 72ms aps a alimentao ser
ligada. O uso do power-up timer permite que a tenso da fonte
se estabilize, garantindo tambm a estabilidade do oscilador
principal, antes de o MCU entrar em funcionamento, evitando
travamentos j na inicializao.

Brown-out Reset (BOR)


O PIC16F628A possui um circuito interno chamado BOR, que reseta o
MCU quando a tenso de alimentao cai abaixo de 4v por
aproximadamente 100s. Quando a tenso de alimentao volta ao valor
Wagner Zanco
nominal, o BOR permite que o MCU seja reinicializado.

Estruturando um Programa em Assembly

RESET

1 passo - Ttulo, nome do projetista, data de concluso e verso do programa


2 passo - Arquivos include
3 passo - Paginao de memria
4 passo - Criar variveis
5 passo - Identificar flags utilizados no sistema
6 passo - Criar constantes
7 passo - Identificar os pinos que so usados como entrada e como sada
8 passo - Vetor reset
9 passo - Vetor de interrupo e rotinas de interrupo
10 passo - Configurao dos registradores com finalidades especficas
11 passo - Inicializao das variveis
12 passo - Rotina principal
13 passo - Sub-rotinas
Wagner Zanco

17

FLUXOGRAMA

RESET

O fluxograma uma arma poderosa que pode auxiliar o programador na


montagem do programa. Ele mostra como o programa est estruturado,
facilitando a montagem das sub-rotinas.

Wagner Zanco

Exemplo 1: Acionando um LED com um boto

RESET

Wagner Zanco

FLUXOGRAMA

RESET

Wagner Zanco

18

Bits de Configurao

RESET

- Tipo de oscilador
- Watchdog Timer (WDT)
- Power Up Timer
- Brown Out Detect
- Master Clear Enable
- Low Voltage Progam
- Data EE read Protect
- Code Protect

Wagner Zanco

Bits de Configurao no Cdigo Fonte


_BOREN_ON

RESET

Ativa Brown-out Reset

_BOREN_OFF

Desativa Brown-out Reset

_CP_ON

Protege toda a memria de programa

_CP_OFF

Memria de programa desprotegida

_DATA_CP_ON

Memria EEPROM protegida

_DATA_CP_OFF

Memria EEPROM desprotegida

_PWRTE_OFF

Desativa Power Up Timer

_PWRTE_ON

Ativa Power Up Timer

_WDT_ON

Habilita Watchdog Timer

_WDT_OFF

Desabilita Watchdog Timer

_LVP_ON

Ativa Low Voltage Progam

_LVP_OFF

Desativa Low Voltage Progam

_MCLRE_ON

Habilita Master Clear

_MCLRE_OFF

Desabilita Master Clear

_RC_OSC_CLKOUT

RC externo com sada de clock

_RC_OSC_NOCLKOUT

RC externo sem sada de clock

_INTOSC_OSC_CLKOUT

Oscilador interno de 4MHz/37KHz com sada de clock

_INTOSC_OSC_NOCLKOUT

Oscilador interno de 4MHz/37KHz sem sada de clock

_EXTCLK_OSC

Oscilador de clock externo

_LP_OSC

Cristal de baixa potncia (at 200KHz)

_XT_OSC

Cristal/Ressonador (at 4MHz)

Wagner Zanco

Bits de Configurao no Cdigo Fonte

RESET

Wagner Zanco

19