MICROPROCESADORES

Friday, December 08, 2006

MICROPROCESADORES

LABORATORIO # 5

LA ROM



I. INTRODUCCIÓN:

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

II. OBJETIVOS:

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

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.

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.
Pinza 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.

VII.- CONCLUSIONES

Se pudo comprobar como la memoria ROM retiene la informacion grabada en ella incluso cuando se le retira la energia, a comparacoin de la practica anterior donde la Ram si perdia toda la informacion al retirarle la energia.

VIII.- FE DE ERRATAS

Se tuvo unos problemas al ingresar mal la tabla 6.2 motivo que deribo en un mal funcionamiento en un principio pero luego se soluciono eso y no se tuvo mas contratiempos



MICROPROCESADORES

LABORATORIO # 4

OPERACIONES CON LA MEMORIA RAM 8156




I. INTRODUCCION


Existen distintas maneras de almacenar datos en los circuitos electrónicos las mas usadas en las computadoras son la memoria ROM (memoria de solo lectura) y RAM (memoria de acceso aleatorio).

Las memorias RAM conocidas también como memorias de lectura escritura ya que en ellas se puede realizar operaciones de extracción de información o lectura, como de almacenamiento o escritura. A continuación estudiaremos las distintas características que presenta la memoria RAM 8156.

II. OBJETIVOS

• 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.

III. MARCO TEORICO

PARTE 1

ALMACENAMIENTO Y LEYENDO DATOS

Las memorias RAM 8156 conocidas también como memorias de lectura escritura ya que en ellas se puede realizar operaciones de extracción de información o lectura, como de almacenamiento o escritura, al ser una memoria RAM esta puede perder la información ya que es una memoria volátil.

ALMACENAMIENTO DE DATOS

Para el almacenamiento en cualquier dirección se sigue el siguiente procedimiento:

• Ir a la dirección apropiada

• Poner el byte (8 bits) en el bus de datos

• Decirle al circuito de memoria que acepte el dato

• Moverse a la siguiente dirección

El C.I. 8156 usa las mismas entradas tanto para datos como para direcciones. El funcionamiento comienza al introducir una dirección en los interruptores esta dirección es almacenada, activando el pulsador ALE (Address Latch Enable). Ale cambia de estado a un nivel alto, la dirección se almacena en un registro especial, interno del C.I. 8156, luego es introducido el dato “10000001” posteriormente se presiona el pulsador WR para escribir este dato en la posición direccionada. Para lograr con éxito este proceso previamente el interruptor IO/M deberá estar en la posición M.

LECTURA DE MEMORIA (RD)

El funcionamiento de lectura en la memoria RAM 8156 parte por colocar la dirección luego presionar el interruptor ALE este producirá un nivel alto a través del divisor de voltaje R6 y R7 para registrar la dirección en el registro especial de dirección, luego se presiona el pulsador RD el cual cambia de un estado alto a un estado bajo por medio del divisor de tensión R8 y R9. Estos datos permanecen inalterables hasta que se sobrescriban o se retire la alimentación al C.I. 8156. El interruptor IO/M debe estar en la posición M para leer memoria.



PARTE 2

REGISTROS Y PUERTOS
En la anterior lección vimos el proceso de lectura y escritura, para realizar este proceso el interruptor IO/M (entrada salida / memoria) estaba en la posición de M para los dos casos en el de lectura y escritura.
Colocando el interruptor IO/M en IO producimos que los datos en el bus de datos pasen a los puertos de entrada y salida, controlador de temporización, o comandos de registros de estado. Para producir esto se debe indicar que puerto va a ser el de salida y el de entrada. Se debe dar la instrucción a la memoria RAM 8156 si se pretende usar el temporizador, el ajuste se realiza con el COMAND STATUS REGISTER, la dirección de esté es 00000000. En la figura 1 se muestra como opera el COMAND STATUS REGISTER.

Fig 1.


REGISTRO

Previamente se establecen los puertos de entrada y salida, en la dirección 00000000 con el interruptor IO/M en la posición IO, diciendo al CI 8156 que se va enviar datos a los registros internos y no a la memoria, luego se presiona RS para inicializar el C.I. 8156 colocando el interruptor ENRAM en ON.
Posteriormente se ajustan los interruptores en la dirección 00000000, luego se presiona el pulsador ALE para registrar la dirección, se introduce el dato 10001110, se presiona WR para que esté dato se escriba en el registro de comando. Como los puertos de salida estaban inicialmente en 0, hace que se iluminen todos los segmentos incluyendo el punto decimal del display 2.
Para cambiar la dirección del puerto se debe cambiar la dirección a 00000010 (puerto B) , se presiona el interruptor ALE para registrar la dirección al puerto B en el registro de direcciones interno del CI 8156, ahora los datos que introduzcamos con los interruptores serán transmitidos al bus de datos (dato - 01110001) después de presionar WR para así transferir al puerto B.

LECTURA Y SALIDA DEL PUERTO

La lectura de los puertos de salida A, B, y C. Se ajustan los interruptores a 00000011 para direccionar el puerto C, se presiona la tecla ALE, registrando la dirección en el CI 8156 y se presiona RD para leer los contenidos del puerto C. Se muestra en la figura las direcciones de los puertos A, B,C y el registro de comando.


Parte 3
EL TEMPORIZADOR

Es un contador programable de 14 bits. El contadores programado y ajustando los dos bytes de registro de longitud de cuenta. Los bits T0 a T13 del registro de longitud de cuenta, son descontados por los pulsos TIMER IN. Cuando se alcanza la cuenta terminal, se completa el ciclo y se presenta un pulso o una onda cuadrada en el pin de salida
TIMER OUT del CI 8156. Los bits M1 y M2 del registro de longitud de cuente especifican el modo del temporizador como se muestra en la figura 2.
El registro de longitud de cuenta puede ser ajustado a cualquier valor entre 0002H a 3FFFH.


Fig 2.

Los bits 6 y 7 (TM2 y TM1) del Registro de Comando de Estado es utilizado para parar
y arrancar la cuenta tal como se muestra en la figura 3.


Fig 3.



IV. LISTADO DE MATERIALES

Entre los materiales utilizados en este laboratorio tenemos:

       Entrenado de microprocesador 8085 con su respectiva fuente
       Cautin
       Cables para los jumper


V. LABORATORIO

Parte #1
En la parte 1 se realizo el almacenamiento y lectura de datos en la memoria 8156 bajo el siguiente 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?


Parte #2

En la parte se observo la forma como se administra los registros y puertos en la memoria 8156 bajo el siguiente 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.



Parte #3

En la parte 1 se observo como funciona el temporizador de la memoria 8156 bajo el siguiente procedimiento
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 TIMER OUT 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.

VI. CONCLUSIONES

Al completar todas la dispocisiones que da el laboratorio llegamos a las siguientes conclusiones

1. Se logró experimentar la escritura y lectura manuales en la memoria RAM 8156.
2. Se experimento en el entrenador la lectura y salida del puerto

VII. FE DE ERRATAS

Al realizar el laboratiro tubimos una fallas primero con el puente j11 que despues lo solucionamos y despues de eso no se tuvieron problemas significativos




 

Monday, October 09, 2006

EL CONTROLADOR DE INTERRUPCIONES 8259.



1.-  COMO Y POR QUE DE LAS INTERRUPCIONES.



Los ordenadores se comunican con el exterior por medio de los dispositivos de entrada y salida. Estos dispositivos son normalmente lentos en comparación con la elevada velocidad de la unidad central. Un ejemplo típico puede ser el teclado: entre las pulsaciones de cada tecla hay un espacio de tiempo impredecible y dependiente del usuario. Una manera simple de gestionar los dispositivos de E/S consiste en comprobar continuamente si alguno de ellos tiene un dato disponible o lo está solicitando. Sin embargo, esto supone una importante pérdida de tiempo para el microprocesador, que mientras tanto podría estar haciendo otras cosas. En una máquina multitarea y/o multiusuario, resulta más interesante que los periféricos puedan interrumpir al microprocesador para solicitarle una operación de entrada o salida en el momento necesario, estando la CPU liberada de la misión de comprobar cuándo llega ese momento. Cuando se produce la interrupción, el microprocesador ejecuta la correspondiente rutina de servicio y después continúa con su tarea normal. Los compatibles PC poseen un hardware orientado por completo a la multitarea (otra cosa es que el 8086 y el DOS no la aprovechen) y la entrada/salida se gestiona casi por completo mediante interrupciones en todas las máquinas. Por ejemplo, en las operaciones de disco, cuando acaba la transferencia de datos se produce una interrupción de aviso y una rutina de la BIOS activa una variable que lo indica, en el segmento de memoria 40h. Las propias funciones de la BIOS para acceder al disco se limitan a chequear continuamente esa variable hasta que cambie, lo que significa un evidente desaprovechamiento de las posibilidades que la gestión por interrupciones pone a nuestra disposición.



Las interrupciones añaden cierta complejidad al diseño del hardware: en principio, es necesario jerarquizarlas de alguna manera para decidir cuál se atiende en el caso de que se produzcan dos simultáneamente. También es importante el control de prioridad para el caso de que se produzca una interrupción mientras se está procesando otra: sólo se la atenderá si es de mayor prioridad. En este capítulo sólo consideraremos las interrupciones hardware, no las de software ni las excepciones del procesador.



