Está en la página 1de 39

3.

1 Set de instrucciones de el PIC 16F84


Sintassi
ADDLW k

Descripcin Microchip
Add Literal and W

Operacin equivalente
W=W+k

ADDWF f,d Add W and f


ANDLW k AND Literal with W

d = W + f (donde d puede ser w o f)

ANDWF f,d AND W with f


Bit Clear f
BCF f,b

d = W AND f (donde d puede ser w o f)

BSF f,b

Bit Set f

f(b) = 1

BTFSC f,b

Bit Test f, Skip if Clear

f(b) = 0 ? Si, salta una instruccin

BTFSS f,b

Bit Test f, skip if Set

f(b) = 1 ? Si, salta una instruccin

CALL k

Subroutine Call

llama la subroutine en la direccin k

CLRF f

Clear f

f=0

CLRW

Clear W

Register W = 0

CLRWDT

Clear Watchdog Timer

Watchdog timer = 0

COMF f,d

Complement f

d = not f (donde d puede ser W o f)

DECF f,d

Decrement f

d = f -1 (donde d puede ser W o f)

W = W AND k
f(b) = 0

DECFSZ f,d Decrement f, Skip if 0


Go to address
GOTO k

d = f -1 (donde d puede ser W o f) si d=0 salta

INCF f,d

d = f +1 (donde d puede ser W o f)

Increment f

Salta en la direccin k

d = f +1 (donde d puede ser W o f) se d = 0 salta


INCFSZ f,d Increment f, Skp if 0
IORLW k Inclusive OR Literal with W W = W OR k
IORWF f,d Inclusive OR W with f
MOVLW k Move literal to W

d = f OR W (donde d puede ser W o f)

MOVF f,d

Move f

d = f (donde d puede ser W o f)

MOVWF f

Move W to f

f=W

NOP

No Operation

Ninguna operacin

OPTION

Load Option Register

OPTION = W

RETFIE

Return from Interrupt

Regresa de un interrupt handler

RETLW k

Return Literal to W

Regresa de una subroutine con W = k

RETURN

Return from Subroutine

Regresa de una subroutine

RLF f,d

Rotate Left f through Carry

d = f << 1 (donde d puede ser W o f)

RRF f,d

Rotate Right f through Carry d = f >> 1 (donde d puede ser W o f)

SLEEP

Go into Standby Mode

Pone en standby el PIC

SUBLW k

Subtract W from Literal

W=k-W

W=k

SUBWF f,d Subtract W from f


fSwap f
SWAPF

d = f - W (donde d puede ser W o f)

TRIS f

Load TRIS Register

TRIS di f = W

XORLW k

Exclusive OR Literal with W W = W XOR k

XORWF f,d Exclusive OR W with f

f = Swap dei bit 0123 con 4567 di

d = f XOR W (donde d puede ser W o f)

ADDLW

ADD Literal and W

Status Register

Suma la constante K a W
addlw k
Sintassi:
Operaciones equivalentes: W = W + k
Descripcin:
Suma la constante K al valor grabado en el acumulador W y pone el resultado
en el acumulador.
org 00H
Ejemplo:
start
movlw 10
addlw 12
Despues de haber realizado este programa el acumulador W valdra 22.
Nota
esta instruccin influencia i bit Z, DC y C de el registro STATUS.
Z vale 1 si el resultado de la operacin vale o.
DC vale 1 si el resultado de la operacin es un nmero superior de 15.
C vale 1 si el resultado es positivo es decir si el bit 7 de el registro que
contiene el resultado vale 0 y 1 si el resultado es negativo es decir si el bit de
el registro que contiene el resultado vale 1.

ADDWF

ADD W and F

Status Register

Suma el valor contenido en W con el valor contenido en el registro F


addwf f,d
Sintassi:
Operaciones equivalentes: d = W + f (donde d puede ser W o f)
Descripcin:
Esta instruccin suma el valor contenido en el acumulador W con el valor
contenido en el registro dirigido por el parametro f. El parametro d es un flag
que indica en cual registro debe ser puesto en memoria el resultado.
Para d = W el resultado se graba en el registro W
Para d = F el resultado se graba en el registro f
Ejemplo:
Veamos un ejemplo de suma entre dos registros:
add1 equ 0CH
add2 equ 0DH
org 00H
movlw 10
movwf add1
movlw 15
movwf add2
movf add1,W
addwf add2,W
Nota

