1 DESCRIPCIÓN DE LAS INSTRUCCIONES Todas las

Anuncio
DESCRIPCIÓN DE LAS INSTRUCCIONES

Todas las instrucciones del PIC cumplen las
siguientes condiciones:

Las instrucciones son simples y rápidas. Todas
tienen un tiempo de ejecución de un ciclo de
instrucción (cuatro ciclos de reloj) a excepción de las
de salto que tienen un tiempo de ejecución de dos
ciclos de instrucción.

Las instrucciones son ortogonales. Casi todas las
instrucciones tienen una longitud de 14 bits y los datos
una longitud de 1 byte.
1
JUEGO DE INSTRUCCIONES

El juego de instrucciones de la CPU está compuesto por 35
instrucciones.

En los 14 bits que forman las instrucciones máquina del PIC se incluyen
el código de operación propiamente dicho y los operandos en caso de
que estos existan.

Todas las instrucciones son de un ciclo, excepto las de salto que duran
dos ciclos.

Las instrucciones pueden ser:





Instrucciones que manejan registros.
Instrucciones que manejan bits.
Instrucciones de salto o “brinco”.
Instrucciones que manejan operandos inmediatos.
Instrucciones especiales y de control.
2
1
JUEGO DE INSTRUCCIONES

La nomenclatura que utilizan estas instrucciones es la siguiente:

En las instrucciones orientadas a manejo registros, “f” representa un
registro y “d” representa el destino. Si d es “0” el resultado de la
operación se sitúa en el registro de trabajo W, mientras que si d es
“1” el resultado se sitúa en el mismo registro “f”.

En las instrucciones orientadas a bits, “b” representa en binario la
posición (0-7) del bit dentro del byte, “f” representa el byte o registro.
(EL bit 0 es el bit de menor peso).

En las instrucciones con literales y de control, “k” representa la
constante o literal que según los casos puede ser de 8 u 11 bits.

“x” corresponde con un valor indeterminado que puede ser 0 o 1.
3
JUEGO DE INSTRUCCIONES

El ensamblador, para expresar números
en distintas bases numéricas, utiliza los
siguientes formatos
Base
Hexadecimal
Decimal
Binario
Representación
0x0a ó h’0a’ ó 0a ó 0ah
d’10’
b’00001010’
4
2
DESCRIPCIÓN DE LAS INSTRUCCIONES
ADDLW
[ ADDLW k]
1
Añade el contenido del registro W al literal k y almacena el resultado en W.
Ejemplo:
ADDLW 0x15
Si antes de la instrucción:
W = 10h = 0001 0000 b
Al ejecutarse la instrucción:
W = 10h + 15h = 25h
W = 0001 0000 b + 0001 0101 b = 0010 0101 b
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 3º al 4º bit.
Z --- Se pone a 1 si el resultado de la operación es cero.
5
DESCRIPCIÓN DE LAS INSTRUCCIONES
ADDWF
[ADDWF f,d]
2
Añade 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.

Ejemplo:
ADDWF FSR,0
Si antes de la instrucción:
W = 17h y FSR = C2 como d = 0
Al ejecutarse:
W = 17h + C2h = D9h
FSR = C2h
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 3º al 4º bit.
Z --- Se pone a 1 si el resultado de la operación es cero.
6
3
DESCRIPCIÓN DE LAS INSTRUCCIONES
ANDLW
[ANDLW
k]
3
Efectúa la operación AND lógica entre el contenido del registro W y el
literal k, y almacena el resultado en W.