2.- DESCRIPCIÓN DEL INTEGRADO 8259.



Este circuito integrado está especialmente diseñado para controlar las interrupciones en sistemas basados en el 8080/8085 y en el 8086. Puede controlar hasta 8 interrupciones vectorizadas. Además, a un 8259 se le pueden conectar en cascada un máximo de 8 chips 8259 adicionales, lo que permite gestionar sistemas con hasta 64 interrupciones, como veremos.



El significado e interpretación de las señales se muestra a continuacion:
 

-CS:                              Habilita la comunicación con la CPU.
-WR:                            Permite al 8259 aceptar comandos de la CPU.
-RD:                             Permite al 8259 dejar la información en el bus de datos.
D7..D0:                        Bus de datos bidireccional, por el que se transmite la información de                                      control/estado y el número de vector de interrupción.
CAS0..CAS2:              Líneas de cascada, actúan como salida en el 8259 maestro y como entrada                                      en los 8259 esclavos, en un sistema con varios 8259 interconectados,                                      constituyendo un bus local.
-SP/-EN:                    Pin de doble función: en el buffered mode del 8259 actuará como -EN, para                                      habilitar los buffers del bus; en el modo normal indicará si el 8259 es                                      maestro o esclavo (-SP).
INT:                            Conectado a la patilla INT de la CPU para producir la interrupción cuando                                      llegue el momento.
IR0..IR7:                    Líneas asíncronas de petición de interrupción. Una petición de interrupción                                      se ejecuta manteniendo IR en alto hasta que se recibe el reconocimiento                                      (modo por flancos) o simplemente poniendo en alto la línea IR (modo por                                      niveles).
-INTA:                        Línea de reconocimiento de interrupción, por medio de esta línea se fuerza                                      al 8259 a depositar en el bus la información del vector de interrupción.                                      INTA es independiente de -CS.
A0:                              En conjunción con -CS, -WR y -RD es empleada para enviar las palabras de                                      comando al 8259 y para solicitar información al mismo. Suele ir conectada a                                      la línea A0 de la CPU.

DESCRIPCIÓN FUNCIONAL

El diagrama funcional del 8259, con la estructura interna de las diversas partes que lo componen, es el siguiente:


Los principales registros internos del 8259 son el IRR (Interrupt Request Register) y el ISR (In Service Register). El IRR almacena todas las peticiones de interrupción pendientes; el ISR almacena todas las interrupciones que están siendo atendidas en un momento dado. La lógica de gestión de prioridad determina qué interrupción, de las solicitadas en el IRR, debe ser atendida primero: cuando lleguen las señales INTA dicha interrupción será la primera procesada y su bit correspondiente se activará en el ISR. El buffer del bus de datos conecta el 8259 con el bus de datos de la placa principal del ordenador: su diseño en 3 estados permite desconectarlo cuando sea necesario; a través de este bus circulan las palabras de control y la información de estado. La lógica de lectura y escritura acepta los comandos que envía la CPU: aquí hay registros para almacenar las palabras de inicialización y operación que envía el procesador; también sirve para transferir el estado del 8259 hacia el bus de datos. El buffer de cascada/comparador almacena y compara las identificaciones de todos los 8259 que posea el sistema: el 8259 maestro envía la identificación del 8259 esclavo en las líneas CAS, los 8259 esclavos la leen y el implicado en la operación coloca en el bus de datos la dirección (vector) de la rutina que atenderá la interrupción en los 2 próximos (o el próximo) ciclos INTA.

FUNCIONAMIENTO DEL 8259

El funcionamiento del 8259 varía ligeramente en función del sistema en que esté instalado, según sea este un 8086 o un 8080/8085. Veremos primero el caso del 8086: 1) Una o más líneas IR son activadas por los periféricos, lo que pone a 1 el correspondiente bit del IRR.
2) El 8259 evalúa la prioridad de estas interrupciones y solicita la interrupción a la CPU (línea INT) si es necesario.
3) Cuando la CPU reconoce la interrupción, envía la señal -INTA.
4) Nada más recibida la señal -INTA de la CPU, el 8259 activa el bit correspondiente a la interrupción de mayor prioridad (la que va a ser procesada) en el ISR y lo borra en el IRR. En este ciclo, el 8259 aún no controla el bus de datos.
5) Cuando la CPU envía un segundo ciclo -INTA, el 8259 deposita en el bus de datos un valor de 8 bits que indica el número de vector de interrupción del 8086, para que la CPU lo pueda leer.
6) En el modo AEOI del 8259, el bit de la interrupción en el ISR es borrado nada más acabar el segundo pulso -INTA; en caso contrario, ese bit permanece activo hasta que la CPU envíe el comando EOI al final de la rutina que trata la interrupción (caso más normal).


En el caso de sistemas basados en el 8080/8085, el funcionamiento es idéntico hasta el punto (3), pero a continuación sucede lo siguiente: 4) Nada más recibida la señal -INTA de la CPU, el 8259 activa el bit correspondiente a la interrupción de mayor prioridad (la que va a ser procesada) en el ISR y lo borra en el IRR. En este ciclo, el 8259 deposita en el bus de datos el valor 11001101b, correspondiente al código de operación de la instrucción CALL del 8080/85.
5) Esta instrucción CALL provoca que la CPU envíe dos pulsos -INTA.
6) El 8259 utiliza estos dos pulsos -INTA para depositar en el bus de datos, sucesivamente, la parte baja y alta de la dirección de memoria del ordenador de la rutina de servicio de la interrupción (16 bits).
7) Esto completa la instrucción CALL de 3 bytes. En el modo AEOI del 8259, el bit de la interrupción en el ISR es borrado nada más acabar el tercer pulso -INTA; en caso contrario, ese bit permanece activo hasta que la CPU envíe el comando EOI al final de la rutina que trata la interrupción.


Si en el paso (4), con ambos tipos de microprocesador, no está presente la petición de interrupción (por ejemplo, porque ha sido excesivamente corta) el 8259 envía una interrupción de nivel 7 (si hubiera un 8259 conectado en IR7, las líneas CAS permanecerían inactivas y la dirección de la rutina de servicio de interrupción sería suministrada por el 8259 maestro).


PROGRAMACIÓN DEL 8259

El 8259 acepta dos tipos de comandos generados por la CPU: los ICW (Inicialization Command Word) que inicializan el 8259, y los OCW (Operation Command Word) que permiten programar la modalidad de funcionamiento. Antes de que los 8259 de un sistema comiencen a trabajar deben recibir una secuencia de ICW que los inicialice. Los ICW y OCW constan de secuencias de 2 a 4 comandos consecutivos que el 8259 espera recibir secuencialmente, unos tras otros, a través del bus de datos, según sea necesario (el propio 8259 se encarga de contarlos midiendo los pulsos de la línea -WR). Los OCW pueden ser enviados en cualquier momento, una vez realizada la inicialización.

La comunicación con el 8259 emplea las líneas -WR y -RW, así como A0. El hecho de que exista una sola línea de direcciones implica que el 8259 sólo ocupa dos direcciones de puerto de E/S en el espacio de entrada y salida del ordenador.

ICWS (Inicialization Command Words).

ICW1: Cuando un comando es enviado con A0=0 y D4=1, el 8259 lo interpreta como la primera palabra de la inicialización (ICW1) e inicia dicha secuencia de inicialización, lo que implica lo siguiente:

- Se resetea el circuito sensible a los niveles, lo que quiere decir que hasta nueva orden las líneas IR serán sensibles por flancos de transición bajo-alto.
- Se limpia el IMR.
- A la línea IR7 se le asigna un nivel de prioridad 7.
- Se desactiva el Special Mask Mode. Se queda listo para devolver IRR en la próxima lectura OCW3.
- Si IC4 (bit D0) es 0, todas las funciones seleccionadas en ICW4 serán puestas a 0 (non buffered mode, no AEOI, sistema 8080/85) e ICW4 no será necesaria.



Notas: Si SNGL es 1 significa que el 8259 es único en el sistema y no será enviada ICW3. Si IC4 es 0, tampoco será enviada ICW4. En el 8080/85, las diversas interrupciones generan CALL's a 8 direcciones adyacentes separadas 4 u 8 bytes (según indique ADI): para componer la dirección, el 8259 inserta A0..A4 (o A0..A5) convenientemente, según la interrupción que se trate. En el 8086, A7..A5 y ADI son ignoradas.
ICW2: Se envía con A0=1, para diferenciarlo de ICW0 (hacer OUT a la siguiente dirección de puerto).



Notas: En el 8080/85, A15..A8 completan la dirección de la rutina de servicio; en el 8086, T7..T3 determinan los cinco bits más significativos del número de vector de interrupción a invocar (los 3 bajos los suministra el 8259 según la interrupción que se trate).

ICW3: Se envía sólo en el caso de que haya más de un 8259 en el sistema (bit SNGL de ICW1 a cero), en caso contrario en su lugar se enviaría ICW4 (si procede).

Formato de ICW3 a enviar a un 8259 maestro:



