Pic16f84 Comandos
Pic16f84 Comandos
Notas:
1. 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 las patillas 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".
2. Si se ejecuta esta instrucción sobre el TMR0 y d=1, se
borrará el conteo de la preescala asignada (preescaler), si
está asignado al TMR0, pero no se borrará la preescala
asignada en OPTION_REG, que controla Timer0.
3. 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.
En las tablas siguientes, por orden alfabético, veremos todos los
datos de interés sobre las 35 instrucciones.
ADDLW ADDLW
ADD Literal to w
Operación w + k → w
Sintaxis [Etiqueta] ADDLW k
Ciclos 1
Registro de STATUS
- - - - - X X X
EJEMPLO:
ADDLW 0x15
Si antes de la instrucción:
Al ejecutarse la instrucción
w = 10 h + 15 h = 25 h
0001 0000 b
0001 0101 b
0010 0101 b
ADDWF ADDWF
ADD w to F
Operación w + f → d
Sintaxis [Etiqueta] ADDWF f,d
0 < f < 127
Operadores
d [0,1]
Ciclos 1
Registro de STATUS
- - - - - X X X
EJEMPLO:
ADDWF FSR,0
Al ejecutarse:
w = 17 h + C2 h = D9 h
FSR = C2 h
0001 0111 b
1100 0010 b
1101 1001 b
Volver a tabla
Operación w AND k → w
Sintaxis [Etiqueta] ANDLW k
Ciclos 1
Registro de STATUS
- - - - - X - -
EJEMPLO:
ANDLW 0x5F
Si antes de la instrucción. w = A3 h
Al ejecutarse:
0101 1111 b
1010 0011 b
0000 0011 b
Volver a tabla
ANDWF ANDWF
AND w with F
Operación w AND f → d
0 < f < 127
Operadores
d [0,1]
Ciclos 1
Registro de STATUS
- - - - - X - -
EJEMPLO:
ANDWF FSR,1
Al ejecutarse:
w = 17 h = 0001 0111 b
0001 0111 b
1100 0010 b
0000 0010 b
Volver a tabla
BCF BCF
Bit Clear F
Operación 0 → (f<b>)
0 < f < 127
Operadores
0 < b < 7
Ciclos 1
Registro de STATUS
- - - - - - - -
EJEMPLO:
BCF FLAG_REG, 7
Volver a tabla
DISPOSITIVOS LÓGICOS Instrucciones del
9.10
MICROPROGRAMABLES PIC16F84A
BSF BSF
Bit Set F
Operación 1 → (f<b>)
0 < f < 127
Operadores
0 < b < 7
Ciclos 1
Registro de STATUS
- - - - - - - -
EJEMPLO:
BSF FLAG_REG, 7
Volver a tabla
0 < f < 127
Operadores
0 < b <7
Ciclos 1 (2)
Registro de STATUS
- - - - - - - -
EJEMPLO:
INICIO BTFSC FLAG,1
ES_1 GOTO PROCESO
ES_0
Al ejecutarse:
if FLAG<1> = 0,
if FLAG<1> = 1,
Volver a tabla
BTFSS BTFSS
0 < f < 127
Operadores
0 < b <7
Ciclos 1 (2)
Registro de STATUS
- - - - - - - -
EJEMPLO:
INICIO BTFSS FLAG,1
ES_0 GOTO PROCESO
ES_1
Al ejecutarse:
if FLAG<1> = 0,
if FLAG<1> = 1,
Volver a tabla
DISPOSITIVOS LÓGICOS Instrucciones del
9.13
MICROPROGRAMABLES PIC16F84A
CALL CALL
Subrutine Call
PC + 1 → TOS
Operación k → PC <10:0>
PCLATCH (<4:3>) → PC (<12,11>)
Sintaxis [Etiqueta] CALL k
Ciclos 2
Registro de STATUS
- - - - - - - -
EJEMPLO:
INICIO CALL SUB_1
Si antes de la instrucción:
PC = dirección INICIO
Al ejecutarse:
PC = dirección SUB_1
CLRF CLRF
Clear f
00 h → f
Operación
1 → Z
Sintaxis [Etiqueta] CLRF f
Ciclos 1
Registro de STATUS
- - - - - 1 - -
EJEMPLO:
CLRF REG
Si antes de la instrucción:
REG = 5A h
Al ejecutarse:
REG = 00 h
flag Z = 1
Volver a tabla
DISPOSITIVOS LÓGICOS Instrucciones del
9.15
MICROPROGRAMABLES PIC16F84A
CLRW CLRW
Clear w
00 h → w
Operación
1 → Z
Sintaxis [Etiqueta] CLRW
Operadores No tiene
Ciclos 1
Registro de STATUS
- - - - - 1 - -
EJEMPLO
CLRW
Al ejecutarse:
w = 00
flag Z = 1
Volver a tabla
DISPOSITIVOS LÓGICOS Instrucciones del
9.16
MICROPROGRAMABLES PIC16F84A
CLRWDT CLRWDT
00 h → WDT
Operación 1 → T0#
1 → PD#
Sintaxis [Etiqueta] CLRWDT
Operadores No tiene
Ciclos 1
Registro de STATUS
- - - 1 1 - - -
EJEMPLO
CLRWDT
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
0 < f < 127
Operadores
d [0,1]
Ciclos 1
Registro de STATUS
- - - - - X - -
EJEMPLO:
COMF REG1,0
Si antes de la instrucción:
REG1 = 13 h como d= 0
Al ejecutarse:
flag Z = 0
0001 0011 b
1110 1100 b
Volver a tabla
DECF DECF
Decrement f
0 < f < 127
Operadores
d [0,1]
Ciclos 1
Registro de STATUS
- - - - - X - -
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
0 < f < 127
Operadores
d [0.1]
Ciclos 1 (2)
Registro de STATUS
- - - - - - - -
EJEMPLO:
INICIO DECFSZ CNT,1
GOTO LOOP
CONTINUAR
si antes de la instrucción:
PC = dirección INICIO
Volver a tabla
GOTO GOTO
Unconditional Branch
k → PC <10:0>
Operación
(PCLATH <4:3>) → (PC <12:11>)
Sintaxis [Etiqueta] GOTO k
Ciclos 2
Registro de STATUS
- - - - - - - -
EJEMPLO:
GOTO SEGUIR
Al ejecutarse:
PC = dirección SEGUIR
Volver a tabla
INCF INCF
Increment f
0 < f < 127
Operadores d [0,1]
f + 1 → d
Ciclos 1
Registro de STATUS
- - - - - X - -
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
0 < f < 127
Operadores
d [0,1]
Ciclos 1 (2)
Registro de STATUS
- - - - - - - -
EJEMPLO:
INICIO INCFSZ CNT,1
GOTO SALTO
CONTINUAR
Si antes de la instrucción:
PC = dirección INICIO
Si CNT = 0
Si CNT no = 0
Volver a tabla
IORLW IORLW
Operación w OR k → w
Sintaxis [Etiqueta] IORLW k
Ciclos 1
Registro de STATUS
EJEMPLO:
IORLW 0x35
Si antes de la instrucción:
w = 9A h
Al ejecutarse:
1001 1010 b
0011 0101 b
1011 1111 b
Volver a tabla
IORWF IORWF
Inclusive OR w with f
Operación w OR f → d
0 < f < 127
Operadores
d [0,1]
Ciclos 1
- - - - - X - -
EJEMPLO:
IORWF RESUL,0
Si antes de la instrucción
w = 91 h = 1001 0001 b
Al ejecutarse:
0001 0011 b
1001 0001 b
1001 0011 b
Volver a tabla
MOVLW MOVLW
Move literal to w
Operación k → w
Sintaxis [Etiqueta] MOVLW k
Ciclos 1
Registro de STATUS
- - - - - X - -
EJEMPLO:
MOVLW 0x5A
Al ejecutarse:
w = 5A h
Volver a tabla
MOVF MOVF
Move f
Operación f → d
0 < f < 127
Operadores
d [0,1]
Ciclos 1
Registro de STATUS
PA2 PA1 PA0 TO# PD# Z DC C
- - - - - X - -
EJEMPLO:
MOVF FSR,0
Al ejecutarse:
Volver a tabla
MOVWF MOVWF
Move w to f
Operación w → f
Sintaxis [Etiqueta] MOVWF f
Ciclos 1
Registro de STATUS
- - - - - - - -
EJEMPLO:
MOVWF OPCION
Si antes de la instrucción:
OPCION = FF h
w = 4F h
Al ejecutarse:
OPCION = 4F h
w = 4F h
Volver a tabla
NOP NOP
No operation
Operación no operación
Sintaxis [Etiqueta] NOP
Operadores No tiene
Ciclos 1
Registro de STATUS
- - - - - - - -
EJEMPLO:
Si usamos un cristal de cuarzo de 4 Mhz en el oscilador,
podremos obtener un retardo igual a un microsegundo por cada
instrucción NOP que insertemos en el código del programa:
RETARDO NOP
NOP
NOP
RETURN
Volver a tabla
RETFIE RETFIE
TOS → PC
Operación
1 → GIE
Sintaxis [Etiqueta] RETFIE
Operadores No tiene
Ciclos 2
Registro de STATUS
- - - - - - - -
EJEMPLO:
RETFIE
Al ejecutarse:
PC = TOS
GIE = 1
Volver a tabla
RETLW RETLW
k → w;
Operación
TOS → PC
Sintaxis [Etiqueta] RETLW k
Ciclos 2
Registro de STATUS
- - - - - - - -
EJEMPLO:
MOVLW 0x07 ;Se carga 07 h en w
CALL TABLA ;Tabla de valores
... ;w contiene en valor recogido
...
TABLA ADDWF PC ;Se añade a PC el desplazamiento (offset) de w
RETLW k1 ;Nueva Tabla
RETLW k2
...
...
...
RETLW kn ;Fin de tabla
Volver a tabla
RETURN RETURN
Operación TOS → PC
Sintaxis [Etiqueta] RETURN
Operadores No tiene
Ciclos 2
Registro de STATUS
- - - - - - - -
EJEMPLO:
RETURN
Volver a tabla
DISPOSITIVOS LÓGICOS Instrucciones del
9.32
MICROPROGRAMABLES PIC16F84A
RLF RLF
Operación
0 < f < 127
Operadores
d [0,1]
Ciclos 1
Registro de STATUS
- - - - - - - X
EJEMPLOS:
w = 1100 1100 b
flag C = 1
Volver a tabla
RRF RRF
Operación
0 < f < 127
Operadores
d [0,1]
Ciclos 1
Registro de STATUS
PA2 PA1 PA0 TO# PD# Z DC C
- - - - - - - X
EJEMPLOS:
w = 0111 0011 b
flag C = 0
Volver a tabla
SLEEP SLEEP
Sleep
00 h → WDT
0 → WDT prescaler
Operación
1 → TO#
0 → PD#
Sintaxis [Etiqueta] SLEEP
Operadores No tiene
Ciclos 1
OPCODE 00 0000 0110 0011
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:
Registro de STATUS
- - - 1 0 - - -
EJEMPLO:
SLEEP
Volver a tabla
SUBLW SUBLW
Operación k - w → w
Sintaxis [Etiqueta] SUBLW k
Ciclos 1
Registro de STATUS
- - - - - X X X
EJEMPLO:
SUBLW 0x02 ;k - w → w, 02 h - w → w
Volver a tabla
Subtract w from f
Operación f - w → d
0 < f < 127
Operadores
d [0,1]
Ciclos 1
Registro de STATUS
- - - - - X X X
EJEMPLO:
SUBWF REG1,1 ;f - w → f, REG1 - w → REG1
Volver a tabla
SWAPF SWAPF
Swap Nibbles in f
(f<3:0>) → (d <7:4>)
Operación
(f<7:4>) → (d <3:0>)
0 < f < 127
Operadores
d [0,1]
Ciclos 1
Los cuatro bits de más peso del registro f se intercambian con los 4 bits de
Descripción menos peso del mismo registro. Si d=0 el resultado se almacena en w,
si d=1el resultado se almacena en f.
Registro de STATUS
- - - - - - - -
EJEMPLO:
SWAPF REG1,0
Si antes de la instrucción:
Al ejecutarse la instrucción:
w = 5A h = 0101 1010 b
Volver a tabla
XORLW XORLW
Operación w XOR k → w
Sintaxis [Etiqueta] XORLW k
Ciclos 1
Registro de STATUS
- - - - - X - -
Si antes de la instrucción:
w = 1011 0101 b = B5 h
Al ejecutarse la instrucción:
1011 0101 b
1010 1111 b
0001 1010 b
Volver a tabla
XORWF XORWF
Exclusive OR w with f
Operación w XOR f → d
0 < f < 127
Operadores
d [0,1]
Ciclos 1
Registro de STATUS
- - - - - X - -
EJEMPLO:
XORWF REG1,1
Si antes de la instrucción:
w = B5 h = 1011 0101 b
Al ejecutarse:
w = B5 h
1010 1111
1011 0101
0001 1010
Volver a tabla
OPTION OPTION
Guarda el valor del acumulador en el registro OPTION
Operación w → OPTION
Sintaxis [Etiqueta] OPTION
Operadores No tiene
Ciclos 1
Registro de STATUS
- - - - - - - -
EJEMPLO:
MOVLW 10H ; carga el acumulador con el valor 10h.
OPTION ; carga el registro OPTION con el acumulador.
TRIS TRIS
Sintaxis [Etiqueta] TRIS f
Operadores No tiene
Ciclos 1
Registro de STATUS
- - - - - - - -
EJEMPLO:
MOVLW 16h ; carga el acumulador W con el valor 16h
TRIS PORTA ; carga el registro PORTA con el acumulador.
Instrucciones especiales
Existe un conjunto de instrucciones especiales diseñadas para
facilitar las operaciones a la hora de diseñar nuestros algoritmos.
Estas instrucciones pueden ser implementadas con una, dos o tres
de las instrucciones de la gama media. La mayoría de ellas se basa
en las operaciones con los acarreos y con los bits del registro
status en general. Este cuadro sólo debe servir de referencia y se
recomienda usar la forma equivalente del repertorio de
instrucciones, no obstante, pueden encontrarse programas que los
utilicen. Por supuesto con estos algoritmos, aunque utilicen una
sola expresión, no vamos disminuir los ciclos máquina necesarios.
Mnemónico Operación
Descripción Traducción Flag
Parámetros Equivalente
Add Carry to BTFSC 3,0
ADDCF f, d Sumar acarreo a f Z
File INCF f,d
Add Digit Carry Sumar acarreo de digito BTFSC 3,1
ADDDCF f, d Z
to File af INCF f,d
B K Branch Saltar a una etiqueta GOTO k -
Saltar a una etiqueta si BTFSC 3,0
BC K Branch on Carry -
hay acarreo GOTO k
Branch on Digit Saltar a una etiqueta si BTFSC 3,1
BDC K -
Carry hay acarreo de digito GOTO k
Branch on No Saltar a una etiqueta si BTFSS 3,0
BNC K -
Carry no hay acarreo GOTO k
Branch on No Saltar a una etiqueta si BTFSS 3,1
BNDC K -
Digit Carry no hay acarreo de digito GOTO k
Branch on No Saltar a una etiqueta si BTFSS 3,2
BNZ K -
Zero no hay cero GOTO k
Saltar a una etiqueta si BTFSC 3,2
BZ K Branch on Zero -
hay cero GOTO k
CLRC Clear Carry Poner a cero acarreo BCF 3,0 -
Poner a cero acarreo de
CLRDC Clear Digit Carry BCF 3,1 -
digito
CLRZ Clear Zero Poner a cero el flag Zero BCF 3,2 -
BSF/BCF
0A,3
Llamada larga a una
LCALL K Long CALL BSF/BCF -
etiqueta
0A,4
CALL k
BSF/BCF
0A,3
Salto largo a una
LGOTO K Long GOTO BSF/BCF -
etiqueta
0A,4
GOTO k
MOVFW F Move File to W Mover registro a W MOVF f,0 Z
COMF f,1
NEGF f, d Negate File Negar un registro Z
INCF f,d
SETC Set Carry Poner a uno el acarreo BSF 3,0 -
Poner a uno el acarreo
SETDC Set Digit Carry BSF 3,1 -
de digito
SETZ Set Zero Poner a uno el Zero BSF 3,2 -
SKPC Skip on Carry Saltar si hay acarreo BTFSS 3,0 -
Skip on Digit Saltar si hay acarreo de
SKPDC BTFSS 3,1 -
Carry digito
Skip on No
SKPNC Saltar si no hay acarreo BTFSC 3,0 -
Carry
Skip on No Digit Saltar si no hay acarreo
SKPNDC BTFSC 3,1 -
Carry de digito
Skip on Non
SKPNZ Saltar si no hay Zero BTFSC 3,2 -
Zero
SKPZ Skip on Zero Saltar si hay Zero BTFSS 3,2 -
Substract Carry Restar BTFSC 3,0
SUBCF f,d Z
from File acarreo del registro DECF f,d
Substract Digit Restar acarreo de dígito BTFSC 3,1
SUBDCF f,d Z
Carry from File del registro DECF f,d
TSTF f Test File Probar registro MOVF f,1 Z