;Primer addendo = 10
;Segundo addendo = 15
;W = add1
;W = W + add2

Esta instruccin influencia i bit Z, DC y C de el registro STATUS.


Z vale 1 si el resultado de la operacin vale 0.
DC vale 1 si el resultado de la operacin es un nmero superior a 15.
C vale 1 si el resultado es positivo es decir si el bit 7 de el registro que
contiene el resultado vale 0 y 1 si el resultado es negativo es decir si el bit 7
de el registro que contiene el resultado vale 0.

ANDLW

AND Literal with W

Status Register

Efectua el AND entre W y una constante K


andlw k
Sintassi:
Operaciones equivalentes: W = W AND k
Descripcin:
Efectua el AND entre el valor contenido en el acumulador W y el valor
constante K. El resultado es memorizado en el acumulador.
org 00H
Ejemplo:
start
movlw 10101010B
andlw 11110000B
...
Despues de haber realizador este programa el acumulador W valdra 10100000B.
Nota
Esta instruccin influencia el bit Z de el registro STATUS.
Z vale 1 si el resultado de la operacin vale 0.

ANDWF

AND W with F

Status Register

Efectua el AND logico entre el valor contenido en W y el valor contenido en el registro F


andwf f,d
Sintassi:
Operaciones equivalentes: d = W AND f (donde d puede ser W o f)
Descripcin:
Esta instruccin efectua el AND lgico entre el valor contenido en el
acumulador W y el valor contenido en el registro dirigido por el parametro f. El
parametro d es un flag que indica en cual registro se debe grabar el resultado.
Para d = W el resultado est grabado en el registro W
Para d = F el resultado est grabado en el registro f
Ejemplo:
Muchas veces el AND logico se utiliza para cubrir el valor de algunos bit en el
interior de un registro. Si por ejemplo quisieramos extraer de el nmero binario
01010101B los cuatros bit menos importantes para poder de esta manera
obtener el siguiente valor 00000101B, ser necesario solo preparar una mascara
de el tipo 00001111B y realizar el AND con nuestro valor inicial, veamos
como:.
movlw 01010101B
movwf 0CH
que ocultar
movlw 00001111B
andwf 0CH,W

;Graba en el registro
;0CH el valor inicial que hay
;Prepara la mascara de el bit
;Efectua el AND y graba el
;resultado en el acumulador W

El resultado en W sera 00000101B como solicitado.


W = 00001111 AND
f = 01010101 =
W = 0000010101
Nota

La ANDWF influencia el bit Z de el registro STATUS que valdra 1 si el


resultado de la operacin es cero.

BCF

Bit Clear F

Status Register

Pone en cero un bit que se encuentra en el registro F


bcf f,b
Sintassi:
Operaciones equivalentes:
f(b) = 0
Descripcin:
Esta instruccin pone en cero el bit b de el registro en la direccin f.
parm1 equ 0CH
Ejemplo:
org 00H
movlw 11111111B
;Valor inicial
movwf parm1
bcf
parm1,0
;D0=0
Al final de el programa el registro parm 1 vale 11111110B
Nota
Esta instruccin no influencia ningun bit de estado.

BSF

Bit Set F

Status Register

Mette en uno un bit en el registro F


bsf f,b
Sintassi:
Operaciones equivalentes:
f(b) = 1
Descripcin:
Esta instruccin mete en uno el bit b de el registro en la direccin f.
parm1 equ
0CH
Ejemplo:
org
00H
movlw 00000000B ;Valore inicial
movwf parm1
bsf
parm1,0
;D0=1
Al final de el programa el registro vale 00000001B.
Nota
Esta instruccin no influencia ningun bit de estado

BTFSC

Bit Test F, Skip if Clear

Status Register

Salta la instruccin siguiente si un bit en el registro vale 0


Btfsc f,b
Sintassi:
Operaciones equivalentes: f(b) = 0 ? Si, salta una instruccin
Descripcin:
Prueba el bit b que se encuentra en el registro en la direccin f y salta la
instruccin siguiente si el mismo vale cero.
parm1 equ 0CH
Ejemplo:
org 00H
movlw 11111110B ;Valore inicial
movwf parm1
loop
btfsc parm1,0
;D0 = 0 ? Si, sale
goto loop
;No, efectua el loop
Esta programa efectua un loop infinito el mismo programa no efectua el loop si
reemplazamos la instruccin :
movlw 11111110B ;Valor inicial
con la instruccin:
movlw 11111111B ;Valor inicial
Nota
Esta instruccin no influencia ningun bit de estado

