You are on page 1of 17

SISTEMAS MICROPROCESADOS Ejercicio para crear tablas de datos en la FLASH

Pag. 1

Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin
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 cdigos ASCII correspondiente a las letras del siguiente texto:

ESCUELA POLITECNICA NACIONAL


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

Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin
PRIMERA SOLUCIN

Esta solucin implica que el programa genere los cdigos 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 direccin 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 cdigos.

.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'
SISTEMAS MICROPROCESADOS Ejercicio para crear tablas de datos en la FLASH
Pag. 3

Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin
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 SOLUCIN

Como se puede apreciar la primera solucin no es una solucin eficiente. Lo que lleva al
desarrollo de esta segunda solucin, que consiste en un lazo de repeticin donde el
programa no es el que genera los cdigos, sino que los lee desde la memoria del
programa y los almacena en la SRAM.

Para implementar el algoritmo de esta solucin, se utiliza al Puntero X para almacenar
los cdigos en la SRAM y al Puntero Z (registros R30 y R31) para leerlos desde la
memoria del programa. La inicializacin de este ltimo puntero debe considerar que los
contenidos de la memoria del programa son de 16 bits, es decir que pueden contener dos
cdigos en cada localidad.

El registro R16 se lo utiliza para la transferencia del cdigo de la memoria del programa
hacia la SRAM y R17 es el contador para controlar el lazo de repeticin; es por eso, que
se los etiqueta como AUX y CONTADOR.
SISTEMAS MICROPROCESADOS Ejercicio para crear tablas de datos en la FLASH
Pag. 4

Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin
La tabla de cdigos 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
SISTEMAS MICROPROCESADOS Ejercicio para crear tablas de datos en la FLASH
Pag. 5

Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin
.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 atencin
(WARNING) en las lneas 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
SISTEMAS MICROPROCESADOS Ejercicio para crear tablas de datos en la FLASH
Pag. 6

Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin
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 atencin indican que los bytes constantes se los acopla con un byte de
cero, para no perder el alineamiento. Por lo tanto, para que sea solucin al problema es
necesario incluir dentro del lazo de repeticin, un incremento del Puntero Z mediante el
incremento del registro ZL (R30), como se indica a continuacin:

LAZO: LPM AUX,Z+
INC ZL
ST X+,AUX
DEC CONTADOR
BRNE LAZO

Esta modificacin a la solucin falla, cuando la tabla de datos que se crea se encuentra
en localidades donde cambia el bit 7 de la direccin.

TERCERA SOLUCIN

Se puede solucionar la dificultad de crear la tabla en forma correcta mediante la
utilizacin 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
SISTEMAS MICROPROCESADOS Ejercicio para crear tablas de datos en la FLASH
Pag. 7

Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin
.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 Mdulo Fuente ya no tiene mensajes de atencin ni errores, pero
no es la solucin al problema. Porque en el lazo de repeticin se lee primero el byte par
y luego el impar; es decir primero se lee el cdigo 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
SISTEMAS MICROPROCESADOS Ejercicio para crear tablas de datos en la FLASH
Pag. 8

Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin
000105 414c .DW 0x414C

La correccin de la tabla en la solucin ser intercambiar los bytes como se muestra a
continuacin:

.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

Tambin se puede crear la tabla con menos lneas.

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

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

Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin
Regresando a la segunda solucin, la creacin de la tabla se puede apreciar en forma
clara si se usa los mismos smbolos 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 atencin 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
SISTEMAS MICROPROCESADOS Ejercicio para crear tablas de datos en la FLASH
Pag. 10

Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin
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 tambin disminuir el nmero de lneas para crear la tabla, donde se eliminan
los mensajes de atencin en dos de esas lneas y se mantiene en las otras dos. Esto se
debe, a que las primeras tienen un nmero 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"

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

Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin
Por eso, se debe tener cuidado de crear tablas de bytes en un nmero 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"

Tambin se puede agrupar los caracteres dentro de comillas y mejorar la presentacin.

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 lnea 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"
SISTEMAS MICROPROCESADOS Ejercicio para crear tablas de datos en la FLASH
Pag. 12

Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin
nicamente cambiando la lnea que contiene el texto en comillas y el contador, este
mdulo fuente sirve para llenar las primeras localidades de la SRAM con los cdigos
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
SISTEMAS MICROPROCESADOS Ejercicio para crear tablas de datos en la FLASH
Pag. 13

Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin
.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 SOLUCIN

En esta solucin, se consigue al momento de ensamblar el nmero 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 nmero de
caracteres que es el valor inicial del contador para control del lazo de repeticin.

.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
SISTEMAS MICROPROCESADOS Ejercicio para crear tablas de datos en la FLASH
Pag. 14

Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin
;
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 atencin, que no afecta al funcionamiento del
programa; porque nicamente indica que la etiqueta FINTBL utilizada para calcular el
nmero de caracteres no est definida o est referida ms 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
SISTEMAS MICROPROCESADOS Ejercicio para crear tablas de datos en la FLASH
Pag. 15

Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin

QUINTA SOLUCIN

La solucin anterior necesita que la tabla de datos sea de un nmero par de bytes. En
caso de que el texto este conformado de un nmero impar de caracteres, se puede
utilizar esta nueva solucin que no se realiza a base a un lazo de repeticin controlado
por un contador; sino, a base a un lazo de repeticin que termina cuando se identifica un
carcter especial que se ubica al final del texto. El carcter especial escogido para este
ejemplo es el smbolo $

.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 atencin, 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 cdigos ASCII de
las letras y signos que forman los siguientes tres mensajes, separndolos entre ellos por
cuatro localidades.
SISTEMAS MICROPROCESADOS Ejercicio para crear tablas de datos en la FLASH
Pag. 16

Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin

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

La ejecucin del ensamblado de este programa se dificulta, por la obtencin del nmero
de caracteres de los textos en base al nmero de localidades que ocupan las tablas;
debido a que los mensajes de atencin se convierten en mensajes de error. Esto se
soluciona si trasladamos las lneas donde se definen los nmeros de caracteres y el
Segmento de Datos, despus de las lneas que crean las tablas; como se observa a
continuacin:

.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
;
SISTEMAS MICROPROCESADOS Ejercicio para crear tablas de datos en la FLASH
Pag. 17

Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin
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