You are on page 1of 22

ESCUELA SUPERIOR POLITÉCNICA DEL CHIMBORAZO

FACULTAD DE INFORMÁTICA Y ELECTRÓNICA
ESCUELA DE INGENIERÍA ELECTRÓNICA EN CONTROL Y
REDES INDUSTRIALES

MICROCONTROLADORES

REALIZADO POR: ROLANDO OSTAIZA
CÓDIGO:
NIVEL:

246 360
CUARTO ‘A’

MARZO 2014 – AGOSTO 2014

TEMA: INSTRUCCIONES RISC
INSTRUCCIONES QUE MANEJAN REGISTROS:
Instrucción
Descripción

ADDWF f,d (hex = 07 ff)
Suma el acumulador y el registro “f”.
d = W + f (d puede ser W o f).

Operación

Ciclo
Formato

Ejemplo:

Esta instrucción suma el contenido del acumulador con el registro
“f”, y el resultado se guarda dependiendo del valor de “d”.
Si d = 0, se guarda en “W”.
Si d = 1, se guarda en “f”.
Si no se pone nada, el valor por defecto es 1 y se guarda en “f”.
También se puede indicar directamente “W” ó “f”.
1
00
0111
dfff
ffff
Si tomamos como valores iníciales W = 5 y DATO = 10.
ADDWF DATO; DATO = 15 y W = 5.
ADDWF DATO, 1; DATO = 15 y W = 5.
ADDWF DATO, 0; W = 15 y DATO = 10.
ADDWF DATO, W; W = 15 y DATO = 10.
Modifica los bits Z, DC y C.

Registro STATUS

Instrucción
Descripción

Z vale 1 si el resultado de la operación es 0.

DC vale 1 si el resultado de la operación es un número
superior a 15.

C vale 1 si el resultado de la operación es positivo o el bit 7
del registro que contiene el resultado vale 0. En caso
contrario C vale 0 (resultado negativo).

ANDWF f,d (hex = 05 ff)
Operación lógica AND entre el acumulador y el registro f.
d = W AND f (d puede ser “W” o “f”).

Operación

Esta instrucción realiza una operación lógica AND entre el
contenido del acumulador “W” y el registro “f”. El resultado se
guarda según sea el valor de “d”.
Si d = 0, se guarda en “W”.
Si d = 1, se guarda en “f”.
Si no se pone nada, el valor por defecto es 1 y se guarda en “f”.
También se puede indicar directamente “W” ó “f”.

bit a bit. Puede decirse que borra el registro “f”. el resultado será 1. CLRW (hex = 01 00) . Modifica el bit Z. CLRF f (hex = 01 8f) Pone a cero el registro “f”. Operación Ciclo Formato Ejemplo: Registro STATUS Instrucción Esta instrucción pone a cero el valor contenido en el registro direccionado por el parámetro “f”.Ciclo Formato Ejemplo: Registro STATUS 1 00 0101 dfff ffff Si queremos extraer los 4 bits menos significativos de un registro. Usamos el valor 00001111B para realizar la operación ADN y así obtenerlos (para los 4 bits más significativos utilizaríamos el valor 11110000B). podremos utilizar una máscara para obtenerlos. Explicación de la operación AND: Tenemos 4 posibles combinaciones entre dos bits 0 AND 0 = 0 0 AND 1 = 0 1 AND 0 = 0 1 AND 1 = 1 Vemos que solamente en el caso de que ambos bits sean 1.  Instrucción Descripción Z vale 1 si el resultado de la operación es 0. cuya dirección es 01H. Cargamos el acumulador con la máscara (W = 00001111B). podemos utilizar el nombre simbólico de dicho registro: CLRF TMR0 Modifica el bit Z y lo pone a 1 (ya que el resultado de la operación es 0). ANDWF f. 1 00 0001 1fff ffff Si queremos poner a cero el registro TMR0. tendríamos que utilizar CLRF 01H Si hemos incluido al inicio del código fuente el fichero PIC16F84.INC.W El resultado queda guardado en el acumulador (W = 00001010B). Cargamos el valor del cual queremos extraer los 4 bits menos significativos en “f” (f = 10101010B). F = 0. Esta instrucción compara dos bytes.

