Anda di halaman 1dari 18

SISTEMAS MICROPROCESADOS: Ejercicios para crear tablas de datos en la FLASH

Pgina 1

EJERCICIO PARA LLENAR LOCALIDADES DE


LA SRAM, MEDIANTE TABLAS QUE SE CREAN
EN LA MEMORIA DEL PROGRAMA
ENUNCIADO:
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

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


de Informacin

SISTEMAS MICROPROCESADOS: Ejercicios para crear tablas de datos en la FLASH


Pgina 2

PRIMERA SOLUCIN
Esta solucin implica que el programa genere los cdigos ASCII del texto, mediante el
direccionamiento inmediato y luego almacene 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 se lo utiliza para generar los cdigos, al que se lo
etiqueta como AUX.
.NOLIST
.INCLUDE m164pdef.inc
.LIST
;
.EQU
NCOD = 28
.DEF
AUX = R16
;
.DSEG
DATOS:
.BYTE
;
.CSEG
LDI
LDI
LDI
ST
LDI
ST
LDI
ST
LDI
ST
LDI
ST
LDI
ST
LDI
ST
LDI
ST
LDI
ST
LDI
ST
LDI
ST
LDI
ST
LDI
ST
LDI
ST

NCOD
XL,LOW(DATOS)
XH,HIGH(DATOS)
AUX,'E'
X+,AUX
AUX,'S'
X+,AUX
AUX,'C'
X+,AUX
AUX,'U'
X+,AUX
AUX,'E'
X+,AUX
AUX,'L'
X+,AUX
AUX,'A'
X+,AUX
AUX,' '
X+,AUX
AUX,'P'
X+,AUX
AUX,'O'
X+,AUX
AUX,'L'
X+,AUX
AUX,'I'
X+,AUX
AUX,'T'
X+,AUX
AUX,'E'
X+,AUX

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


de Informacin

SISTEMAS MICROPROCESADOS: Ejercicios para crear tablas de datos en la FLASH


Pgina 3

;
FIN:
;
.EXIT

LDI
ST
LDI
ST
LDI
ST
LDI
ST
LDI
ST
LDI
ST
LDI
ST
LDI
ST
LDI
ST
LDI
ST
LDI
ST
LDI
ST
LDI
ST
LDI
ST

AUX,'C'
X+,AUX
AUX,'N'
X+,AUX
AUX,'I'
X+,AUX
AUX,'C'
X+,AUX
AUX,'A'
X+,AUX
AUX,' '
X+,AUX
AUX,'N'
X+,AUX
AUX,'A'
X+,AUX
AUX,'C'
X+,AUX
AUX,'I'
X+,AUX
AUX,'O'
X+,AUX
AUX,'N'
X+,AUX
AUX,'A'
X+,AUX
AUX,'L'
X+,AUX

RJMP

FIN

; FIN DEL MODULO FUENTE

VENTANA DE LA MEMORIA DESPUS DE LA EJECUCIN DEL


PROGRAMA EN EL SIMULADOR

28 Localidades que se llenan

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


de Informacin

SISTEMAS MICROPROCESADOS: Ejercicios para crear tablas de datos en la FLASH


Pgina 4

SEGUNDA SOLUCIN
Como se puede apreciar la primera solucin no es una solucin eficiente. Lo que lleva al
desarrollo de la 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.
Al 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 contienen dos
cdigos en cada localidad, uno en el byte par y otro en el bytes impar.
El registro R16 se lo utiliza para la transferencia del cdigo ASCII 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.

Byte Impar

Byte Par

La tabla de cdigos ASCII se crea en la memoria del programa utilizando en el Mdulo


Fuente la Directiva .DB que Define Bytes Constantes que ocupan localidades de la
Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes
de Informacin

SISTEMAS MICROPROCESADOS: Ejercicios para crear tablas de datos en la FLASH


Pgina 5

FLASH o de la EEPROM. Adems, a la primera lnea de estas directivas se la etiqueta


para que el Assembler la utilice como la direccin de inicio de la tabla cuando inicialice
el Puntero Z.
.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
;
.ORG
$50
TABLA:
.DB
0x45
.DB
0x53
.DB
0x43
.DB
0x55
.DB
0x45
.DB
0x4C
.DB
0x41
.DB
0x20
.DB
0x51
.DB
0x4F
.DB
0x4C
.DB
0x49
.DB
0x54
.DB
0x45
.DB
0x43
.DB
0x4E
.DB
0x49
.DB
0x43
.DB
0x41
.DB
0x20
.DB
0x4E
.DB
0x41
Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes
de Informacin

