Está en la página 1de 12

REA Electricidad, Electrnica y Automatismo Industrial

EJERCICIOS GUIA ENSAMBLADOR

OBJETIVO
Internalizar el funcionamiento del microcontrolador PIC.
1. Sintaxis de las instrucciones
2. Acumulador (W)
3. Funciones relacionado a los Registros

MARCO TERICO

FORMATO DE LAS INSTRUCCIONES


Todas las instrucciones llevan alguno de los siguientes formatos, dependiendo de la funcin
que desempeen:
Instrucciones orientadas a byte. Instrucciones orientadas a bit. Instrucciones de manejo de
constantes (en la literatura de Microchip, las constantes se denominan literals) y,
finalmente instrucciones de salto CALL y GOTO.
Enseguida, se muestra el formato para cada tipo de instruccin. Las palabras son de 14 bits.
El trabajo de decodificacin de cada formato es realizado por el programa ensamblador,
razn por la cual el programador no requiere de decodificar manualmente cada instruccin.

Donde:
OPCODE, corresponde a la instruccin en s. Puede corresponder a una instruccin
aritmtica, lgica, de sistema, etc.

1/12
Profesor: Alberto Takaoka
LENGUAJE ENSAMBLADOR
SET INSTRUCCIONES

Instrucciones orientadas a registros

MNEMNICO
DESCRIPCIN CDIGO OP BANDERAS NCIC NOTAS
OPERANDOS

ADDWF f,d w+fd 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-1d 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+1d 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 fd 00 1000 dfff ffff Z 1 1,2

MOVWF f wf 00 0000 1fff ffff Ninguna 1 -

NOP - No operacin 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-wd 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

NOTA:
w, acumulador
f, direccin del Registro que contiene el dato
d, Registro donde quedar el resultado de la operacin
0, en el acumulador
1, en el Registro donde estaba el dato

2/12
Profesor: Alberto Takaoka
Instrucciones orientadas a bit

MNEMNICO
DESCRIPCIN CDIGO OP BANDERAS NCIC NOTAS
OPERANDOS

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

NOTA:
f, direccin del Registro que contiene el dato a modificar
b, el bit a modificar

Instrucciones orientada a literales y de control

MNEMNICO
DESCRIPCIN CDIGO OP BANDERAS NCIC NOTAS
OPERANDOS

ADDLW k w+kw 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 direccin k 10 1kkk kkkk kkkk Ninguna 2 -

IORLW k w OR k w 11 1000 kkkk kkkk Z 1 -

MOVLW k kw 11 00xx kkkk kkkk Ninguna 1 -

RETFIE - Retorno de una interrupcin 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-ww 11 110x kkkk kkkk C,DC,Z 1 -

XORLW k w XOR k w 11 1010 kkkk kkkk Z 1 -

NOTA:
w, acumulador
k, valor del dato

3/12
Profesor: Alberto Takaoka
EJERCICIOS RESUELTOS
DETERMINACIN DE LAS INSTRUCCIONES
En cada uno de los ejercicios indique la tabla en la que encontrar la instruccin y escriba la
instruccin.
1. Guardar el dato 0x05 en el acumulador.
Solucin
Lo que se desea guardar en acumulador(w) es el literal(k) 0x05.
Por lo tanto se debe buscar la orden en la tabla orientada a literales y control.

MNEMNICO
DESCRIPCIN
OPERANDOS

MOVLW k kw

La instruccin se escribe:
movlw 0x05

2. Copiar el contenido del registro 0x86 en el acumulador


Solucin
En el acumulador(w) se necesita guardar el contenido del registro cuya direccin es
0x86(f).
La orden debe estar en la tabla orientada a registro.
La instruccin es:

MNEMNICO
DESCRIPCIN
OPERANDOS

MOVF f,d fd

En este caso f = 0x86 porque es la direccin del registro cuyo contenido se desea guardar
en el acumulador(w) y d =0 dado que se desea que el contenido del registro quede en el
acumulador (w).
En definitiva, la instruccin se debe escribir:
movf 0x86,0

3. Cambiar al valor 1 el bit 5 del registro 0x03.


Solucin
Se necesita cambiar el valor de un bit del contenido de un registro.
La orden debe estar en la tabla orientada a bit.
La instruccin es:

MNEMNICO
DESCRIPCIN
OPERANDOS

BSF f,b

4/12
Profesor: Alberto Takaoka
En este caso f = 0x03 porque es la direccin del registro en el que se modificara un bit y
b=5 ya que es el bit que se cambiar a 1.
La instruccin se debe escribir:
bsf 0x06,5

PASOS PARA ENCONTRAR LA INSTRUCCIN


Determine si la operacin se va a realizar con un:
Registro, el dato est almacenado en un registro, se tiene la direccin del registro.
Bit, se necesita dar un valor 0 o 1, a un bit de un registro, se tiene la posicin del bit a
modificar.
Literal o Control, el dato es el valor dado o es una instruccin de control.
De acuerdo a lo anterior ubique la tabla que est orientada al objeto con la que se realizar
la operacin. Tabla Orientada a Registro, Bit o Literal y Control.
En la columna DESCRIPCIN de la tabla elegida, busque aquella que indique la
operacin que necesite.

5/12
Profesor: Alberto Takaoka
EJERCICIOS PROPUESTOS
DETERMINACIN DE LAS INSTRUCCIONES

En cada uno de los ejercicios determine el objeto a operar (Registro, bit, literal o control),
la tabla en que buscara la instruccin, identifique la instruccin y sus parmetros.
1. Sumar el valor 0XE5 al valor que est en el acumulador y dejar el resultado en el
registro 0XE5.
2. Copiar el valor del acumulador al registro 0x0C.
3. Restar al valor 0x0C lo que contiene el acumulador y dejar el resultado en el
acumulador.
4. Poner en cero el bit 3 del registro 0x04.
5. Aumentar en 1 el valor del registro 0x75 y dejar el resultado en el mismo registro
0x75.
6. Poner en reposo el microcontrolador.
7. Poner en cero todos los bits del registro 0x06.
8. Intercambiar los nibles del registro 0x0D y dejar el resultado en el acumulador.
9. Si el bit 4 del registro 0x10 es cero, saltar la siguiente instruccin.
10. Al regresar de la subrutina, cargar el valor 0xAF en el acumulador.

6/12
Profesor: Alberto Takaoka
FUNCIONAMIENTO DE LA INSTRUCCIONES

El PIC solo puede procesar uno o dos datos por instruccin, en el caso de procesar dos
datos, uno siempre debe estar en el registro de trabajo o acumulador W y el otro debe
provenir de la propia instruccin o de un registro.
Cada uno de los registros de la memoria de datos tiene un largo de 8 bits, los cuales pueden
ser 0 o 1. Su direccin corresponde a la que tenga en la memoria de datos.
7 6 5 4 3 2 1 0 Posicin del bit
0 0 1 1 1 0 1 0 Contenido del registro 0x3A

NOTA
No se puede realizar operaciones directas entre:
Dos datos literales entre si, ejemplo 1.
Datos que estn en registros, ejemplo 2.
Datos literales y que est en un registro, ejemplo 3.
En todos estos casos es necesario traspasar uno de los datos al acumulador(W).

EJECICIOS RESUELTOS
SEGN EL FUNCIONAMIENTO DEL MICROCONTROLADOR PIC

Utilizando las instrucciones del ensamblador proporcione las instrucciones necesarias para
dar solucin a los problemas propuestos.
1. Entre los datos 0x18 y 0xE1 realizar la operacin AND el resultado dejarlo en el
acumulador(W).
Solucin
Observacin: En este ejemplo se requiere operar con dos datos de tipo literal. No es
posible, uno de ellos debe quedar en el acumulador.

7/12
Profesor: Alberto Takaoka
Como el orden de los datos para la operacin AND no importa se guardar en el
acumulador (W) el nmero 0xE1.
movlw 0xE1
Segn el requerimiento buscaremos en las tablas de instrucciones las
correspondientes a las orientadas a literales. La instruccin que se necesita es:

MNEMNICO
DESCRIPCIN
OPERANDOS

ANDLW k w AND k w

Luego dar la instruccin ANDLW para que se produzca la operacin entre el


contenido del acumulador 0xE1 y el literal k, que en este caso ser 0x18.
andlw 0x18

