Professional Documents
Culture Documents
Set de instrucciones
Para entender mejor cada instruccin se explica a continuacin el significado
de algunos parmetros:
f: Registro al que afecta la instruccin
W: Acumulador (Working register)
b: Nmero de bit (hay instrucciones que afectan a un solo bit)
k: constante (un nmero)
d: seleccin de destino del resultado de la instruccin, 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 instruccin.
Instrucciones orientadas a registros:
ADDWF f,d Suma W y el registro f, el resultado lo guarda segn d (si d=0 se
guarda en W y si d=1 se guarda en f).
ANDWF f,d Realiza la operacin AND lgica entre W y f, el resultado lo guarda
segn 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 segn d.
DECF f,d Decrementa f en uno (le resta uno). Resultado segn d.
DECFSZ f,d Decrementa f y se salta la siguiente instruccin si el resultado es
cero. Resultado segn d.
INCF f,d Incrementa f en uno (le suma uno). Resultado segn d.
INCFSZ f,d Incrementa f y se salta la siguiente instruccin si el resultado es
cero (cuando se desborda un registro vuelve al valor 00h). Resultado segn d.
IORWF f,d Realiza la operacin lgica OR entre W y f. Resultado segn 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)
[Cuntina 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, despus 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 parmetros a los que
afecta la instruccin.
En la cuarta columna se ponen los comentarios que creas pertinentes
(cuantos mas mejor) seguidos de un punto y coma.
NOTA.
1- La palabra Literal significa "NMERO" como el nmero 9 o 16h. El
nmero 16h es un nmero exadecimal y en valores decimales esto representa
el nmero: "veintids".
2- Destino de la instruccin segn el designador OP: Si el bit de cdigo OP de
la instruccin es 0, el destino es W y si es 1, el destino es el registro f, o sea,
se selecciona el destino donde se guarda el resultado de una operacin.
Nota2. Cuando una instruccin termina con W o F, el destino del
resultado ser el registro W o el propio archivo f, se define con el
designador '0' o '1' de la propia instruccin.
0=W
1=F
Por ej.: ADDWF 1F,0 el resultado es almacenado en el registro de
trabajo W.
ADDWF 1F,1 el resultado es almacenado en el mismo registro (F).
Seguidamente se hace una descripcin detallada de las instrucciones que,
son generales para todos los PIC's, adems de las particularidades de cada
instruccin, por orden alfabtico que, presentan para cada micro tanto para el
PIC16F84A como para el PIC12C508A.
; mueve 80h a W
banderas
1010 0010
+ 0100 1111 C DC Z
1111 0001 0 1
0
banderas
1101 0000
+ 0110 1111 C DC Z
0011 1111 1
Primer nmero:
1001 0011 [Nmero en W anterior a la
instruccin ANDLW]
Segundo nmero (F0): 1111 0000 [Nmero L Mscara]
Respuesta al AND:
1001 0000 [Al aplicar la funcin AND entre
ambos] (ANDed)
BCF Esto significa: Bit Clear File (pon a "0" o aclara el bit indicado (detrs
de la coma) en el archivo f ). Ver tambin BSF.
BCF 00 a 1F, bit Hay sobre 300 instrucciones (incluidas en los micros,
trabajando internamente) para esta orden. Hay 79 archivos en el
PIC16F84A, los 13 primeros archivos se llaman Registros de Funcin
Especial (SFR's), el resto (66) se llaman Archivos de Propsito General
(GPR's) del 0Ch a 4Fh. No afecta los bits de STATUS.
BCF se usa para limpiar [clear] un bit (pone a 0 el bit identificado en el
archivo f). Por ej.: BCF 06h,5 significa que el bit 5 del archivo 06 debe ser
puesto a "0" (aclarado), el resto de bits no se influyen. Ver figura de la
derecha. El archivo 6 contiene lneas de E/S comnmente se llaman I/O del
puerto.
BTFSC Esto significa: Bit Test, Skip if Clear ( Bit de Test, Salta si es "0").
BTFSC 00 a 1F, bit Hay casi 300 instrucciones para esta orden, para
cubrir los 79 archivos, cada uno con 8 bits. BTFSC significa, comprobar el
bit identificado en el registro llamado y si es 0 saltar una instruccin (no
ejecuta la instruccin que sigue). No afecta los bits de STATUS.
Se ve mejor con un ejemplo: BTFSC 06h,4 es la forma de comprobar si el
bit 4 en el archivo 6 es "0", si es cero, salta la prxima instruccin (pasar sin
ejecutar) y continuar con la posterior.
Etiqueta: BTFSC 06h,4
; comprueba si el bit 4 es 0
GOTO Etiqueta2 ; si no es 0, salta hasta Etiqueta2
CALL Dlay
; si es 0, llama a subrutina Dlay.
BTFSS Esto significa: Bit Test, Skip if Set (Bit de Test, Salta si es "1").
BTFSS 00 a 1F, bit Tambin hay casi 300 instrucciones para esta orden,
para cubrir los 79 (4Fh) archivos, cada uno con 8 bits. BTFSS significa,
comprobar el bit identificado en el registro llamado y salta la prxima
instruccin si es 1. No afecta los bits de STATUS.
En BTFSS 3,2 comprobamos el bit 2 del registro 3 y si dicho bit es 1, salta
la prxima instruccin, si no, continua con la siguiente.
Etiqueta: BTFSS 03h,2
GOTO Etiqueta2
CALL Dlay
a esta instruccin y sigue.
; comprueba si el bit 2 es 1
; si no, va a Etiqueta2
; si es 1, llama a subrutina Dlay para seguir. ; si es 1 viene
CALL Etiqueta Los programas deberan ser escritos de forma que las
pocas primeras instrucciones pongan al micro en
el Inicio de Programa Principal. El "Programa Principal" se localizar
fsicamente al final del listado y ste puede estar en el final de la memoria o a
mitad del camino, si el programa es aproximadamente 250 bytes de largo.
Despus de las primeras instrucciones que llevan al micro a: GOTO Inicio,
se colocan todas las subrutinas necesarias para el programa. Con una
CLRF Esto significa: Clear f [Limpia f] (poner a 0 los 8 bits del archivo f)
CLRF 00 a 1F El contenido de un archivo se pone a 0 (Clear) y el
bit Z del registro STATUS es puesto a 1, esto es, los ocho bits se ponen a
"0". Por esto hay que tener en cuenta el bit Z (cero, flag Z). Los 12 primeros
archivos son SRF's y los siguientes 68, del 07h al 4Fh son los
llamados GPR's.
WDT
WDT prescaler,
TO
PD
RETFIE Esto significa: Cuando hay una interrupcin, RETURN con valor
de lo alto de la Pila y lo deja en el PC.
RETFIE Carga el PC con el valor que se encuentra en la parte superior
de la pila, asegurando as la vuelta de la interrupcin. Pone a 1 el bit GIE,
con el fin de autorizar o habilitar de nuevo que se tengan en cuenta las
interrupciones. TOS PC, 1 GIE. No afecta al registro STATUS.
0
En este caso Reg, antes de la instruccin RRF vala 24 en sistema decimal.
Y despus de la instruccin RRF Reg vale 140. Este error ocurre por que el
bit C de STATUS, en este caso, antes de ejecutar la instruccin RRF vala 1,
el cual al ejecutar la instruccin RRF, ocup el bit7 del registro Reg.
Debemos considerar el motivo para evitar incurrir en este error, difcil de
depurar. Para asegurar una divisin por dos, limpiaremos el bit C del registro
STATUS antes de realizar cualquier instruccin RRF y asegurarnos que el bit
STATUS,C no "corrompa" la divisin.
Ej.: BCF STATUS,C
"corrompe" la divisin
RRF Registro,F
Por la misma lgica rotar dos veces a la derecha un registro equivale a decir
Registro / 2 / 2, lo que simplificado es Registro / 4, y as sucesivamente.
SLEEP Esto significa: SEELP (Dormir, bajo consumo). Pone a 0 el flag PD#
(Power Down) y el flag TO# (Timer Out) se pone a 1. O sea, el bit de estado
de energa-baja es aclarado, el bit de estado de interrupcin es puesto a 1, el
Temporizador Perro Guardin y su preescaler son aclarados (puestos a 0) y el
TRIS 06
Nota: El '508A slo tiene 6 lneas en el puerto y usa slo los 6 bits inferiores. Si
W es 0000 1000 todas las lneas son salida excepto GP3, ya que GP3 slo
puede ser ENTRADA.
Si se requiere usar la instruccin TRIS en un '508A, son necesarias las
siguientes 4 instrucciones:
BSF 03,5
MOVLW 08
MOVWF 06
;Seleccionar pagina 1
;Haga GP3 entrada
;Cargar el archivo TRIS (como estamos en page1, esto no es salida
BCF 03,5
;Seleccionar Page0
port 6)