Está en la página 1de 6

ESCUELA POLITÉCNICA NACIONAL

FACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA


ÁREA DE CIRCUITOS ELECTRÓNICOS

INFORME X TRABAJO PREPARATORIO

LABORATORIO DE SISTEMAS MICROPROCESADOS

Práctica #: 05 Tema: Instrucciones de Salto, Lazos de Repetición y Creación de


Tablas de Datos en la Flash.

Realizado por:

Alumno (s): JOSUE ALVAREZ Grupo: GR9

(Espacio Reservado)
Fecha de entrega: 2018 / 12 / 05 f. ______________________
Año mes día Recibido por:

Sanción: ________________________________________________

Semestre: Sep - Feb __X___


Mar - Ago _____ 20_18_
1. Tema: Instrucciones de Salto, Lazos de Repetición y Creación de Tablas de Datos en la Flash.
2. Objetivo: Desarrollar programas para resolver problemas utilizando lazos de repetición,
tomando en cuenta que se producen casos diferentes; por lo que se recurre al uso de
instrucciones que producen bifurcaciones en el programa.
3. Preparatorio:
1. Revisar el conjunto de instrucciones para los microcontroladores AVR de 8 bits, en
particular los saltos incondicionales y condicionales.

2. Hacer un resumen de las directivas del ASSEMBLER que crean tablas de datos en la
memoria de programa.
Directivas de la Memoria Programa
.db: "Byte de Datos"; esta directiva coloca valores de las constantes en la memoria de programa
en una dirección conocida. Cada directiva .db se coloca al inicio de una nueva palabra en la
memoria de programa. Así, dos directivas .db de un solo byte como argumento usaran dos
palabras, mientras que una directiva .db con dos bytes como argumentos usaran solamente una
palabra. Ejemplo:
Sintaxis:
.db expresión1, expresión2, expresión3, ..

Las cadenas pueden ser colocadas en la memoria de programa con solo la directiva .db,
rellenando 6 palabras de datos o 12 bytes. Si se desea que a la cadena se le añada un 0 al final
de la misma deberás colocarla así:
.db "Hello World!", 0
.dw: "Palabra de Datos"; la directiva .dw trabaja como la directiva .db, pero se usará una palabra
para cada valor.
3. Realizar un pequeño programa que realice la comparación entre dos registros, y
determine qué valor toman las banderas Z y C dependiendo si los registros son
iguales, o si el uno es mayor o menor que el otro. Anotar sus conclusiones.
.include "m164pdef.inc"
.def A=r16
.def B=r17
ldi A,10
ldi B,10
cp A,B
breq nada
fin:
rjmp fin
nada:
rjmp fin
Nota: la función cp realiza la resta entre
registros sin tomar en cuenta el carry.
Cuando los registros son iguales:
El resultado de la comparación cp es cero
y la bandera Z toma el valor de 1, por lo
tanto la bandera C del carry esta con el
valor de 0.

Cuando el primer registro es menor que el


segundo:
El resultado de la comparación cp genera un
carry lo que significa que el registro A es menor
y la bandera Z toma el valor de 0, por lo tanto
el carry toma un valor de 1.
Cuando el primer registro es mayor
que el segundo: EL resultado de la
comparación cp no genera un carry lo
que significa que el registro A es
mayor y la bandera Z toma el valor de
0, por lo tanto el carry toma un valor
de 0.
4. Escribir el siguiente programa:
En la memoria SRAM se deben reservar los siguientes espacios de memoria:
 Dos espacios de memoria de 1 byte cada uno llamados CARAC_PADRE y
CARAC_MADRE respectivamente.
 Un espacio de memoria de 42 bytes llamado RESULTADO.
Al finalizar de escribir su programa en la memoria FLASH deben crearse las siguientes tablas:
Dos tablas, la primera llamada NOMBRE_PADRE que contiene los dos nombres y dos apellidos
de su padre sin dejar espacios entre ellos, pero añadiendo un espacio en blanco al final, es decir
como ejemplo: “JuanRamonIllescasBarros”; la segunda tabla llamada NOMBRE_MADRE: con
formato similar con el nombre de su madre.
A continuación en la flash creará las siguientes tablas, todas con una extensión de 42 caracteres:
PmayM: "El nombre del padre tiene más caracteres"
MmayP: "El nombre de la madre tiene más caracteres"
PiguM:"Los dos tienen igual número de caracteres"
Escribir un programa que lea las tablas de la FLASH y cuente el número de caracteres que tienen
los nombres de sus padres antes de encontrar el espacio en blanco del final (ASCII 32) y los
almacene en las localidades CARAC_PADRE y CARAC_MADRE respectivamente.
Comparar los números de caracteres en los dos nombres y de acuerdo al resultado copiar uno de
los mensajes( PmayM, MmayP, PiguM) a la localidad RESULTADO en la SRAM.
Puede tomar como ejemplo el anexo al final de esta hoja guía.
.def tempo=r16
.def aux=r17
.def conta=r18
.def conp=r19
.def conm=r20
;*****************************
;zona de reserva de espacio en la memoria SRAM
;si no se especifica la dirección, la primera
;reserva va a la dirección 0x100 y las posteriores
;se acomodan en localidades consecutivas
.dseg
CARAC_PADRE: .byte 1
CARAC_MADRE: .byte 1
RESULTADO: .byte 42
;est1 inicia en la SRAM en
;la localidad 0x100 y termina
;en 0x109
/*men1: .byte 5 ;inicia en 0x10A y termina en 0x10E
nom2: .byte 10 ;inicia en 0x10F
men2: .byte 5 ;inicia en 0x119*/
;*****************************
;zona de código para la memoria FLASH
;si no se especifica la dirección, la primera
;instrucción va a la dirección 0x00 y las posteriores
;se acomodan en localidades consecutivas
.cseg
.org 0x00