BTFSS

Bit Test F, Skip if Set

Status Register

Salta la instruccin siguiente si un bit en el registro F vale 1


btfss f,b
Sintassi:
Operaciones equivalentes: f(b) = 1 ? Si, salta una instruccin
Descripcin:
prueba el bit b que se encuentra en el registro en la direccin f y salta la
instruccin siguiente si el mismo vale 1.
parm1 equ 0CH
Ejemplo:
org 00H
movlw
movwf

11111111B ;Valor inicial


parm1

loop
btfss parm1,0
;D0 = 1 ? Si, sale
goto
loop
;No, efectua el loop
Este programa efectua un loop infinito el mismo programa no efectua el loop si
reemplazamos la instruccin:
movlw 11111111B ;Valor inicial
con la instruccin:
Nota

movlw 11111110B ;Valor inicial


Esta instruccin no influencia ningun bit de estado.

CALL

Subroutine CALL

Status Register

Llamada a subroutine
call k
Sintassi:
Operaciones equivalentes:
Descripcin:
Llama durante la ejecucin una subroutine grabada en la direccin K.
El parametro K puede ser especificado utilizando directamente el valor
nmerico de la direccin o tambin la correspondiente label.
org 00H
Ejemplo:
call ledOn
...
;Subroutine cuando un led se prende
ledOn

Nota

bsf PORTB,LED1
return
Cuando la CPU de el PIC encuentra una instruccin CALL, graba en el STACK
el valor de el registro PC + 1 de esta manera se logra volver a comenzar la
ejecucin de la instruccin siguiente a la CALL, entonces escribe en el PC la
direccin de la subroutine saltando a la ejecucin de esta ultima.
El valor original de el PC se restablece en la salida de la subroutine con la
ejecucin de la instruccin de regreso RETURN o RETLW.
En el PIC16F84 estan disponibles 8 niveles de stack, por lo tanto el nmero
mximo de CALL que regresan, es decir de instrucciones CALL en el interior
de la subroutine que a su vz contienen otras CALL, se limita a 8 niveles.
Esta instruccin no influencia ningun bit de estado.

CLRF

CLeaR F register

Status Register

Pon en cero el registro F


clrf f
Sintassi:
Operaciones equivalentes: f = 0
Descripcin:
Esta instruccin pone en cero el valor contenido en el registro dirigido por el
parametro f.
Ejemplo:
Hagamos la hiptesis de poner de nuevo en cero el registro TMRO cuya
direccin es 01H esadecimal, la instruccin que hay que realizar ser:
clrf 01H
O tambin, se puede incluir al principio de nuestro source el file P16F84. INC,
se puede utilizar el nombre simbolico de el registro TMR0.
clrf TMR0
Despues de la ejecucin de esta instruccin el bit Z de el registro STATUS se
lleva a 1.
Nota

CLRW

CLeaR W register

Status Register

Pone en cero el registro W


clrw
Sintassi:
Operaciones equivalentes: W = 0
Descripcin:
Pone en cero el valor contenido en el registro W.
Ejemplo:
Nota

Despues de la ejecucun de esta instruccin el bit Z de el registro STATUS se


lleva a 1.

CLRWDT

CLeaR WatchDog Timer

Status Register

Reset de el timer de el watchdog


clrwdt
Sintassi:
Operaciones equivalentes:
Descripcin:
Esta instruccin debe ser utilizada cuando se programa el PIC con la opcin
Watchdog habilitada (fusible WDTE).
En esta modalidad el PIC habilita un timer que, una vez que pasa el tiempo
determinado, efectua el reset de el PIC.
Para evitar el reset el programa nuestro tendra que efectuar la instruccin
CLRWDT en forma ciclica para poder poner en cero el timer antes de el tiempo
mismo.
Si no ponemos en cero el timer en tiempo, el circuito de el watchdog (de el
ingles perro guardian) entendera esta situacin como un bloqueo de el programa
que se esta realizando o ejecutando y efectuara el reset para desbloquear.
org 00H
Ejemplo:
loop
clrwdt
goto
loop
Nota

Esta instruccin no influencia ningun bit de estado.

COMF

COMplement F

Status Register

Efectua el complemento de el registro F el registro F


