Está en la página 1de 15

Universidad Autónoma del Estado de México

Centro Universitario UAEM Ecatepec


Ingeniería en computación
Sistemas digitales

Actividad 3.1. Análisis del set de instrucciones del PIC16F84

Alumno: Vega Camacho Roberto Carlos

Objetivo: Las y los alumnos analizarán el set de instrucciones del PIC16F84 para posteriormente
utilizarlo en la realización de programas en lenguaje ensamblador.

Desarrollo:

1. Organizar ocho equipos de trabajo.


2. Cada equipo debe de analizar las instrucciones que les fueron asignadas, entender lo que hace
cada instrucción, explicar el funcionamiento y mostrar un ejemplo en base a su experiencia
como programadores.

Tabla 1. Instrucciones para analizar por equipo

Equipo 1 ADDWF; ANDWF; CLRF; CLRW; COMF.


Equipo 2 DECF; DECFSZ; INCF; INCFSZ
Equipo 3 IORWF; MOVF; MOVWF; NOP
Equipo 4 RLF; RRF; SUBWF; SWAPF; XORWF
Equipo 5 BCF; BSF; BTFSC; BTFSS
Equipo 6 ADDLW; ANDLW; CALL; CLRWDT; GOTO
Equipo 7 IORLW; MOVLW; RETFIE; RETLW
Equipo 8 RETURN; SLEEP; SUBLW; XORLW

Sintaxis ADDLW k

Descripción
Agrega el valor de la variable k al valor de W
simplificada:

Número de
Se realiza en 1 ciclo
ciclos:
ADDLW 0x15

Before Instruction
Ejemplo:
W = 0x10 After
Instruction
W = 0x25
Sintaxis ANDWF f,d

Es una operación lógica, que tiene una operación AND entre el registro f y w, s
Descripción
el valor contenido en d es igual con 0, entonces se guarda el resultado en W,
simplificada:
sino se guarda en f.
Número de Se realiza en 1 ciclo
ciclos:
ANDWF FSR, 1

Before Instruction
Ejemplo:
W = 0x17 FSR = 0xC2
After Instruction
W = 0x17 FSR = 0x02

Sintaxis CLRF

Descripción
El contenido del registro “f” se pone en ceros: 0x00
simplificada:

Número de
1
ciclos:

Ejemplo: CLRF portb ; el registro portb se pone en 0x00

Sintaxis CLRW

Descripción
Borra el registro W, se carga con 00h y el flag de Z se activa.
simplificada:

Número de
1
ciclos:

Ejemplo: CLRW antes de la instrucción: W=0x5A W= 0x00 Z = 1

Sintaxis COMF f,d


Instrucción Lógica, con operandos d y f, con estado o bandera afectada Z, el
Descripción
contenido del registro f es complementado, SI “d” es 0, el resultado es
simplificada:
almacenado en “W”. SI “d” es 1, el resultado es almacenado de regreso en “f”
Número de
1
ciclos:
COMF REG1, 0
Antes de la instrucción
REG1= 0x13
Ejemplo:
Después de la instrucción
REG1= 0x13
W = 0xEC

Sintaxis DECF

Decrementa el valor del registro F.


Descripción
D = 0 -> W
simplificada:
Si D = 1 -> F
Número de
1
ciclos:

DECF 2,0->W = 1
Ejemplo: DECF 2,1 -> F = 1

Sintaxis DECFSZ F,D

Descripción Si el resultado del decremento es mayor a 1, se almacena el resultado en W si D es 0 o en F si D es


1.Si el resultado del decremento es 1, ejecuta la siguiente instrucción y si el resultado es 0 no ejecuta
simplificada: nada.

Número de
1(2)
ciclos:

Ejemplo: DECFSZ 3,0 -> W = 2DECFSZ 3,1 -> F =2


Sintaxis INCFF,D

Descripción Incrementa el valor de F

simplificada:

Número de 1
ciclos:

Ejemplo: INCF 1,0 -> W = 2