Formato de ICW3 a enviar a un 8259 esclavo para que memorice de qué línea IR del maestro cuelga:



ICW4: Se envía sólo si IC4=1 en ICW1, con objeto de colocar el 8259 en un modo de operación distinto del establecido por defecto (que equivale a poner a cero todos los bits de ICW4).


Notas: El Special Fully Nested Mode, el buffered mode y la modalidad AEOI serán explicadas más tarde. Nótese que con el 8086 es obligatorio enviar ICW4 para seleccionar esta CPU.

OCWS (Operation Command Words).

Una vez inicializado, el 8259 está listo para procesar las interrupciones que se produzcan. Sin embargo, durante su funcionamiento normal está capacitado para recibir comandos de control por parte de la CPU.

OCW1:



Este comando activa y borra bits en el IMR (Interrupt Mask Register). Los bits M0..M7 de OCW1 se corresponden con sus correspondientes bits del IMR. Un bit a 1 significa interrupción enmascarada (inhibida) y a 0, interrupción habilitada.

OCW2:



OCW3:



RABAJANDO CON EL 8259

En las ICW y, sobre todo, en las OCW, se han introducido un aluvión de elementos nuevos que serán explicados a continuación.

Fully Nested Mode.
Por defecto, el 8259 opera en esta modalidad (modo de anidamiento completo), a menos que se le programe de otra manera. En este modo las interrupciones quedan ordenadas, por prioridades, de 0 (máxima) a 7 (mínima). Cuando se produce un reconocimiento de interrupción por parte de la CPU, el 8259 evalúa cuál es la interrupción pendiente de mayor prioridad, coloca su número de vector en el bus y activa su bit correspondiente en el ISR. Este bit permanece activo hasta que el 8259 recibe el comando EOI (situación más normal); sin embargo, en el modo AEOI, ese bit se bajaría inmediatamente después del último -INTA. Mientras el bit del ISR esté activo, todas las interrupciones de igual o menor prioridad que lleguen permanecen inhibidas; sin embargo, las de mayor prioridad podrán interrumpir. En el caso del 8086, cuando comienza el tratamiento de la interrupción, un bit del registro de estado de la CPU mantiene inhibidas todas las interrupciones: lo normal es que el programa de control comience con STI para permitir que el 8086 envíe nuevas señales INTA al 8259, así el 8259 podrá enviar las interrupciones de mayor prioridad que le lleguen. Tras la secuencia de inicialización, las interrupciones quedan ordenadas de mayor (IR0) a menor prioridad (IR7), aunque este orden puede modificarse en la modalidad de prioridad rotatoria o con el comando de asignación de prioridad. Nótese que cuando se utiliza el modo AEOI o el Special Mask Mode no se respeta el modo Fully Nested Mode (debido a que una interrupción de menor prioridad podría interrumpir a una rutina que gestiona otra de mayor prioridad).

Special Fully Nested Mode.
Se emplea en sistemas que tienen varios 8259 conectados. Sólo el 8259 maestro es programado en este modo, lo que implica las siguientes diferencias respecto al Fully Nested Mode normal:
- Cuando se atiende una interrupción de un 8259 esclavo, si viene otra de mayor prioridad de ese mismo 8259 esclavo, se provoca una interrupción al maestro (normalmente, el 8259 esclavo estaría enmascarado mientras se procesa una de sus interrupciones).
- Cuando acaba la rutina de servicio de interrupción, hay que enviar un EOI no-específico al 8259 esclavo; además hay que leer a continuación su ISR y comprobar si es cero: en ese caso, hay que enviar además otro EOI al 8259 maestro (si no es cero significa que aún hay interrupciones en proceso en el 8259 esclavo).

Modos de EOI.
El EOI (End Of Interrupt) sirve para bajar el bit del ISR que representa la interrupción que está siendo procesada. El EOI puede producirse automáticamente (AEOI) al final de la última señal INTA que envía la CPU al 8259 para una interrupción dada (tercer ciclo INTA en el 8080/85 y segundo en el 8086); sin embargo, la mayoría de los sistemas requieren una gestión de prioridades en las interrupciones, lo que significa que es más conveniente que EOI lo envíe el propio procesador al 8259, a través de OCW2, cuando acabe la rutina de gestión de interrupción, para evitar que mientras se gestiona esa interrupción se produzcan otras de igual o menor prioridad. En un sistema con varios 8259, el EOI debe ser enviado no sólo al 8259 esclavo implicado sino también al maestro. Hay dos modalidades de EOI: la específica y la no-específica. En el EOI no específico, el 8259 limpia el bit más significativo que esté activo en el ISR, que se supone que es el correspondiente a la última interrupción producida (la de mayor prioridad y que está siendo procesada). Esto es suficiente para un sistema donde se respeta el Fully Nested Mode. En el caso en que no fuera así, el 8259 es incapaz de determinar cuál fue el último nivel de interrupción procesado, por lo que la rutina que gestiona la interrupción debe enviar un EOI específico al 8259 indicándole qué bit hay que borrar en el ISR.

Rotación de prioridades.
Hay sistemas en que varios periféricos tienen el mismo nivel de prioridad, en los que no interesa mantener un orden de prioridades en las líneas IR. En condiciones normales, nada más atender una interrupción de un periférico, podría venir otra que también se atendería, mientras los demás periféricos se cruzarían de brazos. La solución consiste en asignar el menor nivel de prioridad a la interrupción recién atendida para permitir que las demás pendientes se procesen también. Para ello se envía un EOI que rote las prioridades: si, por ejemplo, se había procesado una IR3, IR3 pasará al menor nivel de prioridad e IR4 al mayor, quedando las prioridades ordenadas (de mayor a menor): IR4, IR5, IR6, IR7, IR0, IR1, IR2, IR3. Existe también una rotación específica de prioridades, a través de OCW2, que puede realizarse en un comando EOI o independientemente del mismo (comando para asignar prioridad).

Special Mask Mode.
Hay ocasiones en las que mientras se ejecuta una rutina de servicio de interrupción es necesario permitir que se produzcan ciertas interrupciones de menor prioridad en algunos momentos, o prohibirlo en otros, sin ser quizá interesante enviar el EOI antes de tiempo. Esto implica alterar la estructura normal de prioridades. La manera de realizar esto es activando el Special Mask Mode a través de OCW3 durante la rutina de servicio de interrupción (es más que conveniente inhibirlo de nuevo al final). Una vez activado este modo, el IMR indica qué interrupciones están permitidas (bit a 0) y cuáles inhibidas (bit a 1). Por ello, suele ser conveniente activar el bit del IMR correspondiente a la IR en servicio (para evitar que se produzca de nuevo cuando aún no ha sido procesada). Al final hay que enviar un EOI específico, ya que este modo de trabajo altera el Fully Nested Mode habitual.

Comando POLL.
En esta modalidad poco habitual, habilitada a través de OCW3, no se emplea la salida INT del 8259 o bien el microprocesador trabaja con las interrupciones inhibidas. El servicio a los periféricos es realizado por software utilizando el comando POLL. Una vez enviado el comando POLL, el 8259 interpreta la próxima lectura que se realice como un reconocimiento de interrupción, actualizando el ISR y consultando el nivel de prioridad. Durante esa lectura, la CPU obtiene en el bus de datos la palabra POLL que indica (en el bit 7) si hay alguna interrupción pendiente y, en ese caso, cuál es la de mayor prioridad (bits 0-2).

Lectura de información del 8259.
El IMR puede ser leído a través de OCW0; para leer el contenido del IRR y el ISR hay que emplear OCW3. Para estos dos últimos registros hay que enviar una OCW3 que elija el IRR o el ISR; a continuación se puede leer el bus de datos (A0=0) sin necesidad de enviar más OCW3 (el 8259 es capaz de recordar si tiene que leer el IRR o el ISR). Esto último no es así, evidentemente, en el caso de utilizar el comando POLL (tras enviarlo, la próxima lectura se interpreta como un INTA). Tras inicializarse, el 8259 queda preparado por defecto para devolver IRR a la primera lectura.

Buffered Mode.
Al emplear el 8259 en grandes sistemas, donde se requieren buffers en los buses de datos, si se va a emplear el modo cascada existe el problema de la habilitación de los buffers. Cuando se programa el modo buffer, la patilla -SP/-EN del 8259 actúa automáticamente como señal de habilitación del los buffers cada vez que se deposita algo en el bus de datos. Si se programa de esta manera el 8259 (bit BUF de ICW4) será preciso distinguir por software si se trata de un 8259 maestro o esclavo (bit M/S de ICW4).

3. - EL 8259 DENTRO DEL ORDENADOR.

Los PC/XT vienen equipados con un 8259 conectado a la dirección base E/S 20h; este controlador de interrupciones es accedido, por tanto, por los puertos 20h (A0=0) y 21h (A0=1). En los AT y máquinas superiores, adicionalmente, existe un segundo 8259 conectado en cascada a la línea IR2 del primero. Este segundo controlador es accedido a través de los puertos 0A0h y 0A1h. La BIOS del ordenador, al arrancar la máquina, coloca la base de interrupciones del primer controlador en 8, lo que significa que las respectivas IR0..IR7 están ligadas a los vectores de interrupción 8..15; el segundo 8259 de los AT genera las interrupciones comprendidas entre 70h y 77h. La asignación de líneas IR para los diversos periféricos del ordenador es la siguiente (por orden de prioridad):

