Ejercicio 02 Tablas

17

Click here to load reader

description

Ejemplos para crear tablas de datos en la memoria

Transcript of Ejercicio 02 Tablas

Page 1: Ejercicio 02 Tablas

SISTEMAS MICROPROCESADOS – Ejercicio para crear tablas de datos en la FLASH Pag. 1

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

EJERCICIO PARA LLENAR LOCALIDADES

DE LA SRAM, CON EL CONTENIDO DE

TABLAS QUE SE CREAN EN LA MEMORIA

DEL PROGRAMA Desarrollar un programa que permita llenar las primeras localidades de la SRAM con los códigos ASCII correspondiente a las letras del siguiente texto:

ESCUELA POLITECNICA NACIONAL

Page 2: Ejercicio 02 Tablas

SISTEMAS MICROPROCESADOS – Ejercicio para crear tablas de datos en la FLASH Pag. 2

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

PRIMERA SOLUCIÓN Esta solución implica que el programa genere los códigos ASCII del texto, mediante el direccionamiento inmediato para luego almacenarlos en la SRAM mediante direccionamiento indirecto con post incremento. Para implementar el programa, el Puntero X (registros R26 y R27) es inicializado con la primera dirección de la SRAM, a la que se la etiqueta como DATOS. Y el registro R16, al que se lo etiqueta como AUX, se lo utiliza para generar los códigos. .NOLIST .INCLUDE "m164pdef.inc" .LIST ; .EQU NCOD = 28 ; .DEF AUX = R16 ; .DSEG DATOS: .BYTE NCOD ; .CSEG LDI XL,LOW(DATOS) LDI XH,HIGH(DATOS) LDI AUX,'E' ST X+,AUX LDI AUX,'S' ST X+,AUX LDI AUX,'C' ST X+,AUX LDI AUX,'U' ST X+,AUX LDI AUX,'E' ST X+,AUX LDI AUX,'L' ST X+,AUX LDI AUX,'A' ST X+,AUX LDI AUX,' ' ST X+,AUX LDI AUX,'P' ST X+,AUX LDI AUX,'O' ST X+,AUX LDI AUX,'L' ST X+,AUX LDI AUX,'I' ST X+,AUX LDI AUX,'T' ST X+,AUX LDI AUX,'E'

Page 3: Ejercicio 02 Tablas

SISTEMAS MICROPROCESADOS – Ejercicio para crear tablas de datos en la FLASH Pag. 3

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

ST X+,AUX LDI AUX,'C' ST X+,AUX LDI AUX,'N' ST X+,AUX LDI AUX,'I' ST X+,AUX LDI AUX,'C' ST X+,AUX LDI AUX,'A' ST X+,AUX LDI AUX,' ' ST X+,AUX LDI AUX,'N' ST X+,AUX LDI AUX,'A' ST X+,AUX LDI AUX,'C' ST X+,AUX LDI AUX,'I' ST X+,AUX LDI AUX,'O' ST X+,AUX LDI AUX,'N' ST X+,AUX LDI AUX,'A' ST X+,AUX LDI AUX,'L' ST X+,AUX ; FIN: RJMP FIN ; .EXIT ; FIN DEL MODULO FUENTE

SEGUNDA SOLUCIÓN Como se puede apreciar la primera solución no es una solución eficiente. Lo que lleva al desarrollo de esta segunda solución, que consiste en un lazo de repetición donde el programa no es el que genera los códigos, sino que los lee desde la memoria del programa y los almacena en la SRAM. Para implementar el algoritmo de esta solución, se utiliza al Puntero X para almacenar los códigos en la SRAM y al Puntero Z (registros R30 y R31) para leerlos desde la memoria del programa. La inicialización de este último puntero debe considerar que los contenidos de la memoria del programa son de 16 bits, es decir que pueden contener dos códigos en cada localidad. El registro R16 se lo utiliza para la transferencia del código de la memoria del programa hacia la SRAM y R17 es el contador para controlar el lazo de repetición; es por eso, que se los etiqueta como AUX y CONTADOR.

Page 4: Ejercicio 02 Tablas

