Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Instrucciones Pic16f877
Instrucciones Pic16f877
PIC16F877
Estos microcontroladores responden a una serie de instrucciones o cdigos que se deben grabar en
su memoria de programa, en total son 35. A continuacin se encuentra una tabla con la lista
completa y despus una descripcin de cada una de ellas con el fin de facilitar su aprendizaje.
Si d = 0 el resultado de la operacin se almacena en el registro W
Si d = 1 el resultado se almacena en el registro utilizado
Operaciones orientadas a registros
Nemotcnico
Operacin
ADDWF
ANDWF
CLRF
CLRW
COMF
DECF
DECFSZ
f,d
f,d
f
f,d
f,d
f,d
INCF
f,d
INCFSZ f,d
IORWF f,d
MOVF
f,d
MOVWF f
NOP
RLF
f,d
RRF
f,d
SUBWF f,d
SWAPF f,d
XORWF f,d
Sumar W y f
AND entre W y f
Limpiar f
Limpiar w
Complementar f
Decrementar f
Decrementar f,
saltar si cero
Incrementar f
Incrementar f,
saltar si cero
OR entre W y f
Mover f
Mover W a f
No operacin
Rotar a la izquierda a
travs del carry
Rotar a la derecha a
travs del carry
Restar W de f
Intercambiar nibbles de f
OR exclusiva entre W y f
Cd. de operacin
(14 bits)
00
00
00
00
00
00
0111
0101
0001
0001
1001
0011
dfff
ffff
dfff
ffff
1fff
ffff
0XXX XXXX
dfff
ffff
dfff
ffff
00 1011 dfff
00 1010 dfff
00
00
00
00
00
1111
0100
1000
0000
0000
ffff
ffff
dfff
ffff
dfff
ffff
dfff
ffff
1fff
ffff
0XX0 0000
00 1101 dfff
ffff
00
00
00
00
dfff
dfff
dfff
dfff
ffff
ffff
ffff
ffff
01 00bb bfff
01 01bb bfff
ffff
ffff
01 10bb bfff
ffff
01 11bb bfff
ffff
1100
0010
1110
0110
Estados
afectados
C,DC,Z
Z
Z
Z
Z
Z
Z
Z
Z
C
C
C,DC,Z
Z
f,b
Limpiar bit b de f
Activar bit b de f
Probar bit b de f,
saltar si es cero
Probar bit b de f,
saltar si es uno
Sumar literal k a W
AND entre k y W
Llamar subrutina
Limpiar WDT
Salta a direccin k
OR entre k y W
Cargar a W con literal k
Retornar de interrupcin
Retornar y cargar a W con k
Retornar de subrutina
Ir al modo de bajo consumo
Restarle k a W
OR exclusiva entre k y W
11
11
10
00
10
11
11
00
11
00
00
11
11
111X kkkk
1001 kkkk
0kkk kkkk
0000 0110
1kkk kkkk
1000 kkkk
00XX kkkk
0000 0000
01XX kkkk
0000 0000
0000 0110
110X kkkk
1010 kkkk
kkkk
kkkk
kkkk
0100
kkkk
kkkk
kkkk
1001
kkkk
1000
0011
kkkk
kkkk
C,DC,Z
Z
T0,PD
Z
T0,PD
C,DC,Z
Z
Instruccin ADDLW:
Sintaxis:
ADDLW k
Operacin:
(W) + k
Ciclos de instruccin:
1
Bits del registro de estados que se afectan: C, DC, Z
Ejemplo :
ADDLW
d15
Antes de la instruccin
Despus de la instruccin
Instruccin ADDWF:
registro W = d10
registro W = d25
Sintaxis:
ADDWF f,d
Operacin:
(W) + (f)
Ciclos de instruccin:
1
Bits del registro de estados que se afectan: C, DC, Z
Ejemplo:
ADDWF 15h,0
Antes de la instruccin
Despus de la instruccin
Instruccin ANDLW:
registro W = 17h
registro W = 0D9h
Sintaxis :
ANDLW k
Operacin :
(W) AND (k)
Ciclos de instruccin :
1
Bits del registro de estados que se afectan: Z
Ejemplo:
ANDLW b10101010
Antes de la instruccin
Despus de la instruccin
registro W = b11110000
registro W = b10100000
Instruccin ANDWF:
Sintaxis :
Operacin :
Ciclos de instruccin :
ANDWF f,d
(W) AND (f)
1
Instruccin BCF:
registro W = b00010111
registro W = b00010111
Sintaxis :
BCF
f,b
Operacin :
0 (f<b>)
Ciclos de instruccin :
1
Bits del registro de estados que se afectan: Ninguno
Ejemplo :
BCF regis,7
Antes de la instruccin
Despus de la instruccin
Instruccin BSF:
regis = b11111111
regis = b01111111
Sintaxis :
BSF
f,b
Operacin :
1 (f<b>)
Ciclos de instruccin :
1
Bits del registro de estados que se afectan: Ninguno
Ejemplo :
BSF regis,2
Antes de la instruccin
Despus de la instruccin
regis = b00000000
regis = b00000100
Instruccin BTFSC:
Pregunta por el bit b del registro f, si dicho bit est en cero el
programa se salta una lnea y ejecuta la instruccin que all se encuentre, si el bit estaba en uno no
salta una lnea sino que ejecuta la instruccin inmediatamente siguiente.
Sintaxis :
BTFSC f,b
Operacin :
salta si (f<b>) = 0
Ciclos de instruccin :
12
Bits del registro de estados que se afectan: Ninguno
Ejemplo :
lnea 1
Lnea 2
Lnea 3
BTFSC regis,0
GOTO inicio
..........
Antes de la instruccin
Despus de la instruccin
Instruccin BTFSS:
Pregunta por el bit b del registro f, si dicho bit est en uno el
programa se salta una lnea y ejecuta la instruccin que all se encuentre, si el bit estaba en cero
no salta una lnea sino que ejecuta la instruccin inmediatamente siguiente.
Sintaxis :
BTFSS f,b
Operacin :
salta si (f<b>) = 1
Ciclos de instruccin :
12
Bits del registro de estados que se afectan: Ninguno
Ejemplo :
lnea 1
lnea 2
lnea 3
BTFSS regis,0
GOTO inicio
..........
Antes de la instruccin
Despus de la instruccin
Instruccin CALL:
Sintaxis :
CALL k
Operacin :
carga el apuntador de programa con la direccin K
Ciclos de instruccin : 2
Bits del registro de estados que se afectan: Ninguno
Ejemplo :
aqu
CALL
rutina
Antes de la instruccin
Despus de la instruccin
Instruccin CLRF:
Sintaxis :
CLRF f
Operacin :
borra el contenido del registro f (lo carga con 00)
Ciclos de instruccin :
1
Bits del registro de estados que se afectan: Z
Ejemplo :
CLRF
regis
Antes de la instruccin
Despus de la instruccin
Instruccin CLRW:
regis = 5Ah
regis = 00
Sintaxis:
CLRW
Operacin:
Registro W = 00
Ciclos de instruccin: 1
Bits del registro de estados que se afectan: Ninguno
Ejemplo :
CLRW
Antes de la instruccin
Despus de la instruccin
Instruccin CLRWDT:
registro W = 5Ah
registro W = 00
Sintaxis:
CLRWDT
Operacin:
contador del temporizador watchdog timer = 00
Ciclos de instruccin : 1
Bits del registro de estados que se afectan: TO, PD
Ejemplo :
Instruccin COMF:
CLRWDT
Antes de la instruccin
Contador WDT = ?
Despus de la instruccin
Contador WDT = 00
Bits del registro de estados: TO = 1, PD = 1
Complementa el contenido del registro f (cambia unos por ceros y
viceversa), el resultado se guarda en el registro escogido segn el
valor del bit d.
Sintaxis:
COMF f,d
Operacin:
(complementar registro f)
Ciclos de instruccin: 1
COMF regis,0
Antes de la instruccin
Despus de la instruccin
Instruccin DECF:
regis = b00101100, W = ?
regis = b00101100, W = b11010011
Sintaxis:
DECF f,d
Operacin:
(f) - 1
Ciclos de instruccin: 1
Bits del registro de estados que se afectan: Z
Ejemplo:
DECF regis,1
Antes de la instruccin
Despus de la instruccin
Instruccin DECFSZ:
regis = d13
regis = d12
Sintaxis:
DECFSZ
f,d
Operacin :
(f) - 1 , salta una lnea si el resultado es cero
Ciclos de instruccin :
1 (2)
Bits del registro de estados que se afectan: Ninguno
Ejemplo :
aqu
DECFSZ
regis, 1
GOTO
ciclo
contina .....
Antes de la instruccin
Despus de la instruccin
Instruccin GOTO:
Sintaxis:
GOTO k
Operacin:
El contador de programa salta a la direccin k
Ciclos de instruccin: 2
Bits del registro de estados que se afectan: Ninguno
8
Ejemplo:
GOTO ciclo
Antes de la instruccin
Despus de la instruccin
contador de programa = ?
contador de programa = ciclo
INCF
regis,1
Antes de la instruccin
Despus de la instruccin
Instruccin INCFSZ:
regis = d24
regis = d25
Sintaxis:
INCFSZ
f,d
Operacin:
(f) + 1 , salta si el resultado es cero
Ciclos de instruccin:
1 (2)
Bits del registro de estados que se afectan: Ninguno
Ejemplo:
aqu
DECFSZ
GOTO
contina.....
Antes de la instruccin
Despus de la instruccin
Instruccin IORLW:
regis, 1
ciclo
contador de programa = aqu
regis = regis + 1
si regis = 0, entonces
contador de programa = continua
si regis no es 0, entonces
contador de programa = aqu + 1 (ejecuta GOTO ciclo)
Sintaxis:
IORLW
k
Operacin:
(W) OR (k)
Ciclos de instruccin:
1
Bits del registro de estados que se afectan: Z
Ejemplo:
IORLW
b10101100
Antes de la instruccin
Despus de la instruccin
Instruccin IORWF:
registro W = b00001111
registro W = b10101111
Sintaxis:
IORWF
f,d
Operacin:
(W) OR (f)
Ciclos de instruccin: 1
Bits del registro de estados que se afectan: Z
Ejemplo:
IORWF
regis,0
Antes de la instruccin
Despus de la instruccin
Instruccin MOVLW:
Sintaxis:
MOVLW
k
Operacin:
(W) se carga con el valor k
Ciclos de instruccin: 1
Bits del registro de estados que se afectan: Ninguno
Ejemplo:
MOVLW
5Ah
Antes de la instruccin
Despus de la instruccin
Instruccin MOVF:
W=?
W = 5Ah
Sintaxis:
MOVF f
Operacin:
(W) se carga con (f)
Ciclos de instruccin: 1
Bits del registro de estados que se afectan: Z
Ejemplo :
MOVF regis,0
Antes de la instruccin
Despus de la instruccin
Instruccin MOVWF:
10
Sintaxis:
MOVWF
f
Operacin:
(W) se mueve al registro (f)
Ciclos de instruccin: 1
Bits del registro de estados que se afectan: Ninguno
Ejemplo:
MOVWF
20h
Antes de la instruccin
Despus de la instruccin
Instruccin NOP:
No hace nada.
Sintaxis:
NOP
Ciclos de instruccin: 1
Bits del registro de estados que se afectan: Ninguno
Instruccin RETURN:
Sintaxis:
Operacin:
RETURN
carga el contador de programa con la direccin donde debe regresar luego
de ejecutar la subrutina, la cual estaba guardada en la pila o stack.
Ciclos de instruccin: 2
Bits del registro de estados que se afectan: Ninguno
Ejemplo :
RETURN
Despus de la interrupcin, contador de programa = dato de la pila
Instruccin RETLW:
Sintaxis:
RETLW
k
Operacin:
contador de programa se carga con el valor de la pila, adems (W) = k
Ciclos de instruccin: 2
Bits del registro de estados que se afectan: Ninguno
Ejemplo :
CALL
.
.
tabla NOP
NOP
RETLW
Antes de la instruccin
tabla
k1
registro W = ?
11
Despus de la instruccin
Instruccin RETFIE:
Sintaxis:
RETFIE
Operacin:
pila k contador de programa , 1 k intcon,gie
Ciclos de instruccin: 2
Bits del registro de estados que se afectan: Ninguno
Ejemplo :
RETFIE
Antes de la instruccin
Despus de la instruccin
Instruccin RLF:
contador de programa = ?
contador de programa = dato de la pila, las
interrupciones se habilitan nuevamente
Sintaxis:
RLF f,d
Operacin:
Rota el contenido del registro f a la izquierda a travs del carry
Ciclos de instruccin: 1
Bits del registro de estados que se afectan: C
Ejemplo :
RLF regis,0
Antes de la instruccin
Despus de la instruccin
Instruccin RRF:
Sintaxis:
RRF f,d
Operacin:
Rota el contenido del registro f a la derecha a travs del carry
Ciclos de instruccin: 1
Bits del registro de estados que se afectan: C
Ejemplo :
RRF regis,0
Antes de la instruccin
Despus de la instruccin
12
Instruccin SLEEP:
Sintaxis:
SLEEP
Operacin:
bit TO = 1, bit PD = 0
Ciclos de instruccin: 1
Bits del registro de estados que se afectan: TO, PD
Ejemplo :
SLEEP
Instruccin SUBLW:
Sintaxis:
SUBLW k
Operacin:
k - (W)
Ciclos de instruccin: 1
Bits del registro de estados que se afectan: C, DC, Z
Ejemplo 1:
Ejemplo 2:
Ejemplo 3:
SUBLW 5h
Antes de la instruccin
Despus de la instruccin
SUBLW 5h
Antes de la instruccin
Despus de la instruccin
SUBLW 5h
Antes de la instruccin
Despus de la instruccin
Instruccin SUBWF:
Sintaxis:
SUBWF
f,d
Operacin:
(f) - (W)
Ciclos de instruccin: 1
Bits del registro de estados que se afectan: C, DC, Z
Ejemplo 1:
SUBWF
regis,1
Antes de la instruccin
13
Ejemplo 2:
Ejemplo 3:
Despus de la instruccin
SUBWF
regis,1
Antes de la instruccin
Despus de la instruccin
SUBWF
regis,1
Antes de la instruccin
Despus de la instruccin
Instruccin SWAPF:
Intercambia los cuatro bits altos y los cuatro bits bajos del registro
f, el nuevo dato obtenido se guarda en el registro seleccionado
segn el valor del bit d.
Sintaxis:
SWAPF
f,d
Operacin:
los bits f<3:0> se intercambian de posicin con los bits f<7:4>
Ciclos de instruccin: 1
Bits del registro de estados que se afectan: Ninguno
Ejemplo 1:
SWAPF
regis,0
Antes de la instruccin
Despus de la instruccin
Instruccin XORLW:
regis = b10101100, W = ?
regis = b10101100, W = b11001010
Sintaxis:
XORLW
k
Operacin:
(W) XOR (k)
Ciclos de instruccin: 1
Bits del registro de estados que se afectan: Z
Ejemplo:
XORLW
b10101100
Antes de la instruccin
Despus de la instruccin
Instruccin XORWF:
Sintaxis:
14
registro W = b11110000
registro W = b01011100
XORWF
f,d
Operacin:
(W) XOR (f)
Ciclos de instruccin: 1
Bits del registro de estados que se afectan: Z
Ejemplo:
XORWF
regis,1
Antes de la instruccin
Despus de la instruccin
15