Vous êtes sur la page 1sur 44

UNIVERSIDAD DE ORIENTE

NÚCLEO DE ANZOÁTEGUI
ESCUELA DE INGENIERÍA Y CIENCIAS APLICADAS
DEPARTAMENTO DE ELECTRICIDAD
SISTEMAS DE MICROPROCESADORES I

INSTRUCCIONES DE LOS MICROCONTROLADORES


“PIC”, “GAMA MEDIA”.

Prof. Héctor León


INSTRUCCIONES ARITMÉTICAS

ADDLW ADD Literal to W


Sintaxis ADDLW k
Codificación 11 111x kkkk kkkk
Palabras, Ciclos 1, 1
Operación (W) + k (W)
Banderas
C, DC, Z
Afectadas

Suma el contenido de W al literal ‘k’ y almacena el


Descripción
resultado en W.

Ejemplo: addlw 0x15


Antes instrucción: (W) = 0x10 y C = ¿?
Después instrucción: (W) = 0x10 + 0x15 = 0x25 y C = 0
INSTRUCCIONES ARITMÉTICAS

ADDWF ADD W and F


Sintaxis ADDWF f,d
Codificación 00 0111 dfff ffff
Palabras, Ciclos 1, 1
(W) + f (f) si d = 1
Operación
(W) + f (W) si d = 0
Banderas Afectadas C, DC, Z

Suma el contenido de W al contenido del registro f y


Descripción
almacena el resultado en W si d = 0, y en el registro f si d = 1.

Ejemplo: addwf Registro,0


Antes instrucción: (W) = 0x17, (Registro) = 0xC2, y C = ¿?
Después instrucción: (W) = 0xD9, (Registro) = 0xC2, y C = 0
INSTRUCCIONES ARITMÉTICAS

DECF Decrement F
Sintaxis DECF f,d
Codificación 00 0011 dfff ffff
Palabras, Ciclos 1, 1
(f) - 1 (f) si d = 1
Operación
(f) - 1 (W) si d = 0
Banderas Afectadas Z
Decrementa el contenido de F en una unidad y almacena
Descripción el resultado en el registro f si d = 1, en W si d = 0, en
este caso el resultado de ‘f’ no varía.

Ejemplo: decf Contador,1


Antes instrucción: (Contador) = 0x01 y Z = ¿?
Después instrucción: (Contador) = 0x00 y Z = 1
INSTRUCCIONES ARITMÉTICAS

INCF Increment F
Sintaxis INCF f,d
Codificación 00 1010 dfff ffff
Palabras, Ciclos 1, 1
(f) + 1 (f) si d = 1
Operación
(f) + 1 (W) si d = 0
Banderas Afectadas Z
Incrementa el contenido de F en una unidad y almacena
Descripción el resultado en el registro f si d = 1, en W si d = 0, en
este caso el resultado de ‘f’ no varía.

Ejemplo: incf Contador,1


Antes instrucción: (Contador) = 0xFF y Z = ¿?
Después instrucción: (Contador) = 0x00 y Z = 1
INSTRUCCIONES ARITMÉTICAS

SUBLW Substract W form Literal


Sintaxis SUBLW k
Codificación 11 110x kkkk kkkk
Palabras, Ciclos 1, 1
Operación k – (W) (W)
Banderas
C, DC, Z
Afectadas
Sustrae el contenido de W del literal k, y
Descripción almacena el resultado en W. La sustracción se
realiza en complemento a dos.
Ejemplo: sublw 0x03
Antes instrucción: (W) = 0x01, C = ¿? Y Z = ¿?
(W) = 0x03 - 0x01 = 0x02, C = 1 (el
Después instrucción: resultado es positivo) y Z = 0.

Ejemplo: sublw 0x02


Antes instrucción: (W) = 0x02, C = ¿? Y Z = ¿?
(W) = 0x02 - 0x02 = 0x00, C = 1 y Z =
Después instrucción: 1 (el resultado es cero).

Ejemplo: sublw 0x02


Antes instrucción: (W) = 0x03, C = ¿? Y Z = ¿?
(W) = 0x02 - 0x03 = 0xFF, C = 0 (el
Después instrucción: resultado es negativo) y Z = 0.
INSTRUCCIONES ARITMÉTICAS