SISTEMAS MICROPROCESADOS – Ejercicio para crear tablas de datos en la FLASH Pag. 4

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

La tabla de códigos ASCII que se crea en la memoria del programa, se la consigue mediante el uso de la Directiva DB que Define Byte o Bytes Constantes en la Memoria del Programa o en la EEPROM . .NOLIST .INCLUDE "m164pdef.inc" .LIST ; .EQU NCOD = 28 ; .DEF AUX = R16 .DEF CONTADOR = R17 ; .DSEG DATOS: .BYTE NCOD ; .CSEG LDI XL,LOW(DATOS) LDI XH,HIGH(DATOS) LDI ZL,LOW(TABLA<<1) LDI ZH,HIGH(TABLA<<1) LDI CONTADOR,NCOD LAZO: LPM AUX,Z+ ST X+,AUX DEC CONTADOR BRNE LAZO ; FIN: RJMP FIN ; TABLA: .DB 0x45 .DB 0x53 .DB 0x43 .DB 0x55 .DB 0x45 .DB 0x4C .DB 0x41 .DB 0x20 .DB 0x50 .DB 0x4F .DB 0x4C .DB 0x49 .DB 0x54 .DB 0x45 .DB 0x43 .DB 0x4E .DB 0x49 .DB 0x43 .DB 0x41 .DB 0x20 .DB 0x4E

Page 5: Ejercicio 02 Tablas

SISTEMAS MICROPROCESADOS – Ejercicio para crear tablas de datos en la FLASH Pag. 5

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

.DB 0x41 .DB 0x43 .DB 0x49 .DB 0x4F .DB 0x4E .DB 0x41 .DB 0x4C ; .EXIT ; FIN DEL MODULO FUENTE El resultado del ensamblado no tiene errores, pero si una serie de mensajes de atención (WARNING) en las líneas DB .LIST

;

.EQU NCOD = 28

;

.DEF AUX = R16

.DEF CONTADOR = R17

;

.DSEG

000100 DATOS: .BYTE NCOD

;

.CSEG

000000 e0a0 LDI XL,LOW(DATOS)

000001 e0b1 LDI XH,HIGH(DATOS)

000002 e1e4 LDI ZL,LOW(TABLA<<1)

000003 e0f0 LDI ZH,HIGH(TABLA<<1)

000004 e11c LDI CONTADOR,NCOD

000005 9105 LAZO: LPM AUX,Z+

000006 930d ST X+,AUX

000007 951a DEC CONTADOR

000008 f7e1 BRNE LAZO

;

000009 cfff FIN: RJMP FIN

;

C:\........asm(36): warning: .cseg .db misalignment - padding zero byte

00000a 0045 TABLA: .DB 0x45

C:\ ........asm(37): warning: .cseg .db misalignment - padding zero byte

00000b 0053 .DB 0x53

C:\ ........asm(38): warning: .cseg .db misalignment - padding zero byte

00000c 0043 .DB 0x43

C:\ ........asm(39): warning: .cseg .db misalignment - padding zero byte

00000d 0055 .DB 0x55

C:\ ........asm(40): warning: .cseg .db misalignment - padding zero byte

00000e 0045 .DB 0x45

C:\ ........asm(41): warning: .cseg .db misalignment - padding zero byte

00000f 004c .DB 0x4C

C:\ ........asm(42): warning: .cseg .db misalignment - padding zero byte

000010 0041 .DB 0x41

C:\ ........asm(43): warning: .cseg .db misalignment - padding zero byte

000011 0020 .DB 0x20

C:\ ........asm(44): warning: .cseg .db misalignment - padding zero byte

000012 0050 .DB 0x50

C:\ ........asm(45): warning: .cseg .db misalignment - padding zero byte

000013 004f .DB 0x4F

C:\ ........asm(46): warning: .cseg .db misalignment - padding zero byte

000014 004c .DB 0x4C

C:\ ........asm(47): warning: .cseg .db misalignment - padding zero byte

000015 0049 .DB 0x49

C:\ ........asm(48): warning: .cseg .db misalignment - padding zero byte

