Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 Saulo O. D. Luiz Sistemas Microcontrolados Período 2009.2 Aula 4 2 Saulo O. D. Luiz Roteiro Introdução ao microcontrolador PIC 16F877 Arquitetura do PIC 16F877 Conjunto de instruções Registradores de configuração 3 Saulo O. D. Luiz Arquitetura do PIC 16F877 Palavra de instrução de 14 bits 35 instruções Todas as instruções ocupam uma só palavra de instrução Todas 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 embutidos Recursos 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)... 9 Saulo O. D. Luiz Organização da memória Dois blocos de memória Dados EEPROM RAM Programa Flash 10 Saulo O. D. Luiz Memória de programa Flash 8192 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 EEPROM 256 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 12 Saulo O. D. Luiz Configuração básica para o PIC 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 14 Saulo O. D. Luiz Reset 15 Saulo O. D. Luiz 16 Saulo O. D. Luiz Arquitetura 17 Saulo O. D. Luiz Diagrama de blocos 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 RAM Registradores de funções especiais (SFR) Registradores de uso geral (GPR) 33 Saulo O. D. Luiz Modos de endereçamento Endereçamento Direto Indireto 34 Saulo O. D. Luiz Endereçamento Direto Seleção de Banco Seleção de Registro Registro 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 Indireto Ex.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 Indireto Ex.2: preencher posições de memória 20h-2Fh 38 Saulo O. D. Luiz Endereçamento Indireto Ex.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 39 Saulo O. D. Luiz Comparação de endereçamentos direto e indireto 40 Saulo O. D. Luiz Unidade Lógica e Aritmética (ULA) 8 bits de largura Acumulador w (working register)41 Saulo O. D. Luiz Unidade Lógica e Aritmética (ULA) Operações aritméticas Soma Subtração (complemento de 2) Operações lógicas Rotate And Or Xor ... 42 Saulo O. D. Luiz Unidade Lógica e Aritmética (ULA) As instruções com dois operandos envolvem O acumulador w Um registrador f, ou uma constante codificada na instrução As operações aritméticas e lógicas atualizam os bits do registrador STATUS Z (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 para Acumulador w (bit d = 0) Registrador f (bit d = 1) 44 Saulo O. D. Luiz Instruções com o acumulador MOVLW k ;Move uma constante k para W Ex: MOVLW 0x06 45 Saulo O. D. Luiz Instruções com o acumulador Ex.1: MOVF f,W ;Move o conteúdo de f para W Ex.2: BSF STATUS, RP0 ; BCF STATUS, RP1 ;Seleciona banco 1 MOVF 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 f Ex.: BSF STATUS, RP0; BCF STATUS, RP1; Seleciona banco 1 MOVLW 0x06 ;Move uma constante para W MOVWF 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 W Ex.: 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 W Ex.: 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 f Ex.: MOVLW 0xFF ;Move uma constante para W BCF STATUS, RP0 ; BSF STATUS, RP1 ;Seleciona banco 2 MOVWF 0x120 ;Move o conteúdo de W para 0x120 MOVLW 0x1 ;Move uma constante para W ADDWF 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 -> W Ex.: 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 -> d Ex.: MOVLW 0x15 ;Move uma constante para W BCF STATUS, RP0 ; BSF STATUS, RP1 ;Seleciona banco 2 MOVWF 0x120 ;Move o conteúdo de W para 0x120 MOVLW 0x02 ;Move uma constante para W SUBWF 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 W Ex.: 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 f Ex.: MOVLW 0x0F ;Move uma constante para W BCF STATUS, RP0 ; BSF STATUS, RP1 ;Seleciona banco 2 MOVWF 0x120 ;Move o conteúdo de W para 0x120 MOVLW 0x34 ;Move uma constante para W ANDWF 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 W Ex.: 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 f Ex.: MOVLW 0x3F ;Move uma constante para W BCF STATUS, RP0 ; BSF STATUS, RP1 ;Seleciona banco 2 MOVWF 0x120 ;Move o conteúdo de W para 0x120 MOVLW 0x50 ;Move uma constante para W IORWF 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 W Ex.: 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 f Ex.: MOVLW 0x3F ;Move uma constante para W BCF STATUS, RP0 ; BSF STATUS, RP1 ;Seleciona banco 2 MOVWF 0x120 ;Move o conteúdo de W para 0x120 MOVLW 0x50 ;Move uma constante para W XORWF 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 carry Ex.: MOVLW 0x15 ;Move uma constante para W BCF STATUS, RP0 ; BSF STATUS, RP1 ;Seleciona banco 2 MOVWF 0x120 ;Move o conteúdo de W para 0x120 RLF 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 carry Ex.: MOVLW 0x15 ;Move uma constante para W BCF STATUS, RP0 ; BSF STATUS, RP1 ;Seleciona banco 2 MOVWF 0x120 ;Move o conteúdo de W para 0x120 RRF 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 f Ex.: MOVLW 0x15 ;Move uma constante para W BCF STATUS,RP0 ; BSF STATUS,RP1 ;Seleciona banco 2 MOVWF 0x120 ;Move o conteúdo de W para 0x120 CLRF 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 f Ex.: MOVLW 0x15 ;Move uma constante para W BCF STATUS, RP0 ; BSF STATUS, RP1 ;Seleciona banco 2 MOVWF 0x120 ;Move o conteúdo de W para 0x120 COMF 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 f Ex.: MOVLW 0x15 ;Move uma constante para W BCF STATUS, RP0 ; BSF STATUS, RP1 ;Seleciona banco 2 MOVWF 0x120 ;Move o conteúdo de W para 0x120 DECF 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 W BCF STATUS, RP0 ; BSF STATUS, RP1 ;Seleciona banco 2 MOVWF 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 f Ex.: MOVLW 0x15 ;Move uma constante para W BCF STATUS, RP0 ; BSF STATUS, RP1 ;Seleciona banco 2 MOVWF 0x120 ;Move o conteúdo de W para 0x120 INCF 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 W BCF STATUS, RP0 ; BSF STATUS, RP1 ;Seleciona banco 2 MOVWF 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 d Ex.: MOVLW 0x15 ;Move uma constante para W BSF STATUS, RP0 ; BSF STATUS, RP1 ;Seleciona banco 3 MOVWF 0x19D ;Move o conteúdo de W para 0x19D INCF 0x19D ;Incrementa o conteúdo de 0x19D MOVF 0x19D,W ;Copia o conteúdo de 0x19D para W Operações comregistradores f e orientadas a byte 69 Saulo O. D. Luiz SWAPF f ; Troca os nibbles de f Ex.: MOVLW 0x15 ;Move uma constante para W BCF STATUS, RP0 ; BSF STATUS, RP1 ;Seleciona banco 2 MOVWF 0x120 ;Move o conteúdo de W para 0x120 SWAPF 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 W BCF STATUS, RP0 ; BSF STATUS, RP1 ;Seleciona banco 2 MOVWF 0x120 ;Move o conteúdo de W para 0x120 BCF 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 GOTO GOTO 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 W BCF STATUS, RP0 ; BSF STATUS, RP1 ;Seleciona banco 2 MOVWF 0x120 ;Move o conteúdo de W para 0x120 BCF STATUS, C ;Limpa o carry VOLTA4 RRF 0x120,F ;divide o conteúdo de 0x120 BCF STATUS, C ;Limpa o carry BTFSC STATUS,Z ;Se o resultado da divisão é diferente de ‘0’, ;então salta o GOTO GOTO VOLTA4 Operações com registradores f e orientadas a bit 76 Saulo O. D. Luiz GOTO k; vai para o endereço k Ex.: Operações de controle Esperar: GOTO Esperar 77 Saulo O. D. Luiz NOP; nenhuma operação Demais Operações 78 Saulo O. D. Luiz SLEEP; modo de sono Demais Operações 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ética 2. 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 83 Saulo O. D. Luiz Bibliografia Guia do Laboratório de Arquitetura de Sistemas Digitais do DEE/CEEI/UFCG. Disponível em: http://www.dee.ufcg.edu.br/~aco/Lab_Arq uitetura/MODULO%207.doc Slide 1 Slide 2 Slide 3 Slide 4 Slide 5 Slide 6 Slide 7 Slide 8 Slide 9 Slide 10 Slide 11 Slide 12 Slide 13 Slide 14 Slide 15 Slide 16 Slide 17 Slide 18 Slide 19 Slide 20 Slide 21 Slide 22 Slide 23 Slide 24 Slide 25 Slide 26 Slide 27 Slide 28 Slide 29 Slide 30 Slide 31 Slide 32 Slide 33 Slide 34 Slide 35 Slide 36 Slide 37 Slide 38 Slide 39 Slide 40 Slide 41 Slide 42 Slide 43 Slide 44 Slide 45 Slide 46 Slide 47 Slide 48 Slide 49 Slide 50 Slide 51 Slide 52 Slide 53 Slide 54 Slide 55 Slide 56 Slide 57 Slide 58 Slide 59 Slide 60 Slide 61 Slide 62 Slide 63 Slide 64 Slide 65 Slide 66 Slide 67 Slide 68 Slide 69 Slide 70 Slide 71 Slide 72 Slide 73 Slide 74 Slide 75 Slide 76 Slide 77 Slide 78 Slide 79 Slide 80 Slide 81 Slide 82 Slide 83
Compartilhar