2. El Set de Instrucciones
Introducción
• Los PIC 16F87x poseen un juego de 35
instrucciones de tipo RISC, siendo todas ellas de 14
bits. El tamaño de los datos es de 1 byte.
• Las instrucciones de los PIC 16F87x son
exactamente iguales a las del PIC 16f84
• En los 14 bits de cada instrucción se incluye el
código de operación y los operandos si estos
existen.
• Todas las instrucciones tardan en ejecutarse 1 ciclo
(4 golpes de reloj) excepto las de salto que tardan
2 ciclos.
CCFF DPE MÓDULO DE PROYECTOS
2
3. • Las instrucciones de los PIC son altamente
ortogonales. Esto quiere decir que casi todas las
instrucciones pueden usar cualquier registro como
como operando y como destino.
• El
número
total
de
instrucciones
del
microcontrolador es de 35. Clasificándose en los
siguiente tipos:
Instrucciones orientadas a bytes.
Instrucciones orientadas a bits.
Instrucciones de control y con literales.
CCFF DPE MÓDULO DE PROYECTOS
3
4. El Set de Instrucciones
Nomenclatura en las Instrucciones
• En las instrucciones orientadas a bytes o registros f
representa un registro y d representa el destino. Si d es
0, el resultado de la operación se almacena en el
registro de trabajo W, mientras que si d es 1, el
resultado se guarda en el registro f.
• En las instrucciones orientadas a bits, b representa en
binario la posición (0-7) del bit dentro del byte, f
representa el byte o registro. El bit 0 siempre es el de
menor peso.
• Para las instrucciones de control y con literales k
representa una constante o un literal, que según los
casos puede ser de 8 ó 11 bits.
4
5. El Set de Instrucciones
Formato de las instrucciones
Instrucciones orientadas a bytes o registros (18)
Donde:
Opcode es el código de operación.
( ) significa contenidos.
CCFF DPE MÓDULO DE PROYECTOS
5
9. Instrucciones Orientadas a Bits.
Instrucciones Con Literales Y De
Control.
CCFF DPE MÓDULO DE PROYECTOS
9
10. ADDLW (Suma W con un literal)
CCFF DPE MÓDULO DE PROYECTOS
10
11. ADDWF (Suma W con un registro)
CCFF DPE MÓDULO DE PROYECTOS
11
12. ANDLW (AND de W con un literal)
CCFF DPE MÓDULO DE PROYECTOS
12
13. ANDWF (AND de W con un registro)
CCFF DPE MÓDULO DE PROYECTOS
13
14. BCF (pon a 0 un bit del registro f)
CCFF DPE MÓDULO DE PROYECTOS
14
15. BSF (pon a 1 un bit del registro f)
CCFF DPE MÓDULO DE PROYECTOS
15
16. BTFSC (Testea un Bit y Salta si Cero) (1)
Si se produce el salto (bit=0) la instrucción
tarda 2 ciclos en ejecutarse, por el contrario
si no se produce salto solo tarda 1 ciclo en
ejecutarse.
CCFF DPE MÓDULO DE PROYECTOS
16
17. BTFSC (Testea un Bit y Salta si Cero) (2)
CCFF DPE MÓDULO DE PROYECTOS
17
18. BTFSS (Testea un Bit y Salta si Set) (1)
Si se produce el salto (bit=1) la instrucción tarda 2 ciclos en
ejecutarse, por el contrario si no se produce salto solo tarda 1
ciclo en ejecutarse.
CCFF DPE MÓDULO DE PROYECTOS
18
19. BTFSS (Testea un Bit y Salta si Set) (2)
CCFF DPE MÓDULO DE PROYECTOS
19
20. CALL (Llamada a subrutina) (1)
• Tos es la cima de la pila
CCFF DPE MÓDULO DE PROYECTOS
20
21. CALL (Llamada a subrutina) (2)
• El cálculo de la dirección efectiva varía según la
familia de PIC.
21
22. CLRF (Pon a cero el registro f) (1)
CCFF DPE MÓDULO DE PROYECTOS
22
23. CLRW (Pon a cero el registro W)
CCFF DPE MÓDULO DE PROYECTOS
23
24. CLRWDT (Pon a cero el registro WDT) (1)
CCFF DPE MÓDULO DE PROYECTOS
24
25. CLRWDT (Pon a cero el registro WDT) (2)
• T0 y PD se ponen a 1 también cuando se ejecuta
la instrucción SLEEP
CCFF DPE MÓDULO DE PROYECTOS
25
27. DECF (DECrementa F)
• En el caso de que
d=0, el resultado se
almacena en W,y f
no modifica su valor.
• Recuérdese que al
decrementar 00h, se
obtiene 0FFH.
CCFF DPE MÓDULO DE PROYECTOS
27
28. DECFSZ (DECrementa F y Salta si Zero)
• En el caso de que
d=0, el resultado
se almacena en
W,y f no modifica
su valor.
• Si el resultado es
cero se ignora la
siguiente
instrucción ( se
salta), y la
Instrucción tarda
en ejecutarse 2
ciclos.
CCFF DPE MÓDULO DE PROYECTOS
28
29. DECFSZ (DECrementa F y Salta si Zero)
• En el caso de que
d=1, el resultado se
almacena en f
modificándose su
valor.
CCFF DPE MÓDULO DE PROYECTOS
• Si el resultado es
distinto de cero se
ejecuta la siguiente
instrucción ( no se
salta), y la
Instrucción tarda
en ejecutarse 1
ciclo.
29
30. GOTO (Salto incondicional a la dirección )
• Goto es una
instrucción que
tarda en
ejecutarse dos
ciclos
CCFF DPE MÓDULO DE PROYECTOS
30
31. INCF (INCrementa F )
• En el caso de que d=0,
el resultado se almacena
en W,y f no modifica su
valor.
• En el caso de que d=1,
el resultado se almacena
en f modificándose su
valor.
• Recuérdese que al
incrementar 0FFh, se
obtiene 00H.
CCFF DPE MÓDULO DE PROYECTOS
31
32. INCFSZ (INCrementa F y Salta si Zero) (1)
• En el caso de que
d=0, el resultado se
almacena en W,y f no
modifica su valor.
• En el caso de que
d=1, el resultado se
almacena en f
modificándose su
valor.
• Recuérdese que al
incrementar 0FFh, se
obtiene 00H.
CCFF DPE MÓDULO DE PROYECTOS
32
33. INCFSZ (INCrementa F y Salta si Zero)(2)
Si el resultado es cero se
ignora
la
siguiente
instrucción ( se salta), y
la Instrucción tarda en
ejecutarse 2 ciclos.
Si el resultado es distinto
de cero se ejecuta la
siguiente instrucción ( no
se salta), y la Instrucción
tarda en ejecutarse 1
ciclo.
CCFF DPE MÓDULO DE PROYECTOS
33
34. IORLW (OR Lógica de W con un Literal)
CCFF DPE MÓDULO DE PROYECTOS
34
35. IORWF (OR Lógica de W con un registro F)
CCFF DPE MÓDULO DE PROYECTOS
35
36. MOVLW (MOVer un Literal a W )
CCFF DPE MÓDULO DE PROYECTOS
36
37. MOVF (MOVer un registro Fsr)
Al ejecutar la instrucción
MOVF FSR, 1
No realizamos ningún
cambio ya que el
registro se queda como
estaba, pero sin
embargo nos sirve para
chequear su contenido
ya que el FLAG Z se
actualiza.
CCFF DPE MÓDULO DE PROYECTOS
37
38. NOP (No OPeración)
Esta instrucción
no hace nada,
simplemente
consume un ciclo
de instrucción.
CCFF DPE MÓDULO DE PROYECTOS
38
39. RETFIE (Retorno de interrupción)
Carga el PC con el valor
que se encuentra en la
cima de la pila (TOS).
Pone a 1 el bit GIE, con
el fin de autorizar de
nuevo las
interrupciones.
Esta es una instrucción
que tarda en ejecutarse
2 ciclos de instrucción
CCFF DPE MÓDULO DE PROYECTOS
39
40. RETLW (Retorno y carga un literal en W)
Carga el registro W
con el literal k,
después Carga el PC
con el valor que se
encuentra en la cima
de la pila (TOS),
efectuando un retorno
de subrutina.
CCFF DPE MÓDULO DE PROYECTOS
40
41. RETLW (Retorno y carga un literal en W)
Es una instrucción
que tarda en
ejecutarse 2 ciclos.
CCFF DPE MÓDULO DE PROYECTOS
41
42. RETURN (Retorno de subrutina)
Carga el PC con el
valor que se
encuentra en la cima
de la pila
Es una instrucción
que tarda en
ejecutarse 2 ciclos.
CCFF DPE MÓDULO DE PROYECTOS
42
43. RLF (Rota un bit a la izquierda el Registro
F, pasando por el bit de Carry) (1)
Si d=0 el resultado
se almacena en W,
no modificándose el
valor de f.
Si d=1 el resultado
se almacena en f.
El único flag que se
modifica es el Carry.
CCFF DPE MÓDULO DE PROYECTOS
43
44. RLF (Rota un bit a la izquierda el Registro
F, pasando por el bit de Carry) (2)
CCFF DPE MÓDULO DE PROYECTOS
44
45. RRF (Rota un bit a la derecha el Registro
F, pasando por el bit de Carry) (1)
CCFF DPE MÓDULO DE PROYECTOS
45
46. RRF (Rota un bit a la derecha el Registro
F, pasando por el bit de Carry) (2)
CCFF DPE MÓDULO DE PROYECTOS
46
47. SLEEP (Modo de bajo consumo)
Las maneras de salir
del modo de bajo
consumo son:
Por un RESET,
activando MCLR
Por desbordamiento
de WDT si éste
quedó operativo al
entrar en el modo
reposo.
CCFF DPE MÓDULO DE PROYECTOS
47
Activación de una
interrupción que no
sea TMR0, ya que
esta se desactiva al
entrar en reposo.
48. SUBLW (Resta al literal k el contenido de W)
CCFF DPE MÓDULO DE PROYECTOS
48
49. SUBLW (Resta al literal k el contenido de W)
• La resta se efectúa
en complemento a
dos
• Z se pone a 1 si el
resultado de la
opración es 0
• C se pone a 0 si se
genera un debe en el
bit de mayor peso
CCFF DPE MÓDULO DE PROYECTOS
• DC se pone a 1 si
genera un acarreo
del bit 3 al bit 4.
49
50. SUBWF (Resta al R. F el contenido de W)
CCFF DPE MÓDULO DE PROYECTOS
50
51. SUBWF (Resta al R. F el contenido de W)
• La resta se efectúa
en complemento a
dos.
• Si d=0 el resultado
queda en W, y si
d=1, el resultado se
guarda en f.
• Los flag afectados
como en la
instrucción anterior
son Z, C y DC
CCFF DPE MÓDULO DE PROYECTOS
51
52. SWAPF (Intercambia nibbles en F)
• Los 4 bits de menor
peso del registro f
se intercambian con
los 4 de mayor peso
• Si d=0 el resultado
queda en W
• Si d=1, el resultado
se guarda en f.
CCFF DPE MÓDULO DE PROYECTOS
52