IRQ 0             Temporizador                         (INT 08h)
IRQ 1             Teclado                                     (INT 09h)
IRQ 2             En los PC/XT: canal E/S       (INT 0Ah)
     IRQ 8        Reloj de tiempo real               (INT 70h) -+
     IRQ 9        Simulación de IRQ2               (INT 71h) |
     IRQ 10      Reservado                               (INT 72h) |
     IRQ 11      Reservado                               (INT 73h) |
     IRQ 12      Reservado                               (INT 74h) |> Sólo AT y PS/2
     IRQ 13      Coprocesador aritmético      (INT 75h) |
     IRQ 14      Controlador de disco duro    (INT 76h) |
     IRQ 15      Reservado                              (INT 77h) -+
IRQ 3             COM2                                     (INT 0Bh)
IRQ 4             COM1                                      (INT 0Ch)
IRQ 5             Disco duro PC/XT                 (LPT2 en el AT) (INT 0Dh)
IRQ 6             Controlador de disquetes     (INT 0Eh)
IRQ 7             LPT1                                       (INT 0Fh)

En los AT, la línea IR2 del 8259 maestro es empleada para colgar de ella el segundo 8259 esclavo. Como la línea IR2 está en el slot de expansión de 8 bits, por razones de compatibilidad los AT tienen conectado en su lugar la IR9 que simula la IR2 original. Cuando se produce una IR9 debido a un periférico de XT que pretendía generar una IR2, el AT ejecuta una rutina de servicio en INT 71h que salta simplemente a la INT 0Ah (tras enviar un EOI al 8259 esclavo).

La colocación de IRQ0-IRQ7 en el rango INT 8-INT 15 fue bastante torpe por parte de IBM, al saltarse la especificación de Intel que reserva las primeras 32 interrupciones para el procesador. En modo protegido, algunas de esas excepciones es estrictamente necesario controlarlas. Por ello, los sistemas operativos que trabajan en modo extendido y ciertos extensores del DOS (como las versiones 3.x de WINDOWS) se ven obligados a mover de sitio estas interrupciones. En concreto, WINDOWS 3.x las coloca en INT 50h-INT 57h (por software, las máquinas virtuales 8086 emulan las correspondientes INT 8-INT 15). Además, en el modo protegido del 286/386 (o el virtual-86 del 386) la tradicional tabla de vectores de interrupción es sustituida por otra de descriptores, aunque el funcionamiento global es similar.

La interrupción no enmascarable del 80x86 no está controlada por el 8259: es generada por la circuitería que controla la memoria si se detecta un error de paridad. La interrupción no enmascarable puede ser enmascarada en los ordenadores compatibles gracias a la circuitería de apoyo al procesador, aunque no es frecuente; en los AT el bit 7 del puerto 70h controla su habilitación (si es cero, la NMI está habilitada) sin embargo también se podría inhibir el control de paridad directamente (activando los bits 2 y 3 de la dirección E/S 61h, respetando el resto de los bits de ese puerto por medio de una lectura previa). En los PC/XT, es el puerto 0A0h el que controla la habilitación de la NMI, también con el bit 7 (con la diferencia de que debe estar a cero para inhibirla).

Durante la inicialización del ordenador, la BIOS envía sucesivamente al 8259 las palabras ICW1 a ICW4 de la siguiente manera (listado extraído directamente de la BIOS):

; Inicialización del 8259 maestro (XT/AT)
MOV                   AL,10001b                     ; funcionamiento por flancos, cascada, ICW4 necesaria
OUT                    20h,AL                            ; enviar ICW1
JMP                    SHORT $+2                   ; estado de espera para E/S
MOV                   AL,8                                ; base de interrupciones en INT 8
OUT                    21h,AL                           ; enviar ICW2
JMP                    SHORT $+2
MOV                   AL,4                                ; hay un esclavo en IR2 (S2=1) ¡poner 0 en PC/XT!
OUT                    21h,AL                           ; enviar ICW3
JMP                    SHORT $+2
MOV                   AL,1                                ; modo 8086, EOI normal, not buffered mode
OUT                    21h,AL                           ; enviar ICW4: completada la inicialización del 8259-1
JMP                    SHORT $+2
MOV                  AL,255
OUT                   21h,AL                            ; enmascarar todas las interrupciones


JMP                    SHORT $+2                   ; Inicialización del 8259 esclavo (sólo AT)
MOV                   AL,10001b                    ; funcionamiento por flancos, cascada, ICW4 necesaria
OUT                    0A0h,AL                       ; enviar ICW1
JMP                    SHORT $+2
MOV                  AL,70h                           ; base de interrupciones en INT 70h
OUT                   0A1h,AL                        ; enviar ICW2
JMP                   SHORT $+2
MOV                  AL,2                                ; es el esclavo conectado a IR2
OUT                   0A1h,AL                        ; enviar ICW3
JMP                   SHORT $+2
MOV                 AL,1                                 ; modo 8086, EOI normal, not buffered mode
OUT                  0A1h,AL                         ; enviar ICW4: completada la inicialización del 8259-2
JMP                  SHORT $+2
MOV                 AL,255
OUT                  0A1h,AL                        ; enmascarar todas las interrupciones

Como se puede observar, la rutina de arriba enmascara todas las interrupciones a través del IMR. El objetivo de esta medida es evitar que se produzcan interrupciones antes de desviar los correspondientes vectores, pudiendo incluso mientras tanto estar habilitadas las interrupciones con STI.

Cuando se produce una interrupción de la CPU (bien por software o por hardware), el indicador de interrupciones del registro de estado del 8086 se activa para inhibir otra posible interrupción mientras se procesa esa (la instrucción IRET recuperará los flags del programa principal devolviendo las interrupciones a su estado previo). Lo normal suele ser que las rutinas que gestionan una interrupción comiencen por un STI con objeto de permitir la generación de otras interrupciones; las interrupciones sólo deben estar inhibidas en brevísimos momentos críticos. Sin embargo, cuando se procesa una interrupción hardware, el registro de interrupciones activas (ISR) indica qué interrupción en concreto está siendo procesada; si en ese momento llega otra interrupción hardware de menor o igual prioridad le será denegada la petición, si es de mayor prioridad le será concedida (si la rutina comenzaba por STI). Cuando acaba de procesarse la interrupción hardware, la instrucción IRET no le dice nada al 8259, por lo que el programador debe preocuparse de borrar el ISR antes de acabar. Si, por ejemplo, se gestiona la interrupción del temporizador sin limpiar al final el ISR, a partir de ese momento quedarán bloqueados el teclado, los discos ... Conviene aquí señalar que una rutina puede apoyarse en una interrupción hardware sin necesidad de reprogramarla por completo. Ejemplo:

STI
PUSH                  AX
IN                        AL,puerto_teclado
CALL                  anterior_int9
;
;                           procesar tecla
;
POP                     AX
IRET

Al producirse la INT 9 se lee el código de rastreo de la tecla y luego se llama a la rutina que gestionaba con anterioridad a ésta la INT 9: ella se encargará de limpiar el ISR que, por tanto, no es tarea de nuestra rutina. Si hubiera que limpiar el ISR, bastaría con un EOI no específico (OCW2: enviar un valor 20h al puerto 20h para el 8259-1 y al puerto 0A0h para el 8259-2; en las IRQ8-IRQ15 hay que enviar el EOI a ambos controladores de interrupción).

Aviso: Aunque el funcionamiento del 8259 es suficientemente lógico como para pasar casi inadvertido, hay veces en que hay que tenerlo en cuenta. Por ejemplo, al utilizar el servicio 86h de la INT 15h del AT (con objeto de hacer retardos) desde una interrupción hardware comprendida entre IRQ 0 e IRQ 7, conviene limpiar el ISR antes de llamar: no basta con hacerlo al final de la rutina. La causa es que la BIOS utiliza las interrupciones asociadas al reloj de tiempo real para hacer el retardo, y en algunas máquinas es poco precavido y no limpia el ISR al principio, lo que deja totalmente bloqueado el ordenador.

4. - EJEMPLO: CAMBIO DE LA BASE DE LAS INTERRUPCIONES.

La siguiente utilidad reprograma el 8259 maestro para desviar las INT 8-INT 15 a los nuevos vectores INT 50h-INT 57h (que invocan a los originales, para que el sistema siga funcionando con normalidad). Esta nueva ubicación no ha sido elegida por capricho, y es la misma que emplea WINDOWS 3.x. La razón es que el 386 trabaja normalmente en modo virtual-86 bajo MS-DOS 5.0; cuando se produce una interrupción se ejecuta una rutina en modo protegido. El EMM386 del MS-DOS 5.0 no está preparado para soportar las IRQ0-IRQ7 en otra localización que no sea la tradicional INT 8-INT 15 ó en su defecto INT 50h-INT 57h (por compatibilidad con WINDOWS). Con el QEMM386 o, simplemente, sin controlador de memoria expandida instalado, no habría problemas y se podría elegir otro lugar distinto. Por cierto: si se entra y se sale de WINDOWS, la nueva localización establecida, ya sea en 50h o en otro sitio, deja de estar vigente: esto significa que WINDOWS reprograma la interrupción base al volver al DOS. Personalmente he comprobado que aunque IRQDEMO fuera más elegante (empleando funciones de la especificación VCPI), nuestro querido WINDOWS no lo sería: ¡para qué molestarse!. Sin embargo, IRQDEMO sí se toma la molestia de comprobar si la máquina es un XT o un AT para enviar correctamente la ICW3 del 8259.

