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 Año Mes
F._____________________ _______ F.____________________________ Recibido Por:
Día
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 .def registro2 = R17 .equ dato1=10 .equ dato2=10 .org 0x0 clr clr ldi ldi cp fin: rjmp fin
;se define en R16 el ;se define en R17 el ;defino valor ;defino valor registro1 registro2 registro1,dato1 registro2,dato2 registro1,registro2
primer registro segundo registro a comparar a comparar
;inicializa el registro ;inicializa el registro ;carga el dato ;carga el dato ;compara los registros
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 .def registro2 = R17 .equ dato1=15 .equ dato2=12 .org 0x0 clr clr ldi ldi cp fin: rjmp fin
;se define en ;se define en ;defino valor ;defino valor registro1 registro2 registro1,dato1 registro2,dato2 registro1,registro2
R16 el primer registro R17 el segundo registro a comparar a comparar
;inicializa el registro ;inicializa el registro ;carga el dato ;carga el dato ;compara los registros
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 .def registro2 = R17 .equ dato1=15 .equ dato2=18 .org 0x0 clr clr ldi ldi cp fin: rjmp fin
;se define en R16 el ;se define en R17 el ;defino valor ;defino valor registro1 registro2 registro1,dato1 registro2,dato2 registro1,registro2
primer registro segundo registro a comparar a comparar
;inicializa el registro ;inicializa el registro ;carga el dato ;carga el dato ;compara los registros
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 t exto 3.
.nolist .list .equ .def .def .def .def .def
datos valor zona1 zona2 aux conta
= = = =
41 r16 R17 R18
; ; ; ; = R19
= R20
Asigna Define Define Define ; ; Define
el valor a una etiqueta la variable val en el registro 16 la variable zon1 en el registro 17 la variable val en el registro 18 Define la variable val en el registro 19 la variable val en el registro 20
.dseg dato1: dato2: dato3: .ORG mensaje:
.byte 1 .byte 1 .byte 1 0X32A .byte 41
.cseg de un segmento lds lds cp breq 3
; ; ; ;
Inicia un segmento de datos Reserva un byte para la dato 1 Reserva un byte para la dato 2 Reserva un byte para la dato 3
; Reserva un byte para la mensaje ; Definine el incio del codigo
valor,0X2F0 zona1,0x2F2 valor,zona1 mensaj3
; Carga un byte a valor ; Carga un byte a zona1 ; compara actual con mínima ; si son iguales saca mensaje
brlo lds cp breq
mensaj3 zona2,0x2F1 valor,zona2 mensaj1
; ; ; ;
si es menor saca mensaje 3 Carga un byte a zona2 compara actual con máxima si son iguales saca mensaje
brsh
mensaj1
; si es mayor saca mensaje 1
1
mensaj2: ldi xl,low(mensaje) x con la dirección del mensaje ldi xh,high(mensaje) la dirección del mensaje ldi zl,(mensa2<<1) x con la dirección del mensaje ldi zh,high(mensa2<<1) la dirección del mensaje 2 ldi conta,(ftbl2-mensa2)*2 num. letras del mensaje 2
; inicia puntero ; inicia puntero x con ; inicia puntero ; inicia puntero z con ; inicia contador con
otro2: lpm st dec brne otra letra rjmp
aux,z+ x+,aux conta otro2
;trae texto desde la flash ;transfiere texto a la sram ;actualiza el contador ;terminó de sacar el mensaje? no,
fin
;si vaya a fin
mensaj3: ldi ldi ldi ldi ldi
xl,low(mensaje) xh,high(mensaje) zl,(mensa3<<1) zh,high(mensa3<<1) conta,(ftbl3-mensa3)*2
lpm st dec brne rjmp
aux,z+ x+,aux conta
otro3:
otro3 fin
mensaj1: ldi ldi ldi ldi ldi
xl,low(mensaje) xh,high(mensaje) zl,(mensa1<<1) zh,high(mensa1<<1) conta,(ftbl1-mensa1)*2
lpm st dec
aux,z+ x+,aux conta
otro1:
brne fin: rjmp mensa1: ftbl1: mensa2: ftbl2: mensa3: ftbl3:
otro1 fin .db "MARCO ANTONIO GUTIERREZ NARANJO" .db " " .db "PEDRO JONAS VELASCO ICA" .db " " .db "MARIO LEONARDO NAULA TAMBO" .db " " .exit ;fin del programa fuente
BIBLIOGRAFIA:
AVR-Assembler-tutorial; multiplicación [en línea]; Disponible en World Wide Web: