PIC - AULA2

46
Microcontroladores PIC Conjunto de Instruções de 14 bits André Luís Marques Marcato andre . marcato @ufjf. edu . br Leandro Mattos Braga cebolinhajf @globo.com

description

asa

Transcript of PIC - AULA2

Microcontroladores PICConjunto de Instruções de 14 bits

André Luís Marques Marcato

[email protected]

Leandro Mattos Braga

[email protected]

2

Instruções

Manipulação de Registradores

Aritmética

Operações Lógicas

Desvio

Controle

3

Manipulação de RegistradoresMOVLW k

Copia o valor da constante especificada pelo operando “k” para o registrador W

Flags afetados: nenhum

Tempo de execução: 1 ciclo

Exemplo:

4

Manipulação de RegistradoresMOVWF k

Copia o conteúdo do registrador W para o registrador f (f = W)

O conteúdo do registrador W não será alterado; somente o registrador f

Flags afetados: Nenhum

Tempo de execução 1 ciclo

Exemplos:

5

Manipulação de RegistradoresMOVF f, d(1)

Copia o conteúdo do registrador especificado pelo operando f para o destino especificado pelo operando d.

Se d = 0, o destino será W. Se d = 1, o destino será o operando f

Flags afetados: Z

Tempo de execução: 1 ciclo

6

Manipulação de RegistradoresMOVF f, d(2)

Exemplos TRISA = 20h

TRISA = 20h

TRISB = 00h

7

Manipulação de RegistradoresCLRF f

Apaga o conteúdo do registrador indicado pelo operando f. ( f = 0 )

Flags Afetados: Z. ( Z = 1)

Tempo de Execução: 1 ciclo

Exemplos

8

Manipulação de RegistradoresCLRW

Apaga o conteúdo do registrador W (armazena 0 no mesmo). (W = 0)

Flags afetados: Z

Tempo de execução: 1 ciclo

9

Manipulação de RegistradoresINCF f,d(1)

Incrementa o conteúdo do registrador f em 1. O resultado (f+1) é armazenado no destino indicado pelo operando d

d = W (se d = 0); d = f (se d = 1)

Flags Afetados: Z

Tempo de Execução: 1 ciclo

10

Manipulação de RegistradoresINCF f,d(2)

Exemplos W = 05h; FSR = 09h

W = 05h; TMR0 = 06h

W = 05; INDF = FFh

11

Manipulação de RegistradoresDECF f,d

Decrementa o conteúdo do registrador f em 1. O resultado (f-1) é armazenado no destino indicado pelo operando d

d = W (se d = 0); d = f (se d = 1)

Flags Afetados: Z

Tempo de Execução: 1 ciclo

Exemplo:

12

Manipulação de RegistradoresBCF f,b

Apaga (coloca em nível lógico “0”) o bit representado pelo operando b do registrador representado pelo operando f

Flags Afetados: Nenhum

Tempo de Execução: 1 ciclo

Exemplos: a) STATUS=19h b) TRISB=FFh

13

Manipulação de RegistradoresBSF f,b

Seta (coloca em nível lógico ‘1’) o bit representado pelo operando b do registrador representado pelo operando f

Flags Afetados: Nenhum

Tempo de execução: 1 ciclo

14

Manipulação de RegistradoresSWAPF f,d

Troca os nibbles do registrador representado pelo operando f, o resultado é armazenado no destino indicado pelo operando d

D = W (d=0); d = F (d=1)

Flags afetados: nenhum

Tempo de Execução: 1 ciclo

Exemplos: a) TRISB=FFh b) PORTA=78h

15

Instruções AritméticasADDLW k(1)

Adição aritmética do valor apresentado pela constante “k” ao conteúdo do registrador W.

O resultado (W+k) é armazenado no registrador W

Flags Afetados: Z, D e C

Tempo de execução: 1 ciclo

16

Instruções AritméticasADDLW k(2)

Exemplos: W = 20h

W = F1h

W = FFh

17

Instruções AritméticasADDWF f,d

Adição aritmética do conteúdo do registrador W ao conteúdo do registrador especificado por f

O resultado (W+f) é armazenado no destino indicado por d. (d=W) se (d=0), ou (d=F) se (d=1)

Flags afetados: Z, DC e C

Tempo de execução: 1 ciclo

Exemplo, W = 20h e INTCON = 07h

18

Instruções AritméticasSUBLW k

Subtrai o conteúdo do registrador W do valor do operando ‘k’. O resultado (k-W) é armazenado é armazenado no registrador W.

Flags Afetados: C, DC, Z

Tempo de Execução: 1 ciclo

Exemplo: a) W=01h b) W = 02h

19

