TÉCNICAS DIGITALES 2 PIC18Fxxx INSTRUCCIONES Y MODOS DE DIRECCIONAMIENTO Autor: Ing. GUILLERMO A. FERNÁNDEZ Carrera de
Views 65 Downloads 4 File size 1MB
TÉCNICAS DIGITALES 2
PIC18Fxxx INSTRUCCIONES Y MODOS DE DIRECCIONAMIENTO Autor: Ing. GUILLERMO A. FERNÁNDEZ Carrera de Ingeniería Electrónica – Facultad de Ingeniería Universidad Nacional de Misiones Oberá – Misiones – Argentina
- Año 2014 -
INTRODUCCIÓN ESTRUCTURA BÁSICA DE UN MICROCONTROLADOR
Periféricos
MICROCONTROLADOR = SISTEMA CERRADO
CLK Genera la señal que permite ejecutar el programa.
CPU - Unidad Aritmético-Lógica (ALU). - Registros de trabajo (WREG). - Registro Contador de Programa (PC). - Registro de estado (STATUS), etc.
MEMORIA DE PROGRAMA - Almacenamiento del programa. - ROM, EPROM, FLASH, OTP (PROM).
BUSES BUS DE DIRECCIONES: Mediante el mismo la CPU puede seleccionar direcciones relacionadas con memorias o dispositivos de E/S. Es unidireccional.
UNIDAD DE E/S - Interface con el exterior. - Múltiples «pines» con configuración individual como E/S.
MEMORIA DE DATOS - Almacenamiento de datos. - SRAM (Volátil). - A veces también EEPROM (No volátil)
BUS DE DATOS: A través del mismo la CPU intercambia información (datos e instrucciones) con los demás dispositivos. Es bidireccional.
BUS DE CONTROL: Son líneas individuales salientes o entrantes a la CPU. Llevan señales tales como: Lectura/escritura en memoria, reloj, reset, etc.
U.Na.M. – Facultad de Ingeniería – Técnicas Digitales 2 – Ing. Guillermo A. Fernández
INTRODUCCIÓN ARQUITECTURA DE LOS MICROCONTROLADORES VON NEUMANN
CISC: Complex Instruction Set Computer Instrucciones potentes (efectúan operaciones complejas), esto optimiza el uso de memoria. Instrucciones complejas utilizan varios ciclos de reloj para la ejecución. Varios modos de direccionamiento, esto dificulta el aprendizaje de la programación.
- Arquitectura clásica, solo tres buses. - Los dispositivos ubicados en un sólo mapa de memoria. - Arquitectura sencilla. - Bus de datos compartido para instrucciones y datos. - Ancho de palabra de instrucción limitada al ancho de palabra de datos. - No puede acceder a datos e instrucciones en forma simultánea (un solo bus de datos). - Reducción en la velocidad de procesamiento de las instrucciones.
HARVARD
RISC: Reduced Instruction Set Computer Instrucciones sencillas que pueden ser ejecutadas en un sólo ciclo de máquina. Esto aumenta velocidad de procesamiento pero los programas ocupan mas memoria debido a la mayor cantidad de instrucciones para una tarea determinada. Pocos modos de direccionamiento, lo cual facilita el aprendizaje de la programación.
- Arquitectura con múltiples buses. - Los dispositivos ubicados en distintos mapas de memoria. - Arquitectura más compleja. - Bus de datos independientes para instrucciones y datos. - Ancho de palabra de instrucción diferente al ancho de palabra de datos. Permite que las instrucciones puedan ocupar una sola palabra en la memoria de programa (más fácil de ejecutar y pudiéndose hacer esto en un solo ciclo). - Puede acceder a datos e instrucciones en forma simultánea (procesamiento paralelo, pipeline). - Aumento en la velocidad de procesamiento de las instrucciones.
U.Na.M. – Facultad de Ingeniería – Técnicas Digitales 2 – Ing. Guillermo A. Fernández
INTRODUCCIÓN Dispositivos de la firma Microchip Technology Inc.
PIC18Fxxx MCUs de 8 bits con arquitectura HARVARD y set de instrucciones RISC.
PIC = PERIPHERAL INTERFACE CONTROLLER U.Na.M. – Facultad de Ingeniería – Técnicas Digitales 2 – Ing. Guillermo A. Fernández
INTRODUCCIÓN INSTRUCCIÓN Las instrucciones corresponden a “códigos binarios”, que al ejecutarse llevan al microcontrolador a efectuar una tarea determinada. Las instrucciones poseen dos campos. Campo 1
Campo 2
Código Operacional
LENGUAJE ASSEMBLER
PIC18Fxxx Poseen 77 instrucciones, 73 - Datos. de 16 bits y 4 de 32 bits. - Direcciones de los datos. - Bits para selección (ej.: bancos de memoria) - Etc.
Para no trabajar con números binarios o hexadecimales que representan a las instrucciones, los fabricantes de microcontroladores disponen del lenguaje ASSEMBLER o ENSAMBLADOR, donde a cada código operacional se asigna un “apodo” denominado MNEMONICO. Ejemplos: Mnemónico
Operando
Instrucción 1
movwf
f,a
Instrucción 2
movf
f,d,a
Instrucción 3
movff
fs,fd
U.Na.M. – Facultad de Ingeniería – Técnicas Digitales 2 – Ing. Guillermo A. Fernández
PROGRAMACIÓN CONCEPTO La programación de un microcontrolador consiste en cargarle a su memoria de programa una secuencia de instrucciones que deberá ejecutar para que el mismo realice una tarea determinada. Esta secuencia de instrucciones constituye el programa o algoritmo lógico del microcontrolador (Firmware).
MEMORIA DE PROGRAMA MICROCONTROLADOR
INSTRUCCIONES (Almacenadas en la Memoria de Programa) 16 bits
Memoria de Programa
Memoria de Programa
(FLASH) En Assembler (Código Fuente) Todo en binario (Código Máquina)
PIC18F1320 Memoria de programa: 4K palabras de 16 bits (0000 a 1FFFh bytes)
U.Na.M. – Facultad de Ingeniería – Técnicas Digitales 2 – Ing. Guillermo A. Fernández
MEMORIA DE DATOS Número de banco
+
Dirección del dato en el banco Dirección del dato
SRAM PIC18F1320
PIC18Fxxx PIC18Fxxx: Direccionable 16 bancos de 256 bytes cada uno. (Bank 0 … Bank 15) PIC18F1320: Sólo posee 128 bytes en el Banco 0. (Access RAM = 00 a 7Fh).
U.Na.M. – Facultad de Ingeniería – Técnicas Digitales 2 – Ing. Guillermo A. Fernández
EJECUCIÓN DEL PROGRAMA EJECUCIÓN DE LAS INSTRUCCIONES EJECUCIÓN NO SEGMENTADA (Típico de Von Neumann)
EJECUCIÓN SEGMENTADA, PIPELINING (Típico de Harvard) Consiste en ejecutar y buscar a la vez.
TOSC = Ciclo del Oscilador (CLK) TCY = Ciclo de Instrucción o de Máquina
TOSC = 1/FOSC PIC18Fxxx Un ciclo de instrucción (TCY)
TCY = 4× ×TOSC
Q1: Decodifica el código operacional de la instrucción buscada anteriormente. Q2: Lee el operando de la instrucción. Q3: Procesa el operando. Q4: Escribe el resultado de la operación. U.Na.M. – Facultad de Ingeniería – Técnicas Digitales 2 – Ing. Guillermo A. Fernández
CLASIFICACIÓN DE LAS INSTRUCCIONES En la hoja de datos correspondiente a los microcontroladores PIC18Fxxx, las instrucciones están clasificadas según la operación que cumplen. A continuación es presentada esta clasificación.
A) INSTRUCCIONES ORIENTADAS A OPERACIONES CON BYTES CÓDIGO DE MÁQUINA
En este grupo pueden encontrarse instrucciones que realizan diferentes operaciones con bytes. En la tabla están indicados algunos ejemplos. OPERACIONES ARITMÉTICAS Y LÓGICAS OPERACIONES PARA TRANSFERENCIA DE DATOS
Fuente: PIC18F1220/1320 Data Sheet (DS39605F) U.Na.M. – Facultad de Ingeniería – Técnicas Digitales 2 – Ing. Guillermo A. Fernández
CLASIFICACIÓN DE LAS INSTRUCCIONES B) INSTRUCCIONES ORIENTADAS A OPERACIONES CON BITS
Fuente: PIC18F1220/1320 Data Sheet (DS39605F)
OPERACIONES PARA MODIFICAR EL ESTADO DE UN BIT OPERACIONES PARA TESTEAR EL ESTADO DE UN BIT
C) INSTRUCCIONES ORIENTADAS A OPERACIONES CON LITERALES (DATOS)
Fuente: PIC18F1220/1320 Data Sheet (DS39605F)
OPERACIONES PARA ARITMÉTICAS Y LÓGICAS CON LITERALES OPERACIONES PARA MOVIMIENTO DE LITERALES U.Na.M. – Facultad de Ingeniería – Técnicas Digitales 2 – Ing. Guillermo A. Fernández
CLASIFICACIÓN DE LAS INSTRUCCIONES D) INSTRUCCIONES ORIENTADAS AL CONTROL OPERACIONES PARA CONTROL DEL FLUJO DE PROGRAMA (SALTOS) - SALTOS RELATIVOS (Ej: BNC n) (CONDICIONALES) - SALTOS ABSOLUTOS (Ej: GOTO n) (INCONDICIONALES)
OPERACIONES PARA CONTROL DEL FUNCIONAMIENTO DEL MICROCONTROLADOR Permiten alterar de alguna forma el funcionamiento del microcontrolador. Fuente: PIC18F1220/1320 Data Sheet (DS39605F)
E) INSTRUCCIONES ORIENTADAS A OPERACIONES ENTRE MEMORIA DE DATOS Y DE PROGRAMA Este grupo de instrucciones permite transferir información desde la memoria de programa a la de datos y viceversa. Fuente: PIC18F1220/1320 Data Sheet (DS39605F) U.Na.M. – Facultad de Ingeniería – Técnicas Digitales 2 – Ing. Guillermo A. Fernández
MODOS DE DIRECCIONAMIENTO CONCEPTO El modo de direccionamiento de un operando o una instrucción, es la forma en que la CPU accede al mismo, para utilizarlo en la ejecución de determinada instrucción.
PIC18Fxxx Modos de Direccionamiento
A) INHERENTE O IMPLÍCITO B) INMEDIATO C) DIRECTO A REGISTRO y DIRECTO A BIT D) RELATIVO AL CONTADOR DE PROGRAMA E) INDIRECTO
A) DIRECCIONAMIENTO INHERENTE O IMPLÍCITO En este modo de direccionamiento el operando se encuentra implícito en el opcode, es decir el operando ya está incluido en el mnemónico de la instrucción. Por lo tanto una instrucción con este modo de direccionamiento ocupará sólo una palabra de 16 bits de la memoria de programa.
Ejemplos: Mnemónico
Operando
Comentarios
Instrucción 1
CLRWDT
; Borra el perro guardián
Instrucción 2
NOP
; No opera
Instrucción 3
RESET
; Resetea el Micro
U.Na.M. – Facultad de Ingeniería – Técnicas Digitales 2 – Ing. Guillermo A. Fernández
MODOS DE DIRECCIONAMIENTO B) DIRECCIONAMIENTO INMEDIATO En este modo de direccionamiento el dato se encuentra inmediatamente luego del opcode.
Ejemplos: Mnemónico
Operando
Comentarios
Instrucción 1
MOVLW
k
; WREG ← k
Instrucción 2
ADDLW
k
; WREG ← k + (WREG)
Instrucción 3
ANDLW
k
; WREG ← k & (WREG)
C1) DIRECCIONAMIENTO DIRECTO A REGISTRO En este modo de direccionamiento se trabaja con la dirección del dato o de la instrucción a utilizar. Para indicar la dirección de un dato, debe especificarse el banco de memoria RAM en que se encuentra la misma. Para esto el operando incluye el bit “a”. El operando de la instrucción también puede incluir el destino correspondiente al resultado de la ejecución de la instrucción, para esto se utiliza el bit “d”. Hay una sola instrucción que utiliza dos direcciones en el operando (ambas del Banco 0), una para el origen y la otra para el destino.
Ejemplos: Mnemónico
Operando
Comentarios
f, a
; Reg. f ← (WREG). ; Si a=0 → Reg. f es del Banco 0. ; Si a=1 → Reg. f es del banco definido por BSR.
COMF
f, d, a
; Si d=W: WREG← ← /(Reg. f) (complemento) ; Si d=F : Reg. f ← /(Reg. f) (complemento) ; Si a=0 → Reg. f es del Banco 0. ; Si a=1 → Reg. f es del banco definido por BSR.
MOVFF
fs, fd
; Reg. fd ← (Reg. fs) . Ambas direcciones en el Banco 0.
Instrucción 1
MOVWF
Instrucción 2
Instrucción 3
U.Na.M. – Facultad de Ingeniería – Técnicas Digitales 2 – Ing. Guillermo A. Fernández
FORMATO 1 FORMATO 2 FORMATO 3
MODOS DE DIRECCIONAMIENTO C2) DIRECCIONAMIENTO DIRECTO A BIT En este modo de direccionamiento, el operando posee la dirección del dato, información referente al banco de memoria en que se encuentra el dato (bit “a”) y el número de bit sobre el cual va a operar la instrucción (b= 0…7).
Ejemplo: Mnemónico Instrucción 1
BCF
Operando f, b, a
Comentarios ; Borra el bit número “b” del Reg. f. ; Si a=0 → Reg. f es del Banco 0. ; Si a=1 → Reg. f es del banco definido por BSR.
D) DIRECCIONAMIENTO RELATIVO AL CONTADOR DE PROGRAMA Este modo de direccionamiento es para acceder a instrucciones. Es utilizado específicamente con instrucciones de salto condicional e incondicional. En el caso de los saltos condicionales, la instrucción suma un offset al registro PC para ocasionar el salto a una dirección de memoria no necesariamente consecutiva a la que se está ejecutando. El offset es un número en formato de C2, para poder efectuar saltos hacia adelante (saltos con offset positivos) o hacia atrás (saltos con offset negativos) en el mapa de memoria de programa. En el caso de las instrucciones de salto incondicional, el registro PC es cargado con un valor especificado en la misma instrucción.
Ejemplos: Mnemónico
Operando
Comentarios
Instrucción 1
BNZ
n
; Si el bit ZERO = 0 (de STATUS), salta a la instrucción en ; la dirección de memoria obtenida a través de (PC) + n.
FORMATO 1
Instrucción 2
BRA
n
; Salta incondicionalmente a la instrucción en la ; dirección de memoria obtenida a través de (PC) + n.
FORMATO 2
Instrucción 3
GOTO
n
; Salta incondicionalmente a la posición de mem. “n”.
FORMATO 3
Instrucción 4
CALL
n,s
; Salta a la subrutina ubicada en la posición de memoria ; “n”. ; Si s=0 → No se guardan los reg. WREG, STATUS y BSR. ; Si s=FAST → Se guardan los reg. WREG, STATUS y BSR.
FORMATO 4
U.Na.M. – Facultad de Ingeniería – Técnicas Digitales 2 – Ing. Guillermo A. Fernández
MODOS DE DIRECCIONAMIENTO F) DIRECCIONAMIENTO INDIRECTO En este modo de direccionamiento se utiliza un registro de función especial (SFR) para apuntar a la posición de memoria que será escrita o leída por la instrucción. Es decir, en el registro SFR mencionado se almacena la dirección del dato con que trabajará la instrucción. Estos registros son tres: FSR0, FSR1 y FSR2 (registros de 16 bits). Almacenada la dirección en alguno de los registros FSRx, la instrucción deberá trabajar con el correspondiente registro de direccionamiento indirecto. Existen tres registros para direccionamiento indirecto: INDF0, INDF1 y INDF2 (registros de 8 bits). De esta forma, en el direccionamiento indirecto, si la instrucción lee o escribe sobre el registro INDF0, lo estará haciendo sobre la dirección de memoria almacenada en el registro FSR0 (es decir a donde apunta FSR0). Lo mismo sucede para los demás registros INDFx, con su respectivo FSRx.
FSR0 = FSR0H : FSR0L (FEAh : FE9h) FSR1 = FSR1H : FSR1L (FE2h : FE1h) FSR2 = FSR2H : FSR2L (FDAh : FD9h)
INDF0 = FEFh INDF1 = FE7h INDF2 = FDFh
Ejemplo: Mnemónico
Operando
Comentarios
LFSR
0, 0xA1
; Carga el registro FSR0 con A1h, dirección del dato.
CLR
INDF0
; Borra el dato en la posición de memoria A1h.
U.Na.M. – Facultad de Ingeniería – Técnicas Digitales 2 – Ing. Guillermo A. Fernández
MODOS DE DIRECCIONAMIENTO El modo de direccionamiento indirecto tiene un potencial importante, ya que permite considerar al dato como una variable. Para esto existen distintas variantes del modo, las cuales se indican a continuación:
-POSTINCx: Auto incremento de la dirección del dato, después de ejecutar la instrucción. -POSTDECx: Auto decremento de la dirección del dato, después de ejecutar la instrucción. -PREINCx: Auto incremento de la dirección del dato, antes de ejecutar la instrucción. -PLUSWx: Indirecto con offset. La dirección del dato es obtenida mediante la suma (FSRx) + (WREG). El contenido de WREG es considerado como un número con signo en complemento a 2. Los registros no son modificados al ejecutar la instrucción. Estas variantes permiten operar con bloques de datos que están ubicados en varias posiciones de memoria consecutivas (tablas), de manera sencilla utilizando pocas líneas de programa.
Ejemplos:
Mnemónico
Operando
Comentarios
CLRF
POSTDEC2
; Borra el dato ubicado en la dirección que apunta FSR2, ; luego decrementa en uno la dirección cargada en este ; el registro FSR2.
MOVWF
POSTINC0
; Carga el contenido de WREG en la dirección apuntada ; por FSR0 , luego incrementa en uno la dirección ; cargada en este el registro FSR0.
ADDWF
PREINC1,F
; Suma el contenido de WREG al dato de la dirección ; apuntada por FSR1 previo incrementado en 1. Luego de ; ejecutar la instrucción El registro FSR1 queda ; incrementado en 1. El resultado de la suma queda en la ; dirección resultante en FSR1.
MOVFF
PLUSW0,0x1A
; Mueve el dato que está en la dirección que resulta de ; sumar el contenido de WREG con FSR0, a la dirección 1Ah.
U.Na.M. – Facultad de Ingeniería – Técnicas Digitales 2 – Ing. Guillermo A. Fernández
FORMATOS DE LAS INSTRUCCIONES MODO INHERENTE O IMPLÍCITO
MODO INMEDIATO
Sólo para la instrucción LFSR f,k el literal “k” es de 12 bits y la instrucción utiliza 32 bits.
DIRECTO A REGISTRO FORMATO 1 FORMATO 2
FORMATO 3 (32 bits)
«Bit a»: Banco de memoria RAM 0 (ó A) → Banco 0 (Access Bank) 1 (ó BANKED) → Banco definido por BSR «Bit d»: Destino del resultado 0 ( ó W) → destino = WREG 1 ( ó F) → destino = ffff ffff
Sólo para MOVFF fs,fd
DIRECTO A BIT k: Literal de 8 bits (dato) f: Direcc. del dato (8 bits)
fs: Direcc. origen del dato (12 bits) fd: Direcc. destino del dato (12 bits)
bbb: Posición del bit
U.Na.M. – Facultad de Ingeniería – Técnicas Digitales 2 – Ing. Guillermo A. Fernández
MODOS DE DIRECCIONAMIENTO RELATIVO AL PC (Direccionamiento a instrucción)
FORMATO 1 n: Offset en complemento a 2, que se suma al reg. PC para efectuar el salto condicional (8 bits).
FORMATO 2
Sólo para BRA n
n: Offset en complemento a 2, que se suma al reg. PC para efectuar el salto condicional (11 bits).
FORMATO 3 (32 bits)
Sólo para GOTO n
La dirección “n” se carga al reg.PC para efectuar un salto incondicional
FORMATO 4 (32 bits)
Sólo para CALL n,s
La dirección “n” se carga al reg.PC para efectuar un salto incondicional n: Dirección de la siguiente instrucción (20 bits) «Bit s»: Fast Bit 0 → No guarda los reg. STATUS, WREG y BSR 1 → Guarda automáticamente los reg. STATUS, WREG y BSR U.Na.M. – Facultad de Ingeniería – Técnicas Digitales 2 – Ing. Guillermo A. Fernández
EJECUCIÓN DE INSTRUCCIONES DE SALTO SALTOS CORTOS (BRANCH)
Instrucciones Branch
Son los saltos producidos sumando un offset al contenido del registro PC. El offset es un valor «n» de ocho bits representado en complemento a 2 (-128 ≤ n ≤ +127), para que las instrucciones puedan efectuar saltos hacia adelante y hacia atrás en el programa.
Obtención de la dirección destino del salto: bnz
LEE
→
E1FB
Opcode = E1 Offset (n) = FB = 1111 1011 = -5 Dirección destino:
(PC) + 2 + 2n → PC
Archivo «*.lst» generado al ensamblar el programa (Muestra código máquina y código fuente)
000018h 24d + (-10d)= 14d = 00000Eh Entonces al ejecutarse «bnz LEE», el programa salta a la instrucción ubicada en la posición «00000E» para ejecutarla.
U.Na.M. – Facultad de Ingeniería – Técnicas Digitales 2 – Ing. Guillermo A. Fernández
EJECUCIÓN DE INSTRUCCIONES DE SALTO SALTOS LARGOS Son saltos producidos reemplazando el valor del registro PC por un valor «n» que contiene la instrucción. Este valor es una dirección de 20 bits. La dirección reemplaza los 20 bits mas significativos del registro PC (A20….A1), permaneciendo el bit A0=0.
Saltos largos
GOTO n CALL n,s
Obtención de la dirección destino del salto: goto
STOP
→
EF0C F000 EF 0C F0 00
Dirección destino:
PC = 0000C PC = 0 Archivo «*.lst» generado al ensamblar el programa (Muestra código máquina y código fuente)
PC = 000000000000000011000 = 000018h
U.Na.M. – Facultad de Ingeniería – Técnicas Digitales 2 – Ing. Guillermo A. Fernández