Sie sind auf Seite 1von 18

TEMA: INSTRUCCIONES RISC

INSTRUCCIONES QUE MANEJAN REGISTROS:

Instruccin ADDWF f,d (hex = 07 ff)


Descripcin Suma el acumulador y el registro f.
d = W + f (d puede ser W o f).

Esta instruccin suma el contenido del acumulador con el registro f, y el


resultado se guarda dependiendo del valor de d.
Operacin
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.
Tambin se puede indicar directamente W f.
Ciclo 1
Formato 00 0111 dfff ffff
Si tomamos como valores inciales W = 5 y DATO = 10.
ADDWF DATO; DATO = 15 y W = 5.
Ejemplo: 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.

Z vale 1 si el resultado de la operacin es 0.


DC vale 1 si el resultado de la operacin es un nmero superior a 15.
Registro STATUS
C vale 1 si el resultado de la operacin es positivo o el bit 7 del
registro que contiene el resultado vale 0. En caso contrario C vale 0
(resultado negativo).

Instruccin ANDWF f,d (hex = 05 ff)


Descripcin Operacin lgica AND entre el acumulador y el registro f.
d = W AND f (d puede ser W o f).

Esta instruccin realiza una operacin lgica AND entre el contenido del
acumulador W y el registro f. El resultado se guarda segn sea el valor
Operacin 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.
Tambin se puede indicar directamente W f.
Ciclo 1
Formato 00 0101 dfff ffff
Si queremos extraer los 4 bits menos significativos de un registro,
podremos utilizar una mscara para obtenerlos.
Usamos el valor 00001111B para realizar la operacin ADN y as obtenerlos
Ejemplo: (para los 4 bits ms significativos utilizaramos el valor 11110000B).
Cargamos el valor del cual queremos extraer los 4 bits menos significativos
en f (f = 10101010B).
Cargamos el acumulador con la mscara (W = 00001111B).
ANDWF f,W
El resultado queda guardado en el acumulador (W = 00001010B).
Explicacin de la operacin 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, el resultado ser
1. Esta instruccin compara dos bytes, bit a bit.
Modifica el bit Z.
Registro STATUS
Z vale 1 si el resultado de la operacin es 0.

Instruccin CLRF f (hex = 01 8f)


Descripcin Pone a cero el registro f.
F = 0.
Operacin
Esta instruccin pone a cero el valor contenido en el registro direccionado
por el parmetro f. Puede decirse que borra el registro f.
Ciclo 1
Formato 00 0001 1fff ffff
Si queremos poner a cero el registro TMR0, cuya direccin es 01H,
tendramos que utilizar
CLRF 01H
Ejemplo:
Si hemos incluido al inicio del cdigo fuente el fichero PIC16F84.INC,
podemos utilizar el nombre simblico de dicho registro:
CLRF TMR0
Registro STATUS Modifica el bit Z y lo pone a 1 (ya que el resultado de la operacin es 0).

Instruccin CLRW (hex = 01 00)


Descripcin Pone el acumulador a cero.
W=0
Operacin
Esta instruccin pone a cero el valor contenido en el registro W
(acumulador)
Ciclo 1
Formato 00 0001 0xxx xxxx
Ejemplo: No es necesario
Registro STATUS Modifica el bit Z y lo pone a 1 (ya que el resultado de la operacin es 0).

Instruccin COMF f,d (hex = 09 ff)


Descripcin Complementa el registro f.
d = NOT f (d puede ser W f).
Operacin
Esta instruccin efecta el complemento del valor contenido en el registro
direccionado por el parmetro f.
La operacin de complementar consiste en invertir los bits: poner los
ceros a unos y los unos a ceros.
El parmetro d determina el destino del valor obtenido.
Si d = W, el resultado se almacena en el acumulador.
Si d = f, el resultado se almacena en el propio registro f.
Ciclo 1
Formato 00 1001 dfff ffff
Si tenemos en PORTA el valor 00001111B, al ejecutar:
COMF PORTA
El resultado ser PORTA = 11110000B.
Ejemplo:
Si aplicamos para el mismo valor inicial, la instruccin:
COMF PORTA, W
El resultado ser W = 11110000B y PORTA = 00001111B.
Modifica el bit Z.
Registro STATUS
Z vale 1 si el resultado de la operacin es 0.

Instruccin DECF f,d (hex = 03 ff)