1 00 1001 dfff ffff Si tenemos en PORTA el valor 00001111B. el resultado se almacena en el propio registro “f”. La operación de complementar consiste en invertir los bits: poner los ceros a unos y los unos a ceros. d = NOT f (d puede ser “W” ó “f”). Si aplicamos para el mismo valor inicial. Si d = “W”. el resultado se almacena en el acumulador. Modifica el bit Z.  Instrucción Descripción Operación Z vale 1 si el resultado de la operación es 0.d (hex = 09 ff) Complementa el registro “f”. El parámetro “d” determina el destino del valor obtenido. . Si d = “f”. la instrucción: COMF PORTA. al ejecutar: COMF PORTA El resultado será PORTA = 11110000B. El parámetro “d” determina el destino del valor obtenido. COMF f. W=0 Operación Ciclo Formato Ejemplo: Registro STATUS Instrucción Descripción Esta instrucción pone a cero el valor contenido en el registro “W” (acumulador) 1 00 0001 0xxx xxxx No es necesario… Modifica el bit Z y lo pone a 1 (ya que el resultado de la operación es 0).d (hex = 03 ff) Decremento en 1 el registro “f”. d = f – 1 (d puede ser “W” ó “f”). Esta instrucción decrementa en uno el contenido del registro direccionado por el parámetro “f”.Descripción Pone el acumulador a cero. W El resultado será W = 11110000B y PORTA = 00001111B. DECF f. Operación Ciclo Formato Ejemplo: Registro STATUS Esta instrucción efectúa el complemento del valor contenido en el registro direccionado por el parámetro “f”.

Operación Ciclo Formato Ejemplo: Registro STATUS Esta instrucción incrementa en uno el contenido del registro direccionado por el parámetro “f”.  Instrucción Descripción Z vale 1 si el resultado de la operación es 0. Instrucción IORWF f. Esta instrucción realiza una operación lógica OR inclusivo entre el acumulador “W” y el registro direccionado por el parámetro “f”. Modifica el bit Z. Aplicando la instrucción DECF DIA. El . d = f + 1 (d puede ser “W” ó “f”). 0. el resultado se almacena en el acumulador. tendremos W = 6 y DIA = 7. tendremos W = 8 y DIA = 7. 1 00 0011 dfff ffff Si tenemos un registro DIA = 7. El parámetro “d” determina el destino del valor obtenido.d (hex = 04 ff) Descripción Operación lógica OR inclusivo entre el acumulador y un registro Operación d = W OR f (d puede ser “W” ó “f”). Si d = “f”. Si d = “W”. 0. 1 00 1010 dfff ffff Si tenemos un registro DIA = 7.d (hex = 0A ff) Incrementa en 1 el registro “f”.  Z vale 1 si el resultado de la operación es 0.Ciclo Formato Ejemplo: Registro STATUS Si d = “W”. INCF f. Si aplicamos esta otra DECF DIA. tendremos DIA = 8. el resultado se almacena en el propio registro “f”. tendremos DIA = 6. 1. Aplicando la instrucción INCF DIA. Si aplicamos esta otra INCF DIA. el resultado se almacena en el propio registro “f”. 1. el resultado se almacena en el acumulador. Modifica el bit Z. Si d = “f”.

EDAD. se guarda en “W”. IORWF f. (hex = 08 ff) Mueve el contenido de “f” al acumulador o al propio registro “f”. f = 01010101B y W = 11111111B. MOVF MOVF MOVF MOVF EDAD. . 1. 1. EDAD. 1 00 0100 dfff ffff Si asignamos los valores W = 10101010B y f = 01010101B. W.d.Ciclo Formato Ejemplo: Registro STATUS parámetro “d” determina donde se almacenará el resultado de la operación. IORWF f. Operación Ciclo Formato Ejemplo: Registro STATUS Esta instrucción copia el contenido del registro direccionado por el parámetro “f” en el acumulador “W” o en el mismo registro “f”.  Z vale 1 si el resultado de la operación es 0. W = 10101010B y f = 11111111B. W = 10101010B y f = 11111111B.  Z vale 1 si el resultado de la operación es 0. También se puede indicar directamente “W” ó “f”. También se puede indicar directamente “W” ó “f”. d = f (d puede ser “W” ó “f”). EDAD. se guarda en “f”. hace que EDAD = 38. Si no se pone nada. se guarda en “f”. hace que EDAD = 38. Si d = 1. Si no se pone nada. IORWF f. Modifica el bit Z. 0. Instrucción Descripción MOVF f. hace que W = 38. se guarda en “W”. el valor por defecto es 1 y se guarda en “f”. W. f = 01010101B y W = 11111111B. 0. IORWF f. hace que W = 38. Si d = 1. El motivo para copiar el contenido de un registro sobre si mismo. el valor por defecto es 1 y se guarda en “f”. no es otro que poder comprobar en el registro STATUS el estado del bit Z. Si d = 0. 1 00 1000 dfff ffff Si tenemos el registro EDAD = 38. Si d = 0. Modifica el bit Z. El parámetro “d” determina el destino.

