REPERTORIO DE INSTRUCCIONES En esta sección se pretende: Conocer las características generales de las instrucciones para el PIC16F84 Los distintos modos de direccionamiento, y Los diferentes grupos de instrucciones Curso de Microcontroladores Profr. Felipe Santiago 1 Características generales El Repertorio RISC del PIC16F84 incluye 35 instrucciones con las siguientes características: Las instrucciones son simples y rápidas Las instrucciones son ortogonales La longitud de las instrucciones y los datos es constante EJERCICIOS 1: Un PIC16F84 funcionando con un cristal de cuarzo de 10 MHz tarda 600 uS en ejecutar un programa que tiene el 50 % de instrucciones de saltos. ¿De cuántas instrucciones consta el programa ¿Cuántas posiciones de la memoria de código ocupa? Curso de Microcontroladores Profr. Felipe Santiago 2 1 Modos de direccionamiento El PIC16F84 permite tres modos de direccionamiento: Directo En la instrucción se incluye la dirección del registro al que se tendrá acceso. Ejemplo: movwf 0x0C Indirecto Utiliza al registro INDF (0x01) para indicar que se trata de un acceso indirecto y al registro FSR (0x04) como apuntador. Por ejemplo, si la localidad 0x0C tiene al número 0x03 y la localidad 0x0D contiene al número 0x0A. Y además si FSR contiene el número 0x0C. La instrucción movf INDF, 1, pondrá 0x03 en W. Si se incrementa FSR y se repite la instrucción, ahora pondrá 0x0A en W. Inmediato En el mismo código de la instrucción se encuentra uno de los operandos, el operando es conocido de forma inmediata. Por ejemplo: movlw 0x05 Curso de Microcontroladores Profr. Felipe Santiago 3 Direccionamiento directo e indirecto Curso de Microcontroladores Profr. Felipe Santiago 4 2 CAMPOS EN LAS INSTRUCCIONES Las instrucciones son de 14 bits y se tienen diferentes formatos. Los campos de bits que pueden encontrarse son: a) Campo del código de operación (OPCODE) Requiere hasta de 6 bits (4 en algunos casos). b) Campo de los operandos fuente (f) y destino (d) Para f se requiere de 7 bits. Para d sólo se ocupa un bit (el destino puede ser f o W). c) Campo de operando inmediato o literal, o para la dirección de un salto (k) k es de 8 bits, para operaciones aritméticas o lógicas. k es de 10 bits para saltos. d) Campo que hace referencia a un bit (b) b es de 3 bits. Curso de Microcontroladores Profr. Felipe Santiago 5 CLASIFICACIÓN DE LAS INSTRUCCIONES Dependiendo de su operación, las instrucciones se clasifican en: 1. Instrucciones orientadas a manejar registros 16 instrucciones 2. Instrucciones orientadas a manejar bits 2 instrucciones 3. Instrucciones que manejan valores inmediatos 6 instrucciones 4. Instrucciones de brincos condicionales 4 instrucciones 5. Instrucciones saltos incondicionales y otras instrucciones especiales 7 instrucciones Total : 35 Instrucciones. Curso de Microcontroladores Profr. Felipe Santiago 6 3 INSTRUCCIONES ORIENTADAS A MANEJAR REGISTROS El formato de estas instrucciones es el siguiente: 13 8 OPCODE 7 6 d 0 f (dir. del registro) d = 1 El registro destino es f d = 0 El registro destino es W La sintaxis de estas instrucciones es: nemónico f, d Ejemplos de instrucciones de este grupo son: inc movf reg1, 1 reg1, 1 Curso de Microcontroladores Profr. Felipe Santiago 7 GRUPO COMPLETO INSTRUCCIONES QUE MANEJAN REGISTROS SINTAXIS OPERACIÓN CICLOS FORMATO BANDERAS ADDWF f, d Suma W y f 1 00 0111 dfff ffff C, DC, Z ANDWF f, d AND de W con f 1 00 0101 dfff ffff Z CLRF Borra f (pone todos los bits a 0) 1 00 0001 1fff ffff Z Borra W 1 00 0001 0xxx xxxx Z f CLRW ----- COMF f, d Complementa f (invierte) 1 00 1001 dfff ffff Z DECF f, d Decrementa f 1 00 0011 dfff ffff Z INCF f, d Incrementa f 1 00 1010 dfff ffff Z OR entre W y f 1 00 0100 dfff ffff Z Mueve al registro f 1 00 1000 dfff ffff Z Mueve W a f 1 00 0000 1fff ffff *** *** IORWF MOVF f, d f, d MOVWF f NOP No opera 1 00 0000 0xxx xxxx f, d Rota f a la Izq. a través del acarreo 1 00 1101 dfff ffff RRF f, d Rota f a la der. a través del acarreo 1 00 1100 dfff ffff C RLF C SUBWF f, d Resta W a f 1 00 0010 dfff ffff C, DC, Z SWAPF f, d Intercambia los nibbles de un registro 1 00 1110 dfff ffff *** 1 Curso de Microcontroladores Profr. Felipe Santiago 00 0110 dfff ffff Z XORWF f, d XOR de W con f 8 4 EJERCICIOS 2: 1. Si se supone que inicialmente tiene cero el registro W y los que ocupan las direcciones 0x05 y 0x06 de la memoria de datos ¿Qué valor contendrán después de ejecutar el siguiente programa? incf incf comf iorwf xorwf 0x05, 0 0x05, 1 0x06, 1 0x06, 0 0x05, 1 2. Existe una instrucción con la que se rota a la derecha, a través del señalizador de acarreo C, el registro que ocupa la dirección 0x04 de la memoria de datos y lo deposita en W. Se pide: a) Nemónico b) Formato de la instrucción c) Si inicialmente C = 1 y (0x04) 0x00 ¿Qué valor se cargará en W? 3. Si el registro de ESTADO contiene el valor Oxf5 y se ejecuta la instrucción swap E5TAD0, 0. ¿Qué valor contendrán ESTADO y W? Curso de Microcontroladores Profr. Felipe Santiago 9 INSTRUCCIONES ORIENTADAS A MANEJAR BITS El formato de estas instrucciones es el siguiente: 13 10 9 OPCODE 7 6 b (posición) 0 f (dir. del registro) La sintaxis de estas instrucciones es: nemónico f, b y comprende únicamente las instrucciones: INSTRUCCIONES QUE MANEJAN BITS SINTAXIS OPERACIÓN CICLOS FORMATO BANDERAS BCF f, b Borra el bit b del registro f (Pone 0) 1 01 00bb bfff ffff *** BSF f, b Pone a 1 el bit b de f 1 01 01bb bfff ffff *** Curso de Microcontroladores Profr. Felipe Santiago 10 5 EJERCICIOS 3: 1. Al hacer un Reset el procesador coloca el bit 5 (RP0) del registro de ESTADO a cero con lo que comienza referenciando al banco 0 de la memoria de datos. Para referenciar al banco 1 hay que poner a 1 dicho bit: a) Indicar la instrucción que permita dicha conmutación de bancos b) Hallar el formato de la instrucción 2. Si inicialmente el registro W = 0xff y el registro OPTION = 0x00 ¿Con que valores quedarán cargados después de ejecutar el siguiente programa? bsf OPTION, 2 comf OPTION, 0 swap OPTION, 1 3. Hallar el formato de la instrucción: bsf 0X08, 3 Curso de Microcontroladores Profr. Felipe Santiago 11 OPERACIONES QUE MANEJAN UN VALOR INMEDIATO El formato de estas instrucciones es el siguiente: 13 87 OPCODE 0 Valor inmediato Estas instrucciones tienen por sintaxis: nemónico k, sólo se aplican al registro W y son las siguientes: INSTRUCCIONES QUE MANEJAN UN VALOR INMEDIATO SINTAXIS OPERACIÓN CICLOS FORMATO BANDERAS ADDLW K Suma inmediata con W 1 11 111x kkkk kkkk C, DC, Z ANDLW K AND inmediato con W 1 11 1001 kkkk kkkk Z IORLW K OR inmediato con W 1 11 1000 kkkk kkkk Z MOVLW K Mueve a W un valor inmediato 1 11 00xx kkkk kkkk *** SUBLW K Resta W de un valor inmediato 1 11 110x kkkk kkkk C, DC, Z XORLW K OR exclusivo de un inmediato con W 1 11 1010 kkkk kkkk Z Curso de Microcontroladores Profr. Felipe Santiago 12 6 EJERCICIOS 4: 1. Se desea cargar en el registro W el valor inmediato 0x33: a) ¿Qué instrucción se puede emplear? b) Formato de la instrucción 2.Indicar el valor del registro W después de ejecutar el siguiente programa: movlw 0x45 sublw 0x95 3. Averiguar el contenido de W después de ejecutar el siguiente programa: clrw addlw 0x55 andlw 0xff iorlw 0x0f xorlw 0xaf Curso de Microcontroladores Profr. Felipe Santiago 13 “BRINCOS” CONDICIONALES Son 4 instrucciones en este grupo, se brinca la siguiente instrucción, omitiendo su ejecución. En las 2 primeras el brinco depende del estado de 1 bit, y su formato es similar al de las instrucciones orientadas al manejo de bits: 13 10 9 OPCODE 7 6 b (posición) 0 f (dir. del registro) En las otras dos, el brinco esta en función de la puesta a cero de un registro después de un incremento o decremento. Su formato es el mismo que el de las instrucciones que manipulan registros: 13 8 OPCODE 7 d 6 0 f (dir. del registro) Curso de Microcontroladores Profr. Felipe Santiago 14 7 El grupo de estas 4 instrucciones incluye: BRINCOS CONDICIONALES SINTAXIS OPERACIÓN CICLOS FORMATO BANDERAS BTFSC f, b Explora al bit b de f y brinca si vale 0 1 (2) 01 10bb bfff ffff *** BTFSS f, b Explora al bit b de f y brinca si vale 1 1 (2) 01 11bb bfff ffff *** DECFSZ f, d Decrementa f y si es 0, brinca 1 (2) 00 1011 dfff ffff *** INCFSZ f, d Incrementa f y si es 0, brinca 1 (2) 00 1111 dfff ffff *** EJERCICIOS 5: 1. Hallar el formato de la instrucción btfss 0x08, 3 2. Evaluar el valor del bit 4 del registro Estado. Si vale 1, poner a 0 el registro W, y si dicho bit vale 0 ponerlo a 1. 3. Decrementar el contenido del registro FSR hasta que valga cero y entonces borrar W. Curso de Microcontroladores Profr. Felipe Santiago 15 SALTOS INCONDICIONALES Estas instrucciones modifican el contenido del PC, rompiendo la secuencia ordenada de las instrucciones en un programa. Los campos de estas instrucciones son: 13 11 10 OPCODE 0 K (Literal) Los saltos incondicionales más otras instrucciones de control y especiales se listan a continuación: SALTOS INCONDICIONALES, DE CONTROL Y ESPECIALES SINTAXIS CALL K OPERACIÓN CICLOS FORMATO BANDERAS Llamada a subrutina 2 10 0kkk kkkk kkkk TO#, PD# CLRWDT Borra o refresca al perro guardián 1 00 0000 0110 0100 *** GOTO K Salto incondicional 2 10 1kkk kkkk kkkk *** RETFIE Retorno de Interrupción (GIE = 1) 2 00 0000 0000 1001 *** RETLW K Retorno de subrutina y carga W = K 2 11 01xx kkkk kkkk *** RETURN Retorno de subrutina 2 00 0000 0000 1000 *** SLEEP Pasa al modo de reposo 1 00 0000 0110 0011 TO#, PD# Curso de Microcontroladores Profr. Felipe Santiago 16 8 Comportamiento del PC El Program Counter es de 13 bits, por lo que se compone de dos registros PCL y PCLATH. PCL se puede modificar directamente a través de la ALU, conservando la parte alta del Program Counter. Instrucciones como GOTO y CALL modifican una parte de PCH. La diferencia entre GOTO y CALL es que CALL almacena en la pila el valor del PC, previamente incrementado. Return, retlw y retfie sustituyen el valor del program counter con una constante extraída de la Pila. Curso de Microcontroladores Profr. Felipe Santiago 17 Curso de Microcontroladores Profr. Felipe Santiago 18 9