Descripcin Decremento en 1 el registro f.
d = f 1 (d puede ser W f).

Esta instruccin decrementa en uno el contenido del registro direccionado


Operacin por el parmetro f. El parmetro d determina el destino del valor
obtenido.
Si d = W, el resultado se almacena en el acumulador.
Si d = f, el resultado se almacena en el propio registro f.
Ciclo 1
Formato 00 0011 dfff ffff
Si tenemos un registro DIA = 7.
Aplicando la instruccin
Ejemplo: DECF DIA, 0, tendremos W = 6 y DIA = 7.
Si aplicamos esta otra
DECF DIA, 1, tendremos DIA = 6.
Modifica el bit Z.
Registro STATUS
Z vale 1 si el resultado de la operacin es 0.

Instruccin INCF f,d (hex = 0A ff)


Descripcin Incrementa en 1 el registro f.
d = f + 1 (d puede ser W f).

Esta instruccin incrementa en uno el contenido del registro direccionado


Operacin por el parmetro f. El parmetro d determina el destino del valor
obtenido.
Si d = W, el resultado se almacena en el acumulador.
Si d = f, el resultado se almacena en el propio registro f.
Ciclo 1
Formato 00 1010 dfff ffff
Si tenemos un registro DIA = 7.
Aplicando la instruccin
Ejemplo: INCF DIA, 0, tendremos W = 8 y DIA = 7.
Si aplicamos esta otra
INCF DIA, 1, tendremos DIA = 8.
Modifica el bit Z.
Registro STATUS
Z vale 1 si el resultado de la operacin es 0.

Instruccin IORWF f,d (hex = 04 ff)


Descripcin Operacin lgica OR inclusivo entre el acumulador y un registro
d = W OR f (d puede ser W f).

Esta instruccin realiza una operacin lgica OR inclusivo entre el


acumulador W y el registro direccionado por el parmetro f. El
Operacin parmetro d determina donde se almacenar el resultado de la operacin.
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.
Tambin se puede indicar directamente W f.
Ciclo 1
Formato 00 0100 dfff ffff
Si asignamos los valores W = 10101010B y f = 01010101B.
IORWF f; W = 10101010B y f = 11111111B.
Ejemplo: IORWF f, 1; W = 10101010B y f = 11111111B.
IORWF f, 0; f = 01010101B y W = 11111111B.
IORWF f, W; f = 01010101B y W = 11111111B.
Modifica el bit Z.
Registro STATUS
Z vale 1 si el resultado de la operacin es 0.

Instruccin MOVF f,d, (hex = 08 ff)


Descripcin Mueve el contenido de f al acumulador o al propio registro f.
d = f (d puede ser W f).

Esta instruccin copia el contenido del registro direccionado por el


parmetro f en el acumulador W o en el mismo registro f. El
parmetro d determina el destino.
Operacin 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.
Tambin se puede indicar directamente W f.
El motivo para copiar el contenido de un registro sobre si mismo, no es otro
que poder comprobar en el registro STATUS el estado del bit Z.
Ciclo 1
Formato 00 1000 dfff ffff
Si tenemos el registro EDAD = 38.
MOVF EDAD, 0; hace que W = 38.
Ejemplo:
MOVF EDAD, 1; hace que EDAD = 38.
MOVF EDAD, W; hace que W = 38.
MOVF EDAD; hace que EDAD = 38.
Modifica el bit Z.
Registro STATUS
Z vale 1 si el resultado de la operacin es 0.

Instruccin MOVWF f (hex = 00 8f)


Descripcin Mueve el contenido de W al registro f.
f = W.
Operacin
Esta instruccin copia el contenido del acumulador W en el registro
direccionado por el parmetro f.
Ciclo 1
Formato 00 0000 1fff ffff
Si queremos escribir el valor 10H en el registro TMR0, que est situado en
la direccin 01H, tendremos que cargar primero el valor en el acumulador
y despus copiarlo al registro.
MOVWF 10H; cargar el valor 10H en el acumulador.
MOVWF 01H; copia el acumulador en la direccin 01H.
Ejemplo:
Con los registros utilizados por el PIC para funciones especficas, es habitual
no escribir directamente su direccin, sino el nombre simblico definido en
el fichero PIC16F84.INC. En el ejemplo anterior nos quedara as:
MOVWF 10H; cargar el valor 10H en el acumulador.
MOVWF TMR0; copia el acumulador en el registro TMR0.
Registro STATUS No modifica ningn bit de estado.