que está situado en la dirección 01H. cargar el valor 10H en el acumulador.Instrucción Descripción MOVWF f (hex = 00 8f) Mueve el contenido de “W” al registro “f”. es habitual no escribir directamente su dirección. Ciclo Formato Ejemplo: Registro STATUS 1 00 0000 1fff ffff Si queremos escribir el valor 10H en el registro TMR0. MOVWF 10H. pero consume 4 ciclos de reloj completos. podremos obtener un retardo igual a un microsegundo por cada instrucción NOP que insertemos en el código del programa: RETARDO NOP NOP NOP RETURN Cada vez que llamemos a la subrutina RETARDO. Operación Esta instrucción copia el contenido del acumulador “W” en el registro direccionado por el parámetro “f”. tendremos que cargar primero el valor en el acumulador y después copiarlo al registro. MOVWF TMR0. copia el acumulador en la dirección 01H. copia el acumulador en el registro TMR0. obtendremos 3 microsegundos de demora. f = W. En el ejemplo anterior nos quedaría así: MOVWF 10H. Es útil para insertar un retardo igual a un ciclo de máquina. 1 00 0000 0xx0 0000 Utilizando un cristal de cuarzo de 4 Mhz. cargar el valor 10H en el acumulador.INC. sino el nombre simbólico definido en el fichero PIC16F84. en el oscilador. -–-–-Operación Ciclo Formato Ejemplo: Esta instrucción no realiza ninguna función específica. . MOVWF 01H. No modifica ningún bit de estado. Con los registros utilizados por el PIC para funciones específicas. Instrucción NOP (hex = 00 00) Descripción No opera.

Instrucción RLF f. Es como si multiplicáramos por dos el contenido del registro. el D0 pasa al bit C. Es como si dividiéramos por dos el contenido del registro. Esta instrucción rota a la derecha todos los bits del registro direccionado en el parámetro “f” pasando por el bit CARRY del registro STATUS (o si se prefiere. Si d = 0. el contenido del CARRY pasa al D0.d (hex = 0C ff) Rota a la derecha el registro “f”.Registro STATUS No modifica ningún bit de estado. 1 00 1101 dfff ffff Si tenemos el registro VALOR = 00000001B y aplicamos la instrucción RLF VALOR El resultado será VALOR = 00000010B y el bit C = 0. el D0 al D1. Instrucción Descripción Operación RRF f. d = << 1 (d puede ser “W” ó “f”). el D1 . El D7 pasa al CARRY del registro STATUS. d = f >> 1 (d puede ser “W” ó “f”). El parámetro “d” determina el destino. el valor por defecto es 1 y se guarda en “f”. desde los bits más significativos a los menos significativos). El bit C del registro STATUS pasa al D7. Operación Ciclo Formato Ejemplo: Registro STATUS Esta instrucción rota a la izquierda todos los bits del registro direccionado en el parámetro “f” pasando por el bit CARRY del registro STATUS (o si se prefiere.d (hex = 0D ff) Descripción Rota a la izquierda el registro “f”. Modifica el bit C (CARRY). se guarda en “W”. se guarda en “f”. Si no se pone nada. desde los bits menos significativos a los más significativos). También se puede indicar directamente “W” ó “f”. Si tenemos el registro VALOR = 10000000B y aplicamos la instrucción RLF VALOR El resultado será VALOR = 00000000B y el bit C = 1. Si d = 1. etc.

el resultado será DATO = 0 y C = 1. Vemos que C = 1 porque el resultado es positivo y C = 0 cuando el resultado es negativo. Modifica los bits Z. Si no se pone nada. También se puede indicar directamente “W” ó “f”. el resultado será DATO = FFH y C = 0.  Z vale 1 si el resultado de la operación es 0. si aplicamos SUBWF DATO. Operación Ciclo Formato Ejemplo: Registro STATUS Esta instrucción resta el valor contenido en el acumulador “W” del valor contenido en el registro direccionado por el parámetro “f”.d (hex = 02 ff) Resta el acumulador del registro “f”. se guarda en “W”. Si d = 0.  DC vale 1 si el resultado de la operación es un número superior a 15. el resultado será DATO = 1 y C = 1. 1 00 0010 dfff ffff Según sean los valores de W y el registro DATO. d = f – W (d puede ser “W” ó “f”). En caso contrario C vale 0 (resultado negativo). El parámetro “d” determina el destino. . Si tenemos el registro VALOR = 10000000B y aplicamos la instrucción RRF VALOR El resultado será VALOR = 01000000B y el bit C = 0. etc. Si DATO = 1 y W = 2. el valor por defecto es 1 y se guarda en “f”. El parámetro “d” determina el destino. SUBWF f. obtendremos diferentes resultados en el bit CARRY. También se puede indicar directamente “W” ó “f”. Si DATO = 3 y W = 2. se guarda en “f”. el valor por defecto es 1 y se guarda en “f”. se guarda en “W”. Si d = 1. DC y C. 1 00 1100 dfff ffff Si tenemos el registro VALOR = 00000001B y aplicamos la instrucción RRF VALOR El resultado será VALOR = 00000000B y el bit C = 1. se guarda en “f”.  C vale 1 si el resultado de la operación es positivo o el bit 7 del registro que contiene el resultado vale 0. Si d = 0.Ciclo Formato Ejemplo: Registro STATUS Instrucción Descripción al D0. Si DATO = 2 y W = 2. Si d = 1. Modifica el bit C (CARRY). Si no se pone nada.