SUBWF Substract W from F


Sintaxis ADDWF f,d
Codificación 00 0010 dfff ffff
Palabras, Ciclos 1, 1
(f) – (W) (f) si d = 1
Operación
(f) – (W) (W) si d = 0
Banderas Afectadas C, DC, Z
Sustrae el contenido de W del contenido de f, y
Descripción almacena el resultado en W si d=0 y en f si d=1. La
sustracción se realiza en complemento a dos.
Ejemplo: subwf Reg1,1
Antes instrucción: (Reg1) = 0x03, (W) = 0x02, C = ¿? Y Z = ¿?
Después instrucción: (Reg1) = 0x01, (W) = 0x02, C = 1 (positivo) y Z = 0.

Ejemplo: subwf Reg1,1


Antes instrucción: (Reg1) = 0x02, (W) = 0x02, C = ¿? Y Z = ¿?
Después instrucción: (Reg1) = 0x00, (W) = 0x02, C = 1 y Z = 1 (resultado cero).

Ejemplo: subwf Reg1,1


Antes instrucción: (Reg1) = 0x01, (W) = 0x02, C = ¿? Y Z = ¿?
Después instrucción: (Reg1) = 0xFF, (W) = 0x02, C = 0 (negativo) y Z = 0.
INSTRUCCIONES DE CARGA

CLRF Clear f
Sintaxis CLRF f
Codificación 00 0001 1fff ffff
Palabras, Ciclos 1, 1
Operación 00h (f)
Banderas
Z
Afectadas

Descripción Pone el contenido de f a cero y activa el bit Z.

Ejemplo: clrf Contador


Antes instrucción: (Contador) = ¿? y Z = ¿?
Después instrucción: (Contador) = 0x00 y Z = 1
INSTRUCCIONES DE CARGA

CLRW Clear W
Sintaxis CLRW
Codificación 00 0001 1fff ffff
Palabras, Ciclos 1, 1
Operación 00h (W)
Banderas
Z
Afectadas
Pone el contenido de W a cero y activa el bit
Descripción
Z.

Ejemplo: clrfw
Antes instrucción: (W) = ¿? y Z = ¿?
Después instrucción: (W) = 0x00 y Z = 1
INSTRUCCIONES DE CARGA

MOVF Move f
Sintaxis MOVF f,d
Codificación 00 1000 dfff ffff
Palabras, Ciclos 1, 1
(f) (f) si d = 1
Operación
(f) (W) si d = 0
Banderas
Z
Afectadas
Pone el contenido de f en f si d=1 o f en W si
d=0. Esta instrucción permite comprobar el
Descripción
contenido de f con respecto a cero ya que esta
instrucción actúa sobre el flag Z.

Ejemplo: movf PORTA,0


Antes instrucción: (PORTA) = 0x1A, (W) = ¿? y Z = ¿?
Después instrucción: (PORTA) = 0x1A, (W) = 0x1A y Z = 0
INSTRUCCIONES DE CARGA

MOVLW Move Literal to W


Sintaxis MOVLW
Codificación 11 00xx kkkk kkkk
Palabras, Ciclos 1, 1
Operación k (W)
Banderas
-
Afectadas

El registro W se carga con el valor de 8 bits del


Descripción
literal ‘k’.

Ejemplo: movlw 0x5A


Antes instrucción: (W) = ¿?
Después instrucción: (W) = 0x5A
INSTRUCCIONES DE CARGA

MOVWF Move W to f
Sintaxis MOVWF f
Codificación 00 0000 1fff ffff
Palabras, Ciclos 1, 1
Operación (W) (f)
Banderas
-
Afectadas

Descripción Mueve el contenido de W al registro ‘f’.

Ejemplo: movwf PORTB


Antes instrucción: (W) = 0x4F, (PORTB) = ¿?
Después instrucción: (W) = 0x4F, (PORTB) = 0x4F
INSTRUCCIONES DE BIT

BCF Bit Clear f


Sintaxis BCF f,b
Codificación 01 00bb bfff ffff
Palabras, Ciclos 1, 1
Operación 0 (f <b>)
Banderas
-
Afectadas

