1compl

2
f: cualquier registro del microcontrolador W: registro de trabajo b: posicion de un bit en el registro 'f' d: destino, puede ser 'f' (d=1) o 'W' (d=0) etiqueta: grupo de caracteres que marcan el inicio de una parte del programa Instrucciones orientadas a registros ADDWF: Suma W y f Suma el contenido del registro 'W' y el registro 'f'. Si "d" es 0, el resultado se almacena en el registro W. Si 'd' es 1 el resutado se almacena en el registro 'f'. Sintaxis: [etiqueta] ADDWF f,d Operación: (W) + (f) --> (destino) Flags afectados: C, DC, Z Ejemplo: ADDWF REG,1 Antes de la instrucción: W=0x03, REG=0x04 Después de la instrucción: W=0x03, REG=0x07 ANDWF: W AND f Realiza la operación lógica AND entre el registro W y el registro "f". Si "d" es 0 el resultado se almacena en el registro W. Si "d" es 1, el resultado se almacena en el registro "f". Sintaxis: [etiqueta] ANDWF f,d Operación: (W) AND (f) --> (destino) Flags afectados: Z Ejemplo: ANDWF REG,1 Antes de la instrucción: W=0x17, REG= 0xC2 Después de la instrucción: W=0x17, REG= 0x02 CLRF: Borra un registro Borra el contenido del registro 'f' y se activa el flag Z. Sintaxis: [etiqueta] CLRF f Flags afectados: Z Ejemplo: CLRF REG Antes de la instrucción: REG=0x54 Después de la instrucción: REG=0x00, Z=1 CLRW: Borra el registro de trabajo W Borra el contenido del registro 'W' y se activa el flag Z. Esta instruccion no tiene operandos. Sintaxis: [etiqueta] CLRW Flags afectados: Z Ejemplo: CLRW Antes de la instrucción: W=0x54 Después de la instrucción: W=0x00, Z=1 COMF: Complementa el registro f El contenido del registro 'f' se complementa. Si d=0 el resultado se almacena en el registro W. Si d=1 el resultado se almacena en el registro 'f'. Sintaxis: [etiqueta] COMF f,d Flags afectados: Z Ejemplo: COMF REG,0 Antes de la instruccion: REG=0x13 Después de la instrucción: REG=0x13, W=0xEC DECF: Decrementa f en 1 De decrementa en uno el contenido del registro 'f'. Si d=0, el resultado se almacena en W. Si d=1, el resultado se almacena en 'f'. Sintaxis: [etiqueta] DECF f,d Flags afectados: Z Ejemplo: DEC CONT, 1 Antes de la instrucción: CONT=0x01, Z=0 Después de la instrucción: CONT=0x00, Z=1 DECFSZ: Decrementa en 1 y salta si el resultado es 0 El contenido del registro 'f' se decrementa. Si 'd=0, el resultado se coloca en el registro W. Si d=1, el resultado se coloca en el registro 'f'. Si el resultado es 0, se salta la siguiente instrucción y se continúa con la ejecución. Sintaxis: [etiqueta] DECFSZ f,d Flags afectados: Ninguno INCF: Incrementa el registro f Incrementa en uno el contenido del registro 'f'. Si d=0, el resultado se almacena en W. Si d=1, el resultado se almacena en 'f'. Sintaxis: [label] INCF f,d Flags afectados: Z Ejemplo: INCF CONT,1 Antes de la instrucción: CONT=0xFF, Z=0 Después de la instrucción: CONT=0x00, Z=1 INCFSZ: Incrementa en 1 y salta si el resultado es 0 El contenido del registro 'f' se incrementa. Si d=0, el resultado se coloca en el registro W. Si d=1, el resultado se coloca en el registro 'f'. Si el resultado es 0, se salta la siguiente instrucción y se continúa con la ejecución. Sintaxis: [etiqueta] DECFSZ f,d Flags afectados: Ninguno IORWF: W OR f Realiza la operación lógica OR entre el registro W y el registro 'f'. Si d=0 el resultado se almacena en el registro W. Si d=1, el resultado se almacen en el registro 'f'. Sintaxis: [etiqueta] IORWF f,d Flags afectados: Z Ejemplo: IORWF REG,0 Antes de la instrucción: REG=0x13, W=0x91 Después de la instrucción: REG=0x13, W=0x93 MOVF: Mover el registro f El contenido del registro 'f' se mueve al destino 'd'. Si d=0, el destino es el registro W. Si d=1, el destino es el propio registro 'f'. Sintaxis: [etiqueta] MOVF f,d Flags afectados: Z Ejemplo: MOVF REG,0 Después de la instrucción: W=REG RLF: Rota el registro f a la izquierda El contenido del registro 'f' se rota una posición a la izquierda. El bit de más peso pasa al carry y el carry se introduce por el bit de menos peso de 'f'. Si d=0, el resultado se coloca en el registro W. Si d=1, el resultado queda en el registro 'f'. Sintaxis: [etiqueta] RLF f,d Flags afectados: C Ejemplo: RLF REG,1 Antes de la instrucción: REG=b'11100110', C=0 Después de la instrucción: REG=b'11001100', C=1 RRF: Rota el registro f a la derecha El contenido del registro 'f' se rota una posición a la derecha. El bit de menos peso pasa al carry y el carry se introduce por el bit de más peso de 'f'. Si d=0, el resultado se coloca en el registro W. Si d=1, el resultado queda en el registro 'f'. Sintaxis: [etiqueta] RLF f,d Flags afectados: C Ejemplo: RLF REG,1 Antes de la instrucción: REG=b'11100110', C=0 Después de la instrucción: REG=b'01110011', C=0 SUBWF: Resta f - W Resta el contenido del registro 'f' menos el contenido del registro W. Si d=0, el resultado se almacena en el registro W. Si d=1, el resultado se almacena en el registro 'f'. Sintaxis: [etiqueta] SUBWF f,d Flags afectados: C, DC, Z Ejemplo: SUBWF REG,1 Antes de la instrucción: REG=0x01, W=0x02 Después de la instrucción: REG=0xFF, W=0x02 SWAPF: Intercambio de f El nibble bajo del registro 'f' se intercambia con el nibble alto del mismo. Si d=0, el resultado se coloca en el registro W. Si d=1, el resultado queda en el registro 'f'. Sintaxis: [etiqueta] SWAPF f,d Flags afectados: Ninguno Ejemplo: SWAPF REG,1 Antes de la instrucción: REG=0x54 Después de la instrucción: REG=0x45 XORWF: W XOR f Realiza la función lógica OR exclusiva entre el contenido del registro W y el registro 'f'. Si d=0, el resultado se almacena en el registro W. Si d=1 el resultado se almacena en el registro 'f'. Sintaxis: [etiqueta] XORWF f,d Flags afectados: Z Ejemplo: XORWF REG,1 Antes de la instrucción: REG=0xAF, W=0xB5 Después de la instrucción: REG=0x1A, W=0xB5 NOP: No operacion No realiza ninguna operacion, solo consume un ciclo de reloj Sintaxis: [etiqueta] NOP Instrucciones orientadas a bits BCF: Borra un bit Borra el bit 'b'del registro 'f' Sintaxis: [etiqueta] BCF f,b Ejemplo: BCF REG,0 Antes de la instrucción: REG=b'01101101' Después de la instrucción: REG=b'01101100' BSF: Activa un bit Activa el bit 'b' del registro 'f' Sintaxis: [etiqueta] BSF f,b Ejemplo: BSF REG,2 Antes de la instrucción: REG=b'01001001' Después de la instrucción: REG=b'01001011' BTFSC: Checa un bit y salta si es 0 Si el bit "b" del registro "f" es 0, se salta una instrucción y se continúa con la ejecución.

