Automatizacion de Maquinas Termicas
Automatizacion de Maquinas Termicas
Automatizacion de Maquinas Termicas
[Fecha]
PROFESOR:
ING. Gonzales Cisneros Ivan
CURSO:
Laboratorio de Circuitos Electrónicos II
TEMA:
Circuitos Integrados
ALUMNO:
2017
HISTORIA
El circuito Integrado (IC), es una pastilla o chip muy delgado en el que se encuentran una cantidad
enorme de dispositivos microelectrónicas interactuados, principalmente diodos y transistores,
además de componentes pasivos como resistencias o condensadores. El primer Circuito Integrado
fue desarrollado en 1958 por el Ingeniero Jack St. Clair Kilby, justo meses después de haber sido
contratado por la firma Texas Instruments. Los elementos más comunes de los equipos
electrónicos de la época eran los llamados “tubos de vacío”, las lámparas usadas en radio y
televisión y el transistor de germanio (Ge). En el verano de 1958 Jack Kilby se propuso cambiar
las cosas. Entonces concibió el primer circuito electrónico cuyos componentes, tanto los activos
como los pasivos, estuviesen dispuestos en un solo pedazo de material, semiconductor, que
ocupaba la mitad de espacio de un clip para sujetar papeles.
El 12 de septiembre de 1958, el
invento de Jack Kilby se probó con
éxito. El circuito estaba fabricado
sobre una pastilla cuadrada de
germanio (Ge), un elemento químico
metálico y cristalino, que medía seis
milímetros por lado y contenía
apenas un transistor, tres resistencias
y un condensador. El éxito de Kilby
supuso la entrada del mundo en la
microelectrónica. El aspecto del
circuito integrado era tan nimio, que
se ganó el apodo inglés que se le da a
las astillas, las briznas, los pedacitos de algo: chip.
En el año 2000 Jack Kilby fue galardonado con el Premio Nobel de Física por la contribución de
su invento al desarrollo de la tecnología de la información. Los circuitos integrados fueron
posibles gracias a descubrimientos experimentales que demostraron que los semiconductores
pueden realizar las funciones de los tubos de vacío o circuitos de varios transistores. La
integración de grandes cantidades de diminutos transistores en pequeños chips fue un enorme
avance sobre el ensamblaje manual de los tubos de vacío (válvulas) y circuitos utilizando
componentes discretos. La capacidad de producción masiva de circuitos integrados, con fiabilidad
y facilidad de agregarles complejidad, impuso la estandarización de los circuitos integrados en
lugar de diseños utilizando transistores que pronto dejaron obsoletas a las válvulas o tubos de
vacío.
Existen dos ventajas principales de los circuitos integrados sobre los circuitos
convencionales: coste y rendimiento. El bajo coste es debido a que los chips, con todos
sus componentes, son impresos como una sola pieza por fotolitografía y no construidos
por transistores de a uno por vez.
DENSIDAD
Durante el proceso de fabricación de los circuitos integrados se van acumulando los defectos,
de modo que cierto número de componentes del circuito final no funcionan correctamente.
Cuando el chip integra un número mayor de componentes, estos componentes defectuosos
disminuyen la proporción de chips funcionales. Es por ello que, en circuitos de memorias, por
ejemplo, donde existen millones de transistores, se fabrican más de los necesarios, de manera
que se puede variar la interconexión final para obtener la organización especificada.
FABRICACION
La fabricación de integrados a gran escala sigue, en la actualidad un procedimiento VLSI (Very
Large Scale Integration, Integración en escala muy grande, por sus siglas en inglés) partiendo
del Silicio como materia prima. Desarrollos recientes en tecnologías de aleación de Silicio-
Germanio (SiGe) y silicio, sometido a esfuerzo, refuerzan aún más la posición de los procesos de
fabricación que se basan en este elemento en la industria microelectrónica en los años
venideros.
El silicio puede ser refinado por
medio de técnicas bien establecidas
de purificación y crecimiento de
cristales. Este elemento químico
también exhibe propiedades físicas
apropiadas para la fabricación
de dispositivos activos con buenas
características eléctricas, además es
fácil de oxidar para formar un
excelente aislante como el dióxido
de silicio (SiO2). Este óxido es útil
para construir condensadores y
dispositivos MOSFET. También sirve
como barrera de protección contra
la difusión de impurezas
indeseables hacia el mineral adyacente de silicio de alta pureza. Esta propiedad de protección
del óxido de silicio permite que sus propiedades eléctricas sean fáciles de modificar en áreas
predefinidas. Por consiguiente, se pueden construir elementos activos y pasivos en la misma
pieza material (o sustrato). Entonces los componentes pueden interconectarse con capas de
metal (similares a las que se utilizan en las tarjetas de circuito impreso) para formar el llamado
circuito integrado monolítico, que es en esencia una pieza única de metal.
Pasos de fabricación:
Preparación de la oblea
El material inicial para los circuitos integrados modernos es el silicio de muy alta pureza, donde
adquiere la forma de un cilindro sólido de color gris acero de 10 a 30 cm de diámetro y puede
ser de 1 m a 2 m de longitud. Este cristal se rebana para producir obleas circulares de 400 μm a
600 μm de espesor, (1 μm es igual a 1×10-6 metros). Después, se alisa la pieza hasta obtener un
acabado de espejo, a partir de técnicas de pulimento químicas y mecánicas. Las propiedades
eléctricas y mecánicas de la oblea dependen de la orientación de los planos cristalinos,
concentración e impurezas existentes. Para aumentar la resistividad eléctrica del
semiconductor, se necesita alterar las propiedades eléctricas del silicio a partir de un proceso
conocido como dopaje. Una oblea de silicio tipo n excesivamente impurificado (baja resistividad)
sería designada como material n+, mientras que una región levemente impurificada se
designaría n-. aunque podría ser n+
Oxidación
Se refiere al proceso químico de reacción del silicio con el oxígeno para formar Dióxido de Silicio
(SiO2). Para acelerar dicha reacción se necesitan de hornos ultra limpios especiales de alta
temperatura. El Oxígeno que se utiliza en la reacción se introduce como un gas de alta pureza
(proceso de “oxidación seca”) o como vapor (“oxidación húmeda”). La Oxidación húmeda tiene
una mayor tasa de crecimiento, aunque la oxidación seca produce mejores características
eléctricas. Su constante dieléctrica es 3.9 y se le puede utilizar para fabricar excelentes
condensadores. El Dióxido de Silicio es una película delgada, transparente y su superficie es
altamente reflejante. Si se ilumina con luz blanca una oblea oxidada la interferencia constructiva
y destructiva hará que ciertos colores se reflejen y con base en el color de la superficie de la
oblea se puede deducir el espesor de la capa de Óxido.
Difusión
Es el proceso mediante el cual los átomos se mueven de una región de alta concentración a una
de baja a través del cristal semiconductor. En el proceso de manufactura la difusión es un
método mediante el cual se introducen átomos de impurezas en el Silicio para cambiar su
resistividad; por lo tanto, para acelerar el proceso de difusión de impurezas se realiza a altas
temperaturas (1000 a 1200 °C), esto para obtener el perfil de dopaje deseado. Las impurezas
más comunes utilizadas como contaminantes son el Boro (tipo p), el Fósforo (tipo n) y el Arsénico
(tipo n). Si la concentración de la impureza es excesivamente fuerte, la capa difundida también
puede utilizarse como conductor.
Implantación de iones
Es otro método que se utiliza para introducir átomos de impurezas en el cristal semiconductor.
Un implantador de iones produce iones del contaminante deseado, los acelera mediante un
campo eléctrico y les permite chocar contra la superficie del semiconductor. La cantidad de
iones que se implantan puede controlarse al variar la corriente del haz (flujo de iones). Este
proceso se utiliza normalmente cuando el control preciso del perfil del dopaje es esencial para
la operación del dispositivo.
Deposición por medio de vapor químico
Es un proceso mediante el cual gases o vapores se hacen reaccionar químicamente, lo cual
conduce a la formación de sólidos en un sustrato. Las propiedades de la capa de óxido que se
deposita por medio de vapor químico no son tan buenas como las de un óxido térmicamente
formado, pero es suficiente para que actúe como aislante térmico. La ventaja de una capa
depositada por vapor químico es que el óxido se deposita con rapidez y a una baja temperatura
(menos de 500°C).
Metalización
Su propósito es interconectar los diversos componentes (transistores, condensadores, etc.) para
formar el circuito integrado que se desea, implica la deposición inicial de un metal sobre la
superficie del Silicio. El espesor de la película del metal puede ser controlado por la duración de
la deposición electrónica, que normalmente es de 1 a 2 minutos.
Fotolitografía
Esta técnica es utilizada para definir la geometría de la superficie de los diversos componentes
de un circuito integrado. Para lograr la fotolitografía, primeramente, se debe recubrir la oblea
con una capa fotosensible llamada sustancia fotoendurecible que utiliza una técnica llamada “de
giro”; después de esto se utilizará una placa fotográfica con patrones dibujados para exponer de
forma selectiva la capa fotosensible a la iluminación ultravioleta. Las áreas opuestas se
ablandarán y podrán ser removidas con un químico, y de esta manera, producir con precisión
geometrías de superficies muy finas. La capa fotosensible puede utilizarse para proteger por
debajo los materiales contra el ataque químico en húmedo o contra el ataque químico de iones
reactivos. Este requerimiento impone restricciones mecánicas y ópticas muy críticas en el
equipo de fotolitografía.
Empacado
Una oblea de Silicio puede contener varios cientos de circuitos o chips terminados, cada chip
puede contener de 10 o más transistores en un área rectangular, típicamente entre 1 mm y 10
mm por lado. Después de haber probado los circuitos eléctricamente se separan unos de otros
(rebanándolos) y los buenos (“pastillas”) se montan en cápsulas (“soportes”). Normalmente se
utilizan alambres de oro para conectar las terminales del paquete al patrón de metalización en
la pastilla; por último, se sella el paquete con plástico o resina epódica al vacío o en una
atmósfera inerte.
Circuito híbrido de capa gruesa: Se apartan bastante de los circuitos monolíticos. De hecho,
suelen contener circuitos monolíticos sin cápsula
(dices), transistores, diodos, etc., sobre un sustrato
dieléctrico, interconectados con pistas conductoras.
Las resistencias se depositan por serigrafía y se ajustan
haciéndoles cortes con láser. Todo ello se encapsula,
tanto en cápsulas plásticas como metálicas,
dependiendo de la disipación de potencia que
necesiten. En muchos casos, la cápsula no está
“moldeada”, sino que simplemente consiste en una resina epoxi que protege el circuito. En el
mercado se encuentran circuitos híbridos para módulos de RF, fuentes de alimentación, circuitos
de encendido para automóvil, etc.
Los circuitos integrados, a menudo llamado semiconductores, chips
de circuitos integrados o simplemente IC (por sus siglas en inglés), se dividen en
numerosas categorías o tipos. Las principales organizaciones de comercio de
semiconductores y empresas de investigación de mercados usan estas clasificaciones
para informar sobre la salud de los distintos segmentos del mercado de chips. Aunque
existen muchas clasificaciones, las tres clasificaciones principales son circuitos
integrados analógicos, digitales y de señal mixta.
El sistema booleano utilizado se centra en dos números: 0 y 1. Por otro lado, el sistema de base
10, el sistema de numeración que aprendes en la escuela primaria, se basa en 10 números: 0, 1,
3, 4, 5, 6, 7, 8 y 9.
Existen ciertos límites físicos y económicos al desarrollo de los circuitos integrados. Son barreras
que se van alejando al mejorar la tecnología, pero no desaparecen. Las principales son:
Disipación de potencia-Evacuación del calor: Los circuitos electrónicos disipan
potencia. Cuando el número de componentes integrados en un volumen dado crece, las
exigencias en cuanto a disipación de esta potencia, también crecen, calentando el
sustrato y degradando el comportamiento del dispositivo. Además, en muchos casos es
un comportamiento regenerativo, de modo que cuanto mayor sea la temperatura, más
calor producen, fenómeno que se suele llamar “embalamiento térmico” y como
consecuencia, el llamado “efecto avalancha”, y que, si no se evita, llega a destruir el
dispositivo. Los amplificadores de audio y los reguladores de tensión son proclives a este
fenómeno, por lo que suelen incorporar “protecciones térmicas”.
Los circuitos de potencia, evidentemente, son los que más energía deben disipar. Para ello su
cápsula contiene partes metálicas, en contacto con la parte inferior del chip, que sirven de
conducto térmico para transferir el calor del chip al disipador o al ambiente. La reducción de
resistividad térmica de este conducto, así como de las nuevas cápsulas de compuestos de
silicona, permiten mayores disipaciones con cápsulas más pequeñas. Los circuitos digitales
resuelven el problema reduciendo la tensión de alimentación y utilizando tecnologías de bajo
consumo, como TTL o CMOS. Aun así, en los circuitos con más densidad de integración y
elevadas velocidades, la disipación es uno de los mayores problemas, llegándose a utilizar
experimentalmente ciertos tipos de criostatos. Precisamente la alta resistividad térmica del
arseniuro de galio es su talón de Aquiles para realizar circuitos digitales con él.
Límites en los componentes: Los componentes disponibles para integrar tienen ciertas
limitaciones, que difieren de las de sus contrapartidas discretas:
-Resistencias. Son indeseables por necesitar una gran cantidad de superficie. Por ello sólo se
usan valores reducidos y, en tecnologías digitales, se eliminan casi totalmente.
-Condensadores. Sólo son posibles valores muy reducidos y a costa de mucha superficie. Como
ejemplo, en el amplificador operacional uA741, el condensador de estabilización viene a ocupar
un cuarto del chip.
-Bobinas. Sólo se usan en circuitos de radiofrecuencia, siendo híbridos muchas veces. En general
no se integran. Los circuitos más usados son los resonantes (bobina-condensador; bien en serie
o en paralelo), que actualmente son sustituidos por cristales de cuarzo
FAMILIAS
Tiene un retraso de propagación típico de 33 ns, una potencia de consumo por puerta de 1
mW y una frecuencia máxima de 3 MHz de funcionamiento para los flip-flop. Su empleo se
especializa en aplicaciones de bajo consumo y mínima disipación.
Los parámetros típicos de esta subfamilia son: retraso en la propagación por puerta de 6 ns,
consumo de 22 mW por puerta y frecuencia operativa máxima de flip-flop de 50 MHz.
El circuito TTI, Schottky ha sido uno de los más recientes desarrollos y constituye el más rápido
de las subfamilias TTL, aproximándose su velocidad a la familia lógica ECL. Se caracterizan por
su rapidez, ya que no almacenan cargas y porque son muy sencillos de fabricar.
El circuito es similar al TTL de alta velocidad, pero la base de cada transistor está conectada al
colector a través de un diodo de Schottky. El diodo actúa como desviador de] exceso de
corriente de base cuando el transistor se activa, y guarda una carga almacenada, evitando la
saturación de los transistores. La ausencia de-una carga almacenada reduce el tiempo del
cambio del transistor y aumenta la velocidad del circuito. La subfamilia Schottky tiene una
propagación típica de 3 ns, un consumo de 19 mW y una frecuencia máxima de flip-flop de 125
MHz.
El circuito TTL Schottky de baja potencia es el Uiás reciente de la familia TTL y con él se ha
intentado llegar a un compromiso entre la velocidad y la potencia consumida.
Tiene una propagación típica de 10 ns (igual que la TTL estándar) y un consumo por puerta de
sólo 2 mW, con una frecuencia máxima de flip-flop de 35 MHz
Tipos de salida
Three State Logic:
Permite un puerto de salida para asumir una alta impedancia de estado además de los niveles
lógicos 0 y 1, eliminando de forma eficaz la salida del circuito.
Las salidas de tres estados son implementadas en muchos registros, bus drivers, y flip-flops en
las series 7400 y 4000 tan bien como en otros tipos, pero internamente también en diversos
circuitos integrados. Otros típicos usos son buses externos e internos en microprocesadores,
memorias de computadora y periféricos.
Open Colector:
Tótem Pole:
La salida Tótem pole (transistores apilados) es una salida típica de la familia TTL y que tiene como
característica la baja disipación que generan.
El funcionamiento se basa en que para generar un nivel bajo conduce el transistor inferior T2 de
la figura y en el caso de un nivel alto, conduce el transistor superior T1.
Aquí podemos observar los tres valores posibles de una salida Tótem Pole:
Nivel bajo “0”: Cuando activamos la base del transistor T2 con un “1” lógico y no
polarizar la de T1.
Nivel bajo “1”: Cuando activamos la base del transistor T1 con un “1” lógico y no
polarizar la de T2.
Nivel de Alta impedancia, flotante o inactivo: En este estado no hay información lógica
en la salida. Los transistores T1 y T2 no se polarizan, y esto provoca que en las uniones
emisor y colector de los dos transistores no circule corriente. La salida queda flotante y
conectada a otros circuitos queda como si no estuviera.
CMOS
Historia
La tecnología CMOS fue desarrollada por Wanlass y Sah, de Fairchild Semiconductor, a
principios de los años 1960. Sin embargo, su introducción comercial se debe a RCA, con su
famosa familia lógica CD4000.
Posteriormente, la introducción de un búfer y mejoras en el proceso de oxidación
local condujeron a la introducción de la serie 4000B, de gran éxito debido a su bajo consumo
(prácticamente cero, en condiciones estáticas) y gran margen de alimentación (de 3 a 18 V).
RCA también fabricó LSI en esta tecnología, como su familia COSMAC de amplia aceptación en
determinados sectores, a pesar de ser un producto caro, debido a la mayor dificultad de
fabricación frente a dispositivos NMOS.
Características:
Series CMOS:
Existen varias series en la familia CMOS de circuitos integrados digitales, estudiaremos las
principales características de cada una.
Series 4000/14000
Las primeras series CMOS fueron la serie 4000, que fue introducida por RCA y la serie14000 por
Motorola. La serie original es la 4000A; la 4000B representa mejora con respecto a la primera y
tiene mayor capacidad de corriente en sus salidas. A pesar de la aparición de la nueva serie
CMOS, las series 4000 siguen teniendo uso muy difundido. La serie 4000A es la línea más usada
de Circuitos Integrados digitales CMOS, contiene algunas funciones disponibles en la serie TTL
7400 y está en expansión constante. Algunas características más importantes de
esta familia lógica son:
a) La disipación de potencia de estado estático de los circuitos lógicos CMOS es muy baja.
b) Los niveles lógicos de voltaje CMOS son 0 V para 0 lógico y VDD para 1 lógico. El suministro
VDD puede estar en el rango 3 V a 15 V para la serie 4000. La velocidad de conmutación de la
familia CMOS 4000A varía con el voltaje de la fuente. (Consultar el apartado de los niveles de
voltaje).c) Todas las entradas CMOS deben estar conectadas a algún nivel de voltaje.
Serie 74C
Esta serie CMOS su característica principal es que es compatible terminal por terminal
y función por función, con los dispositivos TTL que tienen el mismo número (muchas de las
funciones TTL, aunque no todas, también se encuentran en esta serie CMOS). Esto hace posible
remplazar algunos circuitos TTL por un diseño equivalente CMOS. Por ejemplo, 74C74 contiene
dos flip-flops tipo D disparados por flanco y tiene la misma configuración de terminales que el
CI TTL 7474, que también ofrece dos flip-flops tipo D disparados por flanco. El resto de las
características son iguales a la serie 74C.
Las series HC/ HCT tienen como característica principal su alta velocidad.
Esta es una versión mejor de la serie 74C. La principal mejora radica en un aumento de diez
veces en la velocidad de conmutación (comparable con la de los dispositivos de la serie 74LS de
TIL). Otra mejora es una mayor capacidad de corriente en las salidas. La serie 74HC son los CMOS
de alta velocidad, tienen un aumento de 10 veces la velocidad de conmutación. La serie 74HCT
es también de alta velocidad, y también es compatible en lo que respecta a los voltajes con los
dispositivos TTL.
Serie 74HCT
Esta serie también es una serie CMOS de alta velocidad, y está diseñada para ser compatible en
lo que respecta a los voltajes con los dispositivos TTL, es decir, las entradas pueden provenir de
salidas TTL (esto no es cierto para las demás series CMOS.)
Ventajas:
La familia lógica tiene una serie de ventajas que la hacen superior a otras en la fabricación de
circuitos integrados digitales:
Desventajas:
Algunos de los inconvenientes son los siguientes:
Debido al carácter capacitivo de los transistores MOSFET, y al hecho de que estos son
empleados por duplicado en parejas nMOS-pMOS, la velocidad de los circuitos CMOS es
comparativamente menor que la de otras familias lógicas.
Son vulnerables a latch-up.
Según se va reduciendo el tamaño de los transistores, las corrientes parásitas empiezan a
ser comparables a las corrientes dinámicas (debidas a la conmutación de los dispositivos).
• Los circuitos CMOS no drenan tanta potencia como los TTL en los períodos de inactividad. Sin
embargo, el consumo de potencia de los CMOS se incrementa más rápidamente que los TTL al
aumentar la velocidad del reloj. Un menor consumo de corriente requiere menor distribución
de la fuente de alimentación, teniendo como producto un diseño más sencillo y barato.
• Debido a que los tiempos de subida y bajada son mayores, la transmisión de las señales
digitales resulta más sencilla y barata con los chips CMOS.
• Los componentes CMOS son más susceptibles a daños por descargas electrostáticas con
respecto a los componentes TTL.
EL MICROPROCESADOR Z-80
Qué es un microprocesador
Un ordenador es una máquina fundamentalmente secuencial. Esto quiere decir que realiza sus tareas
una detrás de otra, siguiendo el orden en el que están las instrucciones para realizarlas.
Sus componentes básicos serán, por tanto, un lugar donde almacenar las instrucciones y
datos (Memoria) y un elemento encargado de ejecutar los procesos indicados por esas
instrucciones (Unidad Central de Proceso o CPU).
La CPU debe incluir todos los componentes necesarios para leer la memoria, decodificar las
instrucciones y ejecutar cálculos aritméticos y lógicos. En los ordenadores de pequeño tamaño (minis
y micros), la CPU está integrada dentro de un solo chip de silicio, a este chip se le conoce por el
nombre de microprocesador.
Registros
Los registros constituyen una especie de pequeña memoria interna al microprocesador. El Z-80 tiene
registros de 8 y 16 bits, si bien los de 8 bits se pueden agrupar de 2 en 2 para formar uno de 16 bits.
Todas las operaciones que realiza el Z-80 se hacen entre números contenidos en los registros, o bien,
entre un registro y una posición de memoria; por eso se dice que el Z-80 es un microprocesador
orientado hacia los registros. La posibilidad de agrupar dos registros de 8 bits para formar uno de 16,
permite al Z-80 realizar operaciones de 16 bits a pesar de ser un microprocesador de 8 bits.
El Z-80 tiene, en total, 18 registros de 8 bits y 4 registros de 16 bits. Algunos son de uso general y
otros tienen asignadas funciones específicas.
Como se ve, los registros cumplen en Código Máquina una función similar a la de las variables en
Basic. La configuración de registros del Z-80.
Los cuatro registros especiales de 16 bits son: el Contador de programa (PC), el Puntero de pila (SP), el
registro índice "X" (IX) y el registro índice "Y" (IY). A continuación, vamos a verlos de uno en uno.
CONTADOR DE PROGRAMA
Es el registro que contiene la dirección de memoria desde donde hay que leer la instrucción en curso,
tras la ejecución el registro se incrementa para continuar con la siguiente, o se sustituye su valor por
otro si se ha de ejecutar un salto o una llamada a subrutina. En el momento de conectar el ordenador,
la señal de RESET pone este registro a "cero", por lo que la ejecución comienza desde la primera
dirección de memoria.
PUNTERO DE PILA
Una pila es una zona reservada de memoria cuyos datos están organizados como "último en entrar,
primero en salir" (LIFO: Last In First Out), y sirve para almacenar determinados datos, como, por
ejemplo, la dirección de retorno tras una llamada a subrutina. De una pila sólo se puede recuperar
cada vez el último dato que se ha introducido. El registro SP es el puntero de la Pila de
Máquina. Apunta siempre al último dato introducido, los datos que se introducen en la pila de
máquina tienen siempre dos bytes de longitud. Durante la rutina de inicialización, se carga este
registro con un valor (inmediatamente debajo de RAMTOP) y cada vez que se mete un dato en la pila,
el puntero (SP) se decremento dos veces (la pila se expande hacia abajo).
La existencia de una pila permite la ejecución de llamadas a subrutinas, cada vez que se llama a una
subrutina, se introduce en la pila el contenido actual del PC, se decremento dos veces el SP y se carga
el PC con la nueva dirección de la subrutina. Para retornar, se carga el PC con el contenido superior de
la pila y se incrementa dos veces el SP. Este sistema permite la anidación de subrutinas hasta el límite
de la memoria disponible para la pila.
Cuando se escribe un programa, hay que tener sumo cuidado para que la pila no crezca
indefinidamente, ya que destrozaría todos los datos almacenados en memoria, incluido el propio
programa. Por otro lado, hay que tener cuidado para recuperar de la pila todos los datos
almacenados durante una subrutina antes de intentar retornar, ya que de lo contrario habríamos
"corrompido" la pila y el retorno no sería posible.
Nuestros programas en C/M se llaman desde Basic como una subrutina (con la función USR) de forma
que para retornar a Basic mediante una instrucción RET, deberemos tener la pila en perfectas
condiciones. No obstante, el Sistema Operativo del Spectrum permite un retorno a Basic, incluso con
la pila "corrompida", mediante el uso de la instrucción RST 8 que se explicará más adelante.
El Sistema Operativo del Spectrum utiliza el registro IY como dirección de base para acceder a las
variables del sistema, por lo que deberemos tener sumo cuidado si utilizamos este registro en
nuestros programas.
El Z-80 utiliza el dato contenido en este registro como octeto de orden alto de la dirección a la que
deberá saltar cuando reciba una petición de interrupción enmascarable en "modo 2" (las
interrupciones del Z-80 se estudiarán más adelante en este mismo capítulo).
Como casi todos los lectores sabrán, el Spectrum utiliza memoria RAM dinámica, este tipo de
memoria tiene que ser leída y vuelta a escribir continuamente. El Z-80 utiliza este registro de 7 bits
como dirección para regenerar la memoria durante el tiempo de decodificación de cada instrucción.
Registros alternativos
El Z-80 tiene dos grupos de 8 registros de 8 bits cada uno, que pueden ser usados de forma
alternativa mediante una instrucción de intercambio de contenidos. Cada uno de estos grupos lleva
un acumulador, un indicador de estado y 6 registros de uso general.
ACUMULADOR "A"
El Acumulador recibe los resultados de todas las operaciones aritméticas y lógicas que realiza en
microprocesador que es, de hecho, el registro más usado del Z-80. Existen dos acumuladores, uno en
cada grupo de registros alternativos (ver FIGURA 2) que se denominan respectivamente A y A'.
Existen dos registros de estado, uno en cada grupo de registros alternativos, se denominan
respectivamente F y F'.
Cada grupo de registros alternativos tiene 6 registros de uso general que se denominan
respectivamente B, C, D, E, H, L y B', C', D', E', H', y L'. Pueden agruparse de dos en dos para formar los
registros BC, DE, HL y BC', DE' y HL'. Una instrucción de intercambio de contenidos, permite
seleccionar entre parejas de registros de uno u otro grupo.
En el Sistema Operativo del Spectrum, el registro "BC" actúa como un puente de comunicación con el
Basic, ya que cada vez que ejecutamos la función USR, lo que obtenemos como resultado es,
precisamente, el contenido del registro "BC" en el momento de retornar, lo que nos permitirá pasar
datos con facilidad desde Código Máquina a Basic.
Unidad Aritmética-Lógica
Desplazamiento
Comparación
Puesta a uno de bit
Puesta a cero de bit
Prueba de bit
AND
OR
OR exclusivo (EXOR)
Incremento
Decremento
Suma
Resta
Ajuste decimal
El desplazamiento consiste en una rotación, bit a bit, de un registro o una posición de memoria,
puede incluir el indicador de acarreo del registro F. El efecto de rotar a la izquierda es el de multiplicar
el número por 2, y el de rotarlo a la derecha es el de dividirlo por 2.
La comparación consiste en cotejar el acumulador con otro número y alterar los indicadores del
registro F de acuerdo con el resultado de la comparación, permaneciendo inalterado el contenido del
acumulador.
Probar un bit consiste en ver si es "uno" o "cero" y anotar el resultado en el indicador de cero del
registro F.
Registro de instrucciones
Buses
Para comunicarse con la memoria y los periféricos, el Z-80 utiliza una serie de líneas eléctricas
denominadas BUSES. Cada una de estas líneas se corresponde con una patilla del chip Z-80. Existen
tres buses:
Las tres patillas restantes hasta las 40 del chip son: la entrada de la señal de "reloj" (3,500,000
impulsos por segundo), la entrada de alimentación eléctrica (+5 voltios) y la conexión común a MASA.
Se dice que una entrada o salida está a nivel alto ("1") cuando su tensión con respecto a MASA es de
+5V. Y se dice que está a nivel bajo ("0") cuando su tensión con respecto a MASA es de 0V.
Cuando el nombre de una línea tiene una raya encima, indica que es activa a nivel bajo, si no, se
considera activa a nivel alto. Todas las salidas del Z-80 son Triestado, esto quiere decir que cuando no
se están utilizando permanecen en un estado de alta impedancia que tiene el mismo efecto que si
estuvieran desconectadas del circuito. A continuación, veremos una a una todas las señales eléctricas
del Z-80.
A0-A15
Constituyen un bus de direcciones que permite acceder a 65536 posiciones de memorias, o a 256
ports de entrada/salida. En las operaciones de entrada/salida, los port se direccionan con los ocho
bits inferiores del bus. Durante el tiempo de regeneración de memoria, los siete bits inferiores
contienen una dirección de regeneración.
D0-D7
Constituyen un bus de datos bidireccional que permite al microprocesador tanto enviar datos como
recibirlos. Se utiliza para el intercambio de datos con la memoria o con dispositivos de entrada/salida
(ports).
Salida M1 (Machine 1)
Se utiliza para indicar que el ciclo de máquina en curso es el de búsqueda de instrucción. También se
activa junto con IORQ para indicar un acuse de recibo a una petición de interrupción.
Se utiliza para indicar que el microprocesador desea acceder a un port de entrada/salida. También se
utiliza junto con M1 para indicar un acuse de recibo a una petición de interrupción.
Salida RD (Read)
Se utiliza para indicar que se desea leer una posición de memoria o un port de entrada/salida.
Salida WR (Write)
Se utiliza para indicar que se desea escribir en una posición de memoria o en un port de
entrada/salida.
Se utiliza para indicar que se está en un ciclo de regeneración de memoria, y la dirección presente en
los siete bits inferiores del bus de direcciones junto con la señal MREQ se deben usar para una lectura
de refresco de memoria.
Salida HALT
Se utiliza para indicar que el microprocesador ha ejecutado una instrucción "HALT" y está esperando
una petición de interrupción para atenderla. Durante este tiempo, se ejecuta continuamente la
instrucción NOP con el fin de mantener la lógica de regeneración de memoria.
Entrada WAIT
Esta señal y la anterior, tienen la finalidad de sincronizar el funcionamiento del microprocesador con
el de otros dispositivos.
Petición de interrupción no enmascarable, esta interrupción se acepta siempre (salvo que haya
presente una señal en BUSRQ y obliga al microprocesador a saltar a la dirección 0066h
independientemente del flip/flop de aceptación y del modo de interrupción seleccionado.
Entrada RESET
Esta entrada obliga al microprocesador a inicializarse, cargando todos los registros con "cero",
incluido el "PC", por lo que la ejecución comienza desde la posición de memoria "0000".
En el Spectrum, esta señal se produce cada vez que se conecta el ordenador, o cada vez que se pulsa
el botón de RESET en el Plus.
La utiliza el microprocesador para indicar el acuse de recibo a una petición de bus. Cuando se genera
esta señal, el microprocesador se haya totalmente desconectado de los buses de direcciones y datos,
con lo que no interfiere el acceso a memoria del dispositivo que ha pedido el bus.
El Z-80 como buen microprocesador que es, tiene varias posibilidades de interrupción que permiten
el acceso con distinta prioridad.
Se trata de la interrupción más usada en el Z-80 ya que permite definir el vector de interrupción, y lo
que es más importante, decidir por software si se atiende o no la petición.
Se denomina vector de interrupción a la dirección de memoria a que se salta para ejecutar la rutina de
servicio a la interrupción.
En el Z-80 existe un "mini registro" de un solo bit que se denomina flip/flop de aceptación de
interrupción. Si este registro está a "1", la petición de interrupción es aceptada, y si está a "0" es
ignorada. Cuando el flip/flop de aceptación está a "0", se dice que la interrupción está enmascarada.
Existen dos instrucciones en el Z-80 que nos permiten enmascarar o habilitar la interrupción, estas
interrupciones son: "DI" (Disable Interrupt) y "EI" (Enable Interrupt), se verán detalladamente cuando
se estudien las instrucciones de control de la CPU.
MODO 0
En este modo de interrupción, el microprocesador deja libre el bus de datos para permitir que el
dispositivo que ha silicitado la interrupción, inserte el código de operación correspondiente a una
instrucción que será ejecutada seguidamente por el microprocesador.
MODO 1
MODO 2
Es el modo de interrupción más complejo del Z-80, y el que deberemos utilizar para nuestros fines. En
este caso, el microprocesador responde de una forma bastante compleja que conviene analizar
detenidamente: primero coge el contenido del registro "I", lo considera como un octeto superior de
una dirección, el octeto inferior deberá suministrarlo el dispositivo que ha solicitado la interrupción
(si no lo suministra, se entiende que es FFh). Acto seguido, lee el número almacenado en esa
dirección y la siguiente, lo carga en el "PC", y continúa la ejecución desde ese punto.
Este modo de interrupción permite un salto indirecto a cualquier posición de memoria, hay que tener
en cuenta que en el Spectrum el octeto de orden bajo de la dirección será siempre FFh y, por tanto, la
lectura de la dirección a la que hay que saltar se producirá desde una posición de memoria cuya
dirección sea xxFFh, siendo xx el contenido del registro "I", que, por motivos evidentes, se
denomina Vector de página de interrupción.
Teniendo en cuenta que en el Spectrum se produce una petición de interrupción enmascarable cada
20 milisegundos, podemos desactivar la interrupción (con "DI") para que nuestros programas corran
más deprisa, o bien, utilizar la instrucción HALT para sincronizarnos con el barrido de la pantalla. Otra
posibilidad es cambiar a MODO 2 y utilizar un vector de interrupción que salte a una rutina nuestra,
con lo que ésta se ejecutará 50 veces por segundo.
Ciclos o tiempos
Para realizar las operaciones secuencialmente, el Z-80 necesita sincronizar todas sus señales internas
y externas y disponer, por tanto, de un patrón de tiempo. Es lo que se denomina: Reloj del
microprocesador.
El reloj del microprocesador está constituido por un oscilador electrónico controlado por un cristal de
cuarzo, que entrega tres millones y medio de impulsos por segundo (3.5 MHz). Estos impulsos se
introducen en el Z-80 a través de la patilla 6 denominada "RELOJ", y el microprocesador utiliza un
número determinado de estos impulsos para cada operación.
La primera versión del Z-80 no aceptaba señales de reloj superiores a 2.5 MHz.
En el Spectrum se ha utilizado una versión más moderna denominada Z-80A, que admite señales de
reloj de hasta 4 MHz, con lo que se consigue una mayor velocidad de ejecución.
En el Spectrum se ha utilizado una señal de reloj de 3.5 MHz en vez de los 4 tolerados, para evitar
llevar al microprocesador al límite de su frecuencia de trabajo, lo que podría dar lugar a errores.
Se denomina Ciclo de instrucción al tiempo durante el cual el microprocesador ejecuta una instrucción
completa.
TIEMPOS DE EJECUCION
Como el lector habrá deducido ya, es posible calcular el tiempo de ejecución de una determinada
rutina en C/M, a condición de conocer el número de ciclos de reloj que emplea cada una de sus
instrucciones.
En lo sucesivo, cada vez que veamos una determinada instrucción, indicaremos el número de ciclos
de reloj que emplea el microprocesador para ejecutarla, así como el número de veces que accede a
memoria (ciclos de memoria).
Como ejemplo, veamos lo que se tarda en cargar el registro "A" con un número. Podemos utilizar la
instrucción: LD A, #FF que carga el número 255 (FFh) en el acumulador, esta instrucción accede 2
veces a memoria (2 ciclos de memoria), una para buscar el código de operación (4 ciclos de reloj) y
otra para buscar el número que ha de cargar en "A" (3 ciclos de reloj); lo que hace un total de 7 ciclos
de reloj, es decir, unos 7 x 0.29 = 2 microsegundos. Este ejemplo ilustra la enorme velocidad del
código máquina, el microprocesador es capaz de cargar el acumulador medio millón de veces en un
segundo.
Supongamos que queremos sumar en el acumulado una lista de números, y usaremos el registro HL
para movernos a lo largo de esa lista, el bucle podría ser:
El tiempo de ejecución por cada pasada, sería de 25 ciclos de reló, es decir 7.14 microsegundos. Con
este bucle, nuestro ordenador podría sumar 140000 números por segundo. Por supuesto, este
pequeño bucle no es operativo, no existe condición de salida del bucle, por lo que el ordenador se
quedaría eternamente atrapado dentro de él, y, por otro lado, se produciría un rebosamiento en el
acumulador, ya que el resultado de las sumas excedería su capacidad, a menos que la mayor parte de
los números fueran ceros. La única finalidad de este ejemplo es mostrar la enorme velocidad de
ejecución del código máquina.
Para calcular el tiempo de ejecución de sus rutinas, sume los números de ciclos de reloj de cada
instrucción y multiplique por 0.29 para obtener el resultado aproximado en microsegundos.
Modos de direccionamiento
En la mayor parte de las operaciones, el Z-80 utiliza datos almacenados en sus registros o en
posiciones de memoria. Las formas posibles de indicarle la situación de estos datos, constituyen los
diversos modos de direccionamiento.
DIRECCIONAMIENTO INMEDIATO
En este modo de direccionamiento, el byte que sigue al código de operación en memoria, contiene el
operando.
CODIGO DE OPERACION
OPERANDO
un byte
Un ejemplo podría ser cargar el acumulador con una constante, donde la constante es el byte que
sigue al código de operación.
Es igual que el anterior, salvo que el operando ocupa dos bytes, el primer byte es el octeto de orden
bajo, y el segundo, el de orden alto.
CODIGO DE OPERACION
OPERANDO (LSB)
OPERANDO (MSB)
Un ejemplo podría ser la carga de un registro doble con una constante que, lógicamente ocuparía dos
bytes de memoria.
El Z-80 tiene unas instrucciones de salto rápido a una dirección de página cero. Hay ocho direcciones
posibles donde se colocan las rutinas de uso más frecuente, de esta forma se puede llamar a estas
rutinas empleando un solo byte.
En el Spectrum, estas direcciones se encuentran utilizadas por la ROM para las rutinas de más uso, y
son las siguientes:
En este caso, el byte que sigue al código de operación se emplea como un entero en complemento a
dos, que se suma a la dirección actual almacenada en el «PC».
CODIGO DE OPERACION
OPERANDO
entero en complemento a 2
Este modo de direccionamiento permite efectuar saltos relativos, con lo que las rutinas pueden
ser reubicables, es decir, correr de igual forma en cualquier dirección de memoria.
DIRECCIONAMIENTO INDEXADO
En esta forma de direccionamiento, el byte de datos sigue al código de operación contiene un entero
de desplazamiento en complemento a dos, que se suma al contenido actual del registro índice
correspondiente, para apuntar a una dirección de memoria. El código de operación tiene siempre dos
bytes, el primer byte es «DDh» siempre que se utilice el registro «IX» y «FDh» siempre que se utilice
el «IY».
DD o FD
índice usado
CODIGO DE OPERACION
un byte
DESPLAZAMIENTO
DIRECCIONAMIENTO DE REGISTROS
En muchos de los códigos de operación, hay ciertos bits que especifican a qué registro se refiere la
instrucción, permaneciendo inalterados el resto de bits. Un ejemplo podría ser la instrucción:
LD C,B
DIRECCIONAMIENTO IMPLICITO
En este caso, la situación de los datos está implícita en el código de operación. Por ejemplo, en las
operaciones aritméticas de 8 bits, el registro «A&rqauo; (acumulador) es siempre el que recibe los
resultados.
DIRECCIONAMIENTO INDIRECTO
LD A, (HL)
Que significa: «carga el registro A con el contenido de la dirección de memoria apuntada por el
registro HL». Es este caso el registro HL se utiliza como puntero para «apuntar» a una dirección de
memoria, siempre que un registro se utilice como puntero, su nombre aparecerá, el en código
simbólico, encerrado entre paréntesis, significando: «donde apunta el contenido de».
También se puede utilizar como puntero, una constante de dos bytes, ensamblada a continuación del
código objeto, por ejemplo:
LD A, (5C37)
Que significa: «carga el registro A con el contenido de la dirección de memoria 5C37h». Cuando
hagamos esto en Assembler, normalmente utilizaremos una «etiqueta» de la siguiente forma:
LD A, (ETIQUE)
ETIQUE EQU #5C37
De esta forma, solo tendremos que definir la etiqueta una vez, pero podremos usarla todas las veces
que queramos sin tener que recordar de memoria los números. Los nombres de variables del Sistema
en el Spectrum son, precisamente, etiquetas del código fuente del Sistema Operativo. El uso de las
etiquetas se verá en profundidad cuando estudiemos el manejo de ensambladores.
En algunos casos, el direccionamiento indirecto se utiliza para especificar operando de 16 bits (dos
bytes), en este caso, el puntero apunta al byte de menos peso, siendo el de más peso el siguiente. Por
ejemplo:
LD HL, (5C37)
Que significa: «carga el registro L con el contenido de la posición de memoria 5C37h, y el registro H
con el contenido de la posición de memoria siguiente (5C38h)».
DIRECCIONAMIENTO DE BITS
Un gran número de instrucciones del Z-80 trabajan directamente sobre bits individuales de registros o
posiciones de memoria. En este caso, se utiliza uno de los métodos de direccionamiento anteriores
para indicar el registro o posición de memoria en concreto, y tres bits del código de operación para
indicar a qué bit de ese registro o posición de memoria nos referimos.
MODOS DE DIRECCIONAMIENTO COMBINADOS
Muchas instrucciones incluyen más de un operando, en estos casos, se pueden combinar más de un
modo de direccionamiento dentro de una misma instrucción, por ejemplo:
LD (IX+7), A
Que utiliza direccionamiento indexado para el destino y direccionamiento inmediato para la fuente.
Significa: «carga en la posición de memoria apuntada por el contenido del registro IX más 7, el
contenido del registro A (acumulador)».
El Z-80 puede ejecutar un gran número de instrucciones, podemos ordenarlas en los siguientes
grupos:
CARGA E INTERCAMBIO
Permiten desplazar datos entre registros, o entre estos y posiciones de memoria. También se puede
intercambiar el contenido de dos registros, o el de dos grupos alternativos.
ARITMETICAS Y LOGICAS
Se trata de las más poderosas instrucciones del Z-80, es posible transferir todo un bloque de memoria
con una sola instrucción; también es posible examinar todo un bloque de memoria para buscar un
determinado dato de un byte.
ROTACION Y DESPLAZAMIENTO
Permiten la rotación bit a bit del dato almacenado en un registro o una posición de memoria, las
rotaciones pueden incluir el indicador de acarreo del registro «F».
MANIPULACION DE BITS
Permiten tratar de forma independiente cada bit de un registro o una posición de memoria, es
posible poner un bit a «1», ponerlo a «0» o examinar si es «1» o «0».
Permite alterar la secuencia normar del programa para saltar a otro lugar de la memoria o ejecutar
una subrutina. También es posible retornar desde una subrutina al punto donde se la llamó.
ENTRADA Y SALIDA
Permiten leer y escribir datos en los ports de entrada/salida, con lo cual se comunica el ordenador
con el mundo exterior.
CONTROL CPU
En los capítulos posteriores de este curso, se irán viendo detenidamente, una a una, todas las
instrucciones de cada uno de estos grupos y la forma de utilizarlas en nuestros programas
Antes, en el capítulo siguiente, se verán los conceptos básicos de la programación en Assembler, y las
formas de almacenar y ejecutar nuestros programas en Código Máquina.