Instruccin NOP (hex = 00 00)


Descripcin No opera.
----

Operacin Esta instruccin no realiza ninguna funcin especfica, pero consume 4


ciclos de reloj completos. Es til para insertar un retardo igual a un ciclo
de mquina.
Ciclo 1
Formato 00 0000 0xx0 0000
Utilizando un cristal de cuarzo de 4 Mhz. en el oscilador, podremos obtener
un retardo igual a un microsegundo por cada instruccin NOP que
insertemos en el cdigo del programa:
RETARDO NOP
Ejemplo: NOP
NOP
RETURN
Cada vez que llamemos a la subrutina RETARDO, obtendremos 3
microsegundos de demora.
Registro STATUS No modifica ningn bit de estado.

Instruccin RLF f,d (hex = 0D ff)


Descripcin Rota a la izquierda el registro f.
d = << 1 (d puede ser W f).

Esta instruccin rota a la izquierda todos los bits del registro direccionado
en el parmetro f pasando por el bit CARRY del registro STATUS (o si se
prefiere, desde los bits menos significativos a los ms significativos).
Es como si multiplicramos por dos el contenido del registro.
Operacin El D7 pasa al CARRY del registro STATUS, el contenido del CARRY pasa al
D0, el D0 al D1, etc.
El parmetro d determina el destino.
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.
Tambin se puede indicar directamente W f.
Ciclo 1
Formato 00 1101 dfff ffff
Si tenemos el registro VALOR = 00000001B y aplicamos la instruccin
RLF VALOR
El resultado ser VALOR = 00000010B y el bit C = 0.
Ejemplo:
Si tenemos el registro VALOR = 10000000B y aplicamos la instruccin
RLF VALOR
El resultado ser VALOR = 00000000B y el bit C = 1.
Registro STATUS Modifica el bit C (CARRY).

Instruccin RRF f,d (hex = 0C ff)


Descripcin Rota a la derecha el registro f.
d = f >> 1 (d puede ser W f).

Esta instruccin rota a la derecha todos los bits del registro direccionado en
el parmetro f pasando por el bit CARRY del registro STATUS (o si se
prefiere, desde los bits ms significativos a los menos significativos).
Es como si dividiramos por dos el contenido del registro.
Operacin
El bit C del registro STATUS pasa al D7, el D0 pasa al bit C, el D1 al D0, etc.
El parmetro d determina el destino.
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.
Tambin se puede indicar directamente W f.
Ciclo 1
Formato 00 1100 dfff ffff
Si tenemos el registro VALOR = 00000001B y aplicamos la instruccin
RRF VALOR
El resultado ser VALOR = 00000000B y el bit C = 1.
Ejemplo:
Si tenemos el registro VALOR = 10000000B y aplicamos la instruccin
RRF VALOR
El resultado ser VALOR = 01000000B y el bit C = 0.
Registro STATUS Modifica el bit C (CARRY).

Instruccin SUBWF f,d (hex = 02 ff)


Descripcin Resta el acumulador del registro f.
d = f W (d puede ser W f).

Esta instruccin resta el valor contenido en el acumulador W del valor


contenido en el registro direccionado por el parmetro f. El parmetro d
Operacin determina el destino.
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.
Tambin se puede indicar directamente W f.
Ciclo 1
Formato 00 0010 dfff ffff
Segn sean los valores de W y el registro DATO, si aplicamos
SUBWF DATO, obtendremos diferentes resultados en el bit CARRY.
Si DATO = 3 y W = 2; el resultado ser DATO = 1 y C = 1.
Ejemplo: Si DATO = 2 y W = 2; el resultado ser DATO = 0 y C = 1.
Si DATO = 1 y W = 2; el resultado ser DATO = FFH y C = 0.
Vemos que C = 1 porque el resultado es positivo y C = 0 cuando el resultado
es negativo.
Modifica los bits Z, DC y C.
Z vale 1 si el resultado de la operacin es 0.
DC vale 1 si el resultado de la operacin es un nmero superior a 15.
Registro STATUS
C vale 1 si el resultado de la operacin es positivo o el bit 7 del
registro que contiene el resultado vale 0. En caso contrario C vale 0
(resultado negativo).

Instruccin SWAPF f,d (hex = 0E ff)


Descripcin Intercambia los 4 bits ms significativos con los 4 menos (nibbles)
f = 0123 SWAP 4567 de f.

