Vous êtes sur la page 1sur 7

2 Escribir los cambios que se debe realizar en el programa para dejar los dos nombres

almacenados en la SRAM en orden alfabético, es decir se debe pasar en el ejemplo CHARLES a


NOMBRE1 y CHARLIE a NOMBRE2; y probar el programa con los cambios. Incluir su nuevo
programa y capturas de pantallas para mostrar los resultados de su trabajo.

El código es prácticamente el mismo, los cambio realizados son los siguientes


1) Se alterará el número de bytes necesarios de los mensajes a solo el número de bytes de
los nombres.
2) Retirar las instrucciones de escritura en la flash de los nombres de los estudiantes a los
espacios asignados al principio del codigo, ya que se escribirá estos nombres después de la
comparación.
3) En los casos que se presenten después de la comparación alterar el mensaje que se va a
recibir, y en lugar de escribir el texto de la tabla se escribirá los nombres de los estudiantes
en el orden la situación lo requiera

Codigo:
;INFORME
.dseg ;para que el micro trabaje en la ram
.org 0x100 ;ubicacion en la ram
NOMBRE1: .byte 18 ;espacio de 18 byts en la ram para nombre1
MENSAJE1: .byte 18 ;espacio de 12 byts en la ram para mensaje1
NOMBRE2: .byte 18 ;espacio de 18 byts en la ram para nombre2
MENSAJE2: .byte 18 ;espacio de 12 byts en la ram para mensaje2

.cseg ;para trabajar en los registros


.org 0x00 ;ubicacion en el registro

ldi r16,18 ;cargo r16 con 18 # de letras en nombre

ldi zh,high(EST1<<1) ;apunto el puntero z a la flash con est1


ldi zl,low(EST1<<1)
ldi xh,high(NOMBRE1) ;apunto el puntero x a la ram con nombre 1
ldi xl,low(NOMBRE1)

ldi r17,0 ;r17 cargo con 0 (primer valor)


add zl,r17 ;sumo 0 a la direccion de zl
clr r18 ;cargo con 0 a r18
lpm r18,z+ ;traigo el valor de la flash a r18

ldi r16,18 ;cargo r16 con 18 # de letras en nombre


ldi zh,high(EST2<<1) ;apunto el puntero z a la flash con est1
ldi zl,low(EST2<<1)
ldi xh,high(NOMBRE2) ;apunto el puntero x a la ram con nombre2
ldi xl,low(NOMBRE2)
ldi r17,0 ;r17 cargo con 1 (segundo valor)
add zl,r17 ;sumo 1 a la direccion de zl
clr r19 ;cargo con 0 a r18
lpm r19,z+ ;traigo el valor de la flash a r19

cp r18,r19 ;comparo el valor de r18 y r19


breq aigual ;si r18 y r19 son iguales va a aigual
brlo amenor ;si r18 < r19 va a amenor
brpl amayor ;si r18 > r19 va a amayor
fin: ;lazo infinito
rjmp fin ;fin del programa

amayor: ;si r18 < r19


ldi r16,18 ;cargo r16 con 12
ldi zh,high(EST2<<1) ;apunto z a texto2 en la flash
ldi zl,low(EST2<<1)
ldi xh,high(MENSAJE1) ;apunto x a mensaje 1 en la ram
ldi xl,low(MENSAJE1)
call mover ;llamo al desplazamiento

ldi r16,18 ;cargo r16 con 12


ldi zh,high(EST1<<1) ;apunto z a texto1 en la flash
ldi zl,low(EST1<<1)
ldi xh,high(MENSAJE2) ;apunto x a mensaje 2 en la ram
ldi xl,low(MENSAJE2)
call mover ;llamo al desplazamiento
rjmp fin ;fin del programa

amenor: ;si r18 > r19


ldi r16,18 ;cargo r16 con 12
ldi zh,high(EST1<<1) ;apunto z a texto1 en la flash
ldi zl,low(EST1<<1)
ldi xh,high(MENSAJE1) ;apunto x a mensaje 1 en la ram
ldi xl,low(MENSAJE1)
call mover ;llamo al desplazamiento

ldi r16,18
ldi zh,high(EST2<<1) ;apunto z a texto2 en la flash
ldi zl,low(EST2<<1)
ldi xh,high(MENSAJE2) ;apunto x a mensaje 2 en la ram
ldi xl,low(MENSAJE2)
call mover ;llamo al desplazamiento
rjmp fin ;fin del programa

aigual: ;si r18 = r19


ldi r16,18
ldi zh,high(EST1<<1) ;apunto z a texto3 en la flash
ldi zl,low(EST1<<1)
ldi xh,high(MENSAJE1) ;apunto x a mensaje 1 en la ram
ldi xl,low(MENSAJE1)
call mover ;llamo al desplazamiento

