Está en la página 1de 7

Universidad Mayor de San Andrés ETN 801 - Microprocesadores

Facultad de Ingeniería Segundo Examen Parcial – Diseño


Ingeniería Electrónica Ing. Marcelo Ramírez M.

E2 Sem I/19 5/06/19

Nombre ________________________________________ CI: ________________

1. Un microcomputador tiene la siguiente configuración:

P: Microsex de 8 bits,


Capacidad de direccionamiento de memoria 64KB
Capacidad de direccionamiento de E/S 256
BCON: RD, WR, -M/P

Memoria: ROM de 0,5 KB al inicio del mapa


RAM de 2KB al final del mapa
Descodificación parcial, no están conectadas ni disponibles
las líneas A13:10.

E/S: Teclado hexadecimal matricial 4x4, emplea el puerto 00H.


Pantalla de 6 visores alfanuméricos 7-seg en las siguientes
direcciones: VISOR5  VISOR0: 0FAH  0FFH
Descodificación parcial, no están conectadas ni disponibles
las líneas A6:4.

Requerimiento:

 Se debe incorporar una expansión de RAM de 1KB lo más


adyacente posible a la RAM instalada.
 Se debe incorporar un segundo teclado matricial 3x4 y dos
visores 7-seg para completar la pantalla.

Tareas:

1.1. Elaborar los mapas de direccionamiento del computador.


1.2. Establecer dónde es posible incorporar las expansiones en cada
caso.
1.3. Diseñar de la expansión sin incluir la capacidad instalada.

2. Diseñe un programa para sumar 100 bytes no signados sin desborde, en


lenguaje del 6800 o del Z80. Puede emplear el modelo de memoria del ET-
3400 o del KENTAC-Z800.

Página 1 de 1
FA-1.1

Memoria

Es útil elaborar una tabla de direccionamiento para encontrar el mapa y los espacios libres.

Se observa que la memoria RAM de 2KB sólo puede implementarse mediante dos
bancos de 1 KB debido a la descodificación parcial. Para las direcciones establecidas al
considerar A13:10 con los valores 1111 se obtiene los rangos de la tabla. Con ello se
obtiene el mapa de direccionamiento de memoria.

E iste 1 di e io es alias pa a ada a o los 1 a gos so o se utivos, po ta to, e los rangos


extremos (con A13:10 = 1111 para la RAM1 y A13:10 = 0000 para la RAM2) se obtiene el rango continuo de 2K de
RAM, desde BC00 hasta C3FF.

La tabla ayuda también a encontrar un espacio para la expansión de RAM, como se ve.

E/S

Para el caso de direccionamiento E/S se elabora, igualmente, una tabla de direccionamiento que ayuda al análisis
y permite obtener los mapas.

Al igual que en el caso de la memoria, se observa que existen 7 alias por cada dirección de puerto establecida.
En este caso, esos alias no son direcciones consecutivas, lo que permite incorporar los puertos de expansión para
los visores.
FA-1.2

Memoria

Al observar la tabla de direccionamiento y el mapa de memoria, se establece que, al no contar con cuatro bits
de direcciones, el espacio se reduce a 64KB16 = 4KB. De la configuración inicial, 0,5KB de ROM y 2 KB de RAM,
se tiene un total de 2,5KB ya ocupados, por lo que se deriva 4KB-2,5KB = 1,5KB de espacio libre para expansión.
Debido a la descodificación parcial, ta ié e iste 1 espa ios alias li es, po lo ue sólo es posi le olo a
la expansión de 1KB en una posición.

El espacio de 0,5KB se ubica (con A13:10 = 0000) entre 0200 y 03FFF, por supuesto, con sus alias.

El espacio de 1KB va contiguo a la RAM1, desde 7C00 hasta 7FFF y también cuenta con 15 alias. Se elige este
rango de direcciones.

E/S

Para el caso de los puertos, se observa que existen 32 direcciones válidas; al ser utilizadas 7 direcciones para
puertos de salida se cuenta con 32-7 = 25 direcciones libres. Sólo se usa un puerto de entrada por lo que se tiene
31 direcciones disponibles para puertos de entrada.

Para los dos visores adicionales, VISOR6 y VISOR7 se elige las direcciones contiguas al grupo de visores ya
instalados, es decir, VISOR6  F9 y VISOR7  F8.

Para el teclado adicional se elige la siguiente dirección contigua a los visores adicionales con el fin de minimizar
el uso de inversores en el descodificador, es decir, FILA y COLA usan la dirección F7, donde FILA es el puerto de
salida de selección de las filas de la matriz del teclado y COLA es el puerto de entrada que permite leer el estado
de las columnas.

