Uni niversi versidade dade EEst stááci cioo de Sá Sá Tecnólo Te cnólogo go em Automaçã Autom açãoo
Tutorial utor ial sobre o
Microcontrolador PIC16F628A (versão (vers ão 2.0)
http://www.wagnerzanco.com.br
[email protected]
Wagner da Silva Zanco 2007
Índice Analítico Arquitetur Arqu iteturaa interna intern a do PIC16F PIC16F628 628AA Principais Princi pais características característic as do PIC16F PIC16F628 628AA Pinagem do PIC16F628A
Memória de Programa Mapeamento da Memória Memóri a RAM Memória Memóri a EEPROM EEPROM Registradores Registrador es com Finalidades Específicas (SFRs) (SFRs) STATUS OPTION INTCON PIE1 PIR1 PCON Set de Inst Instru ruções ções do PIC16F628 PIC16F628AA Portas Port as de I/O TRISA TRISB Inicializando o PORTA PORTA Inicializando o PORTB PORTB Acessando o Hardware Exercícios Interrupção Reset Power-on Power -on Reset (POR) Power-up Timer Brown-out Reset (BOR) Estruturando um Programa em Assembly Fluxograma Exemplo 1: Acionando Acio nando um LED com um botão Bits de Configuração Config uração Incluindo os Bits de Configuração no Código Fonte Bibliografia Anexo 1: Slaids
2
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 características do PIC16F628A : 16 pinos de I/O; Freqüência de até 20MHz; Oscilador interno de 4MHz/37KHz; 2Kx14 bits de memória FLASH de programa; 224x8 bits de memória RAM para dados; 128x8 bits de memória EEPROM interna; Módulo TIMER 0 (timer /contador de 8 bits); Módulo TIMER 1 (timer /contador de 16 bits); Módulo TIMER 2 (timer de 8 bits); Módulo CCP (modos Capture, Compare e PWM); Módulo de referência de tensão (16 passos); Dois comparadores analógicos com referência interna programável de tensão; Um canal de comunicação serial - USART; Um watchdog timer; Capacidade de corrente de 25 mA por pino de I/O; 35 instruções; Dez fontes de interrupção independentes; Modo de funcionamento sleep; Tensão de operação entre 3v a 5v para as versões F, e 2v a 5v para versões LF. Wagner da Silva Zanco
3
Pinagem do PIC16F628A
Memória de Programa O PIC16F628A possui 2.048 localidades de memória de programa. Todas as instruções que o PIC16F628A exe-cuta possuem o mesmo tamanho, 14 bits, e cada instrução ocupa uma localidade de memória de programa. O PIC16F628A possui um barramento de endereços de 13 bits para acesso à memória de programa, o que dá uma capacidade de endereçamento de 8k, porém somente 2k(2.048 localidades) foram implementados fisicamente nesse componente, utilizando a faixa de endereços 0000h - 07FFh. Por isso, os últimos 6k de localidades da memória de programa (0800h -1FFFh) estão reservados, ou seja, não têm utilidade nesse MCU, como mostra a figura 11. Observe também que os endereços 01h, 02h e 03h estão reser-vados. Figura 11
4
Wagner da Silva Zanco
Mapeamento da Memória RAM A memória RAM é dividida em quatro bancos e é compartilhada pelos registradores de propósito geral (GPRs) e pelos registradores com finalidades específicas(SFRs). A figura 12 mostra o mapeamento de memória 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 propósitos gerais 80 Bytes
REGs de propósitos 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 propósitos 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
Memória EEPROM O PIC16F628A possui 128 posições de memória EEPROM, com capacidade de armazenamento de 1 byte em cada posição. A faixa de endereços usada para acesso a essa memória é 00h - 7Fh. Esta é uma memória não-volátil, o que significa que os dados continuam armazenados em suas localidades mesmo sem alimentação. A memória EEPROM será estudada com detalhes no capítulo 13. O acesso a essa memória é feito por meio de alguns registradores especiais, que são:
Registradores com Finalidades Específicas (SFRs) Quando vamos montar um programa, é preciso configurar alguns registradores para garantir que o MCU funcione de forma correta. Veja a seguir algumas informações encontradas na descrição de um registrador. Guarde os significados com cuidado, pois serão utilizados sempre que um registrador for descrito ao longo do livro. Rbit de leitura Wbit de escrita
Wagner da Silva Zanco
5
SU-n(0 ou 1) -x -q -
só pode ser setado não implementado, lido como 0 valor assumido no Power-on Reset (POR) valor desconhecido no (POR) depende da condição
Veja em seguida a função de cada bit dos registradores com finalidades específicas mais utilizados em aplicações com o PIC16F628A.
STATUS Regist rador STATUS
Endereço s 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
Z
DC
C
Bit 7:
IRP: Bit de seleção de banco de memória (usado para endereçamento indireto) 1 = Bancos 2 e 3 (100h - 1FFh) 0 = Bancos 0 e 1 (000h - 0FFh)
Bit 6 - 5:
RP1:RP0: Bit de seleção de banco de memória (usado para endereçamento 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, instrução CLRWDT ou instrução SLEEP 0 = WDT gerou um Timeout /PD: Bit power-down 1 = Ocorreu um power-up ou foi executada a instrução CLRWDT 0 = A instrução SLEEP foi executada
Bit 3:
Bit 2:
Z: Bit zero 1 = Indica que o resultado da última operação efetuada na ULA é zero 0 = Indica que o resultado da última operação efetuada na ULA é diferente de zero
Bit 1:
DC: Digit carry/borrow 1 = A última operação de soma (instruções ADD) ocasionou um estouro entre os bits 3 e 4, isto é, o resultado ultrapassou os 4 bits menos significativos 0 = A última operação efetuada de soma não ocasionou um estouro entre os bits 3 e 4
Bit 0:
C: Carry/borrow 1 = A última operação de soma (instruções ADD) ocasionou um estouro de carry, isto é, o resultado ultrapassou os 8 bits mais significativos 0 = A última operação de soma não ocasionou um estouro de carry Observação: O bit C também é afetado pelas instruções SUB, RLF e RRF.
6
Wagner da Silva Zanco
OPTION Registrador OPTION
Endereço s 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 interrupção no pino RB0/INT 1 = Interrupção ocorrerá na borda de subida 0 = Interrupção ocorrerá na borda de descida T0CS: Define a origem do incremento do registrador TMR0 1 = TMR0 será incrementado externamente por uma mudança no pino RA4/T0KI 0 = TMR0 será incrementado internamente pelo ciclo de instrução
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 Observação: 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 001
1:2 1:4
1:1 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
Endereços 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
7
Bit 7:
GIE: Chave geral de habilitação das interrupções 1 = As interrupções habilitadas individualmente serão tratadas 0 = Nenhuma interrupção será tratada
Bit 6:
PEIE: Habilita interrupção dos periféricos 1 = Habilita todas as interrupções dos periféricos 0 = Desabilita todas as interrupções dos periféricos
Bit 5:
T0IE: Habilita interrupção de estouro de TMR0 1 = Interrupção será tratada 0 = Interrupção não será tratada
Bit 4:
INTE: Habilita interrupção externa no pino RB0/INT 1 = Interrupção será tratada 0 = Interrupção não será tratada
Bit 3:
RBIE: Habilita interrupção por mudança de estado nos pinos RB7:RB4 1 = Interrupção será tratada 0 = Interrupção não será tratada
Bit 2:
T0IF: Flag que informa ocorrência de estouro de TMR0 1 = TMR0 estourou (precisa ser apagado por software) 0 = TMR0 não estourou
Bit 1:
INTF: Flag que informa ocorrência de interrupção no pino RB0/INT 1 = Ocorreu uma interrupção externa no pino RB0/INT (precisa ser apagado por software) 0 = Não ocorreu uma interrupção externa no pino RB0/INT
Bit 0:
RBIF: Flag que informa ocorrência de interrupção nos pinos RB7:RB4 1 = Ocorreu uma interrupção externa por mudança de estado num dos pinos RB7:RB4 (precisa ser apagado por software) 0 = Não ocorreu uma interrupção externa por mudança de estado num dos pinos RB7:RB4
PIE1 Registrador PIE1
Endereço 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
U
R/W - 0
R/W - 0
R/W - 0
EEIE
CMIE
RCIE
TXIE
-
CCP1IE
TMR2IE
TMR1IE
Bit 7:
EEIE: Bit de habilitação da interrupção de final de escrita na EEPROM 1 = Interrupção será tratada 0 = Interrupção não será tratada
Bit 6:
CMIE: Bit de habilitação da interrupção do comparador 1 = Interrupção será tratada 0 = Interrupção não será tratada
Bit 5:
RCIE: Bit de habilitação da interrupção de recepção de dados na USART
8
Wagner da Silva Zanco
1 = Interrupção será tratada 0 = Interrupção não será tratada Bit 4:
TXIE: Bit de habilitação da interrupção de transmissão de dados na USART 1 = Interrupção será tratada 0 = Interrupção não será tratada
Bit 3:
NÃO IMPLEMENTADO: LIDO COMO ' 0 '
Bit 2:
CCP1IE: Bit de habilitação de interrupção do módulo CCP 1 = Interrupção será tratada 0 = Interrupção não será tratada
Bit 1:
TMR2IE: Habilita interrupção de estouro de TMR2 1 = Interrupção será tratada 0 = Interrupção não será tratada
Bit 0:
TMR1IE: Habilita interrupção de estouro de TMR1 1 = Interrupção será tratada 0 = Interrupção não será tratada
PIR1 Registrador PIR1
Endereço 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
U
R/W - 0
R/W - 0
R/W - 0
EEIF
CMIF
RCIF
TXIF
-
CCP1IF
TMR2IF
TMR1IF
Bit 7:
EEIF: Bit de sinalização da interrupção de final de escrita na EEPROM 1 = Operação de escrita completa (limpar flag por software) 0 = Operação de escrita não terminada ou não começou
Bit 6:
CMIF: Bit de sinalização da interrupção do comparador 1 = Houve mudança de nível lógico na saída do comparador 0 = Não houve mudança de nível lógico na saída do comparador
Bit 5:
RCIF: Bit de sinalização da interrupção de recepção de dados na USART 1 = O buffer de recepção de USART está cheio 0 = O buffer de recepção de USART está vazio
Bit 4:
TXIF: Bit de sinalização da interrupção de transmissão de dados na USART 1 = O buffer de transmissão de USART está vazio 0 = O buffer de transmissão de USART está cheio
Bit 3:
NÃO IMPLEMENTADO: LIDO COMO ' 0 '
Bit 2:
CCP1IF: Bit de sinalização de interrupção do módulo CCP MODO DE CAPTURA 1 = O TMR1 fez a captura (limpar flag por software) 0 = O TMR1 não fez uma captura Wagner da Silva Zanco
9
MODO COMPARADOR 1 = Ocorreu uma igualdade (TMR1=CCPR1) 0 = Não ocorreu igualdade MODO PWM Sem uso para este modo Bit 1:
TMR2IF: Sinaliza interrupção de estouro de TMR2 1 = Ocorreu uma igualdade (TMR2=PR2) (limpar flag por software) 0 = Não ocorreu igualdade
Bit 0:
TMR1IF: Sinaliza interrupção de estouro de TMR1 1 = Houve estouro de TMR1 (limpar flag por software) 0 = Não 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
Endereço 8Eh Bit 2 Bit 1 U-0 R/W - 0 /POR
Bit 7: 4, 2:
NÃO IMPLEMENTADOS: LIDOS COMO ' 0 '
Bit 3:
OSCF: Bit de modo de operação de oscilador interno 1 = Clock de 4MHz 0 = Clock de 37KHz
Bit 1:
/POR: Bit de sinalização de Power-on Reset (equipamento energizado) 1 = Não houve um Power-on Reset 0 = Houve um Power-on Reset (setar flag por software depois do POR)
Bit 0:
/BOR: Bit de sinalização de Brown-out Reset (reset por queda de tensão) 1 = Não 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