Você está na página 1de 9

Carrera:

Tecnlogo en Informtica y Computacin

Materia:

Microprocesadores

Clave:

Unidad:
No. de Prctica:

Plantel:

Colomos

Revisin:

Registro:

10300164

Fecha:

09/12/2014

Tema:
4

Nombre de la prctica:

Profesor:

Promedio datos de 16 bits


Carlos Molina Martnez

Alumno:

Semestre:

Academia: Sistemas Digitales

Cesar Alejandro Castro Reyes

Grupo:

F2

Perodo:

Objetivo:
Realizar una prctica que calcule el promedio de 16 datos de 16
bits guardados a partir de la direccin #P100 de la memoria RAM y
guardar el resultado en la direccin #P200.
EXPLICACION:
En esta prctica utiliza todos los registros porque eran datos de 16 bits cada
dato lo guardaba en dos registros.
Voy leyendo direccin por direccin donde se encuentra los datos
guardados, leo la primera direccin #2100h y lo guardo en el R4, despus
incremento el dptr para apuntar a la direccin del siguiente dato y lo guardo
en el r3. Ahora lo que tiene el registro 4 y 3 son la parte alta y baja
respectivamente del primer dato de 16 bits. Incremento otra vez el dptr y
guardo el siguiente dato en el registro r2, vuelvo a incrementarlo y leo el
dato y lo guardo en el R1.
Ahora tengo ambos datos de 16 bits, el dato1 (R4(BHS)Y R3(BLS)) y el dato
2 (R2(BHS)Y R1(BLS)),despus de esto sumo los registros menos
significativos de cada dato(R1 Y R3) y lo guardo en el registro R5. Y en caso
de que haya carry mando llamar a la subrutina lleva1 donde incremento el
R4.
En caso de que no haya carry sigue a la subrutina SUMA2 donde sumo con
carry los registro con el valor ms significativos de ambos datos (R4 Y R2) y
el resultado de esta suma lo guardo en el registro R6. Y en caso de que

haya carry mando a llamar a la subrutina LLEVA_R7 donde incremento el


registro R7.

Despus sigue con la subrutina SIGUE3 donde guardo el dato de DPL(la


parte baja del acumulador)en el registro R0 para saber en qu direccin
fue donde le por ltima vez.
Hago una condicin (CJNE) que hasta que el valor de r0 no se igual a #21h
que es las veces que se incrementa el dptr para leer 3 direcciones por ciclo
salte de nuevo a la subrutina SIGUE5.
Despus de sumar todos los datos el resultado de todas las sumas sern
guardadas en los registro R7,R6 Y R5 donde cada registro tendr el valor
de mas a menos significativo del resultado de la suma de los 16 datos.
Ahora realizo el promedio de este dato con un rota bit donde elimino los 4
bits menos significativos del R5 que es donde se encuentra el valor menos
significatio porque al ser una divisin por su misma base que es 16
nicamente se elimina(o rota) el ultimo byte del resultado. Por ese caso
aplico una mascara lgica donde ignoro el valor de los 4 bits menos
significativos del registro R5 y de esa manera ya calcule el promedio de los
16 datos de 16 bits.
Ahora apunto el dptr a la direccin #2200h donde es que quiero guardar el
valor de R7 que es la parte alta del resultado del promedio, lo guardo (MOV
A,R7;MOVX @DPTR,A)y despus apunto el DPTR a la direccin #2201h que
va la parte de en medio del resultado ,mando el dato del registro R6 que es
la parte media del resultado,lo guardo (MOV A,R6;MOVX @DPTR,A)apunto a
la siguiente direccin #2202 y guardo el dato guardado en el registro R5
(MOV A,R5;MOVX @DPTR,A) . Todo esto con un tiempo de 500ms por dato
guardado para que de esta manera sea guarde de una manera mas
confiable.

Cdigo del programa:


MOV DPTR,#4000H ;muestro a la salida un 0ffh para iniciar la cuenta de
tiempo
MOV A,#0FFH
MOVX @DPTR,A
MOV DPTR,#2100H ;apunto a la direccion de la ram donde esta el primer
dato
movx a,@dptr
MOV R0,#15D

;Ciclo

MOV r4,A ;parte baja del primer dato


SIGUE:
INC DPTR
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
ACALL TIME
MOVX A,@DPTR
ACALL TIME

MOV R1,A
ADD A,R3
MOV R5,A
JC LLEVA1
SUMA2:
MOV A,R4
ADDC

A,R2

MOV R6,A
JC LLEVA_R7
SIGUE3:
MOV R0,DPL
CJNE R0,#21H,SIGUE5
AJMP PROMEDIO

SIGUE5:
INC DPTR
MOVX A,@DPTR
aCALL TIME
MOV R4,A
INC DPTR
MOVX A,@DPTR
ACALL TIME
MOV R3,A
ADD A,R5
MOV R5,A
MOV A,R4
ADDC A,R6
MOV R6,A

JC LLEVA_R7
AJMP SIGUE3
LLEVA1:
CLR C
INC R4
AJMP SUMA2
LLEVA_R7:
CLR C
INC R7
AJMP SIGUE3

PROMEDIO:

MOV DPTR,#2200H
MOV A,R7
MOVX @DPTR,A
ACALL TIME
mov dptr,#2201h
mov a,r6
movx @dptr,a
acall time
mov dptr,#2202h
mov a,r5
movx @dptr,a
acall time
MOV DPTR,#4000H
MOV A,#00H
MOVX @DPTR,A

FIN: LJMP FIN


TIME:
MOV R3, #003h
MOV R2, #0D2h
MOV R1, #024h
MOV R0, #014h
NOP
DJNZ R0, $
DJNZ R1, $-5
DJNZ R2, $-9
DJNZ R3, $-13
MOV R0, #059h
DJNZ R0, $
NOP
ret

DIAGRAMA DE FLUJO:

PRACTICA4.lst

PRACTICA4.hex

Você também pode gostar