Buscar

Tutorial PIC16F628A

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 43 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 43 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 43 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Universidade Estácio de Sá 
Tecnólogo em Automação 
 
 
 
 
 
 
Tutorial sobre o 
Microcontrolador PIC16F628A 
(versão 2.0) 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
http://www.wagnerzanco.com.br 
suporte@wagnerzanco.com.br 
 
 
 
 
 
 
 
Wagner da Silva Zanco 
2007 
 
Wagner da Silva Zanco 2
Índice Analítico 
 
Arquitetura interna do PIC16F628A 3 
Principais características do PIC16F628A 3 
Pinagem do PIC16F628A 4 
Memória de Programa 4 
Mapeamento da Memória RAM 5 
Memória EEPROM 5 
Registradores com Finalidades Específicas (SFRs) 5 
STATUS 6 
OPTION 7 
INTCON 7 
PIE1 8 
PIR1 9 
PCON 10 
Set de Instruções do PIC16F628A 11 
Portas de I/O 12 
TRISA 12 
TRISB 13 
Inicializando o PORTA 14 
Inicializando o PORTB 14 
Acessando o Hardware 14 
Exercícios 15 
Interrupção 17 
Reset 18 
Power-on Reset (POR) 18 
Power-up Timer 18 
Brown-out Reset (BOR) 18 
Estruturando um Programa em Assembly 19 
Fluxograma 19 
Exemplo 1: Acionando um LED com um botão 19 
Bits de Configuração 21 
Incluindo os Bits de Configuração no Código Fonte 22 
Bibliografia 22 
Anexo 1: Slaids 23
 
 
 
 
 
 
 
 
 
Wagner da Silva Zanco 3
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 4
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 
 
Wagner da Silva Zanco 5
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 00h INDF 80h INDF 100h INDF 180h 
TMR0 01h OPTION 81h TMR0 101h OPTION 181h 
PCL 02h PCL 82h PCL 102h PCL 182h 
STATUS 03h STATUS 83h STATUS 103h STATUS 183h 
FSR 04h FSR 84h FSR 104h FSR 184h 
PORTA 05h TRISA 85h 105h 185h 
PORTB 06h TRISB 86h PORTB 106h TRISB 186h 
 07h 87h 107h 187h 
 08h 88h 108h 188h 
 09h 89h 109h 189h 
PCLATH 0Ah PCLATH 8Ah PCLATH 10Ah PCLATH 18Ah 
INTCON 0Bh INTCON 8Bh INTCON 10Bh INTCON 18Bh 
PIR1 0Ch PIE1 8Ch 10Ch 18Ch 
 0Dh 8Dh 10Dh 18Dh 
TMR1L 0Eh PCON 8Eh 10Eh 18Eh 
TMR1H 0Fh 8Fh 10Fh 18Fh 
T1CON 10h 90h 
TMR2 11h 91h 
T2CON 12h PR2 92h 
 13h 93h 
 14h 94h 
CCPR1L 15h 95h 
CCPR1H 16h 96h 
CCP1CON 17h 97h 
RCSTA 18h TXSTA 98h 
TXREG 19h SPBRG 99h 
RCREG 1Ah EEDATA 9Ah 
 1Bh EEADR 9Bh 
 1Ch EECON1 9Ch 
 1Dh EECON2 9Dh 
 1Eh 9Eh 
CMCON 1Fh VRCON 9Fh 11Fh 
 20h A0h REGs de 120h 
 REGs de propósitos 
REGs de propósitos gerais 
propósitos gerais 48 Bytes 14Fh 
gerais 80 Bytes 150h 
96 Bytes 
 EFh 16Fh 1EFh 
 70h acessos F0h acessos 170h acessos 1F0h 
 70h-7Fh 70h-7Fh 70h-7Fh 
 7Fh FF 17Fh 1FFh 
Bank 0 Bank 1 Bank 2 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. 
R - bit de leitura 
W - bit de escrita 
Wagner da Silva Zanco 6
S - só pode ser setado 
U - não implementado, lido como 0 
-n(0 ou 1) - valor assumido no Power-on Reset (POR) 
-x - valor desconhecido no (POR) 
-q - 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 
Registrador STATUS Endereços 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 
Bit 3: /PD: Bit power-down 
 1 = Ocorreu um power-up ou foi executada a instrução CLRWDT 
 0 = A instrução SLEEP foi executada 
 
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. 
Wagner da Silva Zanco 7
OPTIONRegistrador OPTION Endereços 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 
Bit 5: 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 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 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 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 8
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 
Wagner da Silva Zanco 9
 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 10
 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 
Registrador PCON Endereço 8Eh 
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 
U - 0 U - 0 U - 0 U - 0 R/W - 1 U - 0 R/W - 0 R/W - x 
- - - - OSCF - /POR /BOR 
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) 
 
Wagner da Silva Zanco 11
Set de Instruções do PIC16F628A 
 
