Está en la página 1de 5

ESCUELA POLITECNICA NACIONAL

DEPARTAMENTO DE AUTOMATIZACION Y CONTROL


PRACTICAS DE SISTEMAS MICROPROCESADOS

PREPARATORIO
Prctica #:5

Tema: Instrucciones de salto, lazos de repeticin y


creacin de tablas de datos en la FLASH.

Fecha de Realizacin: 16/11 / 2015

Realizado por:
Nombres: Mario zhinin loaiza
Gr: 4

Perodo: 2015-b
(Espacio Reservado)
Fecha de entrega: 27/ 05 / 2015

f. ______________________
Recibido por:

Sancin: ________________________________________________

Instrucciones de salto, lazos de repeticin y creacin de


tablas de datos en la FLASH.
OBJETIVO:

Desarrollar programas para resolver problemas utilizando lazos de repeticin, tomando en cuenta
que se producen casos diferentes; por lo que se recurre al uso de instrucciones que producen
bifurcaciones en el programa.

TRABAJO PREPARATORIO
1. Hacer un resumen de las directivas del ASSEMBLER que crean tablas de datos en la memoria de
programa.
Directivas de la Memoria Programa
.cseg
"Segmento de Cdigo"; esta directiva le dice al ensamblador que el siguiente cdigo o expresiones
debern colocarse en la memoria de programa. Esto es necesario cuando la directiva .dseg se usa para
declarar constantes y datos.
Sintaxis:
.cseg
.db
"Byte de Datos"; con esta directiva podrs colocar valores de las constantes en la memoria de programa
en una direccin conocida, por ejemplo, nmeros seriados, cadenas para un men, tablas. Ellos son
tratados como bytes y debern estar dentro de un rango de 8 bits. Casi todas las expresiones utilizan la
directiva .db.
Cada directiva .db se colocara 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 unapalabra. Ver el ejemplo siguiente:
Sintaxis:
.db expresin1,expresin2,expresin3, ...
Ejemplos:
.org 0x0100 ;colocar en la memoria de programa a partir de la direccin 0x0100
.db 128 ;coloca el numero 128 en el byte bajo de la direccin 0x0100 en memoria de programa
.db low(1000) ;coloca el byte bajo de 1000 en la direccin baja de 0x0101
.db 128,low(1000) ;coloca 128 en el byte bajo y el byte bajo de 1000 en la direccin alta de la direccin
0x0102 en lamemoria de programa
Las cadenas pueden ser colocadas en la memoria de programa con solo la directiva
.db:
.db "Hello World!"
Esto rellenar 6 palabras de datos o 12 bytes. Si deseas que a la cadena se le aadaun 0 al final de la
misma debers colocarla as:

.db "Hello World!", 0


.dw
"Palabra de Datos"; la directiva .dw trabaja como la directiva .db, pero se usar unapalabra para cada
valor.
.org
.org puede ser usada para establecer el contador de programa a un valor especfico.
.org 0x01 es el Vector de Interrupcin para una interrupcin externa 0 en dispositivoscon una tabla de
interrupcin de una palabra.
Sintaxis:
.org localidad (es la direccin de la localidad donde se colocaran las tablas deinstrucciones o datos).
3. Realizar un pequeo programa que realice la comparacin 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.
MENOR

IGUALES

MAYOR

4. Escribir el programa que se indica a continuacin:


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 continuacin correspondiente a todas las letras del texto ms 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 accin 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 mencin deben ser creados como tablas en la memoria FLASH luego de
la ltima instruccin de su programa. Los textos son los siguientes, y todos deben tener la misma
longitud de 42 caracteres. Si el mensaje es ms corto se deben poner espacios en blanco al final:
texto1: "LA TEMPERATURA ESTA SOBRE EL VALOR MAXIMO "
texto2: "LA TEMPERATURA ESTA EN EL RANGO CORRECTO "
texto3: "LA TEMPERATURA ESTA BAJO EL VALOR MINIMO "
/*
* prepa5ejer4.asm
*
* Created: 26/05/2015 20:31:20
* Author: Bryan
*/
.include "m164pdef.inc"
;defino variables
.def aux=r19
.def i=r20
;reservo espacio de memoria en la sram
.dseg
ACTUAL: .db 1
TMAX: .db 1
TMIN: .db 1
MENSAJE: .db 42
.cseg

;inicio del programa


.org 0x000
;cargo valores a comparar
ldi r16,3
ldi r17,7
ldi r18,3
sts actual,r16
sts tmax,r17
sts tmin,r18
lds r0,actual
lds r1,tmax
lds r2,tmin
;comparacion
comparacion:
s_1:cp r0,r1
brcs s_2
ldi zh,high(texto1<<1)
ldi zl,low(texto1<<1)
rjmp copia
s_2:cp r0,r2
breq s_3
brcs s_3
ldi zh,high(texto2<<1)
ldi zl,low(texto2<<1)
rjmp copia
s_3:ldi zh,high(texto3<<1)
ldi zl,low(texto3<<1)
rjmp copia
copia:

fin:

ldi yh,high(MENSAJE)
ldi yl,low(MENSAJE)
for:cpi i,42
breq fin
inc i
lpm aux,z+;cargo el asci del texto
st y+,aux;asignar la letra al espacio en sram
rjmp for
rjmp fin

;textos a mostrarse
texto1: .db "LA TEMPERATURA ESTA SOBRE EL VALOR MAXIMO "
texto2: .db "LA TEMPERATURA ESTA EN EL RANGO CORRECTO "
texto3: .db "LA TEMPERATURA ESTA BAJO EL VALOR MINIMO "

Bibliografa:

http://es.scribd.com/doc/7842926/Capitulo4-Directivas-y-Software-Del-AVR-Studioespanol#scribd