Microcontrolador PIC16F84

Set de instrucciones

Para entender mejor cada instrucción se explica a continuación el significado de algunos parámetros:

f: Registro al que afecta la instrucción
W: Acumulador (Working register)
b: Número de bit (hay instrucciones que afectan a un solo bit)
k: constante (un número)
d: selección de destino del resultado de la instrucción, puede ser "0" o "1", si es "0" el resultado se guarda en el acumulador (W) y si es "1" se guyarda en el registro f al que afecta la instrucción.

Instrucciones orientadas a registros:

ADDWF f,d Suma W y el registro f, el resultado lo guarda según d (si d=0 se guarda en W y si d=1 se guarda en f).

ANDWF f,d Realiza la operación AND lógica entre W y f, el resultado lo guarda según d.

CLRF f Borra el registro f (pone todos sus bits a cero).

CLRW - Borra el acumulador.

COMF f,d Calcula el complementario del registro f (los bits que estan a "0" los pone a "1" y viceversa. Resultado según d.

DECF f,d Decrementa f en uno (le resta uno). Resultado según d.

DECFSZ f,d Decrementa f y se salta la siguiente instrucción si el resultado es cero. Resultado según d.

INCF f,d Incrementa f en uno (le suma uno). Resultado según d.

INCFSZ f,d Incrementa f y se salta la siguiente instrucción si el resultado es cero (cuando se desborda un registro vuelve al valor 00h). Resultado según d.

IORWF f,d Realiza la operación lógica OR entre W y f. Resultado según d.

MOVF f,d Mueve el contenido del registro f a W si d=0 (si d=1 lo vuelve a poner en el mismo registro)

MOVWF f mueve el valor de W a f. Por ejemplo, si queremos copiar el valor del registro "REG1" al registro "REG2" (ya veremos como ponerles nombres a los registros) escribiremos:

MOVF REG1,0 ;mueve el valor de REG1 a W
MOVWF REG2 ;mueve el valor de W a REG2

Lo que va después del ; son comentarios

NOP - No hace nada, solo pierde el tiempo durante un ciclo.

RLF f,d Rota el registro f hacia la izquierda a través del bit CARRY (todos los bits se mueven un lugar hacia la izquierda, el bit 7 de f pasa al CARRY y el bit CARRY pasa al bit 0 de f). Resultado según d.

RRF f,d Lo mismo que RLF pero hacia la derecha.

SUBWF f,d Resta f y W (f - W). Resultado según d.

SWAPF f,d intercambia los 4 primeros bit de f por los otros cuatro. Resultado según d.

XORWF f,d Realiza la operación lógica XOR (OR exclusiva) entre W y f. Resultado según d.

Instrucciones orientadas a bits:

BCF f,b Pone a "0" el bit b del registro f

BSF f,d Pone a "1" el bit b del registro f

BTFSC f,b Se salta la siguiente instrucción si el bit b del registro f es "0"

BTFSS f,b Se salta la siguiente instrucción si el bit b del registro f es "1"

Instrucciones orientadas a constantes y de control:

ADDLW k Le suma el valor k al acumulador (W).

ANDLW k Operación lógica AND entre W y el valor k (resultado en W).

CALL k Llamada a subrutina cuyo inicio esta en la dirección k

CLRWDT - Borra el registro Watchdog

GOTO k Salta a la dirección k de programa.

IORLW k Operación lógica OR entre W y el valor k (resultado en W)

MOVLW k carga el acumulador con el valor k. Por ejemplo, si queremos cargar el valor 2Ah en el registro "REG1" escribiremos:

MOVLW 2AH ;carga el acumulador con el valor 2Ah
MOVWF REG1 ;mueve el valor de W a "REG1"


RETFIE - Instrucción para volver de la interrupción

RETLW k carga el valor k en W y vuelve de la interrupción

RETURN - vuelve de una subrutina.

SLEEP - El pic pasa a modo de Standby

 

Instrucciones para el ensamblador

Podemos usar para escribir los programas el bloc de notas de Windows, una vez escrito se guarda con extensión .asm para ensamblarlo con el MPASM.

Existen una serie de instrucciones que son para el ensamblador y nos hacen la tarea de programación mas sencilla y mas legible.

EQU: Un ejemplo de esto son las etiquetas, podemos poner un nombre a un registro de memoria, esto se hace mediante la instrucción EQU. Por ejemplo:

VARIABLE1 EQU 0CH

A partir de ahora en lugar de escribir 0CH podemos escribir VARIABLE1. Con EQU también podemos poner nombre a constantes de la misma forma.

#DEFINE: Otra instrucción para el ensamblador que usaremos será la instrucción #DEFINE. Es parecido a EQU, solo que aquí no ponemos etiquetas a un registro, podemos ponerla a una instrucción entera, Por ejemplo:

#DEFINE BANCO1 BSF STATUS,5
#DEFINE BANCO0 BCF STATUS,5

A partir de ahora, cuando escribamos BANCO1 se pondrá a "1" el bit de selección de banco y pasaremos al banco 1, al escribir BANCO0 pasaremos al banco 0

ORG: Indica al ensamblador la dirección (de memoria de programa) donde se guardará la instrucción que vaya a continuación. Por ejemplo:

ORG 00H
CLRF VARIABLE1

La instrucción CLRF está en la dirección de memoria de programa 00H (será la primera instrucción en ser ejecutada por el pic)

END: Se escribe al final del programa para indicar que ya ha acabado. (es obligatorio, si no da error).

Etiquetas a direcciones de Programa: muy útiles para usar con instrucciones CALL (Llamada a subrutina) o GOTO (Salto). Por ejemplo:

.........
[Hay programa anterior]
.........
BTFSC VARIABLE1,0 ;Si el bit 0 de VARIABLE1 es "0" se salta la siguiente instrucción
GOTO ESUNO ;Salta a ESUNO solo si el bit 0 de VARIABLE1 es "1" BSF VARIABLE1,0 Si el bit 0 de VARIABLE1 es 0 se ejecuta esta instrucción y el programa sigue por aquí
............
[Continúa el programa]
............
ESUNO ;Etiqueta a una dirección de programa
BCF VARIABLE1,0 ;Si el bit 0 de VARIABLE1 es "1" se ejecuta esta otra instrucción y el programa sigue por aquí
......
[Cuntinúa el programa]
......

Un poco de orden:

Es importante llevar un poco de orden a la hora de escribir el programa, nos ayudará mucho:

Al principio van los EQU y los #DEFINE, después comenzamos con el programa.

El programa se escribe en cuatro columnas separadas por tabuladores:

En la primera columna se ponen las etiquetas a direcciones de programa
En la segunda columna se ponen las instrucciones (BSF, CLRF, BTFSC... etc.)
En la tercera columna se ponen Los registros o parámetros a los que afecta la instrucción.
En la cuarta columna se ponen los comentarios que creas pertinentes (cuantos mas mejor) seguidos de un punto y coma.

Para mas información acá está el manual del pic en ingles

Gentileza de Carlos Diaz de España



 

 

 
Para mas información escríbanos o ingrese a nuestro foro..