14 bits de código 
Mnemônicos 
Operandos 
ou 
argumentos 
Descrição Ciclos 
MSB LSB 
Status 
afetado 
Operações com registradores 
ADDWF f,d d ← (W + f) 1 00 0111 d f f f f f f f C,DC,Z 
ANDWF f,d d ← (W and f) 1 00 0101 d f f f f f f f Z 
CLRF F Limpa f 1 00 0001 1 f f f f f f f Z 
COMF f,d d ← complemento de f 1 00 1001 d f f f f f f f Z 
DECF f,d d ← (f − 1) 1 00 0011 d f f f f f f f Z 
DECFSZ f,d d ← (f − 1) e salta próxima linha se resultado for zero 1(2) 00 1011 d f f f f f f f 
INCF f,d d ← (f + 1) 1 00 1010 d f f f f f f f Z 
INCFSZ f,d d ← (f + 1) e salta próxima linha se resultado for zero 1(2) 00 1111 d f f f f f f f 
IORWF f,d d ← (W ou f) 1 00 0100 d f f f f f f f Z 
MOVF f,d d ← cópia de f 1 00 1000 d f f f f f f f Z 
MOVWF F f ← cópia de W 1 00 0000 1 f f f f f f f 
RLF f,d Rotaciona f um bit para a esquerda 1 00 1101 d f f f f f f f C 
RRF f,d Rotaciona f um bit para a direita 1 00 1100 d f f f f f f f C 
SUBWF f,d d ← (f − W) 1 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 1 00 1110 df f f f f f f 
XORWF f,d d ← (W xor f) 1 00 0110 d f f f f f f f Z 
Operações com bits 
BCF f,b Clear (0) bit b do registrador f 1 01 00bb b f f f f f f f 
BSF f,b set (1) bit b do registrador f 1 01 01bb b f f f f f f f 
BTFSC f,b Testa bit b do registrador f e salta a próxima linha se ele for zero 1 01 10bb b f f f f f f f 
BTFSS f,b Testa bit b do registrador f e salta a próxima linha se ele for um 1 01 11bb b f f f f f f f 
Operações com literais (valores numéricos) 
ADDLW K W ← (W + K) 1 11 111x kkkk kkkk C,DC,Z 
ANDLW K W ← (W and K) 1 11 1001 kkkk kkkk Z 
IORLW K W ← (W ou K) 1 11 1000 kkkk kkkk Z 
MOVLW K W ← K 1 11 00xx kkkk kkkk 
SUBLW K W ← (K - W) 1 11 110x kkkk kkkk C,DC,Z 
XORLW K W ← (W xor K) 1 11 1010 kkkk kkkk Z 
Operações de controle 
CLRW - Limpa Work 1 00 0001 0000 0011 Z 
NOP - Não faz nada, apenas gasta tempo 1 00 0000 0xx0 0000 
CALL K Chamada à sub-rotina 2 10 0kkk kkkk kkkk 
CLRWDT - Limpa WDT 1 00 0000 0110 0100 /TO, /PD 
GOTO K Desvio para endereço 2 10 1kkk kkkk kkkk 
RETFIE - Retorno de interrupção 2 00 0000 0000 1001 
RETLW K Retorno de sub-rotina com K em W 2 11 01kk kkkk kkkk 
RETURN - Retorno de sub-rotina 2 00 0000 0000 1000 
SLEEP - Coloca PIC em modo Sleep para economia de energia 2 00 0000 0110 0011 /TO, /PD 
 
 
Wagner da Silva Zanco 12
Potas de I/O 
Quando Os pinos do PIC16F628A estão configurados como pinos de I/O (ou pinos digitais) eles são divididos em dois grupos: 
PORTA(RA7:RA0) e PORTB(RB7:RB0). A figura a seguir mostra a função de cada pino neste caso. 
 
A tabela a seguir mostra os níveis de tensão correspondentes aos níveis lógicos 0 e 1 para um pino configurado como entrada e como 
saída. Os valores apresentados na tabela são válidos para tensões de alimentação entre 4,5V e 5,5V. 
4,5V < VDD < 5,5V 
Entrada Mín Máx Nível Lógico 
VIL (tensão de entrada baixa) 0v 0,8v 0 
VIH (tensão de entrada alta) 2v VDD 1 
Saída 
VOL (tensão de saída baixa) - 0,6v 0 
VOH (tensão de saída alta) VDD - 0,7v - 1 
Para configurar um como de I/O como entrada ou como saída 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 nível lógico 1 no respectivo bit do registrador TRISx. Para configurar um pino como saída temos de aplicar nível 
lógico 0 no respectivo bit do registrador TRISx. 
TRISA 
 
Registrador TRISA Endereço 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 saída 
 1 = RA7 configurado como entrada 
 0 = RA7 configurado como saída 
 
Bit 6: TRISA6: Configura o pino RA6 como entrada ou saída 
 1 = RA6 configurado como entrada 
 0 = RA6 configurado como saída 
 
Bit 5: O pino RA5 é multiplexado com o reset (/MCLR) e com a tensão de programação (Vpp). Ele só pode ser configurado 
como entrada. Isso é feito desabilitando o bit de configuração Master Clear Enable. Esta configuração é efetuada na 
hora da programação. 
 
 
Bit 4: TRISA4: Configura o pino RA4 como entrada ou saída 
 1 = RA4 configurado como entrada 
 0 = RA4 configurado como saída 
Wagner da Silva Zanco 13
Bit 3: TRISA3: Configura o pino RA3 como entrada ou saída 
 1 = RA3 configurado como entrada 
 0 = RA3 configurado como saída 
 
Bit 2: TRISA2: Configura o pino RA2 como entrada ou saída 
 1 = RA2 configurado como entrada 
 0 = RA2 configurado como saída 
 
Bit 1: TRISA1: Configura o pino RA1 como entrada ou saída 
 1 = RA1 configurado como entrada 
 0 = RA1 configurado como saída 
 
Bit 0: TRISA0: Configura o pino RA0 como entrada ou saída 
 1 = RA0 configurado como entrada 
 0 = RA0 configurado como saída 
 
TRISB 
 