Instruções AritméticasSUBWF f,d

Subtrai o conteúdo do registrador W do conteúdo do registrador especificado pelo operando f. O resultado (f-W) é armazenado no destino especificado por d

Flags Afetados: Z, DC, C

Tempo de execução: 1 ciclo

Exemplo: a) W=20h e INTCON=07h b) W=09h e PORTA = 10h

20

Operações LógicasANDLW k

AND lógico bit a bit do conteúdo da constante representada pelo operando ‘k’ com o conteúdo do registrado W.

O resultado W AND k é armazenado no registrador W

Afeta o flag Z. Z = 1, se o valor armazenado no registrador.

Exemplo: W=95h

21

Operações LógicasANDWF f, d

AND lógico do conteúdo do registrador W com o conteúdo do registrador especificado por f.

O resultado (W and f) é armazenado no destino indicado por d

d = W (ou d = ‘0’) ; d = F ( ou d = ‘1’)

Esta instrução afeta o flag Z (Z=1, se o armazenamento no destino for zero)

Exemplo: W = 77h; PORTA = FFh

22

Operações LógicasOutras Instruções

IORLW kIORWF f,dXORLW k

XORWF f,d

Flags Afetados: Nenhum

Tempo de execução: 1 ciclo

23

Operações LógicasCOMF f,d

Complementa (inverte) o nível lógico dos bits do registrador especificado por f. O resultado é armazenado no destino d

d=W se d=0, ou d=f se d=1

Flags afetados: Z

Tempo de execução: 1 ciclo

Exemplo: W=1h, PORTA=82h

24

Operações LógicasRLF f,d(1)

O conteúdo do registrado especificado por f é deslocado um bit à esquerda, o valor do flag C é armazenado no bit zero do registrador e o bit excedente dele é armazenado no flag C. O resultado final é armazenado no registrador de destino indicado por d.

(d = W) se (d = 0); (d = F) se (d = 1)

Flags afetados: C

Tempo de Execução: 1 ciclo

25

Operações LógicasRLF f,d(2)

Exemplos TRISB=42h, Flag C = 1, W = 22h

TRISB=8Fh, Flag C = 0, W = 22h

26

Operações LógicasRRF f,d

O conteúdo do registrador especificado por f é deslocado um bit à direita, o valor da flag C é armazenado no bit 7 do registrador e o bit excedente dele é armazenado no flag C. O resultado final é armazenado no registrador destino indicado por d.

(d = W) se (d = 0); (d = F) se (d = 1)

Flags afetados: C

Tempo de Execução: 1 ciclo

27

Operações de DesvioGOTO k

Desvia o programa para o ponto especificado por k.

Desvio incondicional sem retorno

Flags afetados: Nenhum

Tempo de Execução: 2 ciclos

Exemplo: Considere:

...

GOTO PONTO2

...

...

PONTO2:

...

28

Operações de DesvioCALL k(1)

Chamada de sub-rotina especificada por k.A CPU irá guardar o conteúdo atual do PC (contador de programa)+1 na pilha e em seguida desviará para a própria sub-rotinaAo término da sub-rotina uma instrução RETURN (ou similar) irá retirar o (PC+1) da pilha e retornará ao ponto seguinte do qual foi chamada sub-rotinaNenhum flag é afetadoTempo de execução: 2 ciclos

29

Operações de DesvioCALL k(2)

Exemplo:

Considere:

...

CALL PONTO2

...

...

PONTO2:

...

...

RETURN

30

Operações de DesvioRETURN e RETLW

Retorno de sub-rotina

Após a execução da sub-rotina, estas instruções fazem o programa voltar para o ponto de onde a mesma foi chamada

No caso da instrução RETLW, adicionalmente, o valor de k será copiado para o registrador W (W=k).

Flags afetados: nenhum

Tempo de execução: 2 ciclos

31

Operações de DesvioRETFIE

Retorno de interrupção. Esta instrução retorna ao ponto seguinte do qual ocorreu uma interrupção

Esta instrução liga o bit GIE do INTCON

Flags afetados: Nenhum

Tempo de execução: 2 ciclos

32

Operações de DesvioBTFSC f,b(1)

Instrução de desvio condicionalTesta o bit especificado por b do registrador especificado por f e pula (não executa) a próxima instrução se o bit estiver em nível ‘0’.Tempo de execução: 1 ou 2 ciclos 1 ciclo se não pular (condição não é verdadeira) 2 ciclos se pular (condição verdadeira)

Flags afetados: nenhum

33

Operações de DesvioBTFSC f,b(2)

Exemplosa) Considere: STATUS=18h

BTFSC STATUS,2CLRWADDLW 0x02