el valor por defecto es 1 y se guarda en “f”. VALOR = 11110000B y W = 00000000B. hace VALOR = 00001111B y W no varía. Si d = 0. XORWF f. al aplicar la instrucción XORWF VALOR. se guarda en “f”. se guarda en “f”. W. También se puede indicar directamente “W” ó “f”. XORWF VALOR. con los 4 bits menos significativos (D3-D0) del mismo. hace W = 00001111B y VALOR no varía. se guarda en “W”. También se puede indicar directamente “W” ó “f”. Si d = 0. y en la segunda instrucción modificamos el valor del acumulador sin que varíe el registro DATO No modifica ningún bit de estado.d (hex = 0E ff) Intercambia los 4 bits más significativos con los 4 menos (nibbles) f = 0123 SWAP 4567 de “f”. Operación Ciclo Formato Ejemplo: Registro STATUS Instrucción Descripción Esta instrucción intercambia el valor de los 4 bits más significativos (D7-D4) contenidos en el registro direccionado por el parámetro “f”.Instrucción Descripción SWAPF f. el valor por defecto es 1 y se guarda en “f”. Operación Ciclo Formato Ejemplo: Esta instrucción efectúa la operación lógica XOR (OR exclusivo) entre el valor contenido en el acumulador “W” y el valor contenido en el registro direccionado por el parámetro “f”. d = f XOR W (d puede ser “W” ó “f”). Si d = 1. VALOR = 00001111B y W = 11110000B. 1 00 1110 dfff ffff Si tenemos VALOR = 00001111B y W = 00000000B. Explicación de la operación XOR: Tenemos 4 posibles combinaciones entre dos bits . 1 00 0110 dfff ffff Si tenemos el registro VALOR = 11110000B y W = 11111111B. Si no se pone nada.d (hex = 06 ff) Operación lógica XOR entre el acumulador y “f”. El parámetro “d” determina el destino. Si no se pone nada. El parámetro “d” determina el destino. SWAPF VALOR. W. al aplicar SWAPF VALOR. se guarda en “W”. Con la primera instrucción modificamos el valor del registro DATO. Si d = 1.

0 XOR 0 = 0 0 XOR 1 = 1 1 XOR 0 = 1 1 XOR 1 = 0 Vemos que si ambos bits son iguales el resultado será 0. Registro STATUS  Z vale 1 si el resultado de la operación es 0. BSF f. F(b) = 0 Operación Ciclo Formato Ejemplo: Registro STATUS Instrucción Descripción Operación Esta instrucción pone a cero un bit que hayamos elegido de un registro determinado. Z. W. salta a IGUAL. salta a DISTINTO si XOR no es 0. bit a bit. carga el acumulador con el valor a comparar. Y si ambos son diferentes. Tendríamos que efectuar las siguientes instrucciones: MOVLW 26H. BTFSS STATUS. GOTO DISTINTO. PORTA = 11101111B. compara el acumulador con NUMERO. No modifica ningún bit de estado. el resultado será 1.b (hex = 1B ff) Pone a cero el bit “b” del registro “f”. Modifica el bit Z.b (hex = 1B ff) Pone a uno el bit “b” del registro “f”. 1 01 00bb bfff ffff BCF PORTA. INSTRUCCIONES PARA MANEJO DE BITS: Instrucción Descripción BCF f. salta la instrucción siguiente si XOR = 0. después de aplicar el ejemplo anterior. Esto nos sirve para comparar dos valores y comprobar si son iguales o no. 4 . Esta instrucción compara dos bytes. Supongamos que tenemos el registro NUMERO y queremos comprobar si es igual a 26H. pone a 0 el bit RA4 del registro PORTA BCF PORTA. F(b) = 1 . RA4 . igual. si no conocemos en nombre del bit Si en el PORTA tenemos como valor inicial 11111111B. GOTO IGUAL. XORWF NUMERO.