000016 0054 .DB 0x54

C:\ ........asm(49): warning: .cseg .db misalignment - padding zero byte

Page 6: Ejercicio 02 Tablas

SISTEMAS MICROPROCESADOS – Ejercicio para crear tablas de datos en la FLASH Pag. 6

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

000017 0045 .DB 0x45

C:\ ........asm(50): warning: .cseg .db misalignment - padding zero byte

000018 0043 .DB 0x43

C:\ ........asm(51): warning: .cseg .db misalignment - padding zero byte

000019 004e .DB 0x4E

C:\ ........asm(52): warning: .cseg .db misalignment - padding zero byte

00001a 0049 .DB 0x49

C:\ ........asm(53): warning: .cseg .db misalignment - padding zero byte

00001b 0043 .DB 0x43

C:\ ........asm(54): warning: .cseg .db misalignment - padding zero byte

00001c 0041 .DB 0x41

C:\ ........asm(55): warning: .cseg .db misalignment - padding zero byte

00001d 0020 .DB 0x20

C:\ ........asm(56): warning: .cseg .db misalignment - padding zero byte

00001e 004e .DB 0x4E

C:\ ........asm(57): warning: .cseg .db misalignment - padding zero byte

00001f 0041 .DB 0x41

C:\ ........asm(58): warning: .cseg .db misalignment - padding zero byte

000020 0043 .DB 0x43

C:\ ........asm(59): warning: .cseg .db misalignment - padding zero byte

000021 0049 .DB 0x49

C:\ ........asm(60): warning: .cseg .db misalignment - padding zero byte

000022 004f .DB 0x4F

C:\ ........asm(61): warning: .cseg .db misalignment - padding zero byte

000023 004e .DB 0x4E

C:\ ........asm(62): warning: .cseg .db misalignment - padding zero byte

000024 0041 .DB 0x41

C:\ ........asm(63): warning: .cseg .db misalignment - padding zero byte

000025 004c .DB 0x4C

Los mensajes de atención indican que los bytes constantes se los acopla con un byte de cero, para no perder el alineamiento. Por lo tanto, para que sea solución al problema es necesario incluir dentro del lazo de repetición, un incremento del Puntero Z mediante el incremento del registro ZL (R30), como se indica a continuación: LAZO: LPM AUX,Z+ INC ZL ST X+,AUX DEC CONTADOR BRNE LAZO Esta modificación a la solución falla, cuando la tabla de datos que se crea se encuentra en localidades donde cambia el bit 7 de la dirección.

TERCERA SOLUCIÓN Se puede solucionar la dificultad de crear la tabla en forma correcta mediante la utilización de la Directiva DW que Define Word o Palabras Constantes en la Memoria del Programa o en la EEPROM. .NOLIST .INCLUDE "m164pdef.inc" .LIST ; .EQU NCOD = 28 ; .DEF AUX = R16

Page 7: Ejercicio 02 Tablas

SISTEMAS MICROPROCESADOS – Ejercicio para crear tablas de datos en la FLASH Pag. 7

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

.DEF CONTADOR = R17

.DSEG DATOS: .BYTE NCOD ; .CSEG LDI XL,LOW(DATOS) LDI XH,HIGH(DATOS) LDI ZL,LOW(TABLA<<1) LDI ZH,HIGH(TABLA<<1) LDI CONTADOR,NCOD LAZO: LPM AUX,Z+ ST X+,AUX DEC CONTADOR BRNE LAZO ; FIN: RJMP FIN ; .ORG 0xF8 TABLA: .DW 0x4553 .DW 0x4355 .DW 0x454C .DW 0x4120 .DW 0x504F .DW 0x4C49 .DW 0x5445 .DW 0x434E .DW 0x4943 .DW 0x4120 .DW 0x4E41 .DW 0x4349 .DW 0x4F4E .DW 0x414C ; .EXIT ; FIN DEL MODULO FUENTE El ensamblado de este Módulo Fuente ya no tiene mensajes de atención ni errores, pero no es la solución al problema. Porque en el lazo de repetición se lee primero el byte par y luego el impar; es decir primero se lee el código ASCII de la S y luego el de la E y así sucesivamente. .ORG 0xF8