SISTEMAS MICROPROCESADOS: Ejercicios para crear tablas de datos en la FLASH


Pgina 6

.DB
.DB
.DB
.DB
.DB
.DB
;
.EXIT

0x43
0x49
0x4F
0x4E
0x41
0x4C

; FIN DEL MODULO FUENTE

Para inicializar el Puntero Z se utilizan las instrucciones:


LDI
LDI

ZL,LOW(TABLA<<1)
ZH,HIGH(TABLA<<1)

Donde los smbolos <<1, corresponde al operador de desplazamiento binario de una


posicin, hacia la izquierda.
Esta forma de iniciar al Puntero Z se justifica por lo siguiente:

Las instrucciones para leer desde la memoria del programa son LPM (Load
Program Memory), en las que la direccin del operando de origen en forma
explcita o implcita es el contenido del Puntero Z.
Los contenidos de la memoria de programa son de una palabra, 16 bits o 2 bytes,
el byte par y el impar; es decir que, para leer se necesita ejecutar 2 instrucciones
LPM.
El Puntero Z contiene la direccin de la localidad de la FLASH y un indicador
para establecer si la lectura es del byte par (0) o del byte impar (1).
El indicador del byte que se lee, es el bit menos significativo del Puntero Z.
La primera lectura dentro del lazo de repeticin corresponde al byte par de
localidad inicial de la tabla.

Por lo tanto, el valor del Puntero Z (ZH y ZL) antes de ingresar en el lazo de repeticin
es igual al valor de la etiqueta TABLA desplazado una posicin a la izquierda. Tambin
se suele utilizar las siguientes instrucciones con el operador de multiplicacin, que
tienen el mismo efecto anterior:
LDI
LDI

ZL,LOW(TABLA*2)
ZH,HIGH(TABLA*2)

Para el presente ejemplo, con el valor de la etiqueta TABLA igual a $0050, el valor
inicial del Puntero Z ser $00A0.
$0050 = 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0
Un desplazamiento a la izquierda.
$00A0 = 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0

Direccin de la FLASH

Para Byte
Par

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


de Informacin

SISTEMAS MICROPROCESADOS: Ejercicios para crear tablas de datos en la FLASH


Pgina 7

Finalmente, el resultado del ensamblado no tiene errores, por lo que si se crea el


Mdulo Objeto; pero existen 28 mensajes de advertencia (WARNING) en las 28 lneas
DB que crean la tabla de datos en la FLASH y que pueden influenciar en el mal
funcionamiento del programa. Precisamente ese es el caso, el programa no cumple lo
solicitado.
VENTANA DE LA MEMORIA DESPUS DE LA EJECUCIN DE LA
SEGUNDA SOLUCIN QUE NO CUMPLE CON LO SOLICITADO

28 Localidades llenas

No es lo solicitado

Uno de los mensajes de advertencia, similar a los restantes, dice:


C:\Users\JVelarde\Documents\ATmega\AVRStudio\Tablas\Tabla02\Tabla02.as
m(26): warning: .cseg .db misalignment - padding zero byte
000050 0045
TABLA: .DB
0x45

Esto significa que con la Directiva DB al crear el byte de la constante lo rellena con un
byte de ceros, para no perder el alineamiento de palabras que tiene la memoria de
programa. Es decir, que no solo se han creado los 28 bytes de los cdigos ASCII sino 28
palabras con los cdigos ASCII acompaados de un byte de ceros; tal como se observa
en la ventana de la memoria del programa del simulador.

Cdigo de Mquina del Programa

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

SISTEMAS MICROPROCESADOS: Ejercicios para crear tablas de datos en la FLASH


Pgina 8

Grficamente la tabla que se ha creado es:


Byte Impar

Byte Par

Para solucionar este inconveniente, es necesario incluir dentro del lazo de repeticin, un
incremento adicional del Puntero Z mediante la ejecucin de la lectura del byte impar
que no se almacena, como se indica a continuacin:
Lectura del byte par
LAZO:
LPM
AUX,Z+
ST
X+,AUX
LPM
AUX,Z+
Lectura del byte impar
DEC
CONTADOR
BRNE
LAZO
Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes
de Informacin

SISTEMAS MICROPROCESADOS: Ejercicios para crear tablas de datos en la FLASH


Pgina 9