MOVLW 10101010B .  DC vale 1 si el resultado de la operación es un número superior a 15. PORTA = 00000001B. igual. El resultado se guarda siempre en el acumulador “W” 1 11 1001 kkkk kkkk Si cargamos el acumulador con el binario 10101010B y hacemos un AND con el binario 11110000B.  C vale 1 si el resultado de la operación es positivo o el bit 7 del registro que contiene el resultado vale 0. En caso contrario C vale 0 (resultado negativo). después de aplicar el ejemplo anterior. Al final el acumulador tendrá el valor 4. nos quedará el resultado de la operación en el acumulador “W”. Modifica los bits Z. RA0 . 1 01 01bb bfff ffff BSF PORTA. suma 1 al acumulador. pone a 1 el bit RA0 del registro PORTA BSF PORTA. si no conocemos en nombre del bit Si en el PORTA tenemos como valor inicial 00000000B. INSTRUCCIONES DE CONTROL Y MANEJO DE LITERALES O INMEDIATOS (NUMÉRICOS): Instrucción Descripción Operación Ciclo Formato Ejemplo: Registro STATUS Instrucción Descripción ADDLW k (hex = 3E kk) Sumar al acumulador el valor k. W=W+k Esta instrucción suma un valor de un literal al contenido del registro “W” y lo guarda en “W”. DC y C. 0 .Ciclo Formato Ejemplo: Registro STATUS Esta instrucción pone a uno un bit que hayamos elegido de un registro determinado. ADDLW 1. carga el acumulador W con el valor 3.  Z vale 1 si el resultado de la operación es 0. ANDLW k (hex = 39 kk) Operación lógica AND entre el acumulador W y el literal k W = W AND k Operación Ciclo Formato Ejemplo: Esta instrucción realiza una operación lógica AND entre el contenido de “W” y k. No modifica ningún bit de estado. 1 11 111x kkkk kkkk MOVLW 3.

El resultado se guarda siempre en el acumulador (“k” es un valor. Explicación de la operación OR: Tenemos 4 posibles combinaciones entre dos bits 0 OR 0 = 0 0 OR 1 = 1 1 OR 0 = 1 1 OR 1 = 1 Vemos que solamente en el caso de que ambos bits sean 0. Modifica el bit Z. .Registro STATUS Instrucción Descripción Operación Ciclo Formato Ejemplo: Registro STATUS Instrucción Descripción Operación ANDLW 11110000B El resultado de la operación queda en “W” = 10100000B. IORLW k (hex = 38 kk) Operación lógica OR entre el acumulador W y el literal k W = W OR k Esta instrucción realiza un OR inclusivo entre el contenido del acumulador “W” y el literal k. no un registro). el resultado será 0.  Z vale 1 si el resultado de la operación es 0. bit a bit. SUBLW k (hex = 3C kk) Resta al literal k el valor del acumulador. W=k–W Esta instrucción resta al literal k el valor almacenado en el acumulador “W” y el resultado se guarda en el acumulador. 1 11 1000 kkkk kkkk Si cargamos el acumulador con el binario 11110000B y k= 00001111B. nos quedará el resultado de la operación en el acumulador “W”. Explicación de la operación AND: Tenemos 4 posibles combinaciones entre dos bits 0 AND 0 = 0 0 AND 1 = 0 1 AND 0 = 0 1 AND 1 = 1 Vemos que solamente en el caso de que ambos bits sean 1. Esta instrucción compara dos bytes. Modifica el bit Z.  Z vale 1 si el resultado de la operación es 0. Esta instrucción compara dos bytes. bit a bit. el resultado será 1. MOVLW 11110000B IORLW 00001111B El resultado de la operación queda en “W” = 11111111B.

En caso contrario C vale 0 (resultado negativo).Ciclo Formato Ejemplo: Registro STATUS 1 11 110x kkkk kkkk MOVLW 10.  C vale 1 si el resultado de la operación es positivo o el bit 7 del registro que contiene el resultado vale 0. 1 11 1010 kkkk kkkk . MOVLW 100 El acumulador valdrá 100 (W = 100). El resultado se guarda siempre en el acumulador (k es un literal. W=k Esta instrucción asigna al acumulador “W” el valor del literal k (entre 0 y 255). Modifica los bits Z. Instrucción: MOVLW 100 El acumulador valdrá 100 (W = 100). y queremos que contenga el que le asignemos nosotros directamente entonces usaremos esta instrucción: W = 0. SUBLW 15. Instrucción Descripción Operación Ciclo Formato XORLW k (hex = 3A kk) Operación lógica OR exclusivo entre el acumulador y el literal k W = W XOR k Esta instrucción realiza un OR exclusivo entre el contenido del acumulador “W” y el valor del literal k.  Z vale 1 si el resultado de la operación es 0. resta a 15 el valor del acumulador. DC y C. no un registro). Instrucción Descripción Operación Ciclo Formato Ejemplo: MOVLW k (hex = 30 kk) Mover el literal k al acumulador. Registro STATUS No modifica ningún bit de estado. Valor a asignar = 100.  DC vale 1 si el resultado de la operación es un número superior a 15. Con distinto valor de partida del acumulador: W = 225. carga el acumulador W con el valor 10. Al final el acumulador tendrá el valor W = 5. 1 11 00xx kkkk kkkk Si tenemos el acumulador a cero o con cualquier valor.