2. Realizar operacin AND entre un dato que est almacenado en el registro 0x0c y otro
dato que est guardado en el registro 0x85. El resultado dejarlo en el acumulador(w)

MNEMNICO Solucin
DESCRIPCIN
OPERANDOS Observacin: El requerimiento es
operar con datos que estn en registros. No es
MOVF f,d f d posible, uno de ellos debe quedar en el
acumulador.
Como la operacin AND es conmutativa se copiar en el acumulador(w) el contenido
del registro 0x0C.La instruccin es:

MNEMNICO
DESCRIPCIN
OPERANDOS

ANDWF f,d w AND f d

movf 0x0C,0
Ahora se puede realizar la operacin AND. La instruccin es:

andwf 0x85,0

3. Haga la operacin AND entre un dato que est en el registro 0x1B y el nmero 0xFA. El
resultado dejarlo en el registro 0x1B.
Solucin
Observacin: El requerimiento es operar con un dato literal,0xFA, y uno que estn en
un registro, 0x1B. No es posible, uno de ellos debe quedar en el
acumulador.
Aunque el operador AND es conmutativa, conviene dejar en el acumulador(w) el
literal,0xFA, ya que el resultado debe quedar en el registro 0x1B. La instruccin a
utilizar para esto es:

MNEMNICO
DESCRIPCIN
OPERANDOS

8/12
Profesor: Alberto Takaoka
MOVLW k kw

movlw 0XFA

9/12
Profesor: Alberto Takaoka
Ahora se puede realizar la operacin AND, con la instruccin:

MNEMNICO
DESCRIPCIN
OPERANDOS

ANDWF f,d w AND f d

andwf 0x1B,1

En los siguientes ejercicios indique los valores que tienen el acumulador (w) y los registros
involucrados, despus que se ejecute cada una de las instrucciones.
4. Se dan las siguientes instrucciones: movlw 0x0B, movwf 0x1C. Inicialmente el
acumulador(w) y el registro 0x0C tienen el valor 0.
Solucin
Observacin: Los objetos involucrados son el acumulador, w, el literal 0x0B y el
registro cuya direccin es 0x1C.

REGISTROS
INSTRUCCIN w 0x1C
0 0
movlw 0x0B 0x0B 0
movwf 0x1C 0x0B 0x0B

5. El acumulador(w) contiene el valor 0xAD, el registro 0x12 tiene almacenado el valor


0xC3. Se da la siguiente instruccin subwf 0x12,1.
Solucin
Observacin: Los objetos involucrados son el acumulador, w, y el registro cuya
direccin es 0x12, los que contienen los valores 0xAD y 0XC3
respectivamente

REGISTROS
INSTRUCCIN w 0x12
0xAD 0XC3
Subwf 0x12,1 0xAD 0x16

6. En el registro 0x05 se ingres el valor 0x47 y en el registro 0x06 el valor 0x39. Luego se
ejecutan las siguientes ordenes: movf 0x06,0; iorwf 0x05,0; movwf 0x0D. Inicialmente el
acumulador, w, y el registro con direccin 0x0D tienen el valor 0.
Solucin
Observacin: Los objetos involucrados son el acumulador, w, con valor 0 y los
registros con direcciones 0x05, 0x06 y 0x0D. Sus valores iniciales
respectivamente son 0x47,0x39 y 0.

10/12
Profesor: Alberto Takaoka
REGISTROS
INSTRUCCIN w 0x05 0x06 0x06
0 0x47 0x39 0
movf 0x06,0 0x39 0x47 0x39 0
iorwf 0x05,0 0x7F 0x47 0x39 0
movwf 0x0D 0x7F 0x47 0x39 0x7F
La instruccin iorwf 0x05,0 realiza una operacin OR entre el contenido de w y el del
registro 0x05, dejando el resultado en acumulador, w.
Como en el acumulador esta almacenado 0x39 y en el registro 0x05el valor 0x47, la operacin
OR se realiza entre estos valores.

001110012 0x39
OR
010001112 0x47
011111112 0x7F

7. Inicialmente en el acumulador

11/12
Profesor: Alberto Takaoka
SOLUCIN EJERCICIOS
DETERMINACIN DE LAS INSTRUCCIONES
1. La solucin es

12/12
Profesor: Alberto Takaoka

También podría gustarte