Juego de instrucciones: PIC 16F87x

56
El juego de instrucciones : El juego de instrucciones : PIC 16F87x PIC 16F87x

Transcript of Juego de instrucciones: PIC 16F87x

Page 1: Juego de instrucciones: PIC 16F87x

El juego de instrucciones : El juego de instrucciones :

PIC 16F87xPIC 16F87x

Page 2: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 2

El El SetSet de Instrucciones de Instrucciones IntroducciIntroduccióón n

•• Los PIC 16F87x poseen un juego de 35 Los PIC 16F87x poseen un juego de 35 instrucciones de tipo RISC, siendo todas ellas de 14 instrucciones de tipo RISC, siendo todas ellas de 14 bits. El tamabits. El tamañño de los datos es de 1 o de los datos es de 1 bytebyte. .

•• Las instrucciones de los PIC 16F87x son Las instrucciones de los PIC 16F87x son exactamente iguales a las del PIC 16f84exactamente iguales a las del PIC 16f84

•• En los 14 bits de cada instrucciEn los 14 bits de cada instruccióón se incluye el n se incluye el ccóódigo de operacidigo de operacióón y los n y los operandosoperandos si estos si estos existen.existen.

•• Todas las instrucciones tardan en ejecutarse 1 ciclo Todas las instrucciones tardan en ejecutarse 1 ciclo (4 golpes de reloj) excepto las de salto que tardan (4 golpes de reloj) excepto las de salto que tardan 2 ciclos.2 ciclos.

Page 3: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 3

•• Las instrucciones de los PIC son altamente Las instrucciones de los PIC son altamente ortogonales. Esto quiere decir que casi todas las ortogonales. Esto quiere decir que casi todas las instrucciones pueden usar cualquier registro como instrucciones pueden usar cualquier registro como como operando y como destino.como operando y como destino.

•• El nEl núúmero total de instrucciones del mero total de instrucciones del microcontrolador es de 35. Clasificmicrocontrolador es de 35. Clasificáándose en los ndose en los siguiente tipos:siguiente tipos:

Instrucciones orientadas a Instrucciones orientadas a bytesbytes..

Instrucciones orientadas a bits.Instrucciones orientadas a bits.

Instrucciones de control y con literales.Instrucciones de control y con literales.

Page 4: Juego de instrucciones: PIC 16F87x

4

El El SetSet de Instruccionesde InstruccionesNomenclatura en las InstruccionesNomenclatura en las Instrucciones

•• En las instrucciones orientadas a En las instrucciones orientadas a bytesbytes o registros o registros ffrepresenta un registro y representa un registro y dd representa el destino. Si representa el destino. Si dd eses00, , el resultado de la operaciel resultado de la operacióón sen se almacena en el almacena en el registro de trabajoregistro de trabajo WW, mientras que si, mientras que si dd es 1es 1,, el el resultado se guarda en el registroresultado se guarda en el registro ff..

•• En las instrucciones orientadas a bits, En las instrucciones orientadas a bits, bb representa en representa en binario la posicibinario la posicióón (0n (0--7) del 7) del bitbit dentro del dentro del bytebyte, , ffrepresenta el representa el bytebyte o registro. El o registro. El bitbit 0 siempre es el de 0 siempre es el de menor peso.menor peso.

•• Para las instrucciones de control y con literales Para las instrucciones de control y con literales kkrepresenta una constante o un literal, que segrepresenta una constante o un literal, que segúún los n los casos puede ser de 8 casos puede ser de 8 óó 11 bits.11 bits.

Page 5: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 5

El El SetSet de Instruccionesde InstruccionesFormato de las instruccionesFormato de las instrucciones

Instrucciones orientadas a bytes o registros (18)

Donde:

Opcode es el código de operación.

( ) significa contenidos.

Page 6: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 6

Instrucciones orientadas a bits (4).

Page 7: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 7

Instrucciones de control y con literales (13).

Page 8: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 8

Instrucciones Orientadas a Instrucciones Orientadas a BytesBytes o Registroso Registros

Page 9: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 9

Instrucciones Orientadas a Bits.Instrucciones Orientadas a Bits.Instrucciones Con Literales Y De Instrucciones Con Literales Y De Control. Control.

Page 10: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 10

ADDLW (Suma W con un literal)ADDLW (Suma W con un literal)

