laboratorio1microprocesadores

Sunday, December 03, 2006

LABORATORIO # 8

Publicacion no terminada
PROGRAMACIÓN DEL MICROPROCESADOR 8085
I. INTRODUCCIÓN

en estos laboratorios podremos observar como hacer las bifurcaciones en los programas asi como llamar a las subrrutinas.

II. OBJETIVOS

1. OBJETIVOS GENERALES

Ver los pasos a seguir para realizar el llamado de las subrrutinas y las bifurcaciones en los programas del 8085.

2. OBJETIVOS ESPECIFICOS

Desarrollar y ejecutar programas para el microprocesador 8085 que hagan uso de los recursos de bifurcación y salto a subrutinas.
Utilizar el simulador del microprocesador 8085.

3. RESUMEN

Ya que este programa es demasiado grande y lo realizamos en plena semana de parciales, aunque si se pudieron ver los resulñtados obtenidos, no se pudo profundizar en ellos, ya que se siguio estrictamente lo que se pedia sin pensar en por se ponia los comandos.


4. MARCO TEORICO

Omitido

5. LISTADO DE MATERIALES

fuente de alimentacion de 220V AC

entrenador universal.

software para simular en una PC (opcional)

6. LABORATORIO

Procedimiento

Utilizando como base el programa de simulación de terminal de datos del programa simulador, desarrollar un programa que realice la suma entre dos operandos de dos dígitos que se presentarán en la pantalla, incluyendo los símbolos de suma, igualdad y el resultado luego de pulsar la tecla del signo de igualdad, como si se tratase de una calculadora (por ejemplo 13+27 = 40).

Deberá:

1.1 Realizar el flujograma de funcionamiento.
1.2 Realizar el flujograma detallando los pasos de programación.
1.3 Escribir el programa en lenguaje ensamblador, con la respectiva documentación en la columna de comentarios.
1.4 Cargue el programa en el simulador y verifique sus respuestas.


7. CONCLUSIONES
Ø Se enumeran las conclusiones que salieron del laboratorio
8. FE DE ERRATAS
Ø En este espacio se enumeran cambios, errores, etc... importantes del informe, por ejemplo el día de entrega del circuito se le quemo el integrado entonces en este espacio se especifica porque se quemo y la referencia del nuevo integrado y si es el caso el nuevo diseño

LABORATORIO # 7

PUBLICACION NO TERMINADA

PROGRAMACIÓN DEL MICROPROCESADOR 8085

I. INTRODUCCIÓN
Aquí se detallan pequeños programas lineales, para ir tomando mayor dominio en el manejo del entrenador y sus programas.+

II. OBJETIVOS+

1. OBJETIVOS GENERALES+

Realizar pequeños programas para ir familiarizandose con el entrenador 8085.+

2. OBJETIVOS ESPECIFICOS+
Familiarizarse con el conjunto de instrucciones del microprocesador 8085. +
Utilizar el simulador del microprocesador 8085. +
Practicar los pasos para la programación en lenguaje ensamblador de pequeños programas en línea.+

3. RESUMEN +

Realizar estos programas fue una tarea muy agradable, ya que nos permitio conocer como se realizan diversos programas, y aprender mas sobre el proceso de realizacion de ensamblaje de los mnemonicos.+

Aunque no se conocian las funciones de algunos mnemonicos se pudo deducirlos viendo la funcion que realizaban aunque para los dos ultimos programas se necesito ayuda del docente.+

finalmente se pudieron realizar todas las experiencias con exito, y se pudieron ver las formas de simular el entrenador en la PC, que nos permite conseguir la codificacion en lenguaje de maquina con tan solo presionar un boton.+

4. MARCO TEORICO+

Omitido+

5. LISTADO DE MATERIALES+

fuente de alimentcion de 220V AC+

Entrenador universal del 8085+

6. LABORATORIO Y CONCLUSIONES

Parte 1

Procedimiento
Dado el siguiente segmento de programa en lenguaje ensamblador:

1.1 Realizar el flujograma de funcionamiento.

1.2 Llenar la columna de comentarios.

1.3 Traducir el programa a lenguaje de máquina, asignándole las respectivas direcciones de memoria a cada una de las instrucciones del programa.

1.4 Analizar el programa y considerando que en la posición de memoria C020 se tiene 97H, indicar el resultado que se espera obtener al correr el mismo.

El resultado de los calculos manuales es 80H, que corresponde con los resulytados en el simulador

1.5 Cargue el programa en el simulador y verifique sus respuestas.

El programa es el sig:

.org C000H
lda C020H
mvi B, 88H
ana B
out 00H
sta C021H
jmp C000H

Parte # 2

Procedimiento

Dado el siguiente segmento de programa en lenguaje ensamblador:

2.1 Realizar el flujograma de funcionamiento.


2.2 Llenar la columna de comentarios. 3.1 Realizar el flujograma de funcionamiento.

2.3 Traducir el programa a lenguaje de máquina, asignándole las respectivas direcciones de memoria a cada una de las instrucciones del programa.


2.4 Analizar el programa y considerando que en el puerto de entrada 00 se tiene 18H, indicar el resultado que se espera obtener al correr el mismo.

Suponiendo que en el puerto de entrada 00, se tiene 18H, entonces el resultado de un la funcion ORI entre este 18H y 07 es EO, lo cual pudo ser comprovado teoricamente como en el simulador.

2.5 Cargue el programa en el simulador y verifique sus respuestas.
Registrar los resultados para su inclusión en el informe.

El programa que nos permite llegar al resultado anterior es el siguiente:


.ORG A000H
IN 00H
ORI 07
CMA
OUT 00
JMP A000H

Parte 3

Procedimiento

Dado el siguiente segmento de programa en lenguaje ensamblador:

3.1 Realizar el flujograma de funcionamiento.


3.2 Llenar la columna de comentarios.
3.3 Traducir el programa a lenguaje de máquina, asignándole las respectivas direcciones de memoria a cada una de las instrucciones del programa.


3.4 Analizar el programa e indicar el resultado que se espera obtener al correr el mismo.

Aqui se ve una funcion OR-EXclusivo entre 70H y ACH, lo cual nos da un resultado de DCH, el cual pudo ser verificado tanto manualmente como en el simulador.

3.5 Cargue el programa en el simulador y verifique sus respuestas.3

El programa que nos permite realizar la funcion anterio es el siguiente:

.org 2000H

mvi A,70H

mvi B,ACH

xra B

sta 2012

Hhlt

Parte 4

Procedimiento

Dado el siguiente segmento de programa en lenguaje ensamblador:

4.1 Realizar el flujograma de funcionamiento.


4.2 Llenar la columna de comentarios.
4.3 Traducir el programa a lenguaje de máquina, asignándole las respectivas direcciones de memoria a cada una de las instrucciones del programa.


4.4 Analizar el programa e indicar el resultado que se espera obtener al correr el mismo.

El resultado obtenido entre 99H y 01H es 1, y puest que es uno se obtiene una salida Of, talcomo se puede apresiar tambien en el simulador.

4.5 Cargue el programa en el simulador y verifique sus respuestas.

El programa que nos permite realizar esta funcion es:

.org 2c00H

mvi A,99H

ani 01H

jnz uno

mvi A,CCH

jmp otro

uno:mvi

A,0FH

otro:out 10H

hlt

Parte 5

Procedimiento

Dado el siguiente segmento de programa en lenguaje ensamblador:

5.1 Realizar el flujograma de funcionamiento.


5.2 Llenar la columna de comentarios.
5.3 Traducir el programa a lenguaje de máquina, asignándole las respectivas direcciones de memoria a cada una de las instrucciones del programa.


5.4 Ajustar la dirección del banco de interruptores a la dirección del puerto de entrada 0F y el banco de diodos LED a la dirección del puerto de salida F1

5.5 Analizar el programa, colocar en el banco de interruptores 33H, verificar el resultado mostrado en el banco de LEDs, luego cambie el dato de entrada en los interruptores a 44H y verifique nuevamente el resultado.

Cuando colocamos 33H en el banco de interrupciones del puerto de entrada OF, y hacemos corre el programa, este sigue corriendo, a la espera de que se introduzca una direccion como 44H, con la cual la resta es cero para poder detener el programa y sacar los datos FFH por el puerto F1.


5.6 Cargue el programa en el simulador y verifique sus respuestas.
El programa que nos permite hacer esto es el siguiente:

.org 1000H

in 0FH

sui 44H

JNZ 1000H

mvi A,FFH

out F1

HHLT

Parte 6

Procedimiento

Dado el siguiente segmento de programa en lenguaje ensamblador:

6.1 Realizar el flujograma de funcionamiento.


6.2 Llenar la columna de comentarios.
6.3 Traducir el programa a lenguaje de máquina, asignándole las respectivas direcciones de memoria a cada una de las instrucciones del programa.


5.1 Analizar el programa y colocando en el banco de interruptores el valor equivalente a 99H, verificar el resultado mostrado en el banco de LEDs que se espera obtener al correr el programa.

Easte programa compara ABH de acumulador con 99h, del banco de interrupciones, continuando el clico si es que no son iguales ysacando una saluda CD si es que lo son.

6.4 Cargue el programa en el simulador y verifique sus respuestas.

El programa que nos permite realizar las experiencias es el siguiente:

.org 1B00H
in ABH
cpi 99H
jnz 1B00H
mvi A,EEH
out CDH
hlt

7. CONCLUSIONES

Conclusiones de cada experiencia detallada en el procedimiento de cada experiencia.


Pudimos observar detalladamente la realizacion de programas, desde el flujo de programas hasta la codificacion en codigo de maquina.

Pudimos observar que es casi lo mismo tener el entrenador o e simlador del entrenador, los cuales cumplen la misma funcion, aunque el simulador es mucho mas facil, ya que nos permite conseguir los codigos de maquina casi instantaneamente.

8. FE DE ERRATAS

Los mayores problemas que tubimos fue el de identificar la funcio de cada mnemonico, y pues al no conocer a perfeccion el idioma ingles, que s en el cual esta escrito el manual, no se podian decifrar con facilidad dichas instrucciones.

El hacer algunas pruevas directamente en la ventana principal del simulador, nos produ0jeron unos retrazos, ya que no se pudo encontrar la forma de guardad dicha informacion, y entonces decidimos hacer el ensamblado directamente en el simulador, asi se tendra una copia para simepre de lo que hayamos hecho.


LABORATORIO # 6

PROGRAMACIÓN DEL MICROPROCESADOR 8085

I. INTRODUCCIÓN

En este laboratorio se vera como poner el programa monitor del microprocesador 8085, el cual controla los tanto displeys como teclados, para facilitar escribir futuros nuevos programas.

Ademas se realizara un problema adicional que provara el buen funcionamiento de dicho programa.

II. OBJETIVOS


1. OBJETIVOS GENERALES

Realizar la sección de inicialización del programa Monitor.
Programar las secciones de retardo y despliegue del programa monitor.
Realizar la Programación para manejo del teclado hexadecimal y de teclas de función.
Utilizar los recursos del programa Monitor para programación de programas de aplicación. Son los objetivos universales del proyecto

2. OBJETIVOS ESPECIFICOS

Tener conocimientos de que es el programa monitor y cuales son sus funciones.

