|
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
|