Professional Documents
Culture Documents
Tecnlogo em Automao
Tutorial sobre o
Microcontrolador PIC16F628A
(verso 2.0)
http://www.wagnerzanco.com.br
suporte@wagnerzanco.com.br
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
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
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
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:
SU-n(0 ou 1) -x -q -
Veja em seguida a funo de cada bit dos registradores com finalidades especficas mais utilizados em aplicaes com o
PIC16F628A.
STATUS
Registrador STATUS
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:
Bit 6 - 5:
Bit 4:
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:
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.
OPTION
Registrador OPTION
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:
Bit 6:
Bit 5:
Bit 4:
Bit 3:
Bit 2-0:
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
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
Bit 7:
Bit 6:
Bit 5:
Bit 4:
Bit 3:
Bit 2:
Bit 1:
Bit 0:
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:
Bit 6:
Bit 5:
Bit 3:
Bit 2:
Bit 1:
Bit 0:
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:
Bit 6:
Bit 5:
Bit 4:
Bit 3:
Bit 2:
MODO COMPARADOR
1 = Ocorreu uma igualdade (TMR1=CCPR1)
0 = No ocorreu igualdade
MODO PWM
Sem uso para este modo
Bit 1:
Bit 0:
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:
Bit 3:
Bit 1:
Bit 0:
10
Bit 0
R/W - x
/BOR
Operandos
ou
argumentos
14 bits de cdigo
Descrio
Ciclos
MSB
Status
afetado
LSB
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
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
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
00 1101 d f f f f f f f
RRF
f,d
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
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
f,b
01 00bb b f f f f f f f
BSF
f,b
01 01bb b f f f f f f f
BTFSC
f,b
01 10bb b f f f f f f f
BTFSS
f,b
01 11bb b f f f f f f f
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
NOP
CALL
Chamada sub-rotina
10 0kkk kkkk
CLRWDT
Limpa WDT
GOTO
10 1kkk kkkk
RETFIE
Retorno de interrupo
RETLW
11 01kk kkkk
RETURN
Retorno de sub-rotina
SLEEP
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
0v
0,8v
2v
VDD
0,6v
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:
Bit 6:
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:
12
Bit 3:
Bit 2:
Bit 1:
Bit 0:
TRISB
Registrador TRISB
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:
Bit 6:
Bit 5:
Bit 4:
Bit 3:
Bit 2:
Bit 1:
Bit 0:
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
;***********************************************************************************************************************************************************************************
;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.
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
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
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.
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
durante
operao
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.
18
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.
19
;**********************************************************************************************************************************************
;
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
MOVWF
INTCON
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
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
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.
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.
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
Um Resumo da
Evoluo da Eletrnica
Wagner Zanco
Wagner Zanco
Arquitetura Von-Neumann
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
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
Wagner Zanco
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;
-
- 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
MICROCONTROLADOR
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
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
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
Wagner Zanco
SINAL DE CLOCK
O sinal de clock uma onda quadrada que sincroniza
a execuo das instrues executadas pela CPU.
Wagner Zanco
MODOS DE FUNCIONAMENTO DO
OSCILADOR DO PIC16F628A
Wagner Zanco
Wagner Zanco
Wagner Zanco
Wagner Zanco
Bit 7:
Bit 6 - 5:
Bit 4:
Wagner Zanco
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:
C: Carry/borrow
Wagner Zanco
Bit 7:
Bit 6:
Bit 5:
Bit 4:
Wagner Zanco
10
Wagner Zanco
Bit 7:
Bit 6:
Bit 5:
Bit 4:
Bit 3:
Bit 2:
Bit 1:
Bit 0:
11
Bit 7:
Bit 6:
Bit 5:
Bit 4:
Bit 3:
Bit 2:
Bit 1:
Bit 0:
Wagner Zanco
Bit 7:
Bit 6:
Bit 5:
Bit 4:
12
Bit 3:
Bit 2:
Bit 1:
Bit 0:
Wagner Zanco
Bit 1:
Bit 0:
Wagner Zanco
Wagner Zanco
13
Wagner Zanco
PORTAS DE I/O
PORTA(RA7:RA0) e PORTB(RB7:RB0)
Wagner Zanco
Wagner Zanco
14
Wagner Zanco
Wagner Zanco
INICIALIZANDO O PORTA
Wagner Zanco
15
INICIALIZANDO O PORTB
Wagner Zanco
LENDO O PORT
Wagner Zanco
ESCREVENDO NO PORT
Wagner Zanco
16
Wagner Zanco
RESET
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.
RESET
17
FLUXOGRAMA
RESET
Wagner Zanco
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
RESET
_BOREN_OFF
_CP_ON
_CP_OFF
_DATA_CP_ON
_DATA_CP_OFF
_PWRTE_OFF
_PWRTE_ON
_WDT_ON
_WDT_OFF
_LVP_ON
_LVP_OFF
_MCLRE_ON
_MCLRE_OFF
_RC_OSC_CLKOUT
_RC_OSC_NOCLKOUT
_INTOSC_OSC_CLKOUT
_INTOSC_OSC_NOCLKOUT
_EXTCLK_OSC
_LP_OSC
_XT_OSC
Wagner Zanco
RESET
Wagner Zanco
19