1. SISTEMAS MICROPROCESADOS – Ejercicio para crear tablas de datos en la FLASH
Pag. 1
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
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
2. SISTEMAS MICROPROCESADOS – Ejercicio para crear tablas de datos en la FLASH
Pag. 2
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'
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
3. SISTEMAS MICROPROCESADOS – Ejercicio para crear tablas de datos en la FLASH
Pag. 3
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.
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
4. SISTEMAS MICROPROCESADOS – Ejercicio para crear tablas de datos en la FLASH
Pag. 4
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
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
5. SISTEMAS MICROPROCESADOS – Ejercicio para crear tablas de datos en la FLASH
Pag. 5
.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
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
6. SISTEMAS MICROPROCESADOS – Ejercicio para crear tablas de datos en la FLASH
Pag. 6
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
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
7. SISTEMAS MICROPROCESADOS – Ejercicio para crear tablas de datos en la FLASH
Pag. 7
.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
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
8. SISTEMAS MICROPROCESADOS – Ejercicio para crear tablas de datos en la FLASH
Pag. 8
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
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
9. SISTEMAS MICROPROCESADOS – Ejercicio para crear tablas de datos en la FLASH
Pag. 9
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”
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
10. SISTEMAS MICROPROCESADOS – Ejercicio para crear tablas de datos en la FLASH
Pag. 10
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"
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
11. SISTEMAS MICROPROCESADOS – Ejercicio para crear tablas de datos en la FLASH
Pag. 11
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"
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
12. SISTEMAS MICROPROCESADOS – Ejercicio para crear tablas de datos en la FLASH
Pag. 12
Ú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
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
13. SISTEMAS MICROPROCESADOS – Ejercicio para crear tablas de datos en la FLASH
Pag. 13
.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
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
14. SISTEMAS MICROPROCESADOS – Ejercicio para crear tablas de datos en la FLASH
Pag. 14
;
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
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
15. SISTEMAS MICROPROCESADOS – Ejercicio para crear tablas de datos en la FLASH
Pag. 15
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.
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
16. SISTEMAS MICROPROCESADOS – Ejercicio para crear tablas de datos en la FLASH
Pag. 16
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
;
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
17. SISTEMAS MICROPROCESADOS – Ejercicio para crear tablas de datos en la FLASH
Pag. 17
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
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información