Ejemplo:
ANDLW 0x5F
Si antes de la instrucción:
W = A3h
Al ejecutarse la instrucción:
W = 0101 1111 b AND 1010 0011 b = 0000 0011 b = 03h
Puede verse afectado el bit Z
7
DESCRIPCIÓN DE LAS INSTRUCCIONES
ANDWF
[ANDWF f,d]
4
Efectúa la operación AND lógica 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.
Ejemplo:
ANDWF FSR,1
Si antes de la instrucción:
W = 17h = 0001 0111 b
FSR = C2h = 1100 0010 b
Al ejecutarse:
W = 17h = 0001 0111 b
FSR = 0001 0111 b AND 1100 0010 b = 0000 0010 b = 02h
Z - Se pone a 1 si el resultado de la operación es cero
8
4
DESCRIPCIÓN DE LAS INSTRUCCIONES
BCF
[BCF f,d]
5
Pone a cero el bit número “b” del registro “f”.
Ejemplo:
BCF FLAG _REG,7
Si antes de la instrucción el registro:
FLAG_REG = C7h = 1100 0111 b
Al ejecutarse la instrucción, el registro queda con el valor:
FLAG_REG = 47h = 0100 1111 b
9
DESCRIPCIÓN DE LAS INSTRUCCIONES
BSF
[BSF f,d]
6
Pone a 1 el bit “b” del registro “f”.

Ejemplo:
BSF FLAG _REG,7
Si antes de la instrucción el registro tiene el valor:
FLAG_REG = 0Ah = 0000 1010 b
Al ejecutarse la instrucción, el registro queda con el valor:
FLAG_REG = 8Ah = 1000 1010 b
10
5
DESCRIPCIÓN DE LAS INSTRUCCIONES
BTFSC
[BTFSC
f,b]
7
Si el bit “b” del registro “f” es 0, se salta la siguiente instrucción, no se ejecuta, y
se continúa con la ejecución del programa. Cuando se produce este salto, son
necesarios dos ciclos.

Ejemplo:
LEER
BTFSC
GOTO
BCF
PORTA,2
LEER
MEMO,7
Si el bit “2” del registro PORTA es “1”, entraremos
en un bucle, repitiendo la instrucción BTFSC
constantemente.
Si el bit “2” del registro PORTA es “0”, no
se ejecuta la instrucción GOTO (ir a) y se realizará
el borrado del bit “7” del registro MEMO,
continuando con el programa
11
DESCRIPCIÓN DE LAS INSTRUCCIONES
BTFSS
[BTFSS
f,b]
8
Si el bit “b” del registro “f” es 1, se salta la siguiente instrucción, no se ejecuta, y
se continúa con la ejecución del programa. Cuando se produce este salto, son
necesarios dos ciclos.

Ejemplo:
LEER
BTFSS
GOTO
BCF
PORTA,2
LEER
MEMO,7
Si el bit 2 del registro PORTA es 0, entramos
en un bucle, repitiendo la instrucción BTFSS
continuamente.
Si el bit 2 del registro PORTA es 1, no se
ejecuta la instrucción GOTO (ir a LEER) y se
realiza el borrado del bit 7 del registro MEMO,
continuando con el programa.
12
6
DESCRIPCIÓN DE LAS INSTRUCCIONES
CALL
[CALL k]
9
Salto a subrutina. La dirección de retorno se guarda en la pila (PC + 1). El literal
k de 11 bits forma la dirección de salto y se carga en los bits B0 al B10 del PC.
Los bits B11 y B12 se cargan con los bits B3 y B4 del registro PCLATH.

Ejemplo:
DIR
CALL
DIREC
Si antes de la instrucción:
PC = dirección DIR
Al ejecutarse:
PC = dirección DIREC
TOS = dirección DIR + 1
13
DESCRIPCIÓN DE LAS INSTRUCCIONES
CLRF
[CLRF
f]
10
Pone a cero el contenido del registro “f” y pone a 1 el bit Z del
registro STATUS.

Ejemplo:
CLRF
MEMO
Antes de la instrucción:
MEMO = 0x83 = b’1000 0011’
Después de la instrucción:
MEMO = 0x00 = b’0000 0000’
14
7
DESCRIPCIÓN DE LAS INSTRUCCIONES
CLRW
[CLRW]
11
Pone a cero el contenido del W y pone a uno el bit Z del registro
STATUS.