Descripción Pone a cero el bit número ‘b’ del registro ‘f’.

Ejemplo: bcf STATUS,0


Antes instrucción: (STATUS) = b’11000101’
Después instrucción: (STATUS) = b’11000100’
INSTRUCCIONES DE BIT

BSF Bit Set f


Sintaxis BSF f,b
Codificación 01 01bb bfff ffff
Palabras, Ciclos 1, 1
Operación 1 (f <b>)
Banderas
-
Afectadas

Descripción Pone a uno el bit número ‘b’ del registro ‘f’.

Ejemplo: bsf INTCON,7


Antes instrucción: (INTCON) = b’00000000’
Después instrucción: (INTCON) = b’10000000’
INSTRUCCIONES LÓGICAS

ANDLW AND Literal with W


Sintaxis ANDLW k
Codificación 11 1001 kkkk kkkk
Palabras, Ciclos 1, 1
Operación (W) & k (W)
Banderas
Z
Afectadas

Efectúa un AND lógico entre el contenido de W y el


Descripción
literal ‘k’, el resultado se almacena en W.

Ejemplo: andlw b’01011111’


Antes instrucción: (W) = b’10100011 y Z = ¿?
Después instrucción: (W) = b’ 00000011 y Z = 0
INSTRUCCIONES LÓGICAS

ANDWF AND W with f


Sintaxis ANDWF f,d
Codificación 00 0101 dfff ffff
Palabras, Ciclos 1, 1
(W) & f (W) si d = 0
Operación
(W) & f (f) si d = 1
Banderas
Z
Afectadas

Efectúa un AND lógico entre el contenido de W y el


Descripción
contenido del registro ‘f’.

Ejemplo: andwf Registro,1


Antes instrucción: (W) = b’00100011, (Registro) = b’11000010’ y Z = ¿?
Después instrucción: (W) = b’00100011, (Registro) = b’00000010’ y Z = 0
INSTRUCCIONES LÓGICAS

COMF Complement f
Sintaxis COMF f,d
Codificación 00 1001 dfff ffff
Palabras, Ciclos 1, 1
~(f) (f) si d = 1
Operación
~(f) (W) si d = 0
Banderas Afectadas Z
Complementa el contenido de ‘f’ bit a bit y almacena el
Descripción resultado en el registro f si d = 1, en W si d = 0, en este
caso el resultado de ‘f’ no varía.

Ejemplo: comf Reg1,0


Antes instrucción: (W) = ¿?, (Reg1) = b’ 00010011’ y Z = ¿?
Después instrucción: (W) = b’11101100, (Reg1) = b’ 00010011’ y Z = 0
INSTRUCCIONES LÓGICAS

IORLW OR Literal with W


Sintaxis IORLW k
Codificación 11 1000 kkkk kkkk
Palabras, Ciclos 1, 1
Operación (W) & k (W)
Banderas
Z
Afectadas

Efectúa un OR lógico entre el contenido de W y el


Descripción
literal ‘k’, el resultado se almacena en W.

Ejemplo: iorlw b’00110101’


Antes instrucción: (W) = b’10011010’ y Z = ¿?
Después instrucción: (W) = b’ 10111111 y Z = 0
INSTRUCCIONES LÓGICAS

IORWF OR W with f
Sintaxis IORWF f,d
Codificación 00 0100 dfff ffff
Palabras, Ciclos 1, 1
(W) | f (W) si d = 0
Operación
(W) | f (f) si d = 1
Banderas
Z
Afectadas

Efectúa un OR lógico entre el contenido de W y el


Descripción
contenido del registro ‘f’.

Ejemplo: iorwf Registro,0


Antes instrucción: (W) = b’00100011, (Registro) = b’11000010’ y Z = ¿?
Después instrucción: (W) = b’11100011, (Registro) = b’11000010’ y Z = 0
INSTRUCCIONES LÓGICAS

RLF Rotate Left f through Carry


Sintaxis RLF f,d
Codificación 00 1101 dfff ffff
Palabras, Ciclos 1, 1

Operación

Banderas Afectadas C

