Sunteți pe pagina 1din 7

FACULTAD DE INGENIERÍA ELÉCTRICA Y

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

LABORATORIO DE SISTEMAS MICROPROCESADOS

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:

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. MARCO TEÓRICO

Muchos de los algoritmos en un sistema microprocesado son repetitivos, por lo que es


necesario crear las estructura de control para tal fin.
SALTOS:
SALTOS INCONDICIONALES (Sin condicion):
Si el conjunto de instrucciones se deben repetir incondicionalmente se pueden usar las
instrucciones RJMP k (salto relativo, donde k está en complemento a 2 y es el
número de líneas que debe saltar hacia adelante o hacia atrás ), ó JMP k (salto
absoluto, donde k es cualquier dirección en la zona de programa del micro). Una forma más
fácil de especificar a dónde deben ir los saltos es dejar una etiqueta y en lugar de especificar
k como un número se pone el nombre de la etiqueta a donde se va a saltar.
Un esquema general del código sería el siguiente:
lazo:
.....
… (aquí va el código)…
.....
rjmp lazo

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.

Período: 2018-A | http://ciecfie.epn.edu.ec/wss/VirtualDirectories/80/Enlaces/LABORA.htm


LABORATORIO DE SISTEMAS MICROPROCESADOS

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.

Un ejemplo de uso de estas instrucciones a continuación:


Ejemplo: este pedazo de código hace que el código se repita 10 veces:
ldi r16,10 ; se carga el número de veces a repetir el lazo (10 veces)
lazo:
…..
…..
(aquí va el código)
…..
…..
dec r16 ;se decrementa el contador de iteraciones
brne lazo ;si al decrementar el contador r16 no se llega a cero,

Período: 2018-A | http://ciecfie.epn.edu.ec/wss/VirtualDirectories/80/Enlaces/LABORA.htm


LABORATORIO DE SISTEMAS MICROPROCESADOS

.... ;la bandera Z=0,la condición se cumple y salta a la


;etiqueta lazo. Si r16 llega a cero, Z=1, la condición no se
;cumple y continúa con la siguiente instrucción.

SKIP

Con estas instrucciones solamente se puede probar el estado (si es 1 ó 0) de un bit


dentro de un registro, o del estado de un bit en un registro de entrada/salida. La lógica es
la siguiente: si la condición se cumple se salta la siguiente instrucción (no la ejecuta), y
continúa con la que está después. Si no se cumple , continúa ejecutando normalmente
la siguiente instrucción.
Ejemplo:
…….
…….
sbrs R17,3 ;saltar si el bit 3 del registro r17 está en 1.
xxxx ;si el bit probado es cero continúa el programa desde aquí
yyyy ;si el bit probado es 1 (si se cumple la condición), la
;instrucción anterior no se ejecuta y se continúa desde aquí.
…….

Pueden usarse las siguientes instrucciones:


SBRC Rr,b ( Saltarse la siguiente instrucción si bit b del registro Rr esta en 0L)
SBRS Rr,b ( Saltarse la siguiente instrucción si bit b del registro Rr esta en 1L)
SBIC A,b ( Saltarse la siguiente instrucción si bit b del registro de entrada/salida A esta en
0L)
SBIS A,b ( Saltarse la siguiente instrucción si bit b del registro de entrada/salida A esta en
1L).

RESERVAR ESPACIOS DE MEMORIA EN LA SRAM, y USO DE LA SRAM


Si se desea usar la SRAM para almacenar información, una forma adecuada se muestra en
el siguiente pedazo de código:
.include "m164pdef.inc"
.def tempo=R16
......
.DSEG
PUNTAJE1: .byte 1 ;Se deja un byte de espacio reservado, asignado a este nombre
RESULTADO: .byte 4 ;Se dejan 4 bytes de espacio reservado, asignado a este nombre
GANADOR: .byte 24 ;Se dejan 24 bytes de espacio reservado, asignado a este nombre
.CSEG
.ORG 0X0 ;Aquí inicia el programa
.......
.......

Período: 2018-A | http://ciecfie.epn.edu.ec/wss/VirtualDirectories/80/Enlaces/LABORA.htm


LABORATORIO DE SISTEMAS MICROPROCESADOS

ldi xh,high(GANADOR) ;El puntero X va a apuntar a la primera localidad de las 24 reservadas


a ;este nombre, los punteros
ldi xl,low(GANADOR) ;son de 16 bits, por eso se deben cargar 8 bits a la vez. LOW indica
que ;se toman los 8 bits menos significativos, y HIGH indica que se tomen los ;8 bits más
significativos.
ldi yh,high(RESULTADO) ;El puntero y va a apuntar a la primera localidad de las 4 reservadas
a ;este nombre, los punteros
ldi yl,low(RESULTADO) ;son de 16 bits, por eso se deben cargar 8 bits a la vez. LOW indica
que ;se toman los 8 bits menos significativos, y HIGH indica que se tomen ;los 8 bits más
significativos.
.......
.......
ldi tempo,’a’ ;Cargo en tempo (R16) el valor ASCII que corresponde a ‘a’
st x+,tempo ;Almaceno el valor que está en tempo (R16) a la primera localidad
;reservada para GANADOR,y el punero X se incrementa y apunta al ;siguiente espacio
reservado para GANADOR.
.......
.......
lds R0,PUNTAJE1 ;Carga en R0 el valor almacenado en el espacio de SRAM asignado
a ;PUNTAJE1
.......
.......

CREACIÓN DE TABLAS EN MEMORIA FLASH.