Esta instruccin intercambia el valor de los 4 bits ms significativos (D7-


D4) contenidos en el registro direccionado por el parmetro f, con los 4
bits menos significativos (D3-D0) del mismo. El parmetro d determina el
Operacin
destino.
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.
Tambin se puede indicar directamente W f.
Ciclo 1
Formato 00 1110 dfff ffff
Si tenemos VALOR = 00001111B y W = 00000000B, al aplicar
SWAPF VALOR; VALOR = 11110000B y W = 00000000B.
SWAPF VALOR, W; VALOR = 00001111B y W = 11110000B.
Ejemplo:
Con la primera instruccin modificamos el valor del registro DATO, y en la
segunda instruccin modificamos el valor del acumulador sin que vare el
registro DATO
Registro STATUS No modifica ningn bit de estado.
Instruccin XORWF f,d (hex = 06 ff)
Descripcin Operacin lgica XOR entre el acumulador y f.
d = f XOR W (d puede ser W f).

Esta instruccin efecta la operacin lgica XOR (OR exclusivo) entre el


valor contenido en el acumulador W y el valor contenido en el registro
Operacin direccionado por el parmetro f. El parmetro d determina el destino.
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.
Tambin se puede indicar directamente W f.
Ciclo 1
Formato 00 0110 dfff ffff
Si tenemos el registro VALOR = 11110000B y W = 11111111B, al aplicar la
instruccin
XORWF VALOR; hace VALOR = 00001111B y W no vara.
XORWF VALOR, W; hace W = 00001111B y VALOR no vara.
Explicacin de la operacin XOR:
Tenemos 4 posibles combinaciones entre dos bits
0 XOR 0 = 0
0 XOR 1 = 1
1 XOR 0 = 1
1 XOR 1 = 0
Ejemplo: Vemos que si ambos bits son iguales el resultado ser 0. Y si ambos son
diferentes, el resultado ser 1. Esta instruccin compara dos bytes, bit a bit.
Esto nos sirve para comparar dos valores y comprobar si son iguales o no.
Supongamos que tenemos el registro NUMERO y queremos comprobar si es
igual a 26H.
Tendramos que efectuar las siguientes instrucciones:
MOVLW 26H; carga el acumulador con el valor a comparar.
XORWF NUMERO, W; compara el acumulador con NUMERO.
BTFSS STATUS, Z; salta la instruccin siguiente si XOR = 0.
GOTO DISTINTO; salta a DISTINTO si XOR no es 0.
GOTO IGUAL; salta a IGUAL.
Modifica el bit Z.
Registro STATUS
Z vale 1 si el resultado de la operacin es 0.

INSTRUCCIONES PARA MANEJO DE BITS:

Instruccin BCF f,b (hex = 1B ff)


Descripcin Pone a cero el bit b del registro f.
F(b) = 0
Operacin
Esta instruccin pone a cero un bit que hayamos elegido de un registro
determinado.
Ciclo 1
Formato 01 00bb bfff ffff
BCF PORTA, RA4 ; pone a 0 el bit RA4 del registro PORTA
BCF PORTA, 4 ; igual, si no conocemos en nombre del bit
Ejemplo:
Si en el PORTA tenemos como valor inicial 11111111B, despus de aplicar
el ejemplo anterior, PORTA = 11101111B.
Registro STATUS No modifica ningn bit de estado.

Instruccin BSF f,b (hex = 1B ff)


Descripcin Pone a uno el bit b del registro f.
F(b) = 1
Operacin
Esta instruccin pone a uno un bit que hayamos elegido de un registro
determinado.
Ciclo 1
Formato 01 01bb bfff ffff
BSF PORTA, RA0 ; pone a 1 el bit RA0 del registro PORTA
BSF PORTA, 0 ; igual, si no conocemos en nombre del bit
Ejemplo:
Si en el PORTA tenemos como valor inicial 00000000B, despus de aplicar
el ejemplo anterior, PORTA = 00000001B.
Registro STATUS No modifica ningn bit de estado.

INSTRUCCIONES DE CONTROL Y MANEJO DE LITERALES O INMEDIATOS (NUMRICOS):

Instruccin ADDLW k (hex = 3E kk)


