Los microprocesadores 80186 y 80188

por Dario Alejandro Alpern

Estos microprocesadores altamente integrados aparecieron en 1982. Por "altamente integrados" se entiende que el chip contiene otros componentes aparte de los encontrados en microprocesadores comunes como el 8088 u 8086. Generalmente contienen, aparte de la unidad de ejecuci�n, contadores o "timers", y a veces incluyen memoria RAM y/o ROM y otros dispositivos que var�an seg�n los modelos. Cuando contienen memoria ROM, a estos chips se los llama microcomputadoras en un s�lo chip (no siendo �ste el caso de los microprocesadores 80186/80188).

Externamente se encapsulaban en el formato PGA (Pin Grid Array) de 68 pines.

Los microprocesadores 80188/80186 conten�an, en su primera versi�n, lo siguiente:

Generador de reloj

El 80186/80188 contiene un oscilador interno de reloj, que requiere un cristal externo o una fuente de frecuencia con niveles TTL. La salida de reloj del sistema tiene una frecuencia de 8 MHz con 50% de ciclo de trabajo (la mitad del tiempo en estado alto y la otra mitad en estado bajo) a la mitad de frecuencia de oscilaci�n del cristal (que debe ser de 16 MHz). Esta salida puede utilizarse para atacar las entradas de reloj (clock) de otros componentes, haciendo innecesario tener un chip externo dedicado a la generaci�n de reloj.

Temporizadores

En estos microprocesadores se incluyen dos temporizadores / contadores programables para contar o medir tiempos de eventos externos y para generar formas de onda no repetitivas. El tercero, que no est� conectado al exterior, es �til para implementar demoras y como un prescaler (divisor) para los otros dos que est�n conectados exteriormente. Estos temporizadores son muy flexibles y pueden configurarse para contar y medir tiempos de una variedad de actividades de entrada/salida.

Cada uno de los tres temporizadores est� equipado con un registro contador de 16 bits que contiene el valor actual del contador/temporizador. Puede ser le�do o escrito en cualquier momento (aunque el temporizador est� corriendo). Adem�s cada temporizador posee otro registro de 16 bits que contiene el m�ximo valor que alcanzar� la cuenta. Cada uno de los dos temporizadores conectados exteriormente posee otro registro de cuenta de 16 bits que permite alternar la cuenta entre dos valores m�ximos de cuenta (lo que sirve para generar se�ales con ciclo de trabajo diferente del 50%) programables por el usuario. Cuando se alcanza la cuenta m�xima, se genera una interrupci�n y el registro que lleva la cuenta (el primero mencionado) se pone a cero.

Los temporizadores tienen modos de operaci�n bastante flexibles. Todos pueden programarse para parar o poner la cuenta a cero y seguir corriendo cuando llegan al valor m�ximo. Los dos temporizadores conectados externamente pueden seleccionar entre el reloj interno (basado en la se�al generada por el generador de reloj, explicado en el apartado anterior) y externo, alternar entre dos cuentas m�ximas (primero se usa una y despu�s la otra) o usar una cuenta m�xima (siempre el mismo valor), y pueden programarse para volver a disparar cuando ocurre un evento externo.

Canales de DMA

La unidad controladora de DMA (Direct Memory Access, lo que indica que no se utiliza la CPU para realizar la transferencia) integrada en el 80186/80188 contiene dos canales independientes de DMA de alta velocidad. Las transferencias de DMA pueden ocurrir entre los espacios de memoria y la de entrada/salida (M - I/O) o entre el mismo espacio (M - M, I/O - I/O), lo que permite que los dispositivos de entrada/salida y los buffers de memoria puedan ubicarse en cualquiera de los espacios. Cada canal de DMA posee punteros fuente y destino de 20 bits que pueden ser incrementados, decrementados o sin cambiar despu�s de cada transferencia (el �ltimo caso es �til para I/O). El usuario puede especificar diferentes modos de operaci�n de DMA utilizando el registro de control de 16 bits.

Controlador de interrupciones