INCF 1,1 -> F = 2
Ó Antes de la instrucción
INCF CNT,1
CNT = 0Xff
Z=0
Despues de la instrucción
CNT = 0x00
Z=1
Sintaxis INCFSZ

Descripción Si el resultado del incremento del registro Fes 1, se almacena el resultado en W si D es 0 o en F si D


es 1.Si el resultado delincrementoes 1, ejecuta la siguiente instrucción y si el resultado es 0 no
simplificada: ejecuta nada.

Número de 1(2)
ciclos:

Ejemplo: INCFSZ 3,0 -> W = 4


INCFSZ 3,1 -> F = 4
Ó Antes de la instrucción
PC = Address here
Despues de la instrucción
CNT = CNT + 1
IfCNT = 0
PC = Address continue
ifCNT !0
PC = Address here +1

Sintaxis IORWF

Descripción ORWF f,d


simplificada: operación OR lógica, destino = W f
ORWF k OR el acumulador y el numero k. Resultado en el acumulador.
Número de
ciclos:
Ejemplo:

Sintaxis MOVF

Descripción MOVF f,d


simplificada: movimiento de datos, destino = W f
Mueve una copia del registro f al destino d.
El destino puede ser:
Si d=0 el destino es el acumulador.
Mueve una copia del registro f al Acumulador W
Si d=1 el destino es el registro f. En este caso el formato es un poco
confuso. Mueve del registro f al registro f. No pasa nada. El dato se queda en el
mismo lugar. No hay porque preocuparse el formato de la instrucción es así.
Como veremos más adelante, en otras instrucciones, el formato de destino d=1
es mas claro. Se puede decir que en general con esta instrucción d=1 no se
utiliza. Siga adelante, entenderá mejor en un momento.

Número de
ciclos:

Ejemplo: W equ 0
f equ 1
Contador equ 10
MOVF Contador,W ; mueve una copia del contenido del ; Contador al
acumulador
Sintaxis MOVWF

Descripción MOVWF (MOVe W a F) no afecta ningún bit de la palabra de estado.


simplificada: Mueve una copia del acumulador W al registro f.

Número de
ciclos:

Ejemplo: Portb equ 0x6


Contador equ 10
MOVLW 0x25 ; carga el acumulador con 0x25
MOVWF portb ; el registro portb contiene 0x25
MOVWF Contador ; el registro Contador contiene 0x25
Sintaxis NOP

Descripción Esta instrucción no hace nada durante un ciclo. Se puede ocupar para realizar
simplificada: retardos.

Número de
ciclos:
Ejemplo:

Sintaxis RRF

Descripción Rota el contenido del registro f una posición a la izquierda. El bit se rota a través
simplificada: de la bandera “carry” . La bandera carry esta en el bit 0 del registro STATUS, que
se localiza en la posición 0x03 de la memoria del microcontrolador. Cada vez
que se ejecuta la instrucción los bits se rotan una posición a la izquierda, el bit
menos significativo es ocupado por el contenido de la bandera carry y el bit más
significativo pasa a ocupar el lugar de la bandera carry.
_________________________________-
Los contenidos del registro “f”, son rotados un bit a la derecha a través de la
bandera de acarreo, si “d” es 0, el resultado es colocado en el registro W. Si “d”
es 1, el resultado es colocado de nuevo en el registro “f”.
Número de 1
ciclos:

Ejemplo: W equ 0
f equ 1
STATUS equ 0x03
C equ 0
Contador equ 10
BCF STATUS,0 ; carry a 0
MOVLW b’11111111’
MOVWF Contador ; Contador b’11111111’
RRF Contador,f ; Contador b’11111110’
rlf   Reg1,W
        Antes de instrucción:
                 (Reg1)= b’1110 0110’
                 (W) = ¿?
                 C   = 0
        Después de instrucción:
(Reg1)= b’1110 0110’
                 (W) = b’0111 0011’
                 C   = 0

Sintaxis RLF