Descripcin Sumar al acumulador el valor k.
W=W+k
Operacin
Esta instruccin suma un valor de un literal al contenido del registro W y
lo guarda en W.
Ciclo 1
Formato 11 111x kkkk kkkk
MOVLW 3; carga el acumulador W con el valor 3.
Ejemplo: ADDLW 1; suma 1 al acumulador.
Al final el acumulador tendr el valor 4.
Modifica los bits Z, DC y C.
Z vale 1 si el resultado de la operacin es 0.
DC vale 1 si el resultado de la operacin es un nmero superior a 15.
Registro STATUS
C vale 1 si el resultado de la operacin es positivo o el bit 7 del
registro que contiene el resultado vale 0. En caso contrario C vale 0
(resultado negativo).

Instruccin ANDLW k (hex = 39 kk)


Descripcin Operacin lgica AND entre el acumulador W y el literal k
W = W AND k
Operacin
Esta instruccin realiza una operacin lgica AND entre el contenido de W
y k. El resultado se guarda siempre en el acumulador W
Ciclo 1
Formato 11 1001 kkkk kkkk
Si cargamos el acumulador con el binario 10101010B y hacemos un AND
con el binario 11110000B, nos quedar el resultado de la operacin en el
acumulador W.
MOVLW 10101010B
ANDLW 11110000B
El resultado de la operacin queda en W = 10100000B.
Explicacin de la operacin AND:
Ejemplo:
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, el resultado ser
1. Esta instruccin compara dos bytes, bit a bit.
Modifica el bit Z.
Registro STATUS
Z vale 1 si el resultado de la operacin es 0.

Instruccin IORLW k (hex = 38 kk)


Descripcin Operacin lgica OR entre el acumulador W y el literal k
W = W OR k

Operacin Esta instruccin realiza un OR inclusivo entre el contenido del acumulador


W y el literal k. El resultado se guarda siempre en el acumulador (k es
un valor, no un registro).
Ciclo 1
Formato 11 1000 kkkk kkkk
Si cargamos el acumulador con el binario 11110000B y k= 00001111B, nos
quedar el resultado de la operacin en el acumulador W.
MOVLW 11110000B
IORLW 00001111B
El resultado de la operacin queda en W = 11111111B.
Explicacin de la operacin OR:
Ejemplo: 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, el resultado ser
0. Esta instruccin compara dos bytes, bit a bit.
Modifica el bit Z.
Registro STATUS
Z vale 1 si el resultado de la operacin es 0.

Instruccin SUBLW k (hex = 3C kk)


Descripcin Resta al literal k el valor del acumulador.
W=kW
Operacin
Esta instruccin resta al literal k el valor almacenado en el acumulador
W y el resultado se guarda en el acumulador.
Ciclo 1
Formato 11 110x kkkk kkkk
MOVLW 10; carga el acumulador W con el valor 10.
Ejemplo: SUBLW 15; resta a 15 el valor del acumulador.
Al final el acumulador tendr el valor W = 5.
Modifica los bits Z, DC y C.
Z vale 1 si el resultado de la operacin es 0.
DC vale 1 si el resultado de la operacin es un nmero superior a 15.
Registro STATUS
C vale 1 si el resultado de la operacin es positivo o el bit 7 del
registro que contiene el resultado vale 0. En caso contrario C vale 0
(resultado negativo).

Instruccin MOVLW k (hex = 30 kk)


Descripcin Mover el literal k al acumulador.
W=k
Operacin
Esta instruccin asigna al acumulador W el valor del literal k (entre 0 y
255).
Ciclo 1
Formato 11 00xx kkkk kkkk
Si tenemos el acumulador a cero o con cualquier valor, y queremos que
contenga el que le asignemos nosotros directamente entonces usaremos
esta instruccin:
W = 0.
Valor a asignar = 100.
Ejemplo: Instruccin: MOVLW 100
El acumulador valdr 100 (W = 100).
Con distinto valor de partida del acumulador:
W = 225.
MOVLW 100
El acumulador valdr 100 (W = 100).
Registro STATUS No modifica ningn bit de estado.

Instruccin XORLW k (hex = 3A kk)


Descripcin Operacin lgica OR exclusivo entre el acumulador y el literal k
W = W XOR k

Operacin Esta instruccin realiza un OR exclusivo entre el contenido del acumulador