Ver las secciones de despliegue y retardo del Programa Monitor

Ver como agregar las agrega las secciones de Rastreo

Ver como implementar las ocho teclas de función AH, AL, DA, R, ST, GO, X1 y
X2

Realizar la suma de dos numeros utilizando para ello el programa monitor.

3. RESUMEN

Bueno, el hecho de que es un laboratorio en el cual solo se tienen que seguir pasos ya establecidos, hiso que el desarrollo de estas practicas fuera sencillo, aunque al principio no se pudo lograr el objetivo con el primer entrenador, ya que suponemos que este estaba arruinado, por que se lo reviso detalladamente y no encontro falla en los codigos de maquina introducidos. Pero al cambiar de entrenador se pudo realizar con rapìdez dichas experiencias ya que se estaba familiarizado con los pasos a seguir.

Luego de desarrollar cada un ade las lecciones se hacian las comprovaciones del funcionamiento, el cual en algunos casos fallava y entonces se tenian que revisar los datos introducidos y corregir los errores.

4. MARCO TEORICO

La teoria que se ve en estas experiencias estan detalladas en las lecciones 9, 11, 12, 13, 14 del manual del entrenador del microprocesador 8085.


5. LISTADO DE MATERIALES

fuente de alimentacion de 220AC

Entrenador universal de 8085, con su respectivo manual.

6. LABORATORIO

Práctica # 1

El desarrollo de esta practiva es tan solo de informar en que posiciones de memoria recide el programa monitor, comprender como funciona, como expanderlo, como introducir datos y muchas otras cosas.

práctica # 2

Procedimiento
1. Poner el interruptor RESET arriba y todos los demás interruptores abajo.
2. Conectar la fuente de alimentación y encenderla.
3. Poner el interruptor ENROM arriba para habilitar la ROM.
4. Poner el interruptor WEN arriba para permitir la escritura en la ROM.
5. Utilizar el procedimiento habitual (poner los interruptores de datos a la dirección
y presionar el botón ALE, luego poner los interruptores de datos al código a ser
escrito y presionar el botón WR) para copiar el Programa 2 a la ROM. El
Programa 2 esta listado en el apéndice 1 posiciones 0074 a 00A4.
6. Utilizar el procedimiento habitual para copiar la Tabla Patrón, direcciones 0040
a 004F como se lista en el apéndice 1.
7. Poner el interruptor A8 arriba para acceder a las posiciones de memoria 0100 a
01FF.
8. Utilizar el procedimiento habitual para almacenar FF en la posición de memoria
011C. La dirección de la ROM 011C es copiada a la dirección 80EE de la RAM
y llega ha ser el byte de orden superior de la constante de retardo. El valor FF da
un retardo de aproximadamente medio segundo.
9. Poner abajo el interruptor WEN para evitar la escritura en la ROM.
10. Utilizar el procedimiento habitual (poner los interruptores de datos con la
dirección para ser verificada y presionar el botón ALE, luego el botón RD para
leer los datos) para verificar el código de programa listado en el apéndice 1 en
las posiciones 010A a 012D. RECUERDE QUE LA POSICIÓN DE MEMORIA
011C HA SIDO CAMBIADA A FF.
11. Poner el interruptor A8 abajo para regresar a las posiciones de memoria 0000 a
00FF.
12. Utilizar el procedimiento habitual para verificar los Programas 1 y 2 en las
posiciones de memoria 0000 a 0002 y 0060 a 00A4.
13. Utilizar el procedimiento habitual para verificar la tabla Patrón almacenada en el
paso 6.
14. Poner el interruptor ENROM abajo para deshabilitar la ROM.
15. Poner abajo el interruptor RESET para correr el Programa 2. Como el Programa
está inicializado en el modo data (DA) con la posición de despliegue de datos
(DDA) puesta a 00, ambos displays mostrarán ceros sin punto decimal. El
Display 1 y Display 2 se alternarán en intérvalos de aproximadamente ½
segundo como se determinó por la constante de retardo en el paso 8. Como en el
Programa 1, las salidas de los Puertos son inicializados a cero. Esto hace
iluminar todos los segmentos incluido el punto decimal del Display 2, durante el
primer período de retardo.
16. Poner el interruptor RESET arriba para detener el programa.
CAMBIO DE LA CONSTANTE DE RETARDO
17. Poner los interruptores ENROM y WEN arriba para habilitar la escritura de la
ROM.
18. Poner el interruptor A8 arriba para acceder alas posiciones 0100 a 01FF.
19. Utilizar el procedimiento habitual para almacenar 05 en la posición de la
dirección 011C. Esta dirección srá copiada en la dirección 80EE de la RAM y
llegará ha ser el byte de orden superior de la constante de retardo. El valor 05 da
un retardo de aproximadamente 10 ms.
20. Poner el interruptor WEN abajo para prevenir la escritura en la ROM.
21. Utilizar el procedimiento habitual para verificar el contenido 05 en la dirección
011C.
22. Poner el interruptor ENROM abajo para deshabilitar la ROM. Como los
interruptores de datos, el interruptor A8 es solapado por el 8085 y se lo puede
dejar arriba.
23. Poner el interruptor RESET abajo para correr el programa. Los displays 1 y 2 se
alternarán en intervalos de aproximadamente 10 ms dando la sensación de que
ambos están encendidos continuamente.
24. Poner el interruptor RESET arriba para parar el programa.
PONER EN MODO AL
25. Poner los interruptores ENROM y WEN arriba para habilitar la escritura en la
ROM.
26. Utilizar el procedimiento habitual para almacenar FD en la dirección 0128 y 12
en la 012B. Ver tabla 11-1. La FD de la dirección 0128 es copiada a la dirección
80FA de la RAM poniendo el programa en modo AL. El 12 en la dirección
012B es copiado a DAL en la dirección 80FD de la RAM y será desplegada.
27. Poner el interruptor WEN abajo para prevenir la escritura en la ROM.
28. Utilizar el procedimiento habitual para verificar el FD en la dirección 0128 y 12
en la dirección 012B.
29. Poner el interruptor ENROM abajo para deshabilitar la ROM.
30. Poner el interruptor RESET abajo para correr el programa. El Display mostrará
el 12 en el byte DAL. El punto decimal del Display 2 se encenderá indicando
que el programa está en modo AL.
31. Poner el interruptor RESET arriba para parar el programa.
PONER EN MODO AH
32. Repetir los pasos 25 al 31. En el paso 26 almacenar FE en la dirección 0128 para
poner el programa en el modo AH. Almacenar 34 en la dirección 012C para que
se despliegue. En el paso 30 el diplay mostrará el 34 en el byte DAH y el punto
decimal del Display 1 iluminará indicando que el programa está en modo AH.
VERIFICACIÓN DE LA TABLA PATRON
33. Repetir los pasos 25 a 31. En el paso 26 almacenar el número 56, 78, etc. en la
dirección 012C para verificar los bytes restantes de la Tabla Patrón (ver
apéndice 1). El punto decimal del Display 1 estará encendido en cada caso
indicando que el programa se encuentra en modo AH.
REESTABLECIENDO
34. Repetir los pasos 25 a 31. En el paso 26 reestablecer los bytes de MODEL,
DDA, DAL y DAH a sus valores originales como en la tabla 11-1. En el paso
30, se desplegará 00 sin punto decimal como en el paso 23.
35. Apagar el equipo.

Práctica # 3

Procedimiento

1. Poner el interruptor RESET arriba y todos los demás interruptores abajo.
2. Conectar la Fuente de Alimentación y encender el equipo.
3. Poner el interruptor ENROM arriba para habilitar la ROM.
4. Poner el interruptor WEN arriba para habilitar la escritura en la ROM.
5. Utilizar el procedimiento manual para copiar el Programa · a la ROM. El
Programa 3 esta listado en el apéndice 1 posiciones 00A2 a 00F0.
6. Poner el interruptor WEN abajo para prevenir posteriores escrituras en la ROM.
7. Utilizar el procedimiento habitual para verificar los programas 1,2 y 3 en las
posiciones 0000 a 0002 y 0060 a 00F0.
8. Utilizar el procedimiento habitual para verificar el Patrón de la Tabla en las
posiciones 0040 a 004F.
9. Poner el interruptor A8 arriba para acceder a las posiciones de memoria 0100 a
01FF.
10. Utilizar el procedimiento habitual para verificar las posiciones 010A a 012D.
11. Poner el interruptor EROM abajo para deshabilitar la ROM.
12. Poner abajo el interruptor RESET para correr el programa. Como en la lección
11, el programa inicia en el Modo DDA puesto en 00. El Display por lo tanto
mostrará 00 sin punto decimal.
13. Presionar el botón 1. La pantalla cambia a 01.
14. Presionar el botón 2. El 1 en el dígito de la derecha es desplazado al dígito de la
izquierda y el dígito 2 es insertado en el dígito de la derecha.
15. Presionar el botón 3 a F. Note que cada dígito es insertado en el dígito de la
derecha y el dígito anterior es desplazado a la izquierda.
16. Presionar l botón F dos veces para obtener FF en la pantalla.
17. Poner el interruptor RESET arriba y luego abajo. La pantalla mostrará ahora 00.
El FF mostrado en el paso 16 estaba en el byte DDA en la RAM no en la ROM.
El programa es aún inicializado para mostrar 00.
18. Repetir el paso 16.
19. Presionar y soltar el botón RST. Note que tiene el mismo efecto que poniendo el
interruptor RESET arriba y luego abajo nuevamente.
20. Poner arriba el interruptor RESET.
21. Apagar el equipo.

Práctica # 4

Procedimiento