contarp:
ldi conp,0
ldi zh, high (NOMBRE_PADRE<<1) ;el puntero Z apunta al inicio de la tabla est1
ldi zl, low (NOMBRE_PADRE<<1) ; que está en la FLASH, El puntero es de 16 bits
lazo4:
lpm tempo,z+
cpi tempo,' '
breq contarm
inc conp
rjmp lazo4

contarm:
ldi conm,0
ldi zh, high (NOMBRE_MADRE<<1) ;el puntero Z apunta al inicio de la tabla est1
ldi zl, low (NOMBRE_MADRE<<1) ; que está en la FLASH, El puntero es de 16 bits
lazo5:
lpm tempo,z+
cpi tempo,' '
breq comparacion
inc conm
rjmp lazo5
comparacion:
cp conp,conm
breq igual
brsh pmayorm
brlo mmayorp

pmayorm:
ldi conta,42 ;cargo el conta (r18) para 10 repeticiones
ldi zh, high (PmayM<<1) ;el puntero Z apunta al inicio de la tabla est1
ldi zl, low (PmayM<<1) ; que está en la FLASH, El puntero es de 16 bits
ldi xh,high(RESULTADO) ;el puntero x apunta al inicio de la zona
ldi xl, low (RESULTADO) ;reservada para nom1 en la SRAM. Los punteros
lazo1: ;PARA PMAYM
lpm tempo,z+ ;cargo un caracter (el primero en la primera pasada)
st x+,tempo ;guardo este caracter en la zona nom1 en la SRAM (en la
dec conta ;decremento el contador conta (r18)
brne lazo1 ;si no llega a cero todavía saltar a lazo1
rjmp fin

mmayorp:
ldi conta,42 ;cargo el conta (r18) para 10 repeticiones
ldi zh, high (MmayP<<1) ;el puntero Z apunta al inicio de la tabla est1
ldi zl, low (MmayP<<1) ; que está en la FLASH, El puntero es de 16 bits
ldi xh,high(RESULTADO) ;el puntero x apunta al inicio de la zona
ldi xl, low (RESULTADO) ;reservada para nom1 en la SRAM. Los punteros
lazo2: ;PARA PMAYM
lpm tempo,z+ ;cargo un caracter (el primero en la primera pasada)
st x+,tempo ;guardo este caracter en la zona nom1 en la SRAM (en la
dec conta ;decremento el contador conta (r18)
brne lazo2 ;si no llega a cero todavía saltar a lazo1
rjmp fin

igual:
ldi conta,42 ;cargo el conta (r18) para 10 repeticiones
ldi zh, high (PiguM<<1) ;el puntero Z apunta al inicio de la tabla est1
ldi zl, low (PiguM<<1) ; que está en la FLASH, El puntero es de 16 bits
ldi xh,high(RESULTADO) ;el puntero x apunta al inicio de la zona
ldi xl, low (RESULTADO) ;reservada para nom1 en la SRAM. Los punteros
lazo3: ;PARA PMAYM
lpm tempo,z+ ;cargo un caracter (el primero en la primera pasada)
st x+,tempo ;guardo este caracter en la zona nom1 en la SRAM (en la
dec conta ;decremento el contador conta (r18)
brne lazo3 ;si no llega a cero todavía saltar a lazo1
rjmp fin

fin:
rjmp fin
;y volver a repetir el procedimiento anterior hasta
;completar 10 pasadas
;***********************************
;repetir aquí para pasar la otra tabla actualizando correctamente los punteros
;la etiqueta lazo1 no puede repetirse, se debe cambiar por ejemplo a lazo2

...........
;***********************************
; Aquí va el resto del programa
...................
...................
;***********************************
; DEFINICIÓN DE LAS TABLAS EN LA MEMORIA DE PROGRAMA
NOMBRE_PADRE: .db "ANTONIOJOSEALVAREZDELGADO ";25
NOMBRE_MADRE: .db "MIRIANJANETHBURBANONUÑEZ ";24

PmayM: .db "El nombre del padre tiene mas caracteres "
MmayP: .db "El nombre de la madre tiene mas caracteres"
PiguM: .db "Los dos tienen igual numero de caracteres "
Compilación:

Código en ejecución:

Bibliografía
- Chico, P. “Apuntes en clase Sistemas Microprocesados”.2018B

También podría gustarte