Rotación de un bit a la izquierda del contenido del


registro ‘f’ pasando por el bit de acarreo C. Si d=1 el
Descripción
resultado se almacena en ‘f’, si d=0 el resultado se
almacena en W.

Ejemplo: rlf Registro,0


Antes instrucción: (W) = ¿? (Registro) = b’11000010’ y C = 0
Después instrucción: (W) = b’10000100’, (Registro) = b’11000010’ y C = 1
INSTRUCCIONES LÓGICAS

RRF Rotate Right f through Carry


Sintaxis RRF f,d
Codificación 00 1100 dfff ffff
Palabras, Ciclos 1, 1

Operación

Banderas Afectadas C

Rotación de un bit a la derecha del contenido del


registro ‘f’ pasando por el bit de acarreo C. Si d=1 el
Descripción
resultado se almacena en ‘f’, si d=0 el resultado se
almacena en W.

Ejemplo: rrf Registro,0


Antes instrucción: (W) = ¿? (Registro) = b’11000010’ y C = 0
Después instrucción: (W) = b’01100001’, (Registro) = b’11000010’ y C = 1
INSTRUCCIONES LÓGICAS
SWAPF Swap Nibbles in f
Sintaxis SWAPF f,d
Codificación 00 1110 dfff ffff
Palabras, Ciclos 1, 1
(f<3:0>) (d<7:4>)
Operación
(f<7:4>) (d<3:0>)
Banderas
-
Afectadas

Intercambia los cuatro bit de mayor peso por los cuatro de menor
Descripción
peso de f, y almacena el resultado en W si d=0, y en f si d=1

Ejemplo: swapf Registro,0


Antes instrucción: (W) =¿?, (Registro) = 0xA5
Después instrucción: (W) = 0x5A, (Registro) = 0xA5
INSTRUCCIONES LÓGICAS

XORLW Exclusive OR Literal with W


Sintaxis XORLW k
Codificación 11 1010 kkkk kkkk
Palabras, Ciclos 1, 1
Operación (W) ^ k (W)
Banderas
Z
Afectadas

Efectúa un OR lógico exclusivo entre el contenido


Descripción
de W y el literal ‘k’, el resultado se almacena en W.

Ejemplo: xorlw b’10101111’


Antes instrucción: (W) = b’ 10110101’ y Z = ¿?
Después instrucción: (W) = b’ 00011010’ y Z = 0
INSTRUCCIONES LÓGICAS

XORWF Exclusive OR W with f


Sintaxis IORWF f,d
Codificación 11 0110 dfff ffff
Palabras, Ciclos 1, 1
(W) ^ f (W) si d = 0
Operación
(W) ^ f (f) si d = 1
Banderas
Z
Afectadas

Efectúa un OR lógico exclusivo entre el contenido


Descripción
de W y el contenido del registro ‘f’.

Ejemplo: xorwf Registro,1


Antes instrucción: (W) = b’10110101’, (Registro) = b’ 10101111’ y Z = ¿?
Después instrucción: (W) = b’10110101’, (Registro) = b’00011010’ y Z = 0
INSTRUCCIONES DE SALTO

BTFSC Bit Test f, Skip if Clear


Sintaxis BTFSC f,b
Codificación 01 10bb bfff ffff
Palabras, Ciclos 1, 1 o 2
Operación Salta si (f <b>) = 0

Banderas Afectadas -

Si el bit numero b de f es nulo, la instrucción que sigue a


esta se ignora y se trata como un “NOP”. En este caso, y
Descripción sólo en este caso, la instrucción BTFSC precisa dos ciclos
para ejecutarse.
Ejemplo:

Aquí btfsc STATUS,0 ;Si el bit o de STATUS es cero salta.


Falso goto ProcesoX ;Ha sido uno.
Verdad …. ;Ha sido cero.

Antes instrucción: (PC) = Dirección de “Aquí”.


Después instrucción: Si el bit STATUS<0> = 0 (PC) = Dirección de “Verdad”.
Si el bit STATUS<0> = 1 (PC) = Dirección de “Falso”.
INSTRUCCIONES DE SALTO

BTFSS Bit Test f, Skip if Set


