ICEI Instituto de Capacitacion en Electronica e Informatica 1 CaptuIo 2 Estructura interna de Ia famiIia MCS-51 FamiIia MCS-51 La familia de microcontroladores MCS-51 la componen los dispositivos listados en la figura 1.1, los cuales estan basados en la arquitectura interna que se mostrara en el apartado siguiente. El 8051 original se construyo con la tecnologia HMOS I . La tecnologia que hoy en dia se utiliza para la construccion de estos dispositivos es la CHMOSIII, estando referencia da como 80C51FA. Los diferentes microcontroladores que conforman la familia se designaran como 8XC51FA, 8XC51FB, 8XC51FC, 8XL51FA, 8Xl51FB, 8XL51FC, y sus versiones realzadas 8XC52, 8XC54, 8XC58 las cuales aaden mayores prestaciones para aplicaciones tales como control de motores, en las que requieran salidas PWM, I/O de alta velocidad y mayor numero de elementos contadores / temporizadores El rango de frecuencia de estos dispositivos va de 3 MHz a 20 Mhz, operando con memoria de programa y datos externas; y hasta 24 Mhz cuando opera con memoria de Programa y datos internas. Existe una version a 3V denominada 8XL51FX, la cual opera en el rango de 2.7V a 3.6V y un rango de frecuencia de 3.5 MHz a 20 Mhz. Fig. 1.1.1 Miembros de la familia MCS-51. ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 2 Las caracteristicas generales de la familia MCS-51 son: - CPU de 8 bits. - Oscilador y circuiteria de reloj incorporados. - 32 lineas de entrad/salida. - Posibilidad de direccionar 64 Kbytes de memoria de programa externa. - Posibilidad de direccionar 64 Kbytes de memoria RAM externa. - Dos temporizadores/contadores de 16 bit (tres en el 8052/8032). - Cinco fuentes de generacion de interrupciones (6 en el 8052/8032), con dos niveles de prioridad. - Port serie full duplex. - Procesador booleano. PatiIIas de MCS-51 Los chips de la familia MCS-51 se sirven en un encapsulado industrial estandar de 40 pins Dual In-Line. Los pins de entrada/salida se muestran en la figura siguiente y a continuacion se hace una descripcion de ellos. Fig. 1.2.1 Pins de los chips de la familia MCS-51 Nota: Los pins con * solo estan presentes en el 8052. N VCC Entrada de la tension de alimentacion . 5V DC. N VSS Conexion de masa del circuito. ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 3 N PORT 0 Este es un port de entrada/salida de 8 bits bidireccional y en drenador abierto. Como port de salida, cada pin puede gobernar 8 entradas TTL del tipo LS. Los pins del port que tienen un 1 escrito en ellos quedan flotantes, y en este estado, se pueden utilizar como entradas de alta impedancia. Durante los accesos a la Memoria externa de Programa y a la Memoria RAM externa, este port tiene multiplexados la parte baja del bus de direcciones y el bus de datos. Cuando sucede esto, este utiliza resistencias de carga internas cuando emite unos y puede gobernar las 8 entradas TTL del tipo LS. El Port 0 tambien es el encargado de recibir la informacion durante la programacion de aquellos chips que contienen una EPROM interna, y saca la informacion durante la verificacion de la programacion de aquellos chips que contienen una ROM o EPROM. Durante la verificacion de la programacion, es necesario colocar resistencias de carga externas. N PORT 1 El Port 1 es un port de entrada/salida bidireccional de 8 bits conresistencias de carga interna. Los buffers de salida de cada pin de este port pueden gobernar 4 entradas TTL del tipo LS. Los pins de dicho port que tienen unos escritos en el, son puestos a 1 mediante las resistencias de carga internas, y en este estado, pueden utilizarse como entradas. Utilizados como entradas, si los pins de este port se ponen a 0 exteriormente, nos entregaran corriente debido a dichas resistencias de carga. El Port 1 tambien recibe el byte bajo de direcciones durante el proceso de programacion de los chips que contienen EPROM y durante la verificacion de la programacion en aquellos chips que tienen ROM o EPROM internas. En los chips 8032AH y 8052AH, los pins P1.0 y P1.1 tambien sirven para las funciones respectivas de T2 y T2EX. N PORT 2 El Port 2 es un port de entrada/salida bidireccional de 8 bits con resistencias de carga internas. Los buffers de salida de cada pin de este port pueden gobernar 4 entradas TTL del tipo LS. Los pins de dicho port que tienen unos escritos en el, son puestos a 1 mediante las resistencias de carga internas, y en este estado, pueden utilizarse como entradas. Utilizados como entradas, si los pins de este port se ponen a 0 exteriormente, nos entregaran corriente debido a dichas resistencias de carga. Este port nos suministra el byte alto de direcciones durante los ciclos de busqueda de instruccion en la Memoria de Programa externa y durante los accesos a la Memoria de Datos externa (RAM) que utilicen una direccion de 16 bits (MOVX DPTR). En esta aplicacion, este utiliza resistencias de carga internas cuando saca unos por los pins. Durante los accesos a la Memoria de Datos externa que utilicen direcciones de 8 bits (MOVX Ri), el Port 2 saca el contenido del Registro de Funcion Especial P2. El Port 2 tambien recibe el byte alto de direcciones durante la programacion de los chips que contienen una EPROM y durante la verificacion de la programacion de aquellos chips que contienen una ROM o EPROM internas. N PORT 3 El Port 3 es un port de entrada/salida bidireccional de 8 bits con resistencias de carga internas. Los buffers de salida de cada pin de este port pueden gobernar 4 entradas TTL del tipo LS. Los pins de dicho port que tienen unos escritos en el, son puestos a 1 mediante las ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 4 resistencias de carga internas, y en este estado, pueden utilizarse como entradas. Utilizados como entradas, si los pins de este port se ponen a 0 exteriormente, nos entregaran corriente debido a dichas resistencias de carga. EL Port 3 tambien se utiliza para diversas funciones especiales de la familia MCS-51, tal como se indica en la figura 1.2.2. Fig. 1.2.2 Funciones alternativas del Port 3 N RST Entrada de reset. Si el oscilador esta funcionando y en este pin aparece un impulso a nivel alto que se mantenga durante dos ciclos maquina, el dispositivo se resetea. Fig. 1.2.3 Contenido de los SFR despues de un reset Un reset configura los pins ALE` y PSEN` como entradas. La RAM interna no queda afectada por un reset y los Registros de Funciones Especiales quedan con los valores indicados en la figura 1.2.3. ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 5 N ALE/PROG` Pulso de salida para latchear el byte bajo de la direccion durante un acceso a memoria externa. Esta seal puede gobernar 8 entradas TTL del tipo LS. Este pin tambien es la entrada de impulsos de programacion cuando se estan programando dispositivos que contienen una EPROM. En condiciones normales, esta seal se emite constantemente a razon de 1/6 de la frecuencia del oscilador, por tanto se puede utilizar para temporizaciones externas o como reloj. Sin embargo, tengase en cuenta que en cada acceso a la Memoria de Datos externa (RAM), se omite dicha seal. N PSEN` Es la seal que se utiliza para leer la Memoria de Programa externa. PSEN puede gobernar 8 entradas TTL del tipo LS. Cuando un dispositivo esta ejecutando un programa desde la Memoria de Programa externa, PSEN se activa dos veces por cada ciclo maquina, a excepcion de cuando se accede a Memoria de Datos externa (RAM), que entonces se omite. N EA`/VPP Este pin debe mantenerse a 0 mediante hardware para permitir que cualquier dispositivo de la familia MCS-51 pueda ejecutar un programa en la Memoria de Programa externa desde la posicion 0 a la 0FFFH (0 a 1FFFH en el 8032AH y en el 8052AH). Notese, sin embargo, que si en los dispositivos con EPROM interna se programa el bit de Seguridad, estos no podran ejecutar programa de la Memoria de Programa externa. A este pin debera conectarse la tension de programacion de 21V (VPP) durante la programacion de los dispositivos con EPROM interna. N XTAL1 Entrada al amplificador inversor del oscilador. N XTAL2 Salida del amplificador inversor del oscilador. ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 6 Arquitectura interna Fig. 1.3.1 Diagrama de bloques de la familia MCS-51. Organizacin de Ia memoria El 8051 tiene dos espacios diferenciados para el direccionamiento de la Memoria de Programa (ROM o EPROM) y para la Memoria de Datos (RAM). Los 4 kbytes inferiores (8 kbytes para el 8052), pueden ser residentes en el chip. La Memoria de Datos puede consistir en 64 kbytes de RAM externa, a los cuales se le pueden sumar los 128 bytes (256 para el 8052) de RAM interna mas el numero de Registros de Funciones Especiales. En la figura 1.3.1 podemos ver la organizacion de la RAM interna,con el detalle de las posiciones de memoria que se pueden direccionarbit a bit. ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 7 Fig. 1.3.1 RAM interna v posiciones direccionables bit a bit El bloque de memoria que se describe en la figura anterior es la memoria RAM interna que puede utilizar el usuario. En ella se destacan 4 bancos de 8 registros de 8 bits cada uno, los cuales se pueden escoger mediante el registro PSW, 16 posiciones de memoria RAM que se pueden utilizar como posiciones normales o como bits direccionables independientemente, segun el valor que se indica en cada uno de ellos, y el resto de posiciones hasta la 128 (7FH) vienen direccionadas como memoria RAM normal. ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 8 Organizacin de Ios registros de funciones especiaIes A continuacion, en la figura 1.3.2 podemos observar la disposicion de los Registros de Funciones Especiales (SFR), sus direcciones y en aquellos que son direccionables bit a bit, la direccion de cada uno de sus bits. ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 9 Nota: Los registros con * solo estan presentes en el 8052. Fig. 1.3.2 Organi:acion de los SFR v sus direcciones A continuacion se describen brevemente dichos registros. Cuando se traten los apartados que los afectan, se dara una descripcion mas detallada de la funcion de cada uno de sus bits y su programacion. N ACC o A Este es el registro Acumulador. Normalmente, en todos los nemonicos, cuando nos referimos al Acumulador lo haremos con la letra A. N B Registro B. Este registro se utiliza durante las operaciones de multiplicacion y division. Para las demas instrucciones, se puede utilizar como un registro de proposito general. N PSW Este registro contiene la informacion de estado del programa, como podemos observar en la siguiente figura: Fig. 1.3.3 Registro de Estado de Programa. Veamos el significado de cada uno de estos bits: - CY : Flag de acarreo. - AC : Flag de acarreo auxiliar (para operaciones BCD). - F0 : Flag de cero (utilizable por el usuario para uso general). - RS1 y RS0 : Bits de control 1 y 0 para seleccionar el banco de registros con que queremos trabajar. El banco con que trabajaremos dependera de las siguientes combinaciones: Fig. 1.3.4 Seleccion de los Bancos de Registros. - OV : Flag de desbordamiento. - --- : Reservado. - P : Flag de paridad. Puesto a uno o a cero por hardware para indicar que el Acumulador existe un numero impar/par de uno. ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 10 N SP Es el registro de Stack Pointer y tiene 8 bits. Se incrementa antes de que un dato sea guardado en el Stack durante la ejecucion de las instrucciones PUSH y CALL. Debido a que el Stack puede residir en cualquier lugar de la RAM interna, el Stack pointer se inicializa con el valor 07H despues de un reset, y por tanto el Stack empieza en la posicion 08H. N DPTR El registro Puntero de Datos esta dividido en dos partes, un byte alto (DPH) y un byte bajo (DPL). Su mision es la de guardar una direccion de 16 bits. Se puede utilizar como un registro de 16 bits o como dos registros independientes de 8 bits. N PORTS 0 a 3 P0, P1, P2 y P3 son los latch de los SFR de los Ports 0, 1, 2 y 3 respectivamente. N SBUF El Buffer de Datos Serie actua como dos registros independientes, el buffer de transmision y el buffer de recepcion. Cuando se carga un dato en el SBUF, este se convierte en buffer de transmision (cargando un dato en el SBUF se inicializa la transmision). Cuando se lee un dato del SBUF este pasa a ser el buffer de recepcion. N REGISTROS DEL TIMER Los pares de registros (TH0, TL0), (TH1, TL1) y (TH2, TL2) son registros contadores de 16 bits de los temporizadores / contadores 0, 1 y 2 respectivamente. N RCAP2H, RCAP2L Este par de registros son los registros de captura del Timer 2 en el 'modo de captura. En este modo, en respuesta a una transicion en el pin T2EX del 8052, el valor de TH2 y TL2 se copia en RCAP2H y RCAP2L. El Timer 2 tambien tiene un modo de funcionamiento como el contador recargable de 16 bits y RCAP2H y RCAP2L guardan el valor a recargar para esto modo. Estos registros se describiran en una seccion posterior. N REGISTROS DE CONTROL Los Registros de Funciones Especiales IP, IE, TMOD, TCON, T2CON, SCON y PCON contienen los bits de control y estado para el sistema de interrupciones, para los temporizadores / contadores y el port serie. Estos se describiran en secciones posteriores. EI osciIador y circuitera de reIoj Los pins XTAL1 y XTAL2 son la entrada y salida de una etapa inversora incluida en el chip, a las que se puede conectar un cristal de cuarzo para obtener el oscilador. Este oscilador gobierna el generador de reloj interno. Este, a su vez, proporciona las seales de reloj para el chip. Estas seales tienen una frecuencia mitad de la frecuencia del oscilador, y definen las fases internas, los estados y los ciclos maquina que se describiran en una seccion posterior. Dependiendo del tipo de tecnologia con el que este fabricado el chip ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 11 (HMOS o CHMOS), se deben destacar unas particularidades sobre el oscilador y el circuito de reloj. Versiones HMOS La circuiteria del oscilador para las versiones HMOS (HMOS I y HMOS II) de la familia MCS-51 es una simple etapa inversora diseada para utilizarse como un oscilador de reactancia positiva controlado por un cristal de cuarzo. En esta aplicacion, el cristal funciona en su modo fundamental de respuesta como una reactancia inductiva en resonancia en paralelo con una capacidad externa del cristal Las caracteristicas del cristal y los valores de las capacidades (C1 y C2) no son criticas. Se pueden utilizar capacidades de 30 pF, tal y como se puede ver en la figura 1.3.5, y cristales de cualquier frecuencia, pero de buena calidad. En aplicaciones que deba tenerse en cuenta el coste, se puede utilizar un resonador ceramico en lugar de cristal. Cuando nos encontremos en este caso, C1 y C2 normalmente se escogen de valores mas elevados (47 pF), de todas maneras, se puede consultar al fabricante del resonador ceramico a cerca del valor ideal de dichas capacidades. Fig 1.3.5. Oscilador interno para versiones HMOS ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 12 Versiones CHMOS Tal como se muestra en la figura 1.3.6, la circuiteria del oscilador para el 80C51 consiste en una etapa inversora preparada para ser gobernada por un cristal de cuarzo, formando un oscilador de reactancia positiva, de la misma forma que en las versiones HMOS, sin embargo, existen unas diferencias importante Fig 1.3.6 Oscilador interno para las versiones CHMOS. Una diferencia es que el 80C51 tiene la posibilidad de parar el oscilador del software (escribiendo un 1 en el bit PD del registro PCON). Otra diferencia es que en el 80C51 el circuito interno de reloj esta gobernado por XTAL2. La resistencia de realimentacion Rf de la figura 1.3.6 esta constituida por dos transistores FET uno de canal P y otro de canal N, puestos en paralelo, controlados por el bit PD, de tal manera que Rf esta abierta cuando PD 1. Los diodos D1 y D2, que actuan como fijadores a VCC y VSS, suprimen los parasitos de los FET de Rf. El oscilador se puede utilizar con los mismos componentes externos que en las versiones HMOS, tal como se muestra en la figura 1.3.7. Tipicamente C1C230 pF cuando el elemento de realimentacion es un cristal de cuarzo, y C1C247 pF cuando se utiliza un resonador ceramico. Para gobernar los dispositivos CHMOS con un reloj externo, se debe aplicar la seal externa a XTAL1, dejando XTAL2 al aire, tal como se muestra en la figura 1.3.7. La razon de este cambio respecto a los dispositivos HMOS es que en estos los circuitos internos de reloj vienen gobernados por XTAL2. En las versiones CHMOS los circuitos internos de reloj estan gobernados por XTAL1. ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 13 Fig. 1.3.7 Uso de un relof externo para gobernar dispositivos CHMOS. Diagramas de tiempo de Ia CPU Un ciclo maquina consiste en 6 estados (12 periodos del oscilador). Cada estado se divide en dos Fase 1 y Fase 2. Durante la Fase 1 es activo el reloj de la Fase 1 y durante la Fase 2 es activo el reloj de la Fase 2. Entonces, un ciclo maquina que consiste en 12 periodos del oscilador, enumerados S1P1 (Estado1, Fase1) a S6P2 (Estado 6, Fase 2). Cada fase dura un periodo del oscilador. Normalmente, las operaciones aritmeticas y logicas se realizan durantela Fase 1 y las transferencias entre los registros internos se realizan durante la Fase 2. El diagramas de la figura 1.3.8 nos muestra el ciclo de busqueda y ejecucion de una instruccion, referenciados respecto a los estados y fases internos. Debido a que estas seales internas de reloj no son accesibles para el usuario, se muestran las seales XTAL1 y ALE para poder tener una referencia externa. La seal ALE se activa normalmente dos veces por cada ciclo maquina: una vez durante S1P2 y S2P1, y de nuevo durante S4P2 y S5P1. La ejecucion de una instruccion de un ciclo empieza en S1P2, cuando el codigo de operacion es almacenado dentro del Registro de Instruccion. Si esta instruccion es de dos bytes, el segundo byte se lee durante S4 del mismo ciclo maquina. Si es una instruccion de un byte, se produce otro ciclo de busqueda de codigo de operacion, pero el byte leido se ignora, y el Contador de Programa no se incrementa. En cualquier caso, la ejecucion de la instruccion se completa al final de S6P2. La mayoria de instrucciones del 8051 se ejecutan en un ciclo. Las instrucciones de multiplicacion y division (MUL y DIV) son las unicas que necesitan mas de dos ciclos para ejecutarse. Necesitan 4 ciclos. Normalmente, en cada ciclo maquina, se buscan dos bytes de codigo en la Memoria de Programa. La unica excepcion a esto es cuando se ejecuta una instruccion MOVX. MOVX es una instruccion de 1 byte y 2 ciclos que accede a la Memoria de Datos externa (RAM). Durante la ejecucion de esta instruccion se omiten dos fetch mientras se direcciona y activa la Memoria de Datos externa. La figura 1.3.8.d nos muestra una instruccion MOVX. ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 14 Fig. 1.3.8 Secuencias de busqueda v efecucion de instrucciones. Estructura y funcionamiento de Ios ports Los cuatro ports del 8051 son vi direccionables. Cada uno consiste en un latch (Registro de Funciones Especiales P0 a P3), un amplificador de salida y un buffer de entrada. Fig. 1.3.9 Funciones alternativas del Port 1 v Port 3. Nota : P1.0 y P1.1 solamente tienen esta funcion en el 8052. Los amplificadores de salida de los Ports 0 y 2, y los buffers de entrada del Port 0 se utilizan para acceder a la memoria externa. En esta aplicacion, el Port 0 proporciona el byte bajo de la direccion de memoria, multiplexado en el tiempo con el byte que se va a leer o a ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 15 escribir. El Port 2 proporciona el byte alto de direccion para la memoria externa, cuando la direccion es de 16 bits. Si no es asi, los pins del Port 2 emiten el contenido del Registro de Funciones Especiales P2. Todos los pins del Port 3 y dos del Port 1 (en el 8052) son multifuncionales. No son solamente pins de port si no que tambien se utilizan para varias funciones especiales como las mostradas en la figura 1.3.9. Las funciones alternativas solo se pueden activar si el bit correspondiente del latch en el SFR del port contiene un 1. De otra forma, el pin del port se mantiene a 0. Configuraciones de entrada / saIida La figura 1.3.10 nos muestra un diagrama funcional a nivel de bit de los ports. El latch de bit viene representado como un biestable del tipo D, el cual introduce un valor desde el bus interno en respuesta a una seal de 'escribir en el latch' que proporciona la CPU. La salida Q del biestable pasa al bus interno es respuesta a la seal de 'leer latch' que proporciona la CPU. EL nivel del pin del port se coloca por si mismo en el bus interno cuando la CPU envia la seal de ' leer pin '. Algunas instrucciones que leen un port activan la seal de ' leer latch', y otras activan la seal de ' leer pin'. Estas se detallaran mas adelante. Los amplificadores de salida de los Ports 0 y 2 son conmutables a un bus interno de DIRECCIONES y DIRECCIONES / DATOS mediante una seal interna de control, para poder utilizarse en los accesos a memoria externa. Durante estos accesos, el SFR de P2 se mantiene sin ningun cambio, pero el SFR de P0 queda con unos escritos en el. Los Ports 1, 2 y 3 tienen resistencias de carga internas. El Port 0 tiene salidas en drenador abierto. Cada linea de entrada / salida puede utilizarse independientemente como entrada o salida. (Los Ports 0 y 2 no pueden utilizarse como ports de entrada / salida de proposito general cuando se estan utilizando como Bus de Direcciones / datos). Para utilizarse como entrada, el latch del bit del port debe contener un 1, lo cual desconecta el amplificador FET de salida. Entonces, para los Ports 1, 2 y 3 el pin se pone a 1 mediante la resistencia de carga interna, pero puede ponerse a 0 mediante un fuente exterior. El Port 0 difiere de los anteriores por no tener resistencias de carga internas. El FET de resistencia de carga en el amplificador de salida de P0 se utiliza solamente cuando el Port esta sacando unos durante los accesos a memoria externa. De otra manera, el FET de resistencia de carga esta desconectado. Consecuentemente, las lineas de P0 que se utilizan como lineas de salida del port son de drenador abierto. El hecho de escribir un 1 en el latch del bit, desconecta ambos FET de salida, y por tanto, el pin queda al aire. En esta condicion, se puede utilizar como entrada de alta impedancia. Debido a que los Ports 1, 2 y 3 tienen resistencias de carga internas, estos se denominan en ocasiones ports ' quasibidireccionales '. Cuando estan configurados como entradas, estan a 1 y pueden entregar corriente cuando se les fuerza un 0 externamente. De otro lado, el Port 0 se considera bidireccional ' verdadero ', debido a que configurado como entrada esta al aire. Todos los latch de los ports del 8051 tienen 1 escritos en ellos despues de un reset. Si a continuacion se escribe un 0 en el latch del port, este puede ser reconfigurado como entrada escribiendo un 1. ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 16 Fig. 1.3.10 Latch de cada bit de los ports v buffers de I/O. Escritura en un port En la ejecucion de una instruccion que cambia el valor del latch de un port, el nuevo valor llega al latch durante el S6P2 del ultimo ciclo de la instruccion. Sin embargo, los latch del port son de hecho muestreados por sus buffers de salida solamente durante la Fase 1 de cualquier periodo de reloj. (Durante la Fase 2 el buffer de salida guarda el valor que habia visto durante la Fase 1 previa) . Consecuentemente, el nuevo valor del latch del port no podra aparecer en el pin de salida hasta la siguiente Fase 1, la cual sucedera en el S1P1 del siguiente ciclo maquina, tal y como se observa en la figura 1.3.11. Fig. 1.3.11 Secuencia de escritura en un puerto. Si un cambio en el Port 1, 2 o 3 requiere una transicion de 0 a 1, se conecta una resistencia de carga adicional durante el S1P1 y el S1P2 del ciclo en el cual ocurre la transicion. Esto ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 17 se hace para aumentar la velocidad de transicion. La resistencia de carga extra puede conducir cerca de 100 veces la corriente que puede conducir la resistencia de carga normal. Se habra notado que las resistencias de carga internas son FET`s y no resistencias lineales. Acceso a Ia memoria externa Los accesos a la memoria externa pueden ser de dos tipos: accesos a la Memoria de Programa externa y accesos a la Memoria de Datos externa (RAM). Los accesos a la Memoria de Programa externa utilizan la seal PSEN para leer el dato. Los accesos a la Memoria de Datos externa utilizan las seales RD o WR para leer o escribir (funciones alternativas de P3.7 y P3.6). Los ciclos de busqueda de codigo de operacion de la Memoria de Programa externa siempre utilizan una direccion de 16 bits. Los accesos a la Memoria de Datos externa pueden utilizar tanto una direccion de 16 bits (MOVX DPTR) como una direccion de 8 bits (MOVX Ri). Cuando se utiliza una direccion de 16 bits, el byte alto de la direccion sale por el Port 2 (figura 1.3.12),en donde se mantiene durante el tiempo que dura el ciclo de lectura o escritura. Notese que el Port 2 utiliza resistencias de carga durante todo el tiempo que esta emitiendo bits de direccion que son 1. Esto sucede con la ejecucion de la instruccion MOVX DPTR. Durante este tiempo el latch del Port 2 (el Registro de Funciones Especial) no tiene que contener unos y el contenido del SFR del Port 2 no se modifica. Si el ciclo de memoria externa no es seguido inmediatamente por otro ciclo de memoria externa, en el siguiente ciclo aparecera el contenido no modificado del SFR del Port 2. Si se utiliza una direccion de 8 bits (MOVX Ri), el contenido del SFR del Port 2 permanece en los pins del mismo a lo largo del ciclo de memoria externa. Esto puede facilitar la paginacion. En cualquier caso, en el Port 0, el byte bajo de la direccion esta multiplexado en el tiempo con el byte de datos. La seal ADDR/DATA gobierna a ambos FET de los buffers de salida del Port 0. De este modo, los pins del Port 0 no son salidas en drenador abierto, y no necesitan resistencias de carga externas. La seal ALE se puede utilizar para introducir el byte de direcciones en un latch externo. El byte de direccion es valido en el flanco de bajada de la seal ALE. Entonces, en un ciclo de escritura, el byte de dato que se debe escribir aparece en el Port 0 justamente antes de que se active la seal WR, y permanece asi hasta que dicha seal desaparece. En un ciclo de lectura, el byte de entrada es aceptado en el Port 0 justamente antes de que se desactive la seal de lectura. Durante cualquier acceso a la memoria externa, la CPU escribe 0FFH en el latch del Port 0 (el Registro de Funcion Especial), borrando de esta manera cualquier informacion que hubiera en el SFR del Port 0. ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 18 Fig. 1.3.13. Acceso a Memoria de Programa externa La Memoria de Programa externa se accede bajo dos condiciones: 1.- Siempre que la seal EA` sea activa. 2.- Siempre que el contador de programa (PC) contenga un numero que sea mas grande que 0FFFH (1FFFH para el 8052). Esto requiere que las versiones de dispositivos que no tienen memoria ROM interna tengan cableado el pin EA a masa, para permitir que los 4 kbytes mas bajos (8 kbytes para el 8052) de Memoria de Programa puedan buscarse en el exterior. Cuando la CPU ejecuta un programa desde la Memoria de Programa externa, los 8 bits del Port 2 estan dedicados a una funcion de salida y no pueden utilizarse como entradas/salidas de proposito general. Durante los ciclos de busqueda de instruccion en memoria externa, ellos sacan el byte alto del PC. Durante este tiempo, los amplificadores del Port 2 utilizan resistencias de carga internas para emitir los bits del PC que sean 1. En las figuras 13.14 y 1.3.15 se observan se observan los ciclos de lectura y escritura de memoria externa respectivamente. ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 19 Fig. 1.3.14 Ciclo de lectura de la Memoria de Datos externa. Fig. 1.3.15 Ciclo de escritura de la Memoria de Datos externa. SeaI PSEN' La seal de lectura para la busqueda de codigo de operacion (fetch) externo es PSEN. Esta seal no se activa para la busqueda de codigo de operacion interno. Cuando la CPU accede a la Memoria de Programa externa, PSEN se activa dos veces cada ciclo (a excepcion de una instruccion MOVX) aunque el byte buscado se necesite o no para la instruccion en curso. Cuando PSEN se activa, su diagrama temporal no es el mismo que el de RD. Un ciclo completo de RD, incluyendo la activacion y desactivacion de ALE y RD, tarda 12 ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 20 periodos del oscilador. Un ciclo completo de PSEN, incluyendo la activacion y desactivacion de ALE y PSEN, tarda 6 periodos del oscilador. La secuencia de ejecucion se muestra en la figuras 1.3.8. SeaI ALE La principal funcion de ALE es la de proporcionar la seal correcta en el tiempo al latch externo para que este pueda guardar el byte bajo de una direccion , proveniente de P0, durante los ciclos de busqueda de instruccion en la Memoria de Programa externa. Debido a esto, ALE se activa dos veces cada ciclo maquina. Esta activacion tiene lugar aun cuando el ciclo no implique un fetch externo. El unico momento en que no se produce el impulso de ALE es durante el ciclo de una instruccion MOVX se elimina (ver figuras 1.3.14 y 1.3.15). Consecuentemente, en cualquier sistema que no se utilice Memoria de Datos externa, ALE se activa constantemente cada 1/6 de la frecuencia de oscilador, y puede utilizarse como reloj externo o para cualquier aplicacion de temporizacion. SoIapamiento de Ios espacios de Ias memorias de programa y datos externos En algunas aplicaciones es deseable ejecutar un programa desde la misma memoria fisica que se esta utilizando para guardar datos. En el 8051, las Memorias de Programa y Datos externas pueden combinarse mediante la funcion logica AND entre PSEN y RD (ver figuras 1.3.16 y 1.3.17). Esta funcion logica de las dos seales produce un impulso de lectura a nivel bajo que puede utilizarse para combinar las dos memorias. Debido a que el ciclo de PSEN es mas rapido que el de RD, es necesario que la memoria externa sea suficientemente rapida para acomodarse a este ciclo. A) MEMORIA DE PROGRAMA. Fig. 1.3.16 Solapamiento de la Memoria de Programa. ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 21 B) MEMORIA DE DATOS. Fig. 1.3.17 Solapamiento de la Memoria de Datos. Temporizadores / contadores El 8051 tiene dos registros de 16 bits temporizadores / contadores: Timer 0 y Timer 1. El 8052 tiene estos dos mas un tercero, el Timer 2. Los tres pueden configurarse para funcionar como temporizadores o como contadores. En la funcion de temporizador el registro se incrementa cada ciclo maquina. Por tanto, uno puede pensar que es un contador de ciclos maquina. Debido a que un ciclo maquina de temporizacion es de un 1/12 de la frecuencia del oscilador. En la funcion de contador el registro se incrementa en respuesta a la transicion de 1 a 0 en su correspondiente pin de estrada externo, T0, T1 o (en el 8052) T2. En esta funcion la entrada externa se muestra durante el S5P2 de cada ciclo maquina. Cuando los muestreos ven un 1 en un ciclo y un 0 en el siguiente ciclo, el contador se incrementa. El nuevo valor del contador aparece en el registro durante S3P1 del ciclo siguiente al cual se detecto la transicion. Debido a que este tarda dos ciclos maquina (24 periodos del oscilador) en reconocer la transicion de 1 a 0, la maxima velocidad del conteo sera 1/24 de la frecuencia del oscilador. No hay restricciones por lo que respecta al ciclo de trabajo de la seal de entrada externa, pero para asegurar que un nivel se muestrea al menos una vez antes de que cambie, este debe mantenerse al menos durante un ciclo maquina completo. En adicion a la seleccion de temporizador o contador, el Timer 0 y el Timer 1 tienen cuatro modos de direccionamiento que se pueden seleccionar. El Timer 2 tiene tres modos de funcionamiento: 'captura' , autorrecarga y generador de baud-rates. ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 22 Timer 0 y Timer 1 Estos temporizadores / contadores estan presentes tanto en el 8051 como en el 8052. La funcion de temporizador o contador se selecciona por el bit de control C/T del Registro de Funcion Especial TMOD (ver figura 1.3.18). Estos dos temporizadores/ contadores tienen cuatro modos de funcionamiento seleccionables mediante los bits M1 y M0 de TMOD. Los modos 0, 1 y 2 son iguales para ambos. El modo 3 es diferente. A continuacion se describiran los cuatro modos de funcionamiento. Fig. 1.3.18 Registro TMOD. Veamos el significado de cada uno de estos bits: N GATE : Cuando esta a 1 actua como control de entrada. El temporizador/contador 'x es habilitado solamente cuando el pin INT'X esta a 1 y cuando el pin de control TRX esta a 1. Cuando esta a 0, el Timer x es habilitado siempre que el bit de control TRx este a 1. N C/T` : Seleccionador de temporizador o contador. Cuando esta a 0 se selecciona el funcionamiento como temporizador (entrada por el reloj interno del sistema). Cuando esta a 1 se selecciona el funcionamiento como contador (entrada por el pin de entrada 'Tx). N M1 y M0 : Bits de control 1 y 0 para seleccionar el modo de funcionamiento del temporizador/contador. El modo dependera de las siguientes combinaciones: Fig. 1.3.19 Seleccion de los modos de funcionamiento de los Timers. MODO 0 El hecho de poner cualquier Timer eN Modo 0, hace que este se asemeje al Timer del 8048 (Familia anterior a la MCS-51), el cual es un contador de 8 bits con un prescaler que divide por 32. La figura 1.3.20 no muestra el funcionamiento del Modo 0, aplicado al Timer 1. ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 23 Fig. 1.3.20 Tempori:ador/contador 1 en Modo 0. En este modo, el registro del temporizador se configura como un registro de 13 bits. Cuando el conteo pasa de todos los bits a 1 a todos a 0 , se activa el flag de interrupcion del timer TF1. La entrada de conteo, para el timer, se habilita cuando TR11 y GATE0 o INT11 . (Poniendo GATE1 permitimos que el timer pase a ser controlado por la entrada externa INT1, de cara a facilitar la medida de anchura de impulso). TR1 es un bit de control de Registro de Funcion Especial TCON (figura 1.3.21) . El bit GATE pertenece a TMOD. El registro de 13 bits lo forman 8 bits TH1 y los cinco bits bajos del TL1. Los tres bits mas altos de TL1 son determinados y se pueden ignorar. El hecho de activar el flag de puesta en marcha (TR1) no borra los registros. El funcionamiento del Modo 0 es el mismo para el Timer 0 que para el Timer 1. Para ello, basta con sustituir en la figura 1.3.18 TR1, TF1 e INT1 por sus seales correspondientes del Timer 0. Hay dos bits de GATE diferentes uno para el Timer 1 (TMOD.7) y otro para el Timer 0 (TMOD.3). Fig. 1.3.21 Registro TCON. Veamos el significado de cada uno de estos bits: - TF1 : Es el flag de desbordamiento del Timer 1. Se pone a 1 por hardware cuando hay un desbordamiento del temporizador/contador 1. Puesto a cero por hardware cuando el - procesador ejecuta la subrutina de interrupcion. ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 24 - TR1 : Bit de control de puesta en marcha del Timer 1. Puesto a 1/puesto a 0 por software para poner en marcha / parar el temporizador/contador. - TF0 : Es el flag de desbordamiento del Timer 0. Se pone a 1 por hardware cuando hay un desbordamiento del temporizador/contador 1 . Puesto a cero por hardware cuando el procesador ejecuta la subrutina de interrupcion. - TR0 : Bit de control de puesta en marcha del Timer 0 Puesto a 1/puesto a 0 por software para poner en marcha / parar el temporizador/contador. - IE1 : Flag de flanco de la interrupcion 1. Puesto a 1 por hardware cuando se detecta un flanco de interrupcion externa. Puesto a cero cuando se ha procesado la interrupcion. - IT1 : Bit de control del tipo de interrupcion 1. Puesto a 1/puesto a 0 por software para especificar el tipo de disparo de las instrucciones externas por el flanco de bajada/por nivel bajo. - IE0 : Flag de flanco de la interrupcion 0. Puesto a 1 por hardware cuando se detecta un flanco de interrupcion externa. Puesto a cero cuando se ha procesado la interrupcion. - IT0 : Bit de control del tipo de interrupcion 0. Puesto a 1/puesto a 0 por software para especificar el tipo de disparo de las interrupciones externas por flanco de bajada/por nivel bajo. MODO 1 El Modo 1 es le mismo que el Modo 0 a excepcion de que el registro del Timer funciona con los 16 bits. Fig. 1.3.22 Tempori:ador/contador 1 en Modo 1. ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 25 MODO 2 El Modo 2 configura al registro del timer como un contador de 8 bits (TL1) con recarga automatica, tal como se muestra en la figura 1.3.20. El desbordamiento de TL1 no tan solo pone a 1 a TF1, sino que recarga a TL1 con el contenido de TH1, el cual ha sido preprogramado por software. La recarga no altera el valor de TH1. Este modo de funcionamiento es el mismo para el Timer 0. Fig. 1.3.23 Tempori:ador/contador 1 en Modo. MODO 3 El Timer 1 en Modo 3 simplemente mantiene su conteo. El efecto es el mismo que poner TR10. El Timer 0 en Modo 3 funciona con TL0 y TH0 como dos contadores independientes. La figura 1.3.24 nos muestra la logica para este modo y para el Timer 0. TL0 utiliza los bits de control del Timer 0 : C/T, GATE, TR0, INT0 y TF0. TH0 queda limitado a a funcion de timer (cuenta ciclos maquina) y toma el control de TR1 y TF1 del Timer 1. Por tanto, ahora TH0 controla la interrupcion del Timer 1. El Modo 3 esta pensado para aquellas aplicaciones que necesiten un temporizador o contador extra de 8 bits. Con el Timer 0 en Modo3, un 8051 puede parecer que tenga tres temporizadores/contadores, y un 8052 como si tuviera 4. Cuando el Timer 0 esta en Modo 3, el Timer 1 puede ponerse en marcha o pararse programandolo o desprogramandolo en Modo 3, o puede ser utilizado por el port serie como generador de baud rate, o de hecho, utilizarlo en cualquier aplicacion que no requiera interrupciones. ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 26 Fig. 1.3.24 Tempori:ador/contador 0 en Modo 3. Timer 2 El Timer 2 es in temporizador/contador de 16 bits que solo esta presente en el 8052. Al igual que los Timers 0 y 1, puede operar como temporizador o como contador. Esto se selecciona mediante el bit C/T2 del Registro de Funcion Especial T2CON (figura 1.3.22). Tiene tres modos de funcionamiento : 'captura, autorecarga y generador de baud rate, los cuales se seleccionan por unos bits del T2CON mostrado en la 1.3.25. Fig. 1.3.25 Registro T2CON. Veamos el significado de cada uno de estos bits : - TF2 : Es el flag de desbordamiento del Timer 2. Se pone a 1 mediante el desbordamiento del Timer 2 y se debe poner a 0 por software. TF2 no se debe poner a 1 cuando RCLK1 o TCLK1. - EXF2 : Es el flag externo del Timer 2 que se pone a uno cuando se produce una 'captura o recarga debido a un flanco de bajada en T2EX y EXEN21. Cuando las interrupciones del Timer 2 estan habilitadas, EXF21 ocasionara que la CPU vectorize la subrutina de interrupcion del Timer 2. EXF2 se debe poner a 0 por software. - RCLK : Es el flag del reloj de recepcion. Cuando esta a 1, hace que el port serie utilice los impulsos de desbordamiento del Timer 2 - para su reloj de recepcion en modos 1 y 3. RCLK0 hace que el ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 27 - desbordamiento del Timer 1 se use para el reloj de recepcion. - TCLK : Es el flag del reloj de transmision. Cuando esta a 1, hace que el port serie utilice los impulsos de desbordamiento del Timer 2 para su reloj de transmision en modos 1 y 3. TCLK0 hace que el desbordamiento del Timer 1 se use para el reloj de transmision. - -EXEN2 : Es el flag externo de habilitacion del Timer 2. Cuando esta a 1, permite que se produzca una 'captura o recarga como resultado de un flanco descendente en T2EX si es que el Timer 2 no se esta utilizando para gobernar el port serie. EXEN20 hace que el Timer 2 ignore lo que pasa en T2EX. - TR2 : Puesta en marcha/paro del Timer 2. Un 1 logico pone en marcha al timer. - C/T2` : Timer 2 seleccionado como temporizador o contador. 4 0 Timer interno (OSC/12). 4 1 Contador externo (disparo por flancos de bajada). - CP/RL2` : Flag de 'captura/recarga. Cuando esta a 1, se produciran 'capturas en los flancos descendentes de T2EX si EXEN21. Cuando esta a 0, se producira una autorecarga siempre que haya desbordamiento del Timer 2 o flancos descendentes en T2EX si EXEN21. Cuando RCLK1 o TCLK1, este bit se ignora y se fuerza al timer a autocargarse cuando se produce un desbordamiento del Timer 2. Fig. 1.3.26 Seleccion de los modos de operacion del Timer 2. ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 28 Fig. 1.3.27 Tempori:ador/contador 2 en Modo 'Captura'. En el modo de 'captura hay dos opciones que se seleccionan mediante el bit EXEN2 de T2CON. Si EXEN20, entonces el Timer 2 queda configurado como un temporizador o contador de 16 bits el cual pone a 1 el bit TF2 cuando se produce un desbordamiento del mismo, el cual se puede utilizar para generar una interrupcion. Si EXEN21, el Timer 2 queda configurado como en el caso anterior, pero con la caracteristica aadida de que si se produce una transicion de 1 a 0 en el pin externo T2EX, el valor de los registros TL2 y TH2 es 'capturado respectivamente, en los registros RCAP2L y RCAP2H. Ademas, la transicion hace que se ponga a 1 el bit EXF2 de T2CON, y EXF2, al igual que TF2, puede generar una interrupcion. Este modo queda ilustrado en la figura 1.3.27. En el modo de autorecarga hay de nuevo dos opciones, las cuales son seleccionadas por el bit EXEN2 de T2CON. Si EXEN0, entonces cuando se produce un desbordamiento del Timer 2 no solamente se pone a 1 TF2 si no que tambien ocasiona que los registros del Timer 2 se recarguen con el valor de 16 bits de los registros RCAP2L y RCAP2H. los cuales deben haber sido preprogramados por software. Si EXEN1, el Timer 2 se comporta como en el modo anterior, pero con la caracteristica aadida de que una transicion de 1 a 0 en la entrada externa T2EX tambien dispara la recarga de 16 bits y pone a 1 EXF2. ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 29 El modo de autorecarga queda mostrado en la figura 1.3.28. Fig. 1.3.28 Tempori:ador/contador 2 en Modo Autorecarga. El modo generador de baud rate se selecciona mediante RCLK1 y/o TCLK1. Esto se describira conjuntamente con el port serie. Interfase serie El port serie es full duplex, o sea, que puede transmitir y recibir a la vez. Tambien posee una recepcion con buffer, es decir, puede empezar la recepcion de un segundo byte antes de que se haya leido, del registro de recepcion, el byte recibido con anterioridad. (Sin embargo, si el primer byte no ha sido leido durante el tiempo de recepcion del segundo byte, se perdera uno de los dos bytes). Los registros de transmision y recepcion del port serie son accesibles mediante el Registro de Funcion Especial SBUF. El hecho de escribir en SBUF, carga el registro de transmision, y el hecho de leer SBUF hace que accedamos fisicamente al registro de recepcion. El port serie puede operar de 4 modos diferentes: MODO 0 Los datos serie entran y salen por RXD. TXD saca el reloj de desplazamiento. Se transmiten/reciben 8 bits (el LSB primero). El baud rate queda fijado a 1/12 de la frecuencia del reloj. ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 30 MODO 1 Se transmiten (a traves de TXD) o reciben (a traves de RXD) 10 bits: un bit de start (0), 8 bits de datos (el LSB primero) y un stop bit (1). En la recepcion, el bit de stop va a parar a RB8 del Registro de Funcion Especial SCON. El baud rate es variable. MODO 2 En este modo se transmiten (a traves de TXD) o reciben (a traves de RXD) 11 bits: un bit de start (0), 8 bits de datos (el LSB primero), un noveno bit de datos programable y un stop bit (1). En la transmision, al noveno bit de datos (TB8 en SCON) se le puede asignar el valor 0 o 1, o, por ejemplo, se puede transferir a TB8 el bit de paridad (P, en el PSW). En recepcion, el noveno bit de datos se introduce en RB8 del registro de Funcion Especial SCON, y el stop bit se ignora. El baud rate es programable a 1/32 o 1/64 de la frecuencia del oscilador. MODO 3 En este modo se transmiten (a traves de TXD) o reciben (a traves de RXD) 11 bits: un bit de start (0), 8 bits de datos (el LSB primero), un noveno bit de datos programable y un stop bit (1). De hecho, el Modo 3 es el mismo que el Modo 2 en todos los aspectos, con la unica diferencia del baud rate. El baud rate en Modo 3 es variable. En todos los modos, la transmision se inicia mediante cualquier instruccion que utilice SBUF como registro destino. La recepcion se inicia en Modo 0 por la condicion de que RI0 y REN1. En los otros modos la recepcion se inicia mediante la llegada del bit start si REN1. Comunicaciones muItiprocesador Los Modos 2 y 3 tienen condiciones especiales para las comunicaciones multiprocesador. En estos modos, se reciben 9 bits de datos. El bit noveno va a parar a RB8. Despues llega el bit de stop. El port puede programarse para que cuando se reciba el bit de stop, se active la interrupcion del port serie se RB81. Esto es posible poniendo a 1 el bit SM2 de SCON. Una manera de utilizar esta caracteristica en los sistemas multiprocesador es la siguiente. Cuando el procesador central quiere transmitir un bloque de informacion a alguno de los procesadores secundarios, este primero envia una direccion la cual identifica el procesador destino. Un byte dedireccion difiere de un byte de dato porque el noveno bit es un 1 en el byte de direccion y un 0 en el byte de dato. Con SM21, ningun procesador secundario podra generar interrupcion por la llegada de un byte de dato. Sin embargo, la llegada de un byte de direccion podra hacer que todos los procesadores secundarios generen interrupcion, y asi, cada uno podra examinar el byte recibido y mirar si esta siendo direccionado. El procesador secundario direccionado podra borrar su bit SM2 y prepararse para recibir los bits de datos que le lleguen. Los procesadores secundarios que no son direccionados, dejan a 1 su bit SM2 y continuan con la realizacion de sus tareas, ignorando los bytes de datos que lleguen. En Modo 0 el bit SM2 no tiene ningun efecto, y en Modo 1 se puede utilizar para comprobar la validez del bit de stop. En la recepcion en Modo 1, si SM21, no se podra activar la interrupcion de recepcion a menos de que no se reciba un bit de stop valido. ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 31 Registros de controI deI port serie El registro de control y estado del port serie es el Registro de Funcion Especial SCON, que se muestra en la figura 1.3.29. Este registro no solo contiene los bits de seleccion de modo, si no que tambien contiene el noveno bit de dato para la transmision y recepcion (TB8 y RB8), y los bits de interrupcion del port serie (TI y RI). Fig. 1.3.29 Registro SCON. Veamos el significado de cada uno de estos bits: - SM0 y SM1 : Estos bits especifican el modo de funcionamiento del port serie, tal como se muestra en la figura siguiente 1.3.30. - SM2 : Habilita la comunicacion multiprocesador en Modos 2 y 3. En Modos 2 o 3, si SM2 esta a 1, entonces RI no sera activado si el noveno bit de dato recibido (RB8) es un 0. En Modo 1, si SM21, entonces RI no sera activado si no recibe un bit de stop valido. En Modo 0, SM2 debe ser 0. Fig. 1.3.30 Seleccion de los modos de funcionamiento del port serie. - REN : Habilita la recepcion serie. Para habilitarla, se debe poner a 1 por software. Para inhibir la recepcion debe ponerse a 0. - TB8 : Es el noveno bit de dato que se transmitira en los Modos 2 y 3. Se debe poner a 1 o 0 por software. - RB8 : En los Modos 2 y 3, es el noveno bit de dato que se recibe. En Modo 1, si SM20, RB8 es el bit de stop recibido. En Modo 0, RB8 no se utiliza. - TI : Es el flag de interrupcion de la transmision. En cualquier transmision serie, se pone a 1 por hardware al final del octavo bit, en Modo 0, o al principio del bit de stop, en los otros modos. Debe ponerse a 0 por software. - RI : Es el flag de interrupcion de la recepcion. En cualquier recepcion serie (ver SM2), se pone a 1 por hardware al final del octavo bit, en Modo 0, o a la mitad del bit de stop, en los otros modos. Debe ponerse a 0 por software. ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 32 Baud rates El baud rate en Modo 0 queda fijado: El baud rate en Modo 2 depende del valor del bit SMOD en el Registro de Funcion Especial PCON. Si SMOD0 (valor por defecto despues de un reset), el baud rate es 1/64 de la frecuencia del oscilador. Si SMOD1, el baud rate es 1/32 de la frecuencia de oscilador. En el 8051, los baud rates en Modos 1 y 3 vienen determinados por el desbordamiento del Timer 1. En el 8052, estos baud rates pueden venir determinados por el Timer 1, o por el Timer 2 o por ambos (uno para la transmision y el otro para la recepcion). UTILIZACION DEL TIMER 1 PARA GENERAR BAUD RATES Cuando se utiliza el Timer 1 como generador de baud rates, estos, en los Modos 1 y 3 vienen determinados por el desbordamiento del Timer 1 y por el valor de SMOD, tal como se indica en la formula siguiente: En esta aplicacion, la interrupcion del Timer 1 debe estar prohibida. El Timer puede configurarse como temporizador o contador y en cualquiera de sus tres modos de funcionamiento. En las aplicaciones mas tipicas, este se configura como temporizador, en Modo autorecarga ( nibble alto de TMOD0010B). En este caso, el baud rate viene dad por la formula: Con el timer 1, se pueden conseguir baud rates muy bajos si habilitamos la interrupcion de este y configuramos al Timer para que funcione como temporizador de 16 bits (nobble alto de TMOD0001B), y utilizando la interrupcion para realizar una recarga, por software, de 16 bits. ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 33 La figura 1.3.31 nos muestra los baud rates mas comunmente utilizados y como pueden obtenerse a traves del Timer 1. Fig. 1.3.31 Baud rates mas comunmente utili:ados Fig. 1.3.31 Baud rates mas comunmente utili:ados UTILIZACION DEL TIMER 2 PARA GENERAR BAUD RATES En el 8052, el Timer 2 se selecciona como generador de baud rates si ponemos a 1 TCLK y/o RCLK de T2CON. Notese que los baud rates para la transmision y para la recepcion pueden ser simultaneamente diferentes. En la figura 1.3.32 podemos ver el diagrama interno del Timer 2 como generador de baud rates. El modo generador de baud rates es similar al modo de autorecarga, en el hecho de que un desbordamiento de TH2 ocasiona que los registros del Timer 2 se recarguen con el valor de 16 bits de los registros RCAP2H y RCAP2L, los cuales son preprogramados por software. Ahora, los baud rates en Modos 1 y 3, vienen determinados por el desbordamiento del Timer 2, mediante la siguiente formula: El Timer puede configurarse para funcionar como temporizador o como contador. En las aplicaciones mas tipicas, este se configura como temporizador (C/T20). El funcionamiento como temporizador del Timer 2 es algo diferente cuando este se utiliza como generador de baud rate. Normalmente, el Timer se incrementa cada ciclo maquina (1/12 de la frecuencia del oscilador). Como generador de baud rate, sin embargo, este se ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 34 incrementa en cada estado (1/2 de la frecuencia del oscilador). En este caso, el baud rate viene dado por la formula: en donde (RCAP2H, RCAP2L) es al contenido de RCAP2H y RCAP2L, tomando como un entero de 16 bits sin signo. Fig. 1.3.32 Timer 2 como Generador de Baud Rates. En la figura 1.3.29 podemos ver el Timer 2 como generador de baud rates. Esta figura es valida solamente si RCLKTCLK1 en T2CON. Notese que un desbordamiento de TH2 no pone a 1 TF2, y no generara interrupcion. En consecuencia, la interrupcion del Timer 2 no tiene que ser prohibida cuando este funciona como generador de baud rates. Notese tambien, que si EXEN2 esta a 1, una transicion de 1 a 0 en T2EX pondra a 1 EXF2 pero no causara recarga de (RCAP2H, RCAP2L) a (TH2, TL2). De esta forma, cuando el Timer 2 ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 35 se utiliza como generador de baud rate, T2EX se puede utilizar como una interrupcion externa extra. Debe notarse que cuando el Timer 2 esta funcionando (TR21) como temporizador en el modo de generacion de baud rates, no se debe intentar leer o escribir en TH2 o TL2. Bajo estas condiciones el Timer se incrementa en cada estado, y el resultado de una lectura o una escritura puede ser que no sea del todo preciso. Los registros RCAP se pueden leer, pero no se debe escribir en ellos, porque una escritura puede solaparse con una recarga y puede ocasionar errores de escritura y/o recarga. En este caso, primero debe pararse el Timer (TR2 a 0) antes de acceder al Timer 2 o a los registros RCAP. Port serie en modo 0 En este modo, los datos serie entran y salen por RDX. TXD saca el reloj de desplazamiento. Se transmiten/reciben 8 bits de datos (el LSB primero). El baud rate esta fijado a 1/12 de la frecuencia del oscilador. En la figura 1.3.33 Ay B, se nos muestra una trama de transmision serie en Modo 0 y los diagramas de tiempo asociados. La transmision se inicia mediante cualquier instruccion que utilice SBUF como registro destino. La seal de 'escribir en SBUF, en S6P2, tambien carga un 1 en la posicion del noveno bit del registro de desplazamiento de transmision y le dice al bloque TX Control que empiece una transmision. El diagrama de tiempo interno es el mismo que un ciclo maquina completo que transcurra entre 'escribir en SBUF y la activacion de SEND. SEND permite que la salida del registro de desplazamiento salga por la funcion alternativa del pin P3.0 y tambien permite que el SHIFT CLOK salga por la funcion alternativa del pin P3.1. El SHIFT CLOK esta a 0 durante S3, S4 y S5 de cada ciclo maquina, y esta a 1 durante S6, S1 y S2. En S6P2 de cada ciclo maquina el cual SEND es activa, el contenido del registro de desplazamiento de transmision es desplazado un lugar hacia la derecha. A la vez que los bits de datos son desplazados hacia la derecha, entran ceros por la izquierda. Cuando el MSB del byte de datos esta en la posicion de salida del registro de desplazamiento, entonces el 1 que habia sido inicialmente cargado en la novena posicion, esta justamente a la izquierda del MSB, y todas las posiciones a la izquierda de esta, contienen ceros. Esta condicion hace que el bloque TX Control haga un ultimo desplazamiento y luego desactive SEND y ponga a 1 TI. Ambas acciones ocurren en S1P1 del decimo ciclo maquina despues del 'escribir en SBUF. La recepcion se inicia por la condicion de que REN1 y RI0. En S6P2 del proximo ciclo maquina, la unidad RX Control escribe en el registro de desplazamiento de recepcion los bits 11111110 y en la siguiente fase del reloj activa RECEIVE. RECEIVE permite que el SHIFT CLOK salga por la funcion alternativa del pin P3.1. El SHIFT CLOK hace transmisiones es S3P1 y S6P1 de cada ciclo maquina. En S6P2 de cada ciclo maquina en el cual RECEIVE es activa, el contenido del registro de desplazamiento de recepcion se desplaza un lugar a la izquierda. El valor que entra por la derecha es el valor que fue muestreado en el pin P3.0 en el S5P2 del mismo ciclo maquina. A la vez que entran los bits de datos por la derecha, por la izquierda salen unos. Cuando el 0 que habia sido cargado inicialmente en la posicion de mas a la derecha llega a la posicion de mas a la izquierda del registro de desplazamiento, hace que el bloque de RX Control haga un ultimo desplazamiento y cargue SBUF. En S1P1 del decimo ciclo maquina despues de que se habia puesto a 0 RI de SCON, RECEIVE se pone a 0 y RI se pone a 1. ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 36 Fig. 1.3.33 A Trama de transmision del Port serie en Modo 0. Fig. 1.3.33 B Diagrama de tiempo del Port serie en Modo 0. Port serie en modo 1 Se transmiten (a traves de TXD) o reciben (a traves de XD) 10 bits: un bit de start (0), 8 bits de datos (el LSB primero) y un stop bit (1). En la recepcion, el bit de stop va a parar a RB8 del Registro de Funcion Especial SCON. En el 8051, el baud rate viene determinado por el desbordamiento del Timer 1. En el 8052, este viene determinado por el desbordamiento del Timer 1, el desbordamiento del Timer 2 o por ambos. La transmision se inicia mediante una instruccion que utilice a SBUF como registro destino. La seal 'escribir en SBUF tambien carga un 1 en la posicion del noveno bit de registro de desplazamiento de transmision y hace que el bloque TX Control se entere de que se ha pedido una transmision . Entonces, la transmision empieza en el S1P1 del ciclo maquina que sigue al desbordamiento del contador-divisor por 16. (Los tiempos de bit estan sincronizados con el contador-divisor por 16, y no por la seal de 'escribir en SBUF). ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 37 La transmision empieza con la activacion de SEND, la cual pone el bit de start en TXD. Despues de transcurrir el tiempo de un bit, se activa DATA, la cual permite que salga el bit del registro de desplazamiento de transmision a TXD. El primer impulso de desplazamiento tiene lugar despues del tiempo de un bit despues de este. A la vez que los bits de datos son desplazados hacia la derecha, entran ceros por la izquierda. Cuando el MSB del byte de datos esta en la posicion de salida del registro de desplazamiento, entonces el 1 que habia sido inicialmente cargado en la novena posicion, esta justamente a la izquierda del MSB, y todas las posiciones a la izquierda de esta, contienen ceros. Esta condicion hace que el bloque TX Control haga el ultimo desplazamiento y luego desactive SEND y ponga a 1 TI. Esto ocurre en el decimo desbordamiento del contador-divisor por 16 despues de 'escribir en SBUF. La recepcion se inicia mediante la deteccion de una transicion de 1 a 0 en RXD. Debido a esto, RXD es muestreada a una velocidad de 16 veces el baud rate establecido. Cuando se detecta una transmision, se resetea inmediatamente el contador-divisor por 16 y se escribe 1FFH en el registro de desplazamiento de entrada. Reseteado el contador-divisor por 16, igualamos sus desbordamientos con los limites de los tiempos de los bits de entrada. Los 16 estados del contador dividen cada tiempo de bit en 16. En los estados del contador septimo, octavo y noveno de cada tiempo de bit, el detector de bit muestrea el valor de RXD. Esto se hace para obtener un rechazo al ruido. Si el valor que se acepta durante el primer tiempo de bit no es 0, se resetean los circuitos de recepcion y la unidad vuelve a esperar otra transmision de 1 a 0. Esta se realiza para prevenir la aceptacion de bits de start falsos. Si el bit de start es valido, es desplazado dentro del registro de desplazamiento y se procedera a la recepcion del resto de la trama. A la vez que entran los bits de datos por la derecha, pos la izquierda salen unos. Cuando el bit de start llega a la posicion de mas a la izquierda del registro de desplazamiento, (que en Modo 1 en el noveno bit del registro), este hace que el bloque RX Control haga un ultimo desplazamiento, cargue SBUF y RB8, y ponga a 1 RI. La seal de cargar SBUF, RB8 y de poner a 1 RI, se generara si y solamente si se cumplen las siguientes condiciones en el momento que se genera el ultimo impulso de desplazamiento. Las condiciones son: 1.- RI 0 y 2.- Que SM2 0 o que el bit de stop recibido 1. Si no se cumple cualquiera de las dos condiciones, la trama recibida se perdera irremediablemente. Si se cumplen las dos condiciones, el bit de stop se introduce en RB8, los 8 bits de datos en SBUF y se activa RI. En este momento, se cumplan o no las condiciones anteriores, la unidad vuelve a mirar si se produce una transmision de 1 a 0 en RXD. ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 38 Port serie en modos 2 y 3 En estos modos se transmiten (a traves de TXD) o reciben (a traves de RDX) 11 bits: un bit de start (0), 8 bits de datos (el LSB primero), un noveno bit de datos programable y un stop bit (1). En la transmision, al bit noveno de datos (TB8 en SCON) se le puede asignar el valor 0 o 1. En recepcion, el bit noveno de datos se introduce es RB8 del registro de Funcion Especial SCON. El baud rate es programable a 1/32 o 1/64 de la frecuencia del oscilador. En Modo 3 podemos tener baud rates variables generados por el Timer 1 o el 2 dependiendo del estado de TCLK y RCLK. El bloque de recepcion es exactamente la misma que en Modo 1. La parte de transmision solamente difiere del Modo 1 en el noveno bit del registro de desplazamiento de transmision. La transmision se inicia mediante una instruccion que utilice a SBUF como registro destino. La seal 'escribir es SBUF tambien carga TB8 en la posicion del noveno bit del registro de desplazamiento de transmision y hace que el bloque TX Control se entere de que se ha pedido una transmision. Entonces, la transmision empieza en el S1P1 del ciclo maquina que sigue al desbordamiento del contador-divisor por 16. (Los tiempos de bit estan sincronizados con el contador-divisor por 16, y no por la seal de 'escribir en SBUF). La transmision empieza con la activacion de SEND, la cual pone el bit de start en TXD. Despues de transcurrir el tiempo de un bit, se activa DATA, la cual permite que salga el bit del registro de desplazamiento de transmision a TXD. El primer impulso de desplazamiento tiene lugar despues del tiempo de un bit despues de este. El primer desplazamiento coloca un 1 (el bit de stop) en la posicion del noveno bit del registro de desplazamiento. A la vez que los bits de datos son desplazados hacia la derecha, por la izquierda entran ceros. Cuando TB8 se encuentra en la posicion de salida del registro de desplazamiento, entonces, el bit de stop se encuentra justamente a la izquierda de TB8, y todas las posiciones a la izquierda de este contienen ceros. Esta condicion hace que la unidad TX Control haga un ultimo desplazamiento, desactiva SEND y ponga a 1 TI. Esto ocurre en el onceavo desbordamiento del divisor por 16, despues de la seal 'escribir en SBUF. La recepcion se inicia mediante la deteccion de una transicion de 1 a 0 en RDX. Debido a esto, RDX es muestreada a una velocidad de 16 veces al baud rate establecido. Cuando se detecta una transmision, se resetea inmediatamente el contador-divisor por 16 y se escribe 1FFH en el registro de desplazamiento de entrada. En los estados del contador septimo, octavo y noveno de cada tiempo de bit, el detector de bit muestrea el valor de RXD. El valor aceptado es el valor que se ha visto en los 2 o 3 ultimos muestreos. Si el valor que se acepta durante el primer tiempo de bit no es 0, se resetean los circuitos de recepcion y la unidad vuelve a esperar otra transicion de 1 a 0. Si el bit de start es valido, es desplazado dentro del registro de desplazamiento y se procedera a la recepcion del resto de la imagen. A la vez que entran los bits de datos por la derecha, por la izquierda salen unos. Cuando el bit start llega a la posicion de mas a la izquierda del registro de desplazamiento, (que en los Modos 2 y 3 es el noveno bit del registro), este hace que el bloque RX Control haga un ultimo desplazamiento, cargue SBUF y RB8, y ponga a 1 RI. La seal de cargar SBUF, ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 39 RB8 y de poner a 1 RI, se generara si y solamente si se cumplen las siguientes condiciones en el momento que se genera el ultimo impulso de desplazamiento. Las condiciones son: 1.- RI 0 y 2.- Que SM2 0 o que el bit de stop recibido 1. Si no se cumple cualquiera de las dos condiciones, la trama recibida se perdera irremediablemente y RI no se pondra a 1. Si se cumplen las dos condiciones, el noveno bit de dato se introduce en RB8, y los 8 bits de datos en SBUF. En este momento, se cumplan o no las condiciones anteriores, la unidad vuelve a mirar si se produce una transmision de 1 o 0 en RDX. Notese que el valor del bit del bit de stop recibido es irrelevante para SBUF, RB8 o RI. Interrupciones El 8051 tiene 5 fuentes de interrupcion. El 8052 tiene 6. Estas fuentes se muestrean en la figura 1.3.34. Fig. 1.3.34 Fuentes de interrupcion de la familia MCS-51. ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 40 Las interrupciones externas INTO` e INT1` puede ser cada una activada por nivel o por flanco descendente, dependiendo del valor de los bits IT0 e IT1 del registro TCON. Los flags que generan estas interrupciones son los bits IE0 e IE1 del mismo registro. Cuando se genera una interrupcion externa, el flag que la ha generado se pone a cero por hardware cuando se ha vectorizado la subrutina de servicio de la interrupcion, solamente si la interrupcion se activa por flanco. Si la interrupcion se activa por nivel, entonces es la fuente externa de interrupcion la que controla el flag de peticion y no el hardware interno del chip. Las interrupciones del Timer 0 y el Timer 1 se generan por TF0 y TF1, los cuales se ponen a 1 cuando se produce un desbordamiento en su respectivo registro temporizador /contador (excepto para el Timer 0 en Modo 3). Cuando se genera una interrupcion de un timer, el flag que la ha generado es puesto a 0 por el hardware interno, cuando se haya vectorizado la subrutina de servicio de la interrupcion. La interrupcion del Port serie viene generada por la funcion logica OR entre los flags RI y TI. Ninguno de estos flags es borrado por hardware cuando se ha vectorizado la subrutina de servicio de la interrupcion. De hecho, normalmente, es dicha subrutina la que tiene que discernir cual de los dos flags ha generado la interrupcion, y el bit debe ser puesto a 0 por software. En el 8052, la interrupcion del Timer 2 viene generada por la funcion logica OR entre los flags TF2 y EXF2. Ninguno de estos flags es borrado por hardware cuando se ha vectorizado la subrutina de servicio de la interrupcion. De hecho, normalmente, es dicha subrutina la que tiene que discernir cual de los dos flags ha generado la interrupcion, y el bit debe ser puesto a 0 por software. Todos aquellos bits que generan interrupciones pueden ser puestos a 1 o a 0 por software, con el mismo resultado que si estos lo hubiesen sido por hardware. Es decir, las interrupciones se pueden generar, y las pendientes cancelar, mediante software. Cada una de las fuentes de interrupcion puede ser habilitada o deshabilitada individualmente, por el hecho de poner a 1 o a 0 su bit correspondiente del Registro de Funcion Especial IE (vease la figura 1.3.35). Notese que IE tambien contiene un bit de prohibicion global (EA), el cual deshabilita todas las interrupciones a la vez. Veamos el significado de cada uno de estos bits: - EA : Deshabilita todas las interrupciones. Si EA 0 no se reconocera ninguna interrupcion. Si EA 1, cada fuente de interrupcion es habilitada o prohibida individualmente poniendo a 1 o a 0 su bit de habilitacion. - X : Reservado. - ET2 : Habilita o prohibe la interrupcion de desbordamiento o captura del Timer 2. Si ET20, las interrupciones del Timer 2 estan prohibidas. - ES : Habilita o prohibe la interrupcion del port serie. Si ES 0, las interrupciones del port serie estan prohibidas. ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 41 - ET1 : Habilita o prohibe la interrupcion de desbordamiento del Timer 1. Si ET10 la interrupcion del Timer 1 esta prohibida. - EX1 : Habilita o prohibe la Interrupcion Externa 1. Si EX10 la Interrupcion Externa 1 esta prohibida. - ET0 : Habilita o prohibe la interrupcion de desbordamiento del Timer 0. Si ET00 la interrupcion del Timer 0 esta prohibida. - EX0 : Habilita o prohibe la Interrupcion Externa 0 Si EX00 la Interrupcion Externa 0 esta prohibida. Estructura deI niveI de prioridad Cada fuente de interrupcion tambien puede programarse individualmente a uno de los dos niveles de prioridad mediante la puesta a 1 o a 0 de un bit del Registro de Funcion Especial IP. (Ver figura 1.3.36). Una interrupcion de prioridad baja puede ser interrumpida por otra de prioridad mas alta, pero no por otra de prioridad mas baja. La interrupcion de prioridad mas alta no puede ser interrumpida por ninguna otra fuente de interrupcion. Veamos el significado de cada uno de estos bits: - X : Reservado. - X : Reservado. - PT2 : Define el nivel de prioridad de interrupcion del Timer 2. PT21 lo programa al nivel mas alto de prioridad. - PS : Define el nivel de prioridad de interrupcion del Port serie. PS1 lo programa al nivel mas alto de prioridad. - PT1 : Define al nivel de prioridad de interrupcion del Timer 1. PT11 lo programa al nivel mas alto de prioridad. - PX1 : Define el nivel de prioridad de la interrupcion Externa 1. PX11 la programa al nivel mas alto de prioridad. - PT0 : Define el nivel de prioridad de interrupcion del Timer 0. PT01 lo programa al nivel mas alto de prioridad. - PX0 : Define el nivel de prioridad de la interrupcion Externa 0. PX01 la programa al nivel mas alto de prioridad. ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 42 Si se reciben simultaneamente dos peticiones de interrupcion de diferente nivel de prioridad, sera atendida la peticion que tenga el nivel mas alto de prioridad. Si se reciben simultaneamente dos peticiones de interrupcion del mismo nivel de prioridad, una secuencia interna de escrutinio sera la que determinara que peticion ha de ser atendida. Asi. con cada nivel de prioridad hay una segunda estructura de prioridades determinada por la siguiente secuencia de escrutinio: Notese que la estructura de 'prioridad sin nivel solamente se utiliza para resolver peticiones simultaneas del mismo nivel de prioridad. Tratamiento de Ias interrupciones Los flags de las interrupciones se muestrean en el S5P2 de cada ciclo maquina. Los muestreos se consultan durante el siguiente ciclo maquina. Si uno de los flags hubiera estado en condicion activa en el S5P2 del ciclo precedente, el ciclo de consulta la encontrara y el sistema de interrupciones generara una LCALL a la subrutina de servicio apropiada, siempre que esta LCALL generada por hardware no sea bloqueada por alguna de las condiciones siguientes: 1. Que se este ejecutando una interrupcion de igual o mas alto nivel de prioridad. 2. Que el ciclo actual no sea el ultimo de la instruccion que se esta ejecutando. 3. Que la instruccion que se esta ejecutando sea una RETI o cualquier acceso a los registros IE o IP. Cualquiera de estas tres condiciones puede bloquear la generacion de instruccion LCALL de llamada a la subrutina de servicio de la interrupcion. La segunda condicion asegura que se finalice la instruccion que se esta ejecutando antes de que se vectorice la subrutina de servicio. La tercera condicion asegura que si la instruccion en curso es una RETI o cualquier acceso a IE o IP, entonces se ejecutara una instruccion mas antes de vectorizar la subrutina de servicio. Fig. 1.3.37 Diagrama de tiempo de la respuesta de una interrupcion. ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 43 El ciclo de consulta se repite en cada ciclo maquina, y los valores consultados son aquellos que estaban presentes en el S5P2 del ciclo maquina precedente. Notese que si un flag de interrupcion es activo pero no se responde debido a una de las condiciones anteriores, si este no esta todavia activo cuando la condicion de bloqueo desaparece, la interrupcion denegada no sera servida. En otras palabras, el hecho de que un flag de interrupcion este activo pero no sea servido, no es una condicion memorizada. Cada ciclo de consulta es nuevo. El ciclo de consulta y secuencia LCALL se muestra en la figura 1.3.37. Notese que si una interrupcion de mas alta prioridad pasa a ser activa antes del S5P2 del ciclo maquina llamado C3, entonces, de acuerdo con las reglas anteriores, esta se vectorizara durante C5 y C6, sin que se ejecute ninguna instruccion de la subrutina de prioridad mas baja. Asi, el procesador reconoce la peticion de interrupcion ejecutando una instruccion LCALL, generada por hardware, a la subrutina de servicio apropiada. En algunos casos, esta tambien pone a cero el flag que ha generado la interrupcion, y en otros casos no lo hace. Nunca lo hace con los flags del Port serie y con los del timer 2, que deben ponerse a 0 por el programa del usuario. La vectorizacion de la subrutina pone a 0 el flag externo de interrupcion (IE0 o IE1) solamente si la interrupcion es activada por flancos. La instruccion LCALL guarda el contenido del Contador de Programa en el Stack (pero no guarda el PSW) y recarga el PC con una direccion que depende de la fuente de interrupcion como se muestra a continuacion: La ejecucion de la subrutina empieza en esta direccion hasta que se encuentra una instruccion RETI. La instruccion RETI informa al procesador que su subrutina de interrupcion ha finalizado. Entonces recupera los dos bytes del stack y recarga el Contador de Programa. La ejecucion del programa continua en donde se habia dejado. Notese que una instruccion RET tambien realizara el retorno a la ejecucion del programa que se habia interrumpido, pero dejara al sistema de control de interrupciones pensando que todavia se esta atendiendo a una interrupcion. Interrupciones externas Las fuentes externas de interrupcion pueden programarse para que sean activadas por nivel o activas por flancos, mediante la puesta a 1 o a 0 del bit IT1 o IT0 del registro TCON. Si Itx 0, la interrupcion externa x se dispara cuando se detecta un nivel bajo en el pin INTx. Si Itx 1, la interrupcion externa x se dispara por flanco. En este modo, si sucesivos muestreos del pin ITx ven un 1 en un ciclo y un 0 en el ciclo siguiente, el flag de peticion ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 44 de interrupcion IEx del registro TCON se pondra a 1. Entonces, el bit IEx, generara una peticion de interrupcion. Debido a que los pins de las interrupciones externas se muestrean una vez cada ciclo maquina, una entrada a nivel alto o bajo debe permanecer estable al menos 12 periodos del oscilador para asegurar el muestreo. Si la interrupcion externa esta activada por flancos, la fuente externa debe mantener el pin a nivel alto por lo menos un ciclo, y despues mantenerlo a nivel bajo por lo menos otro ciclo para asegurar que se pueda ver la transicion y, por tanto, que el flag Iex se ponga a 1. La CPU pondra automaticamente a 0 el flag Iex cuando se llame a la subrutina de servicio. Si la interrupcion externa esta activada por nivel, la fuente externa debe mantener la peticion activa hasta que se genere la interrupcion. Entonces esta tiene que desactivar la peticion antes de que acabe la subrutina de servicio de la interrupcion, o se generara otra interrupcion. Tiempos de respuesta Los niveles de INT0` e INT1` son invertidos y latcheados en IE0 e IE1 en el S5P2 de cada ciclo maquina. Los valores no se consultan hasta el siguiente ciclo maquina. Si se activa una peticion y las condiciones son correctas para que se reconozca, la siguiente instruccion que se ejecutara sera la de subrutina de servicio de interrupcion vectorizada por una llamada de hardware . La llamada dura dos ciclos. De esta manera, entre la activacion de la fuente externa de interrupcion y la ejecucion de la primera instruccion de la subrutina de servicio de interrupcion pasan un minimo de tres ciclos maquina completos. La figura 1.3.37 nos muestra el diagrama de tiempo de la respuesta a una interrupcion. Puede suceder que el tiempo de respuesta sea mas largo si la peticion es bloqueada por alguna de las tres condiciones citadas anteriormente. si se esta realizando la atencion a una interrupcion de igual o mas alta prioridad, el tiempo de espera adicional, obviamente dependera de la naturaleza de la subrutina que se esta realizando. Si la instruccion que se esta ejecutando no esta en su ultimo ciclo, el tiempo de espera adicional no puede ser de mas de tres ciclo, ya que, las instrucciones mas largas (MUL y DIV) solamente tienen 4 ciclos, y si la instruccion que se esta realizando es una RETI o acceso a IE o IP, el tiempo de espera adicional no puede ser de mas de 5 ciclos (un maximo de 1 ciclo mas para completar la instruccion en curso, mas 4 ciclos para ejecutar la siguiente instruccion si esta es MUL o DIV). Asi, en un sistema simple de interrupciones, el tiempo de respuesta es siempre mas de 3 ciclos y menos de 8 ciclos. Modos de funcionamiento de Ia aIimentacin/retencin de datos Para las aplicaciones en las que le consumo es un factor critico, las versiones HMOS y CHMOS tienen un modo de funcionamiento de reduccion de consumo. Para las versiones CHMOS del 8051, la reduccion de consumo, el estado de no operacion (IDLE MODE) y la reduccion de la tension de alimentacion (POWER DOWN MODE), son caracteristicas estandar. En las versiones HMOS se puede conseguir una reduccion del consumo, pero no es una caracteristica estandar. ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 45 Reduccin de Ia aIimentacin para versiones HMOS La reduccion de la tension de alimentacion (POWER DOWN MODE) para los dispositivos HMOS nos permite reducir VCC a cero, salvando la informacion de la RAM interna gracias a un circuito de control de alimentacion conectado al pin RST. Para utilizar esta caracteristica, el sistema del usuario, despues de detectar que es inminente un fallo de la alimentacion debe interrumpir al procesador para hacer que este guarde los datos mas importantes en las RAM interna y habilite la tension de alimentacion de mantenimiento a traves del pin RST antes de que VCC caiga por debajo de los limites permitido de operacion. Cuando vuelva la alimentacion, la alimentacion de mantenimiento ha de mantenerse un tiempo hasta que se realice el reset, y entonces puede activarse y continuar el modo normal de funcionamiento. Reduccin deI consumo para versiones CHMOS Las versiones CHMOS tienen dos modos de reduccion de consumo, el estado de no operacion (IDLE MODE) y la reduccion de la tension de alimentacion (POWER DOWN MODE). La entrada por la cual se alimenta la tension de mantenimiento durante estas operaciones es VCC. En la figura 1.3.38 se muestra la circuiteria interna que implementa estas caracteristicas. En el modo de no operacion (IDL 1), el oscilador continua funcionando y los bloques de interrupciones, Port serie y Timers quedan bloqueados, pero la seal de reloj sale hacia la CP. En el modo de reduccion de la tension de alimentacion (PD 1), el oscilador se para. Estos modos se activan mediante la puesta a 1 de unos bits del Registro de Funcion Especial PCON, cuya direccion es la 87H y su contenido es mostrado en la figura 1.3.39. Fig. 1.3.38 Hardware de los modos 'IDLE' v 'POhER DOhN'. MODO DE NO OPERACION (IDLE MODE) Una instruccion que ponga a 1 el bit IDL del registro PCON hace que esta sea la ultima instruccion ejecutada antes de pasar al modo de no operacion. En este modo, el reloj interno pasa a la CPU, pero no lo hacen las funciones de Interrupcion, Port serie y Timers. El ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 46 estado de la CPU se conserva en su totalidad: el Stack Pointer, el Contador de Programa, el PSW, el Acumulador, y todos los demas registros conservan los datos que tenian. Los pins de los ports mantienen los estados logicos que tenian en el momento de activarse este modo. Las seales ALE y PSEN se mantienen a estado logico uno. Hay dos maneras de finalizar este modo de operacion. La activacion de cualquier interrupcion habilitada hace que el bit IDL se ponga a 0 por hardware y termine este modo de funcionamiento. La interrupcion sera atendida por su subrutina de servicio, y la instruccion siguiente a la instruccion RETI sera la siguiente a aquella que puso al dispositivo en modo de no operacion. Los bits GF0 y GF1 de PCON se pueden utilizar para dar una indicacion de que ha ocurrido una interrupcion durante el modo normal de funcionamiento o durante el modo de no operacion. Por ejemplo, una instruccion que active este modo tambien puede poner a 1 uno de estos bits o ambos. Cuando una interrupcion hace que finalice este modo de funcionamiento, la subrutina de servicio de la interrupcion puede examinar estos bits. La otra manera de terminar este modo es con un reset por hardware. Debido a que el reloj esta en funcionamiento, el reset necesita estar activo durante dos ciclos maquina (24 periodos del oscilador) para que se complete. Fig. 1.3.39 Registro PCON. Veamos el significado de cada uno de estos bits: - SMOD : Bit para doblar el baud rate. Cuando esta a 1, el baud rate se dobla cuando el Port serie se utiliza en los modos 1, 2 o 3. - X : Reservado. - X : Reservado. - X : Reservado. - GF1 : Bit de proposito general. - GF0 : Bit de proposito general. - PD : Bit de la reduccion de la tension de alimentacion (POWER DOWN). Poniendo a 1 este bit, se activa este modo de operacion. - IDL : Bit de seleccion del modo de no operacion (IDLE). Poniendo a 1 este bit, se activa este modo. ESTRUCTURA INTERNA DE LA FAMILIA MCS-51. German Pereira Muoz ICEI Instituto de Capacitacion en Electronica e Informatica 47 Nota: Si se escriben simultaneamente unos en PD e IDL, el bit PD es el que tiene preferencia. MODO DE REDUCCION DE LA ALIMENTACION (POWER DOWN MODE) Una instruccion que ponga a 1 el bit PD del registro PCON hace que esta ultima instruccion ejecutada antes de pasar al modo de reduccion de la tension de alimentacion. En este modo, el oscilador interno se para. Con el reloj parado, se paran todas las funciones, pero se mantiene la informacion de la RAM interna y de los Registros de Funcion Especial. Los pins de los ports sacan los valores se sus respectivos SFR. Las salidas ALE y PSEN sacan ceros. La unica forma de salir de este modo es a traves de un reset por hardware. El reset redefine todos los SFR, pero no cambia la informacion de la RAM interna. En este modo, VCC se puede reducir para minimizar el consumo. Sin embargo, se debe tener cuidado de asegurar que VCC no se reduzca antes de llamar a este modo y que VCC se restablezca a su nivel normal antes de terminarse este tipo de operacion. El reset que finaliza la reduccion de la alimentacion tambien pone en marcha el oscilador. El reset no debe activarse antes de que se restablezca VCC a su nivel normal, y debe mantenerse activo el suficiente tiempo para permitir que el oscilador se ponga en marcha y se estabilice (normalmente menos de 10ms).