ldi r16,18
ldi zh,high(EST2<<1) ;apunto z a texto3 en la flash
ldi zl,low(EST2<<1)
ldi xh,high(MENSAJE2) ;apunto x a mensaje 2 en la ram
ldi xl,low(MENSAJE2)
call mover ;llamo al desplazamiento
rjmp fin ;fin del programa

mover: ;lazo para desplazar ubicacion en la flash


lpm r0,z+ ;traigo el dato de la flash a registros
st x+,r0 ;mando lo que tengo en r0 a la ubicacion de x
dec r16 ;repito el proceso por 18 veces(numero de letras)
brne mover ;bandera Z=1
ret ;regreso a donde fue llamado
EST1: ;tabla del primer estudiante
.db "VILLARREAL STEFANY";nombre del primer estudiante
EST2: ;tabla del segundo estudiante
.db "VILLARREAL STEFANY";nombre del segundo estudiante

Mayor:

Menor:
Igual:

6.3 Presentar adicionalmente lo que el instructor solicite.

Comparación de temperaturas mediante el uso de tablas


Límites:
Temperatura mínima: 10
Temperatura máxima: 22
Mensajes:
texto1: "LA TEMPERATURA ES ALTA " mensaje si se supera el límite máximo
texto2: "LA TEMPERATURA ES MEDIA" mensaje si esta entre los limites
texto3: "LA TEMPERATURA ES BAJA " mensaje si es menor que el limite mínimo

Código:
.def var=r16 ;definicion de variables del programa
.def t_ax=r17
.def t_in=r18

.dseg ;para que el micro trabaje en la ram

t_act: .byte 1 ;espacio de 1 byte en la ram para temperatura


actual
t_max: .byte 1 ;espacio de 1 byte en la ram para temperatura
maxima
t_min: .byte 1 ;espacio de 1 byte en la ram para temperatura
minima
mensaje: .byte 23 ;espacio de 1 byte en la ram para el mensaje

.cseg ;para trabajar en los registros


.org 0x00 ;ubicacion en el registro

ldi r19,22 ;cargo r19 con la TEMPERATURA MAXIMA


sts t_max,r19 ;guardo el valor de r20 en t_max

ldi r20,10 ;cargo r19 con la TEMPERATURA MINIMA


sts t_min,r22 ;guardo el valor de r20 en t_min

ldi r21,200 ;cargo r19 con la TEMPERATURA ACTUAL


sts t_act,r21 ;guardo el valor de r20 en t_act

lds t_ax,t_max ;cargo el valor de t_max en t_ax


lds t_in,t_min ;cargo el valor de t_min en t_in
lds var,t_act ;cargo el valor de t_act en var

cp t_ax,var ;comparacion con el limite maximo


brcc menor ;salta si la temperatura es menor que el limite
maximo

ldi zh,high(texto1<<1) ;apunto z a texto1 en la flash


ldi zl,low(texto1<<1)
ldi xh,high(mensaje) ;apunto x a mensaje 2 en la ram
ldi xl,low(mensaje)
ldi r16,23
call mover ;llamo al desplazamiento

menor: ;en caso de ser menor que la temperatura maxima


cp var,t_in ;se realiza otra comparacion con la temperatura
minima
brcc mayor ;salta si la temperatura es mayor que el limite
minimo

ldi zh,high(texto3<<1) ;apunto z a texto1 en la flash


ldi zl,low(texto3<<1)
ldi xh,high(mensaje) ;apunto x a mensaje 2 en la ram
ldi xl,low(mensaje)
ldi r16,23
call mover ;llamo al desplazamiento

mayor: ;en caso de ser mayor que la temperatura minima

ldi zh,high(texto2<<1) ;apunto z a texto1 en la flash


ldi zl,low(texto2<<1)
ldi xh,high(mensaje) ;apunto x a mensaje 2 en la ram
ldi xl,low(mensaje)
ldi r16,23
call mover ;llamo al desplazamiento

mover: ;lazo para desplazar ubicacion en la flash


lpm r0,Z+ ;traigo el dato de la flash a registros
st x+,r0 ;mando lo que tengo en r0 a la ubicacion de x
dec r16 ;repito el proceso
brne mover ;bandera Z=1
fin:
rjmp fin ;fin del programa

texto1: ;tabla del primer mensaje


.db"LA TEMPERATURA ES ALTA ";mensaje si se supera el limite maximo
texto2: ;tabla del segundo mensaje
.db"LA TEMPERATURA ES MEDIA";mensaje si esta entre los limites
texto3: ;tabla del tercer mensaje
.db"LA TEMPERATURA ES BAJA ";mensaje si es menor que el limite minimo

Mayor:

Optima:
Menor:

Vous aimerez peut-être aussi