Descripción de las instrucciones [Modo de...

22
1 1 DESCRIPCIÓN DE LAS INSTRUCCIONES Todas las instrucciones del PIC cumplen las siguientes condiciones: Las instrucciones son simples y rápidas. Todas tienen un tiempo de ejecución de un ciclo de instrucción (cuatro ciclos de reloj) a excepción de las de salto que tienen un tiempo de ejecución de dos ciclos de instrucción. Las instrucciones son ortogonales. Casi todas las instrucciones tienen una longitud de 14 bits y los datos una longitud de 1 byte. 2 JUEGO DE INSTRUCCIONES El juego de instrucciones de la CPU está compuesto por 35 instrucciones. En los 14 bits que forman las instrucciones máquina del PIC se incluyen el código de operación propiamente dicho y los operandos en caso de que estos existan. Todas las instrucciones son de un ciclo, excepto las de salto que duran dos ciclos. Las instrucciones pueden ser: Instrucciones que manejan registros. Instrucciones que manejan bits. Instrucciones de salto o “brinco”. Instrucciones que manejan operandos inmediatos. Instrucciones especiales y de control.

Transcript of Descripción de las instrucciones [Modo de...

1

1

DESCRIPCIÓN DE LAS INSTRUCCIONES

Todas las instrucciones del PIC cumplen las siguientes condiciones:

Las instrucciones son simples y rápidas. Todas tienen un tiempo de ejecución de un ciclo de instrucción (cuatro ciclos de reloj) a excepción de las de salto que tienen un tiempo de ejecución de dos ciclos de instrucción.

Las instrucciones son ortogonales. Casi todas las instrucciones tienen una longitud de 14 bits y los datos una longitud de 1 byte.

2

JUEGO DE INSTRUCCIONES

El juego de instrucciones de la CPU está compuesto por 35 instrucciones.

En los 14 bits que forman las instrucciones máquina del PIC se incluyen el código de operación propiamente dicho y los operandos en caso de que estos existan.

Todas las instrucciones son de un ciclo, excepto las de salto que duran dos ciclos.

Las instrucciones pueden ser: Instrucciones que manejan registros. Instrucciones que manejan bits. Instrucciones de salto o “brinco”. Instrucciones que manejan operandos inmediatos. Instrucciones especiales y de control.

2

3

JUEGO DE INSTRUCCIONES

La nomenclatura que utilizan estas instrucciones es la siguiente:

En las instrucciones orientadas a manejo registros, “f” representa un registro y “d” representa el destino. Si d es “0” el resultado de la operación se sitúa en el registro de trabajo W, mientras que si d es “1” el resultado se sitúa en el mismo registro “f”.

En las instrucciones orientadas a bits, “b” representa en binario la posición (0-7) del bit dentro del byte, “f” representa el byte o registro. (EL bit 0 es el bit de menor peso).

En las instrucciones con literales y de control, “k” representa la constante o literal que según los casos puede ser de 8 u 11 bits.

“x” corresponde con un valor indeterminado que puede ser 0 o 1.

4

JUEGO DE INSTRUCCIONES

El ensamblador, para expresar números en distintas bases numéricas, utiliza los siguientes formatos

Base RepresentaciónHexadecimal 0x0a ó h’0a’ ó 0a ó 0ah

Decimal d’10’

Binario b’00001010’

3

5

DESCRIPCIÓN DE LAS INSTRUCCIONES

ADDLW [ ADDLW k] 1

Añade el contenido del registro W al literal k y almacena el resultado en W.

Ejemplo:ADDLW 0x15

Si antes de la instrucción:W = 10h = 0001 0000 b

Al ejecutarse la instrucción:W = 10h + 15h = 25h

W = 0001 0000 b + 0001 0101 b = 0010 0101 b

C --- Se pone a 1 si se produce un acarreo desde el bit de mayor peso.DC- Se pone a 1 si se genera un acarreo del 3º al 4º bit.Z --- Se pone a 1 si el resultado de la operación es cero.

6

DESCRIPCIÓN DE LAS INSTRUCCIONES

ADDWF [ADDWF f,d] 2

Añade el contenido del registro W al contenido del registro “f”, y almacena el resultado en W si d = 0, y en el registro “f” si d = 1.

Ejemplo:

ADDWF FSR,0Si antes de la instrucción:

W = 17h y FSR = C2 como d = 0Al ejecutarse:

W = 17h + C2h = D9hFSR = C2h

C --- Se pone a 1 si se produce un acarreo desde el bit de mayor peso.DC- Se pone a 1 si se genera un acarreo del 3º al 4º bit.Z --- Se pone a 1 si el resultado de la operación es cero.

4

7

DESCRIPCIÓN DE LAS INSTRUCCIONES

ANDLW [ANDLW k] 3

Efectúa la operación AND lógica entre el contenido del registro W y el literal k, y almacena el resultado en W.

Ejemplo:

ANDLW 0x5FSi antes de la instrucción:

W = A3hAl ejecutarse la instrucción:

W = 0101 1111 b AND 1010 0011 b = 0000 0011 b = 03h

Puede verse afectado el bit Z

8

DESCRIPCIÓN DE LAS INSTRUCCIONES

ANDWF [ANDWF f,d] 4

Efectúa la operación AND lógica entre el contenido del registro W y el contenido del registro “f”, y almacena el resultado en W si d = 0, y en “f” si d=1.

Ejemplo:

ANDWF FSR,1Si antes de la instrucción:W = 17h = 0001 0111 b

FSR = C2h = 1100 0010 bAl ejecutarse:

W = 17h = 0001 0111 bFSR = 0001 0111 b AND 1100 0010 b = 0000 0010 b = 02h

Z - Se pone a 1 si el resultado de la operación es cero

5

9

DESCRIPCIÓN DE LAS INSTRUCCIONES

BCF [BCF f,d] 5

Pone a cero el bit número “b” del registro “f”.

Ejemplo:

BCF FLAG _REG,7

Si antes de la instrucción el registro:

FLAG_REG = C7h = 1100 0111 b

Al ejecutarse la instrucción, el registro queda con el valor:

FLAG_REG = 47h = 0100 1111 b

10

DESCRIPCIÓN DE LAS INSTRUCCIONES

BSF [BSF f,d] 6

Pone a 1 el bit “b” del registro “f”.

Ejemplo:

BSF FLAG _REG,7Si antes de la instrucción el registro tiene el valor:

FLAG_REG = 0Ah = 0000 1010 bAl ejecutarse la instrucción, el registro queda con el valor:

FLAG_REG = 8Ah = 1000 1010 b

6

11

DESCRIPCIÓN DE LAS INSTRUCCIONES

BTFSC [BTFSC f,b] 7

Si el bit “b” del registro “f” es 0, se salta la siguiente instrucción, no se ejecuta, y se continúa con la ejecución del programa. Cuando se produce este salto, son necesarios dos ciclos.

Ejemplo:

LEER BTFSC PORTA,2GOTO LEER BCF MEMO,7

Si el bit “2” del registro PORTA es “1”, entraremos en un bucle, repitiendo la instrucción BTFSC

constantemente.Si el bit “2” del registro PORTA es “0”, no

se ejecuta la instrucción GOTO (ir a) y se realizaráel borrado del bit “7” del registro MEMO,

continuando con el programa

12

DESCRIPCIÓN DE LAS INSTRUCCIONES

BTFSS [BTFSS f,b] 8

Si el bit “b” del registro “f” es 1, se salta la siguiente instrucción, no se ejecuta, y se continúa con la ejecución del programa. Cuando se produce este salto, son necesarios dos ciclos.

Ejemplo:LEER BTFSS PORTA,2

GOTO LEERBCF MEMO,7

Si el bit 2 del registro PORTA es 0, entramosen un bucle, repitiendo la instrucción BTFSS

continuamente.Si el bit 2 del registro PORTA es 1, no se

ejecuta la instrucción GOTO (ir a LEER) y serealiza el borrado del bit 7 del registro MEMO,

continuando con el programa.

7

13

DESCRIPCIÓN DE LAS INSTRUCCIONES

CALL [CALL k] 9

Salto a subrutina. La dirección de retorno se guarda en la pila (PC + 1). El literal k de 11 bits forma la dirección de salto y se carga en los bits B0 al B10 del PC. Los bits B11 y B12 se cargan con los bits B3 y B4 del registro PCLATH.

Ejemplo:

DIR CALL DIRECSi antes de la instrucción:

PC = dirección DIRAl ejecutarse:

PC = dirección DIRECTOS = dirección DIR + 1

14

DESCRIPCIÓN DE LAS INSTRUCCIONES

CLRF [CLRF f] 10

Pone a cero el contenido del registro “f” y pone a 1 el bit Z del registro STATUS.

Ejemplo:

CLRF MEMOAntes de la instrucción:

MEMO = 0x83 = b’1000 0011’Después de la instrucción:

MEMO = 0x00 = b’0000 0000’

8

15

DESCRIPCIÓN DE LAS INSTRUCCIONES

CLRW [CLRW] 11

Pone a cero el contenido del W y pone a uno el bit Z del registro STATUS.

EjemploCLRW

Antes de la instrucción:W = 0x6D

Después de la instrucción:W = 0x00

16

DESCRIPCIÓN DE LAS INSTRUCCIONES

CLRWDT [CLRWDT] 12

Pone a cero el contenido del WDT como su preescaler. Los bits TO y PD del registro STATUS se ponen a uno.

Ejemplo:

CLRWDTAntes de la instrucción:

WDT = 0x7FDespués de la instrucción:

WDT = 0x00, Preescaler = 0, TO = 1, PD = 1

9

17

DESCRIPCIÓN DE LAS INSTRUCCIONES

COMF [COMF f,d] 13

Realiza el complemento del contenido del registro “f” bit a bit. El resultado se almacena en el registro “f” si d = 1 y o en el registro W si d = 0, en este caso “f” no varía. Z = 1 si el resultado es cero.

EjemploCOMF CTDOR,1

Antes de la instrucción:W = 0xxx = b’xxxx xxxx’

CTDOR = 0x99 = b’1001 1001’Después de la instrucción:W = 0x66 = b’0110 0110’

CTDOR = 0x99 = b’1001 1001’

18

DESCRIPCIÓN DE LAS INSTRUCCIONES

DECF [DECF f,d] 14

Se decrementa en una unidad el contenido de “f”, y almacena el resultado en W si d = 0 o en el registro “f” si d = 1. Si el destino es W el contenido del registro “f” no varía. Si el resultado de la operación es cero el bit Z se pone a uno.

Ejemplo 1.-

DECF CTDOR,1Antes de la instrucción:

CTDOR = 0x99 = D’153’Z = 0

Después de la instrucción:CTDOR = 0x98 = D’152’

Z = 0

10

19

DESCRIPCIÓN DE LAS INSTRUCCIONES

Ejemplo 2.-

DECF CTDOR,0Antes de la instrucción:

W = 0xxx = D’xxx’CTDOT = 0x01 = D’001’

Z = 0Después de la instrucción:

W = 0x00 = D’000’CTDOR = 0x01 = D’ 001’

Z = 1

20

DESCRIPCIÓN DE LAS INSTRUCCIONES

DECFSZ [DECFSZ f,d] 15

Se decrementa en una unidad el contenido de “f” y almacena el resultado en W si d = 0 o en el registro “f” si d = 1. Si el destino es W el contenido del registro “f”no varía. Si el resultado de la operación es cero, se ignora la siguiente instrucción. Cuando se produce este salto, son necesarios dos ciclos.

Ejemplo:VER DECFSZ CTDOR,1

GOTO VERDECF MEMO,1

Se decrementa el valor de CTDOR, sustituyendo el valor anteriorpor el actual.

Si el valor del registro CTDOR no es cero, se ejecutará la instrucción GOTO (ir a VER), repitiendo este bucle hasta que el valor del CTDOR valga cero. En este momento se producirá el salto de la

instrucción GOTO, ejecutando la siguiente a esta.

11

21

DESCRIPCIÓN DE LAS INSTRUCCIONES

GOTO [GOTO k] 16

Salto incondicional. Normalmente se utiliza para llamar a la subrutina situada en la dirección a la que se carga el PC.

El literal k de 11 bits forma la dirección de salto y se carga en los bits B0-B10 del PC.

Los bits B11 y B12 del PC se cargan con los bits B3 y B4 del registro PCLATH.

Ejemplo:DIR GOTO DEREC

Si antes de la instrucción:PC = dirección DIR

Al ejecutarse:PC = dirección DIREC

22

DESCRIPCIÓN DE LAS INSTRUCCIONES

INCF [INCF f,d] 17

Se incrementa el contenido del registro “f” en una unidad y almacena el resultado en W si d = 0 y en el registro “f” si d = 1.

Si el destino es W, el contenido del registro “f” no varía.

Ejemplo 1.-

INCF CTDOR,0

Antes de la instrucción:W = 0x6C = D’108’

CTDOR = 0x19 = D’25’Z = 0

Después de la instrucción:W = 0x1A = D’26’

CTDOR = 0x19 = D’25Z = 0

12

23

DESCRIPCIÓN DE LAS INSTRUCCIONES

Ejemplo 2.-INCF CTDOR,1

Antes de la instrucción:W = 0x6C = D’108’

CTDOR = 0xFF = D’255’Z = 0

Después de la instrucción:W = 0x6C = D’108’

CTDOR = 0x00 = D’0’Z = 1

24

DESCRIPCIÓN DE LAS INSTRUCCIONES

INCFSZ [INCFSZ f,d] 18

Se incrementa el contenido del registro “f” en una unidad, y almacena el resultado en W si d = 0 y en “f” si d = 1.Si el destino es W, el contenido del registro “f” no varía.Si el resultado de la operación es cero, se ignora la siguiente instrucción. Cuando se produce este salto, son necesarios dos ciclos.

Ejemplo.-

VER INCFSZ CTDOR,1GOTO VERDECF MEMO,1

Se incrementa el valor de CTDOR, sustituyendo el valor anteriorpor el actual.

Si el valor del registro CTDOR no es cero, se ejecutará la instrucciónGOTO (ir a VER), repitiendo este bucle hasta que el valor de CTDOR se cero.

En este momento se producirá el salto de la instrucción GOTO, ejecutando la siguiente a esta.

13

25

DESCRIPCIÓN DE LAS INSTRUCCIONES

IORLW [IORLW k] 19

Realiza la operación lógica OR entre el contenido del registro W y el literal k. El resultado se almacena en W.

Ejemplo.-IORLW 0xB6

Antes de la instrucción:W = 0xC0 = b’1100 0000’L = 0xB6 = b’ 1011 0110’Después de la instrucción:W = 0xF6 = b’1111 0110’

Z = 1

26

DESCRIPCIÓN DE LAS INSTRUCCIONES

IORWF [IORWF f,d] 20

Realiza la operación lógica OR entre el contenido del registro W y el contenido del registro “f”, y almacena el resultado en W si d = 0 y en el registro “f” si d = 1.

Ejemplo.-

IORWF TEMP,0Antes de la instrucción:

W = 0x91 = b’1001 0001’TEMP = 0x13 = b’0001 0011’

Después de la instrucción:W = 0x93 = b’1001 0011’

TEMP = 0x13 = b’0001 0011’Z = 1

14

27

DESCRIPCIÓN DE LAS INSTRUCCIONES

MOVF [MOVF f,d] 21

Mueve el contenido del registro “f” al registro destino, dependiendo del valor de d.El registro destino será W si d = 0 y será “f” si d = 1.Esta instrucción permite comprobar el valor de “f”, ya que Z queda afectado.

Ejemplo.-

MOVF CONTA,0Antes de la instrucción:

W = 0x46 CONTA = 0x13Después de la instrucción:

W = 0x13 CONTA = 0x13

28

DESCRIPCIÓN DE LAS INSTRUCCIONES

MOVLW [MOVLW k] 22

Mueve el valor literal k al registro W.

Ejemplo:

MOVLW 0x44Antes de la instrucción:W = 0x3C L = 0x44

Después de la instrucción:W = 0x44

15

29

DESCRIPCIÓN DE LAS INSTRUCCIONES

MOVWF [MOVWF f] 23

Mueve el contenido del registro W al registro “f”.

Ejemplo:

MOVWF NUMAntes de la instrucción:

W = 0x3FNUM = 0x10

Después de la instrucción:W = 0x3F

NUM = 0x3F

30

DESCRIPCIÓN DE LAS INSTRUCCIONES

NOP [NOP] 24

No realiza ninguna operación. Se consume un ciclo de instrucción sin hacer nada.

Ejemplo------------------------NOP

-----------

16

31

DESCRIPCIÓN DE LAS INSTRUCCIONES

RETFIE [RETFIE] 25

Carga el PC con el valor que se encuentra en la parte alta de la pila, asegurando así la vuelta de la interrupción.

Pone a uno el bit GIE del registro INTCON, con el fin de autorizar de nuevo que se tengan en cuenta las interrupciones.

Ejemplo:

RETFIEDespués de la instrucción:PC = TOS Bit GIE = 1

32

DESCRIPCIÓN DE LAS INSTRUCCIONES

RETLW [RETLW k] 26

Se mueve el valor del literal k al W, después se carga en el PC el valor que se encuentra en la parte alta de la pila, efectuando así un retorno de subrutina.

Ejemplo:CALL TAB ; En W está el valor de offset de la tabla. ------------------

TAB ADDWF PC ; Se carga en PC el valor de offset, inicio; de la tabla.

RETLW k1 ; Primer valor de la tabla (offset + 1).RETLW k2 ; Siguiente valor (offset + 2).RETLW k3 ; (offset + 3).----------------RETLW kn ; Último valor de la tabla (offset + n).

Antes de la instrucción:W = 0x06 (valor de offset)Después de la instrucción:

W = valor de la tabla correspondiente a k7

17

33

DESCRIPCIÓN DE LAS INSTRUCCIONES

RETURN [RETURN] 27

Carga el PC con el valor que se encuentra en la parte alta de la pila, asegurando así la vuelta de la subrutina.

Ejemplo:RETURN

Después de la instrucción:PC = TOS

34

DESCRIPCIÓN DE LAS INSTRUCCIONES

RLF [RLF f,d] 28

Rotación de un bit hacia la izquierda del contenido del registro “f”, pasando por el bit de acarreo C, y almacena el resultado en W si d = 0 y en “f” si d=1

Registro “f”C B7 B6 B5 B4 B3 B2 B1 B0

Ejemplo:RLF TEMP,0

Antes de la instrucción:W = 0x2F = b’0011 1111’

TEMP = 0xC5 = b’1100 0101’C = 0

Después de la instrucción:W = 0x8A = b’ 1000 1010’

TEMP = 0xC5 = b’ 1100 0101’C = 1

18

35

DESCRIPCIÓN DE LAS INSTRUCCIONES

RRF [RRF f,d] 29

Rotación de un bit hacia la derecha del contenido del registro “f”, pasando por el bit de acarreo C, y almacena el resultado en W so d = 0 y en el registro “f” si d = 1.

Registro “f”

C B7 B6 B5 B4 B3 B2 B1 B0

Ejemplo:

RRF TEMP,0Antes de la instrucción:

W = 0x2F = b’0011 1111’TEMP = 0xC5 = b’1100 0101’

C = 0Después de la instrucción:W = 0x62 = b’0110 0010’

TEMP = 0xC5 = b’ 1100 0101’C = 1

36

DESCRIPCIÓN DE LAS INSTRUCCIONES

SLEEP [SLEEP] 30

Pone en modo SLEEP (bajo consumo) al microcontrolador.En este modo el oscilador principal deja de funcionar.Pone a uno el bit TO (Timer Out) y a cero el bit PD (Power Down).

Ejemplo:-----------SLEEP

------------------------

19

37

DESCRIPCIÓN DE LAS INSTRUCCIONES

SUBLW [SUBLW k] 31

Resta, por el método de complemento a dos, al literal k el contenido de W ( k –W), y almacena el resultado en W. El bit Z se pone a uno si el resultado de la operación es cero. El DC se pone a uno si se produce un acarreo del 3er bit al grupo de los cuatro bits de mayor peso. El bit C se pone a uno si se produce acarreo en el bit de mayor peso.

Ejemplo 1:SUBLW 0x07

Antes de la instrucción:W = 0x02 = D’2’

Después de la instrucción:W = 0x05 = D’5’

C = 1 ; El resultado es positivo.Z = 0 ; El resultado no es cero

38

DESCRIPCIÓN DE LAS INSTRUCCIONES

Ejemplo 2:SUBLW 0x02

Antes de la instrucción:W = 0x02 = D’2’

Después de la instrucción:W = 0x00 = D’0’

C = 1 ; El resultado es positivo.Z = 1 ; El resultado es cero.

Ejemplo 3:SUBLW 0x02

Antes de la instrucción:W = 0x03 = D’3’

Después de la instrucción:W = 0xFF = D’255’

C = 0 ; El resultado es negativo.Z = 0 ; El resultado no es cero

20

39

DESCRIPCIÓN DE LAS INSTRUCCIONES

SUBWF [SUBWF f,d] 32

Resta, por el método de complemento a dos, el contenido del registro “f” con el contenido del registro W, y almacena el resultado en W si d = 0 y en “f” si d = 1. El bit Z se pone a uno si el resultado de la operación es cero. El DC se pone a uno si se produce acarreo del 3er bit al grupo de los cuatro bits de mayor peso. El bit C se pone a uno si se produce un acarreo del bit de mayor peso.

Ejemplo 1:SUBWF VALOR,1

Antes de la instrucción:W = 0x02 = D’2’

VALOR = 0x07 = D’7’Después de la instrucción:

W = 0x02 = D’2’VALOR = 0x05 = D’5’

C = 1 ; Resultado positivoZ = 0 ; Resultado no es cero

40

DESCRIPCIÓN DE LAS INSTRUCCIONES

Ejemplo 2:SUBWF VALOR,1

Antes de la instrucción:W = 0x02 = D’2’

VALOR = 0x02 = D’2’Después de la instrucción:

W = 0x02 = D’2’VALOR = 0x00 = D’0’

C = 1 ; Resultado positivo.Z = 1 ; Resultado es cero.

Ejemplo 3:SUBWF VALOR,1

Antes de la instrucción:W = 0x02 = D’2’

VALOR = 0x01 = D’1’Después de la instrucción:

W = 0x02 = D’2’VALOR = 0xFF = D’255’

C = 0 ; El resultado es negativo.Z = 0 ; El resultado no es cero.

21

41

DESCRIPCIÓN DE LAS INSTRUCCIONES

SWAPF [SWAPF f,d] 33

Intercambio de los cuatro bits de mayor peso por los cuatro bits de menor peso del mismo registro. El registro destino será W si d = 0 i será “f” si d=1.

Ejemplo:

SWAPF REG,0Antes de la instrucción:

REG = 0x69 = b’0110 1001’Después de la instrucción:W = 0x96 = b’1001 0110’

REG = 0x69 = b’0110 1001’

42

DESCRIPCIÓN DE LAS INSTRUCCIONES

XORLW [XORLW k] 34

Realiza la operación lógica OR – EXCLUSIVA bit a bit, entre el contenido del registro W y el literal k, y almacena el resultado en W.El bit Z se pone a uno si el resultado es cero.

Ejemplo:

XORLW 0x84Antes de la instrucción:

W = 0xBC = b’1011 1100’L = 0x84 = b’1000 0100’Después de la instrucción:W = 0x38 = b’0011 1000’

22

43

DESCRIPCIÓN DE LAS INSTRUCCIONES

XORWF [XORWF f,d] 35

Realiza la operación lógica OR – EXCLUSIVA bit a bit entre el contenido del registro W y el contenido del registro “f”, y almacena el resultado en W si d=0, o en el registro “f” si d = 1.El bit Z se pone a uno si el resultado de la operación es cero.

Ejemplo:XORWF REG,1

Antes de la instrucción:W = 0xB5 = b’1011 0101’

REG = 0xAF = b’1010 1111’Después de la instrucción:

W = 0xB5 = b’1011 0101’REG = 0x1A = b’0001 1010’