description

16f86

Transcript of 1compl

  • f: cualquier registro del microcontroladorW: registro de trabajob: posicion de un bit en el registro 'f'd: destino, puede ser 'f' (d=1) o 'W' (d=0)etiqueta: grupo de caracteres que marcanel inicio de una parte del programa

    Instrucciones orientadas a registros

    ADDWF: Suma W y fSuma el contenido del registro 'W' y elregistro 'f'. Si "d" es 0, el resultado sealmacena en el registro W. Si 'd' es 1 elresutado se almacena en el registro 'f'.Sintaxis: [etiqueta] ADDWF f,dOperacin: (W) + (f) --> (destino)Flags afectados: C, DC, ZEjemplo: ADDWF REG,1Antes de la instruccin: W=0x03,REG=0x04Despus de la instruccin: W=0x03,REG=0x07

    ANDWF: W AND fRealiza la operacin lgica AND entre elregistro W y el registro "f". Si "d" es 0 elresultado se almacena en el registro W. Si"d" es 1, el resultado se almacena en elregistro "f".Sintaxis: [etiqueta] ANDWF f,dOperacin: (W) AND (f) --> (destino)Flags afectados: ZEjemplo: ANDWF REG,1Antes de la instruccin: W=0x17, REG=0xC2Despus de la instruccin: W=0x17,REG= 0x02

    CLRF: Borra un registroBorra el contenido del registro 'f' y seactiva el flag Z.Sintaxis: [etiqueta] CLRF fFlags afectados: ZEjemplo: CLRF REGAntes de la instruccin: REG=0x54Despus de la instruccin: REG=0x00,Z=1

    CLRW: Borra el registro de trabajo WBorra el contenido del registro 'W' y seactiva el flag Z. Esta instruccion no tieneoperandos.Sintaxis: [etiqueta] CLRWFlags afectados: ZEjemplo: CLRWAntes de la instruccin: W=0x54Despus de la instruccin: W=0x00, Z=1

    COMF: Complementa el registro fEl contenido del registro 'f' secomplementa. Si d=0 el resultado sealmacena en el registro W. Si d=1 elresultado se almacena en el registro 'f'.Sintaxis: [etiqueta] COMF f,dFlags afectados: ZEjemplo: COMF REG,0Antes de la instruccion: REG=0x13Despus de la instruccin: REG=0x13,W=0xEC

    DECF: Decrementa f en 1De decrementa en uno el contenido delregistro 'f'. Si d=0, el resultado sealmacena en W. Si d=1, el resultado sealmacena en 'f'.Sintaxis: [etiqueta] DECF f,dFlags afectados: ZEjemplo: DEC CONT, 1Antes de la instruccin: CONT=0x01, Z=0

    Despus de la instruccin: CONT=0x00,Z=1

    DECFSZ: Decrementa en 1 y salta si elresultado es 0El contenido del registro 'f' se decrementa.Si 'd=0, el resultado se coloca en elregistro W. Si d=1, el resultado se colocaen el registro 'f'. Si el resultado es 0, sesalta la siguiente instruccin y se continacon la ejecucin.Sintaxis: [etiqueta] DECFSZ f,dFlags afectados: Ninguno

    INCF: Incrementa el registro fIncrementa en uno el contenido delregistro 'f'. Si d=0, el resultado sealmacena en W. Si d=1, el resultado sealmacena en 'f'.Sintaxis: [label] INCF f,dFlags afectados: ZEjemplo: INCF CONT,1Antes de la instruccin: CONT=0xFF, Z=0Despus de la instruccin: CONT=0x00,Z=1

    INCFSZ: Incrementa en 1 y salta si elresultado es 0El contenido del registro 'f' se incrementa.Si d=0, el resultado se coloca en elregistro W. Si d=1, el resultado se colocaen el registro 'f'. Si el resultado es 0, sesalta la siguiente instruccin y se continacon la ejecucin.Sintaxis: [etiqueta] DECFSZ f,dFlags afectados: Ninguno

    IORWF: W OR fRealiza la operacin lgica OR entre elregistro W y el registro 'f'. Si d=0 elresultado se almacena en el registro W. Sid=1, el resultado se almacen en el registro'f'.Sintaxis: [etiqueta] IORWF f,dFlags afectados: ZEjemplo: IORWF REG,0Antes de la instruccin: REG=0x13,W=0x91Despus de la instruccin: REG=0x13,W=0x93

    MOVF: Mover el registro fEl contenido del registro 'f' se mueve aldestino 'd'. Si d=0, el destino es el registroW. Si d=1, el destino es el propio registro'f'.Sintaxis: [etiqueta] MOVF f,dFlags afectados: ZEjemplo: MOVF REG,0Despus de la instruccin: W=REG

    RLF: Rota el registro f a la izquierdaEl contenido del registro 'f' se rota unaposicin a la izquierda. El bit de ms pesopasa al carry y el carry se introduce por elbit de menos peso de 'f'. Si d=0, elresultado se coloca en el registro W. Sid=1, el resultado queda en el registro 'f'.Sintaxis: [etiqueta] RLF f,dFlags afectados: CEjemplo: RLF REG,1Antes de la instruccin:REG=b'11100110', C=0Despus de la instruccin:REG=b'11001100', C=1

    RRF: Rota el registro f a la derechaEl contenido del registro 'f' se rota unaposicin a la derecha. El bit de menos

    peso pasa al carry y el carry se introducepor el bit de ms peso de 'f'. Si d=0, elresultado se coloca en el registro W. Sid=1, el resultado queda en el registro 'f'.Sintaxis: [etiqueta] RLF f,dFlags afectados: CEjemplo: RLF REG,1Antes de la instruccin:REG=b'11100110', C=0Despus de la instruccin:REG=b'01110011', C=0

    SUBWF: Resta f - WResta el contenido del registro 'f' menos elcontenido del registro W. Si d=0, elresultado se almacena en el registro W. Sid=1, el resultado se almacena en elregistro 'f'.Sintaxis: [etiqueta] SUBWF f,dFlags afectados: C, DC, ZEjemplo: SUBWF REG,1Antes de la instruccin: REG=0x01,W=0x02Despus de la instruccin: REG=0xFF,W=0x02

    SWAPF: Intercambio de fEl nibble bajo del registro 'f' seintercambia con el nibble alto del mismo.Si d=0, el resultado se coloca en elregistro W. Si d=1, el resultado queda enel registro 'f'.Sintaxis: [etiqueta] SWAPF f,dFlags afectados: NingunoEjemplo: SWAPF REG,1Antes de la instruccin: REG=0x54Despus de la instruccin: REG=0x45

    XORWF: W XOR fRealiza la funcin lgica OR exclusivaentre el contenido del registro W y elregistro 'f'. Si d=0, el resultado sealmacena en el registro W. Si d=1 elresultado se almacena en el registro 'f'.Sintaxis: [etiqueta] XORWF f,dFlags afectados: ZEjemplo: XORWF REG,1Antes de la instruccin: REG=0xAF,W=0xB5Despus de la instruccin: REG=0x1A,W=0xB5

    NOP: No operacionNo realiza ninguna operacion, soloconsume un ciclo de relojSintaxis: [etiqueta] NOP

    Instrucciones orientadas a bits

    BCF: Borra un bitBorra el bit 'b'del registro 'f'Sintaxis: [etiqueta] BCF f,bEjemplo: BCF REG,0Antes de la instruccin: REG=b'01101101'Despus de la instruccin:REG=b'01101100'

    BSF: Activa un bitActiva el bit 'b' del registro 'f'Sintaxis: [etiqueta] BSF f,bEjemplo: BSF REG,2Antes de la instruccin: REG=b'01001001'Despus de la instruccin:REG=b'01001011'

    BTFSC: Checa un bit y salta si es 0Si el bit "b" del registro "f" es 0, se saltauna instruccin y se contina con laejecucin.

  • Sintaxis: [etiqueta] BTFSC f,b

    BTFSS: Checa un bit y salta si es 1Si el bit "b" del registro "f" es 1, se saltauna instruccin y se contina con laejecucin.Sintaxis: [etiqueta] BTFSS f,b

    Instrucciones orientadas a constantesy de control

    ANDLW: W AND literalRealiza la operacin lgica AND entre elregistro W y la constante "k". El resultadose almacena en el registro W.Sintaxis: [label] ANDWL kFlags afectados: ZEjemplo: ANDLW 0x5FAntes de la instruccin: W=0xA3Despus de la instruccin: W=0x03

    CALL: Llamada a subrutinaLlamada y salto a subrutina. La direccinde retorno se guarda en el stack. Laconstante "k" de 8 bits forma la direccinde salto y se carga en los bits del PC. Losbits del PC se cargan con los bits delregistro "STATUS". PC se pone a 0.Sintaxis: [etiqueta] CALL kEjemplo: INICIO CALL DESTINOAntes de la instruccin: PC=INICIODespus de la instruccin: PC=DESTINO

    CLRWDT: Borra el watchdog timerEsta instruccin borra tanto el "watchdog"como el prescaler. Los bits TO y PD delregistro de estado se ponen a "1".Sintaxis: [label] CLRWDTFlags afectados: TO, PD

    GOTO: Salto incondicionalSe trata de un salto incondicional. Los 9bits de la constante "k" que forman lainstruccin, se cargan en los bits del PC yforman la direccin de salto. Los bits delPC se cargan con los bits del registro deestado.Sintaxis: [etiqueta] GOTO kEjemplo: INICIO GOTO DESTINOAntes de la instruccin: PC=0Despus de la instruccin: PC=DESTINO

    IORLW: W OR literalSe realiza la funcin lgica OR entre elregistro W y la contante "k". El resultadose almacena en el registro W.Sintaxis: [etiqueta] IORLW kFlags afectados: ZEjemplo: IORLW Ox35Antes de la instruccin: W=0x9ADespus de la instruccin: W=0xBF

    MOVLW: Carga un literal en WEl registro W se carga con el valor de 8bits expresado mediante la literal "k".Sintaxis: [etiqueta] MOVLW kEjemplo: MOVLW 0x5ADespus de la instruccin: W=0x5A

    RETURN: Regresa de una subrutinaEl programa regresa de la subrutina yejecuta la instruccion que sigue a CALLSintaxis: [etiqueta] RETURN

    RETLW: Regresa de una subrutina ycarga el valor K en WEl programa regresa de la subrutina ycarga el valor de 8 bits del registro k en elregistro W

    Sintaxis: [etiqueta] RETLW,kEjemplo: RETLW,0x45Antes de la instruccion: W=xxDespues de la instruccion: W=0x45

    RETFIE: Regresa de la rutina deservicioSintaxis: [etiqueta] RETFIE

    SLEEP: Entra en estado de reposoAl salir, activa el bit de estado TO y borrael PD. El WDT y el prescaler se borran.Alentrar en el modo SLEEP, se detiene eloscilador.Sintaxis: [etiqueta] SLEEPFlags afectados: TO, PD, GPWUF

    XORLW: W XOR literalRealiza la funcin lgica OR exclusivaentre el contenido del registro W y laconstante "k" de 8 bits. El resultado sealmacena en el registro W.Sintaxis: [etiqueta] XORLW kFlags afectados: ZEjemplo: XORLW 0xAFAntes de la instruccin: W = 0xB5Despus de la instruccin: W = 0x1A

    SUBLW: Resta L - WA una constante "k" de 8 bits se le resta elregistro W. El resultado es guardado en elmismo registro W.Sintaxis: [etiqueta] SUBLW kFlags afectados: C,DC,Z

    MOVWF: Mover el valor del registro Wal registro fEl contenido del registro W se mueve alregistro f.Sintaxis: [etiqueta] MOVWF fFlags afectados: NingunoEjemplo: MOVWF REGAntes de la instruccin: REG=0x03,W=0xA4Despus de la instruccin: REG=0xA4,W=0xA4

    Y estas son las 35 instrucciones quepodemos utilizar para programar losmicrocontroladores PIC. La razon paraque solo se utilicen 35 instrucciones en laprogramacion es que los PIC sonmicrocontroladores RISC, y estasinstrucciones estan bien optimizadas paratener una mayor velocidad de trabajo, unaarquitectura mas simple y un codigo mascompacto