1. Poner el interruptor RESET arriba y todos los demás interruptores abajo.
2. Conectar la fuente de alimentación y encender el equipo.
3. Poner arriba el interruptor ENROM para habilitar la ROM.
4. Poner arriba el interruptor WEN para permitir la escritura en la ROM.
5. Utilizar el procedimiento habitual para almacenar la Tabla de Función y la
sección de Encontrar Función del Programa 4 en las posiciones 0050 a 005F y
00F1 a 00FF. Ver el apéndice 1.
6. Poner el interruptor A8 arriba para acceder a las posiciones de memoria 0100 a
01FF.
7. Utilizar el procedimiento habitual para almacenar las secciones de Función GO
y Función Lectura del Programa 4 en las posiciones 0100 a 0109.
8. Poner abajo el interruptor WEN para prevenir posteriores escrituras en la ROM.
9. Utilizar el procedimiento habitual para verificar los códigos almacenados en el
paso 7 y las posiciones 010A a 012D de la ROM.
10. Poner abajo el interruptor A8 para acceder a las posiciones de memoria 0000 a
00FF.
11. Utilizar el procedimiento habitual para verificar lo restante del programa
Monitor en las posiciones 0000 a 0002 y 0040 a 00FF.
12. Poner abajo el interruptor ENROM para deshabilitar la ROM.
VERIFICANDO LOS MODOS
13. Poner el interruptor RESET abajo para correr el programa. Como en las
lecciones 11 y 12, el programa comienza en el modo Dato (DA) con DDA
puesto en 00. El display por lo tanto mostrará 00 sin puntos decimales.
14. Presionar dos veces la tecla 1. El byte DDA contendrá 11 y se mostrará 11.
15. Presionar la tecla AL. El programa ahora está en el modo de Dirección Baja
(AL) con lo cual iluminará el punto decimal del display de la derecha (display
2). Como el byte DAL esta inicializado con 00, el display muestra 00.
16. Presionar dos veces la tecla 2. El byte DAL tienen ahora 22 y el display
mostrará 22.
17. Presionar la tecla AH. El programa esta ahora en el modo de Dirección Alta
(AH) con lo cual ilumina el punto decimal del display izquierdo (display 1).
Como el byte DAH está inicializado con 00, el display mostrará 00.
18. Presionar dos veces la tecla 3. el byte DAH tendrá ahora 33 y el display
mostrará 33.
19. Presionar la tecla DA. El programa retorna al modo Datos (DA). No se iluminan
los puntos decimales. El display muestra el 11 del byte DDA.
20. Presionar la tecla AL. El programa retorna al modo AL. El punto decimal de la
derecha ilumina. El diplay muestra 2l 22 del byte DAL.
21. Presionar la tecla AH. El programa retorna al modo AH. Ilumina el punto
decimal de la izquierda. El display muestra el 33 del byte DAH.
ALMACENANDO – LEYENDO EN LA RAM
22. Presionar la tecla AH para poner el programa monitor en modo AH.
23. Presionar los botones 8 y 0 para almacenar 80 en DAH. Si el DAH ya contiene
el número deseado, no necesita ser recargado.
24. Presionar la tecla AL para poner el programa Monitor en modo AL.
25. Presioanar la tecla 0 dos veces para almacenar 00 en DAL. Si DAL ya contiene
el número deseado, no necesita ser almacenado.
26. Presionar la tecla DA para poner el programa Monitor en modo DA.
27. Presionar los botones 1 y 2 para almacenar 12 en DDA. Si el DDA ya contiene
el número deseado, no necesita ser recargado.
28. Presionar la tecla ST para almacenar el 12 de DDA a la dirección 8000
especificada por DAH y DAL. La dirección en DAH y DAL se incrementa en 1.
29. Presionar la tecla AL para poner el programa en modo AL. Note que DAL ha
sido incrementado a 01. Cuando se pulsa nuevamente la tecla ST, los datos serán
almacenados en la dirección 8001.
30. Presionar la tecla DA para poner el programa en modo DA.
31. Repetir los pasos 27 y 28 para completar la siguiente tabla:

DIRECCION .......DATOS
8000 .........................12
8001.......................... 34
8002.......................... 56
8003 ..........................78
6004 ..........................9A
8005 .........................BC
8006 .........................0E
8007......................... F0

32. Presionar la tecla AL para poner el programa en modo AL. DAL es 08.
33. Repetir los pasos 22 a 25 para retornar DAH y DAL a 8000.
34. Presionar la tecla R para verificar la primera dirección de la tabla. Se leerá 12 en
la dirección 8000 y almacenará en DDA. El programa se habrá puesto en modo
DA para mostrar el contenido de DDA. Las direcciones en DAH y DAL se
incrementarán en 1.
35. Repetir el paso 34 para verificar el resto de la tabla.
ALMACENAR-LEER EN ROM
36. Poner el interruptor WEN arriba para permitir la escritura en la ROM.
37. Repetir los pasos 22 a 25 poniendo DAH y DAL a 012E. Este es el byte después
del último byte del programa Monitor.
38. Presionar la tecla DA para poner el programa en modo DA.
39. Repetir los pasos 27 y 28 para almacenar lo siguiente:

DIRECCION DATOS
012E..................11
012F...................22
0130...................33

40. Poner el interruptor WEN abajo para prevenir posteriores escrituras de la ROM:
41. Repetir los paso 22 a 25 poniendo DAH y DAL nuevamente en 012E.
42. Repetir el paso 34 para verificar la tabla almacenada en el paso 39.
VERIFICAR LA FUNCION GO
43. Repetir los pasos 22 a 25 poniendo DAH y DAL a 8000.
44. Presionar la tecla DA para poner el programa en modo DA.
45. Repetir los pasos 27 y 28 para almacenar la siguiente tabla:

DIRECCION MNEMONICO DATOS
8000......................JMP................C3
8001..............................................00
8002............................................. 80


Esta es la instrucción de salto incondicional que transfiere el control así mismo
nuevamente. Una vez ejecutada se repetirá indefinidamente.

46. Repetir los pasos 22 a 25 para retornar a DAH y DAL a 8000.
47. Repetir el paso 34 para verificar la tabla almacenada en el paso 45.
48. Repetir los pasos 22 a 25 para retornar nuevamente a DAH y DAL a 8000.
49. En éste punto el programa está en modo AL desplegando DAL (00). Presionar la
tecla GO. El control se transfiere a la instrucción de salto en la posición 8000 la
que se repite indefinidamente. El programa Monitor ya no está corriendo.
Dependiendo de su estado, cuando se presionó la tecla GO, el display contendrá
un cero en la izquierda o en la derecha.. El otro display quedará en blanco.
50. Presionar la tecla RST para reiniciar el programa Monitor.
VERIFICANDO X1 Y X2
51. Presionar la tecla 1 para poner el display en 01.
52. Presionar la tecla X1. El programa se reinicializa. El display muestra 00.
53. Repetir los pasos 51 y 52 utilizando el X2. La tecla X2 tiene el mismo efecto
que X1.
54. Apagar el equipo.

Práctica # 5

Procedimiento

1. Poner el interruptor RESET arriba y todos los demás interruptores abajo.
2. Conectar la fuente de alimentación y encender el equipo.
3. Poner el interruptor RESET abajo para arrancar el programa Monitor.
4. Presionar la tecla AH para ponerlo en modo AH.
5. Presionar las teclas 8 y 0 para almacenar 80 en DAH.
6. Presionar la tecla AL para poner el programa en modo AL.
7. Presionar las teclas 0 y para almacenar 02 en DAL.
8. Presionar la tecla DA para poner el programa en modo DA.
9. Presionar las teclas 2 y 1 para almacenar 21 en DDA.
10. Presionar la tecla ST par almacenar 21 en DDA en la dirección 8002 conforme
al contenido de DAH y DAL.
11. Repetir los pasos 9 y 10 para almacenar el resto del programa 5 conforme se
lista en la Tabla 14-1.
12. Repetir los pasos 4 al 7 para poner DAH y DAL nuevamente en 8002.
13. Presionar la tecla R para verificar el 21 en la dirección 8002.
14. Repetir el paso 13 par verificar el resto del programa de la Tabla 14-1.
SUMA DE NUMEROS
15. Repetir los pasos del 4 al 7 poniendo DAH y DAL a 8000.
16. Presionar la tecla DA para poner el programa en modo DA.
17. Presionar las teclas 1 y 7 para almacenar 17H en DDA.
18. Presionar la tecla ST par almacenar el 17H en DDA en la dirección 8000
conforme el contenido de DAH y DAL. Esto pone 17H en N1 (decimal23).
19. Presionar las teclas 3 y 2 para almacenar 32H en DDA.
20. Presionar la tecla ST par almacenar el 32H en DDA en la dirección 8001. Esto
pone 32H en N2 (decimal 50).
21. Después de almacenar el 32H en la posición 8001, las dirección en DAH y DAL
se incrementa a 8002 que es la dirección de inicio del programa 5. Presionar la
tecla GO para correr el programa. El programa 5 pone el LSB de la suma en
DDA y el MSB en DAL. Luego, el control es retornado al programa Monitor. El
monitor es colocado en modo DA el cual despliega el LSB de la suma. 49H =
17H + 32H (en decimal 73 = 23 + 50).
22. Presionar la tecla AL para desplegar DAL. El MSN es 00 indicando que no hubo
acarreo.
23. Repetir los pasos 15 al 22 almacenando 3AH en la dirección 8000 y E1H en la
8001. En el paso 21 el LSB de la suma será 1BH. En el paso 22 el MSB será
01H. 11BH = 3AH + E1H (en decimal 283 = 58 + 225).
24. Apagar el equipo.

7. CONCLUSIONES

Practica # 1

Aqui podimos aprender sobre el programa monitor, ¿que es?, cuales son sus direcciones de memoria, en la RAM y en la ROM, cuales son sus modos de direccionamiento y demas.

Practica # 2

Aqui hemos podido ver como iniciar el programa monitor, con las secciones de despliehue y retardos de dicho programa.

Practica # 3

Este programa nos muestra las rutinas de rastreo, de encontrar el teclado y encontrar datos, es decir que se nos avilitan las teclas exadecimales del teclado del entrenador para poder introducir datos mas facilmente que introcirlos en codigo binario y nosmuestra como utilizar este nuevo recurso.

Practica # 4

Aqui se nos muestra como avilitar las teclas que faltaban avilitar en el teclado, que son las ocho teclas de función AH, AL, DA, R, ST, GO, X1 y X2.

La Función de Dirección Alta (FAH), Función de Dirección Baja (FAL) y Función de Dato (FDA) son rutinas

Rutina de Función GO que transfiere el control a la instrucción cuya dirección está especificada el DAH y DAL.

Rutinas de Función FX1 y FX2 que están reservadas para uso futuro.

ademas se nos mostro como podemos observar estos botones en los displays.

practica # 5

Aqui se realizo un programa que suma dos numeros, utilizando para elllo la base que se tenia del programa monitor.

8. FE DE ERRATAS

Se cometieron errores al introducir los datos, ya que por tratar de introducirlos rapidamente, pues se cometieron errores, que hicieron que despues las pruebas no dieran los resultados esperados.

Otro tipo de error se cometio por no habilitar lo sinterruptores de control la las memorias, por lo cual se tuvieron que repetir la entrada de datos hasta tres veces en una ocacion.

Luego de intentar varias veces, revisar tambien varias veces los codigos de maquina en el primer entrenador, pudimos llegar a la conclusion de que estaba dañado, por lo cual tuvimos que cambiar de entrenador, y entonces se pudo realizar la práctica adecuadamente y rapidamente, ya que se conocian los pasos que se tenian que seguir.

Sunday, October 22, 2006

laboratorio # 5

LA ROM

I. INTRODUCCIÓN:

En este laboratorio se realizaran aporaciones de escritura y lectrura en la memoria ROM.

II. OBJETIVOS:

1.-GENERALES:


conocer el funcionamiento de una memoria no volatil, asi el funcionamiento que desempeña esta memoria en el entrenador de microprocesador 8085.

2.-ESPECIFICOS:

Experimentar la escritura y lectura manuales en la memoria EEROM 2816, utilizando los interruptores y circuitos indicadores montados en el entrenador de microprocesadores 8085 al mismo tiempo de verificar la no volatilidad de este tipo de memorias.

III. RESUMEN:

La practica se desarrolo siguiendo siempre los puntos que se nos enmarcavan en la leccion 6 del manual del entrenador de microprocesador, por lo que los resultados ya eran casi totalmente predecibles, pudimos ver la avilitacion de dicha memoria para poder gravarle informacion, y como se direccionan los reguistros, tambien la forma de leer la informacion q ella contiene, observando ademas su no volatividad, es decir q retuvo la informacion aun sin energia, lo cual es una propiedad muy importante.