Ejemplo
CLRW
Antes de la instrucción:
W = 0x6D
Después de la instrucción:
W = 0x00
15
DESCRIPCIÓN DE LAS INSTRUCCIONES
CLRWDT
[CLRWDT]
12
Pone a cero el contenido del WDT como su preescaler. Los bits TO
y PD del registro STATUS se ponen a uno.

Ejemplo:
CLRWDT
Antes de la instrucción:
WDT = 0x7F
Después de la instrucción:
WDT = 0x00, Preescaler = 0, TO = 1, PD = 1
16
8
DESCRIPCIÓN DE LAS INSTRUCCIONES
COMF
[COMF f,d]
13
Realiza el complemento del contenido del registro “f” bit a bit. El
resultado se almacena en el registro “f” si d = 1 y o en el registro W si d
= 0, en este caso “f” no varía. Z = 1 si el resultado es cero.

Ejemplo
COMF CTDOR,1
Antes de la instrucción:
W = 0xxx = b’xxxx xxxx’
CTDOR = 0x99 = b’1001 1001’
Después de la instrucción:
W = 0x66 = b’0110 0110’
CTDOR = 0x99 = b’1001 1001’
17
DESCRIPCIÓN DE LAS INSTRUCCIONES
DECF
[DECF f,d]
14
Se decrementa en una unidad el contenido de “f”, y almacena el
resultado en W si d = 0 o en el registro “f” si d = 1. Si el destino es W el
contenido del registro “f” no varía. Si el resultado de la operación es
cero el bit Z se pone a uno.

Ejemplo 1.DECF
CTDOR,1
Antes de la instrucción:
CTDOR = 0x99 = D’153’
Z=0
Después de la instrucción:
CTDOR = 0x98 = D’152’
Z=0
18
9
DESCRIPCIÓN DE LAS INSTRUCCIONES

Ejemplo 2.-
DECF
CTDOR,0
Antes de la instrucción:
W = 0xxx = D’xxx’
CTDOT = 0x01 = D’001’
Z=0
Después de la instrucción:
W = 0x00 = D’000’
CTDOR = 0x01 = D’ 001’
Z=1
19
DESCRIPCIÓN DE LAS INSTRUCCIONES

DECFSZ
[DECFSZ
f,d]
15
Se decrementa en una unidad el contenido de “f” y almacena el resultado en W si
d = 0 o en el registro “f” si d = 1. Si el destino es W el contenido del registro “f”
no varía. Si el resultado de la operación es cero, se ignora la siguiente
instrucción. Cuando se produce este salto, son necesarios dos ciclos.

Ejemplo:
VER
DECFSZ CTDOR,1
GOTO VER
DECF MEMO,1
Se decrementa el valor de CTDOR, sustituyendo el valor anterior
por el actual.
Si el valor del registro CTDOR no es cero, se ejecutará la instrucción GOTO (ir a VER), repitiendo este
bucle hasta que el valor del CTDOR valga cero. En este momento se producirá el salto de la
instrucción GOTO, ejecutando la siguiente a esta.
20
10
DESCRIPCIÓN DE LAS INSTRUCCIONES
GOTO
[GOTO k]
16
Salto incondicional.
Normalmente se utiliza para llamar a la subrutina situada en la dirección a la que
se carga el PC.
El literal k de 11 bits forma la dirección de salto y se carga en los bits B0-B10 del
PC.
Los bits B11 y B12 del PC se cargan con los bits B3 y B4 del registro PCLATH.

Ejemplo:
DIR
GOTO
DEREC
Si antes de la instrucción:
PC = dirección DIR
Al ejecutarse:
PC = dirección DIREC
21
DESCRIPCIÓN DE LAS INSTRUCCIONES
INCF
[INCF f,d]
17
Se incrementa el contenido del registro “f” en una unidad y almacena el resultado
en W si d = 0 y en el registro “f” si d = 1.
Si el destino es W, el contenido del registro “f” no varía.