0000f8 4553 TABLA: .DW 0x4553

0000f9 4355 .DW 0x4355

0000fa 454c .DW 0x454C

0000fb 4120 .DW 0x4120

0000fc 504f .DW 0x504F

0000fd 4c49 .DW 0x4C49

0000fe 5445 .DW 0x5445

0000ff 434e .DW 0x434E

000100 4943 .DW 0x4943

000101 4120 .DW 0x4120

000102 4e41 .DW 0x4E41

000103 4349 .DW 0x4349

000104 4f4e .DW 0x4F4E

Page 8: Ejercicio 02 Tablas

SISTEMAS MICROPROCESADOS – Ejercicio para crear tablas de datos en la FLASH Pag. 8

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

000105 414c .DW 0x414C

La corrección de la tabla en la solución será intercambiar los bytes como se muestra a continuación: .ORG 0xF8 TABLA: .DW 0x5345 .DW 0x5543 .DW 0x4C45 .DW 0x2041 .DW 0x4F50 .DW 0x494C .DW 0x4554 .DW 0x4E43 .DW 0x4349 .DW 0x2041 .DW 0x414E .DW 0x4943 .DW 0x4E4F .DW 0x4C41 .ORG 0xF8

0000f8 5345 TABLA: .DW 0x5345

0000f9 5543 .DW 0x5543

0000fa 4c45 .DW 0x4C45

0000fb 2041 .DW 0x2041

0000fc 4f50 .DW 0x4F50

0000fd 494c .DW 0x494C

0000fe 4554 .DW 0x4554

0000ff 4e43 .DW 0x4E43

000100 4349 .DW 0x4349

000101 2041 .DW 0x2041

000102 414e .DW 0x414E

000103 4943 .DW 0x4943

000104 4e4f .DW 0x4E4F

000105 4c41 .DW 0x4C41

También se puede crear la tabla con menos líneas. TABLA: .DW 0x5345, 0x5543, 0x4C45, 0x2041, 0x4F50, 0x494C .DW 0x4554, 0x4E43, 0x4349, 0x2041, 0x414E .DW 0x4943, 0x4E4F, 0x4C41 0000f8 5345

0000f9 5543

0000fa 4c45

0000fb 2041

0000fc 4f50

0000fd 494c TABLA: .DW 0x5345,0x5543,0x4C45,0x2041,0x4F50,0x494C

0000fe 4554

0000ff 4e43

000100 4349

000101 2041

000102 414e .DW 0x4554,0x4E43,0x4349,0x2041,0x414E

000103 4943

000104 4e4f

000105 4c41 .DW 0x4943, 0x4E4F,0x4C41

Page 9: Ejercicio 02 Tablas

SISTEMAS MICROPROCESADOS – Ejercicio para crear tablas de datos en la FLASH Pag. 9

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

Regresando a la segunda solución, la creación de la tabla se puede apreciar en forma clara si se usa los mismos símbolos de las letras y del espacio en blanco entre comillas. TABLA: .DB "E" .DB "S" .DB "C" .DB "U" .DB "E" .DB "L" .DB "A" .DB " " .DB "P" .DB "O" .DB "L" .DB "I" .DB "T" .DB "E" .DB "C" .DB "N" .DB "I" .DB "C" .DB "A" .DB " " .DB "N" .DB "A" .DB "C" .DB "I" .DB "O" .DB "N" .DB "A" .DB "L" Pero, se mantienen los mensajes de atención ya analizados. C:\ .......asm(34): warning: .cseg .db misalignment - padding zero byte

00000a 0045 TABLA: .DB “E”

C:\ .......asm(35): warning: .cseg .db misalignment - padding zero byte

00000b 0053 .DB “S”

C:\ .......asm(36): warning: .cseg .db misalignment - padding zero byte

00000c 0043 .DB “C”

C:\ .......asm(37): warning: .cseg .db misalignment - padding zero byte

00000d 0055 .DB “U”

C:\ .......asm(38): warning: .cseg .db misalignment - padding zero byte