Registrador TRISB Endereço 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 saída 
 1 = RB7 configurado como entrada 
 0 = RB7 configurado como saída 
 
Bit 6: TRISB6: Configura o pino RB6 como entrada ou saída 
 1 = RB6 configurado como entrada 
 0 = RB6 configurado como saída 
 
Bit 5: TRISB5: Configura o pino RB5 como entrada ou saída 
 1 = RB5 configurado como entrada 
 0 = RB5 configurado como saída 
 
Bit 4: TRISB4: Configura o pino RB4 como entrada ou saída 
 1 = RB4 configurado como entrada 
 0 = RB4 configurado como saída 
 
Bit 3: TRISB3: Configura o pino RB3 como entrada ou saída 
 1 = RB3 configurado como entrada 
 0 = RB3 configurado como saída 
 
Bit 2: TRISB2: Configura o pino RB2 como entrada ou saída 
 1 = RB2 configurado como entrada 
 0 = RB2 configurado como saída 
 
 
Bit 1: TRISB1: Configura o pino RB1 como entrada ou saída 
 1 = RB1 configurado como entrada 
 0 = RB1 configurado como saída 
 
Bit 0: TRISB0: Configura o pino RB0 como entrada ou saída 
 1 = RB0 configurado como entrada 
 0 = RB0 configurado como saída 
Wagner da Silva Zanco 14
 
 
 
Inicializando o PORTA 
 Na palca de teste utilizada neste curso os pinos RA5, RA6 e RA7 não estão 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 saída de dreno aberto(open 
drain output), o que significa que é necessário o auxílio de fonte externa. O código a seguir é uma proposta para inicializar o PORTA, na 
qual os pinos RA1 e RA2 como entrada e os demais como saída. 
;*********************************************************************************************************************************************************************************** 
 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 código seguinte inicializa o PORTB. Configura todos os pinos como saída e desabilita os resistores pull-ups. Para configurar o pino 
RB4/PGM como pino de I/O é necessário desabilitar a porgramação em baixa tensão (LVP). Esta desabilitação é efetuada na hora da 
prgramação 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 ligação) entre os pinos do microcontrolador e os programa são os registradores PORTA e PORTB. Quando, por 
exemplo, um determinado pinoestá configurado como saída, o nível lógico 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 fração de 
código a seguir ilustra a idéia. 
Observação: Todos os pinos do PORTA e do PORTB, exceto o pino RB5, são multiplexados com outras funções e a configuração
efetuada pelos registradores TRISx só funciona corretamente se o respectivo pino estiver configurado como I/O. 
Wagner da Silva Zanco 15
;*********************************************************************************************************************************************************************************** 
;ESCREVENDO EM UM PINO (RB2) 
 
 BCF PORTB,2 ;PINO RB2 =0 
;*********************************************************************************************************************************************************************************** 
; ESCREVENDO EM TODO O PORTB 
 
 MOVLW B’00001111’ ;W = 000011112 
 MOVWF TEMP ;TEMP = 000011112 
;*********************************************************************************************************************************************************************************** 
Exercícios 
1. Qual a função básica de um computador? Explique. 
2. Qual a principal diferença existente entre as arquiteturas Von-Neumann e Harvard? 
3. Qual a função da CPU num computador? 
4. Como a memória é vista pela CPU? 
5. O que é um periférico? 
6. Qual a função das interfaces? 
7. O que caracteriza uma CPU do tipo CISC e uma do tipo RISC? 
8. O que diferencia um microprocessador de um microcontrolador? 
9. Defina memória volátil e memória não-volátil. 
10. Quais são as características das memórias do tipo EEPROM, Flash ROM e SRAM? 
11. Qual tipo de memória de programa pode ter um MCU da família PIC? 
12. Qual a função dos registradores de uso geral e dos registradores com finalidades específicas? 
13. Qual das características seguintes não pertence ao PIC16F628A? 
a) 16 pinos de I/O 
b) Módulo TIMER 0 
c) Módulo CCP 
d) Um canal de comunicação USART 
e) Conversor A/D 
14. Qual a função do sinal de clock. 
15. Defina ciclo de instrução. 
16. O oscilador do PIC16F628A pode funcionar de quantos modos diferentes? Como é feita a escolha? 
17. Quais os parâmetros que devem ser atendidos no desenvolvimento de um projeto de circuito eletrônico? 
18. Caso optemos por utilizar um oscilador a cristal, em quais pinos do PIC16F628A devemos conectá-lo? Qual faixa de valores de 
capacitância podem ter os capacitores que fazem parte do arranjo (C1 e C2)? 
19. Quais os tipos de memória que integram o PIC16F628A e quais as suas respectivas funções? 
20. Quantas localidades de memória de programa possui o PIC16F628A e quantas estão disponíveis para armazenar instruções? 
21. Quantas posições de memória RAM são ocupadas pelos registradores de uso geral (GPRs) e como se dá a distribuição entre os 
bancos de memória? 
22. Quais as formas disponíveis para acessar um dado na memória RAM? 
23. Quantas localidades de memória EEPROM possui o PIC16F628A e qual a faixa de endereços utilizada para o acesso a elas? 
24. Qual as função dos bits Z e C do registrador STATUS? 
25. Quais as localidades de memória RAM ocupadas pelo registrador INTCON? 
26. Qual a função do bit TMR1IE(PIE1<0>)? 
27. Como podemos denominar um conjunto de instruções que o microcontrolador executa para que uma determinada tarefa seja 
realizada? 
28. Quais os campos que formam uma instrução? Defina-os. 
29. Quantas instruções o PIC16F628A é capaz de executar e como elas estão divididas? 
30. Qual dos termos a seguir não é encontrado no mnemônico de uma instrução? 
a) DEC 
b) CLR 
c) INV 
d) MOV 
e) SWAP 
Wagner da Silva Zanco 16
31. Qual a instrução que força um determinado bit de um registrador assumir nível lógico 1? 
32. Qual a instrução que efetua a soma aritmética do conteúdo do registrador WORK com o valor numérico especificado no operando da 
instrução? 
33. O que faz a instrução COMF f,d? 
34. Qual a tarefa executada pela instrução MOVWF f? 
35. Como estão divididos os pinos de I/O do PIC16F628A? 
36. Quais os registradores responsáveis pela configuração dos pinos de I/O como entrada ou como saída? Como é feita essa 
configuração? 
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 não é multiplexado com outras funções? 
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 saída? 
41. Em quais bancos de memória se encontram os registradores TRISA e TRISB? 
Wagner da Silva Zanco 17
Interrupção 
Uma interrupção é um evento de hardware que, quando ocorre, provoca um desvio no programa, para que o evento seja tratado. Ao 
término do tratamento do evento que deu origem à interrupção, o programa retorna ao ponto em que parou quando ocorreu o desvio. O 
PIC16F628A possui dez fontes de interrupção independentes: 
 Estouro de TMR0 
 Interrupção externa RB0/INT 
 Mudança de estado num dos pinos (RB7:RB4) 
 Término de escrita na EEPROM 
 Módulo comparador 
 Interrupção de USART (recepção e transmissão) 
 Módulo CCP 
 Estouro do TMR1 
 Interrupção quando TMR2=PR2 