; ********************************************************************
; * IRQDEMO.ASM - Utilidad residente de demostración, que desvía *
; * las interrupciones hardware INT 8-INT 15 hacia *
; * los vectores INT 50h a INT 57h. *
; ********************************************************************

irqdemo                       SEGMENT
                                      ASSUME CS:irqdemo, DS:irqdemo

                                      ORG   100h

inicio:
                                      JMP main

; ------------ Area residente

irq0:                              INT 8                      ; simular IRQ's normales (se
                                       IRET                       ; podría aprovechar también
irq1:                               INT 9                     ; para hacer algo más útil).
                                       IRET
irq2:                              INT 10
                                       IRET
irq3:                              INT 11
                                      IRET
irq4:                             INT 12
                                      IRET
irq5:                             INT 13
                                     IRET
irq6:                             INT 14
                                      IRET
irq7:                             INT 15
                                      IRET

tam_resid                   EQU                             ($-OFFSET inicio+256+15)/16

; ------------ Código de instalación

main                           PROC
                                    LEA BX,tabla_ints
                                    MOV AL,50h               ; nueva base para IRQ's 0-7
otra_int:                    PUSH AX
                                    PUSH BX
                                    MOV AH,25h
                                    MOV DX,[BX]
                                    INT 21h                        ; desviar INT 50h-57h
                                    POP BX
                                    ADD BX,2
                                    POP AX
                                    INC AL
                                    CMP AL,58h
                                    JB otra_int
                                    CALL es_AT?
                                    MOV BL,4
                                    MUL BL
                                    MOV BL,AL                  ; BL = 4 en AT y 0 en PC/XT
                                    CALL inic_8259
                                    LEA DX,texto_txt
                                    MOV AH,9
                                    INT 21h                         ; mensaje de instalación
                                    MOV ES,ES:[2Ch]
                                    MOV AH,49h
                                    INT 21h                         ; liberar entorno
                                    MOV AH,31h
                                    MOV DX,tam_resid
                                    INT 21h                         ; terminar residente
main                           ENDP

; ------------ Subrutinas de apoyo a la instalación.

inic_8259                   PROC                              ; Inicialización 8259 maestro
                                    MOV AL,0FFh
                                    OUT 21h,AL                   ; enmascarar todas las IRQ
                                    JMP SHORT $+2
                                    MOV AL,10001b           ; flancos, maestro, sí ICW4
                                    OUT 20h,AL                   ; enviar ICW1
                                    JMP SHORT $+2          ; estado de espera E/S
                                    MOV AL,50h                  ; base interrupciones INT 50h
                                    OUT 21h,AL                   ; enviar ICW2
                                    JMP SHORT $+2
                                    MOV AL,BL                    ; 4 en AT y 0 en PC/XT
                                    OUT 21h,AL                   ; enviar ICW3
                                    JMP SHORT $+2
                                    MOV AL,1                       ; modo 8086, EOI normal
                                    OUT 21h,AL                   ; enviar ICW4
                                    JMP SHORT $+2
                                    MOV AL,0
                                    OUT 21h,AL                   ; permitir todas las IRQ
                                    RET
inic_8259                   ENDP

es_AT?                      PROC                               ; comprobar si es XT ó AT
                                    PUSHF
                                    POP AX
                                    AND AX,0FFFh
                                    PUSH AX
                                    POPF
                                    PUSHF
                                    POP AX
                                    AND AX,0F000h
                                    CMP AX,0F000h
                                    MOV AX,1                      ; indicar AT
                                    JNE es_AT
                                    DEC AX                          ; indicar PC/XT
es_AT:                       RET
es_AT?                      ENDP

tabla_ints                  DW                                   irq0, irq1, irq2, irq3, irq4, irq5, irq6, irq7
texto_txt                   DB                                    13,10,"Las interrupciones 8-15 son ahora 50-57h."
                                    DB                                    13,10,"$"

irqdemo                     ENDS
                                    END                                 inicio

Friday, October 06, 2006

MICROPROCESADORES

LABORATORIO # 3

LOGICA DE TRES ESTADOS, OPERACIÓN DEL BUS, DISPOSITIVOS DE MEMORIA



I. INTRODUCCIÓN

En este laboratorio se realizarán:
-  Estudio de la logica de tres estados
-  Estudio de dispositivos de memoria y del bus

II. OBJETIVOS

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.


OBJETIVOS ESPECIFICOS

- Observar como se realisa el control de buses utilizando los integrados 74125 y el 74126, como habilitadores o desabilitadores 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 información en forma decimal.

IV. MARCO TEORICO

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:



V. 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

VI. LABORATORIO

CIRCUITO 1

Con los integrados 74125 y 74126 como buffers cuádruples con salidas de tres estados se montaron circuitos en protoboard. Se observa 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).



CIRCUITO 2

Se monto una matriz de diodos con capacidad de contener 10 nibles (1 nible = 4 bits) de información, que luego utilizando un circuito decodificador BCD a 7 segmentos y un display de siete segmentos, mostro la información almacenada en la memoria ROM conformada por la matriz de diodos.
Se verificó que el decodificador de BCD o binario a 7 segmentos sea compatible con el display de 7 segmentos que puede ser de ánodo o cátodo común.

Basándose en la relación de los códigos BCD y 7 segmentos, se programo en su módulo de ROM el número de teléfono para que sea visualizado en el diplay dígito por dígito.



VII. CONCLUSIONES

Utilizando los CIs 74125 y 74126 como buffers cuádruples con salidas de tres estados para esta experiencia se lograron los objetivos. Se pudo observar 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.

Para la segunda experiencia se almacenó en la memoria el número de teléfono de un integrante del grupo con buenos resultados.

VII. FE DE ERRATAS

La protoboard que se utilizó inicialmente no estaba en buenas condiciones y tuvo que ser reemplazada por otra mejor. Así se obtuvieron finalmente los resultados esperados.





Saturday, September 09, 2006

MICROPROCESADORES DE 8 BITS

En el siguiente documento se detallara las caracteristicas del microprocesador de 8 bits 6502


MOS 6502

Core Frequency: 2 MHz
Board Frequency: 2 MHz
Manufactured: week 46/1982
Made in: Hong Kong
Package Type: Plastic
DIP-40
Address bus: 16 Bit
Ext. data bus: 8 Bit
Voltage: 5 V

El MOS 6502 o MOS Technology 6502 fue un microprocesador de 8 bits diseñado por MOS Technology en 1975. Cuando fue introducido fue, por un largo trecho, el mas barato CPU con características completas del mercado, en alrededor de un sexto del precio, o menos, que diseños con los que competía de compañías más grandes como Motorola e Intel. Era sin embargo más rápido que la mayoría de ellos, y, junto con el Zilog Z80, fueron la chispa de una serie de proyectos de computadores que eventualmente darían lugar a la revolución del computador personal de finales de los 1970 y los principios de los años 1980. Además de MOS Technology, el diseño del 6502 tuvo originalmente como segunda fuente a Rockwell y Synertek y fue licenciado más adelante a un número de compañías. Todavía se hace para sistemas integrados (embedded systems).

Historia y uso

El 6502 fue diseñado primariamente por el mismo equipo que había diseñado el Motorola 6800. Después de salirse en masa de Motorola, rápidamente diseñaron el 6501, un diseño totalmente nuevo que era sin embargo compatible a nivel de pines con el 6800. Motorola demandó inmediatamente, y aunque hoy en día el caso habría sido descartado inmediatamente, el daño a MOS fue bastante para que acordaran parar la producción de los 6501.

El resultado fue el 6502, que era compatible con el litigio legal de Motorola, estaba diferenciado solamente por un reordenamiento de las patillas, haciéndolo inutilizable en una tarjeta madre para el 6800. Ahora, aparentemente Motorola ya no estaba interesada. Sin embargo esto dejó a MOS Technology con el problema de conseguir nuevos desarrolladores para el sistema, así que en respuesta el ingeniero Chuck Peddle diseñó el KIM-1 una computadora en una simple tarjeta. Para su sorpresa, el KIM-1 se vendió en cantidades enormes a los aficionados y a las personas que les gustaba experimentar, tan bien como a los ingenieros para los cuales fue pensado. El AIM 65, un sistema de control, entrenamiento, y desarrollo, manufacturado por Rockwell también lo hizo bien. Otro diseño más o menos similar fue el Synertek SYM-1.

El 6502 fue lanzado al mercado en septiembre de 1975. El precio era de $25, mientras que el 6800 y el 8080 se vendían por $179. Al principio mucha gente pensada que era alguna clase de fraude, pero antes de que el show terminara, ambos, Motorola e Intel habían bajado sus precios a $79. En vez de salvarlos, ahora el 6502 estaba legitimado y comenzaba a venderse por cientos.

