Instrucciones para programar el 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
Operaciones orientadas a bits
BCF
f,b
BSF
f,b
BTFSC f,b
BTFSS
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
Operaciones con constantes y de control
ADDLW k
ANDLW k
CALL
k
CLRWDT
GOTO k
IORLW k
MOVLW k
RETFIE
RETLW k
RETURN
SLEEP
SUBLW k
XORLW k
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
Instrucciones para programar el PIC16F877
Instruccin ADDLW:
Suma un valor constante k al contenido del registro W, el resultado
se guarda en el registro W.
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
Suma el contenido de un registro f al contenido del registro W, el
resultado se guarda en el registro escogido segn el valor del bit d.
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
registro 15h = 0C2h
registro 15h = 0C2h
Operacin lgica AND entre una constante k y el registro W, la
operacin se hace bit a bit, el resultado queda en el registro W.
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:
Operacin lgica AND entre un registro f y el registro W, el
resultado se guarda en el registro escogido segn el valor del bit d.
Sintaxis :
Operacin :
Ciclos de instruccin :
ANDWF f,d
(W) AND (f)
1
Instrucciones para programar el PIC16F877
Bits del registro de estados que se afectan: Z
Ejemplo :
ANDWF FSR,1
Antes de la instruccin
Despus de la instruccin
Instruccin BCF:
registro W = b00010111
registro W = b00010111
registro FSR = b11000010
registro FSR = b00000010
Pone en cero el bit b del registro f.
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
Pone en uno el bit b del registro f.
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
..........
Instrucciones para programar el PIC16F877
Antes de la instruccin
Despus de la instruccin
apuntador de programa = lnea 1
si el bit 0 del registro regis = 0
apuntador de programa = lnea 3
si el bit 0 del registro regis = 1
apuntador de programa = lnea 2
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
apuntador de programa = lnea 1
si el bit 0 del registro regis = 1
apuntador de programa = lnea 3
si el bit 0 del registro regis = 0
apuntador de programa = lnea 2
Instruccin CALL:
Llama una subrutina que est ubicada en la posicin de memoria o
etiqueta k.
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
contador de programa = aqu
contador de programa = rutina
En la pila se guarda la direccin aqu para regresar
Instrucciones para programar el PIC16F877
Instruccin CLRF:
Borra el contenido del registro f, lo carga con 00.
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
Borra el contenido del registro W (lo carga con 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
Reinicia en cero el conteo del temporizador interno Watchdog
Timer, para que no sea reseteado el microcontrolador.
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
Instrucciones para programar el PIC16F877
Bits del registro de estados que se afectan: Z
Ejemplo :
COMF regis,0
Antes de la instruccin
Despus de la instruccin
Instruccin DECF:
regis = b00101100, W = ?
regis = b00101100, W = b11010011
Decrementa en uno el contenido del registro f, el resultado se
guarda en el registro escogido segn el valor del bit d.
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
Decrementa en uno el contenido del registro f, si el contenido
queda en 00 el micro salta una lnea del programa, el resultado
obtenido se guarda en el registro escogido segn el valor del bit d.
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:
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)
El contador de programa salta a la direccin k
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
Instrucciones para programar el PIC16F877
Ejemplo:
GOTO ciclo
Antes de la instruccin
Despus de la instruccin
contador de programa = ?
contador de programa = ciclo
Instruccin INCF: Incrementa en uno el contenido del registro f, el resultado se
guarda en el registro escogido segn el valor del bit d.
Sintaxis:
INCF f,d
Operacin:
(f) + 1
Ciclos de instruccin: 1
Bits del registro de estados que se afectan: Z
Ejemplo :
INCF
regis,1
Antes de la instruccin
Despus de la instruccin
Instruccin INCFSZ:
regis = d24
regis = d25
Incrementa en uno el contenido del registro f, si el contenido de f
queda en 00 el micro salta una lnea del programa, el resultado se
guarda en el registro escogido segn el valor del bit d.
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)
Operacin lgica OR entre el contenido del registro W y la constante
k, el resultado queda en el registro W.
Sintaxis:
IORLW
k
Operacin:
(W) OR (k)
Ciclos de instruccin:
1
Bits del registro de estados que se afectan: Z
Instrucciones para programar el PIC16F877
Ejemplo:
IORLW
b10101100
Antes de la instruccin
Despus de la instruccin
Instruccin IORWF:
registro W = b00001111
registro W = b10101111
Operacin lgica OR entre el registro W y el registro f, el resultado
se guarda en el registro escogido segn el valor del bit d.
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:
regis = b00110011 , W = b11110000
regis =b00110011 , W = b11110011
Carga el registro W con el valor constante k.
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
Mueve el contenido del registro f hacia el registro W.
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
registro W = ?, regis = d32
registro W = d32
Mueve el contenido del registro W al registro f.
Instrucciones para programar el PIC16F877
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:
registro 20h = ? , registro W = d48
registro 20h = d48, registro W = d48
No hace nada.
Sintaxis:
NOP
Ciclos de instruccin: 1
Bits del registro de estados que se afectan: Ninguno
Instruccin RETURN:
Retorno desde una subrutina.
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:
Retorno desde una subrutina y adicionalmente carga el registro W con
el valor constante k.
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
Instrucciones para programar el PIC16F877
Despus de la instruccin
Instruccin RETFIE:
registro W = k1, contador de programa = dato de la pila
Retorna al programa luego de ejecutar una interrupcin.
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
Rotar el contenido del registro f un bit a la izquierda, usando el carry como
bit intermedio, el resultado se guarda en el registro escogido segn el valor
del bit d.
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:
bit carry = 0, regis = 1110 0110, W=?
bit carry = 1, regis = 1110 0110
W = 11001100
Rotar el contenido del registro f un bit a la derecha, usando el carry como
bit intermedio, el resultado se guarda en el registro escogido segn el valor
del bit d.
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
bit carry = 0, regis = 1110 0101, W=?
bit carry = 1, regis = 1110 0101
W = 0111 0010
Instrucciones para programar el PIC16F877
El micro entra en un estado de standby (dormido), de ese modo
solamente sale si ocurre una interrupcin.
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:
Resta el contenido del registro W de la constante k usando el mtodo
de complemento a dos, el resultado se guarda en el registro W, el bit
de carry indica el signo de la respuesta.
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
W = 1h, bit de carry = ?
W = 4h, bit de carry = 1 (positivo)
SUBLW 5h
Antes de la instruccin
Despus de la instruccin
W = 5h, bit de carry = ?
W = 0, bit de carry = 1 (positivo)
SUBLW 5h
Antes de la instruccin
Despus de la instruccin
W = 6h, bit de carry = ?
W = 0FFh , bit de carry = 0 (negativo)
Instruccin SUBWF:
Resta el contenido del registro W del registro f usando el mtodo
de complemento a dos, el bit de carry indica el signo de la respuesta,
el resultado se guarda en el registro escogido segn el valor del bit d.
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
regis = 5h, W = 2h, bit de carry = ?
13
Instrucciones para programar el PIC16F877
Ejemplo 2:
Ejemplo 3:
Despus de la instruccin
regis = 3h, W = 2h, bit de carry = 1 (positivo)
SUBWF
regis,1
Antes de la instruccin
Despus de la instruccin
regis = 2h, W = 2h, bit de carry = ?
regis = 0, W = 2h, bit de carry = 1 (positivo)
SUBWF
regis,1
Antes de la instruccin
Despus de la instruccin
regis = 5h, W = 6h, bit de carry = ?
regis = 0FFh, W = 6h, bit de carry = 0 (negativo)
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
Operacin lgica XOR entre el registro W y la constante k, el
resultado se guarda en el registro W.
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
Operacin lgica XOR entre el registro W y el registro f, el
resultado obtenido se guarda en el registro seleccionado
segn el bit d.
XORWF
f,d
Instrucciones para programar el PIC16F877
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
regis = b11110000, W = b10101010
regis = b01011010, W = b10101010
15