Documente Academic
Documente Profesional
Documente Cultură
ADDWF
Accin
Sintaxis
Funcionamiento
Hexadecimal
Bits (OPCODE)
Operacin
Descripcin
Comentarios
Registro
STATUS
Ejemplo
Ciclos de
mquina
DATO
DATO, 1
DATO, 0
DATO, W
; DATO = 15 y W = 5.
; DATO = 15 y W = 5.
; W = 15 y DATO = 10.
; W = 15 y DATO = 10.
ANDWF
Accin
Sintaxis
Funcionamiento
Hexadecimal
Bits (OPCODE)
Operacin
Descripcin
Comentarios
SALIDA
S
0
0
0
1
Registro
STATUS
Ejemplo 1
S=fW
Esta instruccin realiza esta operacin para cada uno de los 8 bits
de los dos registros, dos a dos, guardando el resultado en el registro
correspondiente.
Modifica el bit Z.
Z vale 1 si el resultado de la operacin es 0.
Supongamos que W= 00001111 y f = 11110000 antes de ejecutar la
instruccin ANDWF f,d
ENTRADA RESULTADO
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Ejemplo 2
Wf
0
0
0
0
1
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
0
0
0
0
Ciclos de
mquina
CLRF
Wf
0
1
1
1
0
0
1
1
0
0
1
0
1
0
0
1
0
0
1
0
0
0
0
1
Accin
Sintaxis
Funcionamiento
Hexadecimal
Bits (OPCODE)
Operacin
Descripcin
Comentarios
Registro
STATUS
Ejemplo
Ciclos de
mquina
Borra un registro
CLRF f
Clear file register
01 8f
00 0001 1fff ffff
F=0
Esta instruccin borra un registro especfico, poniendo sus bits a
cero
Ninguno
Modifica el bit Z y lo pone a 1 (ya que el resultado de la operacin
es 0).
Tenemos un registro que se llama dato y que vale 3F. Ponemos:
CLRF dato
Ahora dato vale 00
1
CLRW
Accin
Sintaxis
Funcionamiento
Hexadecimal
Bits (OPCODE)
Operacin
Descripcin
Comentarios
Registro
STATUS
Ejemplo
Ciclos de
mquina
Borra el acumulador
CLRW
Clear W
01 8f
00 0001 0xxx xxxx
W=0
Esta instruccin borra el registro W solamente
Donde pone xxx en la instruccin en hexadecimal, significa que
no importa qu valor puede contener
Modifica el bit Z y lo pone a 1 (ya que el resultado de la operacin
es 0).
Tenemos el acumulador cargado con el valor 3F. Ponemos:
CLRF dato
Ahora W vale 00
1
COMF
Accin
Sintaxis
Funcionamiento
Hexadecimal
Bits (OPCODE)
Operacin
Descripcin
Complementa el registro F
COMF f,d
Complement f
09 ff
00 1001 dfff ffff
d = NOT f (d puede ser W f).
Esta instruccin complementa un registro, es decir, los ceros los
convierte en unos, y los unos en ceros.
Comentarios
Registro
STATUS
Ejemplo
Ciclos de
mquina
ninguno
Modifica el bit Z.
Z vale 1 si el resultado de la operacin es 0.
Supongamos que tenemos un registro f denominado regist =
00111011; cuando es aplicada la instruccin tenemos que los 0
cambian a valores 1 y los valores 1 cambian a 0 obtenindose un
registro invertido. El resultado ser regist = 11000100.
1
DECF
Accin
Sintaxis
Funcionamiento
Hexadecimal
Bits (OPCODE)
Operacin
Descripcin
Comentarios
Registro
STATUS
Ejemplo
Ciclos de
mquina
Decrementa el registro f
DECF f,d
Decrement f
03 ff
00 0011 dfff ffff
d = f 1 (d puede ser W f).
Esta instruccin decrementa en una sola unidad el registro "f".
ninguno
Modifica el bit Z.
Z vale 1 si el resultado de la operacin es 0.
Nuestro registro se llama regist = 5; cuando se aplica la instruccin
DECF f,0 el resultado ser W=4.
Por el contrario, si aplicamos la instruccin DECF f,1 el resultado
ser regist = 4.
1
DECFSZ
Accin
Sintaxis
Funcionamiento
Hexadecimal
Bits (OPCODE)
Operacin
Descripcin
Comentarios
Registro
STATUS
Ejemplo
INSTRUCCIN 2
Ciclos de
mquina
INCF
Accin
Sintaxis
Funcionamiento
Hexadecimal
Bits (OPCODE)
Operacin
Descripcin
Comentarios
Registro
STATUS
Ejemplo
Ciclos de
mquina
INCFSZ
Accin
Sintaxis
Funcionamiento
Hexadecimal
Bits (OPCODE)
Operacin
Descripcin
Comentarios
Registro
STATUS
Ejemplo
INCFSZ VALOR, W
INSTRUCCION 1
INSTRUCCIN 2
Ciclos de
mquina
; el resultado se almacenar en W
; salta aqu si W0
; salta aqu si W=0
IORWF
Accin
Sintaxis
Funcionamiento
Hexadecimal
Bits (OPCODE)
Operacin
Descripcin
Comentarios
Registro
STATUS
Ejemplo 1
SALIDA
S
0
1
1
1
W+f
Ejemplo 2
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
ENTRADA RESULTADO
W f
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Ciclos de
mquina
0
1
1
1
0
0
1
1
0
0
1
0
1
0
0
1
W+f
0
1
1
1
1
0
1
1
MOVF
Accin
Sintaxis
Funcionamiento
Hexadecimal
Bits (OPCODE)
Operacin
Descripcin
Comentarios
Registro
STATUS
Ejemplo
Ciclos de
mquina
Modifica el bit Z.
Z vale 1 si el resultado de la operacin es 0.
Tenemos el registro EDAD = 38
MOVF
MOVF
MOVF
MOVF
1
EDAD, 0
EDAD, 1
EDAD, W
EDAD
MOVWF
Accin
Sintaxis
Funcionamiento
Hexadecimal
Bits (OPCODE)
Operacin
Descripcin
Comentarios
Registro
STATUS
Ejemplo
Ciclos de
mquina
MOVWF 10H
MOVWF TMR0
1
NOP
Accin
Sintaxis
Funcionamiento
Hexadecimal
Bits (OPCODE)
Operacin
No opera
NOP
No Operation
00 00
00 0000 0xx0 0000
Ninguna
Descripcin
Comentarios
Registro
STATUS
Ejemplo
Ciclos de
mquina
RLF
Accin
Sintaxis
Funcionamiento
Hexadecimal
Bits (OPCODE)
Operacin
Descripcin
Comentarios
Registro
STATUS
Ejemplo
Ciclos de
mquina
RRF
Accin
Sintaxis
Funcionamiento
Hexadecimal
Bits (OPCODE)
Operacin
Descripcin
Comentarios
Registro
STATUS
Ejemplo
Ciclos de
mquina
SUBWF
Accin
Sintaxis
Funcionamiento
Hexadecimal
Bits (OPCODE)
Operacin
Descripcin
Comentarios
Registro
STATUS
Ejemplo
Ciclos de
mquina
Subtract W from f
02 ff
00 0010 dfff ffff
d = f W (d puede ser W f).
Esta instruccin resta el valor contenido en el acumulador W del
valor contenido en el registro direccionado por el parmetro f. El
parmetro d determina el destino. Si no se pone nada el valor por
defecto ser 1 y se almacenar en f.
Ninguno
Modifica los bits Z, DC y C.
Z vale 1 si el resultado de la operacin es 0.
DC vale 1 si el resultado de la operacin es un nmero
superior a 15.
C vale 1 si el resultado de la operacin es positivo o el bit 7 del
registro que contiene el resultado vale 0. En caso contrario C vale 0
(resultado negativo).
Segn sean los valores de W y el registro DATO, si aplicamos
SUBWF DATO
obtendremos diferentes resultados en el bit CARRY.
Si DATO = 3 y W = 2; el resultado ser DATO = 1 y C = 1.
Si DATO = 2 y W = 2; el resultado ser DATO = 0 y C = 1.
Si DATO = 1 y W = 2; el resultado ser DATO = FFH y C = 0.
Vemos que C = 1 porque el resultado es positivo y C = 0 cuando el
resultado es negativo.
1
SWAPF
Accin
Sintaxis
Funcionamiento
Hexadecimal
Bits (OPCODE)
Operacin
Descripcin
Comentarios
Registro
STATUS
Ejemplo
Ciclos de
mquina
XORWF
Accin
Sintaxis
Funcionamiento
Hexadecimal
Bits (OPCODE)
Operacin
Descripcin
Comentarios
SALIDA
S
0
1
1
0
Modifica el bit Z.
Z vale 1 si el resultado de la operacin es 0.
Tenemos dos registros que se corresponden con los siguientes
valores W= 00001111 y f = 11110000 antes de ejecutar la
instruccin XORWF f,d. Una vez ejecutada obtenemos la siguiente
tabla de verdad sobre los dos registros:
ENTRADA RESULTADO
W f
W+f
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Ejemplo 2
0
0
0
0
1
1
1
1
1
1
1
1
0
0
0
0
1
1
1
1
1
1
1
1
Ciclos de
mquina
W+f
0
1
1
1
0
0
1
1
0
0
1
0
1
0
0
1
0
1
1
1
1
0
1
0
Registro
STATUS
Ejemplo
Ciclos de
mquina
PORTA,
PORTA,
BSF
Accin
Sintaxis
Funcionamiento
Hexadecimal
Bits (OPCODE)
Operacin
Descripcin
Comentarios
Registro
STATUS
Ejemplo
Ciclos de
mquina
BTFSC
PORTA,
PORTA,
Accin
Sintaxis
Funcionamiento
Hexadecimal
Bits (OPCODE)
Operacin
Descripcin
Comentarios
Registro
STATUS
Ejemplo
Ciclos de
mquina
BTFSS
Accin
Sintaxis
Funcionamiento
Hexadecimal
Bits (OPCODE)
Operacin
Descripcin
Comentarios
Registro
STATUS
Ejemplo
Ciclos de
mquina
Ejemplo
Ciclos de
mquina
Suma a W un literal
ADDLW
Add literal to W
3E kk
11 111x kkkk kkkk
W=W+k
Esta instruccin suma un valor de un literal al contenido del
registro W y lo guarda en W.
Es igual que su homologo manejando registros
Modifica los bits Z, DC y C.
Z vale 1 si el resultado de la operacin es 0.
DC vale 1 si el resultado de la operacin es un nmero
superior a 15.
C vale 1 si el resultado de la operacin es positivo o el bit 7
del registro que contiene el resultado vale 0. En caso
contrario C vale 0 (resultado negativo).
MOVLW 3
; carga el acumulador W con el valor 3.
ADDLW 1
; suma 1 al acumulador.
Al final el acumulador tendr el valor 4.
1
ANDLW
Accin
Sintaxis
Funcionamiento
Hexadecimal
Bits (OPCODE)
Operacin
Descripcin
Comentarios
Registro
STATUS
Ejemplo
Ciclos de
mquina
ANDLW 11110000
El resultado de la operacin queda en W = 10100000.
1
CALL
Accin
Sintaxis
Funcionamiento
Hexadecimal
Bits (OPCODE)
Operacin
Descripcin
Comentarios
Registro
STATUS
Ejemplo
Ciclos de
mquina
CLRWDT
Accin
Sintaxis
Funcionamiento
Hexadecimal
Bits (OPCODE)
Operacin
Descripcin
Comentarios
Registro
STATUS
Ejemplo
Ciclos de
mquina
CLRWDT
*
*
*
GOTO Bucle
GOTO
Accin
Sintaxis
Funcionamiento
Hexadecimal
Bits (OPCODE)
Operacin
Descripcin
Comentarios
Registro
STATUS
Ejemplo
Salto incondicional a k.
GOTO k
Go to address (label)
28 kk
10 1kkk kkkk kkkk
Salto k
Esta instruccin ejecuta un salto del programa a la direccin k. El
parmetro k puede ser un valor numrico o una etiqueta.
Ninguno
No modifica ningn bit de estado.
ABAJO
Ciclos de
mquina
INSTRUCCIN 1
GOTO ABAJO
INSTRUCCIN 3
INSTRUCCIN 4
INSTRUCCIN 5
INSTRUCCIN 6
IORLW
Accin
Sintaxis
Funcionamiento
Hexadecimal
Bits (OPCODE)
Operacin
Descripcin
Comentarios
W = W OR l
Esta instruccin realiza una operacin lgica OR inclusivo entre el
acumulador W y un literal. El resultado siempre se guarda en el
acumulador.
La operacin OR inclusivo suele llamarse OR a secas, pero se pone
as para diferenciarla de la Suma Exclusiva que veremos ms
adelante. La tabla de verdad de la suma lgica es la que sigue:
ENTRADA
f
W
0
0
0
1
1
0
1
1
SALIDA
S
0
1
1
1
Registro
STATUS
Ejemplo
F+W=S
Se puede ver que basta con que uno de los dos registros tenga un
uno para que la salida sea un uno tambin.
Modifica el bit Z.
Z vale 1 si el resultado de la operacin es 0.
Supongamos que W= 00001111 y l = f0. Ejecutando la instruccin
IORWF f,d, obtenemos:
ENTRADA RESULTADO
Ciclos de
mquina
W+l
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
MOVLW
Accin
Sintaxis
Funcionamiento
Hexadecimal
Bits (OPCODE)
Operacin
Descripcin
Comentarios
Registro
STATUS
Ejemplo
Ciclos de
mquina
RETFIE
Accin
Sintaxis
Funcionamiento
Hexadecimal
Bits (OPCODE)
Operacin
Descripcin
Comentarios
Registro
STATUS
Ejemplo
Ciclos de
mquina
RETLW
Accin
Sintaxis
Funcionamiento
Hexadecimal
Bits (OPCODE)
Operacin
Descripcin
Comentarios
Registro
STATUS
Ejemplo
TABLAS.
No modifica ningn bit de estado
SUBRUT1
SUBRUT2
Ciclos de
mquina
CALL
MOVWF
CALL
MOVWF
*
*
RETLW
RETLW
0A
0B
; carga W = 0A y retorna.
; carga W = 0B y retorna.
RETURN
Accin
Sintaxis
Funcionamiento
Hexadecimal
Bits (OPCODE)
Operacin
Descripcin
Comentarios
Registro
STATUS
Ejemplo
; llama a Compara.
; vuelve aqu cuando se
; ejecuta return
Ciclos de
mquina
SLEEP
Accin
Sintaxis
Funcionamiento
Hexadecimal
Bits (OPCODE)
Operacin
Descripcin
Comentarios
Registro
STATUS
Ejemplo
Ciclos de
mquina
SUBLW
Accin
Sintaxis
Funcionamiento
Hexadecimal
Bits (OPCODE)
Operacin
Descripcin
Comentarios
Registro
STATUS
Ejemplo
Ciclos de
mquina
XORLW
Accin
Sintaxis
Funcionamiento
Hexadecimal
Bits (OPCODE)
Operacin
Descripcin
Comentarios
SALIDA
S
0
1
1
0
Modifica el bit Z.
Z vale 1 si el resultado de la operacin es 0.
W = 01110011 y k = 00101001 antes de ejecutar la instruccin
XORWF k
ENTRADA RESULTADO
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
W+k
0
1
1
1
0
0
1
1
0
0
1
0
1
0
0
1
0
1
1
1
1
0
1
0
Ciclos de
mquina
10H
TRIS
Accin
Sintaxis
Funcionamiento
Hexadecimal
Bits (OPCODE)
Operacin
Descripcin
Comentarios
Registro
STATUS
Ejemplo
Ciclos de
mquina
INSTRUCCIONES ESPECIALES
Existe un conjunto de instrucciones especiales diseadas para facilitar las operaciones a la hora de disear
nuestros algoritmos. Estas instrucciones pueden ser implementadas con una, dos o tres de las instrucciones
de la gama media. La mayora de ellas se basa en las operaciones con los acarreos y con los bits del registro
status en general. Este cuadro slo debe servir de referencia, y no debemos usarlo en el caso de que estemos
empezando. Slo lo usaremos si vemos muy claro el funcionamiento de las instrucciones, pero es
recomendable usar la forma equivalente, que tiempo de acomodarnos ya tendremos.
Otra cosa que debemos tener en cuenta es que no por reducir algoritmos a una sola expresin, vamos a
ahorrar ciclos de mquina.
Traduccin
Operacin
Equivalente
Banderas
ADDCF
f, d
Sumar acarreo a f
BTFSC
INCF
3,0
f,d
ADDDCF
f, d
Sumar acarreo de
digito a f
BTFSC
INCF
3,1
f,d
Branch
BC
Branch on Carry
3,0
k
BDC
3,1
k
BNC
Branch on No Carry
3,0
k
BNDC
3,1
k
BNZ
Branch on No Zero
3,2
k
Branch on Zero
3,2
k
CLRC
Clear Carry
3,0
CLRDC
3,1
CLRZ
Clear Zero
3,2
BZ
BCF
LCALL
Long CALL
BSF/BCF 0A,3
Llamada larga a una
BSF/BCF 0A,4
etiqueta
CALL
k
LGOTO
Long GOTO
BSF/BCF 0A,3
BSF/BCF 0A,4
GOTO
k
MOVFW
Move File to W
Mover registro a W
MOVF
f,0
Negate File
Negar un registro
COMF
INCF
f,1
f,d
SETC
Set Carry
Poner a uno el
acarreo
BSF
3,0
SETDC
Poner a uno el
acarreo de digito
BSF
3,1
SETZ
SKPC
Set Zero
BSF
3,2
Skip on Carry
SKPDC
SKPNC
Skip on No Carry
Saltar si no hay
acarreo
BTFSC 3,0
SKPNDC
Saltar si no hay
acarreo de digito
BTFSC 3,1
SKPNZ
SKPZ
Skip on Zero
BTFSS 3,2
NEGF
f, d
SUBCF
f,d
BTFSC 3,0
DECF f,d
SUBDCF
f,d
Restar acarreo de
dgito del registro
BTFSC 3,1
DECF f,d
TSTF
Test File
Probar registro
MOVF
f,1
CUADRO DE INSTRUCCIONES
Para finalizar, las 35 instrucciones de la gama media las encontraremos resumidas en los tres prximos
cuadros.
Instrucciones orientadas a los bytes
Ciclos Banderas
ADDWF
ANDWF
CLRF
CLRW
COMF
DECF
f, d
Add W and f
C, DC, Z
f, d
AND W with f
Clear f
Clear W
f, d
Complement f
f, d
Decrement f
DECFSZ
INCF
INCFSZ
IORWF
MOVF
MOVWF
NOP
RLF
RRF
SUBWF
SWAPF
XORWF
f, d
Decrement f, Skip if 0
1(2)
None
f, d
Increment f
f, d
Increment f, Skip if 0
1(2)
None
f, d
Inclusive OR W with f
f, d
Move f
Move W to f
None
No Operation
None
f, d
f, d
f, d
Subtract W from f
C, DC, Z
f, d
Swap nibbles in f
None
f, d
Exclusive OR W with f
Ciclos Banderas
BCF
BSF
BTFSC
BTFSS
f, b
Bit Clear f
None
f, b
Bit Set f
None
f, b
1 (2)
None
f, b
1 (2)
None
NroCic. Banderas
ADDLW
ANDLW
CALL
CLRWDT
GOTO
IORLW
MOVLW
RETFIE
RETLW
RETURN
SLEEP
SUBLW
XORLW
C, DC, Z
Call subroutine
TO,PD
Go to address
None
Move literal to W
None
None
None
None
TO,PD
C, DC, Z
Microchip recomienda no utilizar las instrucciones TRIS y OPTION, para mantener la compatibilidad con
el PIC16CXX. Aunque eso no significa que tengamos que hacer caso y no usarlas.