00000e 0045 .DB “E”

C:\ .......asm(39): warning: .cseg .db misalignment - padding zero byte

00000f 004c .DB “L”

C:\ .......asm(40): warning: .cseg .db misalignment - padding zero byte

000010 0041 .DB “A”

C:\ .......asm(41): warning: .cseg .db misalignment - padding zero byte

000011 0020 .DB “ ”

C:\ .......asm(42): warning: .cseg .db misalignment - padding zero byte

000012 0050 .DB “P”

C:\ .......asm(43): warning: .cseg .db misalignment - padding zero byte

000013 004f .DB “O”

C:\ .......asm(44): warning: .cseg .db misalignment - padding zero byte

000014 004c .DB “L”

Page 10: Ejercicio 02 Tablas

SISTEMAS MICROPROCESADOS – Ejercicio para crear tablas de datos en la FLASH Pag. 10

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

C:\ .......asm(45): warning: .cseg .db misalignment - padding zero byte

000015 0049 .DB “I”

C:\ .......asm(46): warning: .cseg .db misalignment - padding zero byte

000016 0054 .DB “T”

C:\ .......asm(47): warning: .cseg .db misalignment - padding zero byte

000017 0045 .DB “E”

C:\ .......asm(48): warning: .cseg .db misalignment - padding zero byte

000018 0043 .DB “C”

C:\ .......asm(49): warning: .cseg .db misalignment - padding zero byte

000019 004e .DB “N”

C:\ .......asm(50): warning: .cseg .db misalignment - padding zero byte

00001a 0049 .DB “I”

C:\ .......asm(51): warning: .cseg .db misalignment - padding zero byte

00001b 0043 .DB “C”

C:\ .......asm(52): warning: .cseg .db misalignment - padding zero byte

00001c 0041 .DB “A”

C:\ .......asm(53): warning: .cseg .db misalignment - padding zero byte

00001d 0020 .DB “ ”

C:\ .......asm(54): warning: .cseg .db misalignment - padding zero byte

00001e 004e .DB “N”

C:\ .......asm(55): warning: .cseg .db misalignment - padding zero byte

00001f 0041 .DB “A”

C:\ .......asm(56): warning: .cseg .db misalignment - padding zero byte

000020 0043 .DB “C”

C:\ .......asm(57): warning: .cseg .db misalignment - padding zero byte

000021 0049 .DB “I”

C:\ .......asm(58): warning: .cseg .db misalignment - padding zero byte

000022 004f .DB “O”

C:\ .......asm(59): warning: .cseg .db misalignment - padding zero byte

000023 004e .DB “N”

C:\ .......asm(60): warning: .cseg .db misalignment - padding zero byte

000024 0041 .DB “A”

C:\ .......asm(61): warning: .cseg .db misalignment - padding zero byte

000025 004c .DB “L”

Se puede también disminuir el número de líneas para crear la tabla, donde se eliminan los mensajes de atención en dos de esas líneas y se mantiene en las otras dos. Esto se debe, a que las primeras tienen un número par de caracteres y las otras no. TABLA: .DB "E","S","C","U","E","L","A"," " .DB "P","O","L","I","T","E","C","N","I","C","A"," " .DB "N","A","C","I","O","N","A" .DB "L" 0000f8 5345

0000f9 5543

0000fa 4c45

0000fb 2041 TABLA: .DB "E","S","C","U","E","L","A"," "

0000fc 4f50

0000fd 494c

0000fe 4554

0000ff 4e43

000100 4349

000101 2041 .DB "P","O","L","I","T","E","C","N","I","C","A"," "

000102 414e

000103 4943

000104 4e4f

C:\ .......asm(37): warning: .cseg .db misalignment - padding zero byte

000105 0041 .DB "N","A","C","I","O","N","A"

C:\ .......asm(38): warning: .cseg .db misalignment - padding zero byte

000106 004c .DB "L"

Page 11: Ejercicio 02 Tablas

SISTEMAS MICROPROCESADOS – Ejercicio para crear tablas de datos en la FLASH Pag. 11

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