TERCERA SOLUCIN
Para no desperdiciar espacios de memoria de programa al crear tablas, se utiliza la
Directiva .DW que Define Word o Palabras Constantes que ocupan localidades de la
Memoria del Programa o de la EEPROM, quedando la codificacin de la siguiente
forma:
.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
;
.ORG
$50
TABLA:
.DW
0x4553
.DW
0x4355
.DW
0x454C
.DW
0x4120
.DW
0x514F
.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 no tiene mensajes de advertencia ni de errores,
pero no resuelve el problema. Porque en el lazo de repeticin se lee primero el byte par
Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes
de Informacin

SISTEMAS MICROPROCESADOS: Ejercicios para crear tablas de datos en la FLASH


Pgina 10

y luego el impar; es decir primero se lee el cdigo ASCII de la S y luego el de la E y as


sucesivamente.
VENTANA DE LA MEMORIA DESPUS DE LA EJECUCIN DE LA
TERCERA SOLUCIN QUE NO CUMPLE CON LO SOLICITADO

La solucin ser intercambiar los bytes en las palabras, como se muestra a continuacin:
TABLA:

.DW
.DW
.DW
.DW
.DW
.DW
.DW
.DW
.DW
.DW
.DW
.DW
.DW
.DW

0x5345
0x5543
0x4C45
0x2041
0x4F51
0x494C
0x4554
0x4E43
0x4349
0x2041
0x414E
0x4943
0x4E4F
0x4C41

Tambin se puede crear la tabla con menos lneas de cdigo, separando las constantes
por comas.
TABLA:

.DW
.DW
.DW

0x5345, 0x5543, 0x4C45, 0x2041


0x4F51, 0x494C, 0x4554, 0x4E43, 0x4349, 0x2041
0x414E, 0x4943, 0x4E4F, 0x4C41

Regresando a la segunda solucin, la creacin de la tabla se puede apreciar en forma


ms explcita si se usa los mismos smbolos ASCII entre comillas.
TABLA:

.DB
.DB
.DB
.DB
.DB
.DB
.DB

E
S
C
U
E
L
A

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


de Informacin

SISTEMAS MICROPROCESADOS: Ejercicios para crear tablas de datos en la FLASH


Pgina 11

.DB
.DB
.DB
.DB
.DB
.DB
.DB
.DB
.DB
.DB
.DB
.DB
.DB
.DB
.DB
.DB
.DB
.DB
.DB
.DB
.DB


P
O
L
I
T
E
C
N
I
C
A

N
A
C
I
O
N
A
L

Pero, se mantienen los mensajes de advertencia ya analizados. Tambin se puede


disminuir el nmero de lneas para crear la tabla, donde se mantienen los mensajes de
advertencia en las dos primeras de esas lneas y se elimina en la ltima. Esto se debe, a
que la ltima tiene un nmero par de constantes y las otras no.
TABLA:

.DB
.DB
.DB

E, S, C, U, E, L, A
, P, O, L, I, T, E, C, N, I, C, A,
N, A, C, I, O, N, A, L

00000a 5345
00000b 5543
00000c 4c45
C:\Users\JVelarde\Documents\ATmega\AVRStudio\Tablas\Tabla07\Tabla07.as
m(25): warning: .cseg .db misalignment - padding zero byte
00000d 0041
TABLA: .DB
"E","S","C","U","E","L","A"
00000e 5020
00000f 4c4f
000010 5449
000011 4345
000012 494e
000013 4143
C:\Users\JVelarde\Documents\ATmega\AVRStudio\Tablas\Tabla07\Tabla07.as
m(26): warning: .cseg .db misalignment - padding zero byte
000014 0020
.DB
"
","P","O","L","I","T","E","C","N","I","C","A"," "
000015 414e
000016 4943
000017 4e4f
000018 4c41
.DB
"N","A","C","I","O","N","A","L"

Por eso, se debe tener cuidado de crear tablas de bytes en un nmero par de constantes,
para evitar que se rellenen con bytes de ceros debido al alineamiento.

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


de Informacin

SISTEMAS MICROPROCESADOS: Ejercicios para crear tablas de datos en la FLASH


Pgina 12

TABLA:

.DB
.DB
.DB

E, S, C, U, E, L, A,
P, O, L, I, T, E, C, N, I, C, A,
N, A, C, I, O, N, A, L

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


presentacin.
TABLA:

00000a
00000b
00000c
00000d
00000e
00000f
000010
000011
000012
000013
000014
000015
000016
000017

.DB
.DB
.DB

5345
5543
4c45
2041
4f50
494c
4554
4e43
4349
2041
414e
4943
4e4f
4c41

ESCUELA
POLITECNICA
NACIONAL

TABLA: .DB

"ESCUELA "

.DB

"POLITECNICA "

.DB

"NACIONAL"