A interrupção pode ser tratada ou não. Para que uma interrupção seja tratada, ela precisa estar habilitada. A habilitação é feita da 
seguinte forma: 
1º - Habilitar a chave individual (INTCON ou PIE1). 
2º - Habilitar a interrupção de periférico (INTCON<6>) se a fonte for um periférico. 
3º - Habilitar a chave geral de interrupção(INTCON<7>). 
 
Cada interrupção pode ser habilitada individualmente e independente das demais. Essa habilitação é feita por meio dos 
registradores INTCON e PIE1 da seguinte forma: 
Os flags de sinalização das interrupções são setados automaticamente quando o evento responsável pela interrupção ocorre, mas 
precisam ser apagados manualmente dentro da rotina de interrupção. É importante observar que o flag de sinalização de qualquer uma das 
interrupções será setado quando o evento responsável por ela ocorrer, mesmo se a respectiva interrupção estiver desabilitada. 
Se uma determinada interrupção estiver habilitada e ocorrer o evento responsável por ela, o flag de sinalização correspondente ao 
evento é setado, a execução do programa principal é interrompida, o endereço da próxima instrução 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 responsável pelo tratamento da interrupção. Quando a instrução RETFIE é encontrada, o endereço é resgatado da pilha e o 
programa volta ao ponto em que ocorreuo desvio, como mostra a figura a seguir. 
 
 
Wagner da Silva Zanco 18
Reset 
 
No PIC16F628A, o reset pode ocorrer por vários motivos. Pode ser interessante identificar o motivo do reset, para que as devidas 
ações 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 operação normal 
 /MCLR reset durante o sleep 
 WDT reset (operação normal) 
 Brown-out reset (BOR - reset devido à baixa tensão de alimentação) 
Veja na tabela seguinte o status dos flags afetados após os respectivos resets. 
/POR /BOD /TO /PD RESET 
0 x 1 1 Power-on reset 
1 0 x x Brown-out reset 
1 1 0 u WDT Reset 
1 1 u u /MCLR durante operação 
normal 
1 1 1 0 Reset durante o sleep 
X = desconhecido, U = não muda de nível 
 
Power-on Reset (POR) 
Este é um circuito interno ao MCU que o mantém em reset até que VDD alcance tensão suficiente quando a tensão de 
alimentação é 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 após a alimentação ser 
ligada. O uso do power-up timer permite que a tensão da fonte se estabilize, garantindo também a estabilidade do oscilador principal, antes 
de o MCU entrar em funcionamento, evitando travamentos já na inicialização. O Power-up Timer é ativado por meio do bit de configuração 
PWRTE, desde que ele esteja setado. O Power-up Timer é uma proteção adicional ao POR. 
 
Brown-out Reset (BOR) 
O PIC16F628A possui um circuito interno chamado BOR, que reseta o MCU quando a tensão de alimentação cai abaixo de 4v 
por aproximadamente 100µs. Quando a tensão de alimentação volta ao valor nominal, o BOR permite que o MCU seja reinicializado. O 
BOR é ativado por meio do bit de configuração BOREN, que irá ativá-lo quando setado. Ativar o BOR não ativa automaticamente o Power-
up 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 configuração /PWRTE. 
 
É possível 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 sugestão do fabricante e fará com que o MCU seja resetado quando a tensão de alimentação cair abaixo 
de Vz + 0,7, sendo Vz a tensão de ruptura do diodo zener. Se o brown-out externo é utilizado, desabilite o bit de configuração BOREN. 
O BOR é indicado para sistemas que necessitam ser desligados e religados rapidamente ou em locais onde queda de tensão da rede 
elétrica é comum. Nesses casos, o BOR impedirá que o MCU trave, caso haja uma interrupção momentânea na tensão de alimentação. 
 