Page 11: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 11

ADDWF (Suma W con un registro)ADDWF (Suma W con un registro)

Page 12: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 12

ANDLW (AND de W con un literal)ANDLW (AND de W con un literal)

Page 13: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 13

ANDWF (AND de W con un registro)ANDWF (AND de W con un registro)

Page 14: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 14

BCF (pon a 0 un bit del registro f)BCF (pon a 0 un bit del registro f)

Page 15: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 15

BSF (pon a 1 un bit del registro f)BSF (pon a 1 un bit del registro f)

Page 16: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 16

BTFSC (Testea un Bit y Salta si Cero) (1)BTFSC (Testea un Bit y Salta si Cero) (1)

Si se produce el salto (bit=0) la instrucciSi se produce el salto (bit=0) la instruccióón n tarda 2 ciclos en ejecutarse, por el contrario tarda 2 ciclos en ejecutarse, por el contrario si no se produce salto solo tarda 1 ciclo en si no se produce salto solo tarda 1 ciclo en ejecutarse.ejecutarse.

Page 17: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 17

BTFSC (Testea un Bit y Salta si Cero) (2)BTFSC (Testea un Bit y Salta si Cero) (2)

Page 18: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 18

BTFSS (Testea un Bit y Salta si BTFSS (Testea un Bit y Salta si SetSet) (1)) (1)

Si se produce el salto (bit=1) la instrucciSi se produce el salto (bit=1) la instruccióón tarda 2 ciclos en n tarda 2 ciclos en ejecutarse, por el contrario si no se produce salto solo tarda 1ejecutarse, por el contrario si no se produce salto solo tarda 1ciclo en ejecutarse.ciclo en ejecutarse.

Page 19: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 19

BTFSS (Testea un Bit y Salta si BTFSS (Testea un Bit y Salta si SetSet) (2)) (2)

Page 20: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 20

CALL (Llamada a subrutina) (1)CALL (Llamada a subrutina) (1)

•• Tos es la cima de la pilaTos es la cima de la pila

Page 21: Juego de instrucciones: PIC 16F87x

21

CALL (Llamada a subrutina) (2)CALL (Llamada a subrutina) (2)

•• El cEl cáálculo de la direccilculo de la direccióón efectiva varn efectiva varíía sega segúún la n la familia de PIC.familia de PIC.

Page 22: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 22

CLRF (Pon a cero el registro f) (1)CLRF (Pon a cero el registro f) (1)

Page 23: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 23

CLRW (Pon a cero el registro W) CLRW (Pon a cero el registro W)

Page 24: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 24

CLRWDT (Pon a cero el registro WDT) (1)CLRWDT (Pon a cero el registro WDT) (1)

Page 25: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 25

CLRWDT (Pon a cero el registro WDT) (2)CLRWDT (Pon a cero el registro WDT) (2)

•• T0 y PD se ponen a 1 tambiT0 y PD se ponen a 1 tambiéén cuando se ejecuta n cuando se ejecuta la instruccila instruccióón SLEEPn SLEEP

Page 26: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 26

COMF (COMF (COMplementaCOMplementa F) F)

Page 27: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 27

DECF (DECF (DECrementaDECrementa F) F)

•• En el caso de que En el caso de que d=0d=0, , elel resultado se resultado se almacena en almacena en WW,y ,y ffno modifica su valor.no modifica su valor.

•• RecuRecuéérdese que al rdese que al decrementardecrementar 00h, se 00h, se obtiene 0FFH.obtiene 0FFH.

Page 28: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 28

DECFSZ (DECFSZ (DECrementaDECrementa F y Salta si F y Salta si ZeroZero))

•• En el caso de que En el caso de que d=0d=0, , elel resultado resultado se almacena en se almacena en WW,y ,y ff no modifica no modifica su valor.su valor.

•• Si el resultado es Si el resultado es cero se ignora la cero se ignora la siguiente siguiente instrucciinstruccióón ( se n ( se salta), y la salta), y la InstrucciInstruccióón tarda n tarda en ejecutarse 2 en ejecutarse 2 ciclos.ciclos.

Page 29: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 29

DECFSZ (DECFSZ (DECrementaDECrementa F y Salta si F y Salta si ZeroZero))•• En el caso de que En el caso de que

d=1d=1, , elel resultado se resultado se almacena en almacena en ffmodificmodificáándose su ndose su valor.valor.