Sintaxis BTFSS f,b
Codificación 01 11bb bfff ffff
Palabras, Ciclos 1, 1 o 2
Operación Salta si (f <b>) = 1

Banderas Afectadas -

Si el bit numero b de f está en uno, la instrucción que sigue


a esta se ignora y se trata como un “NOP”. En este caso, y
Descripción sólo en este caso, la instrucción BTFSC precisa dos ciclos
para ejecutarse.
Ejemplo:

Aquí btfss STATUS,0 ;Si el bit o de STATUS es cero salta.


Falso goto ProcesoX ;Ha sido cero.
Verdad …. ;Ha sido uno.

Antes instrucción: (PC) = Dirección de “Aquí”.


Después instrucción: Si el bit STATUS<0> = 0 (PC) = Dirección de “Falso”.
Si el bit STATUS<0> = 1 (PC) = Dirección de “Verdad”.
INSTRUCCIONES DE SALTO

DECFSZ Decrement F, Skip if 0


Sintaxis DECFSZ f,d
Codificación 00 1011 dfff ffff
Palabras, Ciclos 1, 1 o 2
(f) - 1 (f) si d = 1; salta si el resultado es “0”.
Operación
(f) - 1 (W) si d = 0; salta si el resultado es “0”.
Banderas
-
Afectadas
Decrementa el contenido de F en una unidad, el resultado se almacena
en el registro f si d = 1, en W si d = 0, en este caso, ‘f’ no varía. Si el
Descripción
resultado del decremento es cero se ignora la siguiente instrucción y
en ese caso la instrucción tiene una duración de dos ciclos.
Ejemplo:

Aquí decfsz Contador,1


goto NoEsCero
EsCero ….

Antes instrucción: (PC) = Dirección de “Aquí”.


Después instrucción: (Contador) = (Contador) – 1 y además:
Si (Contador) = 0, (PC) = Dirección de “EsCero”.
Si (Contador) ≠ 0, (PC) = Dirección de “Aquí” + 1.
INSTRUCCIONES DE SALTO

INCFSZ Increment F, Skip if 0


Sintaxis INCFSZ f,d
Codificación 00 1111 dfff ffff
Palabras, Ciclos 1, 1 o 2
(f) + 1 (f) si d = 1; salta si el resultado es “0”.
Operación
(f) + 1 (W) si d = 0; salta si el resultado es “0”.
Banderas
-
Afectadas
Incrementa el contenido de F en una unidad, el resultado se almacena
en el registro f si d = 1, en W si d = 0, en este caso, ‘f’ no varía. Si el
Descripción
resultado del incremento es cero se ignora la siguiente instrucción y en
ese caso la instrucción tiene una duración de dos ciclos.
Ejemplo:

Aquí incfsz Contador,1


goto Bucle
Continua ….
….

Antes instrucción: (PC) = Dirección de “Aquí”.


Después instrucción: (Contador) = (Contador) + 1 y además:
Si (Contador) = 0 (256), (PC) = Dirección de
“Continua”.
Si (Contador) ≠ 0, (PC) = Dirección de “Aquí” +
1.
INSTRUCCIONES DE SALTO

GOTO Unconditional Branch


Sintaxis GOTO k
Codificación 10 1kkk kkkk kkkk
Palabras, Ciclos 1, 2
k (PC<10:0>)
Operación
(PCLATH<4:3>) (PC<12:11>)
Banderas Afectadas -
Salto incondicional. Carga bits o al 10 de la constante ‘k’ en el
Descripción (PC) y los bits 3 y 4 del registro PCLATH en los 11 y 12 del
PC. Esta instrucción se ejecuta en dos ciclos máquina.

Ejemplo: goto Principal ; Principal (PC)


Antes instrucción: (PC) = ¿?
Después instrucción: (PC) = Dirección apuntada por la etiqueta “Principal”.
INSTRUCCIONES DE MANEJO DE SUBRUTINAS
CALL Call Subroutine
Sintaxis CALL k
Codificación 10 0kkk kkkk kkkk
Palabras, Ciclos 1, 2
(PC) + 1 TOS
Operación k (PC<10:0>)
(PCLATH<4:3>) (PC<12:11>)
Banderas Afectadas -
Salvaguarda la dirección de vuelta en la Pila y después llama
Descripción a la subrutina situada en la dirección cargada en el PC. Esta
instrucción se ejecuta en dos ciclos máquina.

