Upload
lykhanh
View
220
Download
0
Embed Size (px)
Citation preview
2 Saulo O. D. Luiz
Roteiro
Introdução ao microcontrolador PIC 16F877Arquitetura do PIC 16F877Conjunto de instruçõesRegistradores de configuração
3 Saulo O. D. Luiz
Arquitetura do PIC 16F877
Palavra de instrução de 14 bits35 instruçõesTodas as instruções ocupam uma só
palavra de instruçãoTodas as instruções são executadas num
único ciclo de máquina, exceto no caso de instruções de salto e de ramificação
4 Saulo O. D. Luiz
Arquitetura do PIC 16F877
8K x 14 bits de memória de programa flash;
368 x 8 bits de memória de dados RAM;256 x 8 bits de memória de dados
EEPROM;Pilha implementada por hardware com 8
níveis (até 8 chamadas de rotinas aninhadas)
5 Portas de E/S;
5 Saulo O. D. Luiz
Arquitetura do PIC 16F877
14 fontes de interrupção (internas e externas);
Dois módulos de Captura/Comparação/PWM;
Conversor A/D de 10 bits com entradas multiplexadas;
Porta serial síncrona com SPI (master mode) e I2C (master/slave);
USART/SCI;
6 Saulo O. D. Luiz
Arquitetura do PIC 16F877
Porta paralela com 8 bits de Timer/Counter programável e um
Watchdog Timer embutidosRecursos de hardware para proteção de
código, modo de operação com baixo consumo de energia (sleep), programação "in-circuit", alta corrente de saída para LEDs (25 mA), power-on-reset, power-up timer, etc
7 Saulo O. D. Luiz
Relógio / Ciclo de instrução
Dividido internamente em quatro fases, Q1, Q2, Q3 e Q4
8 Saulo O. D. Luiz
Relógio / Ciclo de instrução
Se a instrução provocar uma mudança no conteúdo do contador de programa (PC)...
10 Saulo O. D. Luiz
Memória de programa
Flash8192 palavras de 14 bitsÉ possível reprogramar o
microcontrolador várias vezes antes de obter a versão definitiva
11 Saulo O. D. Luiz
Memória de dados
EEPROM256 palavras de 8 bitsÉ acessada indiretamente através dos
registradores EEADR e EEDATAÉ usada para armazenar dados que
precisam ser mantidos após o desligamento do sistema
13 Saulo O. D. Luiz
Operação com cristal
• Para cristal de 20MHz, o tipo de osc é HS
• C1 e C2 podem ter valores na faixa
– 15-33pF
18 Saulo O. D. Luiz
Registrador CONFIG
• Está na posição 2007h da memória de programa
• A posição 2007h está além do espaço do programa do usuário, e só pode ser acessada durante a programação
• A palavra de configuração (quando apagada ou não programada) é 3FFFh
19 Saulo O. D. Luiz
Registrador CONFIG
• CP1:CP0: bits de proteção do programa na memória FLASH
– 11 = proteção desligada– 10 = proteção em 1F00h a 1FFFh– 01 = proteção em 1000h a 1FFFh– 00 = proteção em 0000h a 1FFFh
20 Saulo O. D. Luiz
Registrador CONFIG
• DEBUG: modo de depuração in-circuit– 1 = desabilitado. RB6 e RB7 são pinos
de I/O de propósito geral– 0 = habilitado. RB6 e RB7 são dedicados
à depuração
21 Saulo O. D. Luiz
Registrador CONFIG
• WRT: habilitação de escrita na memória de programa FLASH
– 1 = a memória de programa desprotegida pode ser escrita pelo controle EECON
– 0 = a memória de programa desprotegida não pode ser escrita pelo controle EECON
22 Saulo O. D. Luiz
Registrador CONFIG
• CPD: proteção da memória de dados EE
– 1 = proteção desligada– 0 = proteção do código na memória de
dados EEPROM
23 Saulo O. D. Luiz
Registrador CONFIG
• LVP: habilitação de programação serial in-circuit em baixa tensão
– 1 = programação em baixa tensão está habilitada, e RB3/PGM tem a função PGM
– 0 = RB3 é uma I/O digital
24 Saulo O. D. Luiz
Registrador CONFIG
• BODEN: habilitação de reset brown-out– 1 = BOR habilitado– 0 = BOR desabilitado
25 Saulo O. D. Luiz
Registrador CONFIG
• PWRTE': habilitação do temporizador de power-up
– 1 = PWRT desabilitado– 0 = PWRT habilitado
26 Saulo O. D. Luiz
Registrador CONFIG
• WDTE: habilitação do temporizador do watchdog
– 1 = WDT habilitado– 0 = WDT desabilitado
27 Saulo O. D. Luiz
Registrador CONFIG
• FOSC1:FOSC0: bits de seleção do oscilador
– 11 = RC (resistor e capacitor)– 10 = HS (cristal/ressonador de alta
velocidade– 01 = XT (cristal/ressonador)– 00 = LP (cristal de baixa potência)
28 Saulo O. D. Luiz
Registrador CONFIG
• Exemplo em Assembly
__CONFIG _CP_OFF & _WDT_ON & _BODEN_ON & _PWRTE_ON & _RC_OSC & _WRT_ENABLE_ON & _LVP_ON & _DEBUG_OFF & _CPD_OFF
29 Saulo O. D. Luiz
Registrador STATUS (estado)
IRP: bit de seleção do banco (endereçamento indireto) 1 = banco 2, 3 (100h-1FFh)
0 = banco 0, 1 (00h-FFh)
RP1:RP0: bits de seleção do banco (endereçamento direto) 00 = banco 0 (00h - 7Fh) 01 = banco 1 (80h - FFh) 10 = banco 2 (100h - 17Fh) 11 = banco 3 (180h - 1FFh)
30 Saulo O. D. Luiz
Registrador STATUS (estado)
TO: bit de Time-out 1 = Após power-up, a instrução CLRWDT, ou a instrução
SLEEP
0 = Um time-out do WDT ocorreu
PD: bit de Power-down 1 = Após power-up ou por uma instrução CLRWDT 0 = Pela execução da instrução SLEEP
31 Saulo O. D. Luiz
Registrador STATUS (estado)
Z: bit Zero 1 = O resultado de uma operação foi zero
0 = O resultado de uma operação foi diferente de zero
DC: bit de Digit carry/borrow (instruções ADDWF, ADDLW,SUBLW,SUBWF) 1 = Um vai-um do quarto bit menos significativo
0 = Nenhum vai-um do quarto bit menos significativo
C: bit de Carry/borrow (instruções ADDWF, ADDLW,SUBLW,SUBWF) 1 = Um vai-um do bit mais significativo ocorreu
0 = Nenhum vai-um do bit mais significativo ocorreu
32 Saulo O. D. Luiz
Memória RAMRegistradores de
funções especiais (SFR)
Registradores de uso geral (GPR)
35 Saulo O. D. Luiz
Endereçamento Indireto
Registro FSR
Registro
Seleção de Banco
Seleção de Registro
36 Saulo O. D. Luiz
Endereçamento IndiretoEx.1: copiar o conteúdo de W para posição de
memória 120h
MOVLW 0x20 ;Inicializar apontador
BSF STATUS, IRP;
MOVWF FSR ;para posição de memória 0x120 na RAM
MOVLW 0x34 ;Novo conteúdo de W
MOVWF INDF ;que será movido para o endereço 0x120 apontado indiretamente
37 Saulo O. D. Luiz
MOVLW 0x20 ;Inicializar apontador
BCF STATUS, IRP;
MOVWF FSR ;para posição de memória 0x20 na RAM
MOVLW 0xFF ;Novo valor para W
VOLTA ADDLW 0x1 ;Incrementar W
MOVWF INDF ;que será movido para o endereço apontado indiretamente
INCF FSR,F ;Incrementar ponteiro
BTFSS FSR, 4;Se FSR passou de 2Fh, então pula o goto seguinte
GOTO VOLTA
Endereçamento IndiretoEx.2: preencher posições de memória 20h-2Fh
38 Saulo O. D. Luiz
Endereçamento IndiretoEx.3: limpar posições de memória 20h-2Fh
MOVLW 0x20 ;Inicializar apontador
BCF STATUS, IRP;
MOVWF FSR ;para posição de memória 0x20 na RAM
NEXT CLRF INDF ;Limpar registrador INDF
INCF FSR,F ;Incrementar ponteiro
BTFSS FSR, 4;Se FSR passou de 2Fh, então pula o goto seguinte
GOTO NEXT
40 Saulo O. D. Luiz
Unidade Lógica e Aritmética (ULA)
8 bits de larguraAcumulador w (working register)
41 Saulo O. D. Luiz
Unidade Lógica e Aritmética (ULA)
Operações aritméticasSomaSubtração (complemento de 2)
Operações lógicasRotateAndOrXor...
42 Saulo O. D. Luiz
Unidade Lógica e Aritmética (ULA)
As instruções com dois operandos envolvemO acumulador wUm registrador f, ou uma constante
codificada na instruçãoAs operações aritméticas e lógicas atualizam os
bits do registrador STATUSZ (zero)C (carry)DC (digit carry)
43 Saulo O. D. Luiz
Unidade Lógica e Aritmética (ULA)
Um bit na instrução permite escolher se o resultado vai paraAcumulador w (bit d = 0)Registrador f (bit d = 1)
45 Saulo O. D. Luiz
Instruções com o acumulador
Ex.1: MOVF f,W ;Move o conteúdo de f para WEx.2: BSF STATUS, RP0 ;
BCF STATUS, RP1 ;Seleciona banco 1MOVF TRISA, W ;Move o conteúdo de TRISA para W
;Exemplo de endereçamento direto
46 Saulo O. D. Luiz
Instruções com o acumulador
MOVWF f ;Move o conteúdo de W para fEx.: BSF STATUS, RP0;
BCF STATUS, RP1; Seleciona banco 1MOVLW 0x06 ;Move uma constante para WMOVWF ADCON1 ;Move o conteúdo de W para ADCON1
47 Saulo O. D. Luiz
Instruções com o acumulador
CLRW ;Limpa o conteúdo de WEx.: MOVLW 0x06 ;Move uma constante para W
CLRW ;Limpa o acumulador;Observar o bit Z de STATUS
48 Saulo O. D. Luiz
Operações aritméticas
ADDLW k ;Adiciona literal k a WEx.: MOVLW 0xFF ;Move uma constante para W
ADDLW 0x01 ;Adiciona literal a W;Observar bits C, DC e Z do registrador STATUS
49 Saulo O. D. Luiz
Operações aritméticas
ADDWF f,d ;Adiciona W e fEx.: MOVLW 0xFF ;Move uma constante para W
BCF STATUS, RP0 ;BSF STATUS, RP1 ;Seleciona banco 2MOVWF 0x120 ;Move o conteúdo de W para 0x120MOVLW 0x1 ;Move uma constante para WADDWF 0x120,F ;Adiciona W e f, colocando o resultado em f
;Observar bits C, DC e Z do registrador STATUS
50 Saulo O. D. Luiz
Operações aritméticas
SUBLW k ;Subtração k-W -> WEx.: MOVLW 0x02 ;Move uma constante para W
SUBLW 0x15 ;Subtrai W de literal;Observar bits C, DC e Z do registrador STATUS
51 Saulo O. D. Luiz
Operações aritméticas
SUBWF f,d ;Subtração f-W -> dEx.: MOVLW 0x15 ;Move uma constante para W
BCF STATUS, RP0 ;BSF STATUS, RP1 ;Seleciona banco 2MOVWF 0x120 ;Move o conteúdo de W para 0x120MOVLW 0x02 ;Move uma constante para WSUBWF 0x120,F ;Subtrai W de f, colocando o resultado em f
;Observar bit C, DC e Z do registrador STATUS
52 Saulo O. D. Luiz
Operações lógicas
ANDLW k ;’E’ lógico entre k e WEx.: MOVLW 0xA3 ;Move uma constante para W
ANDLW 0xA3 ;And entre literal e W;Observar bit Z do registrador STATUS
53 Saulo O. D. Luiz
Operações lógicas
ANDWF f,d ;’E’ lógico entre W e fEx.:
MOVLW 0x0F ;Move uma constante para WBCF STATUS, RP0 ;BSF STATUS, RP1 ;Seleciona banco 2MOVWF 0x120 ;Move o conteúdo de W para 0x120MOVLW 0x34 ;Move uma constante para WANDWF 0x120,F ;W AND f, colocando o resultado em f
;Observar bit Z do registrador STATUS
54 Saulo O. D. Luiz
Operações lógicas
IORLW k ;’OU’ inclusivo entre k e WEx.: MOVLW 0x3F ;Move uma constante para W
IORLW 0x50 ;Ou inclusivo entre literal e W;Observar bit Z do registrador STATUS;0011 1111 = 0x3F= k;0101 0000 = 0x50 = W;0111 1111 = 0x7F = k ‘ou’ W
55 Saulo O. D. Luiz
IORWF f,d ; ;’OU’ inclusivo entre W e fEx.:
MOVLW 0x3F ;Move uma constante para WBCF STATUS, RP0 ;BSF STATUS, RP1 ;Seleciona banco 2MOVWF 0x120 ;Move o conteúdo de W para 0x120MOVLW 0x50 ;Move uma constante para WIORWF 0x120,F ;Adiciona W e f, colocando o resultado em f
;Observar bit Z do registrador STATUS
56 Saulo O. D. Luiz
Operações lógicas
XORLW k ;’OU’ exclusivo entre k e WEx.: MOVLW 0x3F ;Move uma constante para W
XORLW 0x50 ;Ou exclusivo entre literal e W;Observar bit Z do registrador STATUS;0011 1111 = 0x3F= k;0101 0000 = 0x50 = W;0110 1111 = 0x6F = k ‘xou’ W
57 Saulo O. D. Luiz
XORWF f,d ; ;’OU’ exclusivo entre W e fEx.:
MOVLW 0x3F ;Move uma constante para WBCF STATUS, RP0 ;BSF STATUS, RP1 ;Seleciona banco 2MOVWF 0x120 ;Move o conteúdo de W para 0x120MOVLW 0x50 ;Move uma constante para WXORWF 0x120,F ;Ou exclusivo de W e f, colocando o resultado em f
;Observar bit Z do registrador STATUS
58 Saulo O. D. Luiz
RLF f,d ;Rotacionar à esquerda através do carryEx.:
MOVLW 0x15 ;Move uma constante para WBCF STATUS, RP0 ;BSF STATUS, RP1 ;Seleciona banco 2MOVWF 0x120 ;Move o conteúdo de W para 0x120RLF 0x120,F ;Rotaciona F com o carry, colocando o resultado em f
;Observar bit C do registrador STATUS
Operações de deslocamento
59 Saulo O. D. Luiz
RRF f,d ;Rotacionar à direita através do carryEx.:
MOVLW 0x15 ;Move uma constante para WBCF STATUS, RP0 ;BSF STATUS, RP1 ;Seleciona banco 2MOVWF 0x120 ;Move o conteúdo de W para 0x120RRF 0x120,F ;Rotaciona F com o carry, colocando o resultado em f
;Observar bit C do registrador STATUS
Operações de deslocamento
60 Saulo O. D. Luiz
CLRF f ; Limpar o conteúdo do registrador fEx.:
MOVLW 0x15 ;Move uma constante para WBCF STATUS,RP0 ;BSF STATUS,RP1 ;Seleciona banco 2MOVWF 0x120 ;Move o conteúdo de W para 0x120CLRF 0x120 ;Limpa o registrador 0x120
Operações com registradores f e orientadas a byte
61 Saulo O. D. Luiz
COMF f,d ; Complementar o registrador fEx.: MOVLW 0x15 ;Move uma constante para W
BCF STATUS, RP0 ;BSF STATUS, RP1 ;Seleciona banco 2MOVWF 0x120 ;Move o conteúdo de W para 0x120COMF 0x120,F ;Aplica o complemento de 2 ao registrador 0x120
;0001 0101 = 0x15;1110 1010 = C1(0x15) = 0xEA
Operações com registradores f e orientadas a byte
62 Saulo O. D. Luiz
DECF f,d ; Decrementar o registrador fEx.:
MOVLW 0x15 ;Move uma constante para WBCF STATUS, RP0 ;BSF STATUS, RP1 ;Seleciona banco 2MOVWF 0x120 ;Move o conteúdo de W para 0x120DECF 0x120,F ;Decrementa o conteúdo do registrador 0x120
Operações com registradores f e orientadas a byte
63 Saulo O. D. Luiz
DECFSZ f,d ; Decrementar o registrador f, e saltar a próxima instrução se o resultado for zero
Operações com registradores f e orientadas a byte
64 Saulo O. D. Luiz
Ex.:MOVLW 0x03 ;Move uma constante para WBCF STATUS, RP0 ;BSF STATUS, RP1 ;Seleciona banco 2MOVWF 0x120 ;Move o conteúdo de W para 0x120
VOLTA DECFSZ 0x120,F ; Decrementa o conteúdo de 0x120 e salta a ;próxima instrução se o resultado for zero
GOTO VOLTA
Operações com registradores f e orientadas a byte
65 Saulo O. D. Luiz
INCF f ; Incrementar o registrador fEx.:
MOVLW 0x15 ;Move uma constante para WBCF STATUS, RP0 ;BSF STATUS, RP1 ;Seleciona banco 2MOVWF 0x120 ;Move o conteúdo de W para 0x120INCF 0x120,F ;Incrementa o conteúdo de 0x120
Operações com registradores f e orientadas a byte
66 Saulo O. D. Luiz
INCFSZ f ; Incrementar o registrador f, e saltar se o resultado for zero
Operações com registradores f e orientadas a byte
67 Saulo O. D. Luiz
Ex.:MOVLW 0xFA ;Move uma constante para WBCF STATUS, RP0 ;BSF STATUS, RP1 ;Seleciona banco 2MOVWF 0x120 ;Move o conteúdo de W para 0x120
VOLTA2 INCFSZ 0x120 ;Incrementa o conteúdo de 0x120 e salta a;próxima instrução se o resultado for zero
GOTO VOLTA2
Operações com registradores f e orientadas a byte
68 Saulo O. D. Luiz
MOVF f,d ; Copiar o conteúdo de f para dEx.:
MOVLW 0x15 ;Move uma constante para WBSF STATUS, RP0 ;BSF STATUS, RP1 ;Seleciona banco 3MOVWF 0x19D ;Move o conteúdo de W para 0x19DINCF 0x19D ;Incrementa o conteúdo de 0x19D MOVF 0x19D,W ;Copia o conteúdo de 0x19D para W
Operações com registradores f e orientadas a byte
69 Saulo O. D. Luiz
SWAPF f ; Troca os nibbles de fEx.:
MOVLW 0x15 ;Move uma constante para WBCF STATUS, RP0 ;BSF STATUS, RP1 ;Seleciona banco 2MOVWF 0x120 ;Move o conteúdo de W para 0x120SWAPF 0x120 ;Troca os nibbles de 0x120
Operações com registradores f e orientadas a byte
70 Saulo O. D. Luiz
BCF f,b ; torna ‘0’ o bit ‘b’ do registrador ‘f’Ex.:
BCF 0x120, 0 ; torna ‘0’ o bit ‘0’ do registrador ‘0x120’
Operações com registradores f e orientadas a bit
71 Saulo O. D. Luiz
BSF f,b ; torna ‘1’ o bit ‘b’ do registrador ‘f’Ex.:
BSF 0x120, 1 ; torna ‘1’ o bit ‘0’ do registrador ‘0x120’
Operações com registradores f e orientadas a bit
72 Saulo O. D. Luiz
BTFSS f,b ; testa o bit ‘b’ do registrador ‘f’, e salta se estiver setado i.e. igual a ‘1’
Operações com registradores f e orientadas a bit
73 Saulo O. D. Luiz
Ex.:
MOVLW 0x15 ;Move uma constante para WBCF STATUS, RP0 ;BSF STATUS, RP1 ;Seleciona banco 2MOVWF 0x120 ;Move o conteúdo de W para 0x120BCF STATUS, C ;Limpa o carry
VOLTA3 RLF 0x120,F ;duplica o conteúdo de 0x120 BTFSS STATUS,C ;Se houve overflow...
;então salta o GOTOGOTO VOLTA3
Operações com registradores f e orientadas a bit
74 Saulo O. D. Luiz
BTFSC f,b ; testa o bit ‘b’ do registrador ‘f’, e salta se estiver limpo i.e. igual a ‘0’
Operações com registradores f e orientadas a bit
75 Saulo O. D. Luiz
Ex.:
MOVLW 0x15 ;Move uma constante para WBCF STATUS, RP0 ;BSF STATUS, RP1 ;Seleciona banco 2MOVWF 0x120 ;Move o conteúdo de W para 0x120BCF STATUS, C ;Limpa o carry
VOLTA4 RRF 0x120,F ;divide o conteúdo de 0x120 BCF STATUS, C ;Limpa o carryBTFSC STATUS,Z ;Se o resultado da divisão é diferente de ‘0’,
;então salta o GOTOGOTO VOLTA4
Operações com registradores f e orientadas a bit
79 Saulo O. D. Luiz
Exercícios
1. Explique, através do ciclo de instrução do PIC, como o pipeline permite acelerar a execução de um programa.2. Explique os modos de endereçamento direto e indireto.3. Explique o papel de cada bit dos registradores de STATUS e OPTION
80 Saulo O. D. Luiz
Exercícios
4. Quais são os registradores que configuram a I/O do PIC?
1. Onde estão localizados os registradores de funções especiais na memória do PIC?
2. Qual a finalidade do registrador de trabalho e onde está localizado na arquitetura do PIC?
81 Saulo O. D. Luiz
Exercícios
1. Qual parte da memória do PIC é normalmente denominada ‘register file’?
2. Qual a finalidade do bit IRP do registrador STATUS?
3. Em que registrador está localizado o bit de carry?
4. O que são os registradores TRIS?
82 Saulo O. D. Luiz
Exercícios
1. Implementar uma progressão aritmética2. Implementar duas progressões
geométricas: uma com razão 2 e outra de razão 1/2
3. Implementar a transposta de uma matriz de um banco de memória para outro