Este controlador resuelve las prioridades entre pedidos de interrupci�n que arriban simult�neamente. Puede aceptar interrupciones de hasta cinco fuentes externas (una no enmascarable (NMI) y cuatro enmascarables) y de fuentes internas (temporizadores y canales de DMA). Cada fuente de interrupci�n tiene un nivel de prioridad programable y un vector de interrupci�n predefinido. El hecho de que el tipo de vector (ver discusi�n sobre esto en el apartado "Estructura de interrupciones" del microprocesador 8086/8088) sea fijo incrementa la velocidad de respuesta a interrupciones en un 50%. Adem�s tiene varios de los modos de operaci�n del circuito integrado controlador de interrupciones 8259A.

Generaci�n de Chip Select y Ready

El microprocesador 80186/80188 contiene una l�gica de selecci�n de chip programable para proveer se�ales de chip select para memorias y perif�ricos y tambi�n posee una l�gica programable de generaci�n de estados de espera (wait state) para componentes lentos. El resultado de esta l�gica es una menor cantidad de circuitos integrados externos ya que se pueden ahorrar alrededor de diez chips TTL. Aparte del menor costo que esto significa, el rendimiento del sistema aumenta como resultado de la eliminaci�n de demoras de propagaci�n externas (las demoras de las se�ales en el interior de un chip son significativamente menores que las demoras en el exterior). Otra ventaja se refiere a la flexibilidad en la elecci�n del tama�o y velocidad de acceso de las memorias. Pueden programarse tres rangos de memoria (menor, medio y mayor) con longitudes variables (1K, 2K, 4K, ..., 256K). Pueden programarse entre cero y tres estados de espera para poder utilizar memorias de alta velocidad o memorias de bajo costo (y m�s lentas). Con respecto a la selecci�n de perif�ricos, pueden direccionarse hasta siete que pueden estar en la zona de memoria y/o de entrada/salida. Tambi�n pueden programarse los estados de espera para los perif�ricos.

Unidad Central de Proceso (CPU) del 80186/80188

La funcionalidad agregada del 80186/80188 (temporizadores, DMA, controlador de interrupciones y selecci�n de chip) utiliza registros de control de 16 bits por cada dispositivo integrado. Estos est�n contenidos en un bloque de control de 256 bytes incluido en la arquitectura de registros del 80186/80188. Este bloque de control puede estar en la zona de memoria o en la de entrada/salida, basado en la inicializaci�n de un registro especial de reubicaci�n. Exceptuando estos agregados, el resto de los registros son los mismos que los del 8086/8088.

Nuevas instrucciones del 80186/80188

El conjunto de instrucciones est� ampliado con respecto al del 8086/8088. Las nuevas instrucciones son:

PUSHA: Almacena los registros de uso general en la pila, en el siguiente orden: AX, CX, DX, BX, SP, BP, SI, DI.

POPA: Extrae los registros de uso general de la pila, retir�ndolos en el sentido inverso a PUSHA (pero descarta la imagen de SP).

PUSH inmed: Ingresa un valor inmediato a la pila.

INSB: Operaci�n: ES:[DI] <- Port DX (Un byte), DI<-DI+1 (si DF=0) o DI<-DI-1 (si DF=1).

INSW: Operaci�n: ES:[DI] <- Port DX (Dos bytes), DI<-DI+2 (si DF=0) o DI<-DI-2 (si DF=1).

OUTSB: Operaci�n: Port DX <- DS:[SI] (Un byte), SI<-SI+1 (si DF=0) o SI<-SI-1 (si DF=1).

OUTSW: Operaci�n: Port DX <- DS:[SI] (Dos bytes), SI<-SI+2 (si DF=0) o SI<:-SI-2 (si DF=1).

Shift dest,inmed. Se puede especificar directamente (sin cargar primero el valor en el registro CL) la cantidad de bits del desplazamiento. Shift es una de las siguientes instrucciones: ROL, ROR, RCL, RCR, SHL, SAL, SHR, SAR.

IMUL reg16,inmed realiza reg16 <- reg16 * inmed

IMUL reg16,mem16,inmed reg16 <- mem16 * inmed

