Sunteți pe pagina 1din 6

ESCUELA POLITÉCNICA NACIONAL

DEPARTAMENTO DE ELECTRÓNICA, TELECOMUNICACIONES Y REDES DE INFORMACIÓN


LABORATORIO DE SISTEMAS ANALÓGICOS DIGITALES

PREPARATORIO DE:
Sistemas Microprocesados

Práctica Nº: 05 Tema: Instrucciones de salto, lazos de repetición y


creación de tablas de datos en la FLASH

Fecha de Realización: 27/03/2014

Realizado Por:
Alumno: Luis Oleas Grupo: MICG10-2

(Espacio Reservado)

Fecha de Entrega: 27 / 03 / 2014 F.____________________________


Año Mes Día Recibido Por:

Sanción: ___________________________________________________________________

Periodo:

2014 - A
PRÁCTICA No. 5

Tema: Instrucciones de salto, lazos de repetición y creación de tablas de datos en la FLASH

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.

Preparatorio

 Revisar el conjunto de instrucciones para los microcontroladores AVR de 8 bits, en


particular los saltos incondicionales y condicionales.

 Hacer un resumen de las directivas del ASSEMBLER que crean tablas de datos en la
memoria de programa.

.cseg: Directiva que indica al ensasmblador el código que va a colocarse en la memoria de


programa
.db: Directiva que coloca valores a las constantes de la memoria de programa
.dw: Directiva que utiliza palabras para cada valor de constant
.org: Directiva que se usa para establecer el contador del programa a un valor específico.
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, ó si el uno es mayor o
menor que el otro. Anotar sus conclusiones.

Para valores iguales.

.def registro1 = R16 ;se define en R16 el primer registro


.def registro2 = R17 ;se define en R17 el segundo registro
.equ dato1=10 ;defino valor a comparar
.equ dato2=10 ;defino valor a comparar
.org 0x0
clr registro1 ;inicializa el registro
clr registro2 ;inicializa el registro
ldi registro1,dato1 ;carga el dato
ldi registro2,dato2 ;carga el dato
cp registro1,registro2 ;compara los registros
fin: rjmp fin

Cuando el contenido de los registros es igual, se ve afectada la bandera Z por la ejecución de la


instrucción.

Primer registro mayor que el segundo.

.def registro1 = R16 ;se define en R16 el primer registro


.def registro2 = R17 ;se define en R17 el segundo registro
.equ dato1=15 ;defino valor a comparar
.equ dato2=12 ;defino valor a comparar
.org 0x0
clr registro1 ;inicializa el registro
clr registro2 ;inicializa el registro
ldi registro1,dato1 ;carga el dato
ldi registro2,dato2 ;carga el dato
cp registro1,registro2 ;compara los registros
fin: rjmp fin

Cuando el contenido del primer registro es mayor que el contenido del segundo registro, se ve
afectada la bandera Z por la ejecución de la instrucción.

Segundo registro mayor que el primero.

.def registro1 = R16 ;se define en R16 el primer registro


.def registro2 = R17 ;se define en R17 el segundo registro
.equ dato1=15 ;defino valor a comparar
.equ dato2=18 ;defino valor a comparar
.org 0x0
clr registro1 ;inicializa el registro
clr registro2 ;inicializa el registro
ldi registro1,dato1 ;carga el dato
ldi registro2,dato2 ;carga el dato
cp registro1,registro2 ;compara los registros
fin: rjmp fin
Cuando el contenido del primer registro es menor que el contenido del segundo registro, se ves
afectadas las banderas S,N,C por la ejecución de la instrucción.

Escribir el programa que se indica a continuación:

En la memoria SRAM se deben reservar cuatro espacios de memoria de acuerdo al siguiente detalle:
Tres localidades de 1 byte cada una a los que se les asigna los nombres PUNTAJE1, PUNTAJE2 y
PUNTAJE3, y se debe reservar un espacio adicional llamado GANADOR de un número de bytes
correspondiente a todas las letras del nombre más extenso de los integrantes del grupo, incluidos
los espacios en blanco. Por ejemplo si ese nombre fuera; JUAN JOSE FLORES DELGADO, se deberían
dejar 24 bytes.
Escribir un programa que copie el contenido de las localidades de SRAM : PUNTAJE1, PUNTAJE2 y
PUNTAJE3 a tres registros diferentes. Luego debe proceder a comparar estos registros, de forma
que se determine cuál de los tres puntajes es el más alto( asumir que siempre los tres puntajes van
a ser diferentes). De acuerdo al resultado de la acción anterior se debe copiar hacia el espacio
GANADOR dejado en SRAM uno de los nombres que se deben crear como tablas en la memoria
FLASH, de acuerdo al siguiente detalle:
Si el PUNTAJE1 es el mayor, el texto a copiar es el Nº 1,
Si el PUNTAJE2 es el mayor, el texto a copiar es el Nº 2,
Si el PUNTAJE3 es el mayor, el texto a copiar es el Nº 3,
(Recordar que se asume que siempre los tres puntajes van a ser diferentes)
Los textos a los que se hace mención deben ser creados como tablas en la memoria FLASH luego de
la última instrucción de su programa. Los textos son los nombres completos de los integrantes del
grupo, y deben tener la misma longitud (la longitud del nombre completo más largo de entre los
integrantes). Para los nombres más cortos se deben poner espacios en blanco al final. Si el grupo
solo tiene dos integrantes poner cualquier nombre como texto 3.

.nolist
.list
.equ datos = 41 ;
Asigna el valor a una etiqueta
.def valor = r16 ;
Define la variable val en el registro 16
.def zona1 = R17 ;
Define la variable zon1 en el registro 17
.def zona2 = R18 ;
Define la variable val en el registro 18
.def aux = R19 ; Define la variable val en el registro 19
.def conta = R20 ; Define la variable val en el registro 20

.dseg
; Inicia un segmento de datos
dato1: .byte 1 ; Reserva un byte para la dato 1
dato2: .byte 1 ; Reserva un byte para la dato 2
dato3: .byte 1 ; Reserva un byte para la dato 3
.ORG 0X32A
mensaje: .byte 41 ; Reserva un byte para la mensaje

.cseg ; Definine el incio del codigo


de un segmento
lds valor,0X2F0 ; Carga un byte a valor
lds zona1,0x2F2 ; Carga un byte a zona1
cp valor,zona1 ; compara actual con mínima
breq mensaj3 ; si son iguales saca mensaje
3
brlo mensaj3 ; si es menor saca mensaje 3
lds zona2,0x2F1 ; Carga un byte a zona2
cp valor,zona2 ; compara actual con máxima
breq mensaj1 ; si son iguales saca mensaje
1
brsh mensaj1 ; si es mayor saca mensaje 1

mensaj2:

ldi xl,low(mensaje) ; inicia puntero


x con la dirección del mensaje
ldi xh,high(mensaje) ; inicia puntero x con
la dirección del mensaje
ldi zl,(mensa2<<1) ; inicia puntero
x con la dirección del mensaje
ldi zh,high(mensa2<<1) ; inicia puntero z con
la dirección del mensaje 2
ldi conta,(ftbl2-mensa2)*2 ; inicia contador con
num. letras del mensaje 2

otro2:

lpm aux,z+ ;trae texto desde la flash


st x+,aux ;transfiere texto a la sram
dec conta ;actualiza el contador
brne otro2 ;terminó de sacar el mensaje? no,
otra letra
rjmp fin ;si vaya a fin

mensaj3:

ldi xl,low(mensaje)
ldi xh,high(mensaje)
ldi zl,(mensa3<<1)
ldi zh,high(mensa3<<1)
ldi conta,(ftbl3-mensa3)*2

otro3:

lpm aux,z+
st x+,aux
dec conta
brne otro3
rjmp fin

mensaj1:

ldi xl,low(mensaje)
ldi xh,high(mensaje)
ldi zl,(mensa1<<1)
ldi zh,high(mensa1<<1)
ldi conta,(ftbl1-mensa1)*2

otro1:

lpm aux,z+
st x+,aux
dec conta
brne otro1

fin: rjmp fin

mensa1: .db "MARCO ANTONIO GUTIERREZ NARANJO"


ftbl1: .db " "
mensa2: .db "PEDRO JONAS VELASCO ICA"
ftbl2: .db " "
mensa3: .db "MARIO LEONARDO NAULA TAMBO"
ftbl3: .db " "

.exit ;fin del programa fuente

BIBLIOGRAFIA:

 AVR-Assembler-tutorial; multiplicación [en línea]; Disponible en World Wide Web:


<http://www.avr-asm-tutorial.net/avr_en/calc/MULT8E.html>

S-ar putea să vă placă și