Wagner da Silva Zanco 19
Estruturando um Programa em Assembly 
1º passo - Título, nome do projetista, data de conclusão e versão do programa 
2º passo - Arquivos include 
3º passo - Paginação de memória 
4º passo - Criar variáveis 
5º passo - Identificar flags utilizados no sistema 
6º passo - Criar constantes 
7º passo - Identificar os pinos que são usados como entrada e como saída 
8º passo - Vetor reset 
9º passo - Vetor de interrupção e rotinas de interrupção 
10º passo - Configuração dos registradores com finalidades específicas 
11º passo - Inicialização das variáveis 
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 convenções que vamos utilizar no fluxograma são: 
 
Observação: Em todos os fluxogramas encontrados neste livro, considera-se como "Início" do 1º ao 11º passo. 
Exemplo 1: Acionando um LED com um botão 
 
O hardware mostrado na figura 29 é implementado na placa Base de Teste 01, cujo diagrama esquemático se encontra no 
apêndice B. Basta gravar o programa objeto no MCU e colocá-lo na placa, que ele funcionará sem problemas. 
 
Wagner da Silva Zanco 20
O fluxograma ao lado informa: enquanto o botão1 (BT1) estiver 
pressionado, o LED ficará aceso; enquanto o botão estiver solto, o 
LED ficará apagado. Com o fluxograma pronto basta convertê-lo na 
Linguagem Assembly, substituindo cada bloco por uma ou mais 
instruções, ou até mesmo por sub-rotina. Observe no diagrama 
esquemático que enquanto BT1 estiver solto, estará chegando 5V 
(ou nível 1) no pino RA1, visto que um pino de I/O configurado como 
entrada possui alta impedância. Quando BT1 é pressionado, o pino 
RA1 é aterrado, o que faz com que chegue nível 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 SAÍDA 
 MOVLW B'10000000' 
 MOVWF OPTION_REG ;PULL_UPS DESABILIADOS <7> 
 ;DEMAIS BITS IRRELEVANTES 
 MOVLW B'00000000' 
Wagner da Silva Zanco 21
 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 LED ;APAGA LED 
 GOTO MAIN ;RETORNA AO INICIO 
 
ACENDE_LED 
 BSF LED ;ACENDE LED 
 GOTO MAIN ;DESVIA 
;********************************************************************************************************************************************** 
END ;FIM DO PROGRAMA 
;********************************************************************************************************************************************** 
 
Bits de Configuração 
 
Independente do programador utilizado, é necessário efetuar algumas configurações que serão gravadas no chip na hora da 
programação. O PIC16F628A possui um registrador para esta finalidade, o CONFIG, que pode ser acessado por meio do endereço 2007h. 
Veja que este endereço está fora da faixa de endereços da memória de programa do componente, que vai de 0000h a 07FFh. Por isso ele 
só pode ser acessado na hora da programação do MCU. Os itens configurados variam de componente para componente. O PIC16F628A 
possui as seguintes opções de configuração: 
 
 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 vários tipos de oscilador. A seleção é 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 Cristal de baixa potência (até 200KHz) 
XT Cristal/Ressonador (até 4MHz) 
HS Cristal/Ressonador cerâmico de alta freqüência (até 20MHz) 
RC: CLOCKOUT RC externo com saída de clock. Essa opção fornece no pino RA6/OSC2/CLKOUT um sinal com freqüência 
quatro vezes menor que a do oscilador principal. 
RC: I/O RC externo sem saída de clock (RA6 disponível como I/O) 
INTOSC: CLKOUT Oscilador interno de 4MHz/37KHz com saída de clock. Essa opção fornece no pino RA6/OSC2/CLKOUT um 
sinal com freqüência quatro vezes menor que a do oscilador principal. 
INTOSC: I/O Oscilador interno de 4MHz/37KHz sem saída de clock (RA6 e RA7 disponíveis como I/O) 
EC Oscilador externo. Nessa opção 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 utilização 
é indicada para locais onde o programa não pode parar de funcionar, como no caso de um computador de bordo de um automóvel. 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 capítulo 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 alimentação 
for ligada. Isso garante que, quando ele começar a funcionar, o oscilador já estará estabilizado, evitando problemas como travamento. 
Brown Out Detect - quando essa opção é ativada, o MCU irá resetar, caso a tensão de alimentação caia abaixo de um determinado valor. 
Caso não esteja ativada, o MCU pode travar quando ocorrer uma queda de tensão momentânea. 
Master Clear Enable - habilita o pino RA5/MCLR/Vpp a funcionar como entrada de reset. Para configurar esse pino como I/O, essa opção 
deve ser desabilitada. 
Wagner da Silva Zanco 22
Low Voltage Program - essa opção ativa a programação em baixa voltagem. A menos que você saiba o que está fazendo, deixe-a 
desabilitada. É necessário que essa opção 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 poderão ser lidos pelo programa de 
gravação. Para proteger os dados armazenados na EEPROM, habilite essa opção. 
Code Protect - é a mais importante opção a ser configurada. Ativado o código de proteção, ninguém mais consegue ler o programa 
gravado no chip, nem mesmo você. O chip pode ser regravado, mas não pode ser lida a sua memória de programa, até que uma nova 
gravação seja feita com essa opção desativada. Ativar o código de proteção garante que o programa gravado no componente não será 
copiado de forma nenhuma, se o MCU estiver funcionando dentro das especificações elétricas, definidas pelo fabricante. 
 
Incluindo os bits de configuração no código fonte 
 