Por ltimo, para este caso se puede tener una solo lnea con la que se crea toda la tabla.
TABLA:
00000a
00000b
00000c
00000d
00000e
00000f
000010
000011
000012
000013
000014
000015
000016
000017

.DB

5345
5543
4c45
2041
4f50
494c
4554
4e43
4349
2041
414e
4943
4e4f
4c41

ESCUELA POLITECNICA NACIONAL

TABLA: .DB

"ESCUELA POLITECNICA NACIONAL"

nicamente cambiando la lnea que contiene el texto en comillas y el valor inicial del
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

Valor inicial del contador

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


de Informacin

SISTEMAS MICROPROCESADOS: Ejercicios para crear tablas de datos en la FLASH


Pgina 13

.DEF
;
.DSEG
DATOS:
;
.CSEG

LAZO:

;
FIN:
;
TABLA:

CONTADOR = R17
.BYTE

NCOD

LDI
LDI
LDI
LDI
LDI
LPM
ST
DEC
BRNE

XL,LOW(DATOS)
XH,HIGH(DATOS)
ZL,LOW(TABLA<<1)
ZH,HIGH(TABLA<<1)
CONTADOR,NCOD
AUX,Z+
X+,AUX
CONTADOR
LAZO

RJMP

FIN

.DB

FACULTAD DE INGENIERIA ELECTRICA Y ELECTRONICAS,0

VENTANA DE LA MEMORIA DESPUS DE LA EJECUCIN DE LA


SEGUNDA SOLUCIN, CON LA MODIFICACIN DEL TEXTO Y DEL
CONTADOR

MODIFICACIN AL
SEGUNDA SOLUCIN

MDULO

FUENTE

DE

LA

Con esta modificacin se consigue que el ensamblador se encargue de obtener el


nmero de caracteres que conforman el texto. Esto se realiza mediante con una etiqueta
que determine donde termina la tabla, a la que se le resta la etiqueta del inicio para
conocer cuantas localidades del programa ocupa la tabla. 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
;
Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes
de Informacin

SISTEMAS MICROPROCESADOS: Ejercicios para crear tablas de datos en la FLASH


Pgina 14

.EQU
.DEF
.DEF
;
.DSEG
DATOS:
;
.CSEG

LAZO:

;
FIN:
;
TABLA:
FINTBL:

NCOD = (FINTBL TABLA) * 2


AUX = R16
CONTADOR = R17
Clculo del valor
inicial del contador

.BYTE

NCOD

LDI
LDI
LDI
LDI
LDI
LPM
ST
DEC
BRNE

XL,LOW(DATOS)
XH,HIGH(DATOS)
ZL,LOW(TABLA<<1)
ZH,HIGH(TABLA<<1)
CONTADOR,NCOD
AUX,Z+
X+,AUX
CONTADOR
LAZO

RJMP

FIN

.DB

ESTE CURSO ES EL MAS CHEVERE DE TODAS LAS CARRERAS

El ensamblador emite un solo mensaje de advertencia, 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.
VENTANA DE LA MEMORIA DESPUS DE LA EJECUCIN DE LA
SEGUNDA SOLUCIN, CON LA MODIFICACIN DEL TEXTO Y LA
INCLUSIN DEL CLCULO DEL CONTADOR

CUARTA SOLUCIN
La modificacin 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

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


de Informacin

SISTEMAS MICROPROCESADOS: Ejercicios para crear tablas de datos en la FLASH


Pgina 15

carcter especial que se ubica al final del texto. El carcter especial escogido para este
ejemplo es el smbolo $.
.NOLIST
.INCLUDE m164pdef.inc
.LIST
;
.DEF
AUX = R16
;
.DSEG
DATOS:
.BYTE
;
.CSEG
LDI
LDI
LDI
LDI
LAZO:
LPM
CPI
BREQ
ST
RJMP
;
FIN:
RJMP
;
TABLA:
.DB

100

Reservar 100
localidades