solo se presento un poqueño problema, el cual esta comentado en el tirulo Fe de Erratas.

IV. MARCO TEORICO:

El marco teorico esta detallado en la leccion 6 del manual del entrenador de microprosesador 8085.

V.-MATERIALES:

Entrenador de microprocesadores 8085.

Fuente para entrenador.

pinsa para remover integrados.

VI. EXPERIENCIAS DEL LABORATORIO:

Procedimiento

1. Poner en la posición inferior los interruptores ENROM y ENRAM, para
deshabilitar tanto la ROM como la RAM.
2. Poner el interruptor WEN en la posición inferior para asegurar que el 2816 no
será escrito durante el proceso de encendido.
3. Conectar la fuente de alimentación y encenderla.
4. Poner el interruptor ENROM en la posición superior para habilitar el CI 2816.
5. Poner el interruptor WEN en la posición superior para permitir la escritura en el
CI 2816.
6. Poner el interruptor A8 en la posición inferior para escribir datos a la posición
de memoria 000H a 0FFH.
7. Poner los interruptores de datos a 0000 0000.
8. Presionar el botón ALE para registrar en el registro 74HCT573 la dirección
colocada en los interruptores de datos.
9. Poner los interruptores de datos a 0000 0011.
10. Presionar el botón WR para escribir este dato en el 2816.
11. Repetir los pasos 7 al 10 cambiando la dirección del paso 7 y los datos del paso
9 para escribir en las posiciones de memoria direccionadas del 2816 los datos
mostrados en la tabla 6-1.



12. Verificar los datos almacenados en cada dirección repitiendo los pasos 7 y 8
para retornar a cada dirección y presionar el botón RD para leer los datos
almacenados.
13. Poner el interruptor WEN en la posición inferior para prevenir más escrituras en
el 2816 y asegurarse que al 2816 no se le dará un comando de escritura no
deseado durante el apagado y encendido.
14. Apagar la alimentación.
15. Encenderla nuevamente.
16. Repetir el paso 12 para verificar que los datos almacenados en el 2816 no se
perdieron cuando se le quitó la alimentación.
17. Poner el interruptor A8 en la posición superior para cambiar la línea A8 a 1 y
como A9 y A10 están en 0, El rango de memoria direccionable para escritura y
lectura es de la posición 100H a 1FFH.
18. Poner el interruptor WEN en la posición superior para permitir la escritura en el
2816.
19. Repetir los pasos 7 al 10 cambiando la dirección en el paso 10 y los datos en el
paso 9 para escribir los datos de la tabla 6-2 al 2816.

20. Repetir el paso 13.
21. Verificar los datos almacenados en cada dirección repitiendo los pasos 7 y 8
para regresar a cada dirección y luego presionando el botón RD.
22. Poner el interruptor A8 en la posición inferior para regresar a las direcciones
000H a 0FFH y repetir el paso 12 para verificar que los datos en la tabla 6-1
están aún almacenados en esas posiciones de memoria.
23. Apagar el equipo.

7.- CONCLUSIONES

evidentemente se puede ver como esta memoria retiene la informacion gravada en ella cuando se le retira la energia, mostrandonos su no volatilidad, a comparacoin de la practica anterior donde la Ram si perdia toda la informacion al retirarle la energia.

8.- FE DE ERRATAS

No se tuvieron mayores problemas para el desarrollo de esta practica, pero si se pudo evidenciar un error en el almacenamiento de el bit numero siete de todos los registros de la memoria, pero solo cuando se le cortaba el suministro de energia, siempre nos dava un nivel logico alto, aunque le ayamos guardado un nivel vajo. no se pudo determinar la causa del problema pero se tenian sospechas de falla de la memoria, pero no se pudo determinar el error por falta de tiempo.

Friday, October 20, 2006

laboratorio # 4

OPERACIONES CON LA MEMORIA RAM 8156

I. INTRODUCCION

Con las siguientes experiencias se pretendra adentrar en cuanto se refiera al uso de la memoria RAM en el entrenador de microprocesadores 8085, conociendo sus funcionamiento.

II. OBJETIVOS

1. OBJETIVOS GENERALES

conocer perfectamente el uso que se le da a la memoria RAM 8156, en el entrenador universal, asi como las funciones que se pueden realizar con su ayuda.

2. OBJETIVOS ESPECIFICOS


Experimentar la escritura y lectura manuales en la memoria RAM 8156, utilizando los interruptores y circuitos indicadores montados en el entrenador de microprocesadores 8085 al mismo tiempo de verificar la volatilidad de este tipo de memorias.

Desplegar información en el display de 7 segmentos por medio de los puertos I/O del 8056 mediante los interruptores de control y datos proporcionados en el entrenador.

Demostrar la formación de números y letras.

Operar manualmente, mediante la operación de un interrutor el temporizador incluido en el 8156.

Demostrar la operación del temporizador en sus 4 modos de salida.

3. RESUMEN

Este lavoratorio se divide en tres partes, las cuales nos mostrarán las diversas acciones que podemos realizar con ayuda de la memoria RAM.

antes de poder manipular el entrenador, se tuvieron que realizar los siguientes pasos:

  1. Para iniciar cualquier experiencia, el interruptor RESET deberá estar en la posición superior y todos los demás interruptores en la posición inferior, a menos que se instruya específicamente cambiar dicha condición.

  2. Para todas las experiencias de esta guía de laboratorio deberá instalar el puente J10 y retirar cuidadosamente el CI 8085. Solo para la experiencia relacionada con la lección 5, retirar el puente J12 e instalar el puente J11.

  3. Al concluir los experimentos de esta guia debe reponer el entrenador a su configuración final.

4.-MARCO TEORICO

Toda la teroia se encuentra detallada en las lecciones 3,4 y 5 de el manual de entrenador de microprocesador 8085.

5. LISTADO DE MATERIALES

Entrenador universal

fuente de poder de 9v.

cables para puentes y sodador de 30W.

6. LABORATORIO

Parte I

ALMACENANDO Y LEYENDO DATOS

bueno la parte teorica se encuentra en la leccion 3 del manual del entrenador de microprocesadores 8085.

Procedimiento

1. Conectar la fuente de alimentación y activar el interruptor (SW16) en ON. El
LED verde iluminará indicando que la fuente está encendida.
2. Colocar el interruptor ENRAM en la posición on para habilitar el CI 8156.
Colocar el interruptor IO/⎯M en la posición off para acceder a la porción de
memoria del CI 8156.
3. Iniciar en la dirección 0000 0000 poniendo todos los interruptores de datos en la
posición “0” (abajo).
4. Presionar el interruptor ALE para “registrar” la dirección en el registro especial
de dirección.
5. Cambiar los interruptores de datos a 1000 0001.
6. Presionar el interruptor WR para escribir este dato en la posición direccionada
que justamente se ha abierto.
7. Usted puede cambiar la dirección repitiendo los pasos 3 y 4. Los datos pueden
ser almacenados repitiendo los pasos 5 y 6. Utilice el siguiente procedimiento
para almacenar los siguiente bytes de datos en las primeras cuatro posiciones de
memoria.

8. Verificar los datos almacenados en cada dirección repitiendo los pasos 3 y 4
para retornar a cada dirección.
9. Leer los datos de cada dirección presionando el botón RD.
10. Poner el interruptor de alimentación (SW16) en la posición inferior para retirar
la alimentación.
11. Encender nuevamente la alimentación.
12. Repetir los pasos 8 y 9. Se perdieron los datos?

ParteII

bueno la parte teorica se encuentra en la leccion 4 del manual del entrenador de microprocesadores 8085.

REGISTROS Y PUERTOS

Procedimiento

1. Conectar la fuente de alimentación y encender la fuente. Poner el interruptor
IO/⎯M en la posición de IO (arriba). Esto le dice al CI 8156 que se va ha enviar
datos a los registros internos y no a la memoria. Presionar la tecla RS para
inicializar el CI 8156. Poner el interruptor ENRAM en la posición ON.
2. Ajustar los interruptores de datos a 0000 0000. Esta es la dirección del registro
de estado de comando.
3. Presionar la tecla ALE para registrar la dirección en el CI 8156.
4. Ajustar los interruptores de datos a 1000 1110.
5. Presionar la tecla WR para escribir los datos en el registro de comando. Como
en el anterior ejemplo, esto pone al puerto A como entrada y los puertos B y C
como salidas. Como los puertos de salida estaban inicialmente en 0, hace que
iluminen todos los segmentos incluyendo el punto decimal del display 2.
6. Cambiar los interruptores de datos a 0000 0010. A la dirección del puerto B.
7. Presionar el interruptor ALE para registrar la dirección del puerto B en el
registro de dirección interior del CI 8156.
8. Colocar los datos ha ser transmitidos en el bus de datos. Comenzar con 011
0001.
9. Presionar la tecla WR para transferir los datos al puerto B. Como se muestra en
la figura 4-4, los ceros en los bits 1,2,3,4 y 7 harán que aparezca un 3 en el
display 2.
10. Cambiar los interruptores de datos todo a cero. Cambiaron los datos en el puerto
B? El puerto B solo cambiará cuando los nuevos datos se escriban en el registro
en la dirección 0000 0010.
11. Repetir los pasos 8 y 9 para verificar los símbolos del display de 7 segmentos de
la figura 4-6.



12. Ajustar los interruptores de datos a 0000 0011. Esta es la dirección del puerto C.
13. Presionar la tecla ALE para registrar la dirección en el CI 8156.
14. Ajustar los interruptores de datos a 0000 0001. Cuando este dato es enviado al
puerto C, se deshabilitará el display 2 y se habilitará el display 1.
15. Presionar la tecla WR y el patrón en el display 2 saltará al display 1.
16. Repetir los pasos 6 y 7 para ajustar la dirección del puerto B en el CI 8156.
17. Repetir los pasos 8 y 9 para verificar que los datos enviados al puerto B
aparecerán ahora en el display 1.

LECTURA Y SALIDA DEL PUERTO

Aunque los puertos A, B o C estén configurados como puertos de salida, sus contenidos
pueden ser leídos de la misma forma que los puertos de entrada.

18. Ajustar los interruptores de datos a 0000 0011 para direccionar el puerto C.
19. Presionar la tecla ALE para registrar la dirección en el CI 8156.
20. Presionar el botón RD para leer los contenidos del puerto C. Los datos leídos
son 1100 0001. Los unos en los bits 6 y 7 se deben al hecho de que el puerto C
es un registro de 6 bits conteniendo solamente los bits del 0–5. El 00 0001 en los
bits 0–5 son los datos almacenados en los pasos 14 y 15.
21. Ajustar los interruptores de datos a 1111 1011. Esta es también la dirección del
puerto C. Como se muestra en la figura 4-2, los bits 3-7 pueden estar en 1 o 0.
Solamente los bits 0-2 son decodificados por el CI 8156.
22. Presionar el botón ALE para registrar la dirección en el CI 8156.
23. Ajustar los interruptores de datos a 0000 0000.
24. Presionar el botón WR para escribir este dato en el puerto C. El 0 en el bit 0
deshabilita el display 1 y habilita el display 2. El patrón desplegado en el display
1 saltará al display 2.
25. Apagar el equipo.