Ejemplo: Aquí call Alli


Antes instrucción: (PC) = Dirección de “Aquí”.
(PC) = Dirección de “Alli”.
Después instrucción: (TOS) = Dirección de “Aquí” + 1.
INSTRUCCIONES DE MANEJO DE SUBRUTINAS
RETFIE Return from Interrupt
Sintaxis RETFIE
Codificación 00 0000 0000 1001
Palabras, Ciclos 1, 2
TOS (PC)
Operación
1 GIE
Banderas Afectadas -

Carga el PC con el valor que se encuentra en la parte alta


(superior) de la pila, asegurando así la vuelta de la
Descripción interrupción. Pone a 1 el bit GIE con el fin de autorizar de
nuevo que se tenga en cuenta las interrupciones. Esta
instrucción se ejecuta en dos ciclos máquina.

Ejemplo: retfie ; Retorna de la interrupción.


Antes instrucción: (PC) = ¿? y GIE = 0
Después instrucción: (PC) = (TOS) y GIE = 1
INSTRUCCIONES DE MANEJO DE SUBRUTINAS
RETLW Return with Literal in W
Sintaxis RETLW k
Codificación 11 01xx kkkk kkkk
Palabras, Ciclos 1, 2
Operación TOS (PC)

Banderas Afectadas -

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,
Descripción
efectuando así un retorno de subrutina. Tarda dos ciclos
máquina.
Ejemplo:

call Tabla ; W contiene el valor offset de tabla


… ….

Tabla ; Comienza la tabla


addwf PCL,1 ; (PC) = (PC) + W
retlw k0
retlw k1
retlw k2
.
.
retlw kn ; Fin de tabla

Antes instrucción: (W) = 0x02


Después instrucción: (W) = Toma el valor de k2
INSTRUCCIONES DE MANEJO DE SUBRUTINAS

RETURN Return from Subroutine


Sintaxis RETURN
Codificación 00 0000 0000 1000
Palabras, Ciclos 1, 2
Operación TOS (PC)

Banderas Afectadas -
Carga el PC con el valor que se encuentra en la parte superior
Descripción de la pila, efectuando así un retorno de subrutina. Tarda dos
ciclos máquina.

Ejemplo: return ; Retorna de la subrutina.


Antes instrucción: (PC) = ¿?
Después instrucción: (PC) = (TOS)
INSTRUCCIONES ESPECIALES

CLRWDT Clear Watchdog Timer


Sintaxis CLRWDT
Codificación 00 0000 0110 0100
Palabras, Ciclos 1, 1
00h (WDT)
0 WDT prescaler
Operación T0
1
1 PD
Banderas T0, PD
Afectadas

Pone a cero el registro contador del


Descripción
temporizador watchdog, asi como el predivisor

Ejemplo: clrwdt
Antes instrucción: (WDT) = ¿?
Después instrucción: (WDT) = 0x00, T0 = 1 y PD = 1
INSTRUCCIONES ESPECIALES

NOP No Operation
Sintaxis NOP
Codificación 00 0000 0xx0 0000
Palabras, Ciclos 1, 1
Operación NO OPERAR
Banderas
-
Afectadas

No realiza operación alguna. Consume un


Descripción
ciclo de instrucción sin hacer nada.

Ejemplo: nop
INSTRUCCIONES ESPECIALES

SLEEP
Sintaxis SLEEP
Codificación 00 0000 0110 0011
Palabras, Ciclos 1, 1
00h (WDT)
0 WDT prescaler
Operación T0
1
0 PD
Banderas T0, PD
Afectadas

Pone el circuito en modo Sleep (bajo


Descripción
consumo) con parada del oscilador y Timer 0.

Ejemplo: sleep ; Pasa a “standby” o modo de bajo consumo.


Para salir del estado sleep debe ocurrir uno de los siguientes
acontecimientos:

• Activación del pin /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.

Vous aimerez peut-être aussi