comf f,d
Sintassi:
Operaciones equivalentes: d = NOT f (donde d puede ser W o f)
Descripcin:
Esta instruccin efectua el complemento de el valor que se encuentra en el
registro dirigido por el parametro f.
El parametro d determina la destinacin de el valor obtenido.
parm1 equ 0CH
Ejemplo:
org 00H
movlw 01010101B
movwf parm1

Nota

comf parm1,F
...
Al final de la ejecucin de el programa el valor de el registro parm1 ser
10101010B.
Esta instruccin influencia el bit Z de el registro STATUS.
Z vale 1 si el resultado de la operacin vale 0.

DECF

DECrement F register

Status Register

Disminuye el contenido de el registro F


decf f,d
Sintassi:
Operaciones equivalentes: d = f - 1 (donde d puede ser W o f)
Descripcin:
Esta instruccin disminuye el contenido de el registro dirigido por el parametro
f.
El parametro d es un flag que indica en cual registro se debe grabar el resultado.

Ejemplo:

Para d = W el resultado se graba en el registro W


Para d = F el resultado se graba en el registro f
Con el siguiente programa se escribe el valor 23 H en el registro a la direccin
OCH disminuyendo por lo tanto de 1.
Cuando termina la ejecucin el registro en la zona 0CH habra el valor 22H.
movlw 23H
movwf 0CH

;Escribe en W el valor 23 H
;Copia en el registro 0CH el valor

de W
decf OCH,F ;Reduce el valor contenido en el
registro 0CH
Nota

Esta instruccin influencia el bit Z de el registro STATUS.


Z vale 1 si el resultado de la operacin vale 0.

DECFSZ

DECrement F, Skip if Zero

Status Register

Reduce el valor de el registro f y salta la instruccin siguiente si el resultado vale cero.


decfsz f,d
Sintassi:
Operaciones equivalentes: d= f - 1 (donde d puede ser W o f) si d = 0 salta
Descripcin:
Reduce el valor de el registro en la direccin f y si el resultado vale cero salta la
instruccin siguiente.
El resultado de la reduccin puede ser grabado en el mismo registro f o tambin
en el acumulador W en base a el valor de el flag d.

Ejemplo:

Para d = W el resultado se graba en el registro W


Para d = F el resultado se graba en el registro f
counter equ 0CH
org 00H
movlw
movwf

10
counter

;counter = 10

loop

Nota

decfsz counter,F ;counter = counter 1


;counter = 0 ? Si sale
goto
loop
;No, continua
Este programa efectua por 10 veces las instrucciones decfsz hasta que sale para
counter = 0.
Esta instruccin no influencia ningun bit de estado.

GOTO

GO TO address

Status Register

Ve en ejecucin a la direccin K
goto k
Sintassi:
Operaciones equivalentes:
Descripcin:
Determina un salto de el programa en ejecucin en la direccin K.
El parametro K puede ser especificado utilizando directamente el valor
nmerico de la direccin o tambin la correspondiente label.
org 00H
Ejemplo:
loop

Nota

goto loop
Este programa efectua un ciclo (loop) infinito.
Esta instruccin no influye ningun bit de estado.

INCF

INCrement F

Status Register

Aumenta el valor de el registro en la direccin F


incf f,d
Sintassi:
Operaciones equivalentes: d = f + 1 (donde d puede ser W o f)
Descripcin:
Aumenta el contenido de el registro en la direccin f y graba el resultado en el
mismo registro o en el acumulador W en base a el valor de el flag d:
Para d= W el resultado se graba en el registro W
Para d = F el resultado se graba en el mismo registro F
Ejemplo:
Nota

Esta instruccin influencia el bit Z de el registro STATUS.


Z vale 1 si el resultado de la operacin vale 0.

INCFSZ

INCrement F, Skip if Zero

Status Register

Aumenta el valor de el registro f y salta la instruccin siguiente si el resultado vale cero.


incfsz f,d
Sintassi:
Operaciones equivalentes: d= f + 1 (donde d puede ser W o f) si d = 0 salta
Descripcin:
Aumenta el valor de el registro en la direccin f y si el resultado vale cero salta
la instruccin siguiente.
El resultado de la reduccin puede ser grabado en el mismo registro f o tambin
en el acumulador W en base a el valor de el flag d.
Para d = W el resultado se graba en el registro W
Para d = F el resultado se graba en el registro f
Ejemplo:
Nota