W y el valor del literal k. El resultado se guarda siempre en el acumulador
(k es un literal, no un registro).
Ciclo 1
Formato 11 1010 kkkk kkkk
Si cargamos el acumulador con el binario 11110000B y hacemos un XOR
con el binario 10101010B, nos quedar el resultado de la operacin en el
acumulador W.
MOVLW 11110000B
XORLW 10101010B
Ejemplo:
El resultado de la operacin queda en W = 01011010B.
Explicacin de la operacin 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. Y si ambos son
diferentes, el resultado ser 1. Esta instruccin compara dos bytes, bit a bit.
Modifica el bit Z.
Registro STATUS
Z vale 1 si el resultado de la operacin es 0.

INSTRUCCIONES DE SALTO:

Instruccin BTFSC f,b (hex = 1B ff)


Comprueba un bit b del registro f y se salta la instruccin siguiente si
Descripcin
vale 0.
F (b) = 0? SI, salta una instruccin

Operacin Esta instruccin comprueba el valor del bit b en el registro f, y si b = 0


entonces se salta la siguiente instruccin.
Si b = 1 no salta y sigue con su ejecucin normal.
Ciclo 1(2)
Formato 01 10bb bbff ffff
BTFSC PORTA, 2
INSTRUCCIN 1
INSTRUCCIN 2
Ejemplo: Si en PORTA tenemos como valor inicial 11111011B, el programa contina
con la instruccin 2, saltndose la instruccin 1
Si en PORTA tenemos el valor 00000100B, el programa sigue con la
instruccin 1 y despus la instruccin 2.
Registro STATUS No modifica ningn bit de estado.

Instruccin BTFSS f,b (hex = 1B ff)


Comprueba un bit b del registro f y se salta la instruccin siguiente si
Descripcin
vale 1.
F (b) = 1? SI, salta una instruccin.

Operacin Esta instruccin comprueba el valor del bit b en el registro f, y si b = 1


entonces se salta la siguiente instruccin.
Si b = 0 no salta y sigue con su ejecucin normal.
Ciclo 1(2)
Formato 01 11bb bbff ffff
BTFSS PORTB, 7
INSTRUCCIN 1
INSTRUCCIN 2
Ejemplo: Si en PORTB tenemos como valor inicial 10000000B, el programa contina
con la instruccin 2, saltndose la instruccin 1.
Si en PORTB tenemos el valor 01111111B, el programa sigue con la
instruccin 1 y despus la instruccin 2.
Registro STATUS No modifica ningn bit de estado.

Instruccin DECFSZ f,d (hex = 0B ff)


Descripcin Decrementa en 1 a f, y si f = 0 salta la siguiente instruccin.
d = f 1, si d = 0 SALTA (d puede ser W f).

Esta instruccin decrementa el contenido del registro direccionado por el


Operacin parmetro f, y si el resultado es 0 se salta la instruccin siguiente. El
parmetro d determina el destino del valor obtenido.
Si d = W, el resultado se almacena en el acumulador.
Si d = f, el resultado se almacena en el propio registro f.
Ciclo 1(2)
Formato 00 1011 bbff ffff
DECFSZ VALOR, W
INSTRUCCION 1
INSTRUCCIN 2
Si el contenido del registro VALOR al decrementarlo en 1 es igual a 0, se
Ejemplo:
guarda el resultado en el acumulador y sigue con la INSTRUCCION2,
saltndose la INSTRUCCION1.
Si el resultado que guardamos en W no es 0, sigue con la INSTRUCCION1 y
despus con la INSTRUCCION2 (no se salta la inmediata siguiente).
Registro STATUS No modifica ningn bit de estado.

Instruccin INCFSZ f,d (hex = 0F ff)


Descripcin Incrementa en 1 a f, y si f = 0 salta la siguiente instruccin
d = f + 1, si d = 0 SALTA (d puede ser W f).

Esta instruccin incrementa en uno el contenido del registro direccionado


Operacin por el parmetro f, y si el resultado es 0 se salta la instruccin siguiente. El
parmetro d determina el destino del valor obtenido.
Si d = W, el resultado se almacena en el acumulador.
Si d = f, el resultado se almacena en el propio registro f.
Ciclo 1(2)
Formato 00 1111 bfff ffff
INCFSZ VALOR, W
INSTRUCCION 1
INSTRUCCIN 2
Si el contenido del registro VALOR al incrementarlo en 1 es igual a 0, se
Ejemplo
guarda el resultado en el acumulador y sigue con la INSTRUCCION2,
saltndose la INSTRUCCION1.
Si el resultado que guardamos en W no es 0, sigue con la INSTRUCCION1 y
despus con la INSTRUCCION2 (no se salta la inmediata siguiente).
Registro STATUS No modifica ningn bit de estado.