Descripción Rota el contenido del registro f una posición a la izquierda. El bit se rota a través
simplificada: de la bandera “carry” . La bandera carry esta en el bit 0 del registro STATUS, que
se localiza en la posición 0x03 de la memoria del microcontrolador. Cada vez
que se ejecuta la instrucción los bits se rotan una posición a la izquierda, el bit
menos significativo es ocupado por el contenido de la bandera carry y el bit más
significativo pasa a ocupar el lugar de la bandera carry.
Número de 1
ciclos:

Ejemplo: W equ 0
f equ 1
STATUS equ 0x03
C equ 0
Contador equ 10
BCF STATUS,0 ; carry a 0
MOVLW b’11111111’
MOVWF Contador ; Contador b’11111111’
RLF Contador,f ; Contador b’11111110’
____________________-
rlf   Reg1,W
        Antes de instrucción:
                 (Reg1)= b’1110 0110’
                 (W) = ¿?
                 C   = 0
        Después de instrucción:
                 (Reg1)= b’1110 0110’
                 (W) = b’1100

Sintaxis SUBWF

Descripción Ejecuta la resta f – W


simplificada: Como comentario final a esta breve presentación de las instrucciones básicas de
los microcontroladores PICmicro cabe hacer notar que no basta con conocerlas,
leerlas o memorizarlas, hay que poner manos a la obra y ejercitarse en su uso.
La mejor manera de aprender a usarlas es practicando muchas veces, cometer
errores y aprender de ellos. Así que, a practicar, abra MPLAB y diviértase un
buen rato. Para aprender a programar es necesario conocer las instrucciones,
pero conocer las instrucciones no es saber programar, pero vamos por buen
camino.
Resta, por el método del complemento a 2, el contenido del registro "f" menos
el contenido del registro W. Si "d" es 0, el resultado se almacena en el registro
W. Si "d" es 1, el resultado se almacena en el registro "f". Si el resultado es
negativo, el carry se pone a 0.
Número de 1
ciclos:

Ejemplo: SUBWF   REG1,1


        Antes de instrucción:
                 REG1=3
                 w = 2
                 C   = ?
                 Z   = ?
        Después de instrucción:
                 REG1=1
                 w = 2
                 C   = 1 ; Resultado positivo
                 Z   = 0

Sintaxis SWAPF

Descripción Intercambia el nible más significativo y el nible menos significativo. El resultado


simplificada: de la operación se coloca en el destino d.
Los 4 bits de más peso del registro ´f´ se intercambian con los 4 bits de
menos peso del mismo registro ´f´. Si 'd' = 0, el resultado se almacena en
el registro W. Si 'd' = 1, el resultado se almacena en el
registro registro 'f'.
Número de 1
ciclos:

Ejemplo: W equ 0
F equ 1
Contador equ 10
MOVLW b’11110000’
MOVWF Contador ; Contador b’11110000’
SWAPF Contador ; Contador b’00001111’
_________________________________
swapf   Reg1,W
Antes instrucción:
(Reg1) = 0xA5   y   (W) = ¿?
Después instrucción:
(Reg1) = 0xA5   y   (W) = 0x5A

Sintaxis XORWF

Descripción XOR el contenido del acumulador con el registro f. El resultado de la operación


simplificada: se coloca en el destino d.
*Exclusivo O el contenido de la W registro con el registro 'f'.
*Si 'd' es 0, el resultado se almacena en W
*Si 'd' es 1, el resultado es almacenado de nuevo en el registro 'f'.
La bandera Z se activa a “1” si el resultado de la operación es 0.

Número de 1
ciclos:

Ejemplo: xowrf  Reg,W                   (W) XOR (Reg)→(W)


        Antes de instrucción:
                 (Reg)= b’1010 1111’
                 (W) = b’10110101’
                 Z   = ¿?
        Después de instrucción:
                 (Reg)= b’1010 1111’
                 (W) = b’00011010’’
                 Z   = 0

Sintaxis BCF

Descripción Pone en cero el bit b del file f .


simplificada: Los bits del registro f se numeran de 0 a 7.

Número de 1
ciclos:

Ejemplo: Contador equ 10