La memoria de programa (Memoria FLASH) puede también contener datos, en este
caso esos datos son CONSTANTES. Puede almacenarse información en forma de tablas. La
forma de crear una tabla en flash con datos numéricos se muestra con un ejemplo de
pedazos de código:
…….
…….
ldi zh,high(Mensaje1<<1) ;Al usar la instrucción LPM, se usa el puntero Zl
;los bits del 15 al 1 indican la dirección
ldi zl,low(Mensaje1<<1) ;por eso se desplaza una posición a la izquierda con el
operador ;>>1 ( que es igual a mu ltiplicar por 2) luego de esta instrucción ;el puntero Z
apunta al primer elemento de la tabla Mensaje1, ;que en este caso es la primera letra que
corresponde a la "E"
lpm R0,Z+ ; R0 recibe el ASCII de la letra E, y el puntero ahora apunta al ;siguiente
elemento, en este caso la letra "s"
lpm R1,Z+ ; R1 recibe el ASCII de la letra s , y el puntero ;ahora apunta al siguiente
elemento, en este caso la letra "t"
…….
…….
…….

Período: 2018-A | http://ciecfie.epn.edu.ec/wss/VirtualDirectories/80/Enlaces/LABORA.htm


LABORATORIO DE SISTEMAS MICROPROCESADOS

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:

Mensaje1: .db “Este es un mensaje alfanumérico”


Mensaje2: .db “Otro mensaje alfanumérico”

4. TRABAJO PREPARATORIO

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


particular los saltos incondicionales y condicionales.

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:

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 ACTUAL, TMAX y TMIN, y se debe reservar un espacio adicional llamado
MENSAJE de 42 bytes para copiar uno de los mensajes que se indicará a continuación
correspondiente a todas las letras del texto más extenso incluidos los espacios en blanco.

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:

Si el contenido de ACTUAL es igual o mayor que el de TMAX, el texto a copiar es el Nº 1.

Si el contenido de ACTUAL es menor o igual que el de TMIN, el texto a copiar es el Nº 3.

Si el contenido de ACTUAL está entre TMAX y TMIN el texto a copiar es el Nº 2

(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;

texto1: "LA TEMPERATURA ESTA SOBRE EL VALOR MAXIMO "

Período: 2018-A | http://ciecfie.epn.edu.ec/wss/VirtualDirectories/80/Enlaces/LABORA.htm


LABORATORIO DE SISTEMAS MICROPROCESADOS

texto2: "LA TEMPERATURA ESTA EN EL RANGO CORRECTO "

texto3: "LA TEMPERATURA ESTA BAJO EL VALOR MINIMO "

Puede tomar como ejemplo el anexo al final de esta hoja guía.

5. EQUIPO Y MATERIALES

Computador con Atmel Studio y Proteus

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:

7.2 Realizar Presentar los resultados de las comprobaciones mediante capturas de


pantallas.
7.3 Escribir los cambios que se debe realizar en el programa, si los números que se
comparan son de más de 8 bits.
7.4 Presentar adicionalmente lo que el instructor solicite.

ANEXO

;PROGRAMA BASE PARA PRÁCTICA 5


;
;*****************************
;ZONA DE DEFINICIÓN DE VARIABLES

.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

nom1: .byte 10 ;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

Período: 2018-A | http://ciecfie.epn.edu.ec/wss/VirtualDirectories/80/Enlaces/LABORA.htm


LABORATORIO DE SISTEMAS MICROPROCESADOS

;instrucción va a la dirección 0x00 y las posteriores


;se acomodan en localidades consecutivas

.cseg
.org 0x00

ldi conta,10 ;cargo el conta (r18) para 10 repeticiones


ldi zh, high (est1<<1) ;el puntero Z apunta al inicio de la tabla est1
ldi zl, low (est1<<1) ; que está en la FLASH, El puntero es de 16 bits
;por lo que se lo hace en dos partes, primero los
;8 bits mas significativos de la dirección a zh (r31)
; y luego los 8 bits menos significativos a zl (r30)
;En Z la dirección está del bit 1 al 15
;y el bit 0 indica que apunte al LSB
;de acuerdo al formato de la instrucción LPM
;que se va a utilizar, por eso se desplaza
;la dirección una posición a la izquierda (<<1)
ldi xh,high(nom1) ;el puntero x apunta al inicio de la zona
ldi xl, low (nom1) ;reservada para nom1 en la SRAM. Los punteros
;que se usan en la SRAM no se los debe desplazar
lazo1: lpm tempo,z+ ;cargo un caracter (el primero en la primera pasada)
;de la tabla est1 en el registro tempo(r16) y el
; puntero z se incrementa y apunta al siguiente caracter
st x+,tempo ;guardo este caracter en la zona nom1 en la SRAM (en la
;primera posición si es la primera pasada) El puntero x
;también se incrementa y apunta a la siguiente posición
dec conta ;decremento el contador conta (r18)
brne lazo1 ;si no llega a cero todavía saltar a lazo1
;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
ldi conta,10
ldi zh, ...
...........

;***********************************
; Aquí va el resto del programa
...................
...................
;***********************************
; DEFINICIÓN DE LAS TABLAS EN LA MEMORIA DE PROGRAMA

est1: .db "Estado 001"


est2: .db "texto ejem"

Elaborado por: Patricio Chico

Revisado por: Patricio Chico.- Responsable de la asignatura

Período: 2018-A | http://ciecfie.epn.edu.ec/wss/VirtualDirectories/80/Enlaces/LABORA.htm

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