INSTRUCCIONES DE CONTROL Y ESPECIAL:

Instruccin CALL k (hex = 2k kk)


Descripcin Llama a una subrutina en la direccin k.
CALL kRETURN PC+1.

Operacin Esta instruccin llama a un grupo de instrucciones (subrutina) que


comienzan en la direccin k, donde k puede ser un valor numrico o una
etiqueta. Siempre termina con la instruccin de retorno (RETURN o
RETLW).
Definicin 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.
Utilidad: sirven para utilizarlas varias veces en cualquier parte del
programa, sin necesidad de tener que copiar las mismas instrucciones, con
el consiguiente ahorro de memoria.
Funcionamiento: cuando un programa ejecuta una instruccin CALL,
guarda en el stack el valor del registro PC+1 (PC = Program Counter) de
manera que al regresar de la subrutina contina con la instruccin siguiente
recuperndola del stack, ejecutando la instruccin de retorno RETURN o
RETLW.
Limitaciones: en el PIC16F84 tenemos disponibles 8 niveles de stack, por
lo que el nmero mximo de CALL reentrantes (instrucciones CALL que
contengan otra instruccin CALL) queda limitado a 8.
Ciclo 2
Formato 10 0kkk kkkkk kkkk
PRINCIPAL: etiqueta que identifica una direccin de memoria.
RETARDO: etiqueta que identifica el comienzo de una subrutina.
BUCLE: etiqueta que identifica una direccin de memoria.
PRINCIPAL CALL RETARDO
BTFSC PORTB, RB0
GOTO PRINCIPAL
*
*
Ejemplo:
*
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 instruccin siguiente al salto (BTFSC).
Registro STATUS No modifica ningn bit de estado

Instruccin CLRWDT (hex = 00 64)


Descripcin Pone el temporizador WDT a cero
WDT = 0

Esta instruccin se utiliza cuando programamos el PIC con la opcin Watch


Operacin Dog habilitada. Para evitar el reset del PIC, el programa debe contener
cclicamente la instruccin CLRWDT para ponerlo a cero. Si no se pone a
cero a tiempo, el WDT interpretar que se ha bloqueado el programa y
ejecutar un reset para desbloquearlo.
Ciclo 1
Formato 00 0000 0110 0100
Bucle CLRWDT
*
Ejemplo: *
*
GOTO Bucle
Registro STATUS No modifica ningn bit de estado.

Instruccin GOTO k (hex = 28 kk)


Descripcin Salto incondicional a k.
Salto k
Operacin
Esta instruccin ejecuta un salto del programa a la direccin k. El
parmetro k puede ser un valor numrico o una etiqueta.
Ciclo 2
Formato 10 1kkk kkkk kkkk
INSTRUCCIN 1
GOTO ABAJO
INSTRUCCIN 3
INSTRUCCIN 4
Ejemplo:
INSTRUCCIN 5
ABAJO INSTRUCCIN 6
Primero se ejecuta la instruccin 1, despus GOTO y contina con la
instruccin 6 saltndose las instrucciones 3, 4 y 5.
Registro STATUS No modifica ningn bit de estado.

Instruccin RETFIE (hex = 00 09)


Descripcin Retorna de una interrupcin.
FIN INTERRUPCION.
Operacin
Esta instruccin devuelve el control al programa principal despus de
ejecutarse una subrutina de gestin de interrupcin.
Ciclo 2
Formato 00 0000 0000 (00)
ORG 00H
BUCLE GOTO BUCLE; bucle infinito.
ORG 04H; vector de interrupcin.
RETFIE ; retorna de la interrupcin
Este cdigo de programa ejecuta un bucle infinito. Si habilitamos una de las
interrupciones del 16F84, en cuanto sta se produzca pasar el control al
Ejemplo: programa situado en la direccin 04H y la instruccin RETFIE regresa de la
interrupcin.
Al ejecutarse una interrupcin, el bit GIE del registro INTCON se pone a 0 y
as evita que otra interrupcin se produzca mientras ya est con una en
marcha.
Con la instruccin RETFIE ponemos de nuevo el bit GIE a 1 para as atender
de nuevo a futuras interrupciones.
Registro STATUS No modifica ningn bit de estado.