Esta instruccin influencia el bit Z de el registro STATUS.


Z vale 1 si el resultado de la operacin vale 0.

IORLW

Inclusive OR Literal with W

Status Register

Efectua el OR entre W y una constante K


iorlw k
Sintassi:
Operaciones equivalentes: W = W OR k
Descripcin:
Efectua el OR incluido entre el valor contenido en el acumulador W y el valor
costante K.
org 00H
Ejemplo:
start
movlw 00001111B
iorlw 11110000B
...
Despues de haber realizado este programa el acumulador W vale 11111111B .
Nota
Esta instruccin influencia el bit Z de el registro STATUS.
Z vale 1 si el resultado de la operacin vale 0.

IORWF

Inclusive OR W with F

Status Register

Efectua el OR incluido entre el valor contenido en W y el valor contenido en el registro F


iorwf f,d
Sintassi:
Operaciones equivalentes: d = f OR W (donde d puede ser W o f)
Descripcin:
Esta istruccin efectua el OR inclusivo entre el valor contenido en el
acumulador W y el valor contenido en el registro dirigido por el parametro f.
El parametro d determina donde se graba el resultado de la operacin:

Ejemplo:

Para d = W el resultado se graba en el acumulador W.


Para d = F el resultado se graba en el registro f.
parm1 equ 0CH
org 00H
movlw 00001111B
movwf parm1

Nota

movlw 11111111B
iorwf parm1,F
Al final de la ejecucin el valor de el registro parm 1 ser: 11111111B.
Esta instruccin influencia el bit Z de el registro STATUS.
Z vale 1 si el resultado de la operacin vale 0.

MOVLW
Da a W un valor constante
Sintassi:
Operaciones equivalentes:
Descripcin:
Ejemplo:

Nota

MOVe Literal to W

Status Register

movlw k
W=k
Da al acumulador W el valor constante K.
org 00H
start
movlw 20
...
Despues de haber realizado este programa el acumulador W vale 20.
Esta instruccin no influye ningun bit de estado.

MOVF

MOVe F

Status Register

Mueve el contenido de el registro F


movf f,d
Sintassi:
Operaciones equivalentes: d = f (donde d puede ser W o f)
Descripcin:
Esta instruccin copia el contenido de el registro dirigido por el parametro f o en
el acumulador W o en el mismo registro F.
El parametro d determina la destinacin.

Ejemplo:

Per d = W el valor se graba en el registro W


Per d = F el valor se deja en el registro f. En este caso la utilidad de la
instruccin es que se altera el bit Z de el flag STATUS enbase a el valor
contenido en el registro f.
El ejemplo siguiente copia el valor contenido en el registro en la direccin 0CH
en el accumulatore W:
movf 0CH,W

Nota

La ejecucin de la MOVF no influencia ningun bit de estado.

MOVWF

MOVe W to F

Status Register

Mueve el contenido de el registro W en el registro F


movwf f
Sintassi:
Operaciones equivalentes: f = W
Descripcin:
Esta instruccin copia el contenido de el registro W en el registro dirigido por el
parametro f.
Ejemplo:
Hagamos la ipotesi de quere escribir el valor 10H (esadecimal) en el registro
TMRO.
Las instrucciones que habr que realizar o seguir seran las siguientes.
movlw 10H

;Escribe en el registro W el valor

movwf 01H

;Y lo graba en el registro TMR0

10H
Para los registros utilizados por el PIC para funciones especificas, normalmente
no se introduce directamente la direccin ma el correspondiente nombre
simbolico definido en el file P16F84.INC.
El codigo ser, entonces el siguiente:
movlw 10H

;Escribe en el registro W el valor

10H
movwf TMR0 ;y lo graba en el registro TMR0

Nota

La ejecucin de la MOVWF no influencia ningun bit de estado.

NOP

No OPeration

Status Register

Ninguna operacin
nop
Sintassi:
Operaciones equivalentes:
Descripcin:
Esta instruccin no sigue ninguna operacin pero es util para introducir un
retraso de un ciclo de mquina.
Ejemplo:
Utilizando un quarzo de 4 MHz se podra obtener un retraso de 1 ?s para cada
instruccin NOP introducida en nuestro source..
nop

Nota

;Sigue un retraso de 1s

La NOP no influencia ningun bit de estado.

OPTION

load OPTION register

Status Register

Asigna el valor en W a el registro OPTION


option
Sintassi:
Operaciones equivalentes: OPTION = W
Descripcin:
Esta instruccin graba en el registro especial OPTION el valor contenido en el
acumulador W.
org 00H
Ejemplo:
start
movlw 01000100B
option
...
Esta instruccin existe para mantener la compatibilidad con los PIC producidos
hasta ahora, la Microchip da el consejo de no utilizarla.
Es en vz bueno utilizar las siguientes instrucciones.
org 00H
start
bsf
STATUS,RP0
registros 1

;Activa el banco de

movlw 01000100B
movwf OPTION_REG
...

Nota

En otras palabras se aconseja escribir directamente en el registro OPTION


presente en el banco 1 de los registros de el PIC utilizando la MOVWF en vz
de la instruccin OPTION que en un futuro podra no ser ms utilizada.
Esta instruccin no influencia ningun bit de estado.

RETFIE

RET From Interrupt

Status Register

Regresa a una subroutine


retfie
Sintassi:
Operaciones equivalentes:
Descripcin:
Esta instruccin debe ser introducida al final de cada subroutine de gestion de
los interrupt para dar de nuevo el control a el programa principal.
org 00H
Ejemplo:
loop
goto loop ;Loop infinito
org 04H

;Interrupt vector

intHandler

Nota

retfi
;Regresa de el interrupt
En esta source el programa principal realiza un loop infinito.
Si se habilita uno de los interrup de el 16F84 apenas el mismo se realizara el
control ser dado automaticamente a el programa que se encuentra en la
direccin 04H (en el ejemplo intHandler), la instruccin RETFI determinara
entonces el regreso a el lopp principal.
Esta instruccin no influencia ningun bit de estado.

RETLW

RETurn Literal to W

Status Register

Regresa de una subroutine con una constante en W


retlw k
Sintassi:
Operaciones equivalentes:
Descripcin:
Esta instruccin regresa el control de una subroutine a el programa principal.
Diferentemente de la instruccin RETURN la misma permite de pasar, a travz
de el acumulador W, el valor constante K a el programa principal.
rtc
equ 0CH
Ejemplo:
org 00H
call mySub1
movwf rtc
...
mySub1

Nota

nop
retlw 10
Una vz que se realiza este programa graba en el registro rtc el valor 10 pasando
por la subroutine mysub 1.
Esta instruccin no influencia ningun bit de estado
Observar tambin la instruccin RETURN.

RETURN

RETURN from subroutine

Status Register

Regresa de una subroutine


return
Sintassi:
Operaciones equivalentes:
Descripcin:
Esta instruccin debe ser introducida al final de cada subroutine para comenzar
de nuevo la ejecucin de el programa principal.
org 00H
Ejemplo:
call
....

mySub1

mySub1
nop
return
Nota: En el PIC16F84 pueden ser colocadas en forma de nido hasta 8 llamadas
a subroutine de el tipo:
org 00H
call
....

mySub1

mySub1
call
mySub2
return
mySub2
call
mySub3
return
mySub3
return
Nota

Esta instruccin no influencia ningun bit de estado.


Observar tambien la instruccin RETLW.

RLF

Rotate Left F through carry

Status Register

Gira a la izquierda el contenido de el registro f pasando por el Carry


rlf f,b
Sintassi:
Operaciones equivalentes: d = f << 1 (donde d puede ser W o f)
Descripcin:
Gira el bit contenido en el registro en la direccin f hacia la izquierda (es decir
de los bit meno significativos hacia aquellos ms significativos) pasando por el
bit CARRY de el registro STATUS.
El contenido de el bit CARRY de el registro status es llevado o cambiado en el
bit DO mientras el valor en la salida de el bit D7 es cambiado hacia el CARRY.
El valor de el parametro d determina la destinacin de el resultado obtenido al
final de la rotacin:

Ejemplo:

Para d = W el resultado se graba en el registro W dejando el registro f


invariable.
Para d = F el resultado se graba en el mismo registro f
parm1 equ 0CH
org 00H

Nota

clrf

C,STATUS

;Pone en cero el CARRY

movlw
movwf

01010101B
parm1

;Valore inicial

rlf
parm1,F
Al final de el programa el registro parm 1 valdra 10101010B mientras el
CARRY tendra un valor cero.
Esta instruccin no influencia ningun otro bit de estado adems de el CARRY.

RRF