•• Si el resultado es Si el resultado es distinto de cero se distinto de cero se ejecuta la siguiente ejecuta la siguiente instrucciinstruccióón ( no se n ( no se salta), y la salta), y la InstrucciInstruccióón tarda n tarda en ejecutarse 1 en ejecutarse 1 ciclo.ciclo.

Page 30: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 30

GOTO (Salto incondicional a la direcciGOTO (Salto incondicional a la direccióón )n )

•• GotoGoto es una es una instrucciinstruccióón que n que tarda en tarda en ejecutarse dos ejecutarse dos ciclosciclos

Page 31: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 31

INCF (INCF (INCrementaINCrementa F )F )

•• En el caso de que En el caso de que d=0d=0, , el resultado se almacena el resultado se almacena en en WW,y ,y ff no modifica su no modifica su valor.valor.

•• En el caso de que En el caso de que d=1d=1, , el resultado se almacena el resultado se almacena en en ff modificmodificáándose su ndose su valorvalor..

•• RecuRecuéérdese que al rdese que al incrementar 0FFh, se incrementar 0FFh, se obtiene 00H.obtiene 00H.

Page 32: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 32

INCFSZ (INCFSZ (INCrementaINCrementa F y Salta si F y Salta si ZeroZero) (1)) (1)

•• En el caso de que En el caso de que d=0d=0, el resultado se , el resultado se almacena en almacena en WW,y ,y ff no no modifica su valor.modifica su valor.

•• En el caso de que En el caso de que d=1d=1, el resultado se , el resultado se almacena en almacena en ffmodificmodificáándose su ndose su valorvalor..

•• RecuRecuéérdese que al rdese que al incrementar 0FFh, se incrementar 0FFh, se obtiene 00H.obtiene 00H.

Page 33: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 33

INCFSZ (INCFSZ (INCrementaINCrementa F y Salta si F y Salta si ZeroZero)(2))(2)

Si el resultado es cero se Si el resultado es cero se ignora la siguiente ignora la siguiente instrucciinstruccióón ( se salta), y n ( se salta), y la Instruccila Instruccióón tarda en n tarda en ejecutarse 2 ciclos.ejecutarse 2 ciclos.

Si el resultado es distinto Si el resultado es distinto de cero se ejecuta la de cero se ejecuta la siguiente instruccisiguiente instruccióón ( no n ( no se salta), y la Instruccise salta), y la Instruccióón n tarda en ejecutarse 1 tarda en ejecutarse 1 ciclo.ciclo.

Page 34: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 34

IORLW (OR LIORLW (OR Lóógica de W con un Literal)gica de W con un Literal)

Page 35: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 35

IORWF (OR LIORWF (OR Lóógica de W con un registro F)gica de W con un registro F)

Page 36: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 36

MOVLW (MOVLW (MOVerMOVer un Literal a W )un Literal a W )

Page 37: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 37

MOVF (MOVF (MOVerMOVer un registro un registro FsrFsr))Al ejecutar la instrucciAl ejecutar la instruccióónn

MOVF FSR, 1MOVF FSR, 1

No realizamos ningNo realizamos ningúún n cambio ya que el cambio ya que el registro se queda como registro se queda como estaba, pero sin estaba, pero sin embargo nos sirve para embargo nos sirve para chequear su contenido chequear su contenido ya que el ya que el FLAG Z FLAG Z se se actualiza.actualiza.

Page 38: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 38

NOP (No NOP (No OPeraciOPeracióónn))

Esta instrucción no hace nada, simplemente consume un ciclo de instrucción.

Page 39: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 39

RETFIE (Retorno de interrupciRETFIE (Retorno de interrupcióón)n)Carga el PC con el valor Carga el PC con el valor que se encuentra en la que se encuentra en la cima de la pila (TOS).cima de la pila (TOS).

Pone a 1 el bit Pone a 1 el bit GIE, GIE, con con el fin de autorizar de el fin de autorizar de nuevo las nuevo las interrupciones.interrupciones.

Esta es una instrucciEsta es una instruccióón n que tarda en ejecutarse que tarda en ejecutarse 2 ciclos de instrucci2 ciclos de instruccióónn

Page 40: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 40

RETLW (Retorno y carga un literal en W) RETLW (Retorno y carga un literal en W)