MOVLW b’11111111’
MOVWF Contador ; Contador b’11111111’
BCF Contador,0 ; Contador b’11111110’
BCF Contador,7 ; Contador b’01111110’

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

Sintaxis BSF

Descripción Pone en uno el bit b del file f


simplificada:

Número de 1
ciclos:

Ejemplo: Contador equ 10


MOVLW b’00000000’
MOVWF Contador ; Contador b’00000000’
BSF Contador,0 ; Contador b’00000001’
BSF Contador,7 ; Contador b’10000001’
_________________________________
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

Sintaxis BTFSC
Descripción Prueba el bit b del registro f .
simplificada: Salta la siguiente instrucción si bit b es 0.
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.
Número de 1(2)
ciclos:

Ejemplo: Entrada equ 11


Switch equ 0
ChecaElSwitch
BTFSC Entrada, Switch ; Checa que Switch este en 0
GOTO ChecaElSwitch ; El Switch esta en 1, regresa
------- ; El Switch ya esta en 0

_____________________________________-
HERE BTFSC FLAG,1
FALSE GOTO PROCESS_CODE
TRUE.
Si antes de la instrucción.     PC = dirección HERE
Al ejecutarse:
if FLAG<1> = 0,
PC = dirección TRUE
if FLAG<1> = 1,
PC = dirección FALSE

Sintaxis BTFSS

Descripción Prueba el bit b del registro f .


simplificada: Salta la siguiente instrucción si bit b es 1.
Salta 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.
Número de 1 (2).
ciclos:

Ejemplo: Entrada equ 11


Switch equ 0
ChecaElSwitch
BTFSS Entrada, Switch ; Checa que Switch este en 1
GOTO ChecaElSwitch ; El Switch esta en 0, regresa
------- ; El Switch ya esta en 1

HERE BTFSS FLAG,1


FALSE GOTO PROCESS_CODE
TRUE.
Si antes de la instrucción.     PC = dirección HERE
Al ejecutarse:
if FLAG<1> = 0,
PC = dirección FALSE
if FLAG<1> = 1,
PC = dirección TRUE

Sintaxis ADDLW

Descripción Suma el contenido del acumulador W con el numero.


simplificada: Añade el contenido del registro W al literal K, y almacena el resultado en W.
Nota: Esta instrucción no existe en el
PIC16C5X.

Número de 1
ciclos:

Ejemplo: ADDLW OxlS


Si antes de la instrucción:
w = lOh = 0001 0000 b
Al ejecutarse la instrucción
w = 10h + 15h = 25h
w 0001 0000 b + 0001 0101 b = 0010 0101 b

Sintaxis ANDLW

Descripción AND el acumulador y el numero k.


simplificada: Resultado en el acumulador.
Número de 1
ciclos:

Ejemplo: MOVLW b’00001111’ ; acumulador b’00001111’


ANDLW b’00000001’ ; acumulador b’00000001
____________________________________-
ANDLW OxSF
Si antes de la instrucción:
W = A3h
Al ejecutarse:
W = 01011111 b ANO 1010 0011 b
= 0000 0011 B = 03h

Sintaxis CALL

Descripción Salta a una subrutina en la etiqueta k


simplificada: 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, PAl y PAO (PIC16C5X) o el registro PCLATCH
(en los demás PIC) antes de ejecutarse la instrucción. Utiliza dos ciclos de
instrucción.

Número de 1
ciclos:

Ejemplo: Contador equ 10


Contador1 equ 11
BSF Contador,0 ; Contador b’00000001’
BSF Contador,7 ; Contador b’10000001’
CALL CargaContador ; ejecuta la subrutina CargaContador
------- ; aquí sigue después de subrutina
Sintaxis CLRWDT

Descripción Pone a 0 el temporizador Watchdog


simplificada: Se borra tanto el registro WDT (Watch- <!Qg) como su preescaler. Los bits TO y
PD del registro de estado se ponen a «1».

Número de 1
ciclos:

