You are on page 1of 7

INSTRUCCIONES DETALLADAS DEL PIC16F877A.

Como ya hemos visto, para que el microcontrolador lleve a cabo una tarea, debemos indicarle
exactamente qu debe hacer, o en otras palabras, debemos escribir el programa que el micro ejecutara.
Ya hemos visto varios ejemplos y muchas de las instrucciones del PIC, pero ahora veremos las 35
instruccin!s "!# !ns$%&#$"r %'$s%. Estas ! instrucciones son las mismas para toda la gama
media de los microcontroladores PIC as" que si m#s adelante se quiere reali$ar un programa para un
PIC %&'()) se usaran las mismas instrucciones.
*ntes de continuar es necesario de+inir algunos trminos que se usaran para explicar las instrucciones,
(, cualquier registro del microcontrolador
), registro de trabajo
&, posici-n de un bit en el registro .+.
", destino, puede ser .+. /d0%1 o .2. /d031
!ti*u!t$, grupo de caracteres que marcan el inicio de una parte del programa
+,, opcional
, posici-n de un bit dentro de un registro
INSTRUCCIONES ORIENTADAS A RE-ISTROS.
ADD)F. Su%$ ) / (
4uma el contenido del registro .2. y el registro .+.. 4i 5d5 es 3, el resultado se almacena en el registro 2.
4i .d. es % el resutado se almacena en el registro .+..
4intaxis, 6etiqueta7 *882' +,d
9peraci-n, /21 : /+1 ;;< /destino1
'lags a+ectados, C, 8C, =
Ejemplo, *882' >E?,%
*ntes de la instrucci-n, 203x3, >E?03x3@
8espus de la instrucci-n, 203x3, >E?03x3)
AND)F. ) AND (
>eali$a la operaci-n l-gica *A8 entre el registro 2 y el registro 5+5. 4i 5d5 es 3 el resultado se almacena
en el registro 2. 4i 5d5 es %, el resultado se almacena en el registro 5+5.
4intaxis, 6etiqueta7 *A82' +,d
9peraci-n, /21 *A8 /+1 ;;< /destino1
'lags a+ectados, =
Ejemplo, *A82' >E?,%
*ntes de la instrucci-n, 203x%), >E?0 3xCB
8espus de la instrucci-n, 203x%), >E?0 3x3B
CLRF. 0rr$ un r!1istr
Corra el contenido del registro .+. y se activa el +lag =.
4intaxis, 6etiqueta7 CD>' +
'lags a+ectados, =
Ejemplo, CD>' >E?
*ntes de la instrucci-n, >E?03x!@
8espus de la instrucci-n, >E?03x33, =0%
CLR). 0rr$ !# r!1istr "! tr$&$2 )
Corra el contenido del registro .2. y se activa el +lag =. Esta instruccion no tiene operandos.
4intaxis, 6etiqueta7 CD>2
'lags a+ectados, =
Ejemplo, CD>2
*ntes de la instrucci-n, 203x!@
8espus de la instrucci-n, 203x33, =0%
CO3F. C%'#!%!nt$ !# r!1istr (
El contenido del registro .+. se complementa. 4i d03 el resultado se almacena en el registro 2. 4i d0% el
resultado se almacena en el registro .+..
4intaxis, 6etiqueta7 C9E' +,d
'lags a+ectados, =
Ejemplo, C9E' >E?,3
*ntes de la instruccion, >E?03x%
8espus de la instrucci-n, >E?03x%, 203xEC
DECF. D!cr!%!nt$ ( !n 1
8e decrementa en uno el contenido del registro .+.. 4i d03, el resultado se almacena en 2. 4i d0%, el resultado
se almacena en .+..
4intaxis, 6etiqueta7 8EC' +,d
'lags a+ectados, =
Ejemplo, 8EC C9AF, %
*ntes de la instrucci-n, C9AF03x3%, =03
8espus de la instrucci-n, C9AF03x33, =0%
DECFS4. D!cr!%!nt$ !n 1 / s$#t$ si !# r!su#t$" !s 5
El contenido del registro .+. se decrementa. 4i .d03, el resultado se coloca en el registro 2. 4i d0%, el resultado
se coloca en el registro .+.. 4i el resultado es 3, se salta la siguiente instrucci-n y se continGa con la ejecuci-n.
4intaxis, 6etiqueta7 8EC'4= +,d
'lags a+ectados, Ainguno
INCF. Incr!%!nt$ !# r!1istr (
Incrementa en uno el contenido del registro .+.. 4i d03, el resultado se almacena en 2. 4i d0%, el resultado se
almacena en .+..
4intaxis, 6label7 IAC' +,d
'lags a+ectados, =
Ejemplo, IAC' C9AF,%
*ntes de la instrucci-n, C9AF03x'', =03
8espus de la instrucci-n, C9AF03x33, =0%
INCFS4. Incr!%!nt$ !n 1 / s$#t$ si !# r!su#t$" !s 5
El contenido del registro .+. se incrementa. 4i d03, el resultado se coloca en el registro 2. 4i d0%, el resultado
se coloca en el registro .+.. 4i el resultado es 3, se salta la siguiente instrucci-n y se continGa con la ejecuci-n.
4intaxis, 6etiqueta7 8EC'4= +,d
'lags a+ectados, Ainguno
IOR)F. ) OR (
>eali$a la operaci-n l-gica 9> entre el registro 2 y el registro .+.. 4i d03 el resultado se almacena en el
registro 2. 4i d0%, el resultado se almacen en el registro .+..
4intaxis, 6etiqueta7 I9>2' +,d
'lags a+ectados, =
Ejemplo, I9>2' >E?,3
*ntes de la instrucci-n, >E?03x%, 203xH%
8espus de la instrucci-n, >E?03x%, 203xH
3O6F. 37!r !# r!1istr (
El contenido del registro .+. se mueve al destino .d.. 4i d03, el destino es el registro 2. 4i d0%, el destino es el
propio registro .+..
4intaxis, 6etiqueta7 E9I' +,d
'lags a+ectados, =
Ejemplo, E9I' >E?,3
8espus de la instrucci-n, 20>E?
RLF. Rt$ !# r!1istr ( $ #$ i8*ui!r"$
El contenido del registro .+. se rota una posici-n a la i$quierda. El bit de m#s peso pasa al carry y el carry se
introduce por el bit de menos peso de .+.. 4i d03, el resultado se coloca en el registro 2. 4i d0%, el resultado
queda en el registro .+..
4intaxis, 6etiqueta7 >D' +,d
'lags a+ectados, C
Ejemplo, >D' >E?,%
*ntes de la instrucci-n, >E?0b.%%%33%%3., C03
8espus de la instrucci-n, >E?0b.%%33%%33., C0%
RRF. Rt$ !# r!1istr ( $ #$ "!r!c9$
El contenido del registro .+. se rota una posici-n a la derecha. El bit de menos peso pasa al carry y el carry se
introduce por el bit de m#s peso de .+.. 4i d03, el resultado se coloca en el registro 2. 4i d0%, el resultado
queda en el registro .+..
4intaxis, 6etiqueta7 >D' +,d
'lags a+ectados, C
Ejemplo, >D' >E?,%
*ntes de la instrucci-n, >E?0b.%%%33%%3., C03
8espus de la instrucci-n, >E?0b.3%%%33%%., C03
SU0)F. R!st$ ( : )
>esta el contenido del registro .+. menos el contenido del registro 2. 4i d03, el resultado se almacena en el
registro 2. 4i d0%, el resultado se almacena en el registro .+..
4intaxis, 6etiqueta7 4JC2' +,d
'lags a+ectados, C, 8C, =
Ejemplo, 4JC2' >E?,%
*ntes de la instrucci-n, >E?03x3%, 203x3B
8espus de la instrucci-n, >E?03x'', 203x3B
S)APF. Int!rc$%&i "! (
El nibble bajo del registro .+. se intercambia con el nibble alto del mismo. 4i d03, el resultado se coloca en el
registro 2. 4i d0%, el resultado queda en el registro .+..
4intaxis, 6etiqueta7 42*P' +,d
'lags a+ectados, Ainguno
Ejemplo, 42*P' >E?,%
*ntes de la instrucci-n, >E?03x!@
8espus de la instrucci-n, >E?03x@!
;OR)F. ) ;OR (
>eali$a la +unci-n l-gica 9> exclusiva entre el contenido del registro 2 y el registro .+.. 4i d03, el resultado se
almacena en el registro 2. 4i d0% el resultado se almacena en el registro .+..
4intaxis, 6etiqueta7 K9>2' +,d
'lags a+ectados, =
Ejemplo, K9>2' >E?,%
*ntes de la instrucci-n, >E?03x*', 203xC!
8espus de la instrucci-n, >E?03x%*, 203xC!
NOP. N '!r$cin
Ao reali$a ninguna operacion, solo consume un ciclo de reloj
4intaxis, 6etiqueta7 A9P
INSTRUCCIONES ORIENTADAS A 0ITS.
0CF. 0rr$ un &it
Corra el bit .b.del registro .+.
4intaxis, 6etiqueta7 CC' +,b
Ejemplo, CC' >E?,3
*ntes de la instrucci-n, >E?0b.3%%3%%3%.
8espus de la instrucci-n, >E?0b.3%%3%%33.
0SF. Acti7$ un &it
*ctiva el bit .b. del registro .+.
4intaxis, 6etiqueta7 C4' +,b
Ejemplo, C4' >E?,B
*ntes de la instrucci-n, >E?0b.3%33%33%.
8espus de la instrucci-n, >E?0b.3%33%3%%.
0TFSC. C9!c$ un &it / s$#t$ si !s 5
4i el bit 5b5 del registro 5+5 es 3, se salta una instrucci-n y se continGa con la ejecuci-n.
4intaxis, 6etiqueta7 CF'4C +,b
0TFSS. C9!c$ un &it / s$#t$ si !s 1
4i el bit 5b5 del registro 5+5 es %, se salta una instrucci-n y se continGa con la ejecuci-n.
4intaxis, 6etiqueta7 CF'44 +,b
INSTRUCCIONES ORIENTADAS A CONSTANTES < DE CONTROL.
ANDL). ) AND #it!r$#
>eali$a la operaci-n l-gica *A8 entre el registro 2 y la constante 5L5. El resultado se almacena en el registro
2.
4intaxis, 6label7 *A82D L
'lags a+ectados, =
Ejemplo, *A8D2 3x!'
*ntes de la instrucci-n, 203x*
8espus de la instrucci-n, 203x3
CALL. L#$%$"$ $ su&rutin$
Dlamada y salto a subrutina. Da direcci-n de retorno se guarda en el stacL. Da constante 5L5 de ( bits +orma la
direcci-n de salto y se carga en los bits del PC. Dos bits del PC se cargan con los bits del registro 54F*FJ45.
PC se pone a 3.
4intaxis, 6etiqueta7 C*DD L
Ejemplo, IAICI9 C*DD 8E4FIA9
*ntes de la instrucci-n, PC0IAICI9
8espus de la instrucci-n, PC08E4FIA9
CLR)DT. 0rr$ !# =$tc9"1 ti%!r
Esta instrucci-n borra tanto el 5Matchdog5 como el prescaler. Dos bits F9 y P8 del registro de estado se ponen
a 5%5.
4intaxis, 6label7 CD>28F
'lags a+ectados, F9, P8
-OTO. S$#t incn"icin$#
4e trata de un salto incondicional. Dos H bits de la constante 5L5 que +orman la instrucci-n, se cargan en los
bits del PC y +orman la direcci-n de salto. Dos bits del PC se cargan con los bits del registro de estado.
4intaxis, 6etiqueta7 ?9F9 L
Ejemplo, IAICI9 ?9F9 8E4FIA9
*ntes de la instrucci-n, PC03
8espus de la instrucci-n, PC08E4FIA9
IORL). ) OR #it!r$#
4e reali$a la +unci-n l-gica 9> entre el registro 2 y la contante 5L5. El resultado se almacena en el registro 2.
4intaxis, 6etiqueta7 I9>D2 L
'lags a+ectados, =
Ejemplo, I9>D2 9x!
*ntes de la instrucci-n, 203xH*
8espus de la instrucci-n, 203xC'
3O6L). C$r1$ un #it!r$# !n )
El registro 2 se carga con el valor de ( bits expresado mediante la literal 5L5.
4intaxis, 6etiqueta7 E9ID2 L
Ejemplo, E9ID2 3x!*
8espus de la instrucci-n, 203x!*
RETURN. R!1r!s$ "! un$ su&rutin$
El programa regresa de la subrutina y ejecuta la instruccion que sigue a C*DD
4intaxis, 6etiqueta7 >EFJ>A
RETL). R!1r!s$ "! un$ su&rutin$ / c$r1$ !# 7$#r > !n )
El programa regresa de la subrutina y carga el valor de ( bits del registro L en el registro 2
4intaxis, 6etiqueta7 >EFD2,L
Ejemplo, >EFD2,3x@!
*ntes de la instruccion, 20xx
8espues de la instruccion, 203x@!
RETFIE. R!1r!s$ "! #$ rutin$ "! s!r7ici
4intaxis, 6etiqueta7 >EF'IE
SLEEP. Entr$ !n !st$" "! r!'s
*l salir, activa el bit de estado F9 y borra el P8. El 28F y el prescaler se borran.*l entrar en el modo 4DEEP,
se detiene el oscilador.
4intaxis, 6etiqueta7 4DEEP
'lags a+ectados, F9, P8, ?P2J'
;ORL). ) ;OR #it!r$#
>eali$a la +unci-n l-gica 9> exclusiva entre el contenido del registro 2 y la constante 5L5 de ( bits. El
resultado se almacena en el registro 2.
4intaxis, 6etiqueta7 K9>D2 L
'lags a+ectados, =
Ejemplo, K9>D2 3x*'
*ntes de la instrucci-n, 2 0 3xC!
8espus de la instrucci-n, 2 0 3x%*
SU0L). R!st$ L : )
* una constante 5L5 de ( bits se le resta el registro 2. El resultado es guardado en el mismo registro 2.
4intaxis, 6etiqueta7 4JCD2 L
'lags a+ectados, C,8C,=
3O6)F. 37!r !# 7$#r "!# r!1istr ) $# r!1istr (
El contenido del registro N2O se mueve al registro N+O.
4intaxis, 6etiqueta7 E9I2' +
'lags a+ectados, Ainguno
Ejemplo, E9I2' >E?
*ntes de la instrucci-n, >E?03x3, 203x*@
8espus de la instrucci-n, >E?03x*@, 203x*@
Y estas son las 35 instrucciones que podemos utili$ar para programar los microcontroladores PIC.
Da ra$-n para que solo se utilicen 35 instrucciones en la programaci-n es que los PIC son
microcontroladores >I4C, y estas instrucciones est#n bien optimi$adas para tener una mayor
velocidad de trabajo, una arquitectura m#s simple y un c-digo m#s compacto.

You might also like