Por eso, se debe tener cuidado de crear tablas de bytes en un número par, para evitar que se acoplen con byte cero debido al alineamiento. TABLA: .DB "E","S","C","U","E","L","A"," " .DB "P","O","L","I","T","E","C","N","I","C","A"," " .DB "N","A","C","I","O","N","A","L" 0000f8 5345

0000f9 5543

0000fa 4c45

0000fb 2041 TABLA: .DB "E","S","C","U","E","L","A"," "

0000fc 4f50

0000fd 494c

0000fe 4554

0000ff 4e43

000100 4349

000101 2041 .DB "P","O","L","I","T","E","C","N","I","C","A"," "

000102 414e

000103 4943

000104 4e4f

000105 4c41 .DB "N","A","C","I","O","N","A","L"

También se puede agrupar los caracteres dentro de comillas y mejorar la presentación. TABLA: .DB "ESCUELA " .DB "POLITECNICA " .DB "NACIONAL" 0000f8 5345

0000f9 5543

0000fa 4c45

0000fb 2041 TABLA: .DB "ESCUELA "

0000fc 4f50

0000fd 494c

0000fe 4554

0000ff 4e43

000100 4349

000101 2041 .DB "POLITECNICA "

000102 414e

000103 4943

000104 4e4f

000105 4c41 .DB "NACIONAL"

Por último, para este caso se puede tener una solo línea con la que se crea toda la tabla. TABLA: .DB "ESCUELA POLITECNICA NACIONAL" 0000f8 5345

0000f9 5543

0000fa 4c45

0000fb 2041

0000fc 4f50

0000fd 494c

0000fe 4554

0000ff 4e43

000100 4349

000101 2041

000102 414e

000103 4943

000104 4e4f

000105 4c41 TABLA: .DB "ESCUELA POLITECNICA NACIONAL"

Page 12: Ejercicio 02 Tablas

SISTEMAS MICROPROCESADOS – Ejercicio para crear tablas de datos en la FLASH Pag. 12

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

Únicamente cambiando la línea que contiene el texto en comillas y el contador, este módulo fuente sirve para llenar las primeras localidades de la SRAM con los códigos ASCII del texto:

FACULTAD DE INGENIERIA ELECTRICA Y ELECTRONICAS .NOLIST .INCLUDE "m164pdef.inc" .LIST ; .EQU NCOD = 47 ; .DEF AUX = R16 .DEF CONTADOR = R17 ; .DSEG DATOS: .BYTE NCOD ; .CSEG LDI XL,LOW(DATOS) LDI XH,HIGH(DATOS) LDI ZL,LOW(TABLA<<1) LDI ZH,HIGH(TABLA<<1) LDI CONTADOR,NCOD LAZO: LPM AUX,Z+ ST X+,AUX DEC CONTADOR BRNE LAZO ; FIN: RJMP FIN ; .ORG 0xF8 TABLA: .DB "FACULTAD DE INGENIERIA ELECTRICA Y ELECTRONICAS", 0 .LIST

;

.EQU NCOD = 47

;

.DEF AUX = R16

.DEF CONTADOR = R17

;

.DSEG

000060 DATOS: .BYTE NCOD

;

.CSEG

000000 e6a0 LDI XL,LOW(DATOS)

000001 e0b0 LDI XH,HIGH(DATOS)

000002 efe0 LDI ZL,LOW(TABLA<<1)

000003 e0f1 LDI ZH,HIGH(TABLA<<1)

000004 e311 LDI CONTADOR,NCOD

000005 9105 LAZO: LPM AUX,Z+

000006 930d ST X+,AUX

000007 951a DEC CONTADOR

000008 f7e1 BRNE LAZO

;

000009 cfff FIN: RJMP FIN

Page 13: Ejercicio 02 Tablas

SISTEMAS MICROPROCESADOS – Ejercicio para crear tablas de datos en la FLASH Pag. 13

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

.ORG $F8

0000f8 4146

0000f9 5543

0000fa 544c

0000fb 4441

0000fc 4420

0000fd 2045

0000fe 4e49

0000ff 4547

000100 494e

000101 5245

