sistemas microcontrolados período 2009.2 aula 4saulo.dornellas/arquivos_uc/aula4uc.pdf ·...

83
1 Saulo O. D. Luiz Sistemas Microcontrolados Período 2009.2 Aula 4

Upload: lykhanh

Post on 25-Aug-2018

220 views

Category:

Documents


0 download

TRANSCRIPT

1 Saulo O. D. Luiz

Sistemas Microcontrolados

Período 2009.2

Aula 4

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)...

9 Saulo O. D. Luiz

Organização da memória

Dois blocos de memóriaDados

EEPROMRAM

ProgramaFlash

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

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

Diagramade 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 RAMRegistradores de

funções especiais (SFR)

Registradores de uso geral (GPR)

33 Saulo O. D. Luiz

Modos de endereçamento

EndereçamentoDiretoIndireto

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 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

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 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)

44 Saulo O. D. Luiz

Instruções com o acumulador

MOVLW k ;Move uma constante k para WEx: MOVLW 0x06

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

76 Saulo O. D. Luiz

GOTO k; vai para o endereço kEx.:

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é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

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_Arquitetura/MODULO%207.doc