Uno de los primeros usos "públicos" para el diseño fue la consola de video juegos Atari 2600. Los 2600 utilizaron un descendiente del 6502 llamado 6507, que tenía menos pines y como resultado podía direccionar solamente 8 KB de memoria RAM. Millones serían vendidos en esta forma. El 6502 luego fue usado en la familia del Apple II, y entonces rápidamente apareció en varios computadores personales como el Commodore PET, Commodore VIC-20, familia Atari de 8 bits, la familia BBC Micro, y un enorme número de otros diseños ahora perdidos en la historia. El 6510, un sucesor directo del 6502, fue el CPU usado en el extremadamente popular computador personal Commodore 64.

Otro uso importante del 6502 fue en el Nintendo Famicom, una consola de video japonesa. Su equivalente estadounidense y europeo, el Nintendo Entertainment System (NES), también tenía el 6502. El 6502 usado en el NES eran una versión modificada, que fue producida solamente para los Nintendo, llamada 2A03 en las consolas NTSC y 2A07 en las consolas PAL, la diferencia entre los dos era el divisor frecuencias del reloj. El procesador personalizado para el NES careció del modo decimal del 6502 pero agregó 22 registros de memoria mapeada para la generación del sonido, la lectura del joypad (control del juego) y el DMA para los sprites.

El eficiente diseño del 6502 también inspiró a los principales diseñadores del ARM, un procesador RISC, y así se puede decir que la herencia del 6502 ha trascendido la familia original del procesador puesto que su espíritu vive en el diseño del ARM, usado en varios computadores de escritorio así como una plétora sistemas de mano (hanheld) y de otros empotrados (embedded), y vendido como bloque de IP para ser usado en productos de Sistemas en un chip.


Descripción

El 6502 es un procesador de 8 bits con un bus de dirección de 16 bits. La lógica interna corre a la misma velocidad que la frecuencia del reloj externo, pero las aparentemente lentas velocidades de reloj de típicamente 1 MHz eran realmente competitivas con otros CPUs corriendo cuatro veces más rápido porque el 6502 era un procesador estático pipelined, y los otros de su tiempo fueron microcodificados y tenían velocidades internas comparables con la del 6502. El reloj interno Z80, por ejemplo, estaba dividido por cuatro. Aunque esto puede sonar como un "truco", el 6502 tenía el efecto secundario de bajar los requerimientos de velocidad de los periférico unidos al CPU, de esta manera bajando el costo total del sistema, un importante factor para conseguir un diseño ganador en los muy sensibles mercados de las consola de juego de juego y los computadores personales.

A diferencia del Intel 8080 y de similares microprocesadores, el 6502 tenían muy pocos registros. En ese tiempo, la memoria RAM era más rápida que los CPUs, así que tenía sentido optimizar el acceso a RAM más que aumentar el número de registros en el chip. Dentro del 6502 había un registro acumulador "A" de 8 bits, dos registros índice "X" e "Y" de 8 bits, un registro de estado "SR" de 8 bits, un puntero de pila "SP" de 8 bits, y un contador de programa "PC" de 16 bits. El espacio de dirección de la pila para llamadas a subrutinas o almacenamiento temporal estaba fijado (hardwired) a la página $01 de la memoria, es decir la gama de direcciones $0100-$01FF (256-511). El acceso del software a la pila se hacía hecho mediante cuatro instrucciones con modo de direccionamiento implícito cuya función era colocar o retirar un elemento en la pila (Push o Pop). Habían instrucciones Push y Pop para contenido del acumulador o para el registro de estado del procesador.

El chip utilizó los registros del índice y de la pila efectivamente con varios modos de direccionamiento, incluyendo un rápido modo de "página directa" o "página cero" que accedía a posiciones de memoria de las direcciones 0 a 255 (00 a FF hexadecimal) con una sola dirección 8 bits (no tenía que leer un segundo byte para la dirección). El código para el 6502 utilizaba mucho la página cero, tanto como el código para otros procesadores habrían usado sus registros. En la mayoría de los microcomputadores basados en el 6502 con un sistema operativo, el sistema operativo en sí mismo utilizaba casi completamente la página cero, dejando quizás un puñado de localizaciones para el usuario.

Los modos de direccionamiento también incluían:
implied (instrucciones de 1 byte)
absolute (3 bytes)
relative (2 bytes)
acumulador (1 byte)
indirect, x e indirect, y (2 bytes)
immediate (2 bytes)

El modo absoluto era un modo de uso general. El modo relativo era usado para instrucciones de bifurcación condicional que podrían mover el contador de programa hasta 128 bytes adelante o atrás. El modo acumulador usó el acumulador como una dirección efectiva, y no necesitaba ningún dato de operando. El modo inmediato utilizaba un operando literal de 8 bits.

Los modos indirectos eran útiles para procesamiento de arreglos y otras operaciones repetitivas con bucles. Con el modo indirecto, y el registro Y, de 8 bits, era agregado a una base de 16 bits localizada en la página cero de la memoria (un byte en el opcode denotaba la localización de página cero). Los registros de 8 bits X e Y eran usados como offset (desplazamiento) más que su uso 'normal' como registros índice. El incremento de X o Y para caminar por el arreglo era una operación de 8 bits de dos ciclos, aunque el arreglo pudiera estar situado en cualquier parte del espacio de dirección 16 bits (obteniendo la base de 16 bits leída de la página cero). Aquí es donde el 6502 se diferencia más del Motorola 6800. Un superficial vistazo en las especificaciones del 6502 mostrando que habían solamente registros de índice de 8 bits es absolutamente engañoso.

Configuración de pines del 6502


Microcomputadores que usaron el 6502

El procesador MOS 6502 y sus variantes fueron usados, entre otros equipos, en:
- Apple I, Apple II, Apple III
- Commodore PET
- Atari 400, Atari 1200XL, Atari Lynx 1 y 2 (consola)
- MOS Technology KIM-1
- Acorn Atom
- Nintendo Entertainment System (consola)
- PC-Engine (Turbo Grafix 16) (dos CPU´s 6502)

A continuacion se muestra la arquitectura interna simplificada en diagramas de bloques:



y su respectivo diagrama de tiempos:


Simulador:
SIM6502.NET V1.0



Se puede descargar el simulador de este microprocesador del siguiente link:
http://sourceforge.net/projects/sim6502net/

Y su hoja de datos completa del siguiente link:
http://www.6502.org/archive/datasheets/cmd_g65sc02_mpu_mar2000.pdf

MICROPROCESADORES

LABORATORIO # 2

ENSAMBLADO DE UNA MICROALU, OPERACIÓN DE LA ALU COMPLETA 74181

I.- INTRODUCCION

La unidad aritmética lógica (UAL o ALU) es el órgano operativo del microprocesador puede realizar operaciones tanto aritméticas como lógicas entre un par de operandos de N bits, se compone en dos módulos la unidad aritmética y la unidad lógica. Para seleccionar la operación que se quiere realizar normalmente estos dispositivos poseen unas entradas de selección.

En la arquitectura de un microprocesador observamos en la figura que este tiene una unidad aritmética y lógica de 8 bits este opera con datos de 8 bits el cual posee dos vías par el acceso de datos:

· Acceso directo desde el bus interno del microprocesador
· Acceso al acumulador con el cual trabaja habitualmente

Además tiene una comunicación con los diferentes bits de registro de estados.



En este documento se detallara el funcionamiento de la ALU.

II.- OBJETIVOS

OBJETIVOS GENERALES

- Verificar el funcionamiento del circuito sumador de 2 bits con carry y sin carry
- Verificar el funcionamiento del circuito sumador completo y circuito complementario para posibilitar operaciones de complemento y diferencia del sumador
- Ensamblar una ALU, verificar las operaciones de la ALU completa con el C.I. 74181

OBJETIVOS ESPECIFICOS

-Demostrar la operación de una microALU montada en base a un sumador completo y compuertas EXOR.
- Montar un circuito sumador de 2 bits con carry y sin carry
- Montar un circuito sumador completo y circuito complementario para posibilitar operaciones de complemento y diferencia del sumador.
- Montar el dispositivo de unidad aritmética y lógica con el C.I. 74181 y verificar el cumplimiento de su conjunto de instrucciones.

IV. MARCO TEORICO

Para realizar las experiencias se utilizaron los integrados que se muestran a continuación, para poder realizar la lógica de combinación e ingresar las excitaciones adecuadas.

74ls86, que es un OR-EX, que es utilizado en la experiencia 1, para poder obtener el bit de acarreo que generan las entradas A y B al circuito.
También es utilizado en la experiencia dos para obtener un complementador de las entradas B, y asi poder obtener el complemento a uno de dichas entradas.

74ls83, que es un sumador, el cual fue utilizado para poder realizar la experiencia dos, en donde se suman las entradas A a las respectivas de B, y aumentando algunas entradas lógicas se puede obtener el restador.

74ls181, que es una unidad aritmetica logica, fue utilizada para la experiencia numero tres, el cual tiene toda la logica en su interior, para poder realizar las operaciones requeridas de acuerdo a las instrucciones que tenga en la entrada.