000102 4149

000103 4520

000104 454c

000105 5443

000106 4952

000107 4143

000108 5920

000109 4520

00010a 454c

00010b 5443

00010c 4f52

00010d 494e

00010e 4143

00010f 0053 TABLA .DB "FACULTAD DE INGENIERIA ELECTRICA Y ELECTRONICAS",0

CUARTA SOLUCIÓN En esta solución, se consigue al momento de ensamblar el número de caracteres que conforman el texto. Esto se hace mediante el uso de una etiqueta que indique donde termina la tabla, a la que se le resta la etiqueta del inicio para conocer cuantas localidades del programa ocupa. Este resultado multiplicado por dos será el número de caracteres que es el valor inicial del contador para control del lazo de repetición. .NOLIST .INCLUDE "m164pdef.inc" .LIST ; .EQU NCOD = (FINTBL-TABLA)*2 ; .DEF AUX = R16 .DEF CONTADOR = R17 ; .DSEG DATOS: .BYTE NCOD ; .CSEG LDI XL,LOW(DATOS) LDI XH,HIGH(DATOS) LDI ZL,LOW(TABLA<<1) LDI ZH,HIGH(TABLA<<1) LDI CONTADOR,NCOD LAZO: LPM AUX,Z+ ST X+,AUX DEC CONTADOR BRNE LAZO

Page 14: Ejercicio 02 Tablas

SISTEMAS MICROPROCESADOS – Ejercicio para crear tablas de datos en la FLASH Pag. 14

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

; FIN: RJMP FIN ; .ORG 0xF8 TABLA: .DB "ESTE CURSO ES EL MAS CHEVERE DE TODAS LAS CARRERAS" FINTBL: .DB 0,0 ; .EXIT ; FIN DEL MODULO FUENTE El ensamblado emite un solo mensaje de atención, que no afecta al funcionamiento del programa; porque únicamente indica que la etiqueta FINTBL utilizada para calcular el número de caracteres no está definida o está referida más adelante. .LIST

;

.EQU NCOD = (FINTBL-TABLA)*2

;

.DEF AUX = R16

.DEF CONTADOR = R17

;

.DSEG

000100 DATOS: .BYTE NCOD

;

.CSEG

000000 e0a0 LDI XL,LOW(DATOS)

000001 e0b1 LDI XH,HIGH(DATOS)

000002 efe0 LDI ZL,LOW(TABLA<<1)

000003 e0f1 LDI ZH,HIGH(TABLA<<1)

000004 e312 LDI CONTADOR,NCOD

000005 9105 LAZO: LPM AUX,Z+

000006 930d ST X+,AUX

000007 951a DEC CONTADOR

000008 f7e1 BRNE LAZO

;

000009 cfff FIN: RJMP FIN

;

.ORG 0xF8

0000f8 5345

0000f9 4554

0000fa 4320

0000fb 5255

0000fc 4f53

0000fd 4520

0000fe 2053

0000ff 4c45

000100 4d20

000101 5341

000102 4320

000103 4548

000104 4556

000105 4552

000106 4420

000107 2045

000108 4f54

000109 4144

00010a 2053

00010b 414c

00010c 2053

00010d 4143

00010e 5252

00010f 5245

000110 5341 TABLA: .DB "ESTE CURSO ES EL MAS CHEVERE DE TODAS LAS CARRERAS"

000111 0000 FINTBL: .DB 0,0

Page 15: Ejercicio 02 Tablas

SISTEMAS MICROPROCESADOS – Ejercicio para crear tablas de datos en la FLASH Pag. 15

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