Carga el registro W Carga el registro W con el literal k, con el literal k, despudespuéés Carga el PC s Carga el PC con el valor que se con el valor que se encuentra en la cima encuentra en la cima de la pila (TOS), de la pila (TOS), efectuando un retorno efectuando un retorno de subrutina.de subrutina.

Page 41: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 41

RETLW (Retorno y carga un literal en W) RETLW (Retorno y carga un literal en W)

Es una instrucciEs una instruccióón n que tarda en que tarda en ejecutarse 2 ciclos.ejecutarse 2 ciclos.

Page 42: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 42

RETURN (Retorno de subrutina) RETURN (Retorno de subrutina)

Carga el PC con el Carga el PC con el valor que se valor que se encuentra en la cima encuentra en la cima de la pilade la pila

Es una instrucciEs una instruccióón n que tarda en que tarda en ejecutarse 2 ciclos.ejecutarse 2 ciclos.

Page 43: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 43

RLF (Rota un bit a la izquierda el Registro RLF (Rota un bit a la izquierda el Registro F, pasando por el bit de F, pasando por el bit de CarryCarry) (1)) (1)

Si d=0 el resultado Si d=0 el resultado se almacena en W, se almacena en W, no modificno modificáándose el ndose el valor de f.valor de f.

Si d=1 el resultado Si d=1 el resultado se almacena en f.se almacena en f.

El El úúnico nico flagflag que se que se modifica es el modifica es el CarryCarry..

Page 44: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 44

RLF (Rota un bit a la izquierda el Registro RLF (Rota un bit a la izquierda el Registro F, pasando por el bit de F, pasando por el bit de CarryCarry) (2) ) (2)

Page 45: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 45

RRF (Rota un bit a la derecha el Registro RRF (Rota un bit a la derecha el Registro F, pasando por el bit de F, pasando por el bit de CarryCarry) (1) ) (1)

Page 46: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 46

RRF (Rota un bit a la derecha el Registro RRF (Rota un bit a la derecha el Registro F, pasando por el bit de F, pasando por el bit de CarryCarry) (2) ) (2)

Page 47: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 47

SLEEP (Modo de bajo consumo)SLEEP (Modo de bajo consumo)Las maneras de salir Las maneras de salir del modo de bajo del modo de bajo consumo son:consumo son:

Por un RESET, Por un RESET, activando activando MCLRMCLR

Por desbordamiento Por desbordamiento de de WDTWDT si si ééste ste quedquedóó operativo al operativo al entrar en el modo entrar en el modo reposo.reposo.

ActivaciActivacióón de una n de una interrupciinterrupcióón que no n que no sea sea TMR0TMR0, ya que , ya que esta se desactiva al esta se desactiva al entrar en reposo.entrar en reposo.

Page 48: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 48

SUBLW (Resta al literal k el contenido de W)SUBLW (Resta al literal k el contenido de W)

Page 49: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 49

SUBLW (Resta al literal k el contenido de W)

• La resta se efectúa en complemento a dos

• Z se pone a 1 si el resultado de la opración es 0

• C se pone a 0 si se genera un debe en el bit de mayor peso

• DC se pone a 1 si genera un acarreo del bit 3 al bit 4.

Page 50: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 50

SUBWF (Resta al R. F el contenido de W)

Page 51: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 51

SUBWF (Resta al R. F el contenido de W)

• La resta se efectúa en complemento a dos.

• Si d=0 el resultado queda en W, y si d=1, el resultado se guarda en f.

• Los flag afectados como en la instrucción anterior son Z, C y DC

Page 52: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 52

SWAPF (Intercambia nibbles en F)

• Los 4 bits de menor peso del registro f se intercambian con los 4 de mayor peso

• Si d=0 el resultado queda en W

• Si d=1, el resultado se guarda en f.

Page 53: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 53

XORLW (OXORLW (O--exclusiva entre W y un literal)exclusiva entre W y un literal)

Page 54: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 54

XORWF (OXORWF (O--exclusiva entre W y f)exclusiva entre W y f)

Page 55: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 55

OPTION (Inicializa el registro OPTION (Inicializa el registro optionoption))

Page 56: Juego de instrucciones: PIC 16F87x

CCFF DPE MÓDULO DE PROYECTOS 56

TRIS(Inicializa un registro TRIS)