ParteIII

bueno la parte teorica se encuentra en la leccion 5 del manual del entrenador de microprocesadores 8085.

EL TEMPORIZADOR

AJUSTE

1. Conectar la fuente de alimentación y encender. Presionar el botón RS para
inicializar el CI 8156.
2. Poner el interruptor TIM abajo.
3. Poner el interruptor ENRAM arriba. Esto le dice al CI 8156 que los comandos
que se envíen por las líneas de datos son para el y no para otro circuito.
4. Poner arriba el interruptor IO/⎯M. Esto direcciona al comando a la sección IO
del CI 8156.

ONDA CUADRADA CONTINUA:

1. Poner los interruptores de datos a 0000 0000. Esta es la dirección del Registro
de Estado de Comando.
2. Presionar el interruptor ALE para cargar la dirección en el CI 8156.
3. Poner los interruptores de datos a 0100 0010. Esto emitirá un comando de
parada del temporizador y pondrá en salida el puerto B.
4. Presionar el botón WR para enviar datos al Registro de Estado de Comando.
5. Poner los interruptores de datos a 0000 0100. Esta es la dirección del byte
menos significativo (LSB) del Registro de Longitud de Cuenta.
6. Presionar el botón ALE para registrar la dirección en el CI 8156.
7. Poner los interruptores de datos a 0000 0110. Esto pondrá el byte menos
significativo (LSB) del Registro de Longitud de Cuenta a 6.
8. Almacenar el 6 presionando el botón WR.
9. Poner los interruptores de datos a 0000 0101. Esta es la dirección del byte más
significativo (MSB) del registro de Longitud de Cuenta.
10. Presionar el botón ALE para registrar la dirección en el CI 8156.
11. Poner los interruptores de datos a 0100 0000. Esto pondrá el byte más
significativo (MSB) de registro de estado de cuenta a cero y el modo del
temporizador a Onda Cuadrada Continua.
12. Presionar l botón WR para almacenar los datos.
13. Poner los interruptores de datos a 0000 0000. Esta es la dirección del Registro
de Estado de Comando.
14. Registrar la dirección presionando ALE.
15. Poner los interruptores de datos a 1100 0010. Esto mantiene el puerto B como
puerto de salida y arranca el temporizador.
16. Almacenar los datos presionando el botón WR.
17. Temporizar el temporizador moviendo el interruptor TIM arriba y abajo.
18. Repetir el paso 17 y observar que la señal TIMER OUT conmuta de
nivel alto (display 1 activado) a bajo (display 2 activado) en cada tercer paso. El
primer cambio requiere 4 pasos del interruptor debido al estado interno del
temporizador.
19. Poner los interruptores de datos a 0000 0000. Esta es la dirección del Registro
de Estado de Comando.
20. Registrar la dirección presionando ALE.
21. Poner los interruptores de datos a 0100 0010. Esto emitirá un comando de
parada del temporizador.
22. Almacenar el comando de parada presionando el botón WR. Si la línea
TIMER OUT esta en nivel bajo y el interruptor TIM arriba, la línea
TIMER OUT pasará inmediatamente a nivel alto (display 1 activado).
23. Repetir el paso 17. la línea TIMER OUT, si aún no esta en nivel alto,
pasará a nivel alto (display 1 activado) la primera vez que el interruptor TIM
esta en la posición superior. Entonces permanecerá en nivel alto. El
temporizador esta ahora inactivo siguiendo el comando de parada.

PULSOS CONTINUOS

1. Poner los interruptores de datos a 0000 0101. Esta es la dirección del MSB del
Registro de Longitud de Cuenta.
2. Registrar la dirección presionando el botón ALE.
3. Poner los interruptores de datos en 1100 0000. Esto cambiará el modo del
temporizador a pulsos continuos.
4. Almacenar los datos presionando el botón WR.
5. Temporizar el temporizador moviendo el interruptor TIM arriba y abajo varias
veces. Cambiará la salida? No, porque se debe emitir un comando de arranque
primero.
6. Poner los interruptores de datos a 0000 0000, la dirección del Registro de Estado
de Comando.
7. Registrar la dirección presionando el botón ALE.
8. Emitir el comando de arranque poniendo los interruptores de datos a 1100 0010
y presionando el botón WR.
9. Temporizar el temporizador moviendo el interruptor TIM arriba y abajo varias
veces. Observe que la señal TIMER OUT pasa a nivel bajo (display 2
activado) en el sexto paso y a nivel alto (display 1 activado) en el séptimo paso.
Este pulso se repite cada sexto paso.
10. Temporizar el temporizador hasta que la línea TIMER OUT justamente
cambie a nivel alto (display 1 activado), luego proceder con la siguiente sección.

PARAR DESPUÉS DE LA CUENTA TERMINAL:

1. Poner los interruptores de datos a 0000 0000, el Registro de Estado de
Comando, y presionar el botón ALE para registrar la dirección.
2. Poner los interruptores de datos a 1000 0010. Esto emitirá el comando de
PARAR DESPUÉS DE LA CUENTA TERMINAL (TC) del temporizador.
3. Presionar el botón WR para almacenar el comando.
4. Temporizar el temporizador moviendo el interruptor TIM arriba y abajo y
observe que solo una vez más sale el pulso por la línea TIMER OUT.
Después de lo cual la señal T⎯I⎯M⎯E⎯R ⎯O⎯U⎯T permanecerá en nivel alto.

UNA SOLA ONDA CUADRADO:

1. Poner los interruptores de datos en 0000 0101. Esta es la dirección del MSB del
Registro de Longitud de Cuenta. Registrar la dirección presionando el botón
ALE.
2. Poner los interruptores de datos en 0000 0000. Esto cambiará el modo del
temporizador a Una sola Onda Cuadrada. Almacenar el comando presionando el
botón WR.
3. Poner los interruptores de datos a 0000 0000, la dirección del Registro de Estado
de Comando y registrar esta dirección presionando el botón ALE.
4. Emitir un comando de arranque para el temporizador poniendo los interruptores
de datos en 1100 0010 y presionando el botón WR.
5. Temporizar el temporizador moviendo el interruptor TIM arriba y abajo.
Observe que la línea TIMER OUT pasa a nivel bajo (ilumina el display
2) en el cuarto paso y a nivel alto (ilumina el display 1) en el séptimo paso.
Después de lo cual la línea TIMER OUT permanece en nivel alto.

UN SOLO PULSO:

1. Repetir los anteriores cuatro pasos utilizando 1000 0000 en el paso 2. Esto
pondrá el modo del temporizador en el modo de Un Solo Pulso
2. Temporizar el temporizador moviendo el interruptor TIM arriba y abajo.
Observe que aparece un pulso el la línea TIMER OUT entre el sexto y
séptimo paso. Después de lo cual, la línea TIMER OUT permanece en
nivel alto (ilumina el display 1).

CAMBIO DE LONGITUD DE CICLO (FRECUENCIA):

1. Repetir el procedimiento de Onda Cuadrada Continua pero cambiar el LSB del
Registro de Longitud de Cuenta en el paso 7 ( asegúrese de mantener el Registro
de Longitud de Cuenta en dos o más). Note que la salida de onda cuadrada ahora
corresponde a la longitud emitida en el paso 7, excepto para el primer ciclo el
cual tiene un paso más. Si se emite un número impar en el paso 7, la longitud a
nivel alto de TIMER OUT (display 1 iluminado) será de un paso mayor
que la longitud de TIMER OUT en nivel bajo.
2. Apagar la alimentación.

7. CONCLUSIONES

En la parte uno se pudo ver como trabaja la memoria RAM, como avilitarla, tambien el uso y manejo de los distintos puertos del entrenador,como pasar de uno a otro, ademas se vio realmente la perdida de los datos en la memoria RAM cuando la fuente es desconectada. Ademas la forma de gravar informacion en las distintas direcciones q posee esta memoria.

En la parte dos se pudo observar mas detalladamente la manera de escribir y leer los datos en la memoria, ademas se vio como el puerto C, solo admite es solo un registro de 6 bits, y que contiene solo la informacion de los bits 0-5.

La experiencia tres, nos muestra como utilizar el 8156, para generar un aserie de señales, como una onda cuadrada, pulsos continuos, un solo pulso, es decir como hacer un temporizador en este simulador.

8. FE DE ERRATAS

En el retiro del CI8085, se tuvo un poco de problemas, ya que estaba bien fijado y no se lo podia sacar al igual que los integrados de 14 pines, ya que al doblar un poco para poder agarrarlo bien, sus pines se doblarian mucho, por esto se requirio utilizar una pinsa especial para poder tomar dicho integrado y extraerlo sin dañar ninguno de sus pines.

Al desarrolar l aprimera experiencia, primero se tuvieron que realizar modificaciones en algunos puentes del simulador, especificados antes, también no se sabia si realmente se le devia poner una fuente de 5V a la entrada, ya que se temia dañar el entrenador, por lo que se tuvo que ir regulando la fuente desde tres voltios, hasta conseguir que internamente el valor de Vcc fuera aproximadamente 5V.

al desarrollar la segunda experiencia como en la tercera no se tuvieron mayores inconvenientes, ya que todos los arreglos ya se avian hecho anteriormente y solo se tuvieron que seguir los pasos del desarroll de la práctica.

La experiencia tres, solo fue realizada, pero no se pudieron ver los pulsos de salida, ya que no se contava en ese momento con el osciloscopio, para poder ver con lujo de detalles ese aspecto, pero si algunas se pudieron ver utilizando un tester, pero en el cual solo se veila numeros subiendo y vajando.

Wednesday, October 11, 2006

Trabajo de investigacion

LA INTERFAZ DE PERIFÉRICOS 8255

El 8255 es un dispositivo de E/S general, programable, diseñando para operar en una gran variedad de funciones de interfaz.
Es capaz de controlar 24 líneas con diferentes configuraciones (entrada/salida) y en hasta 3 modos de operación
El 8255 no fue originalmente disñado para operar con microprocesadores de fabricantes distintos a Intel como el Z80, fue hecho pensando en el 8080.

Compatible con todos los Microprocesadores Intel y con la mayoría de los Microprocesadores de otras marcas.
Operación de alta velocidad con Estado de No Espera con un 8086/88 ó 80186/88 a 8 Mhz.
24 Pines de Entrada/Salida Programables
Versión Intel CHMOS de Bajo Consumo
Disponible en configuración de 40 Pines DIP o en 44 Pines PLCC



Capacidad de Leer la Palabra de Control Previa
Capacidad de Set/Reset con un Bit Expreso
Capacidad de Drive de 2.5 mA DC en todos los puertos de salida
Totalmente compatible con tecnología TTL
Disponible para rangos de temperatura normales o extendidos

Conexiones del 8255 con el exterior:


D0…D7: Bus de datos bidireccional de 3 estados.

CS (chip selec) (0) habilita la intercomunicación entre el microprocesador y el periférico.

RESET: (1) Esta señal borra el registro de control y todos los puertos (A, B y C) son colocados en modo entrada.

RD: (0)habilita al 8255 para enviar dato al microprocesador a traves del bus de datos.

WR: (0) habilita al microprocesador para escribir datos o palabras de control en el 8255.