QUINTA SOLUCIÓN La solución anterior necesita que la tabla de datos sea de un número par de bytes. En caso de que el texto este conformado de un número impar de caracteres, se puede utilizar esta nueva solución que no se realiza a base a un lazo de repetición controlado por un contador; sino, a base a un lazo de repetición que termina cuando se identifica un carácter especial que se ubica al final del texto. El carácter especial escogido para este ejemplo es el símbolo “$” .NOLIST .INCLUDE "m164pdef.inc" .LIST ; .EQU NCOD = (FINTBL-TABLA)*2 ; .DEF AUX = R16 ; .DSEG DATOS: .BYTE NCOD ; .CSEG LDI XL,LOW(DATOS) LDI XH,HIGH(DATOS) LDI ZL,LOW(TABLA<<1) LDI ZH,HIGH(TABLA<<1) LAZO: LPM AUX,Z+ CPI AUX,'$' BREQ FIN ST X+,AUX RJMP LAZO ; FIN: RJMP FIN ; .ORG 0xF8 TABLA: .DB "FACULTAD DE INGENIERIA ELECTRICA Y ELECTRONICAS$" FINTBL: .DB 0,0 ; .EXIT ; FIN DEL MODULO FUENTE Al ensamblar se emiten un mensaje de atención, que no afectan al funcionamiento del programa.

EJERCICIO PARA CREAR VARIAS TABLAS EN DISTINTAS LOCALIDADES DE LA SRAM Programa para llenar en las primeras localidades de la SRAM con los códigos ASCII de las letras y signos que forman los siguientes tres mensajes, separándolos entre ellos por cuatro localidades.

Page 16: Ejercicio 02 Tablas

SISTEMAS MICROPROCESADOS – Ejercicio para crear tablas de datos en la FLASH Pag. 16

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

ESCUELA POLITECNICA NACIONAL

FACULTAD DE INGENIERIA ELECTRICA Y ELECTRONICAS ESTE CURSO ES EL MAS CHEVERE DE TODAS LAS CARRERAS

La ejecución del ensamblado de este programa se dificulta, por la obtención del número de caracteres de los textos en base al número de localidades que ocupan las tablas; debido a que los mensajes de atención se convierten en mensajes de error. Esto se soluciona si trasladamos las líneas donde se definen los números de caracteres y el Segmento de Datos, después de las líneas que crean las tablas; como se observa a continuación: .NOLIST .INCLUDE "m164pdef.inc" .LIST ; .DEF AUX = R16 .DEF CONTADOR = R17 ; .CSEG LDI XL,LOW(DATOS1) LDI XH,HIGH(DATOS1) LDI ZL,LOW(TBL1<<1) LDI ZH,HIGH(TBL1<<1) LDI CONTADOR,NCOD1 LAZO1: LPM AUX,Z+ ST X+,AUX DEC CONTADOR BRNE LAZO1 ; LDI XL,LOW(DATOS2) LDI XH,HIGH(DATOS2) LDI ZL,LOW(TBL2<<1) LDI ZH,HIGH(TBL2<<1) LDI CONTADOR,NCOD2 LAZO2: LPM AUX,Z+ ST X+,AUX DEC CONTADOR BRNE LAZO2 ; LDI XL,LOW(DATOS3) LDI XH,HIGH(DATOS3) LDI ZL,LOW(TBL3<<1) LDI ZH,HIGH(TBL3<<1) LDI CONTADOR,NCOD3 LAZO3: LPM AUX,Z+ ST X+,AUX DEC CONTADOR BRNE LAZO3 ;

Page 17: Ejercicio 02 Tablas

SISTEMAS MICROPROCESADOS – Ejercicio para crear tablas de datos en la FLASH Pag. 17

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

FIN: RJMP FIN ; .ORG 0xF8 TBL1: .DB "ESCUELA POLITECNICA NACIONAL" TBL2: .DB "FACULTAD DE INGENIERIA ELECTRICA Y ELECTRONICAS",0 TBL3: .DB "ESTE CURSO ES EL MAS CHEVERE DE TODAS LAS CARRERAS" FTBL: .DB 0,0 ; .EQU NCOD1 = (TBL2-TBL1)*2 .EQU NCOD2 = (TBL3-TBL2)*2 - 1 .EQU NCOD3 = (FTBL-TBL3)*2 ; .DSEG DATOS1: .BYTE NCOD1 SEPAR1: .BYTE 4 DATOS2: .BYTE NCOD2 SEPAR2: .BYTE 4 DATOS3: .BYTE NCOD3 ; .EXIT ; FIN DEL MODULO FUENTE