Ejemplo: CLRWDT
Si antes de la instrucción:
WDT = OAh
Al ejecutarse:
WDT = OOh
Preescaler WDT = O
bit de estado TO = 1
bit de estado PD = 1

Sintaxis GOTO

Descripción Salta a la etiqueta k


simplificada:

Número de 2
ciclos:

Ejemplo: Contador equ 10


MOVLW b’00000000’
MOVWF Contador ; Contador b’00000000’
GOTO Programa1 ; El programa continua en Programa1

_________________________________
Goto Bucle  ;Bucle ->(PC)
Antes de la instrucción : (PC)=¿?
Después de la instrucción: (PC)= Dirección apuntada por la etiqueta “Bucle”

Sintaxis IORLW

Descripción operación OR lógica, destino = W f


simplificada: Efectúa la operación lógica OR entre el contenido del registro W y el literal ‘k’.
El resultado se almacenará en el registro W.
Operación: (W) OR (k) -> (W)

Número de 1
ciclos:

Ejemplo: Iorlw b’00110101’ ;(W) OR b’00110101’ -> (W)


.
Antes de la instrucción:
(W) = b’00110101’ y Z = ¿?
.
Después de la instrucción:
(W) = b’00110101’ y Z = 0

Sintaxis MOVLW

Descripción Carga un numero en el acumulador W. El número que se va a cargar en al


simplificada: acumulador está representado por k, este número puede escribirse en decimal,
hexadecimal o binario
Número de 1
ciclos:

Ejemplo: MOVLW d’255’ ; decimal


MOVLW 0xFF ; hexadecimal
MOVLW b’11111111’ ; binario
Sintaxis RETFIE

Descripción Regresa de una interrupción.


simplificada: Regreso de la interrupción. El PC se carga con el contenido de la cima de la pila
(TOS): dirección de retorno.

Operación: TOS → PC, 1 → GIE

Número de 2
ciclos:

Ejemplo: REFTIE 1
After Interrupt
PC = TOS
W = WS
BSR = BSRS
STATUS = STATUSS
GIE/GIEH, PEIE/GIEL = 1

Sintaxis RETLW

Descripción Regresa de una subrutina. Con el numero k en el acumulador.


simplificada: retorno de subrutina con constante k, W = k

Número de 2
ciclos:

Ejemplo: sí quiero que vuelva con el valor 1:

Retlw b'00000001’; en binario

Retlw .1 ;en decimal

Retlw 0x01 ;en hexadecimal


Sintaxis RETURN

Descripción Regresa de una subrutina


simplificada:

Número de 2
ciclos:

Ejemplo: RETURN
Después de la instrucción:
PC = TOS

Sintaxis SLEEP

Descripción Pone el microcontrolador en SLEEP (dormir) para reducir el consumo.


simplificada: coloca el µC en modo sleep, WDT = 0

Número de 1
ciclos:

Ejemplo: SLEEP()

Sintaxis SUBLW
Descripción Realiza la resta k – W
simplificada:

Número de 1
ciclos:

Ejemplo: SUBLW 0x07


Antes de la instrucción:
W = 0x02 = D’2’
Después de la instrucción:
W = 0x05 = D’5’ 

Sintaxis XORLW

Descripción XOR el acumulador y el numero k.


simplificada: Resultado en el acumulador.
Realiza la operación lógica OR – EXCLUSIVA bit a bit, entre el contenido del
registro W y el literal k
Número de 1
ciclos:

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’ 

3. Subir al canal de Teams, como publicación, el archivo con las tablas de cada una de las
instrucciones que les toco analizar en el equipo de trabajo.
4. De manera individual integrar un archivo con todas las tablas de funcionamiento de todas las
instrucciones. Haz las modificaciones que consideres pertinentes para que te quede más claro
cómo se utilizan las instrucciones y para qué sirve.
5. Sube en formato PDF el archivo que integraste como el resultado del punto 5. Recuerda que el
trabajo es individual y que este documento te servirá como referencia para la utilización de las
instrucciones durante la realización de los programas.

También podría gustarte