En los dos �ltimos casos el resultado debe entrar en 16 bits. Si se desea el resultado de 32 bits, debe utilizarse la versi�n que aparece en el conjunto de instrucciones del 8086/8088.

BOUND reg16,mem32. Verifica que el valor contenido en el registro se encuentre entre los dos valores indicados en la memoria (un valor est� dado por los dos primeros bytes, y el otro por los dos �ltimos). Si est� fuera de rango se ejecuta una interrupci�n interna de tipo 5. De esta manera se puede observar que BOUND es una instrucci�n de interrupci�n condicional, como INTO.

ENTER local_variables_size, nesting_level y LEAVE son instrucciones que sirven para facilitar a los compiladores de alto nivel la codificaci�n de subrutinas o procedimientos. Para ello utilizan la pila para almacenar los par�metros y las variables locales. Estos valores se acceden mediante direccionamiento indirecto usando el registro BP. Al principio de la subrutina se deber� indicar, mediante la instrucci�n ENTER, el tama�o total (en bytes) de las variables locales de la subrutina (local_variables_size) y cu�ntos punteros a variables locales (estos se acceder�n usando [BP-xxxx] donde xxxx es la posici�n relativa de la variable local) y par�metros (los valores que se almacenaban en el registro BP) de subrutinas de nivel superior se necesitan ver (nesting_level) (en general, este valor debe ser cero) (en [BP] est� almacenado el puntero a las variables locales y par�metros de la subrutina que llam� a la actual, en [BP+2] se obtienen los de la subrutina que llam� a la anterior (esto s�lo si nesting_level > 0), y as� sucesivamente. Al final de la subrutina, antes de la instrucci�n RET deber� haber una instrucci�n LEAVE. Cuando se usan estas instrucciones, el programa no debe manejar el registro BP.

Hay dos nuevas interrupciones internas en este microprocesador que se agregan a los del 8086/8088.

- Tipo 5 (BOUND): Ocurre cuando en la instrucci�n BOUND el registro est� fuera de rango.

- Tipo 6 (C�digo de operaci�n inv�lido): En procesadores anteriores, al ejecutar instrucciones no definidas en el manual del circuito integrado, el resultado es impredecible. En este microprocesador y los siguientes se ejecuta esta interrupci�n cuando el c�digo de operaci�n no corresponde a ninguna instrucci�n.

El 80186 y 80188 tienen las mismas capacidades, excepto que el 80186 trabaja con un bus de datos externo de 16 bits, mientras que el 80188 opera con ocho. Ambos procesadores operan con un bus de datos interno de 16 bits y generan un bus de direcciones de 20 bits para poder acceder a 220 = 1.048.576 bytes (1 MB).

Con lo que se pudo observar, es obvio que estos microprocesadores pueden reemplazar unos 30 circuitos integrados convencionales, con la consiguiente reducci�n de espacio f�sico, precio, y requerimientos de potencia, lo que permite utilizar fuentes de alimentaci�n m�s sencillas, con el consiguiente beneficio econ�mico. De esta manera, es posible encontrarlos en aplicaciones industriales y en algunas plaquetas que se conectan a las PC.

Con el avance de la tecnolog�a CMOS, era necesario un nuevo 80186. Por ello en 1987 apareci� la segunda generaci�n de la familia 80186/80188: los microprocesadores 80C186 y 80C188. El 80C186 es compatible pin a pin con el 80186, y agrega nuevas caracter�sticas: una unidad para preservar energ�a (disminuye el consumo del microprocesador cuando no se necesita utilizar todos los recursos que brinda), una unidad de control de refresco de memorias RAM din�micas y una interfaz directa al coprocesador matem�tico 80C187 (esto �ltimo no existe en el 80C188). La tecnolog�a CHMOS III utilizada (la misma que para el 80386) permite que el 80C186 corra al doble de velocidad que el 80186 (con el proceso de fabricaci�n HMOS).

En 1990 Intel puso en el mercado el 80C186Ex, con dise�o de 1 micr�n y velocidad de 25 MHz. Existen actualmente tres modelos: 80C186EA, 80C186EB y 80C186EC. El anterior 80C186 pas� a llamarse 80C186XL.

Nedstat Counter