|
|
TABLA
DE NEMÓNICOS DE LA FAMILIA PIC16F84
MNEMÓNICO
|
DESCRIPCIÓN
|
CÓDIGO
OPERACIÓN
|
FLAGS
AFECTADOS
|
NOTAS
|
Instrucciones
Orientadas a Registros
|
ADDWF
f,d
ANDWF f,d
CLRF f
CLRW
COMF f,d
DECF f,d
DECFSZ 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
|
(W)+(f)
a (destino)
(W) AND (f) a (destino)
00 a (f) (borrar registro F)
00 a (W) (borrar W)
Complemento de f [(#f) a(destino)]
(f)-1 a destino (decrementa f)
(f)-1 a destino y si resultado es 0
salta (DECrementa F,Salta si Zero)
(f)+1 a destino (INCrementa F)
(f)+1 a destino y si resultado es 0
salta
(W) OR (f) a destino
MOVer f a destino
(W) a (f) MOVer W a destino F
No operación
Rota f a la izq a través del
carry a destino
Rota f a la dcha a través del
cary a destino
(f)(W) a (destino)
Intercambia los nibbles de f a destino
(W) XOR (f) a (destino)
|
00
0111 dfff ffff
00 0101 dfff ffff
00 0001 1fff ffff
00 0001 0000 0011
00 1001 dfff ffff
00 0011 dfff ffff
00 1011 dfff ffff
00 1010 dfff ffff
00 1111 dfff ffff
00 0100 dfff ffff
00 1000 dfff ffff
00 0000 1fff ffff
00 0000 0xx0 0000
00 1101 dfff ffff
00 1100 dfff ffff
00 0010 dfff ffff
00 1110 dfff ffff
00 0110 dfff ffff
|
C,
DC, Z
Z
Z
Z
Z
Z
Ninguno
Z
Ninguno
Z
Z
Ninguno
Ninguno
C
C
C,DC,Z
Ninguno
Z
|
1,2
1,2
2
1,2
1,2
1,2,3
1,2
1,2,3
1,2
1,2
1,2
1,2
1,2
1,2
1,2
|
Instrucciones
orientadas a Bit
|
BCF
f,b
BSF f,b
BTFSC f,b
BTFSS f,b
|
Coloca
a 0 el bit b del registro f
Coloca a 1 el bit b del registro
f
Salta si el bit b del reg. f
es 0
Salta si el bit b del reg. f
es 1
|
01
00bb bfff ffff
01 01bb bfff ffff
01 10bb bfff ffff
01 11bb bfff ffff
|
Ninguno
Ninguno
Ninguno
Ninguno
|
1,2
1,2
3
3
|
Instrucciones
con literales 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
|
(W)+
K a (W)
(W) AND K a (W)
Llamada a subrutina
Clear del temporizador del WD
Go To dirección (ir a dirección)
(W) OR K a (W)
K a (W)
Retorno de una interrupción
Retorno con un literal en W
Retorno de una subrutina
Modo Standby
K (W) à W
(W) XOR K à (W)
|
11
111x kkkk kkkk
11 1001 kkkk kkkk
10 0kkk kkkk kkkk
00 0000 0110 0100
10 1kkk kkkk kkkk
11 1000 kkkk kkkk
11 00xx kkkk kkkk
00 0000 0000 1001
11 01xx kkkk kkkk
00 0000 0000 1000
00 0000 0110 0011
11 110x kkkk kkkk
11 1010 kkkk kkkk
|
C,DC,Z
Z
Ninguno
Z
Ninguno
Ninguno
Ninguno
Ninguno
C,DC,Z
Z
|
|
Notas.-
- Al modificar un registro de E/S con una
operación sobre él mismo (por ejemplo MOVF PORTB,1), el valor utilizado
es el que se halle presente en los pines del PORTB. Por ejemplo, si
el biestable tiene un "1" para una patilla configurada como
entrada y se pone a nivel bajo desde el exterior, el dato se volverá
a escribir como "0".
- Si se ejecuta esta instrucción sobre el
TMR0 y d=1, será borrado el divisor de frecuencia (preescaler), si está
asignado al TMR0.
- Si se modifica el Contador de Programa
(PC) o una condición de prueba es verdadera, la instrucción requiere
dos ciclos máquina. El segundo ciclo se ejecuta como un NOP
ADDLW
|
|
ADDLW
|
ADD Literal to W
|
Operación |
(W) + k ----> (W)
|
Sintaxis |
[Etiqueta] ADDLW k
|
Operadores |
0 < k < 255
|
Cod.Oper. |
0001 11df ffff
|
Palabras |
1
|
Ciclos |
1
|
Código de Operación |
11
|
111x
|
kkkk
|
kkkk
|
Descripción |
Suma
el contenido del registro W al literal k, y almacena
el resultado en W.Si se produce acerreo el flag C se
pone a "1"
Nota.- Esta instrucción no existe en
el PIC 16C5X
|
Registro de STATUS
PA2
|
PA1
|
PA0
|
TO#
|
PD#
|
Z
|
DC
|
C
|
-
|
-
|
-
|
-
|
-
|
X
|
X
|
X
|
C Se pone a 1 si se produce
un Acarreo desde el bit de mayor peso
DC Se pone a 1 si se genera
un Acarreo del bit 3 al bit 4.
Z
Se pone a 1 si el resultado de la operación es cero
EJEMPLO:
ADDLW 0x15
Si antes de la instrucción:
W = 10h = 0001 0000 b
Al ejecutarse la instrucción
W = 10 h + 15 h = 25 h
W = 0001 0000 b + 0001 0101 b = 0010 0101
b
Volver
a tabla
ADDWF
|
|
ADDWF
|
ADD W to F
|
Operación |
(W) + (f) ----> (destino)
|
Sintaxis |
[Etiqueta] ADDWF f,d
|
Operadores |
0 < f < 127
d [0,1]
|
Palabras |
1
|
Ciclos |
1
|
Código de Operación |
00
|
0111
|
dfff
|
ffff
|
Descripción |
Suma
el contenido del registro W al contenido del registro f,
y almacena el resultado en W si d = 0, y en el registro f
si d = 1.Si se produce acerreo el flag C se pone a "1" |
Registro de STATUS
PA2
|
PA1
|
PA0
|
TO#
|
PD#
|
Z
|
DC
|
C
|
-
|
-
|
-
|
-
|
-
|
X
|
X
|
X
|
C Se pone a 1 si se produce
un Acarreo desde el bit de mayor peso
DC Se pone a 1 si se genera
un Acarreo del bit 3 al bit 4.
Z Se pone a 1 si el resultado
de la operación es cero
EJEMPLO: ADDWF FSR,0
Si antes de la instrucción. W = 17 h y FSR
= C2 h como d=0
Al ejecutarse: W = 17 h+ C2 h = D9 h
FSR = C2 h
Volver
a tabla
ANDLW
|
|
ANDLW
|
AND Literal and W
|
Operación |
(W).AND. (k) ---->
(W)
|
Sintaxis |
[Etiqueta] ANDLW k
|
Operadores |
0 < f < 255
|
Palabras |
1
|
Ciclos |
1
|
Código de Operación |
11
|
1001
|
kkkk
|
kkkk
|
Descripción |
Efectúa
la operación AND lógico entre el contenido del registro W y
el literal k, y almacena el resultado en W. |
Registro de STATUS
PA2
|
PA1
|
PA0
|
TO#
|
PD#
|
Z
|
DC
|
C
|
-
|
-
|
-
|
-
|
-
|
X
|
-
|
-
|
Z Se pone a 1 si el resultado de la operación
es cero
EJEMPLO:
ANDLW 0x5F
Si antes de la instrucción. W
= A3 h
Al ejecutarse: W = 0101 1111
b AND 1010 0011 b = 0000 0011 B = 03 h
Volver
a tabla
ANDWF
|
|
ANDWF
|
AND W wind F
|
Operación |
(W) AND (f) ---->
(destino)
|
Sintaxis |
[Etiqueta] ANDWF f,d
|
Operadores |
0 < f < 127
d [0,1]
|
Palabras |
1
|
Ciclos |
1
|
Código de Operación |
00
|
0101
|
dfff
|
ffff
|
Descripción |
Efectúa
la operación AND lógico entre el contenido del registro W y
el contenido del registro f, y almacena el resultado en W
si d = 0, y en f si d = 1. |
Registro de STATUS
PA2
|
PA1
|
PA0
|
TO#
|
PD#
|
Z
|
DC
|
C
|
-
|
-
|
-
|
-
|
-
|
X
|
-
|
-
|
Z Se pone a
1 si el resultado de la operación es cero
EJEMPLO: ANDWF FSR,1
Si antes de la instrucción. W = 17 h = 0001
0111 b y FSR = C2 h = 1100 0010 h
Al ejecutarse:
W = 17 h = 0001 0111 b
FSR = 0001 0111 b AND 1100 0010 b = 0000 0010
b = 02 h
Volver
a tabla
BCF
|
|
BCF
|
Bit Clear F
|
Operación |
0 --> (f<b>)
|
Sintaxis |
[Etiqueta] BCF f,b
|
Operadores |
0 < f < 127
0 < b < 7
|
Palabras |
1
|
Ciclos |
1
|
Código de Operación |
01
|
00bb
|
bfff
|
ffff
|
Descripción |
Pone
a cero el bit número b del registro f |
Registro de STATUS
PA2
|
PA1
|
PA0
|
TO#
|
PD#
|
Z
|
DC
|
C
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
EJEMPLO: BCF FLAG_REG,
7
Si antes de la instrucción el registro
FLAG_REG = C7 h = 1100 0111 b
Al ejecutarse la instrucción, el registro
queda con el valor:
FLAG_REG = 47b = 0100 0111 b
Volver
a tabla
BSF
|
|
BSF
|
Bit Set F
|
Operación |
1 --> (f<b>)
|
Sintaxis |
[Etiqueta] BSF f,b
|
Operadores |
0 < f < 127
0 < b < 7
|
Palabras |
1
|
Ciclos |
1
|
Código de Operación |
01
|
11bb
|
bfff
|
ffff
|
Descripción |
Pone
a 1 el bit b del registro f |
Registro de STATUS
PA2
|
PA1
|
PA0
|
TO#
|
PD#
|
Z
|
DC
|
C
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
EJEMPLO: BSF FLAG_REG,
7
Si antes de la instrucción
el registro tiene el valor.
FLAG_REG = 0A h = 0000 1010
b
Al ejecutarse la instrucción,
el registro queda con el valor:
FLAG_REG = 8A h = 1000 1010
b
Volver
a tabla
BTFSC
|
|
BTFSC
|
Bit Test, Skip if Clear
|
Operación |
skip if (f<b>)
= 0
|
Sintaxis |
[Etiqueta] BTFSC f,b
|
Operadores |
0 < f < 127
0 < b <7
|
Palabras |
1
|
Ciclos |
1 (2)
|
Código de operación
|
01
|
10bb
|
bfff
|
ffff
|
Descripción |
Si
el bit número b del registro f es cero, la instrucción
que sigue a ésta se ignora y se trata como un NOP (skip). En este
caso, y sólo en este caso, la instrucción BTFSC precisa dos ciclos
para ejecutarse. |
Registro de STATUS
PA2
|
PA1
|
PA0
|
TO#
|
PD#
|
Z
|
DC
|
C
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
EJEMPLO:
HERE BTFSC FLAG,1
FALSE GOTO PROCESS_CODE
TRUE .
Si antes de la instrucción.
PC = dirección HERE
Al ejecutarse:
if FLAG<1> = 0,
PC = dirección TRUE
if FLAG<1> = 1,
PC = dirección FALSE
Volver
a tabla
BTFSS
|
|
BTFSS
|
Bit Test, Skip if Set
|
Operación |
skip if (f<b>)
= 1
|
Sintaxis |
[Etiqueta] BTFSS f,b
|
Operadores |
0 < f < 127
0 < b <7
|
Palabras |
1
|
Ciclos |
1 (2)
|
Código de Operación |
01
|
11bb
|
bfff
|
ffff
|
Descripción |
Si
el bit número b del registro f está a 1, la instrucción
que sigue a ésta se ignora y se trata como un NOP (skip). En este
caso, y sólo en este caso, la instrucción BTFSS precisa dos ciclos
para ejecutarse. |
Registro de STATUS
PA2
|
PA1
|
PA0
|
TO#
|
PD#
|
Z
|
DC
|
C
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
EJEMPLO:
HERE BTFSS FLAG,1
FALSE GOTO PROCESS_CODE
TRUE .
Si antes de la instrucción.
PC = dirección HERE
Al ejecutarse:
if FLAG<1> = 0,
PC = dirección FALSE
if FLAG<1> = 1,
PC = dirección TRUE
Volver
a tabla
CALL
|
|
CALL
|
Subrutine Call
|
Operandos |
0 = k = 2047
|
Sintaxis |
[Etiqueta] CALL k
|
Operación |
(PC)+1 ---> Top of
Stack
k ---> PC <10:0>;
PCLATCH (<4:3>)
---> PC (<12,11>)
|
Palabras |
1
|
Ciclos |
2
|
Código de Operación |
10
|
0kkk
|
kkkk
|
kkkk
|
Descripción |
Salvaguarda
la dirección de vuelta en la Pila y después llama a la subrutina situada
en la dirección cargada en el PC.
El modo de cálculo de la dirección efectiva
difiere según la familia PIC utilizada. También hay que posicionar
PA2, PA1 y PA0 (PIC 16C5X) o el registro PCLATCH (En los demás PIC)
antes de ejecutarse la instrucción.
|
Registro de STATUS
PA2
|
PA1
|
PA0
|
TO#
|
PD#
|
Z
|
DC
|
C
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
EJEMPLO:
HERE CALL THERE
Si antes de la instrucción.
PC = dirección HERE
Al ejecutarse:
PC = dirección (THERE)
TOS = dirección (HERE +1)
Volver
a tabla
CLRF
|
|
CLRF
|
Clear f
|
Operación |
00h --> f
1 ---> Z
|
Sintaxis |
[Etiqueta] CLRF f
|
Operadores |
0 < f < 127
|
Palabras |
1
|
Ciclos |
1
|
Código de Operación |
00
|
0001
|
1fff
|
ffff
|
Descripción |
Se
borra el contenido del registro f y el flag Z se activa |
Registro de STATUS
PA2
|
PA1
|
PA0
|
TO#
|
PD#
|
Z
|
DC
|
C
|
-
|
-
|
-
|
-
|
-
|
1
|
-
|
-
|
Z Se pone a 1 si el resultado
de la operación es cero
EJEMPLO:
CLRF REG
Si antes de la instrucción.
REG = 5A h
Al ejecutarse: REG = 00 h
flag Z = 1
Volver
a tabla
CLRW
|
|
CLRW
|
Clear W
|
Operación |
00h -->(W)
1 ---> Z
|
Sintaxis |
[Etiqueta] CLRW
|
Operadores |
No tiene
|
Palabras |
1
|
Ciclos |
1
|
Código de Operación |
00
|
0001
|
0000
|
0011
|
Descripción |
El
registro de trabajo W se carga con 00h. El flag Z se
pone a 1 |
Registro de STATUS
PA2
|
PA1
|
PA0
|
TO#
|
PD#
|
Z
|
DC
|
C
|
-
|
-
|
-
|
-
|
-
|
1
|
-
|
-
|
Z Se pone a 1 si el resultado
de la operación es cero
EJEMPLO:
CLRW
Si antes de la instrucción.
W= 5Ah
Al ejecutarse: W = 00
flag Z = 1
Volver
a tabla
CLRWDT
|
|
CLRWDT
|
Clear Watchdog Timer
|
Operación |
00h --> WDT
1 --> T0#
1 --> PD#
|
Sintaxis |
[Etiqueta] CLRWDT
|
Operadores |
No tiene
|
Palabras |
1
|
Ciclos |
1
|
Código de Operación |
00
|
0000
|
0110
|
0100
|
Descripción |
Se
borra tanto el registro WDT (Watchdog) como su preescaler.
Los bits T0# y PD# del registro de estado se ponen a "1".
|
Registro de STATUS
PA2
|
PA1
|
PA0
|
TO#
|
PD#
|
Z
|
DC
|
C
|
-
|
-
|
-
|
1
|
1
|
-
|
-
|
-
|
T0# Se pone
a 1 cuando se ejecuta la instrucción CLRWDT o SLEEP. Se pone a 0 si el
temporizador Watchdog se desborda
PD# Se pone
a 1 cuando se ejecuta la instrucción CLRWDT o SLEEP
EJEMPLO:
CLRWDT
Si antes de ejecutarse la
instrucción
WDT = ?
Al ejecutarse: WDT = 00 h
Preescaler WDT = 0
bit de estado T0 = 1
bit de estado PD = 1
Volver
a tabla
COMF
|
|
COMF
|
Complement f
|
Operación |
(f#) -----> (dest)
|
Sintaxis
|
[Etiqueta] COMF f,d
|
Operadores |
0 < f < 127
d [0,1]
|
Palabras |
1
|
Ciclos |
1
|
Código de Operación |
00
|
1001
|
dfff
|
ffff
|
Descripción |
Hace
el complemento del contenido del registro f bit a bit. El resultado
se almacena en el registro f si d=1 y en el registro
W si d=0, en este caso f no varía. |
Registro de STATUS
PA2
|
PA1
|
PA0
|
TO#
|
PD#
|
Z
|
DC
|
C
|
-
|
-
|
-
|
-
|
-
|
X
|
-
|
-
|
Z Se pone a 1 si el resultado
de la operación es cero
EJEMPLO:
COMF REG1,0
Si antes de la instrucción.
REG1 = 13 h como d= 0
Al ejecutarse: REG1 = 13 h
= 0001 0011 b
W = EC h = 1110 1100
b
flag Z = 0
Volver
a tabla
DECF
|
|
DECF
|
Decrement f
|
Operación |
(f)-1 --> (dest)
|
Sintaxis |
[Etiqueta] DECF f,d
|
Operadores |
0 < f < 127
d [0,1]
|
Palabras |
1
|
Ciclos |
1
|
Código de Operación |
00
|
0011
|
dfff
|
ffff
|
Descripción |
Se
decrementa el contenido del registro f en una unidad. El resultado
se almacena en f si d=1 y en W si d=0,
en este caso f no varía. |
Registro de STATUS
PA2
|
PA1
|
PA0
|
TO#
|
PD#
|
Z
|
DC
|
C
|
-
|
-
|
-
|
-
|
-
|
X
|
-
|
-
|
Z Se pone a 1 si el resultado
de la operación es cero
EJEMPLO:
DECF CNT,1
Si antes de la instrucción.
CNT = 01 h
Z = 0
Al ejecutarse: CNT = 00 h
bit Z = 1
Volver
a tabla
DECFSZ
|
|
DECFSZ
|
Decrement f , Skip if
0
|
Operación |
(f) -1 --> (dest)
; skip if result =0
|
Sintaxis |
[Etiqueta] DECFSZ f,d
|
Operadores |
0 < f < 127
d [0.1]
|
Palabras |
1
|
Ciclos |
1 (2)
|
Código de Operación |
00
|
1011
|
dfff
|
ffff
|
Descripción |
Decrementa
el contenido del registro f en una unidad, el resultado se
almacena en f si d=1 y en W si d=0, en
este caso, f no varía. Si el resultado es cero, se ignora la
siguiente instrucción y, en ese caso la instrucción tiene una duración
de dos ciclos. |
Registro de STATUS
PA2
|
PA1
|
PA0
|
TO#
|
PD#
|
Z
|
DC
|
C
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
EJEMPLO:
HERE DECFSZ CNT,1
GOTO LOOP
CONTINUE
.
.
.
Si antes de la instrucción.
PC = dirección HERE
Al ejecutarse: CNT = CNT -1
Si CNT = 0 entonces PC = dirección
CONTINUE
Si CNT no = 0 entonces PC
= dirección HERE + 1
Volver
a tabla
GOTO
|
|
GOTO
|
Unconditional Branch
|
Operación |
K --> PC <10:0>
(PCLATH <4:3>)
---> (PC <12:11>)
|
Sintaxis |
[Etiqueta] GOTO k
|
Operadores |
0 < k < 2047
|
Palabras |
1
|
Ciclos |
2
|
Código de Operación |
10
|
1kkkk
|
kkkk
|
kkkk
|
Descripción |
Salto
incondicional, normalmente se utiliza para llamar a la subrutina situada
en la dirección que se carga en PC.
El modo de cálculo de la instrucción
caga de bit 0 al 10 de la constante k en el PC y los bits 3 y 4
del registro PCLATH en los 11 y 12 del PC
|
Registro de STATUS
PA2
|
PA1
|
PA0
|
TO#
|
PD#
|
Z
|
DC
|
C
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
EJEMPLO:
GOTO THERE
Al ejecutarse: PC = dirección
THERE
Volver
a tabla
INCF
|
|
INCF
|
Increment f
|
Operación |
(f) + 1 --> (dest)
|
Sintaxis |
[Etiqueta] INCF f,d
|
Operadores |
0 < f < 127
d [0,1]
(f) + 1 ---> (dest)
|
Palabras |
1
|
Ciclos |
1
|
Código de Operación |
00
|
1010
|
dfff
|
ffff
|
Descripción |
Se
incrementa en una unidad el contenido del registro f, si d=1
el resultado se almacena en f, si d=0 el resultado se almacena
en W, en este caso el resultado de f no varía. |
Registro de STATUS
PA2
|
PA1
|
PA0
|
TO#
|
PD#
|
Z
|
DC
|
C
|
-
|
-
|
-
|
-
|
-
|
X
|
-
|
-
|
Z Se pone a 1 si el resultado
de la operación es cero al haber desbordamiento
EJEMPLO:
INCF CNT,1
Si antes de la instrucción:
CNT = FF h
flag Z = 0
Al ejecutarse:
FF h +1 h = 00 h
CNT = 00
flag Z = 1
Volver
a tabla
INCFSZ
|
|
INCFSZ
|
Increment f, SKIP if
0
|
Operación |
(f) +1 --> (dest)
, skip if result = 0
|
Sintaxis |
[Etiqueta] <INCFSZ
f,d
|
Operadores |
0 < f < 127
d [0,1]
|
Palabras |
1
|
Ciclos |
1 (2)
|
Código de Operación |
00
|
1111
|
dfff
|
ffff
|
Descripción |
Incrementa
el contenido del registro f en una unidad, el resultado se
almacena de nuevo en f si d=1, y en W si d=0,
en este caso, f no varía. Si el resultado es cero, se ignora
la siguiente instrucción y, en ese caso la instrucción tiene una duración
de dos ciclos. |
Registro de STATUS
PA2
|
PA1
|
PA0
|
TO#
|
PD#
|
Z
|
DC
|
C
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
EJEMPLO:
HERE INCFSZ CNT,1
GOTO LOP
CONTINUE
Si antes de la instrucción.
PC = dirección HERE
Al ejecutarse: CNT = CNT+1
Si CNT = 0
Entonces PC = dirección CONTINUE
Si CNT no = 0
Entonces PC = dirección HERE
+ 1
Volver
a tabla
IORLW
|
|
IORLW
|
Inclusive OR Literal
with W
|
Operación |
(W).OR.k ---> (W)
|
Sintaxis |
[Etiqueta] IORLW k
|
Operadores |
0 < k < 255
|
Palabras |
1
|
Ciclos |
1
|
Código de Operación |
11
|
1000
|
kkkk
|
kkkk
|
Descripción |
Se
realiza la operación lógica OR entre el registro W y el literal
k. El resultado se almacena en el registro W. |
Registro de STATUS
PA2
|
PA1
|
PA0
|
TO#
|
PD#
|
Z
|
DC
|
C
|
-
|
-
|
-
|
-
|
-
|
X
|
-
|
-
|
Z Se pone a 1 si el resultado
de la operación es cero
EJEMPLO:
IORLW 0x35
Si antes de la instrucción.
W = 9A h
Al ejecutarse: W = 1001 1010
b + 0011 0101 b = 1011 1111 b = BF h
Volver
a tabla
IORWF
|
|
IORWF
|
Inclusive OR W with f
|
Operación |
(W) .OR.(f)--> (dest)
|
Sintaxis |
[Etiqueta] IORWF f,d
|
Operadores |
0 < f < 127
d [0,1]
|
Palabras |
1
|
Ciclos |
1
|
Código de Operación |
00
|
0100
|
dfff
|
ffff
|
Descripción |
Efectúa
la operación lógica OR entre el contenido del registro W y
el contenido del registro f, y almacena el resultado en f
si d=1 y en W si d=0. |
Registro de STATUS
PA2
|
PA1
|
PA0
|
TO#
|
PD#
|
Z
|
DC
|
C
|
-
|
-
|
-
|
-
|
-
|
X
|
-
|
-
|
Z Se pone a 1 si el resultado
de la operación es cero
EJEMPLO:
IORWF RESUL,0
Si antes de la instrucción.
RESUL = 13 h = 0001 0011 b
W = 91 h = 1001 0001 b
Al ejecutarse: RESUL= 0001
0011 b OR 1001 0001 b = 1001 0011 b = 93 h
Volver
a tabla
MOVLW
|
|
MOVLW
|
Move literal to W
|
Operación |
k --> (W)
|
Sintaxis |
[Etiqueta] MOVLW k
|
Operadores |
0 < f < 255
|
Palabras |
1
|
Ciclos |
1
|
Código de Operación |
11
|
00xx
|
kkkk
|
kkkk
|
Descripción |
El
registro W se carga con el valor de 8 bits del literal k
|
Registro de STATUS
PA2
|
PA1
|
PA0
|
TO#
|
PD#
|
Z
|
DC
|
C
|
-
|
-
|
-
|
-
|
-
|
X
|
-
|
-
|
EJEMPLO:
MOVLW 0x5A
Al ejecutarse: W = 5A h
Volver
a tabla
MOVF
|
|
MOVF
|
Move f
|
Operación |
(f) --> (dest)
|
Sintaxis |
[Etiqueta] MOVF f,d
|
Operadores |
0 < f < 127
d [0,1]
|
Palabras |
1
|
Ciclos |
1
|
Código de Operación |
00
|
10000
|
dfff
|
ffff
|
Descripción |
El
contenido del registro f se carga en el registro destino dependiendo
del valor de d. Si d=0 el destino es el registro W,
si d=1 el destino es el propio registro f . Esta instrucción
permite verificar dicho registro ya que el flag Z queda afectado. |
Registro de STATUS
PA2
|
PA1
|
PA0
|
TO#
|
PD#
|
Z
|
DC
|
C
|
-
|
-
|
-
|
-
|
-
|
X
|
-
|
-
|
Z Se pone a 1 si el resultado
de la operación es cero
EJEMPLO:
MOVF FSR,0
Al ejecutarse: W = al valor
del FSR
Volver
a tabla
MOVWF
|
|
MOVWF
|
Move W to f
|
Operación |
(W)--> (f)
|
Sintaxis |
[Etiqueta] MOVWF f
|
Operadores |
0 < f < 127
|
Palabras |
1
|
Ciclos |
1
|
Código de Operación |
00
|
0000
|
1fff
|
ffff
|
Descripción |
Mueve
el contenido del registro W al registro f |
Registro de STATUS
PA2
|
PA1
|
PA0
|
TO#
|
PD#
|
Z
|
DC
|
C
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
EJEMPLO:
MOVWF OPTION
Si antes de la instrucción.
OPTION = FF h
W = 4F h
Al ejecutarse: OPTION = 4F
h
W = 4F h
Volver
a tabla
NOP
|
|
NOP
|
No operation
|
Operación |
no operación
|
Sintaxis |
[Etiqueta] NOP
|
Operadores |
No tiene
|
Palabras |
1
|
Ciclos |
1
|
Código de Operación |
00
|
0000
|
0xx0
|
0000
|
Descripción |
No
realiza operación alguna. En realidad, se consume un ciclo de instrucción
sin hacer nada. (empleada principalmente en retardos de tiempo) |
Registro de STATUS
PA2
|
PA1
|
PA0
|
TO#
|
PD#
|
Z
|
DC
|
C
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
EJEMPLO:
NOP
Volver
a tabla
RETFIE
|
|
RETFIE
|
Return from Interrupt
|
Operación |
TOS --> PC
1 --> GIE
|
Sintaxis |
[Etiqueta] RETFIE
|
Operadores |
No tiene
|
Palabras |
1
|
Ciclos |
2
|
Código de Operación |
00
|
0000
|
0000
|
1001
|
Descripción |
Carga
el PC con el valor que se encuentra en la parte alta de la Pila, asegurando
así la vuelta de la interrupción. Pone a 1 el bit GIE, con
el fin de autorizar de nuevo que se tengan en cuenta las interrupciones. |
Registro de STATUS
PA2
|
PA1
|
PA0
|
TO#
|
PD#
|
Z
|
DC
|
C
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
EJEMPLO:
RETFIE
Al ejecutarse: PC = TOS
GIE = 1
Volver
a tabla
RETLW
|
|
RETLW
|
Retur with Literal in
W
|
Operación |
k --> (W);
TOS ---> PC
|
Sintaxis |
[Etiqueta] RETLW k
|
Operadores |
0 < K < 255
|
Palabras |
1
|
Ciclos |
2
|
Código de Operación |
11
|
01xx
|
kkkk
|
kkkk
|
Descripción |
Carga
el registro W con el literal k, y después carga el PC
con el valor que se encuentra en la parte superior de la PILA, efectuando
así un retorno de subrutina. |
Registro de STATUS
PA2
|
PA1
|
PA0
|
TO#
|
PD#
|
Z
|
DC
|
C
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
EJEMPLO:
CALL TABLA ;W contiene tabla
.
; el valor offset
.
;W nuevo valor de tabla
TABLA: ADDWF PC ;W = offset
RETLW k1
; Nueva Tabla
RETLW k2
.
.
.
RETLW kn ;Fin de tabla
Antes de ejecutarse la instrucción
W = 07 h
Al ejecutarse la instrucción
W = Toma el valor de k7
Volver
a tabla
RETURN
|
|
RETURN
|
Return from Subroutine
|
Operación |
TOS ---> PC
|
Sintaxis |
[Etiqueta] RETURN
|
Operadores |
No tiene
|
Palabras |
1
|
Ciclos |
2
|
Código de Operación |
00
|
0000
|
0000
|
1000
|
Descripción |
Carga
el PC con el valor que se encuentra en la parte superior de la PILA,
efectuando así un retorno de subrutina |
Registro de STATUS
PA2
|
PA1
|
PA0
|
TO#
|
PD#
|
Z
|
DC
|
C
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
Volver
a tabla
RLF
|
|
RLF
|
Rotate Left f through
Carry
|
Operación |
|
Sintaxis |
[Etiqueta] RLF f,d
|
Operadores |
0 < f < 127
d [0,1]
|
Palabras |
1
|
Ciclos |
1
|
Código de Operación |
00
|
1101
|
dfff
|
ffff
|
Descripción |
Rotación
de un bit a la izquierda del contenido del registro f, pasando
por el bit de acarreo C. Si d=1 el resultado se almacena
en f, si d=0 el resultado se almacena en W.
|
Registro de STATUS
PA2
|
PA1
|
PA0
|
TO#
|
PD#
|
Z
|
DC
|
C
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
X
|
EJEMPLO:
RLF REG1,0
Si antes de
la instrucción. REG1 = 1110 0110 b
flag C = 0
Como d= 0 el resultado queda
en W
Al ejecutarse:
REG1 = 1110 0110 b
W = 1100 1100 b
flag C = 1
Volver
a tabla
RRF
|
|
RRF
|
Rotate Right f through
Carry
|
Operación |
|
Sintaxis |
[Etiqueta] RRF f,d
|
Operadores |
0 < f < 127
d [0,1]
|
Palabras |
1
|
Ciclos |
1
|
Código de Operación |
00
|
1100
|
dfff
|
ffff
|
Descripción |
Rotación
de un bit a la derecha del contenido del registro f, pasando
por el bit de acarreo C. Si d=1 el resultado se almacena
en f, si d=0 el resultado se almacena en W |
Registro de STATUS
PA2
|
PA1
|
PA0
|
TO#
|
PD#
|
Z
|
DC
|
C
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
X
|
EJEMPLO:
RRF REG1,0
Si antes de
la instrucción. REG1 = 1110 0110 b
flag C = 1
Como d= 0 el resultado queda
en W
Al ejecutarse: REG1 = 1110
0110 b
W = 0111 0011 b
flag C = 0
Volver
a tabla
SLEEP
|
|
SLEEP
|
Sleep
|
Operación |
00h ---> WDT
0 ---> WDT prescaler
1 ---> TO#
0 --> PD#
|
Sintaxis
|
[Etiqueta] SLEEP
|
Operadores |
No tiene
|
Palabras |
1
|
Ciclos |
1
|
Código de Operación |
00
|
0000
|
0110
|
0011
|
Descripción |
Pone
al circuito en modo Sleep (bajo consumo) con parada del oscilador.
Pone a 0 el flag PD# (Power Down) y el flag TO# (Timer
Out) se pone a 1. Se puede salir de este estado por:
- Activación de MCLR para provocar
un Reset
- Desbordamiento del Watchdog si quedó
operativo en el modo reposo
- Generación de una interrupción que
no sea TMR0 ya que ésta se desactiva con la instrucción SLEEP.
|
Registro de STATUS
PA2
|
PA1
|
PA0
|
TO#
|
PD#
|
Z#
|
DC
|
C
|
-
|
-
|
-
|
1
|
0
|
-
|
-
|
-
|
TO Se pone a 1 al ejecutar
la instrucción SLEEP o CLRWDT
PD Se pone a 0 al ejecutar
la instrucción SLEEP
EJEMPLO:
SLEEP
Volver
a tabla
SUBLW
|
|
SUBLW
|
Subtract W from Literal
|
Operación |
k - (W) ---> (W)
|
Sintaxis |
[Etiqueta] SUBLW k
|
Operadores |
0 < k < 255
|
Palabras |
1
|
Ciclos |
1
|
Código de Operación |
11
|
110x
|
Kkkk
|
kkkk
|
Descripción |
Resta
en complemento a dos del contenido del literal k el contenido
del registro W, y almacena el resultado en W. |
Registro de STATUS
PA2
|
PA1
|
PA0
|
TO#
|
PD#
|
Z
|
DC
|
C
|
-
|
-
|
-
|
-
|
-
|
X
|
X
|
X
|
Z Se pone a 1 si el resultado
de la operación es cero
DC Se pone a 1 si se genera
un acarreo del bit 3 al grupo de 4 bits superior
C Se pone a 1 si se genera
un acarreo del bit de mayor peso
EJEMPLO:
SUBLW 0x 02
Si antes de la instrucción.
W = 01 h
flag C = ?
Al ejecutarse: W = 01
flag C = 1 ; el resultado
es positivo
Si antes de la instrucción.
W = 02 h
flag C = ?
flag Z = ?
Al ejecutarse: W = 00 h
flag C = 1 ; el resultado
es cero
flag Z = 1
Si antes de la instrucción.
W = 03 h
flag C = ?
Al ejecutarse: W = FF h
flag C = 0 ; el resultado
es negativo
Volver
a tabla
SUBWF
|
|
SUBWF
|
Subtract W from f
|
Operación |
(f) - (W) ---> (dest)
|
Sintaxis |
[Etiqueta] SUBW f,d
|
Operadores |
0 < f < 127
d [0,1]
|
Palabras |
1
|
Ciclos |
1
|
Código de Operación |
00
|
0010
|
dfff
|
ffff
|
Descripción |
Resta
en complemento a dos el contenido del registro f menos el contenido
del registro W almacena el resultado en W si d=0
y en f si d=1. |
Registro de STATUS
PA2
|
PA1
|
PA0
|
TO#
|
PD#
|
Z
|
DC
|
C
|
-
|
-
|
-
|
-
|
-
|
X
|
X
|
X
|
Z Se pone a 1 si el resultado
de la operación es cero
DC Se pone a 1 si se genera
un acarreo del bit 3 al grupo de 4 bits superior
C Se pone a 1 si se genera
un acarreo del bit de mayor peso
EJEMPLO:
SUBWF REG1,1
a) Si antes de la instrucción.
REG1 = 03 h
W = 02 h
flag C = ?
Al ejecutarse REG1 = 01h
W = 02 h
flag C = 1 ; el resultado
es positivo
b) Si antes de la instrucción.
REG1 = 02 h
W = 02 h
flag C = ?
Al ejecutarse REG1 = 00h
W = 02 h
flag C = 1 ; el resultado
es cero
falz Z = 1 ; el resultado
es cero
c) Si antes de la instrucción.
REG1 = 01 h
W = 02 h
bit C = ?
Al ejecutarse REG1 = 00h
W = FF h
flag C = 0 ; el resultado
es negativo
falz Z = 1 ; el resultado
es cero
Volver
a tabla
SWAPF
|
|
SWAPF
|
Swap Nibbles in f
|
Operación |
(f<3:0>) --->
(dest <7:4>)
(f<7:4>) --->
(dest <3:0>)
|
Sintaxis |
[Etiqueta] SWAPF f,d
|
Operadores |
0 < f < 127
d [0,1]
|
Palabras |
1
|
Ciclos |
1
|
Código de Operación |
00
|
1110
|
dfff
|
ffff
|
Descripción |
Los
cuatro bits de más peso del registro f se intercambian con
los 4 bits de menos peso del mismo registro. Si d=0 el resultado
se almacena en W, si d=1 el resultado se almacena en
f. |
Registro de STATUS
PA2
|
PA1
|
PA0
|
TO#
|
PD#
|
Z
|
DC
|
C
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
EJEMPLO:
SWAPF REG1,0
Si antes de la instrucción.
REG1 = A5 h = 1010 0101 h
Como d=0 el resultado se almacenará
en W
Al ejecutarse la instrucción:
REG1 = A5 h = 1010 0101 b
W = 5A h = 0101 1010 b
Volver
a tabla
XORLW
|
|
XORLW
|
Exclusive OR Literal
With k
|
Operación |
(W).XOR.k ---> (W)
|
Sintaxis |
[Etiqueta] XORLW k
|
Operadores |
0 < f < 255
|
Palabras |
1
|
Ciclos |
1
|
Código de Operación |
11
|
1010
|
kkkk
|
kkkk
|
Descripción |
Realiza
la función OR-Exclusiva entre el contenido del registro W y
la constante k de 8 bits. El resultado se almacena en W |
Registro de STATUS
PA2
|
PA1
|
PA0
|
TO#
|
PD#
|
Z
|
DC
|
C
|
-
|
-
|
-
|
-
|
-
|
X
|
-
|
-
|
Z Se pone a 1 si el resultado
de la última operación es cero
EJEMPLO:
XORLW 0xAF
Si antes de la instrucción.
W = 1011 0101 b = B5 h
Al ejecutarse la instrucción:
W = 1011 0101 b Å 1010 1111 b = 0001 1010 b = 1A h
Volver
a tabla
XORWF
|
|
XORWF
|
Exclusive OR With f
|
Operación |
(W).XOR.(f) ---> (des)
|
Sintaxis |
[Etiqueta] XORWF f,d
|
Operadores |
0 < f < 127
d [0,1]
|
Palabras |
1
|
Ciclos |
1
|
Descripción |
Realiza
la función OR-Exclusiva entre el contenido del registro W y
el contenido del registro f, y almacena el resultado en f
si d=1 y en W si f=0 |
Registro de STATUS
PA2
|
PA1
|
PA0
|
TO#
|
PD#
|
Z
|
DC
|
C
|
-
|
-
|
-
|
-
|
-
|
X
|
-
|
-
|
EJEMPLO:
XORWF REG1,1
Si antes de la instrucción.
REG1 = AF h = 1010 1111 b
W = B5 h = 1011 0101 b
Como d=1, el resultado se
almacena en REG1
Al ejecutarse: REG1 = 1010
1111 Å 1011 0101 =0001 1010 = 1A h
W = B5 h
Volver
a tabla
|