A0..A1: Líneas de dirección: permiten seleccionar uno de los tres puertos o el registro de control.
PA0..PA7: Puerto A: puerto de entrada/salida de 8 bits.

PB0..PB7: Puerto B: puerto de entrada/salida de 8 bits.

PC0..PC7: puerto C: puerto de entrada/salida de 8 bits.

ESQUEMA DEL 8255


Descripcion funcional


Modos de Operación


En MODO 0, cada grupo de 12 pines de Entrada/Salida puede ser programado en conjuntos de 4 y 8 para ser salidas o entradas.
Mediante la programación del modo 0 se consigue una forma rápida la transmisión de datos del microprocesador a los tres puertos de una forma directa y sin autorización.
También podemos pasar los datos de los puertos al microprocesador


En el MODO 1, cada grupo podría ser programado para tener 8 lineas de Entrada o salida; 3 de los 4 que quedan son usados para el handshaking y para la señal de control de interrupción.
Mediante la programación del modo 1 conseguimos de igual manera pasar los datos del microprocesador a los puertos y del puerto al microprocesador, pero con la excepción de que existe un protocolo de autorización para que el intercambio de datos entre ambas partes.
El puerto C queda anulado como puerto de entrada salida en su conjunto pasando a ser usado para los protocolos de intercambio de informaciones.



El Modo 2 es una configuración de bus bi-direccional sincronizada de alta velocidad.
Mediante la programación en modo 2 conseguimos lo siguiente; un bus bidireccional E/S de datos del microprocesador en este caso el puerto A. El puerto B no tiene posibilidad de trabajar en este modo pero si se puede trabajar en cualquiera de los modos anteriores descritos.
El puerto C se usa para protocolos de E/S de los datos.
Este modo resulta altamente complicado de ensayar en algunas de sus partes dada la dificultad que presenta en el puerto A es unas veces de entrada y otras de salida debemos tener precaución para no cortocircuitar una salida pues destruiriamos el integrado.


PROGRAMACION DEL 8255

Las configuraciones de modos son muy flexibles y se acomodan a casi todas las necesidades posibles. Los tres puertos pueden ser accedidos en cualquier momento a través de la dirección E/S que les corresponde, como se vio en el apartado anterior. La palabra de control a enviar a la 4ª dirección es:


Si el bit más significativo de la palabra de control está borrado, es tratada entonces como un comando especial que permite activar o inhibir selectivamente los bits del puerto C:Esto es particularmente útil para los modos 1 y 2, donde las interrupciones generadas por las líneas del puerto C pueden ser activadas o inhibidas simplemente poniendo a 1 ó 0, respectivamente, el flip-flop interno INTE correspondiente a la interrupción que se trate. Todos son puestos a cero tras establecer el modo.

CONCLUSIONES
Mediante la programación del modo 0 se consigue una forma rápida la transmisión de datos del microprocesador a los tres puertos de una forma directa y sin autorización.
También podemos pasar los datos de los puertos al microprocesador

Mediante la programación del modo 1 conseguimos de igual manera pasar los datos del microprocesador a los puertos y del puerto al microprocesador, pero con la excepción de que existe un protocolo de autorización para que el intercambio de datos entre ambas partes. El puerto C queda anulado como puerto de entrada salida en su conjunto pasando a ser usado para los protocolos de intercambio de informaciones.

Mediante la programación en modo 2 conseguimos lo siguiente; un bus bidireccional E/S de datos del microprocesador en este caso el puerto A. El puerto B no tiene posibilidad de trabajar en este modo pero si se puede trabajar en cualquiera de los modos anteriores descritos. El puerto C se usa para protocolos de E/S de los datos.

Investigacion sobre integrados 8156, 2816 y 74573

Memoria RAM 8156

El circuito integrado 8156, es una memoria RAM, que contiene 256
posiciones de memoria. Cada posición es capaz de almacenar 1 byte o 8 bits de datos.
Como este circuito puede almacenar 256 x 8 o 2048 bits de datos, se la denomina
memoria de 2K.

Cada byte de datos en el 8156 también tiene una dirección con el objeto de que recordar
ese dato posteriormente.

Los datos pueden ser almacenados en cualquier dirección con el siguiente
procedimiento:

1. Ir a la dirección apropiada.
2. Poner el byte en el bus de datos.
3. Decirle al circuito de memoria que acepte el dato.
4. Moverse a la siguiente dirección.

El circuito integrado 8156 utiliza las mismas 8 entradas tanto para los datos como para
las direcciones. Como sabe el 8156 cuando es un dato o una dirección? Usted le dice
que en el bus esta una dirección de datos activando el pulsador de la señal “ALE”
(Address Latch Enable). Esto pone el pin ALE a nivel alto, y la dirección es almacenada
en un registro especial de dirección en el interior del 8156. Cuando se pulsa el botón
“WR” (Escribir) los datos que se encuentran en el bus de datos se almacenarán en la
dirección de memoria previamente almacenada en el registro de direcciones.
Presionando el botón “RD” (Lectura) hará que el 8156 busque el dato en la posición de
memoria apuntada por el registro especial de dirección y lo envíe al bus de datos. El
siguiente experimento demostrará estos principios.

Terminales del 8156

los pines de esta memoria tienen el siguiente orden:
8156
+--------\/--------+
1 -pc3 vcc- 40
2 -pc4 pc2- 39
3 -timer in pc1- 38
4 -reset pc0- 37
5 -pc5 pb7- 36
6 -/timer out pb6- 35
7 -io/m pb5- 34
8 -ce pb4- 33
9 -/rd pb3- 32
10 -/wr pb2- 31
11 -ale pb1- 30
12 -ad0 pb0- 29
13 -ad1 pa7- 28
14 -ad2 pa6- 27
15 -ad3 pa5- 26
16 -ad4 pa4- 25
17 -ad5 pa3- 24
18 -ad6 pa2- 23
19 -ad7 pa1- 22
20 -vss pa0- 21
+------------------+

Memoria ROM

El circuito integrado EEPROM 2816 es una memoria reprogramable y borrable que contiene 2048 localidades de memoria con 8 bits cada una, (2K X 8) y opera con una sola fuente de alimentación de + 5 Volts, con tiempos similares a los de una RAM estática en modo de lectura, tiene dos modos de programación una de +5 Volts y otra de alto voltaje.

CARACTERÍSTICAS DE LA 2816

· Organización de la memoria 2048 X8
· Tipo de funcionamiento; chip estático
· Tiempos de acceso a lectura; 250 nseg.
· Capacidad de corrección para un solo bit
· Tiempo de escritura max, 10 mseg.
· Compatible con la arquitectura de microprocesadores
· Potencia de disipación
a).- Estado activo; 610 mW
b).- Estado inactivo: 295 mW

Las terminales del 2816


· A0 - A10 Líneas de direcciones
· E/S0 E/S7 Entrada y salida de datos
· (CE)' Habilitador del chip
· (OE)' Habilitador de las salidas
· Vpp Voltaje de programación
· Vcc + 5 Volts
· Vss 0.0 Volts tierra.

OPERACIÓN DE EPROM 2816

Este dispositivo contiene seis modos de operación, según se muestra en la siguiente figura, los modos de programación están diseñados para proporcionar compatibilidad máxima con los microprocesadores y para obtener una consistencia optima en el diseño del circuito impreso, el chip EEPROM 2816 es una memoria no volátil, y contiene una densidad apropiada para una aplicación de tipo industrial, con esto se logra optimizar el costo / eficiencia de manera funcional, todas las tensiones que usa son compatibles, con la tecnología TTL con la excepción del modo de borrado total de la memoria, en este modo el voltaje se debe subir arriba de +9 Volts, en las otras formas se debe sostener a + 5 Volts durante la escritura y la lectura

INTEGRADO 74573

este dispositivo es un lack octal, el cual se activa generalmente cuando el ale esta activado.

Este dispocitivo tiene baja potencia y una gama ancha de la fuente de alimentación, pero son la entrada de LS-TTL.

La tabla logica del 74573 y dispocicion de los pines es la siguiente:
Concluciones.-

Bueno, como podemos observar, estas memorias Ram y Rom, tienen una diferencia fatal, que es las memorias Ram pueden funcionar igual que las Rom, solo que estas no retienen la informacin como lo hace la Rom, es por esto que las Rom son utilizadas para cargar las ejecuciones o las instrucciones que se quieren hacer correr, mientras que las Ram son mas para realizar las operaciones y los procesos, entradas de datos y informacion extra que no necesita ser almacenada permanentemente.

El integrado 74173, bueno sirve para la habilitacion o desabilitacion de entradas de buses, tambien tiene un tercer estado, con el cual se optiene una alta impedancia para que el bus pueda ser utilizado por otro componente.

Tuesday, September 26, 2006

LABORATORIO # 3


MICROPROCESADORES

I. INTRODUCCIÓN

II. OBJETIVOS

1. OBJETIVOS GENERALES


Verificar la operación y funcionamiento de los dispositivos de tres estados y su aplicación en la conformación de buses de datos.
Demostrar la operación de una memoria ROM montando y probando una ROM de matriz de diodos.

2. OBJETIVOS ESPECIFICOS

Observar como se realisa el control de buses utilisando los integrados 74125 y el 74126, como avilitadores o desavilitadores de los distintos buses.

almacenar informacion binaria, en una matriz ROM, con base de diodos, y suministrar la informacion a un decodificador para mostrar la informacin en forma decimal.

3. RESUMEN

Parte 1
Resumen

En esta práctica, se montará un circuito utilizando los CIs 74125 y 74126 como buffers cuádruples con salidas de tres estados. Observe que la salida de cada buffer en el 74125 es igual a su entrada cuando la línea de habilitación se encuentra en nivel bajo. Mientras que la salida del 74126 es igual a su entrada cuando la línea de habilitación se encuentra en nivel alto. En ambos casos, cuando la línea de habilitación no esta en su estado de habilitación, sus salidas se encuentra en estado de alta impedancia (lo que significa que están eléctricamente desconectadas).

Parte 2
Resumen

En la práctica, se montará una matriz de diodos con capacidad de contener 10 nibles de información, que luego utilizando un circuito decodificador BCD a 7 segmentos y un display de siete segmentos, mostrará la información almacenada en la memoria ROM conformada por la matriz de diodos.

4. MARCO TEORICO

PARTE I

BUS

En arquitectura de ordenadores, un bus es un subsistema que transfiere datos o electricidad entre componentes del ordenador dentro de un ordenador o entre ordenadores. A diferencia de una conexión punto-a-punto, un bus puede conectar mediante lógica varios periféricos utilizando el mismo conjunto de cables.

En Informática, bus es el conjunto de conductores eléctricos en forma de pistas metálicas impresas sobre la placa base del computador, por donde circulan las señales que corresponden a los datos binarios del lenguaje máquina con que opera el Microprocesador. Bus es una palabra inglesa que significa "transporte"; aplicada a la informática, se relaciona con la idea de las transferencias internas de datos que se dan en un sistema computacional en funcionamiento. En el bus todos los nodos reciben los datos aunque no se dirijan a todos éstos, los nodos a los que no van dirigidos los datos simplemente los ignoran.
Hay tres clases de buses: Bus de Datos, Bus de Direcciones y Bus de Control. El primero mueve los datos entre los dispositivos del hardware: de Entrada como el Teclado, el Escáner, el Ratón, etc.; de salida como la Impresora, el Monitor o la tarjeta de Sonido; y de Almacenamiento como el Disco Duro, el Diskette o la Memoria-Flash.