INSTRUCCIONES DE SALTO: Instrucción Descripción Operación Ciclo Formato Ejemplo: Registro STATUS Instrucción Descripción Operación BTFSC f. Esta instrucción compara dos bytes.b (hex = 1B ff) Comprueba un bit “b” del registro “f” y se salta la instrucción siguiente si vale 1. y si “b” = 1 entonces se salta la siguiente instrucción. . salta una instrucción Esta instrucción comprueba el valor del bit “b” en el registro “f”. nos quedará el resultado de la operación en el acumulador “W”. Esta instrucción comprueba el valor del bit “b” en el registro “f”. Modifica el bit Z. el programa sigue con la instrucción 1 y después la instrucción 2. No modifica ningún bit de estado. BTFSS f. bit a bit. el resultado será 1. Y si ambos son diferentes. saltándose la instrucción 1 Si en PORTA tenemos el valor 00000100B.b (hex = 1B ff) Comprueba un bit “b” del registro “f” y se salta la instrucción siguiente si vale 0. 2 INSTRUCCIÓN 1 INSTRUCCIÓN 2 Si en PORTA tenemos como valor inicial 11111011B. 1(2) 01 10bb bbff ffff BTFSC PORTA. F (b) = 0? SI. F (b) = 1? SI. MOVLW 11110000B XORLW 10101010B El resultado de la operación queda en “W” = 01011010B. y si “b” = 0 entonces se salta la siguiente instrucción.  Z vale 1 si el resultado de la operación es 0. Si “b” = 1 no salta y sigue con su ejecución normal. salta una instrucción. el programa continúa con la instrucción 2. Explicación de la operación XOR: Tenemos 4 posibles combinaciones entre dos bits 0 XOR 0 = 0 0 XOR 1 = 1 1 XOR 0 = 1 1 XOR 1 = 0 Vemos que si ambos bits son iguales el resultado será 0.Ejemplo: Registro STATUS Si cargamos el acumulador con el binario 11110000B y hacemos un XOR con el binario 10101010B.

saltándose la INSTRUCCION1.d (hex = 0F ff) Incrementa en 1 a “f”. el programa sigue con la instrucción 1 y después la instrucción 2. saltándose la instrucción 1. 1(2) 00 1011 bbff ffff DECFSZ VALOR. el resultado se almacena en el acumulador.d (hex = 0B ff) Decrementa en 1 a “f”. y si el resultado es 0 se salta la instrucción siguiente. el resultado se almacena en el propio registro “f”. 1(2) 01 11bb bbff ffff BTFSS PORTB. W INSTRUCCION 1 INSTRUCCIÓN 2 Si el contenido del registro “VALOR” al decrementarlo en 1 es igual a 0. Instrucción Descripción INCFSZ f. Si d = “f”. y si el resultado es 0 se salta la . d = f – 1. el programa continúa con la instrucción 2. Si el resultado que guardamos en W no es 0. y si “f” = 0 salta la siguiente instrucción Operación d = f + 1. se guarda el resultado en el acumulador y sigue con la INSTRUCCION2. 7 INSTRUCCIÓN 1 INSTRUCCIÓN 2 Si en PORTB tenemos como valor inicial 10000000B. Si en PORTB tenemos el valor 01111111B. El parámetro “d” determina el destino del valor obtenido. Instrucción Descripción DECFSZ f. Operación Ciclo Formato Ejemplo: Esta instrucción decrementa el contenido del registro direccionado por el parámetro “f”. si d = 0 SALTA (d puede ser “W” ó “f”). Registro STATUS No modifica ningún bit de estado. Esta instrucción incrementa en uno el contenido del registro direccionado por el parámetro “f”.Ciclo Formato Ejemplo: Si “b” = 0 no salta y sigue con su ejecución normal. si d = 0 SALTA (d puede ser “W” ó “f”). Registro STATUS No modifica ningún bit de estado. Si d = “W”. y si “f” = 0 salta la siguiente instrucción. sigue con la INSTRUCCION1 y después con la INSTRUCCION2 (no se salta la inmediata siguiente).