Ejemplo 1.INCF
CTDOR,0
Antes de la instrucción:
W = 0x6C = D’108’
CTDOR = 0x19 = D’25’
Z=0
Después de la instrucción:
W = 0x1A = D’26’
CTDOR = 0x19 = D’25
Z=0
22
11
DESCRIPCIÓN DE LAS INSTRUCCIONES

Ejemplo 2.INCF
CTDOR,1
Antes de la instrucción:
W = 0x6C = D’108’
CTDOR = 0xFF = D’255’
Z=0
Después de la instrucción:
W = 0x6C = D’108’
CTDOR = 0x00 = D’0’
Z=1
23
DESCRIPCIÓN DE LAS INSTRUCCIONES
INCFSZ
[INCFSZ f,d]
18
Se incrementa el contenido del registro “f” en una unidad, y almacena el
resultado en W si d = 0 y en “f” si d = 1.
Si el destino es W, el contenido del registro “f” no varía.
Si el resultado de la operación es cero, se ignora la siguiente
instrucción.
Cuando se produce este salto, son necesarios dos ciclos.

Ejemplo.VER
INCFSZ
GOTO
DECF
CTDOR,1
VER
MEMO,1
Se incrementa el valor de CTDOR, sustituyendo el valor anterior
por el actual.
Si el valor del registro CTDOR no es cero, se ejecutará la instrucción
GOTO (ir a VER), repitiendo este bucle hasta que el valor de CTDOR se cero.
En este momento se producirá el salto de la instrucción GOTO, ejecutando la siguiente a
esta.
24
12
DESCRIPCIÓN DE LAS INSTRUCCIONES
IORLW
[IORLW k]
19
Realiza la operación lógica OR entre el contenido del registro W y el
literal k. El resultado se almacena en W.
Ejemplo.IORLW
0xB6
Antes de la instrucción:
W = 0xC0 = b’1100 0000’
L = 0xB6 = b’ 1011 0110’
Después de la instrucción:
W = 0xF6 = b’1111 0110’
Z=1
25
DESCRIPCIÓN DE LAS INSTRUCCIONES
IORWF
[IORWF f,d]
20
Realiza la operación lógica OR entre el contenido del registro W y el contenido del
registro “f”, y almacena el resultado en W si d = 0 y en el registro “f” si d = 1.

Ejemplo.IORWF
TEMP,0
Antes de la instrucción:
W = 0x91 = b’1001 0001’
TEMP = 0x13 = b’0001 0011’
Después de la instrucción:
W = 0x93 = b’1001 0011’
TEMP = 0x13 = b’0001 0011’
Z=1
26
13
DESCRIPCIÓN DE LAS INSTRUCCIONES
MOVF
[MOVF f,d]
21
Mueve el contenido del registro “f” al registro destino, dependiendo del valor de d.
El registro destino será W si d = 0 y será “f” si d = 1.
Esta instrucción permite comprobar el valor de “f”, ya que Z queda afectado.
Ejemplo.MOVF CONTA,0
Antes de la instrucción:
W = 0x46
CONTA = 0x13
Después de la instrucción:
W = 0x13 CONTA = 0x13
27
DESCRIPCIÓN DE LAS INSTRUCCIONES
MOVLW
[MOVLW k]
22
Mueve el valor literal k al registro W.
Ejemplo:
MOVLW
0x44
Antes de la instrucción:
W = 0x3C
L = 0x44
Después de la instrucción:
W = 0x44
28
14
DESCRIPCIÓN DE LAS INSTRUCCIONES
MOVWF
[MOVWF f]
23
Mueve el contenido del registro W al registro “f”.
Ejemplo:
MOVWF NUM
Antes de la instrucción:
W = 0x3F
NUM = 0x10
Después de la instrucción:
W = 0x3F
NUM = 0x3F
29
DESCRIPCIÓN DE LAS INSTRUCCIONES
NOP
[NOP]
24
No realiza ninguna operación. Se consume un ciclo de
instrucción sin hacer nada.