As configurações correspondentes aos bits de configuração podem ser incluídas no código-fonte por meio da diretiva __CONFIG. 
As opções para o PIC16F628A são as seguintes: 
_BOREN_ON Ativa Brown-out Reset 
_BOREN_OFF Desativa Brown-out Reset 
_CP_ON Protege toda a memória de programa 
_CP_OFF Memória de programa desprotegida 
_DATA_CP_ON Memória EEPROM protegida 
_DATA_CP_OFF Memória 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 saída de clock 
_RC_OSC_NOCLKOUT RC externo sem saída de clock 
_INTOSC_OSC_CLKOUT Oscilador interno de 4MHz/37KHz com saída de clock 
_INTOSC_OSC_NOCLKOUT Oscilador interno de 4MHz/37KHz sem saída de clock 
_EXTCLK_OSC Oscilador de clock externo 
_LP_OSC Cristal de baixa potência (até 200KHz) 
_XT_OSC Cristal/Ressonador (até 4MHz) 
_HS_OSC Cristal/Ressonador de alta freqüência (até 20MHz) 
Vemos a seguir um exemplo de configuração para o registrador CONFIG, que pode ser incluído no código-fonte. A linha seguinte 
diz que o Brown Out Detect (doravante denominado Brown Out Reset) está ativado, que todo o código do programa está protegido, que o 
Power Up Timer está ativado, que o WDT está desabilitado, que a programação em baixa tensão está desativada, que a memória 
EEPROM está desprotegida, que o /MCLR está habilitado e que o oscilador é a cristal. Quando o programa de gravação for executado,essas opções já estarão selecionadas, facilitando, desta forma, o trabalho do programador. Observe que o caractere & é usado como elo 
de ligação entre as opções 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 prática e objetiva. São Paulo: Érica, 2005. 
 
