El juego de instrucciones : PIC 16F87x El Set de Instrucciones Introducción • Los PIC 16F87x poseen un juego de 35 instrucciones de tipo RISC, siendo todas ellas de 14 bits. El tamaño de los datos es de 1 byte. • Las instrucciones de los PIC 16F87x son exactamente iguales a las del PIC 16f84 • En los 14 bits de cada instrucción se incluye el código de operación y los operandos si estos existen. • Todas las instrucciones tardan en ejecutarse 1 ciclo (4 golpes de reloj) excepto las de salto que tardan 2 ciclos. CCFF DPE MÓDULO DE PROYECTOS 2 • Las instrucciones de los PIC son altamente ortogonales. Esto quiere decir que casi todas las instrucciones pueden usar cualquier registro como como operando y como destino. • El número total de instrucciones del microcontrolador es de 35. Clasificándose en los siguiente tipos: ¾ Instrucciones orientadas a bytes. ¾ Instrucciones orientadas a bits. ¾ Instrucciones de control y con literales. CCFF DPE MÓDULO DE PROYECTOS 3 El Set de Instrucciones Nomenclatura en las Instrucciones • En las instrucciones orientadas a bytes o registros f representa un registro y d representa el destino. Si d es 0, el resultado de la operación se almacena en el registro de trabajo W, mientras que si d es 1, el resultado se guarda en el 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 siempre es el de menor peso. • Para las instrucciones de control y con literales k representa una constante o un literal, que según los casos puede ser de 8 ó 11 bits. 4 El Set de Instrucciones Formato de las instrucciones Instrucciones orientadas a bytes o registros (18) Donde: Opcode es el código de operación. ( ) significa contenidos. CCFF DPE MÓDULO DE PROYECTOS 5 Instrucciones orientadas a bits (4). CCFF DPE MÓDULO DE PROYECTOS 6 Instrucciones de control y con literales (13). CCFF DPE MÓDULO DE PROYECTOS 7 Instrucciones Orientadas a Bytes o Registros CCFF DPE MÓDULO DE PROYECTOS 8 Instrucciones Orientadas a Bits. Instrucciones Con Literales Y De Control. CCFF DPE MÓDULO DE PROYECTOS 9 ADDLW (Suma W con un literal) CCFF DPE MÓDULO DE PROYECTOS 10 ADDWF (Suma W con un registro) CCFF DPE MÓDULO DE PROYECTOS 11 ANDLW (AND de W con un literal) CCFF DPE MÓDULO DE PROYECTOS 12 ANDWF (AND de W con un registro) CCFF DPE MÓDULO DE PROYECTOS 13 BCF (pon a 0 un bit del registro f) CCFF DPE MÓDULO DE PROYECTOS 14 BSF (pon a 1 un bit del registro f) CCFF DPE MÓDULO DE PROYECTOS 15 BTFSC (Testea un Bit y Salta si Cero) (1) Si se produce el salto (bit=0) la instrucción tarda 2 ciclos en ejecutarse, por el contrario si no se produce salto solo tarda 1 ciclo en ejecutarse. CCFF DPE MÓDULO DE PROYECTOS 16 BTFSC (Testea un Bit y Salta si Cero) (2) CCFF DPE MÓDULO DE PROYECTOS 17 BTFSS (Testea un Bit y Salta si Set) (1) Si se produce el salto (bit=1) la instrucción tarda 2 ciclos en ejecutarse, por el contrario si no se produce salto solo tarda 1 ciclo en ejecutarse. CCFF DPE MÓDULO DE PROYECTOS 18 BTFSS (Testea un Bit y Salta si Set) (2) CCFF DPE MÓDULO DE PROYECTOS 19 CALL (Llamada a subrutina) (1) • Tos es la cima de la pila CCFF DPE MÓDULO DE PROYECTOS 20 CALL (Llamada a subrutina) (2) • El cálculo de la dirección efectiva varía según la familia de PIC. 21 CLRF (Pon a cero el registro f) (1) CCFF DPE MÓDULO DE PROYECTOS 22 CLRW (Pon a cero el registro W) CCFF DPE MÓDULO DE PROYECTOS 23 CLRWDT (Pon a cero el registro WDT) (1) CCFF DPE MÓDULO DE PROYECTOS 24 CLRWDT (Pon a cero el registro WDT) (2) • T0 y PD se ponen a 1 también cuando se ejecuta la instrucción SLEEP CCFF DPE MÓDULO DE PROYECTOS 25 COMF (COMplementa F) CCFF DPE MÓDULO DE PROYECTOS 26 DECF (DECrementa F) • En el caso de que d=0, el resultado se almacena en W,y f no modifica su valor. • Recuérdese que al decrementar 00h, se obtiene 0FFH. CCFF DPE MÓDULO DE PROYECTOS 27 DECFSZ (DECrementa F y Salta si Zero) • En el caso de que d=0, el resultado se almacena en W,y f no modifica su valor. • Si el resultado es cero se ignora la siguiente instrucción ( se salta), y la Instrucción tarda en ejecutarse 2 ciclos. CCFF DPE MÓDULO DE PROYECTOS 28 DECFSZ (DECrementa F y Salta si Zero) • En el caso de que d=1, el resultado se almacena en f modificándose su valor. CCFF DPE MÓDULO DE PROYECTOS • Si el resultado es distinto de cero se ejecuta la siguiente instrucción ( no se salta), y la Instrucción tarda en ejecutarse 1 ciclo. 29 GOTO (Salto incondicional a la dirección ) • Goto es una instrucción que tarda en ejecutarse dos ciclos CCFF DPE MÓDULO DE PROYECTOS 30 INCF (INCrementa F ) • En el caso de que d=0, el resultado se almacena en W,y f no modifica su valor. • En el caso de que d=1, el resultado se almacena en f modificándose su valor. • Recuérdese que al incrementar 0FFh, se obtiene 00H. CCFF DPE MÓDULO DE PROYECTOS 31 INCFSZ (INCrementa F y Salta si Zero) (1) • En el caso de que d=0, el resultado se almacena en W,y f no modifica su valor. • En el caso de que d=1, el resultado se almacena en f modificándose su valor. • Recuérdese que al incrementar 0FFh, se obtiene 00H. CCFF DPE MÓDULO DE PROYECTOS 32 INCFSZ (INCrementa F y Salta si Zero)(2) Si el resultado es cero se ignora la siguiente instrucción ( se salta), y la Instrucción tarda en ejecutarse 2 ciclos. Si el resultado es distinto de cero se ejecuta la siguiente instrucción ( no se salta), y la Instrucción tarda en ejecutarse 1 ciclo. CCFF DPE MÓDULO DE PROYECTOS 33 IORLW (OR Lógica de W con un Literal) CCFF DPE MÓDULO DE PROYECTOS 34 IORWF (OR Lógica de W con un registro F) CCFF DPE MÓDULO DE PROYECTOS 35 MOVLW (MOVer un Literal a W ) CCFF DPE MÓDULO DE PROYECTOS 36 MOVF (MOVer un registro Fsr) Al ejecutar la instrucción MOVF FSR, 1 No realizamos ningún cambio ya que el registro se queda como estaba, pero sin embargo nos sirve para chequear su contenido ya que el FLAG Z se actualiza. CCFF DPE MÓDULO DE PROYECTOS 37 NOP (No OPeración) Esta instrucción no hace nada, simplemente consume un ciclo de instrucción. CCFF DPE MÓDULO DE PROYECTOS 38 RETFIE (Retorno de interrupción) Carga el PC con el valor que se encuentra en la cima de la pila (TOS). Pone a 1 el bit GIE, con el fin de autorizar de nuevo las interrupciones. Esta es una instrucción que tarda en ejecutarse 2 ciclos de instrucción CCFF DPE MÓDULO DE PROYECTOS 39 RETLW (Retorno y carga un literal en W) Carga el registro W con el literal k, después Carga el PC con el valor que se encuentra en la cima de la pila (TOS), efectuando un retorno de subrutina. CCFF DPE MÓDULO DE PROYECTOS 40 RETLW (Retorno y carga un literal en W) Es una instrucción que tarda en ejecutarse 2 ciclos. CCFF DPE MÓDULO DE PROYECTOS 41 RETURN (Retorno de subrutina) Carga el PC con el valor que se encuentra en la cima de la pila Es una instrucción que tarda en ejecutarse 2 ciclos. CCFF DPE MÓDULO DE PROYECTOS 42 RLF (Rota un bit a la izquierda el Registro F, pasando por el bit de Carry) (1) Si d=0 el resultado se almacena en W, no modificándose el valor de f. Si d=1 el resultado se almacena en f. El único flag que se modifica es el Carry. CCFF DPE MÓDULO DE PROYECTOS 43 RLF (Rota un bit a la izquierda el Registro F, pasando por el bit de Carry) (2) CCFF DPE MÓDULO DE PROYECTOS 44 RRF (Rota un bit a la derecha el Registro F, pasando por el bit de Carry) (1) CCFF DPE MÓDULO DE PROYECTOS 45 RRF (Rota un bit a la derecha el Registro F, pasando por el bit de Carry) (2) CCFF DPE MÓDULO DE PROYECTOS 46 SLEEP (Modo de bajo consumo) Las maneras de salir del modo de bajo consumo son: ¾ Por un RESET, activando MCLR ¾ Por desbordamiento de WDT si éste quedó operativo al entrar en el modo reposo. CCFF DPE MÓDULO DE PROYECTOS ¾ Activación de una interrupción que no sea TMR0, ya que 47 esta se desactiva al entrar en reposo. SUBLW (Resta al literal k el contenido de W) CCFF DPE MÓDULO DE PROYECTOS 48 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 CCFF DPE MÓDULO DE PROYECTOS • DC se pone a 1 si genera un acarreo del bit 3 al bit 4. 49 SUBWF (Resta al R. F el contenido de W) CCFF DPE MÓDULO DE PROYECTOS 50 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 CCFF DPE MÓDULO DE PROYECTOS 51 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. CCFF DPE MÓDULO DE PROYECTOS 52 XORLW (O-exclusiva entre W y un literal) CCFF DPE MÓDULO DE PROYECTOS 53 XORWF (O-exclusiva entre W y f) CCFF DPE MÓDULO DE PROYECTOS 54 OPTION (Inicializa el registro option) CCFF DPE MÓDULO DE PROYECTOS 55 TRIS(Inicializa un registro TRIS) CCFF DPE MÓDULO DE PROYECTOS 56