ALU (Arithmetic Logic Unit)

En esta sección de la CPU se realizan las operaciones aritméticas, lógicas, de desplazamiento, de rotación de incremento. Uno de los operandos que intervienen en la operación a efectuar por la ALU, procede de un registro de 8bits, llamado Acumulador. El otro operando llega desde cualquier parte del sistema y se carga en un registro auxiliar. En los microprocesadores de 8bits, el resultado de la operación de la ALU se deposita en el Acumulador, que, por este motivo, se emplea doblemente. Un registro especial, denominado Registro de Estado, dispone de una serie de bits que actuan como se;alizadores de alguna caracteristica especiales que se haya producdo en la ultima operacin efectuaa por la ALU.

La ALU necesita recibir 4 señales que seleccionan la operación, mas otra (M) que determina si es de tipo lógico o aritmético. Las señales que seleccionan la operación proceden del código OP de la instrucción que entra desde el bus externo de datos e instrucciones

Esta unidad, de forma concreta se compone básicamente de: Circuito Operacional, Registros de Entradas, Registro Acumulador y un Registro de Estados, conjunto de registros que hacen posible la realización de cada una de las operaciones.

V. LISTADO DE MATERIALES

- 1 Entrenador digital
- 1 CI 7486 EXOR cuádruplo de dos entradas
- 1 CI 7483 sumador completo de 4 bits
- 1 CI 74181 ALU
- 1 CI 7405
- 4 LED
- 4 Resistencias de 220 Ohm 1/2W
- 2 interruptores de 8 bits tipo DIP
- Circuito driver para proteccion

VI. LABORATORIO

Circuito 1

El funcionamiento del circuito sumador de dos bits con carry y sin carry su funcionamiento esta mostrado en la siguiente tabla:

tabla de estados del primer circuito

Cuando funciona el circuito sin carry o sea en nivel bajo (carry) esta en el modo de semisumador este permite sumar dos números binarios de un solo bit cada uno, sin embargo este no puede sumar los bits de arrastre cuando estos se generan en operaciones de mas de una cifra, esta es la razón por la que se la denomina semisumador. En el modo sumador total o sumador completo se produce la suma de los 2 bits mas el acarreo que se puede producir en las operaciones. Para obtener este funcionamiento el SW (carry) deberá estar en nivel alto.


Simulacion en PROTEUS



Circuito 2

El funcionamiento de la experiencia 2 es tan solo un sumador / restador de 4 bits con su carry. La suma puede ser realizada con carry o sin este, siempre en nivel 0 el SW (complementador).
En la siguiente tabla observamos la suma de 1+1+0 = 2 (0010) esto sin carry y con carry 1+1+1 = 3 (0011) produciendo el acarreo.




El circuito como restador funciona de la siguiente manera (sin carry).
En el caso que quisiéramos realizar una resta 3-2 el proceso seria el siguiente:
A = 3 = 0011
B = 2 = 0010 (complemento a 1) ; realizando el complemento a 1 obtendremos
- B = 1101 = -2
Obtendremos como resultado 10000 esto sin el carry, en efecto acá solo realizamos el complemento a 1.


Al realizar el complemento a 2 con el carry en nivel alto, que es tan solo es la suma de 1 al complemento uno, obteniendo el resultado deseado.

+ A = 3 = 0011
- B = -2 = 1110 (compl. 2)
-----------------------------------------
R = 10001 = 3 + el acarreo

En la siguiente figura podemos observar el ejemplo:


El diagrama del circuito sumador/restador simulado en el PROTEUS se muestra en la siguiente figura


con su correspondiente tabla de funcionamiento:




Circuito 3

A continuación se presenta las operaciones básicas (lógicas y aritméticas) que puede realizar la ALU.


En este laboratorio se estudia el CI 74181, posee 5 entradas de selección, esto quiere decir que puede hacer 32 operaciones (16 aritméticas y 16 lógicas). En el siguiente graficose muestra la distribución de pines y tabla de operaciones de este integrado.


A continuacion su muestra el circuito simulado en el PROTEUS


Y su correspondiente tabla de funcionamiento:


Cuando las entradas de selección están en apagado (low) y la entrada M = L y Cn = H la función será F = A, en el caso de que Cn = L entonces la función será F = A – 1. De esta manera podríamos explicar las otras funciones. Las funciones dadas que son producto de las entradas serán mostradas en los leds, cada led esta conectado a los drives. El colocado de los drives es para prevenir el quemado de los leds él cual es un C.I. 7405.


VII. CONCLUSIONES

- Al realizar las tres experiencias se comprobó q los circuitos funcionabas correctamente, cada un de las cuales cumpliendo a cabalidad con las tablas de funcionamiento,.

- Se observo el funcionamiento de una unidad aritmética lógica, el CI 74ls181, que es un sumador completo, y que la alu realmente puede realizar las operaciones que se le piden en la entrada según su lógica interior.

VIII. FE DE ERRATAS

No se pudo conseguir la simulacion del CI 74LS181 en el simulador electronico PROTEUS debido a que este no contaba con la libreria adecuada para ponerlo en funcionamiento.

Wednesday, August 09, 2006

MICROPROCESADORES

LABORATORIO # 1



REGISTRO DE DESPLAZAMIENTO DE ENTRADA Y SALIDA SERIAL, REGISTRO DE ROTACIÓN A LA DERECHA, TRANSFERENCIA DE DATOS Y CONTADOR DE PROGRAMAS


OBJETIVOS:

-  Demostrar el funcionamiento de los registros de desplazamiento a la derecha de entrada y     salida seriales utilizando flip . flops tipo D.

-  Demostrar el funcionamiento del registro de rotación a la derecha utilizando flip – flops tipo D.

-  Demostrar las características operativas de los registros de desplazamiento de entrada     paralela – salida serial mediante el uso de F-F tipo D.

-  Verificar el funcionamiento del registro de desplazamiento bidireccional universal 74194.

-  Mostrar como ocurre la transferencia de datos paralelos entre dos registros de 4 bits.

-  Mostrar el funcionamiento de uno de los registros más importantes de un microprocesador,     que es el contador de programas, que tiene como función principal apuntar la dirección de la     próxima instrucción a ejecutarse.

PROCEDIMIENTO:

- Montar un registro de desplazamiento de cuatro bits con entrada paralela y salida serial.

- Montar el circuito con el CI 74194 y verificar su tabla de funcionamiento.

- Montar un circuito para la experiencia de transferencia de datos paralelos.

- Montar un contador de programas basado en el CI contador sincrónico de cuatro bits 74163.

MARCO TEORICO:

Registros:
Los registros son circuitos secuenciales conectados por una serie de biestables conectados en cascada. Tienen diversas aplicaciones prácticas como:

- Transmitir y recibir datos en serie y en paralelo.
- Conversión de datos en formato serie y paralelo y viceversa.
- Almacenamiento de información (memoria)

Tipos de registros:

- Registros de desplazamiento ENTRADA SERIE – SALIDA SERIE.
Es el registro más sencillo, en el que recibimos la información en serie e y en la salida obtenemos también en serie, pero retardad tantos ciclos de reloj como número de biestables compongan el registro. Funcionan de la siguiente forma, partiendo de que en el inicio todos los biestables están reseteados Q=0, en el primer flanco de subida de la señal de reloj (o bajada, dependiendo del biestable), el contenido de la entrada del primer biestable pasa a la su salida que es a su vez la entrada del segundo biestable. Este tipo de registro se suele usar como unidad de retardo.

- Registros de desplazamiento ENTRADA SERIE – SALIDA PARALELO.
En este tipo de registros, la información se recibe en serie y la salida la obtenemos en paralelo, una vez transcurridos tantos ciclos de reloj como biestables compongan el registro. Las salidas Q están conectadas a las entradas del biestable y a su vez a la salida en paralelo, el funcionamiento es igual que el anterior pero dependiendo del número de biestables y al terminar el ciclo de reloj, tememos una salida de tantos bits en paralelo como número de biestables.

- Registros de desplazamiento ENTRADA PARALELO – SALIDA SERIE.
En este tipo de registro, la información es introducen en el registro en paralelo simultáneamente en todos los biestables, por el contrario, la salida de los bits se obtienen en serie, una vez transcurridos tantos ciclos de reloj como número de biestables compongan el registro. Se realizan conjugando con un circuito combinacional y otra entrada que llamamos Shift/Load con una entrada directa y otra invertida, cuando se producen un flanco activo de reloj, se produce un paso de las entradas al registro de datos a través del c. Combinacional, cuando está a nivel alto, las puertas permiten el desplazamiento en serie hacia la derecha de los bits almacenados., Produciéndose la salida de todos los datos una vez transcurridos los ciclos de reloj, es útil a la hora de convertir datos paralelos a serie para poderlos enviar por un cable.

- Registros de desplazamiento ENTRADA PARALELO – SALIDA PARALELO.
En este tipo de registros la información si introducida simultáneamente en los biestables paralelo y cuando se producen un flanco activo de la señal de reloj, los datos se obtienen también a la salida en paralelo.