Ejemplo
----------------------NOP
-----------
30
15
DESCRIPCIÓN DE LAS INSTRUCCIONES
RETFIE
[RETFIE]
25
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 uno el bit GIE del registro INTCON, con el fin de autorizar
de nuevo que se tengan en cuenta las interrupciones.
Ejemplo:
RETFIE
Después de la instrucción:
PC = TOS
Bit GIE = 1
31
DESCRIPCIÓN DE LAS INSTRUCCIONES
RETLW
[RETLW k]
26
Se mueve el valor del literal k al W, después se carga en el PC el valor que se encuentra en la parte alta de
la pila, efectuando así un retorno de subrutina.

Ejemplo:
TAB
CALL TAB ; En W está el valor de offset de la tabla.
----------------ADDWF PC ; Se carga en PC el valor de offset, inicio
; de la tabla.
RETLW
k1 ; Primer valor de la tabla (offset + 1).
RETLW
k2 ; Siguiente valor (offset + 2).
RETLW
k3 ; (offset + 3).
--------------RETLW
kn ; Último valor de la tabla (offset + n).
Antes de la instrucción:
W = 0x06 (valor de offset)
Después de la instrucción:
W = valor de la tabla correspondiente a k7
32
16
DESCRIPCIÓN DE LAS INSTRUCCIONES
RETURN
[RETURN]
27
Carga el PC con el valor que se encuentra en la parte
alta de la pila, asegurando así la vuelta de la subrutina.
Ejemplo:
RETURN
Después de la instrucción:
PC = TOS
33
DESCRIPCIÓN DE LAS INSTRUCCIONES
RLF
[RLF f,d]
28
Rotación de un bit hacia la izquierda del contenido del registro “f”, pasando por el bit de
acarreo C, y almacena el resultado en W si d = 0 y en “f” si d=1
C
B7
B6
Registro “f”
B5 B4 B3
B2
B1
B0
Ejemplo:
RLF
TEMP,0
Antes de la instrucción:
W = 0x2F = b’0011 1111’
TEMP = 0xC5 = b’1100 0101’
C=0
Después de la instrucción:
W = 0x8A = b’ 1000 1010’
TEMP = 0xC5 = b’ 1100 0101’
C=1
34
17
DESCRIPCIÓN DE LAS INSTRUCCIONES
RRF
[RRF f,d]
29
Rotación de un bit hacia la derecha del contenido del registro “f”, pasando por el
bit de acarreo C, y almacena el resultado en W so d = 0 y en el registro “f” si d =
1.
Registro “f”
C
B7
B6
B5
B4
B3
B2
B1
B0
Ejemplo:
RRF
TEMP,0
Antes de la instrucción:
W = 0x2F = b’0011 1111’
TEMP = 0xC5 = b’1100 0101’
C=0
Después de la instrucción:
W = 0x62 = b’0110 0010’
TEMP = 0xC5 = b’ 1100 0101’
C=1
35
DESCRIPCIÓN DE LAS INSTRUCCIONES
SLEEP
[SLEEP]
30
Pone en modo SLEEP (bajo consumo) al microcontrolador.
En este modo el oscilador principal deja de funcionar.
Pone a uno el bit TO (Timer Out) y a cero el bit PD (Power Down).
Ejemplo:
----------SLEEP
-----------------------
36
18
DESCRIPCIÓN DE LAS INSTRUCCIONES
SUBLW
[SUBLW k]
31
Resta, por el método de complemento a dos, al literal k el contenido de W ( k –
W), y almacena el resultado en W. El bit Z se pone a uno si el resultado de la
operación es cero. El DC se pone a uno si se produce un acarreo del 3er bit al
grupo de los cuatro bits de mayor peso. El bit C se pone a uno si se produce
acarreo en el bit de mayor peso.

Ejemplo 1:
SUBLW 0x07
Antes de la instrucción:
W = 0x02 = D’2’
Después de la instrucción:
W = 0x05 = D’5’
C = 1 ; El resultado es positivo.
Z = 0 ; El resultado no es cero
37
DESCRIPCIÓN DE LAS INSTRUCCIONES