Rotate Right F through carry

Status Register

Gira a la derecha el contenido de el registro f pasando por el Carry


rrf f,b
Sintassi:
Operaciones equivalentes: d = f >> 1 (dove d pu essere W o f)
Descripcin:
Gira el bit contenido en el registro en la direccin f hacia la derecha ( es decir
desde los bit ms significativos hacia los bit menos significativos) pasando por
el bit CARRY de el registro STATUS como est representado en la Figura 3.2:

Fig. 3.2
El contenido de el bit CARRY de el registro status se pone en el bit D7 mientras
el valor en la salida de el bit D0 se introduce en el CARRY.
El valor de el parametro d determina la destinacin de el resultado obtenido al
final de la rotacin:

Ejemplo:

Per d = W El resultado se graba en el registro W dejando el registro f sin


cambiar.
Per d = F el resultado se graba en el mismo registro f
parm1 equ 0CH
org 00H
clrf
movlw

Nota

C,STATUS
01010101B

;Pone en cero el CARRY


;Valor inicial

movwf parm1
rrf
parm1,F
Al final de el programa el registro parm 1 vale 00101010B mientras el CARRY
vale 1.
Esta instruccin no influencia ningun otro bit de estado adems de el CARRY.

SLEEP

go into standby mode

Status Register

Mete il PIC en standby


sleep
Sintassi:
Operaciones equivalentes:
Descripcin:
Esta instruccin bloquea la ejecucin de el programa que se est realizando y
pone el PIC en un estado de stanby (sleep de el Ingles to sleep, dormir).
org 00H
Ejemplo:
start
sleep
Nota

Esta instruccin no influencia ningun bit de estado.

SUBLW

SUBtract W from Literal

Status Register

Sustrae a K el valor en W
sublw k
Sintassi:
Operaciones equivalentes: W = k - W
Descripcin:
Sustrae a la constante K el valor grabado en el acumulador W.
org 00H
Ejemplo:
start
movlw 10
sublw 12
...
despues de haber realizado este programa el valor de el acumulador W vale 2.
Nota
esta instruccin influencia i bit Z, DC y C de el registro STATUS.
Z vale 1 si el resultado de la operacin vale 0.
DC vale 1 si el resultado de la operacin es un nmero superior a 15.
C vale 1 si el resultado es positivo es decir si el bit 7 de el registro que
contiene el resultado vale 0 y 1 si el resultado es negativo es decir si el bit 7
de el registro que contiene el resultado vale 1.

SUBWF

SUBstract W from F

Status Register

Sustrae el valor contenido en W con el valor contenido en el registro F


subwf f,d
Sintassi:
Operaciones equivalentes: d = f - W (donde d puede ser W o f)
Descripcin:
Esta instruccin sustrae el valor contenido en el registro W con el valor
contenido en el registro dirigido por el parametro f.
El parametro d es un flag que indica en cual registro debe ser grabado el
resultado.
Para d = W el resultado es grabado en el registro W
Para d= F el resultado se encuentra grabado en el registro f
Ejemplo:
Hagamos el analisis con un ejemplo tomado de la data sheet de la Microchip:
Si intruducimos la instruccin:
subwf REG1,F
Donde reg 1 es la direccin de un cualquier registro especificado a travz de el
comando:
REG1 RES 1
Para los valores iniciales de REG1=3 y W=2, despues de la ejecucin tendremos
REG1=1 y C=1 visto que el resultado es positivo.
Para los valores iniciales de REG1=2 y W=2 despues de la ejecucin tendremos
REG1=0 y C=1 porque el resultado es siempre positivo.
Para los valores iniciales de REG1=1 y W=2, tendremos REG1=FFH es decir -1
entonces C=0 porque el resultado es negativo.
Nota

Esta instruccin influencia i bit Z, DC y C de el registro STATUS.


Z vale 1 si el resultado de la operacin vale 0.
DC vale 1 si el resultado de la operacin es un nmero superior a 15.
C vale 1 si el resultado es positivo es decir si el bit 7 de el registro que
contiene el resultado vale 0 y 1 si el resultado es negativo es decir si el bit 7
de el registro que contiene el resultado vale 1.

SWAPF

SWAP F

Status Register