XL,LOW(DATOS)
XH,HIGH(DATOS)
ZL,LOW(TABLA<<1)
ZH,HIGH(TABLA<<1)
AUX,Z+
AUX,`$
FIN
X+,AUX
LAZO
FIN
FACULTAD DE INGENIERIA ELECTRICA Y ELECTRONICAS$

EJERCICIO PARA CREAR VARIAS TABLAS EN LA


SRAM, SEPARADAS ENTRE SI
Programa para llenar las primeras localidades de la SRAM con los cdigos ASCII de las
letras que forman los siguientes tres mensajes, separando con 20 localidades entre el
primero y el segundo, y con 17 localidades entre el segundo y el tercero.
ESCUELA POLITECNICA NACIONAL
FACULTAD DE INGENIERIA ELECTRICA Y ELECTRONICAS
ESTE CURSO ES EL MAS CHEVERE DE TODAS LAS CARRERAS
El proceso de 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 advertencia 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
;
Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes
de Informacin

SISTEMAS MICROPROCESADOS: Ejercicios para crear tablas de datos en la FLASH


Pgina 16

.CSEG

LAZO1:

LDI
LDI
LDI
LDI
LDI
LPM
ST
DEC
BRNE

XL,LOW(DATOS1)
XH,HIGH(DATOS1)
ZL,LOW(TBL1<<1)
ZH,HIGH(TBL1<<1)
CONTADOR,NCOD1
AUX,Z+
X+,AUX
CONTADOR
LAZO1

LDI
LDI
LDI
LDI
LDI
LPM
ST
DEC
BRNE

XL,LOW(DATOS2)
XH,HIGH(DATOS2)
ZL,LOW(TBL2<<1)
ZH,HIGH(TBL2<<1)
CONTADOR,NCOD2
AUX,Z+
X+,AUX
CONTADOR
LAZO2

LDI
LDI
LDI
LDI
LDI
LPM
ST
DEC
BRNE
RJMP

XL,LOW(DATOS3)
XH,HIGH(DATOS3)
ZL,LOW(TBL3<<1)
ZH,HIGH(TBL3<<1)
CONTADOR,NCOD3
AUX,Z+
X+,AUX
CONTADOR
LAZO3
FIN

.DB
.DB
.DB

ESCUELA POLITECNICA NACIONAL

LAZO2:

LAZO3:

FIN:
;
TBL1:
TBL2:
TBL3:
FINTBL:
;
.EQU
.EQU
.EQU
;
.DSEG
DATOS1:
SEPAR1:
DATOS2:
SEPAR2:
DATOS3:
;
.EXIT

FACULTAD DE INGENIERIA ELECTRICA Y ELECTRONICAS,0


ESTE CURSO ES EL MAS CHEVERE DE TODAS LAS CARRERAS

NCOD1 = (FINTBL TBL3) * 2


NCOD2 = (TBL3 TBL2) * 2 - 1
NCOD3 = (FINTBL TBL3) * 2
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE

NCOD1
20
NCOD2
17
NCOD3

; FIN DEL MODULO FUENTE

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


de Informacin

SISTEMAS MICROPROCESADOS: Ejercicios para crear tablas de datos en la FLASH


Pgina 17

VENTANA DE LA MEMORIA DESPUS DE LA EJECUCIN DEL


PROGRAMA QUE CREA TRES TABLAS DE DATOS

Tambin se puede codificar este programa utilizando macroinstrucciones y subrutinas.


.NOLIST
.INCLUDE m164pdef.inc
.LIST
;
.DEF
AUX = R16
.DEF
CONTADOR = R17
;
.CSEG
.MACRO
INICIAR
LDI
XL,LOW(@0)
LDI
XH,HIGH(@0)
LDI
ZL,LOW(@1<<1)
LDI
ZH,HIGH(@1<<1)
LDI
CONTADOR,@2
.ENDMACRO
;
LDI
AUX,LOW(RAMEND)
OUT
SPL,AUX
LDI
AUX,HIGH(RAMEND)
OUT
SPH,AUX
;
INICIAR
DATOS1,TBL1,NCOD1
RCALL
LAZO
;
INICIAR
DATOS2,TBL2,NCOD2
RCALL
LAZO
;
INICIAR
DATOS3,TBL3,NCOD3
RCALL
LAZO
;
FIN:
RJMP
FIN
Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes
de Informacin

SISTEMAS MICROPROCESADOS: Ejercicios para crear tablas de datos en la FLASH


Pgina 18

;
LAZO:

;
TBL1:
TBL2:
TBL3:
FINTBL:
;
.EQU
.EQU
.EQU
;
.DSEG
DATOS1:
SEPAR1:
DATOS2:
SEPAR2:
DATOS3:
;
.EXIT

LPM
ST
DEC
BRNE
RET

AUX,Z+
X+,AUX
CONTADOR
LAZO

.DB
.DB
.DB

ESCUELA POLITECNICA NACIONAL


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

NCOD1 = (FINTBL TBL3) * 2


NCOD2 = (TBL3 TBL2) * 2 - 1
NCOD3 = (FINTBL TBL3) * 2
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE

NCOD1
20
NCOD2
17
NCOD3

; FIN DEL MODULO FUENTE

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


de Informacin