Ejemplo 2:
SUBLW 0x02
Antes de la instrucción:
W = 0x02 = D’2’
Después de la instrucción:
W = 0x00 = D’0’
C = 1 ; El resultado es positivo.
Z = 1 ; El resultado es cero.

Ejemplo 3:
SUBLW 0x02
Antes de la instrucción:
W = 0x03 = D’3’
Después de la instrucción:
W = 0xFF = D’255’
C = 0 ; El resultado es negativo.
Z = 0 ; El resultado no es cero
38
19
DESCRIPCIÓN DE LAS INSTRUCCIONES
SUBWF
[SUBWF f,d]
32
Resta, por el método de complemento a dos, el contenido del registro “f” con el
contenido del registro W, y almacena el resultado en W si d = 0 y en “f” si d = 1.
El bit Z se pone a uno si el resultado de la operación es cero. El DC se pone a
uno si se produce acarreo del 3er bit al grupo de los cuatro bits de mayor peso. El
bit C se pone a uno si se produce un acarreo del bit de mayor peso.

Ejemplo 1:
SUBWF
VALOR,1
Antes de la instrucción:
W = 0x02 = D’2’
VALOR = 0x07 = D’7’
Después de la instrucción:
W = 0x02 = D’2’
VALOR = 0x05 = D’5’
C = 1 ; Resultado positivo
Z = 0 ; Resultado no es cero
39
DESCRIPCIÓN DE LAS INSTRUCCIONES

Ejemplo 2:
SUBWF VALOR,1
Antes de la instrucción:
W = 0x02 = D’2’
VALOR = 0x02 = D’2’
Después de la instrucción:
W = 0x02 = D’2’
VALOR = 0x00 = D’0’
C = 1 ; Resultado positivo.
Z = 1 ; Resultado es cero.

Ejemplo 3:
SUBWF
VALOR,1
Antes de la instrucción:
W = 0x02 = D’2’
VALOR = 0x01 = D’1’
Después de la instrucción:
W = 0x02 = D’2’
VALOR = 0xFF = D’255’
C = 0 ; El resultado es negativo.
Z = 0 ; El resultado no es cero.
40
20
DESCRIPCIÓN DE LAS INSTRUCCIONES
SWAPF
[SWAPF f,d]
33
Intercambio de los cuatro bits de mayor peso por los cuatro bits de
menor peso del mismo registro. El registro destino será W si d = 0 i será
“f” si d=1.
Ejemplo:
SWAPF
REG,0
Antes de la instrucción:
REG = 0x69 = b’0110 1001’
Después de la instrucción:
W = 0x96 = b’1001 0110’
REG = 0x69 = b’0110 1001’
41
DESCRIPCIÓN DE LAS INSTRUCCIONES
XORLW
[XORLW
k]
34
Realiza la operación lógica OR – EXCLUSIVA bit a bit, entre el contenido del
registro W y el literal k, y almacena el resultado en W.
El bit Z se pone a uno si el resultado es cero.
Ejemplo:
XORLW
0x84
Antes de la instrucción:
W = 0xBC = b’1011 1100’
L = 0x84 = b’1000 0100’
Después de la instrucción:
W = 0x38 = b’0011 1000’
42
21
DESCRIPCIÓN DE LAS INSTRUCCIONES
XORWF
[XORWF f,d]
35
Realiza la operación lógica OR – EXCLUSIVA bit a bit entre el contenido
del registro W y el contenido del registro “f”, y almacena el resultado en
W si d=0, o en el registro “f” si d = 1.
El bit Z se pone a uno si el resultado de la operación es cero.
Ejemplo:
XORWF
REG,1
Antes de la instrucción:
W = 0xB5 = b’1011 0101’
REG = 0xAF = b’1010 1111’
Después de la instrucción:
W = 0xB5 = b’1011 0101’
REG = 0x1A = b’0001 1010’
43
22
Descargar