Está en la página 1de 13

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