sigue con la INSTRUCCION1 y después con la INSTRUCCION2 (no se salta la inmediata siguiente). Si d = “W”. 1(2) 00 1111 bfff ffff INCFSZ VALOR. Siempre termina con la instrucción de retorno (RETURN o RETLW). Limitaciones: en el PIC16F84 tenemos disponibles 8 niveles de stack. Si el resultado que guardamos en W no es 0. ejecutando la instrucción de retorno RETURN o RETLW. saltándose la INSTRUCCION1. CALL à k…RETURN à PC+1. Esta instrucción llama a un grupo de instrucciones (subrutina) que comienzan en la dirección k. guarda en el stack el valor del registro PC+1 (PC = Program Counter) de manera que al regresar de la subrutina continúa con la instrucción siguiente recuperándola del stack. Registro STATUS No modifica ningún bit de estado.Ciclo Formato Ejemplo instrucción siguiente. sin necesidad de tener que copiar las mismas instrucciones. se guarda el resultado en el acumulador y sigue con la INSTRUCCION2. Si d = “f”. donde k puede ser un valor numérico o una etiqueta. con el consiguiente ahorro de memoria. 2 10 0kkk kkkkk kkkk PRINCIPAL: etiqueta que identifica una dirección de memoria. El parámetro “d” determina el destino del valor obtenido. . el resultado se almacena en el acumulador. el resultado se almacena en el propio registro “f”. W INSTRUCCION 1 INSTRUCCIÓN 2 Si el contenido del registro “VALOR” al incrementarlo en 1 es igual a 0. INSTRUCCIONES DE CONTROL Y ESPECIAL: Instrucción Descripción Operación Ciclo Formato Ejemplo: CALL k (hex = 2k kk) Llama a una subrutina en la dirección k. Funcionamiento: cuando un programa ejecuta una instrucción CALL. por lo que el número máximo de CALL reentrantes (instrucciones CALL que contengan otra instrucción CALL) queda limitado a 8. Utilidad: sirven para utilizarlas varias veces en cualquier parte del programa. Definición de subrutina: son un grupo de instrucciones que forman un programa dentro del programa principal y que se ejecutan cuando las llama el programa principal.

el WDT interpretará que se ha bloqueado el programa y ejecutará un reset para desbloquearlo. Si no se pone a cero a tiempo. Salto à k Esta instrucción ejecuta un salto del programa a la dirección k. El parámetro “k” puede ser un valor numérico o una etiqueta. RB0 GOTO PRINCIPAL * * * RETARDO CLRF CONTADOR BUCLE DECFSZ CONTADOR. 1 GOTO BUCLE RETURN En este listado vemos que la subrutina RETARDO salta a un grupo de instrucciones que forman un bucle y cuando éste termina regresa para seguir con la instrucción siguiente al salto (BTFSC…). PRINCIPAL CALL RETARDO BTFSC PORTB. No modifica ningún bit de estado CLRWDT (hex = 00 64) Pone el temporizador WDT a cero WDT = 0 Esta instrucción se utiliza cuando programamos el PIC con la opción Watch Dog habilitada. 1 00 0000 0110 0100 Bucle CLRWDT * * * GOTO Bucle No modifica ningún bit de estado. BUCLE: etiqueta que identifica una dirección de memoria. Instrucción Descripción Operación Ciclo Formato Ejemplo: GOTO k (hex = 28 kk) Salto incondicional a k.Registro STATUS Instrucción Descripción Operación Ciclo Formato Ejemplo: Registro STATUS RETARDO: etiqueta que identifica el comienzo de una subrutina. 2 10 1kkk kkkk kkkk INSTRUCCIÓN 1 . Para evitar el reset del PIC. el programa debe contener cíclicamente la instrucción CLRWDT para ponerlo a cero.