Contadores:
Los contadores son circuitos secuenciales cuya salida representa el número de impulsos que se la aplica a la entrada de reloj. Está formado básicamente por biestables interconectados. Pueden contar de forma ascendente si su contenido se incrementa con cada impulso o si decrementa, aunque por lo general los contadores pueden realizar esta función de ambas maneras según el estado de una entrada. Las aplicaciones de los contadores son las siguientes:
- Relojes y temporizadores
- Divisores de frecuencia.
- Frecuencímetros.

Según la forma de conectar la señal de reloj, los contadores pueden clasificarse en asíncronos y síncronos.

Contadores Asíncronos:

En este tipo, la señal de reloj se conecta sólo al primer biestable, mientras que las otras entradas se conectan a la salida del biestable anterior. El conectarse de esta forma la señal de reloj provoca que todos los biestables no cambien de estado al mismo tiempo, por ello reciben el nombre de asíncronos. Las salidas pueden atacar a un display visualizador de siete segmentos, por ejemplo. Su funcionamiento es el siguiente, se parte de que todos los flip-flops están reseteados, cuando se produce un flanco activo de la señal de reloj, las salidas del primer biestable cambian Q=0 y Q’=1, Q’ conectada a la señal de reloj del segundo biestable, produce un flaco activo, cambiando el segundo biestable el estado de sus salidas, este proceso se produce de forma indefinida a lo largo de los biestables. Podemos realizar un contador descendente si lo que conectamos a la señal de reloj es la salida Q y no Q’. El asíncrono además de indicar el número de impulsos de señal recibidos puede dividir la frecuencia de la señal de reloj. Como ejemplo la salida de la señal del primer flip-flop tiene la mitad de frecuencia que la salida de señal de reloj original, la salida del segundo flip-flop, una frecuencia 4 veces menor, así sucesivamente obteniendo divisiones en cada salida múltiplos de 2. El inconveniente de este divisor de frecuencias viene dado por el tiempo de propagación de la señal, que hace que si cambiamos el estado del primer biestable deben cambiar de estado éste y el siguiente, provocando que la señal de reloj tenga un retardo al bascular. Si se conectan más, el tiempo de espera que corresponde con el tiempo de propagación, aumenta, lo que limita la frecuencia de funcionamiento del contador. Esta frecuencia máxima viene determinada por la siguiente fórmula F< tp=" tiempo" n=" número">
Ampliación de contadores asíncronos:
El método para conseguir contadores asíncronos de más bits consiste en conectar en cascada tantos biestables como número de bits que queramos que tenga el contador., llevando la señal de reloj externa al primero de3 ellos y la salida de cada biestable a la entrada del reloj siguiente. El número máximo de estados por los que pasa un contador se denomina módulo del contador. Este número viene determinado por la expresión 2^n donde n indica el número de bis del contador. Ejemplo, un contador de módulo 4 pasa por 4 estados, y contaría del 0 al 3. Si necesitamos un contador con un módulo distinto de 2^n, lo que haremos es añadir un circuito combinacional (puerta NAND) cuyas entradas sean las salidas a 1 del contador, y añadir la salida del circuito a todas las entradas CLEAR de los biestables.

Contadores síncronos:

En este tipo de biestables, la señas de reloj externa se conecta a todos los biestables. Con ello se consigue que todos los biestables evolucionen a la vez, y por lo tanto no se produzcan tiempos de retardo ni transitorios. Para conseguirlo hay que añadir una lógica combinacional para implementarla en el contador, mientras que los biestables hacen de memoria para saber en qué estado se encuentra, la lógica combinacional se encargará de calcular cual será el siguiente estado al que debe pasar el contador.

Diseño de un contador síncrono:
El diseño de un contador síncrono debe pasar por varias fases de diseño:

1. Dibujar el diagrama de estados. Se representa en él la forma simbólica del funcionamiento del sistema, representando los estados que deseamos y las transiciones precisas.

2. Realizar la tabla simbólica de transiciones. Es otra forma de representar el anterior diagrama de estados, y está compuesta por dos columnas, la de estado actual (estado en el que se encuentra el sistema) y estado futuro (el estado que pretendemos que evolucione el sistema).

3. Realizar la tabla de codificación de estados. Se trata de codificarlo en binario, el número de biestables del sistema depende del número de estados del mismo. Por ejemplo, si queremos un contador de 8 estados (módulo 8) siguiendo la relación N=2^n; n=log(2)N, serían necesarios 3 biestables para codificar los estados del contador. 7(10)=111(2) son tres bits, por lo tanto necesitamos 3 biestables. Pasamos a binario tanto el estado actual como el estado futuro y cada bit de salida es una salida de un biestable.

4. Crear una tabla de transiciones codificada. Tiene dos columnas al igual que la tabla simbólica de transiciones, pero ya codificada en binario. El estado actual representa el valor de la salida de los biestables (salida Q) y el estado futuro representa el valor de la salida que deben tomar Q en el siguiente flanco activo, denominándose Q+.

5. Realización de las tablas de excitación. Para conseguir que un biestable pase de un estado actual a un estado futuro, es preciso aplicarle la excitación conveniente a sus entradas. Para ello se aplican tablas de excitación, que son las tablas de verdad de los biestables pero vistas a la inversa, es decir, la entrada en función de la salida.

6. Obtención del circuito combinacional necesario, simplificación e implementación. Una vez obtenida la tabla de excitación del contador síncrono, el problema se reduce al obtener las funciones de las excitaciones, utilizando para ello Karnaugh. Una vez obtenidas las funciones, se puede implementar el circuito, conectado las salidas Q a las entradas de los siguientes biestables a través del combinacional.

LISTADO DE MATERIALES

Materiales:

1 Entrenador digital
1 CI 555
2 CI 7474
1 CI 7400
2 CI 7405
1 CI 74194
1 CI 74163
8 LED
Condensador
Condensador de 0.01PF
1 Bloque de interruptores del tipo DIP
Resistencias de 220 Ohm ½ W
Resistencias de 4.7K ½ W
Resistencias de ½ W

LABORATORIO:

1. El primer circuito muestra un registro serie-serie


2.
El segundo circuito muestra un registrode 4 entradas paralelo-serie


3. Registro universal con integrado 74194


74194

Este registro bidireccional está diseñado para incorporar virtualmente todas las características que se pueden realizar en un registro de desplazamiento. Contiene entradas y salidas tanto en serie como en paralelo, entradas en serie tanto desde la derecha como de la izquierda a través de entradas de control, y entrada de reset. La carga en paralelo se realiza aplicando a las cuatro entrada de datos el control de las entradas s0 y s1, cuyas transiciones de estado se realizan a través del flanco activo de la señal de reloj, en este caso, a nivel alto.
El desplazamiento hacia la derecha se realiza cuando s0 está a nivel alto y s1 a nivel bajo. Los datos en serie para este modo se ejecutan el desplazamiento derecho de entrada de datos. Cuando s0 está a nivel bajo y s1 está a nivel alto, el desplazamiento de los datos se realiza desde la izquierda.

-   Se realizan cronogramas para los diferentes estados que pueden tomar S0 y S1.


- Cuando S0 y S1 están las dos a nivel bajo, las salidas se mantienen en memoria, independientemente del reloj y de las entradas SR y SL:

- Cuando S0=0 y S1=1, el nivel depende de cómo esté SL, si está a nivel alto, se irán desplazando a nivel alto de izquierda a derecha, si está a nivel bajo, se irán desplazando a nivel bajo de izquierda a derecha independientemente de cómo esté SL.

- Cuando S0=1 y S1=0 el desplazamiento se va realizando a la inversa, de derecha a izda, empezando por Q3 y el nivel de desplazamiento depende de cómo esté SR:

- Cuando S0=1 y S1=1 , se produce la carga de datos en paralelo, siendo en esta práctica A=Q0=1, B=Q1=0; C=Q2=1 y D=Q3=0, por lo tanto, este sería el cronograma:
 
Ensayo y experimentación de un contador síncrono up/down.

Los circuitos xx193 y xx192 son contadores que permiten la cuenta tanto ascendente como descendente. La diferencia entre los dos radica en que el xx190cuenta en BDC (0 al 9) y el xx193 es un contador binario de 4 bits (del 0 al 15).
Contador 74193
Estos contadores pueden ser preseteados introduciendo los datos deseando en las entradas A, B, C, D. Cuando la entrada LOAD está a nivel bajo, obtenemos en la salida la cuenta independiente de la señal de reloj. Esta característica permite que el contador se pueda dividir en varios contadores modificando el tamaño de la cuenta con estas entradas. Con la entrada CLEAR reseteamos el contador.
Las salidas BORROW y CARRY son las que en sumas naturales, sacan el acarreo dependiendo de si el contador es creciente o decreciente.

En el siguiente grafico podemos ver los estados de este contador


CONCLUSIONES:

En este laboratorio se pudo comprobar el funcionamiento de los registros tanto en su modo de funcionamiento en sereiey paralelo tambien se vio el funcionamiento del contador 74163 obteniendo buenos resultados

FE DE ERRATAS:

En el transcurso del laboratorio se tuvo problemas con el funcionamiendo del circuito en el simulador PROTEUS pero se soluciono cambiando las resistencias, y la fuente despues de eso no hubo problemas significativos.