El unico integrado nuevo utilizado para este laboratorio es el 74125, aqui se detallan su diagrama de coneccion y su tabla de funciones.

Memoria ROM

ROM es el acrónimo de Read-Only Memory (memoria de sólo lectura). Es una memoria de semiconductor no destructible, es decir, que no se puede escribir sobre ella, y que conserva intacta la información almacenada, incluso en el caso de interrupción de corriente (memoria no volátil). La ROM suele almacenar la configuración del sistema o el programa de arranque del ordenador.
La memoria de sólo lectura o ROM es utilizada como medio de almacenamiento de datos en los ordenadores. Debido a que no se puede escribir fácilmente, su uso principal reside en la distribución de programas que están estrechamente ligados al soporte físico del ordenador, y que seguramente no necesitarán actualización. Por ejemplo, una tarjeta gráfica puede realizar algunas funciones básicas a través de los programas contenidos en la ROM.

El unico integrado nuevo utilizado es el 7442, cuyo diagrama de coneccion y tabla de funcionamiento es el siguiente:


5. LISTADO DE MATERIALES

1 Entrenador digital
1 CI 74125
1 CI 74126
1 CI 7490
1 CI 7442
1 CI 7448
12 LED
1 Display de 7 segmentos
Resistencias de 220Ohm 1/2W
Resistencias de 1K 1/2W
Resistencias de 4.7K 1/2W
Interruptores de 8 bits tipo DIP

6. LABORATORIO

PARTE I

Se monto el siguiente circuito



en el armado se tubieron los siguientes cuidados::

Antes de energizar el circuito, asegúrese de que los pines de alimentación y tierra están correctamente conectados, y no olvide de colocar las resistencias de anclaje para los interruptores de las entradas y circuito de despliegue.

PARTE II

Se monto el siguiente circuito:



Se tuvo cuidado con lo siguiente:

Antes de energizar el circuito, asegúrese de que los pines de alimentación y tierra están correctamente conectados, y en general revise todas las conexiones del circuito.

7. CONCLUSIONES

en conclusion se pudo observar como los componentes tristates son capases de realizar el cambio de bus, es decir avilitar el bus para las distintas tareas q este va a realizar, y ademas se observo como se puede almacenar informacion tomamdo como base simples diodos.

8. FE DE ERRATAS

Parte I

Aqui se tropesaron con ciertos problemas, ya que el simulador no queria aceptar el integrado 74126, asi q primero se penso en no realizar la experiencia simulada, pero luego de pensar un poquito, y gracias a mi idea, bueno sustituimos el 74126 por el 74125 con un negador en las entradas de avilitacion resolvimos el problema, una ves ya al llevarlo al protoboard, se cambio tambien el 74126 por el 125 para evitar algun problema, ademas también solo utilizamos un interruptor para habilitar uno u otro bus y no dos como se mostraba en el diseño primero.

Parte II

Bueno en esta parte no se tropeso com mayores problemas, solo pequeñas modificaciones a los circuitos dados, devido a que como muestro número telefónico tiene siete dígitos, se acomodo una compuerta AND para poder salvar el espacio en blanco q quedava luego de terminar de leer un ciclo de informacion. Ya al llevarlo al protoboar, como se vio que las puntas de los diodos eran demaciado gruesas para el protoboard, con el objetivo de no dañarlo se las coloco en puente con otro protoboard mas viejo, para evitar daños, también para evitar comprar diodos y trabajar unicamente con los diodos q teniamos a mano se inviento la entrada al integrado 7448, ya que sin el se nesecitarian tener cuatro diodos para representar el cero, e invirtiendo las entradas no se necesitaba ninguno.

Tuesday, September 12, 2006

microprocesador UP1232

MICROPROCESADORES
PU1232

Características Generales

El uP1232 es un procesador de propósito general de 8 bits con arquitectura CISC. En su diseño se ha buscado simultáneamente reducir el tamaño del procesador y aportar la flexibilidad suficiente para facilitar la programación y el desarrollo rápido de aplicaciones. La velocidad de ejecución, en cambio, no ha sido una prioridad, ni a nuestro juicio lo es en las aplicaciones hacia las que está orientado.

Las principales características del procesador son las siguientes:
· Contiene 32 registros internos de 8 bits, actuando todos ellos como acumuladores.
· Su código ejecutable, dependiendo de la versión, varía entre 4 KB y 64 KB.
· Accede a 64 KB de memoria externa (datos, código ejecutable y puertos de E/S).
· Dispone internamente de hasta 256 bytes de RAM, con un mínimo de 32 bytes.
· La pila también es interna, tiene sólo 32 palabras, pero es ampliable.
· Su código de instrucciones dispone de 33 operaciones distintas.
· Las instrucciones requieren sólo uno o dos bytes en su codificación.
· Su ALU de 8 bits puede realizar 16 operaciones distintas sobre cualquier registro.
· Responde a cuatro flags: cero, acarreo, signo y paridad.
· Atiende tres interrupciones priorizadas y enmascarables individualmente.
· En su momento, dispondrá de 15 puertos de entrada/salida.
· Ocupa unas 200 CLBs en una XC4000E (unas 5000 puertas equivalentes).

Comparado con otros procesadores, el uP1232 dispone de 32 registros internos en vez de 8, y todos ellos actúan como acumuladores, y no sólo uno.

Arquitectura Externa

El uP1232 será implantado, inicialmente, sobre una FPGA XC4000E de Xilinx, aunque previsiblemente su diseño también pueda ser utilizado sobre los dispositivos de Atmel y Lucent sin apenas modificaciones. Difícilmente se podrá exportar el diseño a las FPGAs de Altera, pues se utilizan algunas características específicas de Xilinx (en particular, sus memorias síncronas de tamaño 32x1).

Externamente a la FPGA se dispondrá de una memoria EEPROM o EPROM de 32 KB y, opcionalmente, otros 32 KB de memoria SRAM o EEPROM. En la primera memoria residirá tanto la secuencia de bits que configurará a la FPGA en la puesta bajo tensión (usando de 12 a 22 KB) como el código ejecutable y datos que requiera el microprocesador para su funcionamiento. Ambos bloques de memoria pueden ser de tipo SRAM en un "emulador".
Para conectar el módulo microprocesador con el exterior de la FPGA se necesitan normalmente 28 pines: el bus de datos bidireccional DATA[7..0] requiere 8 pines, mientras el de direcciones ADDR[15..0] usará 16. Los cuatro restantes son para las señales de lectura (/RD) y escritura (/WR), ambas activas a nivel bajo, y las otras de siempre: CLK que sincroniza el funcionamiento interno a 4~12 MHz y /RESET que, activa también a nivel bajo, inicializa el circuito.



Adicionalmente a estas señales se pueden incorporar otras ocho: seis para generar y atender las interrupciones (/IRQ[3..1] y /IACK[3..1]) y dos para permitir accesos directos a memoria (/DMA y /DACK). Estas últimas son habitualmente activas a nivel bajo, para anularlas fácilmente con pull-ups cuando los circuitos están en alta impedancia.

Código de Instrucciones

Las 33 instrucciones del uP1232 se organizan alrededor de 16 instrucciones básicas, las cuales se identifican a través de cuatro bits del código de instrucción:


Las instrucciones de la primera columna (00xx) requieren dos ciclos de reloj para su ejecución, uno dedicado a leer el código de instrucción y otro a ejecutarlo. Las instrucciones de la cuarta columna, dedicadas al movimiento de datos entre los registros y/o la memoria externa, son más complejas y requieren cuatro ciclos o cinco ciclos. Las demás instrucciones emplean tres ciclos de reloj.

En la notación seguida, "Rm" y "Sm" indican cualquiera de los 32 registros internos (R0 a R31), mientras "Rn", "Sn" y "Tn" indican únicamente uno de los 16 primeros (R0 a R15). Como se puede observar, las operaciones aritméticas y lógicas se pueden efectuar directamente sobre cualquier registro interno, sin las limitaciones que introducen otros procesadores al emplear para esta tarea un único registro acumulador.

Veamos a continuación las instrucciones de forma más detallada:

Como se puede observar, en las instrucciones de salto absoluto se emplean sólo 12 bits para indicar la dirección de destino ("GOTO nnn" y "CALL nnn"). Esto es característico de este procesador y limitaría, en principio, el tamaño del código ejecutable a 4 KB: con 12 bits no se pueden direccionar más de 4.096 posiciones de memoria. Para evitar esta limitación se crean varias versiones del uP1232: el más pequeño, denominado uP1232a, salta a cualquier dirección entre 0x0000 y 0x0FFF (es decir, hasta 4 KB de código); el siguiente, el uP1232b, sólo salta a las posiciones pares entre 0x0000 y 0x1FFF, por lo que consigue extender el código ejecutable a 8 KB; el uP1232c salta a una de cada cuatro posiciones, ejecutando hasta 16 KB de programa; el uP1232d ejecuta hasta 32 KB mientras el mayor de todos, el uP1232e, ejecuta hasta 64 KB, pero sólo puede saltar a una de cada 16 posiciones de memoria. Por defecto, se considera que el procesador es el uP1232a, salvo que la orden "MODEL {A,B,C,D,E}" ejecutada como primera instrucción indique lo contrario.

Las instruciones de salto condicional ("JP flag, nn") se limitan, como es habitual, a saltos cercanos. Dedicando 8 bits para señalar la dirección de destino se pueden producir saltos en un entorno de -128 a +127 posiciones de memoria cercanas, lo cual es más que suficiente. Las comparaciones que puede efectuar, y que definen los cuatro bits restantes de la instrucción, son las siguientes: Z (0000) y NZ (0001) que evalúan el flag "Cero", el cual se activa si el resultado de una operación es nulo; C (0010) y NC (0011) que mira el flag de "Acarreo"; NEG (0100) y POS (0101) usan el bit de "Signo" mientras IMPAR u ODD (0110) y PAR o EVEN (0111) usan el bit de "Paridad". Las ocho combinaciones restantes (1xxx) serán usadas por los periféricos.
Al igual que se observa una elevada flexibilidad en las operaciones aritméticas y lógicas, pues se puede emplear directamente cualquiera de los 32 registros internos de ocho bits, también se dispone de suficientes modos de direccionamiento:

· Inmediato: "LD Rn, nn". Asigna cualquier número de 0 a 255. · Directo: "ADD Rm, Sm". Opera directamente con hasta 32 registros. · Indirecto a Registro: "LDI Rn, (Sn + n)" Puede usar hasta 256 registros internos. · Indirecto a Memoria: "LDI Rn, (Sn, Tn)" Puede usar hasta 64 KB de memoria externa.