en cuanto ésta se produzca pasará el control al programa situado en la dirección 04H y la instrucción RETFIE regresa de la interrupción. RETFIE . Con la instrucción RETFIE ponemos de nuevo el bit GIE a 1 para así atender de nuevo a futuras interrupciones. Registro STATUS No modifica ningún bit de estado. retorna de la interrupción Este código de programa ejecuta un bucle infinito. Es la última instrucción que forma una subrutina (al igual que RETURN). bucle infinito.Registro STATUS GOTO ABAJO INSTRUCCIÓN 3 INSTRUCCIÓN 4 INSTRUCCIÓN 5 ABAJO INSTRUCCIÓN 6 Primero se ejecuta la instrucción 1. Al ejecutarse una interrupción. vector de interrupción. después GOTO y continúa con la instrucción 6 saltándose las instrucciones 3. ORG 04H. 4 y 5. No modifica ningún bit de estado. Si habilitamos una de las interrupciones del 16F84. FIN INTERRUPCION. RETORNO con W = k. Instrucción Descripción Operación Ciclo Formato Ejemplo: RETFIE (hex = 00 09) Retorna de una interrupción. Instrucción Descripción Operación Ciclo RETLW (hex = 34 kk) Retorno de subrutina y carga literal k en el acumulador. Esta instrucción devuelve el control al programa principal después de ejecutarse una subrutina de gestión de interrupción. 2 00 0000 0000 (00) ORG 00H BUCLE GOTO BUCLE. 2 . cargando el acumulador “W” con el literal “k”. ¿Y para qué me sirve regresar de una subrutina con un determinado literal en el acumulador? Nos será muy útil al programar con TABLAS. el bit GIE del registro INTCON se pone a 0 y así evita que otra interrupción se produzca mientras ya está con una en marcha. Esta instrucción retorna de una subrutina al programa principal.

SUBRUT2 RETLW 0B. 2 00 0000 0000 1000 CALL COMPARA. No modifica ningún bit de estado. carga W = 0A y retorna. SLEEP (hex = 00 63) En modo reposo.Formato Ejemplo: Registro STATUS Instrucción Descripción Operación Ciclo Formato Ejemplo: Registro STATUS Instrucción Descripción Operación 11 01xx kkkk kkkk CALL SUBRUT1. EN ESPERA. CALL SUBRUT2. llama a Subrut1. RETURN (hex = 00 08) Retorno de subrutina. tomando el valor almacenado en el stack para continuar. RETORNO. MOVWF DATO2. INSTRUCCION1 INSTRUCCION2 * * COMPARA INSTRUCCIÓN R1 INSTRUCCIÓN R2 RETURN Aquí llamamos a la subrutina COMPARA. MOVWF DATO 1. carga W en Dato1. * * SUBRUT1 RETLW 0A. carga W = 0B y retorna. 2 y sigue con el programa. carga W en Dato2. llama a Compara. No ejecuta ninguna instrucción hasta que sea nuevamente reinicializado (reset). se ejecutan las instrucciones R1 y R2 y con el RETURN regresa a la instrucción siguiente al CALL y ejecuta las instrucciones 1. llama a Subrut2. No modifica ningún bit de estado. Esta instrucción retorna de una subrutina al programa principal en la instrucción siguiente a la llamada de la subrutina. Esta instrucción detiene la ejecución del programa y deja el PIC en modo suspendido. . Es la última instrucción que forma una subrutina (al igual que RETLW).

No modifica ningún bit de estado. TRIS de f = W. carga el acumulador W con el valor 16H.Ciclo Formato Ejemplo: Registro STATUS Instrucción Descripción Durante este modo. carga OPTION con el acumulador. RP0. 1 00 0000 0000 1000 No modifica ningún bit de estado. Operación Esta instrucción guarda en el registro especial OPTION el valor contenido en el acumulador “W”. El consumo de energía es mínimo. OPTION (hex = 00 62) Guarda el valor del acumulador en el registro OPTION. el contador del Watch Dog (WDT) sigue trabajando. carga el registro PORTA con el acumulador. Microchip aconseja realizar el ejemplo anterior de esta otra forma: BSF STATUS. y como en el futuro podría dejar de implementarse. carga el acumulador con 10H. carga el acumulador con el valor 10H. MOVLW 10H. Operación Ciclo Formato Ejemplo: Esta instrucción guarda el valor del acumulador “W” en uno de los registros especiales de TRIS que indicamos en el parámetro “f”. Esta instrucción existe para mantener la compatibilidad con los PIC producidos anteriormente. carga el registro OPTION con el acumulador. OPTION. Los registros TRIS determinan el funcionamiento como entrada y salida de las líneas I/O del PIC. OPTION = W. Microchip aconseja realizar el ejemplo anterior de . Ciclo Formato Ejemplo: Registro STATUS MOVLW 10H. Instrucción Descripción TRIS f (hex = 00 6F) Guarda el acumulador en uno de los registros de TRIS. activa el banco 1. y si lo tenemos activado el PIC se reseteará por este medio. TRIS PORTA. MOVLW 16H. y como en el futuro podría dejar de implementarse. Esta instrucción existe para mantener la compatibilidad con los PIC producidos con anterioridad. MOVWF OPTION_REG.

carga el registro PORTA con W. MOVLW 16H . No modifica ningún bit de estado. RP0. . carga el acumulador con el valor 16H MOVWF TRISA . activa el banco 1.Registro STATUS esta otra forma (aunque ocupa más memoria…): BSF STATUS.