Ejercicio 02 Tablas

2.232 visualizaciones

Publicado el

Ejemplos para crear tablas de datos en la memoria

Publicado en: Educación
0 comentarios
1 recomendación
Estadísticas
Notas
  • Sé el primero en comentar

Sin descargas
Visualizaciones
Visualizaciones totales
2.232
En SlideShare
0
De insertados
0
Número de insertados
2
Acciones
Compartido
0
Descargas
362
Comentarios
0
Recomendaciones
1
Insertados 0
No insertados

No hay notas en la diapositiva.

Ejercicio 02 Tablas

  1. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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

×