FA-1.3

Para el desarrollo de la expansión se sigue los cinco pasos de diseño.

1. Esquema de solución.

El diagrama se explica solo. Se especifica la necesidad de dos puertos, uno E y otro S, para el teclado.
2. Mapas de direccionamiento.

3. Tablas de direccionamiento.

4. Ecuaciones del descodificador de direcciones.

_ 𝒂 = + ∙ ̅̅̅̅̅̅
̅/ ∙𝒂 ̅̅̅̅̅ ∙ 𝒂

_ 𝒊 𝒂= ̅̅̅ ∙ 𝒂 ∙ 𝒂 ∙ 𝒂
∙ ̅/ ∙𝒂 ∙𝒂

_ 𝒂= ∙ ̅/ ∙𝒂 ∙𝒂
̅̅̅ ∙ 𝒂 ∙ 𝒂 ∙ 𝒂

_ 𝒊 = ̅̅̅ ∙ 𝒂
∙ ̅/ ∙𝒂 ∙𝒂 ∙𝒂 ̅̅̅ ∙ 𝒂
̅̅̅

_ 𝒊 = ∙ ̅/ ∙𝒂 ∙𝒂 ∙𝒂
̅̅̅ ∙ 𝒂
̅̅̅ ∙ 𝒂
5. Diagrama de bloques de montaje.
FA-2 Suma de 100 bytes no signados sin desborde.

1. Esquema de solución.

Para evitar el desborde se hace un


análisis dimensional. Supóngase la
suma de 100 bytes del mayor valor
posible (FF=255), entonces el valor
máximo sería 25500, que se
representa con dos bytes y no habrá
desborde por estar en rango. La
estrategia es leer el LSB de la suma y
sumarle un byte, si se produce un
acarreo se incrementa el MSB. Se
procede iterativamente con los
siguientes bytes. Se requiere un puntero y un contador.

3. Flujograma.

2. Algoritmo.

A. Variables y datos

CANT 100, cantidad de bytes


datos 100 octetos
suma 2 octetos, ci:0
contador 1 octeto, ci: CANT
puntero ci: datos
acarreo bandera

B. Procedimiento

1. iniciar variables
 puntero a datos
4. Modelos de programación.
 borrar suma
6800 – ET-3400
 contador de bytes datos 100 bytes en RAM, dir inicio: 0
suma 2 bytes en RAM, ci: 0
2. acumular byte contador B, ci: CANT
 leer suma puntero IX, ci: datos
 sumar byte borrador A
acarreo C, bandera
 actualizar
 ¿acarreo?
Z80 – KENTAC-z800
sí, incrementar MSB suma datos 100 bytes en RAM, dir inicio: 8000H
suma 2 bytes en RAM, ci: 0
3. ¿último? contador B, ci: CANT
 no, volver a 2. puntero IX, ci: datos
borrador A
acarreo C, bandera
4. salir MSB auxiliar C, registro, ci: 0
5. Programas en código fuente.

;*** Suma de 100 bytes no signados sin desborde


;*** MP6800 – Computador ET-3400

.org 0
CANT .equ 100 ; cantidad de bytes

.dseg
datos .rb CANT ; 100 datos
suma .rb 2 ; resultado

.cseg
; iniciar variables
ldx #datos ; puntero a datos
clr suma ; borrar suma
clr suma+1
ldab #CANT ; contador de bytes
; acumular byte
sgte: ldaa suma ; leer suma
adda 0,ix ; sumar byte
staa suma ; actualizar suma
bcc cuenta ; ¿acarreo?
inc suma+1 ; sí, generar MSB suma
; ¿último?
cuenta: inx ; apuntar a siguiente dato
decb ; contabilizar
bne sgte ; no, siguiente dato
wai
.fin

;*** Suma de 100 bytes no signados sin desborde


;*** MPZ80 – Computador KENTACz800

.org 8000H
CANT .equ 100 ; cantidad de bytes

.dseg
datos .rb CANT ; 100 datos
suma .rb 2 ; resultado

.cseg
; iniciar variables
ld ix,datos ; puntero a datos
xor a ; borrar suma
ld (ix+CANT),a ; LSB
ld c,a ; MSB
lda b,CANT ; contador de bytes
; acumular byte
sgte: ld a,suma ; leer suma
add a,(ix) ; sumar byte
ld suma,a ; actualizar suma
jp nc,cuenta ; ¿acarreo?
inc c ; sí, generar MSB suma
; ¿último?
cuenta: inc ix ; apuntar a siguiente dato
dec b ; contabilizar
jp nz,sgte ; no, siguiente dato
ld (ix),c ; actualizar MSB
halt
.fin

También podría gustarte