CURSO : MICROCONTROLADORES
COURSE : MICROCONTROLLERS
INSTRUCTION SET SUMMARY (SET DE
INSTRUCCIONES PIC16F84A)
Autor: Ing.Wolffang David Niño
Correo : wolffang.niñ
[email protected].
SET DE INSTRUCCIONES
INTRODUCCIÓN
❖ Los PIC16F84A poseen un juego de 35 instrucciones de tipo
RISC, siendo todas ellas de 14 bits. El tamaño de los datos es de
1 byte.
❖ En los 14 bits de cada instrucción se incluye el código de
operación y los operandos si estos existen.
❖ Todas las instrucciones tardan en ejecutarse 1 ciclo (4 golpes de
reloj) excepto las de salto que tardan 2 ciclos.
SET DE INSTRUCCIONES
INTRODUCCIÓN
❖ Las instrucciones de los PIC son altamente ortogonales. Esto
quiere decir que casi todas las instrucciones pueden usar
cualquier registro como como operando y como destino.
❖ El número total de instrucciones del microcontrolador es de 35.
Clasificándose en los siguiente tipos:
❖ Instrucciones orientadas a bytes.
❖ Instrucciones orientadas a bits
❖ Instrucciones de control y con literales.
NOMENCLATURA DE LAS
INSTRUCCIONES
❖ En las instrucciones orientadas a bytes o registros f representa un
registro y d representa el destino. Si d es 0, el resultado de la
operación se almacena en el registro de trabajo W, mientras que
si d es 1, el resultado se guarda en el 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 siempre es el de menor peso
❖ Para las instrucciones de control y con literales k representa una
constante o un literal, que según los casos puede ser de 8 ó 11
bits
FORMATO DE LAS INSTRUCCIONES
• Instrucciones orientadas a bytes o registros (18)
Donde:
❖ Opcode es el código de operación. ( ) significa contenidos.
FORMATO DE LAS INSTRUCCIONES
• Instrucciones orientadas a bits (4).
Donde:
❖ Opcode es el código de operación. ( ) significa contenidos.
FORMATO DE LAS INSTRUCCIONES
❖ Instrucciones de control y con literales (13).
FORMATO DE LAS INSTRUCCIONES
❖ Instrucciones Orientadas a Bytes O Registros
FORMATO DE LAS INSTRUCCIONES
❖ Instrucciones Orientadas a Bits. Instrucciones Con Literales Y
De Control
FORMATO DE LAS INSTRUCCIONES
❖ Instrucciones Orientadas a Bits. Instrucciones Con Literales Y
De Control
Constantes Numéricas y Alfanuméricas
Tipo Sintaxis Ejemplo
Decimal D’cantidad’ D’100’
d’cantidad’ d’100’
.cantidad .100
Hexadecimal H’cantidad’ H’100’
h’cantidad’ h’100’
<cantidad>H 100H
<cantidad>h 100h
0x<cantidad> 0x0C
Octal O’cantidad’ O’100’
o’cantidad’ o’100’
Constantes Numéricas y Alfanuméricas
Tipo Sintaxis Ejemplo
Binario B’cantidad’ B’100’
b’cantidad’ b’100’
ASCII A’caracter’ A’B’
a’caracter’ a’B’
caracter ‘B’
String o Cadena ’string’ ’Hola!!!!!!!’
de Caracteres
Repertorio de Instrucciones
❖ El set de instrucciones del PÍC16F84A esta compuesto por 35
instrucciones , que se clasifican como :
❖ Instrucciones de Carga
❖ Instrucciones Aritméticas
❖ Instrucciones Lógicas
❖ Instrucciones de Bit
❖ Instrucciones de Salto
❖ Instrucciones para el manejo de subrutinas
❖ Instrucciones especiales
Instrucciones de Carga
Instrucción MOVLW
L (Constante), W (Registro de Trabajo)
• Esta instrucción mueve al registro W un valor inmediato
determinado por ‘K’.
• Modo de direccionamiento?
• Sintaxis : movlw k
• ‘k’ es el valor que se quiere mover al registro ‘W’
• Ejemplo : Cargar en W el valor 31 decimal….. movlw 0x1F
Instrucciones de Carga
Instrucción MOVLW
L (Constante), W (Registro de Trabajo)
• Esta instrucción mueve al registro W un valor inmediato
determinado por ‘K’.
• Modo de direccionamiento?
• Sintaxis : movlw k
• ‘k’ es el valor que se quiere mover al registro ‘W’
• Ejemplo : Cargar en W el valor 31 decimal….. movlw 0x1F
Instrucciones de Carga
Instrucción MOVWF
F (dirección de memoria especifica)
• Esta instrucción mueve el valor del registro W un al registro
indicador por ‘f’
• Modo de direccionamiento?
• Sintaxis : movwf f
• Ejemplo : Cargar en W el valor 31 decimal….. movlw 0x1F
Instrucciones de Carga
Instrucción MOVWF
• Ejemplo : Cargar en W el valor 10 decimal, y transferirlo a la
dirección 0x0C de la RAM
• movlw .10
• movwf 0x0C
Arquitectura Ortogonal?
Instrucciones de Carga
Instrucción MOVF
• Esta instrucción mueve el registro indicado por ‘f’(dirección
dato), d(destino). Porque no a una dirección de memoria?
• Procesador RISC…..Sintaxis : movf f,d
• Donde ‘d’ es el que determina donde se almacenara el
resultado, de modo que si :
• d= ‘0’ ; se guarda el resultado en el registro W
• d = ‘1’; se guarda el resultado en el registro f(mismo registro)
Instrucciones de Carga
Instrucción MOVF
• Ejemplo : Almacenar en la dirección 0x0C el valor 255
decimal, en la dirección 0x0D el valor 8,finalmente copiar el
contenido de la dirección 0x0C a la 0X0E
• movlw 255
Instrucciones de Carga
Instrucción MOVF
• Ejemplo : Almacenar en la dirección 0x0C el valor 255
decimal, en la dirección 0x0D el valor 8,finalmente copiar el
contenido de la dirección 0x0C a la 0X0E
• movlw 255
• movwf 0x0C
Instrucciones de Carga
Instrucción MOVF
• Ejemplo : Almacenar en la dirección 0x0C el valor 255
decimal, en la dirección 0x0D el valor 8,finalmente copiar el
contenido de la dirección 0x0C a la 0X0E
• movlw .255
• movwf 0x0C
• movlw .8
Instrucciones de Carga
Instrucción MOVF
• Ejemplo : Almacenar en la dirección 0x0C el valor 255
decimal, en la dirección 0x0D el valor 8,finalmente copiar el
contenido de la dirección 0x0C a la 0X0E
• movlw .255
• movwf 0x0C
• movlw .8
• movwf 0x0D
Instrucciones de Carga
Instrucción MOVF
• Ejemplo : Almacenar en la dirección 0x0C el valor 255
decimal, en la dirección 0x0D el valor 8,finalmente copiar el
contenido de la dirección 0x0C a la 0X0E
• movlw .255
• movwf 0x0C
• movlw .8
• movwf 0x0D
• movf 0x0C,0
Instrucciones de Carga
Instrucción MOVF
• Ejemplo : Almacenar en la dirección 0x0C el valor 255
decimal, en la dirección 0x0D el valor 8,finalmente copiar el
contenido de la dirección 0x0C a la 0X0E
• movlw .255
• movwf 0x0C
• movlw .8
• movwf 0x0D
• movf 0x0C,0
• movwf 0x0E
Instrucciones de Carga
Instrucción CLRW
• Esta instrucción borra el contenido del registro ‘W’
• Sintaxis : clrw
• Instrucción CLRF
• Esta instrucción borra el contenido del registro especificado
por la dirección ‘f’
• Sintaxis : clrf f , ‘f’ es la dirección del registro a borrar
Instrucciones de Bit
Instrucción BCF
• Esta instrucción borra un bit ‘b’ del registro ‘f’
• Sintaxis : bcf f,b ‘b’ es el bit a borrar
• Instrucción BSF
• Esta instrucción pone a uno un bit del registro ‘f’
• Sintaxis : bsf f,b ‘b’ es el bit a activar(set)
Instrucciones de Bit
Ejemplo : Escriba un código que haga lo siguiente: a) Borre el
contenido del registro 0x0C; b) borre el bit 0 del registro 0x0E y ; c)
active el bit 5 del registro 0x0D.
• clrf 0x0C
Instrucciones de Bit
Ejemplo : Escriba un código que haga lo siguiente: a) Borre el
contenido del registro 0x0C; b) borre el bit 0 del registro 0x0E y ; c)
active el bit 5 del registro 0x0D.
• clrf 0x0C
• bcf 0x0E,0
Instrucciones de Bit
Ejemplo : Escriba un código que haga lo siguiente: a) Borre el
contenido del registro 0x0C; b) borre el bit 0 del registro 0x0E y ; c)
active el bit 5 del registro 0x0D.
• clrf 0x0C
• bcf 0x0E,0
• bsf 0x0C,5
Instrucciones aritméticas
Registro STATUS :Contiene el estado aritmético de la ALU , el
estado del reset y los bits para la selección del banco
Instrucciones aritméticas
Instrucción ADDLW :
Esta instrucción suma al valor ‘k’ al registro w
• Sintaxis : addlw k
Donde ‘k’ es el valor que se desea sumar al registro W
Ejemplo : Escriba un código que haga que sume un 20h al
contenido del registro W
Addlw 0x20
Instrucciones aritméticas
Instrucción ADDWF :
Esta instrucción suma al el registro W con el registro indicado
por ‘f’.
Sintaxis : addwf f,d
Si d= ‘0’ el resultado de la suma se almacenara en el registro W,
pero si d=‘1’, el resultado será en el registro ‘f’
Ejemplo : Escriba un código que almacene en 0x0D, la suma del
contenido del registro 0x0C mas 20h.
movlw 0x20
Instrucciones aritméticas
Instrucción ADDWF :
Esta instrucción suma al el registro W con el registro indicado
por ‘f’.
Sintaxis : addwf f,d
Si d= ‘0’ el resultado de la suma se almacenara en el registro W,
pero si d=‘1’, el resultado será en el registro ‘f’
Ejemplo : Escriba un código que almacene en 0x0D, la suma del
contenido del registro 0x0C mas 20h.
movlw 0x20
addwf 0x0C, 0
Instrucciones aritméticas
Instrucción ADDWF :
Esta instrucción suma al el registro W con el registro indicado
por ‘f’.
Sintaxis : addwf f,d
Si d= ‘0’ el resultado de la suma se almacenara en el registro W,
pero si d=‘1’, el resultado será en el registro ‘f’
Ejemplo : Escriba un código que almacene en 0x0D, la suma del
contenido del registro 0x0C mas 20h.
movlw 0x20
addwf 0x0C, 0
movwf 0x0D
Instrucciones aritméticas
Instrucción SUBLW :
Esta instrucción Resta el valor del registro a un valor inmediato
determinado por ‘k’
Sintaxis : sublw k
Instrucción SUBWF:
Realiza la resta del registro ‘W’ al registro ‘f’ (f-W)
Sintaxis subwf f,d
Donde ‘d’ es el que determinara donde se almacenara el
resultado de modo que si d= ‘0’ el resultado de la operación se
guardara en el registro W, pero si d=‘1’ el resultado de la
operación se almacenara en 0 ‘f’
Instrucciones de salto
• Instrucción GOTO :
• Esta instrucción realiza un salto incondicional a la dirección
especificada por ‘k’ o a la etiqueta especificada. Si k =$ , el salto
se produce en la misma posición .
• Sintaxis : goto k
FORMATO DE LAS INSTRUCCIONES
❖ ADDLW (Suma W con un literal)
FORMATO DE LAS INSTRUCCIONES
❖ ADDWF (Suma W con un registro)
FORMATO DE LAS INSTRUCCIONES
❖ ANDLW (AND de W con un literal)
FORMATO DE LAS INSTRUCCIONES
❖ ANDWF (AND de W con un registro)
FORMATO DE LAS INSTRUCCIONES
❖ BCF (poner a 0 un bit del registro f)
FORMATO DE LAS INSTRUCCIONES
❖ BSF (poner a 1 un bit del registro f)
FORMATO DE LAS INSTRUCCIONES
❖ BTFSC (Testea un Bit y Salta si Cero)
FORMATO DE LAS INSTRUCCIONES
❖ BTFSC (Testea un Bit y Salta si Cero)
FORMATO DE LAS INSTRUCCIONES
❖ BTFSC (Testea un Bit y Salta si Cero)
Si se produce el salto (bit=0) la instrucción tarda 2 ciclos en
ejecutarse, por el contrario si no se produce salto solo tarda 1
ciclo en ejecutarse
FORMATO DE LAS INSTRUCCIONES
❖ BTFSC (Testea un Bit y Salta si Cero)
FORMATO DE LAS INSTRUCCIONES
❖ BTFSS (Testea un Bit y Salta si Set)
FORMATO DE LAS INSTRUCCIONES
❖ CALL (Llamada a subrutina)