Instruccin RETLW (hex = 34 kk)


Descripcin Retorno de subrutina y carga literal k en el acumulador.
RETORNO con W = k.
Operacin
Esta instruccin retorna de una subrutina al programa principal, cargando
el acumulador W con el literal k.
Es la ltima instruccin que forma una subrutina (al igual que RETURN).
Y para qu me sirve regresar de una subrutina con un determinado literal
en el acumulador? Nos ser muy til al programar con TABLAS.
Ciclo 2
Formato 11 01xx kkkk kkkk
CALL SUBRUT1; llama a Subrut1.
MOVWF DATO 1; carga W en Dato1.
CALL SUBRUT2; llama a Subrut2.
MOVWF DATO2; carga W en Dato2.
Ejemplo:
*
*
SUBRUT1 RETLW 0A; carga W = 0A y retorna.
SUBRUT2 RETLW 0B; carga W = 0B y retorna.
Registro STATUS No modifica ningn bit de estado.

Instruccin RETURN (hex = 00 08)


Descripcin Retorno de subrutina.
RETORNO.

Esta instruccin retorna de una subrutina al programa principal en la


Operacin
instruccin siguiente a la llamada de la subrutina, tomando el valor
almacenado en el stack para continuar.
Es la ltima instruccin que forma una subrutina (al igual que RETLW).
Ciclo 2
Formato 00 0000 0000 1000
CALL COMPARA; llama a Compara.
INSTRUCCION1
INSTRUCCION2
*
*
Ejemplo: COMPARA INSTRUCCIN R1
INSTRUCCIN R2
RETURN
Aqu llamamos a la subrutina COMPARA, se ejecutan las instrucciones R1 y
R2 y con el RETURN regresa a la instruccin siguiente al CALL y ejecuta las
instrucciones 1, 2 y sigue con el programa.
Registro STATUS No modifica ningn bit de estado.

Instruccin SLEEP (hex = 00 63)


Descripcin En modo reposo.
EN ESPERA.

Esta instruccin detiene la ejecucin del programa y deja el PIC en modo


suspendido.
Operacin No ejecuta ninguna instruccin hasta que sea nuevamente reinicializado
(reset).
Durante este modo, el contador del Watch Dog (WDT) sigue trabajando, y si
lo tenemos activado el PIC se resetear por este medio.
El consumo de energa es mnimo.
Ciclo 1
Formato 00 0000 0000 1000
Ejemplo:
Registro STATUS No modifica ningn bit de estado.

Instruccin OPTION (hex = 00 62)


Descripcin Guarda el valor del acumulador en el registro OPTION.
OPTION = W.
Operacin
Esta instruccin guarda en el registro especial OPTION el valor contenido
en el acumulador W.
Ciclo
Formato
MOVLW 10H; carga el acumulador con el valor 10H.
OPTION; carga el registro OPTION con el acumulador.
Esta instruccin existe para mantener la compatibilidad con los PIC
producidos con anterioridad, y como en el futuro podra dejar de
Ejemplo: implementarse, Microchip aconseja realizar el ejemplo anterior de esta otra
forma:
BSF STATUS, RP0; activa el banco 1.
MOVLW 10H; carga el acumulador con 10H.
MOVWF OPTION_REG; carga OPTION con el acumulador.
Registro STATUS No modifica ningn bit de estado.

Instruccin TRIS f (hex = 00 6F)


Descripcin Guarda el acumulador en uno de los registros de TRIS.
TRIS de f = W.

Esta instruccin guarda el valor del acumulador W en uno de los registros


Operacin
especiales de TRIS que indicamos en el parmetro f.
Los registros TRIS determinan el funcionamiento como entrada y salida de
las lneas I/O del PIC.
Ciclo
Formato
MOVLW 16H; carga el acumulador W con el valor 16H.
TRIS PORTA; carga el registro PORTA con el acumulador.
Esta instruccin existe para mantener la compatibilidad con los PIC
producidos anteriormente, y como en el futuro podra dejar de
Ejemplo: implementarse, Microchip aconseja realizar el ejemplo anterior de esta otra
forma (aunque ocupa ms memoria):
BSF STATUS, RP0; activa el banco 1.
MOVLW 16H ; carga el acumulador con el valor 16H
MOVWF TRISA ; carga el registro PORTA con W.
Registro STATUS No modifica ningn bit de estado.

Das könnte Ihnen auch gefallen