Cambia el valor de los cuatros bit ms significativos de el registro en la direccin F con los quatros bit
menos significativos.
swap f,d
Sintassi:
Operaciones equivalentes: f = Swap de los bit 0123 con 4567 de f
Descripcin:
Cambia el valor de los cuatros bit ms significativos (D7 - D4) contenidos en el
registro en la direccin f con los cuatros bit menos significativos (D3 - D0) de el
mismo.
El resultado se graba en el acumulador W o en el mismo registro f en base a el
valor de d:
Para d = W el resultado se graba en el registro W
Para d = F il risultato se graba en el registro F
Ejemplo:
Nota

Esta instruccin no influencia ningun bit de estado

TRIS

load TRIS register

Status Register

Asigna el valor a el registro TRIS


tris f
Sintassi:
Operaciones equivalentes: TRIS di f = W
Descripcin:
Esta instruccin graba en uno de los registros especiales TRIS el valor
contenido en el acumulador W.
Los registros TRIS determinan el funzionamiento en entrada y en salida de la
linea de I/O de el PIC.
Exiate un registro TRIS para cada puerta de I/O llamado TRISA, TRISB etc.
org 00H
Ejemplo:
start
movlw
tris
...

11111111B
PORTA

Nota: Esta instruccin existe para matener la compatibilidad con los PIC hasta
ahora producidos, la Microchip no aconseja su uso. Es en vs aconsejado
utilizar las siguientes instrucciones.
org 00H
start
bsf

Nota

STATUS,RP0

;Activa

banco de registros 1

movlw 11111111B
movwf TRISA
...
En otras palabras se aconseja de escribir directamente en los registros TRIS
presentes en el banco 1 de losregistros de el PIC utilizando la MOVWF en vz
de la instruccin TRIS que en un futuro podria no ser ms utilizada.
Esta instruccin no influencia ningun bit de estado.

XORLW

Exclusive OR Literal with W

Status Register

Efectua el OR exclusivo entre W y una constante K


xorlw k
Sintassi:
Operaciones equivalentes: W = W XOR k
Descripcin:
Efectua el OR exclusivo entre el valor contenido en el acumulador W y el valor
constante K.
org 00H
Ejemplo:
start
movlw 00000000B
xorlw 11110000B
...
Despues de haber realizado este programa el acumulador W vale 11110000B.
Nota
Esta instruccin influencia el bit Z de el registro STATUS.
Z vale 1 si el resultado de la operacin vale 0.

XORWF

eXclusive OR W with F

Status Register

Efectua el OR exclusivo entre el valor contenido en W y el valor contenido en el registro F.


xorwf f,d
Sintassi:
Operaciones d = f XOR (donde d puede ser W o f)
equivalentes:
Descripcin: Esta instruccin efectua el OR exclusivo (XOR) entre el valor contenido en el acumulador W
y el valor contenido en el registro dirigido por el parametro f.
El parametro d es un flag que indica en cual registro debe ser grabado el resultado.
Para d = W el resultado se graba en el registro W
Para d = F el resultado se graba en el registro f

Ejemplo:

Esta instruccin influencia los bit Z de el registro STATUS que vale 1 si el resultado de la
operacin es 0.
Hagamos la hipotesis de tener que efectuar el XOR entre el registro W y el registro REG1
definido por nosotros en la direccin 0CH con el comando:
REG1 EQU 0CH
Podemos utilizar la instruccin IORWF en dos formas segun a donde queremos poner el
resultado, es decir:
xorwf COUNTER,F

;COUNTER = COUNTER XOR W

O tambin:
xorwf COUNTER,W

Nota

;W = COUNTER XOR W

El OR exclusivo (XOR) es una operacin entre dos bit donde el bit que resulta vale o si los
dos bit son iguales.
Muchas veces el XOR se utiliza en el assembler de el PIC para efectuar la comparacin entre
dos valores cuando falta una instruccin especifica.
Observemos como:
Hipotisamos de tener un valor en el registro REG1 y de querer verificar si es igual a 57H.
Las instrucciones que hay que seguir son las siguientes:
movlw 57H

;W = Valor que hay que comparar = 57H


;resultado W = 57H

xorwf REG1,W

;W = W XOR REG1 Efectua el XOR con


;el valor en REG 1

btfss STATUS,Z

;Salta la instruccin siguiente si el


;resultado de el XOR vale o, es decir
;si el valor de REG 1 es par a 57 H

goto
goto

;Salta si es diferente de 57 H
;Salta si es igual a 57 H

diverso
uguale

Status Register

También podría gustarte