| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Instrucciones del PIC16F84A | 9.1 |
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Instrucciones del PIC16F84A | 9.2 |
El PIC16F84A pertenece a la gama media y es de tipo RISC; esto quiere decir que tiene un juego de instrucciones reducido, en concreto de 35 instrucciones o nemónicos que son la base de funcionamiento del PIC. Al igual que los bits de los registros, sería complicado memorizarlas todas, así que utilizaremos este documento como guía de consulta.
Las instrucciones fundamentalmente se dividen en tres tipos. Esta división viene dada por el tipo de datos con los que trabajan:
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Instrucciones del PIC16F84A | 9.3 |
Las 35 instrucciones ó mnemónicos de la gama media de Microchip las encontraremos resumidas en la siguiente tabla. w es el acumulador, f representa un registro cualquiera y C, DC, Z los flags del registro STATUS.
| Instrucciones orientadas a registros | ||||||
| MNEMÓNICO OPERANDOS |
DESCRIPCIÓN | CÓDIGO OP | BANDERAS | NCIC | NOTAS | |
| ADDWF | f,d | w + f → d | 00 0111 dfff ffff | C, DC, Z | 1 | 1,2 |
| ANDWF | f,d | w AND f → d | 00 0101 dfff ffff | Z | 1 | 1,2 |
| CLRF | f | 00 h → f | 00 0001 1fff ffff | Z | 1 | 2 |
| CLRW | - | 00 h → w | 00 0001 0xxx xxxx | Z | 1 | - |
| COMF | f,d | Complemento de f → d | 00 1001 dfff ffff | Z | 1 | 1,2 |
| DECF | f,d | f - 1 → d | 00 0011 dfff ffff | Z | 1 | 1,2 |
| DECFSZ | f,d | f - 1 → d (si es 0 salta) | 00 1011 dfff ffff | Ninguna | 1(2) | 1,2,3 |
| INCF | f,d | f + 1 → d | 00 1010 dfff ffff | Z | 1 | 1,2 |
| INCFSZ | f,d | f + 1 → d (si es 0 salta) | 00 1111 dfff ffff | Ninguna | 1(2) | 1,2,3 |
| IORWF | f,d | w OR f → d | 00 0100 dfff ffff | Z | 1 | 1,2 |
| MOVF | f,d | f → d | 00 1000 dfff ffff | Z | 1 | 1,2 |
| MOVWF | f | w → f | 00 0000 1fff ffff | Ninguna | 1 | - |
| NOP | - | No operación | 00 0000 0xx0 0000 | Ninguna | 1 | - |
| RLF | f,d | Rota f izq por carry → d | 00 1101 dfff ffff | C | 1 | 1,2 |
| RRF | f,d | Rota f dcha por carry → d | 00 1100 dfff ffff | C | 1 | 1,2 |
| SUBWF | f,d | f - w → d | 00 0010 dfff ffff | C,DC,Z | 1 | 1,2 |
| SWAPF | f,d | Intercambia nibbles de f → d | 00 1110 dfff ffff | Ninguna | 1 | 1,2 |
| XORWF | f,d | w XOR f → d | 00 0110 dfff ffff | Z | 1 | 1,2 |
| Instrucciones orientadas a bit | ||||||
| MNEMÓNICO OPERANDOS |
DESCRIPCIÓN | CÓDIGO OP | BANDERAS | NCIC | NOTAS | |
| BCF | f,b | Pone a 0 bit b de registro f | 01 00bb bfff ffff | Ninguna | 1 | 1,2 |
| BSF | f,b | Pone a 1 bit b de registro f | 01 01bb bfff ffff | Ninguna | 1 | 1,2 |
| BTFSC | f,b | Salto si bit b de reg. f es 0 | 01 10bb bfff ffff | Ninguna | 1(2) | 3 |
| BTFSS | f,b | Salto si bit b de reg. f es 1 | 01 11bb bfff ffff | Ninguna | 1(2) | 3 |
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Instrucciones del PIC16F84A | 9.4 |
| Instrucciones con literales y de control | ||||||
| MNEMÓNICO OPERANDOS |
DESCRIPCIÓN | CÓDIGO OP | BANDERAS | NCIC | NOTAS | |
| ADDLW | k | w + k → w | 11 111x kkkk kkkk | C,DC,Z | 1 | - |
| ANDLW | k | w AND k → w | 11 1001 kkkk kkkk | Z | 1 | - |
| CALL | k | Llamada a subrutina k | 10 0kkk kkkk kkkk | Ninguna | 2 | - |
| CLRWDT | - | Borra temporizador del WDT | 00 0000 0110 0100 | TO,PD | 1 | - |
| GOTO | k | Ir a dirección k | 10 1kkk kkkk kkkk | Ninguna | 2 | - |
| IORLW | k | w OR k → w | 11 1000 kkkk kkkk | Z | 1 | - |
| MOVLW | k | k → w | 11 00xx kkkk kkkk | Ninguna | 1 | - |
| RETFIE | - | Retorno de una interrupción | 00 0000 0000 1001 | Ninguna | 2 | - |
| RETLW | k | Retorno con k en w | 11 01xx kkkk kkkk | Ninguna | 2 | - |
| RETURN | - | Retorno de una subrutina | 00 0000 0000 1000 | Ninguna | 2 | - |
| SLEEP | - | Modo Standby | 00 0000 0110 0011 | TO, PD | 1 | - |
| SUBLW | k | k - w → w | 11 110x kkkk kkkk | C,DC,Z | 1 | - |
| XORLW | k | w XOR k → w | 11 1010 kkkk kkkk | Z | 1 | - |
Notas:
En las tablas siguientes, por orden alfabético, veremos todos los datos de interés sobre las 35 instrucciones.
Algunos son de poca importancia. En cambio otros, como la operación, la sintaxis, el comportamiento del registro STATUS y los ejemplos, son imprescindibles para comprender su funcionamiento.
Aparte de estas 35 instrucciones, hay otro tipo de instrucciones usadas para simplificar la tarea de programar, y que generalmente están formadas por dos instrucciones básicas. Estas no las trataremos a fondo, pero las veremos en un resumen después de comprender el funcionamiento de las 35 instrucciones básicas.
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Instrucciones del PIC16F84A | 9.5 |
ADDLW |
|||||
ADD Literal to w |
|||||
| Operación | w + k → w |
||||
| Sintaxis | [Etiqueta] ADDLW k |
||||
| Operadores | 0 < k < 255 |
||||
|
Ciclos |
1 |
||||
| OPCODE | 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". | ||||
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
0001 0000 b
0001 0101 b
0010 0101 b
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Instrucciones del PIC16F84A | 9.6 |
ADDWF |
|||||
|
ADD w to F | |||||
| Operación |
w + f → d | ||||
| Sintaxis |
[Etiqueta] ADDWF f,d | ||||
| Operadores |
0 < f < 127 | ||||
| Ciclos |
1 | ||||
| OPCODE |
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. | ||||
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
0001 0111 b
1100 0010 b
1101 1001 b
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Instrucciones del PIC16F84A | 9.7 |
ANDLW | |||||
|
AND Literal and w | |||||
| Operación |
w AND k → w | ||||
| Sintaxis |
[Etiqueta] ANDLW k | ||||
| Operadores |
0 < f < 255 | ||||
| Ciclos |
1 | ||||
| OPCODE |
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. Esta instrucción realiza la operación AND bit a bit. | ||||
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
0101 1111 b
1010 0011 b
0000 0011 b
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Instrucciones del PIC16F84A | 9.8 |
ANDWF | |||||
|
AND w with F | |||||
| Operación |
w AND f → d | ||||
| Sintaxis |
[Etiqueta] ANDWF f,d | ||||
| Operadores |
0 < f < 127 | ||||
| Ciclos |
1 | ||||
| OPCODE |
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. Esta instrucción realiza la operación AND bit a bit. | ||||
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
0001 0111 b
1100 0010 b
0000 0010 b
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Instrucciones del PIC16F84A | 9.9 |
BCF | |||||
|
Bit Clear F | |||||
| Operación |
0 → (f<b>) | ||||
| Sintaxis |
[Etiqueta] BCF f,b | ||||
| Operadores |
0 < f < 127 | ||||
| Ciclos |
1 | ||||
| OPCODE |
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
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Instrucciones del PIC16F84A | 9.10 |
BSF | |||||
|
Bit Set F | |||||
| Operación |
1 → (f<b>) | ||||
| Sintaxis |
[Etiqueta] BSF f,b | ||||
| Operadores |
0 < f < 127 | ||||
| Ciclos |
1 | ||||
| OPCODE |
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
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Instrucciones del PIC16F84A | 9.11 |
BTFSC | |||||
|
Bit Test, Skip if Clear | |||||
| Operación |
Salta si (f<b>) = 0 | ||||
| Sintaxis |
[Etiqueta] BTFSC f,b | ||||
| Operadores |
0 < f < 127 | ||||
| Ciclos |
1 (2) | ||||
|
OPCODE |
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:
INICIO BTFSC FLAG,1 ES_1 GOTO PROCESO ES_0
Si antes de la instrucción. PC = dirección INICIO
Al ejecutarse:
if FLAG<1> = 0,
PC = dirección ES_0 y seguirá la ejecución del programa.
if FLAG<1> = 1,
PC = dirección ES_1 y el programa continuará en PROCESO
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Instrucciones del PIC16F84A | 9.12 |
BTFSS | |||||
|
Bit Test, Skip if Set | |||||
| Operación |
Salta si (f<b>) = 1 | ||||
| Sintaxis |
[Etiqueta] BTFSS f,b | ||||
| Operadores |
0 < f < 127 | ||||
| Ciclos |
1 (2) | ||||
| OPCODE |
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:
INICIO BTFSS FLAG,1 ES_0 GOTO PROCESO ES_1
Si antes de la instrucción. PC = dirección INICIO
Al ejecutarse:
if FLAG<1> = 0,
PC = dirección ES_0 y el programa continuará en PROCESO.
if FLAG<1> = 1,
PC = dirección ES_1 y seguirá la ejecución del programa.
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Instrucciones del PIC16F84A | 9.13 |
CALL | |||||
|
Subrutine Call | |||||
| Operación |
PC + 1 → TOS | ||||
| Sintaxis |
[Etiqueta] CALL k | ||||
| Operandos |
0 = k = 2047 | ||||
| Ciclos |
2 | ||||
| OPCODE |
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:
INICIO CALL SUB_1
Si antes de la instrucción:
PC = dirección INICIO
Al ejecutarse:
PC = dirección SUB_1
TOS = dirección INICIO +1
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Instrucciones del PIC16F84A | 9.14 |
CLRF | |||||
|
Clear f | |||||
| Operación |
00 h → f | ||||
| Sintaxis |
[Etiqueta] CLRF f | ||||
| Operadores |
0 < f < 127 | ||||
| Ciclos |
1 | ||||
| OPCODE |
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
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Instrucciones del PIC16F84A | 9.15 |
CLRW | |||||
|
Clear w | |||||
| Operación |
00 h → w | ||||
| Sintaxis |
[Etiqueta] CLRW | ||||
| Operadores |
No tiene | ||||
| Ciclos |
1 | ||||
| OPCODE |
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
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Instrucciones del PIC16F84A | 9.16 |
CLRWDT | |||||
|
Clear watchdog Timer | |||||
| Operación |
00 h → WDT | ||||
| Sintaxis |
[Etiqueta] CLRWDT | ||||
| Operadores |
No tiene | ||||
| Ciclos |
1 | ||||
| OPCODE |
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
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Instrucciones del PIC16F84A | 9.17 |
COMF | |||||
|
Complement f | |||||
| Operación |
Complemento de f → d | ||||
|
Sintaxis |
[Etiqueta] COMF f,d | ||||
| Operadores |
0 < f < 127 | ||||
| Ciclos |
1 | ||||
| OPCODE |
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
0001 0011 b
1110 1100 b
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Instrucciones del PIC16F84A | 9.18 |
DECF | |||||
|
Decrement f | |||||
| Operación |
f - 1 → d | ||||
| Sintaxis |
[Etiqueta] DECF f,d | ||||
| Operadores |
0 < f < 127 | ||||
| Ciclos |
1 | ||||
| OPCODE |
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
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Instrucciones del PIC16F84A | 9.19 |
DECFSZ | |||||
|
Decrement f , Skip if 0 | |||||
| Operación |
f - 1 → d, salta si resultado = 0 | ||||
| Sintaxis |
[Etiqueta] DECFSZ f,d | ||||
| Operadores |
0 < f < 127 | ||||
| Ciclos |
1 (2) | ||||
| OPCODE |
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:
INICIO DECFSZ CNT,1 GOTO LOOP CONTINUAR
si antes de la instrucción:
PC = dirección INICIO
Al ejecutarse: CNT = CNT -1
Si CNT = 0 entonces PC = dirección CONTINUAR
Si CNT no = 0 entonces PC = dirección INICIO + 1
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Instrucciones del PIC16F84A | 9.20 |
GOTO | |||||
|
Unconditional Branch | |||||
| Operación |
k → PC <10:0> | ||||
| Sintaxis |
[Etiqueta] GOTO k | ||||
| Operadores |
0 < k < 2047 | ||||
| Ciclos |
2 | ||||
| OPCODE |
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 carga desde el 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 SEGUIR
Al ejecutarse:
PC = dirección SEGUIR
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Instrucciones del PIC16F84A | 9.21 |
INCF | |||||
|
Increment f | |||||
| Operación |
f + 1 → d | ||||
| Sintaxis |
[Etiqueta] INCF f,d | ||||
| Operadores |
0 < f < 127 | ||||
| Ciclos |
1 | ||||
| OPCODE |
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
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Instrucciones del PIC16F84A | 9.22 |
INCFSZ | |||||
|
Increment f, SkIP if 0 | |||||
| Operación |
f +1 → d, salta si resultado = 0 | ||||
| Sintaxis |
[Etiqueta] INCFSZ f,d | ||||
| Operadores |
0 < f < 127 | ||||
| Ciclos |
1 (2) | ||||
| OPCODE |
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:
INICIO INCFSZ CNT,1 GOTO SALTO CONTINUAR
Si antes de la instrucción:
PC = dirección INICIO
Al ejecutarse: CNT = CNT+1
Si CNT = 0
Entonces PC = dirección CONTINUAR
Si CNT no = 0
Entonces PC = dirección INICIO + 1
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Instrucciones del PIC16F84A | 9.23 |
IORLW | |||||
|
Inclusive OR Literal with w | |||||
| Operación |
w OR k → w | ||||
| Sintaxis |
[Etiqueta] IORLW k | ||||
| Operadores |
0 < k < 255 | ||||
| Ciclos |
1 | ||||
| OPCODE |
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. Esta instrucción realiza la operación OR bit a bit. | ||||
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
1001 1010 b
0011 0101 b
1011 1111 b
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Instrucciones del PIC16F84A | 9.24 |
IORWF | |||||
|
Inclusive OR w with f | |||||
| Operación |
w OR f → d | ||||
| Sintaxis |
[Etiqueta] IORWF f,d | ||||
| Operadores |
0 < f < 127 | ||||
| Ciclos |
1 | ||||
| OPCODE |
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. Esta instrucción realiza la operación OR bit a bit. | ||||
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
0001 0011 b
1001 0001 b
1001 0011 b
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Instrucciones del PIC16F84A | 9.25 |
MOVLW | |||||
|
Move literal to w | |||||
| Operación |
k → w | ||||
| Sintaxis |
[Etiqueta] MOVLW k | ||||
| Operadores |
0 < f < 255 | ||||
| Ciclos |
1 | ||||
| OPCODE |
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
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Instrucciones del PIC16F84A | 9.26 |
MOVF | |||||
|
Move f | |||||
| Operación |
f → d | ||||
| Sintaxis |
[Etiqueta] MOVF f,d | ||||
| Operadores |
0 < f < 127 | ||||
| Ciclos |
1 | ||||
| OPCODE |
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
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Instrucciones del PIC16F84A | 9.27 |
MOVWF | |||||
|
Move w to f | |||||
| Operación |
w → f | ||||
| Sintaxis |
[Etiqueta] MOVWF f | ||||
| Operadores |
0 < f < 127 | ||||
| Ciclos |
1 | ||||
| OPCODE |
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 OPCION
Si antes de la instrucción:
OPCION = FF h
w = 4F h
Al ejecutarse:
OPCION = 4F h
w = 4F h
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Instrucciones del PIC16F84A | 9.28 |
NOP | |||||
|
No operation | |||||
| Operación |
no operación | ||||
| Sintaxis |
[Etiqueta] NOP | ||||
| Operadores |
No tiene | ||||
| Ciclos | 1 | ||||
| OPCODE |
00 |
0000 |
0xx0 |
0000 | |
| Descripción | No realiza operación alguna, pero sirve para consumir un ciclo de instrucción, equivalente a 4 de reloj. | ||||
Registro de STATUS
|
PA2 |
PA1 |
PA0 |
TO# |
PD# |
Z |
DC |
C |
|
- |
- |
- |
- |
- |
- |
- |
- |
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
Cada vez que llamemos a la subrutina RETARDO, obtendremos 3 microsegundos de demora.
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Instrucciones del PIC16F84A | 9.29 |
RETFIE | |||||
|
Return from Interrupt | |||||
| Operación |
TOS → PC | ||||
| Sintaxis |
[Etiqueta] RETFIE | ||||
| Operadores |
No tiene | ||||
| Ciclos |
2 | ||||
| OPCODE |
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
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Instrucciones del PIC16F84A | 9.30 |
RETLW | |||||
|
Retur with Literal in w | |||||
| Operación |
k → w; | ||||
| Sintaxis |
[Etiqueta] RETLW k | ||||
| Operadores |
0 < k < 255 | ||||
| Ciclos | 2 | ||||
| OPCODE | 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:
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
Al ejecutarse la instrucción w = toma el valor de k7
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Instrucciones del PIC16F84A | 9.31 |
RETURN | |||||
|
Return from Subroutine | |||||
| Operación |
TOS → PC | ||||
| Sintaxis |
[Etiqueta] RETURN | ||||
| Operadores |
No tiene | ||||
| Ciclos |
2 | ||||
| OPCODE |
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 |
|
- |
- |
- |
- |
- |
- |
- |
- |
EJEMPLO:
RETURN
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Instrucciones del PIC16F84A | 9.32 |
RLF | |||||
|
Rotate Left f through Carry | |||||
| Operación |
| ||||
| Sintaxis |
[Etiqueta] RLF f,d | ||||
| Operadores |
0 < f < 127 | ||||
| Ciclos |
1 | ||||
| OPCODE |
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, desde los bits menos significativos a los más significativos. El bit D7 pasa al CARRY del registro STATUS, el contenido del CARRY pasa al D0, el D0 al D1, etc. Es como si multiplicáramos por dos el contenido del registro. 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 |
EJEMPLOS:
Si tenemos el registro VALOR = 0000 0001 b y aplicamos la instrucción RLF VALOR,1
Entonces el resultado será VALOR = 0000 0010 b y el bit C = 0.
Si tenemos el registro VALOR = 1110 0110 b y aplicamos la instrucción RLF VALOR
El resultado será VALOR = 1100 1100 b y el bit C = 1.
Si antes de la instrucción REG1 = 1110 0110 b y flag C = 0 y aplicamos la instrucción RLF REG1,0, como d = 0 el resultado queda en w, al ejecutarse:
REG1 = 1110 0110 b
w = 1100 1100 b
flag C = 1
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Instrucciones del PIC16F84A | 9.33 |
RRF | |||||
|
Rotate Right f through Carry | |||||
| Operación |
| ||||
| Sintaxis |
[Etiqueta] RRF f,d | ||||
| Operadores |
0 < f < 127 | ||||
| Ciclos |
1 | ||||
| OPCODE |
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, desde los bits más significativos a los menos significativos. El bit C del registro STATUS pasa al D7, el D0 pasa al bit C, el D1 al D0, etc. Es como si dividiéramos por dos el contenido del registro. 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 |
EJEMPLOS:
Si tenemos el registro VALOR = 0000 0001 b y aplicamos la instrucción RRF VALOR,1
Entonces el resultado será VALOR = 0000 0000 b y el bit C = 1.
Si tenemos el registro VALOR = 1000 0000 b y aplicamos la instrucción RRF VALOR,1
El resultado será VALOR = 0100 0000 b y el bit C = 0.
Si antes de la instrucción, REG1 = 1110 0110 b y flag C = 1 y aplicamos la instrucción RRF REG1,0, como d = 0 el resultado queda en w, al ejecutarse:
REG1 = 1110 0110 b
w = 0111 0011 b
flag C = 0
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Instrucciones del PIC16F84A | 9.34 |
SLEEP | |||||
|
Sleep | |||||
| Operación |
00 h → WDT | ||||
|
Sintaxis |
[Etiqueta] SLEEP | ||||
| Operadores |
No tiene | ||||
| Ciclos |
1 | ||||
| OPCODE |
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:
| ||||
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
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Instrucciones del PIC16F84A | 9.35 |
SUBLW | |||||
|
Subtract w from Literal | |||||
| Operación |
k - w → w | ||||
| Sintaxis |
[Etiqueta] SUBLW k | ||||
| Operadores |
0 < k < 255 | ||||
| Ciclos |
1 | ||||
| OPCODE |
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 0x02 ;k - w → w, 02 h - w → w
a) Si antes de la instrucción w = 01 h y flag C = ? al ejecutarse:
02 h - 01 h = 01 h
w = 01 h
flag C = 1 ; el resultado es positivo
b) Si antes de la instrucción w = 02 h, flag C = ? y flag Z = ? al ejecutarse:
02 h - 02 h = 00 h
w = 00 h
flag C = 1
flag Z = 1 ;el resultado es cero
c) Si antes de la instrucción w = 03 h y flag C = ? al ejecutarse:
02 h - 03 h = -01 h = - 0000 0001 b
C1(0000 0001 b)=1111 1110 b; 1111 1110 b + 1 b = 1111 1111 b = FF h
w = FF h
flag C = 0 ; el resultado es negativo
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Instrucciones del PIC16F84A | 9.36 |
SUBWF | |||||
|
Subtract w from f | |||||
| Operación |
f - w → d | ||||
| Sintaxis | [Etiqueta] SUBWF f,d | ||||
| Operadores |
0 < f < 127 | ||||
| Ciclos |
1 | ||||
| OPCODE |
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 ;f - w → f, REG1 - w → REG1
a) Si antes de la instrucción, REG1 = 03 h, w = 02 h y flag C = ?, al ejecutarse:
03 h - 02h = 01 h
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 y flag C = ?, al ejecutarse:
02 h - 02h = 00 h
REG1 = 00h
w = 02 h
flag C = 1
fal0 Z = 1 ; el resultado es cero
c) Si antes de la instrucción, REG1 = 01 h, w = 02 h y flag C = ?, al ejecutarse:
01 h - 02 h = -01 h = - 0000 0001 b
C1(0000 0001 b)=1111 1110 b; 1111 1110 b + 1 b = 1111 1111 b = FF h
REG1 = FF h
w = 02 h
flag C = 0 ; el resultado es negativo
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Instrucciones del PIC16F84A | 9.37 |
SWAPF | |||||
|
Swap Nibbles in f | |||||
| Operación |
(f<3:0>) → (d <7:4>) | ||||
| Sintaxis |
[Etiqueta] SWAPF f,d | ||||
| Operadores | 0 < f < 127 | ||||
| Ciclos |
1 | ||||
| OPCODE |
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
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Instrucciones del PIC16F84A | 9.38 |
XORLW | |||||
|
Exclusive OR Literal with k | |||||
| Operación |
w XOR k → w | ||||
| Sintaxis |
[Etiqueta] XORLW k | ||||
| Operadores |
0 < f < 255 | ||||
| Ciclos |
1 | ||||
| OPCODE |
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. Esta instrucción realiza la operación EXOR bit a bit. | ||||
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
1011 0101 b
1010 1111 b
0001 1010 b
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Instrucciones del PIC16F84A | 9.39 |
XORWF | ||
|
Exclusive OR w with f | ||
| Operación |
w XOR f → d | |
| Sintaxis |
[Etiqueta] XORWF f,d | |
| Operadores |
0 < f < 127 | |
| 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 d=0. Esta instrucción realiza la operación EXOR bit a bit. | |
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
1010 1111
1011 0101
0001 1010
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Instrucciones del PIC16F84A | 9.40 |
Entre las instrucciones anteriores no se han incluido dos que no pertenecen estrictamente hablando al repertorio de 35 instrucciones de la gama media. Estas instrucciones son OPTION y TRIS . La razón por la cual no pertenecen a estas 35 instrucciones es por que fueron creadas pensando en la gama baja, que carece de 4 de las instrucciones de la gama media: ADDLW, RETFIE, RETURN y SUBLW.
A pesar de todo las instrucciones TRIS y OPTION existen, en principio, en la gama media, pero Microchip recomienda no utilizarlas, para mantener la compatibilidad con todos los PIC de la gama media y los que puedan aparecer.
|
OPTION |
OPTION | ||||
|
Guarda el valor del acumulador en el registro OPTION | |||||
| Operación |
w → OPTION | ||||
| Sintaxis |
[Etiqueta] OPTION | ||||
| Operadores |
No tiene | ||||
|
Ciclos |
1 | ||||
| OPCODE | 00 | 0000 | 0110 | 0010 | |
| Descripción |
Esta instrucción guarda en el registro especial OPTION el valor contenido en el acumulador w. No modifica ningún bit de estado. | ||||
Registro de STATUS
|
PA2 |
PA1 |
PA0 |
TO# |
PD# |
Z |
DC |
C |
|
- |
- |
- |
- |
- |
- |
- |
- |
EJEMPLO:
MOVLW 10H ; carga el acumulador con el valor 10h. OPTION ; carga el registro OPTION con el acumulador.
Esta instrucción existe para mantener la compatibilidad con los PIC producidos con anterioridad, y como en el futuro podría dejar de implementarse, Microchip aconseja realizar el ejemplo anterior de esta otra forma:
BSF STATUS,RP0 ; activa el banco 1. MOVLW 10H ; carga el acumulador con 10h MOVWF OPTION_REG ; carga OPTION con el acumulador.
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Instrucciones del PIC16F84A | 9.41 |
|
TRIS |
TRIS | ||||
|
Guarda el acumulador en uno de los registros de TRIS. | |||||
|
Operación |
w → f(TRISA ó TRISB) | ||||
| Sintaxis |
[Etiqueta] TRIS f | ||||
| Operadores |
No tiene | ||||
|
Ciclos |
1 | ||||
| OPCODE | 00 | 0000 | 0110 | 1111 | |
| Descripción |
Esta instrucción guarda el valor del acumulador w en uno de los registros especiales TRIS (TRISA o TRISB) que indicamos en el parámetro f. No modifica ningún bit de estado. Los registros TRIS determinan el funcionamiento como entrada y salida de las líneas I/O del PIC. | ||||
Registro de STATUS
PA2 |
PA1 |
PA0 |
TO# |
PD# |
Z |
DC |
C |
|
- |
- |
- |
- |
- |
- |
- |
- |
EJEMPLO:
MOVLW 16h ; carga el acumulador W con el valor 16h TRIS PORTA ; carga el registro PORTA con el acumulador.
Esta instrucción existe para mantener la compatibilidad con los PIC producidos anteriormente, y como en el futuro podría dejar de implementarse, Microchip aconseja realizar el ejemplo anterior de esta otra forma (aunque ocupa más memoria...):
BSF STATUS,RP0 ; activa el banco 1. MOVLW 16h ; carga el acumulador con el valor 16h MOVWF TRISA ; carga el registro PORTA con W.
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Instrucciones del PIC16F84A | 9.42 |
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 |
Descripción |
Traducción |
Operación |
Flag |
|
ADDCF |
f, d |
Add Carry to File |
Sumar acarreo a f |
BTFSC 3,0 |
Z |
ADDDCF |
f, d |
Add Digit Carry to File |
Sumar acarreo de digito a f |
BTFSC 3,1 |
Z |
B |
K |
Branch |
Saltar a una etiqueta |
GOTO k |
- |
BC |
K |
Branch on Carry |
Saltar a una etiqueta si hay acarreo |
BTFSC 3,0 |
- |
BDC |
K |
Branch on Digit Carry |
Saltar a una etiqueta si hay acarreo de digito |
BTFSC 3,1 |
- |
BNC |
K |
Branch on No Carry |
Saltar a una etiqueta si no hay acarreo |
BTFSS 3,0 |
- |
BNDC |
K |
Branch on No Digit Carry |
Saltar a una etiqueta si no hay acarreo de digito |
BTFSS 3,1 |
- |
BNZ |
K |
Branch on No Zero |
Saltar a una etiqueta si no hay cero |
BTFSS 3,2 |
- |
BZ |
K |
Branch on Zero |
Saltar a una etiqueta si hay cero |
BTFSC 3,2 |
- |
CLRC |
|
Clear Carry |
Poner a cero acarreo |
BCF 3,0 |
- |
CLRDC |
|
Clear Digit Carry |
Poner a cero acarreo de digito |
BCF 3,1 |
- |
CLRZ |
|
Clear Zero |
Poner a cero el flag Zero |
BCF 3,2 |
- |
LCALL |
K |
Long CALL |
Llamada larga a una etiqueta |
BSF/BCF 0A,3 |
- |
LGOTO |
K |
Long GOTO |
Salto largo a una etiqueta |
BSF/BCF 0A,3 |
- |
MOVFW |
F |
Move File to W |
Mover registro a W |
MOVF f,0 |
Z |
NEGF |
f, d |
Negate File |
Negar un registro |
COMF f,1 |
Z |
SETC |
|
Set Carry |
Poner a uno el acarreo |
BSF 3,0 |
- |
SETDC |
|
Set Digit Carry |
Poner a uno el acarreo de digito |
BSF 3,1 |
- |
SETZ |
|
Set Zero |
Poner a uno el Zero |
BSF 3,2 |
- |
SKPC |
|
Skip on Carry |
Saltar si hay acarreo |
BTFSS 3,0 |
- |
SKPDC |
|
Skip on Digit Carry |
Saltar si hay acarreo de digito |
BTFSS 3,1 |
- |
SKPNC |
|
Skip on No Carry |
Saltar si no hay acarreo |
BTFSC 3,0 |
- |
SKPNDC |
|
Skip on No Digit Carry |
Saltar si no hay acarreo de digito | BTFSC 3,1 |
- |
SKPNZ |
|
Skip on Non Zero |
Saltar si no hay Zero |
BTFSC 3,2 |
- |
SKPZ |
|
Skip on Zero |
Saltar si hay Zero |
BTFSS 3,2 |
- |
SUBCF |
f,d |
Substract Carry from File |
Restar acarreo |
BTFSC 3,0 |
Z |
SUBDCF |
f,d |
Substract Digit Carry from File |
Restar acarreo de dígito del registro |
BTFSC 3,1 |
Z |
TSTF |
f |
Test File |
Probar registro |
MOVF f,1 |
Z |