Aunque sus operaciones se limiten a 8 bits (el Z80, por ejemplo, opera con 8 y con 16 bits), el uP1232 no tiene nada que envidiar a otros procesadores, pues al usar el acarreo puede extender su aritmética a números con 16, 24, 32 ó más bits de precisión (por ejemplo, mientras "ADD R0,R10" podría sumar los 8 bits menos significativos, "ADC R1,R11" sumaría los ocho bits siguientes usando el acarreo producido en la suma anterior, y así sucesivamente).

En las instrucciones PUSH y POP se ponen y retiran, respectivamente, datos de la pila. Como es habitual, estas operaciones se realizan con frecuencia en las subrutinas, para preservar el valor de los registros intermedios que se utilizan y restaurarlos antes de volver al programa principal. Una característica añadida en este procesador es que en todas las instrucciones PUSH y POP se guardan y recuperan, respectivamente, el valor de los "flags": esto es especialmente importante, y de hecho imprescindible, en las rutinas de atención a las interrupciones, pues pueden ser llamadas en cualquier punto de la ejecución de un programa.

La última instrucción que comentaremos, posiblemente la más llamativa por no estar presente (o documentada) en la mayoría de los procesadores conocidos, es la orden "BREAK". Hace lo mismo que "NOP", es decir, no hace nada, pero en el caso de una puesta a punto puede ser empleada tanto por el simulador como el emulador. El primero puede utilizarla como punto de parada en la ejecución simulada del programa, para visualizar el estado interno del procesador; el emulador, en cambio, puede habilitar señales externas que permitan interrumpir temporalmente la ejecución.

Arquitectura Interna

El diseño interno del uP1232 se basa en una estructura de dos buses (implementados internamente con multiplexores), un Banco de Registros, una Pila y una ALU. También tiene diversos registros especiales.

El Banco de Registros, donde se almacenan los valores de R0 a R31, es una memoria SRAM de tamaño 32x8 con escritura síncrona (con el flanco de subida del reloj) y lectura asíncrona (inmediata a la presentación de cada dirección). Tanto Xilinx como Atmel y Lucent implementan de forma muy eficiente este tipo de memorias, lo cual es básico en el diseño del procesador.

La Pila, de 32 posiciones ampliables, es otra memoria síncrona de tamaño 32x12 en el uP1232a y de tamaño 32x16 en el uP1232e. Su anchura de palabra permite tanto el almacenamiento de direcciones de retorno (para CALL y RET) como el almacenamiento de datos (para PUSH y POP). En este último caso, siempre quedan al menos 4 bits libres que permiten retener el estado de los FLAGs, lo cual es imprescindible para poder atender las interrupciones.

La ALU (Unidad Aritmético-Lógica) es la encargada de efectuar las operaciones. Como se podrá apreciar, su diseño está directamente vinculado a las instrucciones de la tercera columna (10xx). De hecho, la ALU efectúa hasta 16 operaciones distintas, que se corresponden biunívocamente con las 16 instrucciones de la citada tercera columna.

Sus entradas son dos valores de 8 bits, una procedente del Banco de Registros y otra de un registros intermedio denominado Acumulador (ACC). También recibe otros cuatro bits de entrada, procedentes de los registros de instrucciones IR e IRb, los cuales le indican directamente qué operación debe realizar. La salida es puramente combinacional y depende de las entradas y de la operación solicitada.
Los registros especiales son los siguientes:
· PC: El Contador de Programa se usa para leer las instrucciones de la memoria externa. · SP: El Puntero de Pila controla la ubicación del último valor puesto en la Pila. · IR e IRb: Los Registros de Instrucciones retienen el código de la instrucción que se ejecuta. · ACC: El Acumulador es un registro intermedio usado, principalmente, en la ALU. · AUX: Junto con el Acumulador se utiliza para efectuar accesos a la memoria externa. · FLAGs: Retienen valores característicos de los resultados de las operaciones (cero, acarreo, ...).

Programa Interno de Control

El "Programa de Control" es el que se encarga de que el microprocesador realice las tareas necesarias para que sea operativo, y consiste en un circuito algorítmico que, usando la arquitectura anterior, lee e interpreta secuencialmente las instrucciones para ejecutarlas. Evoluciona por tanto a través de diversos estados, pero su funcionamiento es completamente cíclico: lee de la memoria externa el primer byte de una instrucción, dedicando para ello un ciclo de reloj; si la instrucción es de dos bytes, dedica otro ciclo a leer la segunda palabra; seguidamente lee los registros necesarios, opera con ellos y guarda el resultado, quedando preparado para ejecutar la siguiente instrucción. El programa de control, al fin y al cabo, define casi por completo la arquitectura interna del microprocesador.

Una versión simple del programa de control, el cual interpreta y ejecuta todas las instrucciones del uP1232a empleando la arquitectura interna descrita anteriormente, pero que no atiende de momento las interrupciones, podría ser el siguiente:

El procesador siempre parte del estado '0', en donde lee el primer byte de la instrucción sobre el registro especial IR, de ocho bits, y pasa sin más al estado '1'. Allí se ejecutan las instrucciones sencillas (las del grupo 00xx), pero las demás son más complejas, por lo que requieren ciclos adicionales: unas siguen la secuencia '0'-'1'-'3', las que usan la ALU evolucionan según '0'-'1'-'5', mientras las últimas hacen '0'-'1'-'7'-'6' ó '0'-'1'-'7'-'6'-'4'. El estado '2' queda, de momento, reservado.

Una instrucción como "GOTO nnn", que efectúa un salto en la secuencia del programa modificando el contador de programa PC con un nuevo valor de doce bits, se realiza en tres ciclos de reloj:

1) IR(7..0) = Memo[PC]; PC = PC + 1; -- Lee el primer byte de la instrucción en '0'.

2) IR = IR; IRb(7..0) = Memo[PC]; PC = PC + 1; -- Lee el segundo byte, manteniendo IR, en '1'.

3) PC(11..8) = IR(3..0); PC(7..0) = IRb(7..0); -- Efectúa el salto modificando PC en '3'.

Posiblemente esta instrucción se podría completar en tan sólo dos ciclos (IR = Memo[PC++] y PC(11..0) = IR(3..0) Memo[PC]), pero entonces el diseño no tendría tanta simetría como la que se ha conseguido, y se complicaría notablemente la Unidad de Control. También se podría evitar el incremento del contador de programa del segundo ciclo, pero de nuevo se ha hecho así por simetría, en este caso con la instrucción CALL.

Las operaciones aritméticas y lógicas también necesitan tres ciclos de reloj, y todas ellas son iguales para el programa de control: la distinción entre unas operaciones y otras se realiza directamente en la ALU, que usando bits específicos de los registros de instrucciones decide qué resultado mostrar.

1) IR(7..0) = Memo[PC++]; -- Carga la instrucción sobre IR en '0'.

2) IR = IR; IRb(7..0) = Memo[PC++]; ACC = Reg[IR(4..0)]; -- Carga un operando sobre ACC en '1'.

3) Reg[IRb(4..0)] = Reg[IRb(4..0)] ALU ACC; -- Opera: Rm = Rm ALU Sm en '5'.

En este punto se observa cómo el código de instrucciones, la arquitectura interna del procesador y el programa de control están estrechamente relacionados. De hecho, los tres han sido diseñados y optimizados de forma conjunta y partiendo de cero (from scratch), lo que nos ha permitido adaptarnos a la estructura interna de las FPGAs mejor que otros diseños basados en procesadores ya existentes.

Controlador de Interrupciones y de DMA

El controlador de interrupciones del uP1232 está integrado en el programa interno de control, y permite atender hasta tres peticiones de interrupción independientes, es decir, puede ejecutar hasta tres subrutinas distintas en respuesta a la activación de señales externas. El controlador de DMA atiende un único canal, manteniendo los pines de dirección y datos en alta impedancia durante tres ciclos de reloj para que un circuito externo pueda acceder a la memoria EEPROM y/o SRAM. Ambos elementos son imprescindibles para el funcionamiento del emulador (que se describe más adelante).

Las interrupciones del uP1232 tienen las siguientes características:

· Son tres, solicitadas a través de los pines de entrada /IRQ1, /IRQ2 y /IRQ3, y reconocidas con las señales de salida /IACK1, /IACK2 y /IACK3, respectivamente.

· Están priorizadas (IRQ1 > IRQ2 > IRQ3), de modo que IRQ2 puede interrumpir a IRQ3 pero no a IRQ1 ni a sí misma.· Se pueden habilitar e inhabilitar desde programa, a través de la instrucción IMASK. Por ejemplo, "IMASK 6" habilita las interrupciones IRQ3 e IRQ2, pero deshabilita IRQ1 (6 es 110 en binario).

·Están "autovectorizadas", es decir, que cuando se atienden efectúan saltos a posiciones predefinidas. Saltan a 0x0010 (IRQ1), a 0x0020 (IRQ2) y a 0x0030 (IRQ3).

Para atender las interrupciones se ha de modificar el programa interno de control, añadiendo el estado '2' que hasta ahora no tenía ninguna función:

Por su parte, una máquina de control específica registra qué interrupciones se han atendido y cuáles se pueden atender, de modo que se tengan en cuenta las prioridades. Sus propios bits (negados) son empleados para responder por los pines /IACKn a las peticiones de interrupción.

El controlador de DMA otorga a un circuito externo, durante tres ciclos de reloj, el control sobre los buses de acceso a la memoria. En este tiempo el microprocesador no hace nada, pues no puede leer nuevas instrucciones para ejecutarlas.

Esto permitirá al futuro emulador del microprocesador precargar la memoria con nuevos códigos ejecutables, y también leer en la memoria valores que allí haya puesto el programa del usuario, todo ello sin necesidad de detener el micro, que puede estar ejecutando tareas críticas en tiempo.

Herramientas de Desarrollo

Para desarrollar aplicaciones basadas en este procesador se necesitan, al menos, tres herramientas: un ensamblador, un simulador y un emulador. Adicionalmente se podría generar un compilador de algún lenguaje de alto nivel, generalmente C.

El "ensamblador" lee los programas en formato ASM (ficheros de texto con secuencias de instrucciones descritas con un lenguaje más o menos rígido, pero comprensible) y los traduce al formato binario que, en último término, es el único que entiende el procesador. La salida es en general en formato HEX, que describe en hexadecimal el contenido de la memoria que ha de asociarse al procesador para que éste funcione. Cada instrucción se traduce por uno o dos bytes, según le corresponda, y se calculan las representaciones binarias de cada uno de los saltos que se indiquen el el programa.

El "simulador" es otro programa, que lee los ficheros HEX que describen la memoria accesible por el procesador y permite simular su comportamiento de forma controlada. En nuestro caso el simulador incorpora internamente el código del ensamblador, de modo que si se le suministra un fichero ASM en lugar de uno HEX, lo ensambla antes de comenzar la simulación.

El "emulador", cuando esté disponible, se encargará de dos tareas: configurará la FPGA para que se comporte como microprocesador y transferirá a su memoria externa el programa que ha de ejecutar. Ambas tareas se reducen a una, que consiste en leer y escribir en las memorias EEPROM y SRAM asociadas a la FPGA. En una zona de la EEPROM reside la secuencia de bits que configurará la FPGA cuando se le ordene a través de la señal de inicialización apropiada. En otra parte de la misma EEPROM se podrá cargar el programa ejecutable por el micro, quedando el resto disponible como memoria para datos.