Download - 1compl

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