PIC16F627A/628A/648A: Datasheet DS40300B. USA: MICROCHIP, 1999. 
1
Um Resumo da 
Evolução da Eletrônica
Wagner Zanco
A função básica de um computador
O computador basicamente é um processador de 
informações. O usuário introduz as informações no 
computador por meio de um dispositivo de entrada como o 
teclado, mouse etc. O computador processa as 
informações e retorna o resultado para o usuário por meio 
de um dispositivo de saída como o Vídeo ou impressora.
Wagner Zanco
2
Arquitetura Von-Neumann
CPU – É um circuito integrado (CI) capaz de executar um conjunto 
de tarefas denominadas instruções. A CPU gerencia todo o sistema e 
executa os programas.
Memória – Armazena os dados que serão processados e os 
programas que serão executados.
Dispositivos de I/O – São os responsáveis pela entrada e saída 
de dados do sistema.
Wagner Zanco
Organização da Memória
A memória é composta por várias localidades podendo 
armazenar um conjunto de bits em cada uma. Cada 
localidade possui seu próprio endereço, sendo este um 
valor numérico representado no sistema hexadecimal.
A unidade padrão de armazenamento de dados na 
memória é o Byte.
Wagner Zanco
Arquitetura Harvard
Wagner Zanco
3
Von-Neumann versus Harvard
CPU CISC – As CPUs utilizadas em computadores que seguem a 
arquitetura Von-Neumann são do tipo CISC, as quais possuem um set 
de instruções ampliado (muitas instruções).
CPU RISC – As CPUs utilizadas em computadores que seguem a 
arquitetura Harvard são do tipo RISC, as quais possuem um set de
instruções reduzido (poucas instruções).
Wagner Zanco
GERENCIANDO O SISTEMA
Para gerenciar o sistema a CPU precisa se comunicar 
com a memória e com os dispositivos de I/O. Esta 
comunicação pode ser de leitura ou de escrita.
Leitura - quando a CPU envia uma informação para ser armazenada numa 
localidade de memória ou para um dispositivo de I/O. Por exemplo, quando a 
CPU envia uma informação para o vídeo, dizemos que ela escreveu no vídeo.
Escrita - quando a CPU busca uma informação na memória ou num 
dispositivo de I/O. Quando uma tecla é pressionada no teclado e aparece no 
vídeo, é porque a CPU efetuou uma leitura no teclado e escreveu o dado lido no 
vídeo.
Wagner Zanco
“A CPU reconhece cada um dos dispositivos 
de I/O, assim como cada localidade de 
memória pelo seu respectivo endereço”.
Wagner Zanco
4
- SET(conjunto) de instruções
- Velocidade com que as instruções são executadas
- Multiprocessamento (execução de várias instruções 
simultâneas)
- Quantidade de memória que é capaz de endereçar
- Etc.
- SET(conjunto) de instruções;
- Velocidade com que as instruções são executadas;
- Multiprocessamento (execução de várias instruções simultâneas);
-Quantidade de memória que é capaz de endereçar;
- Comprimento da via de dados
- Etc.
CAPACIDADE DE PROCESSAMENTO DE UMA CPU
Wagner Zanco
MEMÓRIAS SEMICONDUTORAS
São memórias implementadas em 
circuitos integrados (chips de memória). 
Estão divididas em dois grupos: Volátil e não-volátil.
Volátil – É a memórias que perde os dados armazenados 
quando a energia é desligada.
Não-Volátil – É a memória que não perde os dados 
armazenados quando a energia é desligada.
Wagner Zanco
ROMROM
-- Somente leituraSomente leitura
-- ÉÉ programada eletricamente pelo usuprogramada eletricamente pelo usuáário rio 
PROMPROM
-- Somente leituraSomente leitura
-- ÉÉ programada eletricamente pelo usuprogramada eletricamente pelo usuáário rio 
-- Uma vez programada se transforma numa ROMUma vez programada se transforma numa ROM
-- NNãão pode ser reprogramadao pode ser reprogramada
EPROM EPROM 
-- Somente LeituraSomente Leitura
-- ProgramProgramáável Eletricamente pelo usuvel Eletricamente pelo usuááriorio
-- Possui uma janela que quando exposta a raios ultravioletas, seusPossui uma janela que quando exposta a raios ultravioletas, seus dados sdados sãão apagados o apagados 
podendo ser reprogramada.podendo ser reprogramada.
EE22PROM PROM 
-- Somente LeituraSomente Leitura
-- ProgramProgramáável Eletricamente pelo usuvel Eletricamente pelo usuááriorio
-- ÉÉ semelhante a uma EPROM ssemelhante a uma EPROM sóó que seus dados sque seus dados sãão apagados atravo apagados atravéés de uma tenss de uma tensãão o 
eleléétrica aplicada a um de seus pinos, podendo ser reprogramada da mtrica aplicada a um de seus pinos, podendo ser reprogramada da mesma forma que uma esma forma que uma 
EPROM.EPROM.
FLASH-ROM: Identificados pelo sufixo Identificados pelo sufixo ““FF””, estes componentes permitem ser , estes componentes permitem ser 
apagados/regravados mais de mil vezes atravapagados/regravados mais de mil vezes atravéés de sinais els de sinais eléétricos aplicados em alguns de tricos aplicados em alguns de 
seus pinos, o que pode ser feito automaticamente por um circuitoseus pinos, o que pode ser feito automaticamente por um circuito gravador de Flash como o gravador de Flash como o 
Picstart Plus, fabricado pela Microchip ou o JDM, cujo hardware Picstart Plus, fabricado pela Microchip ou o JDM, cujo hardware éé encontrado facilmente na encontrado facilmente na 
internet. Estes componentes sinternet. Estes componentes sãão a melhor opo a melhor opçãção para teste de programas e implementao para teste de programas e implementaçãção o 
final dos circuitos, visto que estfinal dos circuitos, visto que estãão ficando cada dia mais baratos.o ficando cada dia mais baratos.
MEMÓRIA
NÃO-VOLÁTIL
Wagner Zanco
5
DRAMDRAM
-- Leitura e escritaLeitura e escrita
-- Fabricada com capacitoresFabricada com capacitores
-- Precisa de REFRESH para manter os dados armazenados, mesmo com aPrecisa de REFRESH para manter os dados armazenados, mesmo com a energia ligada.energia ligada.
SRAM SRAM 
-- Leitura e escritaLeitura e escrita
-- Fabricada com FlipFabricada com Flip--flopsflops
-- NNãão precisa de refresho precisa de refresh
MEMÓRIA VOLÁTIL
Wagner Zanco
REFRESH - É uma simulação de leitura que é feita em cada localidade de 
memória com o objetivo de reforçar os dados ali armazenados. Isso é
necessário porque a memória DRAM é constituída de capacitores (armazena 
energia e a perde em pouco tempo).
MICROCONTROLADOR
“É um computador em um único chip. O microcontrolador integra 
em um único invólucro CPU, memória e dispositivos de I/O. O 
primeiro microcontrolador, o 8048, foi desenvolvido pela empresa
Intel no final da década de setenta”.
Ao contrário do microcontrolador, para se construir um computador 
com um microprocessador é necessário utilizar memória externa e 
dispositivos de I/O externos.
Wagner Zanco
FAMÍLIA 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
6
Microcontroladores da FamMicrocontroladores da Famíília PIClia PIC
- Arquitetura RISC (set de instruções reduzido) 
- ATÉ 40MHz
- Memória de Programas de 12, 14, 16 ou 24 Bits
- Memória de programa FlASH-ROM
- USART, Conversor A/D, I2C, CAN, SPI, Comparador, 
PWM, RF, ECCP, Ethernet, USB etc.
Wagner Zanco
MEMÓRIA DE PROGRAMA
ROM TIPO MÁSCARA - O chip já sai da fábrica com o programa gravado nele, não 
podendo ser regravado de forma nenhuma pelo usuário. O custo destes componentes é
bem reduzido, mas só são viáveisse adquiridos em grande quantidade. Estes 
componentes são identificados pelo sufixo “CR”.
OTP - Estes dispositivos utilizam memória PROM para armazenar os programas. Eles 
vem de fábrica vazios, sendo a gravação do programa feita pelo usuário, não podendo o 
mesmo ser regravado. Isto impede a utilização destes componentes na fase de 
desenvolvimento e teste de programas. Os mesmos são identificados pelo sufixo “C”.
EPROM - Estes componentes possuem uma janela onde podemos, através da exposição 
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 através de sinais elétricos 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 a melhor opção para teste de programas e 
implementação final dos circuitos, visto que estão ficando cada dia mais baratos. 
Wagner Zanco
ARQUITETURA INTERNA DO PIC16F628A
Wagner Zanco
7
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 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 analógicos com referência interna programável de tensão;
- 1 canal de comunicação USART serial;
- 1 Timer Watchdog;
- Capacidade de corrente de 25 mA por pino de I/O;
- 35 instruções;
- 10 fontes de interrupção independentes;
- Modo de funcionamento Sleep;
- Tensão de operação entre 3v a 5v (2v a 5v para versão LF).
Wagner Zanco
PINAGEM DO PIC16F628A
Wagner Zanco
PINAGEM DO PIC16F628A
Wagner Zanco
8
OSCILADOR
Qualquer instrução executada pela CPU utiliza como 
referência 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 execução das instruções executadas pela CPU.
Os Microcontroladores PIC gastam quatro ciclos de clock (ciclo 
de instrução) para executar uma instrução, salvo algumas 
exceções. O ciclo de instrução também é chamado de clock 
interno.
T(ciclo de instrução) = 1 / (Fosc/4) Wagner Zanco
MODOS DE FUNCIONAMENTO DO 
OSCILADOR DO PIC16F628A
Wagner Zanco
9
MEMÓRIA DE PROGRAMA DO PIC16F628A
Wagner Zanco
MEMÓRIA DE RAM DO PIC16F628A
A memória de RAM (ou de dados) do PIC16F628A 
é dividida em dois grupos:
-Registradores com finalidade específica
-Registradores de uso geral 
Wagner Zanco
Obs:. Cada registrador do PIC16F628A ocupa uma 
localidade de memória e pode armazenar 8 bits.
MEMÓRIA DE DADOS DO PIC16F628A
Wagner Zanco
10
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
Wagner Zanco
Bit 3: /PD: Bit power-down 
1 = Ocorreu um power-up ou foi executada a instrução CLRWDT
0 = A instrução SLEEP foi executada
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 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 interrupção no pino RB0/INT
1 = Interrupção ocorrerá na borda de subida
0 = Interrupção ocorrerá na borda de descida
Bit 5: 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 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
11
Wagner Zanco
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
Wagner Zanco
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
Wagner Zanco
12
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
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
Wagner Zanco
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
Wagner Zanco
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 terminadaou 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
Wagner Zanco
13
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
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
Wagner Zanco
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)
Wagner Zanco
Wagner Zanco
14
Wagner Zanco
Wagner Zanco
PORTAS DE I/O
PORTA(RA7:RA0) e PORTB(RB7:RB0)
Wagner Zanco
NÍVEIS DE TENSÃO CORRESPONDENTES 
AOS NÍVEIS LÓGICOS 0 e 1
15
Wagner Zanco
CONFIGURANDO OS PINOS DE I/O COMO 
ENTRADA OU COMO SAÍDA
Cada bit do TRISA configura o respectivo pino do PORTA
Wagner Zanco
CONFIGURANDO OS PINOS DE I/O COMO 
ENTRADA OU COMO SAÍDA
Cada bit do TRISB configura o respectivo pino do PORTB
Wagner Zanco
INICIALIZANDO O PORTA
16
Wagner Zanco
INICIALIZANDO O PORTB
Wagner Zanco
LENDO O PORT
Wagner Zanco
ESCREVENDO NO PORT
17
Wagner Zanco
Tratamento de uma interrupção
Wagner Zanco
RESET
Power-up Timer
É um temporizador que pode ser ativado, fazendo com que o 
MCU se mantenha em reset por 72ms após a alimentação ser 
ligada. O uso do power-up timer permite que a tensão da fonte 
se estabilize, garantindo também a estabilidade do oscilador 
principal, antes de o MCU entrar em funcionamento, evitando 
travamentos já na inicialização.
Power-on Reset (POR)
Este é um circuito interno ao MCU que o mantém em reset até que 
VDD alcance tensão suficiente quando a tensão de alimentação é
ligada, para que o MCU possa funcionar corretamente. 
Brown-out Reset (BOR)
O PIC16F628A possui um circuito interno chamado BOR, que reseta o 
MCU quando a tensão de alimentação cai abaixo de 4v por 
aproximadamente 100µs. Quando a tensão de alimentação volta ao valor 
nominal, o BOR permite que o MCU seja reinicializado.
Wagner Zanco
RESETEstruturando um Programa em Assembly
1º passo - Título, nome do projetista, data de conclusão e versão do programa 
2º passo - Arquivos include
3º passo - Paginação de memória
4º passo - Criar variáveis
5º passo - Identificar flags utilizados no sistema
6º passo - Criar constantes
7º passo - Identificar os pinos que são usados como entrada e como saída
8º passo - Vetor reset
9º passo - Vetor de interrupção e rotinas de interrupção
10º passo - Configuração dos registradores com finalidades específicas
11º passo - Inicialização das variáveis
12º passo - Rotina principal
13º passo - Sub-rotinas
18
Wagner Zanco
RESETFLUXOGRAMA
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
RESETExemplo 1: Acionando um LED com um botão 
Wagner Zanco
RESETFLUXOGRAMA
19
Wagner Zanco
RESETBits de Configuração 
- 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
RESETBits de Configuração no Código Fonte 
_BOREN_ON Ativa Brown-out Reset
_BOREN_OFF Desativa Brown-out Reset
_CP_ON Protege toda a memória de programa
_CP_OFF Memória de programa desprotegida
_DATA_CP_ON Memória EEPROM protegida
_DATA_CP_OFF Memória 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 saída de clock
_RC_OSC_NOCLKOUT RC externo sem saída de clock
_INTOSC_OSC_CLKOUT Oscilador interno de 4MHz/37KHz com saída de clock
_INTOSC_OSC_NOCLKOUT Oscilador interno de 4MHz/37KHz sem saída de clock
_EXTCLK_OSC Oscilador de clock externo 
_LP_OSC Cristal de baixa potência (até 200KHz)
_XT_OSC Cristal/Ressonador (até 4MHz)
Wagner Zanco
RESETBits de Configuração no Código Fonte

Outros materiais