Documente Academic
Documente Profesional
Documente Cultură
ELECTRÓNICA
Carrera de Ingeniería Electrónica y Control
Carrera de Ingeniería Electrónica y Telecomunicaciones
Carrera de Ingeniería Electrónica y Redes de Información
Carrera de Ingeniería Eléctrica
PRÁCTICA N°5
1. TEMA :
INSTRUCCIONES DE SALTO, LAZOS DE REPETICIÓN Y CREACIÓN DE TABLAS DE DATOS EN
LA FLASH.
2. OBJETIVO:
3. MARCO TEÓRICO
SALTOS CONDICIONALES:
Si el código debe ejecutarse sólo si se cumple cierta condición como por ejemplo: si debe
repetirse un número determinado de veces, o si un número es mayor a otro, ó si un registro
tiene algún valor, etc. Se deben usar saltos condicionados. Existen dos maneras de
realizar saltos condicionales, la primera es la ramificación (BRANCH) y la segunda el SKIP.
BRANCH.
Con estas instrucciones solamente se puede probar el estado de una de las banderas del
registro SREG. Si la condición se cumple puede saltar desde 64 posiciones hacia atrás
hasta 63 posiciones delante de la línea donde está la instrucción de salto condicional.
Si la condición no se cumple, continúa con la siguiente instrucción. Como se prueban las
banderas, normalmente se hace una operación previa la condicional para que las
banderas se actualicen.
MANERA DE DETERMINAR DESIGUALDADES ENTRE DATOS. Muchas veces es necesario
tomar alguna acción dependiendo si un registro es mayor, o igual, o menor a otro registro.
En este caso se puede realizar una resta entre los dos datos, ó para que los operadores no
se alteren se puede usar la instrucción CP Rd,Rr (comparar; que hace una resta, pero
el resultado no lo almacena en ningún lugar, solamente mueve las banderas). Estas
banderas se deben probar con las instrucciones se salto condicional. En este caso
particular se verifica la bandera Z para igualdad, y la bandera C para desigualdad.
Para determinar igualdad, se puede usar la bandera Z se pone a uno lógico si la última
operación realizada dio como resultado cero, si el resultado fue diferente de cero la
bandera Z se pone a cero lógico.
Si se desea determinar si un número es mayor que otro, se usa la bandera C. Por
ejemplo para saber si el número almacenado en R16 es mayor o igual que el número que
está en R17 puedo hacer lo siguiente:
CP R16,R17 ( también podría hacer SUB R16,R17) Si R16 es mayor o igual a R17
(resultado de la resta positivo o cero) la bandera de CARRY en el SREG se pone a 0L,
pero si R16 es menor que R17 esa bandera se pone a 1L (resultado negativo).
Para completar las comparaciones se pueden usar las instrucciones de salto condicional
como:
BREQ k Salta si Z=1 (si el resultado de la última operación fue cero, caso contrario continúa
con la siguiente instrucción)
BRNE k Salta si Z=0 (si el resultado de la última operación fue diferente de cero, caso
contrario continúa con la siguiente instrucción)
BRCS k ó BRLO k Salta si C=1 (si el resultado de la última operación fue negativo)
BRCC k ó BRSH k Salta si C=0 (si el resultado de la última operación fue positivo ó cero)
No conviene usar las instrucciones BRMI , BRPL, BRGE, BRLT con números en binario, pues
éstas están destinadas a ser usadas con números expresados en complemento a 2.
SKIP
Tabla1: .db 10,14,35,22 ;Creo una tabla llamaba "Tabla1" en la FLASH, esta tabla se
pone ;a continuación del programa que le antecede la forma de crear ;una tabla en flash
con textos se muestra con un ejemplo:
4. TRABAJO PREPARATORIO
4.2 Hacer un resumen de las directivas del ASSEMBLER que crean tablas de datos en la
memoria de programa.
4.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, ó si el uno es mayor o menor que el otro. Anotar sus conclusiones.
4.4 Escribir el siguiente programa:
Escribir un programa que copie el contenido de las localidades de SRAM : ACTUAL, TMAX
y TMIN a tres registros diferentes. Luego debe proceder a comparar estos registros, de
forma que se determine si el valor de ACTUAL está sobre TMAX, bajo TMIN ó entre esos
dos valores. De acuerdo al resultado de la acción anterior se debe copiar hacia el espacio
MENSAJE dejado en SRAM uno de los textos que se crearon como tablas en la memoria
FLASH, de acuerdo al siguiente detalle:
(Recordar que se asume que siempre los tres valores de ACTUAL, TMAX y TMIN 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 siguientes, y todos deben
tener la misma longitud de 42 caracteres. Si el mensaje es más corto se deben poner
espacios en blanco al final;
5. EQUIPO Y MATERIALES
6. PROCEDIMIENTO
6.1 Probar el programa, y para los valores de las etiquetas MENSAJE, ACTUAL, TMAX y
TMIN que el instructor asigne a cada grupo, obtener el código de máquina. Y comprobar,
mediante el simulador del AVR Studio, la ejecución del programa con diferentes contenidos
de las localidades que se comparan; en especial con valores límites.
7. INFORME:
ANEXO
.def tempo=r16
.def aux=r17
.def conta=r18
;*****************************
;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
;*****************************
;zona de código para la memoria FLASH
;si no se especifica la dirección, la primera
.cseg
.org 0x00
;***********************************
;repetir aquí para pasar la otra tabla actualizando correctamente los punteros
;la etiqueta lazo1 no puede repetirse, se debe cambiar por ejemplo a lazo2
ldi conta,10
ldi zh, ...
...........
;***********************************
; Aquí va el resto del programa
...................
...................
;***********************************
; DEFINICIÓN DE LAS TABLAS EN LA MEMORIA DE PROGRAMA