PIC18F_Instrucciones y Modos de Direcc

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

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

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