b) Considere: INTCON=01hBTFSC INTCON, 0CLRWADDLW 0x02

34

Operações de DesvioBTFSS f,b(1)

Instrução de desvio condicional

Testa o bit especificado pelo operando b do registrador especificado por f e pula (não executa) a próxima instrução se o bit estiver em nível ‘1’.

Tempo de execução: 1 ou 2 ciclos de máquina

Não afeta nenhuma flag

35

Operações de DesvioBTFSS f,b(2)

Exemplosa) Considere: STATUS=18h

BTFSC STATUS,2CLRWADDLW 0x02

b) Considere: PORTA=05hBTFSC PORTA, 7GOTO PONTOAADDLW 0x10

36

Operações de DesvioDECFSZ f,d(1)

Instrução de desvio condicional, decrementa o conteúdo do registrador especificado por f (subtrai 1). Pula a próxima instrução se o resultado (após o decremento) for igual a zero. O resultado (f-1) é armazenado no destino indicado por d.

d=W se (d=0) ou d=f se (d=1)

Flags afetados nenhum

Tempo de execução: 1 ou 2 ciclos

37

Operações de DesvioDECFSZ f,d(2)

Considere que o conteúdo do registrador FSR seja 10hDECFSZ FSR,F

MOVLW 0x05

ADDLW 0x01

Considere que o conteúdo do registrado FSR seja 01hDECFSZ FSR,F

MOVLW 0x05

ADDLW 0x01

38

Operações de DesvioINCFSZ f,d(1)

Instrução de desvio condicional, incrementa o conteúdo do registrador especificado por f (adiciona 1 ao valor dele). Pula a próxima instrução se o resultado (após o incremento) for igual a zero. O resultado (f+1) é armazenado em d.

d=W se (d=0) ou d=f se (d=1)

Flags afetados nenhum

Tempo de execução: 1 ou 2 ciclos

39

Operações de DesvioINCFSZ f,d(2)

Considere que o conteúdo do registrador FSR seja 00hINCFSZ FSR,W

MOVLW 0x05

ADDLW 0x01

Considere que o conteúdo do registrado FSR seja FFhINCFSZ FSR,W

MOVLW 0x05

ADDLW 0x01

40

Instruções de ControleNOP

Sem operação

Esta instrução não executa nenhuma operação. Não altera nenhum flag. O processador gasta um ciclo de máquina sem executar nenhuma operação

Flags afetados: nenhum

Tempo de execução: 1 ciclo

41

Instruções de ControleCLRWDT

Limpa (zera) o contador do watchdog. A instrução é utilizada periodicamente, dentro do programa, para resetar o watchdog, impedindo que o mesmo venha a ressetar a CPU

Flags afetados: TO e PD

Tempo de execução: 1 ciclo

42

Instruções de ControleSLEEP

Aciona o modo de baixa potência da CPU. O processamento é parado e o conteúdo da memória é preservado.

Flags afetados: TO=1 e PD=0

43

Programa em Basic

TRISB.0 = 0TRISB.0 = 0TRISB.1 = 0TRISB.1 = 0

led1 VAR PORTB.0led1 VAR PORTB.0led2 VAR PORTB.1led2 VAR PORTB.1

loop:loop:Low led2Low led2High led1High led1Low led1Low led1High led2High led2

GoTo loopGoTo loop

44

Programa em Assembler

GOTO Label_0001GOTO Label_0001

Label_0001 BSF STATUS , RP0Label_0001 BSF STATUS , RP0

BCF TRISB , 00BCF TRISB , 00

BCF TRISB , 01BCF TRISB , 01

BCF STATUS , RP0BCF STATUS , RP0

Label_0002 BCF PORTB , 01Label_0002 BCF PORTB , 01

BSF STATUS , RP0BSF STATUS , RP0

BCF TRISB , 01BCF TRISB , 01

BCF STATUS , RP0BCF STATUS , RP0

BSF PORTB , 00BSF PORTB , 00

BSF STATUS , RP0BSF STATUS , RP0

BCF TRISB , 00BCF TRISB , 00

BCF STATUS , RP0BCF STATUS , RP0

BCF PORTB , 00BCF PORTB , 00

BSF STATUS , RP0BSF STATUS , RP0

BCF TRISB , 00BCF TRISB , 00

BCF STATUS , RP0BCF STATUS , RP0

BSF PORTB , 01BSF PORTB , 01

BSF STATUS , RP0BSF STATUS , RP0

BCF TRISB , 01BCF TRISB , 01

BCF STATUS , RP0BCF STATUS , RP0

GOTO Label_0002GOTO Label_0002

45

Conjunto de Instruções(1)

46

Conjunto de Instruções(2)