Professional Documents
Culture Documents
1
Set de instrucciones del PIC16F87x
7 BTFSC f,b Bit Test f, Skip if Clear f(b) = 0 ? Si, salta la siguiente instrucción
8 BTFSS f,b Bit Test f, skip if Set f(b) = 1 ? Si, salta la siguiente instrucción
28 RLF f,d Rotale Left f through Carry d = f << 1 (donde d puede ser W ó f)
29 RRF f,d Rotale Right f through Carry d = f >> 1 (donde d puede ser W ó f)
2
1. ADDLW
Sintaxis:
addlw k
Operación equivalente:
W=W+k
Descripción:
Ejemplo:
org 00H
start
movlw 10
addlw 12
...
Nota:
3
2. ADDWF
Sintaxis:
addwf f,d
Operación equivalente:
Descripción:
Esta instrucción suma el valor contenido en el acumulador W con el valor contenido en el registro
direccionado por el parametro f. El parametro d es un flag que indica en que registro debe ser almacenado el
resultado.
Ejemplo:
org 00H
Nota:
4
3. ANDLW
Sintaxis:
andlw k
Operación equivalente:
W = W AND k
Descripción:
Efectua la operación AND entre el valor contenido en el acumulador W y el valor costante k. El resultado
queda almacenado en el acumulador.
Ejemplo:
org 00H
start
movlw 10101010B
andlw 11110000B
...
Nota:
5
4. ANDWF
Sintaxis:
andwf f,d
Operación equivalente:
Descripción:
Esta instrucción efectua la operación AND logica entre el valor contenido en el acumulador W y el valor
contenido en el registro direccionado por el parametro f. El parametro d es un flag que indica en que
registro debe ser almacenado el resultado.
Ejemplo:
A menudo la operación AND logica se utiliza para enmascarar el valor de algunos bits dentro de un
registro. Si por ejemplo quisieramos extraer del numero binario 01010101B los cuatro bits menos
significativos a fin de obtener el valor 00000101B, bastará preparar una máscara con el valor 00001111B y
hacer la operación AND con el valor de partida, veamos como:
W = 00001111 AND
f = 01010101 =
----------------
W = 0000010101
La instrucción ANDWF modifica el bit Z del registro STATUS que valdrá 1 si el resultado de la operación
es 0.
6
5. BCF
Sintaxis:
bcf f,b
Operación equivalente:
f(b) = 0
Descripción:
Ejemplo:
org 00H
Nota:
7
6. BSF
Sintaxis:
bsf f,b
Operación equivalente:
f(b) = 1
Descripción:
Ejemplo:
org 00H
Nota:
8
7. BTFSC
Sintaxis:
btfsc f,d
Operación equivalente:
Descripción:
Comprueba el valor del bit b contenido en el registro direccionado por f y se salta la instrucción siguiente si
vale 0.
Ejemplo:
org 00H
por la instrucción:
Nota:
9
8. BTFSS
Sintaxis:
btfss f,d
Operación equivalente:
Descripción:
Comprueba el valor del bit b contenido en el registro direccionado por f y se salta la instrucción siguiente si
vale 1.
Ejemplo:
org 00H
por la instrucción:
Nota:
10
9. CALL
Sintaxis:
call k
Descripción:
Llama a una subrutina almacendada en la dirección k.El parametro k puede ser directamente el valor
numerico de la dirección ó una etiqueta relativa.
Ejemplo:
org 00H
call ledOn
...
;Subrutina de encendido de un led
ledOn
bsf PORTB,LED1
return
Cuando la CPU del PIC encuentra una instrucción CALL, guarda en el STACK el valor del registro PC + 1
de modo que puede proseguir la ejecución de la instrucción siguiente a CALL a la vuelta de la subrutina,
luego escribe en el PC la dirección de la subrutina saltando a la ejecución de esta ultima.
El valor original del PC es restaurado a la salida de la subrutina con la ejecución de la instrucción de retorno
RETURN o RETLW.
En el PIC16F84 hay disponibles 8 niveles de stack, por lo que el numero maximo de CALL rentrantes, ó de
instrucciones CALL dentro de una subrutina que a su vez contengan otra CALL, está limitado a 8 niveles.
Nota:
11
10. CLRF
Sintaxis:
clrf f
Operación equivalente:
f=0
Descripción:
Esta instrucción pone a cero el valor contenido en el registro direccionado por el parametro f.
Ejemplo:
Supongamos que queremos poner a cero el registro TMR0 cuya dirección es 01H Hexadecimal, la
instrucción a utilizar será:
clrf 01H
O, si se incluye al inicio de nuestro codigo fuente el fichero P16F84.INC, podremos utilizar el nombre
simbolico del registro TMR0.
clrf TMR0
12
11. CLRW
Sintaxis:
clrw
Operación equivalente:
W=0
Descripción:
Nota:
13
12. CLRWDT
Sintaxis:
clrwdt
Descripción:
Esta instrucción debe ser utilizada cuando programamos el PIC con la opción Watchdog habilitada (bit
WDTE). En esta modalidad el PIC habilita un timer que, una vez trascurrido un determinado tiempo,
efectua un reset del PIC. Para evitar el reset nuestro programa deberá contener ciclicamente la instrucción
CLRWDT para poner a cero este timer antes de dicho tiempo. Si no se pone a cero el timer a tiempo, la
circuiteria del watchdog (del ingles perro guardian) interpretará esto como un bloqueo del programa en
ejecución y efectuará el reset para desbloquearlo.
Ejemplo:
org 00H
loop
clrwdt
goto loop
Nota:
14
13. COMF
COMF COMplement F
Efectua el complemento del registro F
Sintaxis:
comf f,d
Operación equivalente:
Descripción:
Esta instrucción efectua el complemento del valor contenido en el registro direccionado por el parametro f.
El parametro d determina el destino del valor obtenido.
Ejemplo:
org 00H
movlw 01010101B
movwf parm1
comf parm1,F
...
Despues de la ejecución del programa el valor del registro parm1 será 10101010B.
Nota:
15
14. DECF
Sintaxis:
decf f,d
Operación equivalente:
Descripción:
Esta instrucción decrementa el contenido del registro direccionado por el parametro f. El parametro d es un
flag que indica en que registro debe ser almacenado el resultado.
Ejemplo:
Con el siguiente programa escribimos el valor 23H en el registro con dirección 20H y luego decrementamos
su valor en uno. Al final de la ejecución el registro en la posición 20H contendrá el valor 22H.
Nota:
16
15. DECFSZ
Sintaxis:
decfsz f,b
Operación equivalente:
Descripción:
Decrementa el valor del registro direccionado por f y si el resultado vale cero se salta la instrucción
siguiente. El resultado del decremento puede ser almacenado en el mismo registro f, ó en el acumulador W
dependiendo del valor del flag d.
Ejemplo:
org 00H
movlw 10 ;counter = 10
movwf counter
loop
decfsz counter,F ;counter = counter -1
;counter = 0 ? Si, entonces salta
goto loop ;No, continua
Este programa ejecuta 10 veces la instrucción decfsz hasta que sale cuando counter=0.
Nota:
17
16. GOTO
GOTO GO TO address
Salta a ejecutar el programa a partir de la dirección k
Sintaxis:
goto k
Descripción:
Ejecuta un salto del programa en ejecución a la dirección k. El parametro k puede ser specificado utilizando
directamente el valor numerico de la dirección ó una etiqueta relativa.
Ejemplo:
org 00H
loop
goto loop
Nota:
18
17. INCF
INCF INCrement F
Incrementa el valor del registro direccionado por F
Sintaxis:
incf f,d
Operación equivalente:
Descripción:
Incrementa el contenido del registro direccionado por f y almacena el resultado en el mismo registro ó en el
acumulador W dependiendo del valor del flag d:
Nota:
19
18. INCFSZ
Sintaxisi:
incfsz f,b
Operación equivalente:
Descripción:
Incrementa el contenido del registro f , y, si el resultado vale cero se salta la instrucción siguiente. El
resultado del incremento puede ser almacenado en el mismo registro f ó en el acumulador W dependiendo
del valor del flag d.
Ejemplo:
org 00H
Este programa ejecuta 256 - 250 = 6 veces la instrucción incfsz hasta que salta cuando counter = 0. Siendo
counter un registro de 8 bit cuando se incrementa el valor 255 toma nuevamente el valor 0 de ahi la formula
256 - 250 = 6.
Nota:
20
19. IORLW
Sintaxis:
iorlw k
Operación equivalente:
W = W OR k
Descripción:
Ejemplo:
org 00H
start
movlw 00001111B
iorlw 11110000B
...
Nota:
21
20. IORLW
Sintaxisi:
iorwf f,d
Operación equivalente:
Descripción:
Esta instrucción efectua la operación logica OR entre el valor contenido en el acumulador W y el valor
contenido en el registro direccionado por el parametro f. El parametro d determina donde se almacenará el
resultado de la operacción:
Ejemplo:
org 00H
movlw 00001111B
movwf parm1
movlw 11111111B
iorwf parm1,F
Nota:
22
21. MOVLW
Sintaxis:
movlw k
Operación equivalente:
W=k
Descripción:
Ejemplo:
org 00H
start
movlw 20
...
Nota:
23
22. MOVF
MOVF MOVe F
Mueve el contenido del registro F
Sintaxis:
movf f,d
Operación equivalente:
Descripción:
Esta instrucción copia el contenido del registro direccionado por el parametro f ó en el acumulador W ó en
el mismo registro F. El parametro d determina el destino.
Ejemplo:
El ejemplo siguiente copia el valor contenido en el registro con dirección 20H en el acumulador W:
movf 20H,W
24
23. MOVWF
MOVWF MOVe W to F
Mueve el contenido del registro W al registro F
Sintaxis:
movwf f
Operación equivalente:
f=W
Descripción:
Esta instrucción copia el contenido del registro W en el registro direccionado por el parametro f.
Ejemplo:
Supongamos que queremos escribir el valor 10H (hexadecimal) en el registro TMR0. Las instrucciones a
ejecutar son las siguientes.
Con los registros utilizados por el PIC para funciones especificas, es habitual no escribir directamente su
dirección sino el nombre simbolico relativo definido en el fichero P16F84.INC. El codigo se convierte por
tanto en el siguiente:
Nota:
25
24. NOP
NOP No OPeration
No operación
Sintaxis:
nop
Descripción:
Esta instrucción no ejecuta ninguna operación pero es util para insertar un retardo igual a un ciclo de
maquina .
Ejemplo:
Utilizando un cristal de cuarzo de 4MHz en el oscilador, podremos obtener un retardo igual a 1µs por cada
instrucción NOP insertada en nuestro codigo fuente.
Nota:
26
25. RETFIE
Sintaxis:
retfie
Descripción:
Esta instrucción debe ser insertada al final de cada subroutina de gestión de una interrupción para devolver
el control al programa principal.
Ejemplo:
org 00H
loop
goto loop ;Bucle infinito
En este codigo fuente el programa principal ejecuta un bucle infinito. Si habilitamos una de las
interrupciones del 16F84 nada más que esta se produzca, el control pasará automaticamente al programa
situado en la dirección 04H (en el ejemplo intHandler), la instrucción RETFI determinará luego el retorno al
bucle principal.
Nota:
27
26. RETLW
Sintaxis:
retlw k
Descripción:
Esta instrucción devulve el control desde una subroutina al programa principal. A diferencia de la
instrucción RETURN esta permite pasar, a traves del acumulador W, el valor constante k al programa
principal.
Ejemplo:
call mySub1
movwf rtc
...
mySub1
nop
retlw 10
Una vez ejecutado este programa almacena en el registro rtc el valor 10 devuelto por la subroutina mySub1.
Nota:
28
27. RETURN
Sintaxis:
return
Descripción:
Esta instrucción debe ser insertada al final de cada subroutina para volver a la ejecución del programa
principal.
Ejemplo:
org 00H
call mySub1
....
mySub1
nop
return
Nota:
org 00H
call mySub1
....
mySub1
call mySub2
return
mySub2
call mySub3
return
mySub3
return
Nota:
29
28. RLF
Sintaxisi:
rlf f,b
Operación equivalente:
Descripción:
Rota los bit contenidos en el registro en la dirección f, hacia la izquierda (ó desde los bit menos
significativos hacia los más significativos) pasando por el bit CARRY del registro STATUS como se
ilustra en la figura:
El contenido del bit CARRY del registro status es depositado en el bit D0 mientras que el valor que sale del
bit D7 es depositado en el CARRY.
El valor del parametro d determina el destino del resultado obtenido al final de la rotación:
Ejemplo:
org 00H
rlf parm1,F
Al final del programa el registro parm1 valdrá 10101010B mientras que el CARRY valdrá 0.
Nota:
30
29. RRF
Sintaxis:
rrf f,b
Operación equivalente:
Descripción:
Rota los bit contenidos en el registro en la dirección f, hacia la derecha (ó desde los bit más significativos
hacia los menos significativos) pasando por el bit CARRY del registro STATUS como se ilustra en la
figura:
El contenido del bit CARRY del registro status es depositado en el bit D7 mientras que el valor de salida del
bit D0 es depositado en el CARRY.
El valore del parametro d determina el destino del resultado obtenido al final de la rotación:
Ejemplo:
org 00H
rrf parm1,F
Al final del programa el registro parm1 valdrá 00101010B mientras que el CARRY valdrá 1.
Nota:
31
30. SLEEP
Sintaxis:
sleep
Descripción:
Esta instrucción para la ejecución del programa en curso y pone el PIC en estado de standby (sleep del
ingles to sleep, dormir).
Ejemplo:
org 00H
start
sleep
Nota:
32
31. SUBLW
Sintaxis:
sublw k
Operación equivalente:
W=k -W
Descripción:
Ejemplo:
org 00H
start
movlw 10
sublw 12
...
Nota:
33
32. SUBWF
Sintaxis:
subwf f,d
Operación equivalente:
Descripción:
Esta instrucción resta el valor contenido en el registro W del valor contenido en el registro direccionado
por el parametro f. El parametro d es un flag que indica en que registro debe ser almacenado el resultado.
Ejemplo:
Si insetamos la instrucción:
subwf REG1,F
REG1 RES 1
Para valores iniciales de REG1=3 y W=2, después de la ejecución tendremos que REG1=1 y C=1 porque el
resultado es positivo.
Para valores iniciales de REG1=2 y W=2 después de la ejecucción tendremos que REG1=0 y C=1 porque el
resultado es siempre positivo.
Para valores iniciales de REG1=1 y W=2, tendremos REG1=FFH ó -1 luego C=0 porque el resultado es
negativo.
Nota:
34
33. SWAPF
SWAPF SWAP F
Intercambia el valor de los cuatro bit más significativos del registro en la
dirección F con los cuatro bit menos significativos.
Sintaxis:
swap f,d
Operación equivalente:
Descripción:
Intercambia el valore de los cuatro bit más significativos (D7-D4) contenidos en el registro en la dirección f
con los cuatro bit menos significativos (D3-D0) del mismo. El resultado es almacenado en el acumulador W
ó en el mismo registro f dependiendo del valor de d:
Nota:
35
34. XORLW
Sintaxis:
xorlw k
Operación equivalente:
W = W XOR k
Descripción:
Ejemplo:
org 00H
start
movlw 00000000B
xorlw 11110000B
...
Nota:
36
35. XORWF
Sintaxis:
xorwf f,d
Operación equivalente:
Descripción:
Esta instrucción efectua la operación logica OR exclusiva (XOR) entre el valor contenidoo en el
acumulador W y el valor contenido en el registro direccionado por el parametro f. El parametro d es un flag
que indica en que registro debe ser almacenado el resultado.
Esta instrucción modifica el bit Z del registro STATUS que valdrá 1 si el resultado de la operación es 0.
Ejemplo:
Supongamos que tenemos que efectuar la operación logica XOR entre el registro W y el registro
COUNTER definido por nosotros en la dirección 20H con la directiva:
podemos utilizar la instrucción XORWF de dos formas según donde queramos dejar el resultado, o bien:
ó:
Nota:
La OR exclusiva (XOR) es una operación entre dos bit en la que el bit resultado vale 0 si los dos bit son
iguales.
Asi mismo la operación XOR es utilizada en el ensamblador del PIC para efectuar la comparación entre dos
valores a falta de una instrucción especifica.
Veamos como:
Supongamos que tenemos un valor en el registro REG1 y que qeremos verificar si es igual a 57H. Las
instrucciones a ejecutar son las siguientes:
37
movlw 57H ;W = Valor a comparar = 57H
;Resultado. W = 57H
xorwf REG1,W ;W = W XOR REG1 Efectua la XOR con
;el valor en REG1
btfss STATUS,Z ;Salta la instrucción siguiente si el
;resultado de la XOR vale 0, es decir
;si el valor de REG1 es igual a 57H
goto diverso ;Salta si es distinto de 57H
goto uguale ;Salta si es igual a 57H
38