Laboratorio de Microprocesadores El MICROCONTROLADOR 8051 PRACTICA N0. 10 NOMBRE DE LA PRÁCTICA Microcomputadora con el 8051 OBJETIVO ESPECÍFICO: Conocer las componentes y la programación de un Microcontrolador 8051 INTRODUCCIÓN: SISTEMAS BASADOS EN MICROCONTROLADOR Un sistema de computadora basado en microcontrolador es diferente funcionalmente a un sistema basado en un microprocesador. El primero se utiliza de una forma más eficiente en un sistema que ejecuta un programa dedicado (o fijo) repetitivamente sin la necesidad de ser reprogramado. A un microcontrolador con frecuencia es llamado computadora en un “chip”. El nombre anterior se le otorga ya que contiene todos los componentes de un sistema de computadora (bus, CPU, memoria y puertos E/S) en un solo circuito integrado. APLICACIONES TIPICAS DE LOS MICROCNTROLADORES Ejemplos en los cuales se incluye el uso de programas fijos repetitivos son los siguientes: • • • • • • • • Videograbadoras Máquinas contestadoras Instrumentación médica Automóviles Hornos de micro-ondas Básculas digitales Bombas de gasolina Cajeros automáticos EL MICROCONTROLADOR 8051 El 8051 fue creado por INTEL en 1981 y tiene las características siguientes: o o o o o CPU de 8 bits Procesador Booleano con el cual puede realizar operaciones bit a bit 128 bytes de RAM interna 4 Kbytes de memoria de programa interna (ROM) 5 fuentes de interrupción con 2 niveles de prioridad Carlos E. Canto Quintal M.C. - 102 - Laboratorio de Microprocesadores o o o o o o o El MICROCONTROLADOR 8051 32 bits de entrada/salida direccionables bit a bit 1 puerto serie Full dúplex (UART) 2 Contadores-Temporizadores de 16 bits programables 1 oscilador para las señales de reloj Posibilidad de direccionar hasta 64Kbytes de memoria de programa externa Posibilidad de direccionar hasta 64Kbytes de memoria de datos externa varias velocidades desde 12MHz Posteriormente han sido desarrolladas otras versiones del 8051 con distintas características de RAM, ROM, etc.. ARQUITECTURA INTERNA DEL 8051 Entradas a contadores Interrupciones externas 128 128 bytes bytes RAM RAM SFR 4K 4K ROM ROM Controlador Controlador de de interrupciones interrupciones Timer0 Timer0 Timer1 Timer1 Interrupciones internas 8051 8051 CPU CPU Control Control del del bus bus OSC OSC RD 44 Puertos Puertos E/S E/S (32 (32 líneas) líneas) WR P0 P2 P1 P3 Puerto Puerto serie serie TxD RxD Bus de datos/direcciones LA DISTRIBUCIÓN DE MEMORIA DEL 8051 El 8051 está diseñado en base a lo que se conoce como Arquitectura Hardvard. Dicha arquitectura divide el espacio total de memoria en dos áreas distintas: de código o de programa y de datos. MEMORIA DE CODIGO O DE PROGRAMA. El 8051 tiene 4096 bytes de memoria de código interna. El rango se puede incrementar, usando memoria externa, hasta un total de 64 KB. MEMORIA MEMORIA DE DE PROGRAMA PROGRAMA DEL DEL 8051 8051 FFFF FFFF 60 60K K Bytes Bytes Externa Externa El tamaño de la memoria de programa externa puede ampliarse hasta 64kbytes. O 1000 & 0FFF 0000 4K 4KBytes Bytes Interna Interna Los primeros 4k (8 K para el 8052 ) pueden residir en el chip. Carlos E. Canto Quintal M.C. - 103 - 0000 64 64K K Bytes Bytes Externa Externa Laboratorio de Microprocesadores El MICROCONTROLADOR 8051 MEMORIA DE DATOS INTERNA. La capacidad de memoria de datos interna es de 256 bytes. La mitad baja, 128 bytes, se usa para almacenamiento por el programa de variables de datos. La parte superior se reserva para los Registros de Funciones Especiales (SFR). Memoria de Datos Interna FFH 128 bytes Más altos 80H 7FH 128 bytes Más bajos 00H Accesible Accesible Accesible Accesiblesolo solocon con Solo Solo con con Direccionamiento Direccionamiento Direccionamiento Direccionamiento Directo Directo Indirecto Indirecto Accesible Accesiblecon con Direccionamiento Direccionamiento Directo DirectoeeIndirecto Indirecto Registros de Función Especial Puertos Bits de status y control Registros de Timers Stack pointer Acumulador Etc. REGISTROS DE FUNCIONES ESPECIALES. Los SFRs se usan para almacenar los valores, en bytes, que controlan la operación del 8051. Aquellos registros cuya dirección es divisible por 8 se puede direccionar por bit. El espacio de memoria para los SFRs está contenido de los bytes 128 (80H) al 255 (FFH). Este espacio de memoria es accesible solo a través de direccionamiento directo. Algunas de las direcciones en el espacio de SFRs son direccionables tanto en forma de byte como de bit. Así que otras solo son direccionables en forma de byte. Estos registros tienen valores que el 8051 utiliza conforme ejecuta instrucciones. MEMORIA DIRECCIONABLE POR BIT. Aparte de los SFRs direccionables por bit, también se pueden direccionar 16 bytes de memoria interna de datos de esta manera. Esto le permite al programador manipular los datos en un sentido bit a bit, lo cual es una de las características más sobresalientes del 8051. MEMORIA EXTERNA DE DATOS. Si se requiere de más memoria para almacenamiento de datos, el 8051 puede direccionar en forma externa un adicional de 64 KB de RAM. FFFFH Relación de áreas de almacenamiento en el µC 8051 FFFFH El 8051 tiene espacios de direcciones separados para memoria de programa y memoria de datos. Externa Externa Externa Externa 1000H 0FFFH FFH Interna Internaoo externa externa 0000H Memoria de programas 80H 7FH 0000H 00H Memorias de Datos Interna Carlos E. Canto Quintal M.C. Espacio de Registros de Función Especial SFR - 104 - Memorias de Datos Externa Laboratorio de Microprocesadores El MICROCONTROLADOR 8051 DIAGRAMA FUNCIONAL DE PINES DEL 8051 El 8051 se encuentra disponible en un encapsulado tipo DIP de 40 pines. Sus VCC VSS RST/VPO XTAL1 PUERT0 0 XTAL2 EA/VDD ALE/PROG PSEN RXD TXD 8031 8031 PUERT0 1 INT0 INT1 PUERT0 3 T0 PUERT0 2 T1 WR RD FUNCIONES ALTERNAS DE LOS PUERTOS DEL 8051 Cada uno de los puertos de E/S tiene una función alternativa que le permite mayor versatilidad al 8051. El Puerto 0 sirve para multiplexar la parte baja de direcciones y al bus de datos durante el acceso a código y memoria de datos externos. El Puerto 1 tiene funciones alternativas solo en el 8052. Los bits 0 y 1 sirven como T2 y T2EX respectivamente. El Puerto 2 emite el byte de la parte alta de direcciones durante el acceso a memoria, de código o datos, externa que utiliza direcciones de 16 bits. El puerto 3 tiene las funciones listadas en seguida: P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 RXD (Entrada de puerto serie) TXD (Salida de puerto serie) INT0 (Interrupción externa 0) INT1(Interrupción externa 1) T0 (Entrada para temporizador 0) T1 (Entrada para temporizador 1) WR (pulso de escritura para memoria ext.) RD (pulso de lectura para memoria ext) MIEMBROS Y PRODUCTOS DE LA FAMILIA MCS-51 Los tres miembros originales de la familia son el 8031, 8051 y 8751, en seguida se describen sus características. 8031 y 8051. • Estos dispositivos proveen una solución efectiva en costo para aquellas aplicaciones de control que requieren de hasta 64 KB de código y/o 64 KB de almacenamiento. El 8031 contiene: • 128 bytes de memoria de datos de lectura/escritura • 32 líneas de E/S bidireccional (4 puertos) • dos contadores/temporizadores de 16 bits • Una estructura de interrupciones con dos niveles de prioridad y cinco fuentes • Puerto serie de E/S programable • Oscilador integrado con circuitería de reloj Carlos E. Canto Quintal M.C. - 105 - Laboratorio de Microprocesadores El MICROCONTROLADOR 8051 El 8051 tiene todas las características del 8031 más 4 KB de memoria de código de solo lectura, no volátil. El 8751 es una versión EPROM del 8051, tiene todas las características del 8031 más 4 KB de memoria de código de solo lectura, programable y borrable. VERSIONES CHMOS Los dispositivos anteriores se encuentran disponibles en una versión CHMOS de ahorro de energía: 80C31, 80C51 y 87C51 respectivamente. Estos dispositivos CHMOS operan a una velocidad mayor, tiene una mayor densidad de transistores y consumen menos potencia que los dispositivos previamente listados. Cada uno de estos componentes tiene la misma funcionalidad que su equivalente estándar más dos modos seleccionables mediante programación que reducen el consumo de potencia: Espera (Idle) y Potencia Baja (Power Down). Estos modos hacen de dichos componentes ideales para aplicaciones operadas por batería. MODO DE ESPERA (IDLE) Este modo congela al CPU mientras que permite que continúen funcionando la memoria RAM, contadores, puerto serie y sistema de interrupciones. MODO DE POTENCIA BAJA Este modo protege el contenido de memoria RAM, pero congela el oscilador, causando que todas las demás funciones del chip no operen. Miembros de la subfamilia 8052 y 80C51FA El 8032 y el 8752 son productos subfamiliares del 8052. El 83C51FA y el 87C51FA son miembros del 80C51FA así como el 83C51FB y el 87C51FB son miembros de la subfamilia del 80C51FB. 8032, 8052 y 8752. El 8052 tiene 8 KB de ROM programada de fábrica y el 8032 es una versión sin ROM del 8052, mientras que el 8752 tiene 8 KB de memoria de programa EPROM. Sus características se listan en seguida: • 256 bytes de memoria de datos de lectura/escritura • 32 líneas bidireccionales de E/S (4 puertos) • 3 temporizadores/contadores de 16 bits • Estructura de interrupciones con dos niveles de prioridad y seis fuentes originadoras. • Puerto serie programable de E/S • Oscilador integrado con circuitería de reloj 83C51FA, 80C51FA y 87C51FA El 8032, 8052 y 8752 también tienen sus versiones CHMOS: 83C51FA y FB, 80C51FA y FB y 87C51FA y FB, respectivamente. Estos dispositivos presentan características similares a los anteriores CHMOS. Los dispositivos FB son versiones compatibles con la serie FA, pero tienen 16 KB de ROM, además se incluye una nueva característica el Arreglo de Contador Programable. ARREGLO DE CONTADOR PROGRAMABLE (PCA) Consiste de un contador de 16 bits y cinco módulos de 16 bit de comparación/captura. Estos últimos comparten los pines P1.2 a P1.7. Cada módulo tiene su propio registro de modo, CCAPMn, que se utiliza para configurar el módulo n. Cada módulo puede programarse como: • Modulador de ancho de pulso (usado para conversión d/a) • Registro de comparación/captura (para medición muy precisa en tiempo real de ancho de pulso) • salida de alta velocidad Carlos E. Canto Quintal M.C. - 106 - Laboratorio de Microprocesadores El MICROCONTROLADOR 8051 Adicionalmente, el módulo 4 se puede programar para actuar como un temporizador tipo Perro Guardián (Watchdog Timer). El PCA puede generar una interrupción cuando se programa como temporizador ó como registro de comparación/captura. OTROS PARIENTES DE LA FAMILIA 8051 Existen otros componentes que han tomado la base del microcontrolador 8051 y le han sumado alguna otra funcionalidad. Estos componentes híbridos se conocen como proliferaciones. Los siguientes componentes utilizan la arquitectura del 8051 así como un controlador de comunicaciones serie en el caso del 8X44, un controlador de comunicaciones serie de alta velocidad en el 8XC152 y un controlador de periféricos en el 8XC452. Sumario de la Familia 8051 Nombre 8051 80C51 8052 83C51FA 83C51FB 83C152 83C452 8044 Versión sin ROM 8031 80C31 8032 80C51FA 80C51FB 80C152 80C452 8344 Versión EPROM 8751 87C51 8752 87C51FA 87C51FB 87C152 87C452 8744 Bytes en ROM 4K 4K 8K 8K 16K 8K 8K 4K Bytes enRAM 128 128 256 256 256 256 256 192 Timers 2 2 3 3 2 2 2 2 TEMPORIZADORES/CONTADORES El 8051 tiene dos temporizadores/contadores de 16 bits, cada uno de ellos puede operar en cuatro modos, dándole un rango amplio de opciones para resolver muchos problemas diferentes. Los registros de funciones especiales TL0 y TH0 son los bytes alto y bajo del temporizador/contador 0. El temporizador 1 está formado por TL1 y TH1. Cada uno puede programarse para usar ciclos de máquina (temporizador) ó señales externas en su pin de puerto (contador), como fuente de conteo. fxtal fosc= fxtal Xtal1 Xtal1 Xtal2 Xtal2 Oscilador Oscilador interno interno fxtal / 12 ::12 12 C/T=0 timer Conteo Conteoinicial inicial CONTADOR CONTADOR CLK OVF C/T=1 contador TF0 TF0 Tx Tx Genera Genera Interrupción Interrupción GATE GATE CC/ /TT TRx TRx INTx INTx Un temporizador cuenta hacia arriba desde su valor inicial hasta que llega a un sobreflujo. Al ocurrir se pone a uno la bandera correspondiente (TF0 ó TF1), y el conteo continúa. TF0 y TF1 se encuentran en el registro TCON. Carlos E. Canto Quintal M.C. - 107 - Laboratorio de Microprocesadores El MICROCONTROLADOR 8051 REGISTRO PARA CONTROL DE LOS TEMPORIZADORES (TCON) Un temporizador puede ser escrito ó leído en cualquier momento. El bit TR0 es el interruptor de funcionamiento para el temporizador 0: si se pone a 1 se enciende el temporizador 0. TR1 hace lo mismo para el temporizador 1. Estos bits se pueden accesar en forma independiente. Modo 0. (Contador de 8 bits con Pre-escalamiento de 5 bits) Este modo es el de omisión después de inicializar el procesador (reset). El byte bajo utiliza solo cinco bits para ejecutar un pre-escalamiento ó división por 32 en la fuente de conteo. Cada uno de sus sobreflujos suma una cuenta al byte alto. Se pueden programar tanto el byte alto como el bajo. Al escribir los valores iniciales adecuados se puede ajustar el sobreflujo sobre un rango de 1 a 8 K (1 uS a 8.19 mS con un reloj de 12 Mhz). Interrupciones de los temporizadores La bandera de sobreflujo para cada temporizador sirve también como el flip-flop de petición de interrupción para ese temporizador. Si el bit de habilitación de interrupción es uno (Etx para el temporizador x) y EA=1, la ejecución del programa saltará a la localidad del vector de interrupción del temporizador correspondiente (por supuesto que al finalizar de ejecutar la instrucción actual, y si no se esta dando servicio a otra interrupción de igual o mayor prioridad). El hardware limpia la bandera Tfx, cuando salta hacia la rutina de servicio de interrupción del temporizador x. El uso de una interrupción (en lugar de consulta) para disparar algún proceso después de un retardo requerido permite que se manejen otros procesos durante el retardo. Modo 1. (Contador de 16 bits) En este modo, TLx se pone en cascada con THx, dando un rango máximo de conteo de 64 K, ó 65 ms (a 12 Mhz). Si se escriben valores iniciales en THx y Tlx, la cuenta antes del sobreflujo puede ajustarse tan baja como una. Carlos E. Canto Quintal M.C. - 108 - Laboratorio de Microprocesadores El MICROCONTROLADOR 8051 Se puede utilizar para el conteo ya sea ciclos de máquina ó la entrada externa. La bandera de sobreflujo se puede utilizar para consultarse ó para generar una interrupción. Modo 2. (Contador de 8 bits con auto-recarga) En este modo el conteo se hace solo por Tlx (ocho bits). THx se carga por el programa con un valor que el hardware cargará en TLx cada vez que exista sobreflujo. La cuenta antes del sobreflujo se puede seleccionar entre uno y 256 (cargar 0 para obtener una cuenta de 256). Se puede utilizar para el conteo ya sea ciclos de máquina ó la entrada externa. La bandera de sobreflujo se puede utilizar para consultarse ó para generar una interrupción. Modo 3: caso especial. Este es el único modo en el que los dos temporizadores se comportan de una forma diferente el uno del otro. Al colocar el temporizador 0 en modo 3 se divide en dos unidades de ocho bits: TL0 se convierte en un contador/temporizador de 8 bits y TH0 en un temporizador únicamente de 8 bits (no usa el pin externo de entrada). TL0 utiliza el bit de puesta en marcha, la bandera de sobreflujo y el pin externo de entrada del temporizador 0. TH0 utiliza el bit de puesta en marcha y la bandera de sobreflujo del temporizador 1 (incluyendo el vector de interrupción asociado). El temporizador 1 corre libremente si se encuentra en los modos 0, 1 ó 2 cuando el temporizador 0 se pone en modo 3. El temporizador 1 se desactiva al ponerlo en modo 3. Carlos E. Canto Quintal M.C. - 109 - Laboratorio de Microprocesadores El MICROCONTROLADOR 8051 DISPARO DE LOS TEMPORIZADORES. Cada temporizador tiene un bit en el registro TMOD que es el control de disparo. Al inicio el bit es 0, el disparo se encuentra apagado, y los temporizadores se activa y desactivan como ya se ha descrito. Cuando el bit de disparo (gate) se pone a uno, el temporizador se activa solo cuando tanto su bit de puesta en marcha (Trx) y su correspondiente entrada externa de interrupción se encuentran en uno. Esto le permite al temporizador medir la duración de pulsos aplicados a su entrada (pin) de interrupción en términos de la fuente de conteo del temporizador. También, la misma entrada continuará disparando la interrupción externa correspondiente, si se encuentra habilitada. La rutina de servicio de interrupción puede leer (y poner a cero) la cuenta acumulada mientras la señal permaneció en alto. El registro TMOD selecciona las opciones. TMOD es el registro de selección de MODo de los temporizadores; es un SFR que se encuentra en la dirección 89H. Su cuatro bits más significativos seleccionan las opciones para el temporizador 1, y los cuatro bits más bajos hacen lo mismo para el temporizador 0. Este registro no se puede accesar por bits. Los bits 0 y 1 de cada nibble seleccionan el modo (0, 1 ,2 ó 3) para cada temporizador. El bit 2 selecciona si el temporizador cuenta ciclos de máquina (bit=0) ó cuenta pulsos externos (bit=1). El bit 3 es el control de disparo para el temporizador: un 1 activa el modo de disparo. En la función de “contador”, el registro TLx se incrementa en respuesta a una transición de 1 a 0 en el pin externo de entrada Tx. La razón máxima de conteo es 1/24 de la frecuencia del cristal. TMOD PUERTO SERIE Carlos E. Canto Quintal M.C. - 110 - Laboratorio de Microprocesadores El MICROCONTROLADOR 8051 El puerto serial es un puerto “FULL DUPLEX” , lo cual significa que puede transmitir y recibir datos simultáneamente . El receptor contiene un almacén “Buffer”, que le permite comenzar a recibir un segundo dato sin necesidad de que el primero haya sido completamente leído del registro Buffer. Sin embargo si el primer byte permanece sin ser leído hasta el final de la recepción del segundo dato, éste se perderá. Tanto el dato recibido como el transmitido son depositados en el registro SBUF del SFR (espacio de funciones especiales). REGISTRO DE CONTROL DEL PUERTO SERIAL SCON El puerto Serie puede ser operado en 4 modos diferentes que son especificados con los bits SM0 y SM1 del registro de Control del Puerto Serie (SCON) SMO SM1 SM2 SCON.7 SCON.6 SCON.5 REN SCON.4 TB8 SCON.3 RB8 SCON.2 TI SCON.1 RI SCON.0 Especifica el modo de control del puerto serie. Especifica el modo de control del puerto serie. Habilita la comunicación del tipo "multiprocesador" utilizado en los modos 2 y 3. En estos modos, si SM2 = 1, RI no es activado si el noveno dato recibido (RB8) es 0. En modo 1, RI no es activado si no se recibe un bit de stop. En el modo 0, SM2 será 0. Establece la recepción serie, cuando REN = 0 se desactiva la recepción ( por software ). Almacena el noveno bit que será transmitido en los modos 2 y 3 . Es el noveno bit que fue recibido en los modos 2 y 3 . En el modo 1, si SM2 = 0, RB8 es el bit de stop recibido. En el modo 0 RB8 no es usado. Bandera de interrupción de la transmisión. Activada por hardware al final del octavo bit en el modo 0, o al principio del bit de stop en los otros modos. Debe ser limpiado por software. Bandera de interrupción de la recepción. Activada por hardware al final del octavo bit en el modo 0, o al medio tiempo de trasmitido el bit de stop en los otros modos.Debe ser limpiado por software. MODOS DE OPERACIÓN DEL PUERTO SERIE El UART del 8051 puede ser operado en un modo síncrono y 3 modos asíncronos EL MODO 0. Los datos seriales que entran o salen a través de RxD o TxD respectivamente, lo hacen mediante 8 corrimientos, con una frecuencia de transmisión (Baud Rate) fija Carlos E. Canto Quintal M.C. - 111 - Laboratorio de Microprocesadores El MICROCONTROLADOR 8051 de de 1/12 de la frecuencia del oscilador. La figura Modo 0. muestra el Puerto Serie en La transmisión es iniciada por cualquier instrucción que utilice SBUF como registro de “Destino”, v.gr. MOV SBUF,A . Para que la recepción pueda ser iniciada se debe cumplir la condición REN=1 y RI=0. Bus Businterno internode dedatos datos “1” RXD RXD escritura al SBUF DATO TRANSMITIDO Buffer Bufferserial serial SBUF SBUF D Q clk estados S6 de los ciclos de máquina MSB LSB Detector Detectorde decero cero TI Control ControlTX TX start reloj TXD TXD shift enviar Shift clk RELOJ DE SINCRONÍA CON RECEPTOR Señal Señalde deinterrupción interrupción del delpuerto puertoserial serial RI Control ControlRX RX recibir La recepción es iniciada por la detección de un transiente negativo (de 1 a 0) en la línea RxD, la cual es muestreada a una frecuencia de 16 veces la frecuencia de “Baud Rate” que ha sido establecida. Cuando un transiente es detectado el divisor entre 16 es inmediatamente reestablecido y 1FFH es escrito en la entrada del registro de corrimiento. OPERACIÓN SERIE ASÍNCRONA Los modos de comunicación serie del 8051 pensados para comunicación entre procesos ó entre sistemas son asíncronos. Esto significa que el dispositivo transmisor envía datos solos, sin una señal de sincronización. Tramas de datos: El puerto serie del 8051 puede utilizar tramas de datos que contengan ya sea 8 ó 9 bits de datos. El UART siempre le suma un bit de inicio, que es bajo, y un bit de paro, que es alto. El UART pone la línea de salida serial a un alto siempre que no 8 bits de datos Línea ociosa 0 b0 b1 b2 b3 b4 b5 b6 b7 1 Bit de parada Bit de arranque se está enviando ninguna trama. El programa debe iniciar la transmisión de cada trama que se vaya a enviar (por ende controla el tiempo de retardo entre las tramas enviadas). Pero el UART maneja la transmisión bit a bit (y la recepción), sin involucrar a la CPU. Carlos E. Canto Quintal M.C. - 112 - Laboratorio de Microprocesadores El MICROCONTROLADOR 8051 El registro de corrimientos de transmisión recibe una “onda cuadrada” del generador de baudaje. Cada bit de dato en una trama (incluyendo los bits de inicio y paro) se aplica al pin TXD por 16 de estos pulsos. El circuito de recepción (si está habilitado) espera una transición de bajada que señale el comienzo de un bit de inicio y con esto una nueva trama. Utiliza los pulsos de su generador de baudaje para determinar cual debería ser el centro de cada bit esperado. Toma tres muestras alrededor de este punto, y recorre este valor, basándose en dos de tres de dichas muestras. SBUF: El registro (buffer) del puerto serie. SBUF=fuente copia el dato de fuente al registro de corrimiento de transmisión de datos y, también, es el comando de inicio de transmisión; el registro de transmisión es de solo escritura. destino =SBUF lee el dato del registro de recepción; el cual es de solo lectura. Los dos registros de datos del puerto serie, uno para transmitir y otro para recibir, tienen el mismo nombre, SBUF, y la misma dirección, 99H en el espacio de SFR. Cual de ellos se accesa, se especifica por el hecho de que si se lee ó se escribe. Los circuitos de transmisión y recepción son independientes, así que la transmisión y recepción pueden proceder en forma simultánea (full duplex) mientras que el CPU maneja un tercer proceso. El modo del puerto serie y otras opciones se seleccionan al ajustar bits en el byte de control, el cual se denomina SCON (98H en el espacio SFR). Que también contiene al bit que habilita la recepción serie de datos. MODOS ASÍNCRONOS Carlos E. Canto Quintal M.C. - 113 - Laboratorio de Microprocesadores El MICROCONTROLADOR 8051 El 8051 provee tres modos serie de comunicación asíncrona para interfaz con otros procesadores ó sistemas. En los tres modos, el circuito de transmisión se encarga de generar un bit de inicio y un bit de paro. Modo 1: Dato de 8 bits con velocidad variable. Se transmiten por la línea (TxD) o se reciben por línea (RxD) 10 bits. Un bit de inicio (Start bit de nivel 0 lógico). En recepción el bit de Fin (Stop), se almacena en RB8 de SCON, si SM2=0. El Baud Rate (frecuencia de transmisión o recepción) es variable. Se utiliza el temporizador 1 como parte del generador de baudaje, así que programándolo con diferentes valores de recarga, el baud-rate puede ajustarse de 122 a 62500 bits por seg (bps), con un cristal de 12 Mhz. (Esto asume usar el temporizador 1 en modo 2, para autorecarga). Se puede duplicar el baud-rate al poner en uno el bit SMOD del registro PCON. El uso del octavo bit (así como de los otros siete) se controla por el programa para ajustarse a la aplicación. En algunos protocolos se utiliza para el bit de paridad, algunas veces como un segundo bit de paro, etc. Modo 2: Dato de 9 bits con velocidad fija. 11 bits son transmitidos (TxD) o recibidos (RxD), un bit de inicio (Start bit de nivel 0 lógico), 8 bits de datos, un noveno bit de datos programable, en la transmisión es TB8, en la recepción es RB8 de SCON, y un bit de Fin (Stop bit). Su Baud Rate es de 1/32 o 1/64 de la frecuencia de oscilación. Es igual al modo 3, a excepción de que no se utiliza el temporizador 1 como parte del generador de baud-rate. Así el temporizador 1 puede utilizarse en otras cosas a expensas de un baud-rate fijo, lo cual no es un problema para la comunicación entre varios 8051s. En los modos 2 y 3 el noveno bit se puede utilizar para distinguir entre una trama de datos y una de dirección en una comunicación multiprocesadores. Modo 3: Dato de 9 bits con velocidad variable. 11 bits son transmisión (TxD) o recibidos (RxD), en la misma forma que el modo 2, sólo que aquí la frecuencia de transmisión/recepción (Baud Rate) es variable. Se utiliza el Timer 1 para generar el Baud Rate. En los 4 modos, la transmisión es inicializada cuando SBUF es utilizado como registro destino. La recepción en el modo 0 comienza cuando RI=0, en los otros modos, cuando se detecta el bit de inicio (START) si REN=1. Trabaja como el modo 1, excepto que en lugar de ocho, se transmiten o reciben nueve bits de datos. Los ocho bits bajos van o vienen del SBUF, pero el noveno tiene dos espacios en SCON: TB8 para la transmisión y RB8 para la recepción. Este último bit puede utilizarse para ajustarse a protocolos especiales. Por ejemplo el TTY estándar requiere de dos bits de paro, un bit de paridad y siete bits de datos. Programación del puerto serie Para programar el puerto serie, se debe seleccionar el modo y baud-rate apropiado para la aplicación, calcular el valor de recarga necesitado para el temporizador y finalmente programar el SCON y temporizador 1. Después de escoger entre un esquema de encuesta contínua (sondeo) ó manjeo de interrupción, se escribe el programa para el proceso de transmisión/recepción. Generación del baud-rate. MODO FORMULA CON CRISTAL DE 12 MHz 0 Baud rate=Osc/12 1 Mbps Carlos E. Canto Quintal M.C. - 114 - Laboratorio de Microprocesadores 1, 3 2 El MICROCONTROLADOR 8051 Baud rate=Osc/( 12*2*16*(256-TH1) ) 31250/(256-TH1) bps Baud rate= Osc*2SMOD/64 187.5 Kbps Para los modos 1, 2 y 3 el baud-rate se duplica si el bit siete de PCON (SMOD) se pone a uno. SCON: El control del puerto serie. SM0 SM1 SM2 REN TB8 RB8 TI RI SM0, SM1: seleccionan el modo de operación. SM2: Deshabilita la recepción de tramas para las cuales el bit 8 es cero. REN: Habilita y deshabilita la recepción de datos. TB8: Determina el estado del noveno bit transmitido en modo UART de 9 bits. RB8: Indica el estado del noveno bit recibido. TI: Se pone a uno, por el circuito, cuando se esta transmitiendo. RI: Se pone a uno, por el circuito, cuando se ha recibido un byte. Debe limpiarse por software. INTERRUPCIONES La estructura de interrupciones del 8051 provee una herramienta poderosa que permite al CPU el manejar un número de procesos diferentes “concurrentemente”, siempre y cuando cada proceso necesite solo una fracción del tiempo del CPU. Concurrentemente significa manejar cada proceso con un tiempo de respuesta lo suficientemente rápido, de tal forma que el proceso funcione tan bien como si tuviera un procesador dedicado para él. Esto es, el trabajo para diferentes procesos se realiza en realidad secuencialmente pero parece serlo en paralelo. El 8051 provee interrupciones para los periféricos y también dos interrupciones de fuentes externas. • La función de las Interrupciones de Hardware • Estructura de Interrupciones del 8051 • Ejemplos de Utilización de Interrupciones • Latencia de una Interrupción • Opciones para las Interrupciones Externas La función de las Interrupciones de Hardware Esta sección muestra un ejemplo de como una interrupción puede ahorrar tiempo del CPU, y permitir lo que parece ser “procesamiento paralelo”. Se discute el sistema general para las interrupciones de hardware utilizado por los microprocesadores y lo compara con el mecanismo de una subrutina. ENTRADA/SALIDA MANEJADA POR INTERRUPCIONES Muchos dispositivos de Entrada/Salida (impresoras, modems, etc) requieren solo de una pequeña fracción de tiempo de CPU para servicio. Si, por ejemplo, se inicializa un dispositivo como una impresora, que requiere miles de ciclos de máquina para imprimir cada caracter, podría enviar una señal que indique cuando está lista para recibir otro caracter. El 8051 podría “consultar” (polling) el pin de un puerto que se encontraría conectado a la señal de “listo” de la impresora, pero de esta forma el 8051 estaría gastando miles de instrucciones entre el envío de cada caracter. Si la línea de “listo” (ready) se conecta a una entrada de interrupción externa, el 8051 puede ocuparse de otros procesos hasta que la impresora se encuentre lista para otro caracter. Entonces, se interrumpe al 8051, la ejecución salta a la rutina Carlos E. Canto Quintal M.C. - 115 - Laboratorio de Microprocesadores El MICROCONTROLADOR 8051 de servicio de interrupción (ISR) apropiada, la cual envía el siguiente caracter y la ejecución regresa a cualquiera que sea el proceso que fue interrumpido. Se le da servicio a la impresora (casi exactamente) tan rápido como si el CPU solo estuviera dedicado a ella; pero otros procesos también se están ejecutando concurrentemente. ESTRUCTURA DE INTERRUPCIONES DEL 8051 Fuentes de Interrupción y Vectores. Para cada fuente de interrupción el hardware tiene una dirección de código en particular (vector de interrupción) que carga en el Contador de Programa (PC) cuando se actúa en dicha interrupción. La primera instrucción de la ISR para esa interrupción debe estar en la localidad de ese vector. Ya que solo se tienen 8 bytes entre los vectores, con frecuencia se utiliza una instrucción JMP para ir a otra área de memoria de código. Las siguientes sentencias asumen que todas las interrupciones se encuentran habilitadas. * Interrupción externa 0 (función alternativa de entrada para la terminal P3.2, tambien llamada INT0) causa el salto de ejecución hacia la 03H. * La interrupción del Temporizador 0 causa el salto de ejecución a la 0BH. * Interrupción externa 1 (función alternativa de entrada para la terminal P3.3, también llamada INT1) causa el salto de ejecución hacia la 1BH. * La interrupción del Temporizador 1 causa el salto de ejecución a la 1BH. * La interrupción del puerto serie (entrada ó salida) causa el salto de ejecución a la 23H * La interrupción del Temporizador 2 causa el salto de ejecución a la 2BH, solo disponible en el 8052 y 80C51FA. * La interrupción del Arreglo Programable de Contadores causa el salto de ejecución a la 33H; solo disponible en el 80C51FA. * La reinicialización del micro (Reset) causa un salto en la ejecución a la 00, así como la inicialización de la mayoría de los SFR. Se puede pensar como una interrupción especial externa con vector en 0, y el programa completo como una ISR. Secuencia de Procesamiento de una Interrupción Cuando ocurre una petición de interrupción, siempre debe terminar la instrucción que actualmente se este ejecutando antes de que el hardware pueda saltar hacia la ISR. El hardware procede con las siguientes pruebas antes de que termine la instrucción: * Si la interrupción no se encuentra habilitada individualmente ( por su bit en el SFR IE), se ignora la petición de interrupción y la ejecución se continúa en forma secuencial. Carlos E. Canto Quintal M.C. - 116 - Laboratorio de Microprocesadores El MICROCONTROLADOR 8051 * Si las interrupciones no están habilitadas globalmente (con el bit EA en el SFR IE), se ignora la petición de interrupción y la ejecución se continúa en forma secuencial. * Cada interrupción se puede programar para tener ya sea prioridad alta (1) ó baja (0, por omisión). Si la nueva interrupción no es de más alta prioridad, que cualquiera que se esté ejecutando, se ignora hasta que se complete la interrupción actual. * Si la nueva interrupción pasa todas las pruebas de arriba, el hardware coloca la dirección de regreso en la pila (Stack), carga el PC con el vector de interrupción correspondiente e inicia la ejecución de su ISR. Registros de Prioridad de Interrupciones Existe un registro de hardware para cada prioridad (alta ó baja), cuya salida única se pone a uno cuando una interrupción de esa prioridad se está ejecutando. Esto previene que otra interrupción de la misma prioridad, ó menor, interrumpa a la ISR que se encuentre ejecutando actualmente. Una interrupción de alta prioridad se puede ejecutar dentro de una ISR de baja prioridad. La instrucción RETI realiza un RET y también limpia el registro de más alta prioridad que actualmente se encuentre activo. Al colocar RETI al final de cada ISR normalmente es suficiente para hacer que trabaje el sistema de prioridad tal y como se especificó. Registro de Prioridades de las Interrupciones (IP: Interrups Priority Register) Bits de Control de Interrupciones El SFR de Control de Habilitación de Interrupciones (IE, 0A8H) contiene el bit de Habilitación Global (EA), que se debe activar para que se permita cualquier interrupción. También se tienen los bits de habilitación individual para cada una de las cinco interrupciones en el 8051 (seis en el 8052 y siete en el 80C51FA). Para que cualquier interrupción pueda ser permitida, su bit individual de habilitación y el de EA deben estar activos. El registro IE se puede accesar por byte ó por bit. Registro habilitador de las Interrupciones (IE: Interrupts Enable Register) El SFR de Control de Prioridad de Interrupciones (IP, 0B8H) contiene el bit de selección de prioridad para cada interrupción individual. Un cero selecciona prioridad baja y un uno prioridad alta. Se puede accesar por byte ó por bit. Si dos ó más interrupciones de la misma prioridad hacen petición al mismo tiempo, y estan habilitadas; una secuencia de muestreo interna predefinida determina a cual se le da el servicio primero. Dicha secuencia de prioridad es la siguiente, de la más alta a más baja: Carlos E. Canto Quintal M.C. - 117 - Laboratorio de Microprocesadores El MICROCONTROLADOR 8051 Externa 0, Temporizador 0, Externa 1, Temporizador 1, (PCA), Serie, T2 OPCIONES PARA LA INTERRUPCIÓN EXTERNA Las dos interrupciones externas se pueden programar en forma separada para que sean sensibles al nivel ó al cambio. Cada tipo tiene sus beneficios; cual es el mejor depende de las necesidades de la aplicación. Sensado por nivel: Una interrupción externa que se programa con este tipo, envía una petición al circuito principal de interrupciones cuando (y mientras) en su terminal se lea un 0 lógico. La ISR se debe de asegurar que el dispositivo que realiza la petición ponga en 1 la terminal (ó debe deshabilitar la interrupción) para que evite el que se reentre a la ISR justo después de la instrucción RETI. El sensado por nivel facilita el manejo de fuentes múltiples con una sola terminal de interrupción, colocando en las terminales de otro puerto cada fuente diferente. La ISR consultará dichas terminales del puerto para identificar la fuente de interrupción. Con este método la petición de interrupción puede pasar desapercibida (olvidada) por el 8051 si la fuente se desactiva cuando no se encuentra disponible. Esto algunas veces es bueno. Sensado por Cambio: Una interrupción externa programada con este tipo se consulta una vez por cada ciclo de máquina. Si con muestras sucesivas se nota que ha ocurrido una transición de bajada (cambio de uno a cero), se activa una bandera (IE0 ó IE1). Esta bandera señala al circuito principal de interrupciones hasta que el hardware llama a la ISR requerida y al mismo tiempo limpia la bandera. Este modo "recuerda" una petición de interrupción, si es que la señal externa regresa a uno antes de que se le de servicio a la interrupción. También, si la señal permanece en cero (activa) después de que la ISR ha terminado, no ocasionará otra interrupción no deseada. Bits de Banderas y Control. La parte baja del SFR Control del Temporizador (TCON, 88H) se dedica para las interrupciones externas. Los bits IT0 e IT1 controlan el tipo de activación para la INT0 e INT1 respectivamente. Un cero (por omisión) selecciona sensado por nivel, un uno sensado por cambio. Los bits IE0, IE1 son las banderas para INT0 e INT1. Mientras IEn este activada, el circuito principal de interrupciones estará recibiendo una petición de salto a la ISR de la INTn. Carlos E. Canto Quintal M.C. - 118 - Laboratorio de Microprocesadores El MICROCONTROLADOR 8051 Almacenado temporal y restablecimiento de datos. Cuando un programa llama a una subrutina, típicamente tiene datos en algunos registros y/o en los SFR que necesita utilizar después de que la subrutina haga su trabajo. Si la subrutina también va a utilizar algunos de ellos, ya sea el programa que llama o la subrutina debe almacenar y restablecer los valores originales. Para ello se puede utilizar el stack mediante las instrucciones PUSH y POP descritas en seguida: PUSH dirección directa • SP=SP+1 • el byte contenido en la dirección directa se escribe en el stack. POP dirección directa • el contenido de la parte alta del stack se escribe a la dirección directa • SP=SP-1 • Conmutación de bancos. Los programas pueden utilizar el direccionamiento por registro de una manera eficiente conmutando entre cuatro bancos separados de registros para uso del programa principal y hasta tres subrutinas. • Colocar las variables utilizadas con mayor frecuencia en los registros para ahorrarse un byte siempre que el programa las accesa • Los cuatro bancos de ocho bytes le permiten a las subrutinas el usar registros para sus variables de uso frecuente. Se almacenan y restablecen los registros del programa que llama, conmutando entre bancos. • El banco de registros que se encuentra activo se selecciona mediante dos bits (RS0, RS1) del registro PSW. El banco seleccionado por omisión es el banco 0. CY CY AC AC F0 F0 RS1 RS1 RS0 RS0 OV OV PP PSW.0 Paridad del acumulador activada por Hardware a 1 si contiene un número impar de 1´s, sino se pone a 0 PSW.7 Bandera de acarreo recibe el acarreo producido por los bits 7 en las operaciones de la ALU PSW.6 Bandera de acarreo auxiliar recibe el acarreo producido por los bits 3 en la adición de operandos PSW.1 Bandera Definida por el Usuario PSW.5 Bandera de Status de propósito General PSW.2 Bandera de Sobreflujo, se activa con operaciones aritméticas PSW.4 Bit1 selector de Banco de Registro PSW.3 Bit 0 selector de Banco de Registro Banco 0 1 2 3 RS1 0 0 1 1 RS0 0 1 0 1 Localidades 0-7 8-FH 10-17H 18-1FH MATERIAL Y EQUIPO UTILIZADO: CI Atmel 89C52 CI Max232 (o Dallas DS275) Carlos E. Canto Quintal M.C. - 119 - Laboratorio de Microprocesadores El MICROCONTROLADOR 8051 Regulador 7805 Cristal piezo-eléctrico de 11.0592 Mhz 1 Condensador de 470 µF 6 condensadores de 1µF Resistencia de 8.2 KΩ Conector DB-9 Plug del eliminador de baterias usado Tarjeta de PCB 1 74LS244 8 LED´s 8 resistencias de 330 Ω 4 conectores de 8 bits Push-button NA Cautín Soldadura Osciloscopio o analizador lógico CORRELACIÓN CON TEMAS DEL PROGRAMA VIGENTE: Con esta práctica se cubre algunos de los aspectos de la unidad III: Microcntroladores METODOLOGÍA (DESARROLLO DE LA PRÁCTICA): I.-Para conocer a fondo la arquitectura, la programación y la aplicación los microcontroladores de la familia 8051, el alumno diseñará e implementará en circuito impreso (PCB) un sistema basado en el microcontrolador de Atmel 89C52. Para el diseño de la tarjeta impresa, se recomienda una distribución como la mostrada en la figura. Incluya un regulador 7805 para que pueda ser alimentado con un eliminador de baterías de 9 ó 12 v. También incluya un MAX232 para poder conectar su tarjeta a otro equipo con el estándar RS232 como por ejemplo una PC MAX232 Dc in Conector DB-9 Plug 7805 Reset P0 P1 89C52 89C52 P3 P2 Cristal de 11.0592 Mhz II.-Ya que la tarjeta esté ensamblada, usando un analizador lógico o un osciloscopio el alumno, observará la señal obtenida en la terminal ALE del del AT89C52. Si la frecuencia de la señal obtenida es del orden de 2 MHZ, entonces la tarjeta funciona correctamente. III.-Se le conecta al puerto P1 un buffer octal 3-state 74LS244 para poder manejar un LED con cada bit del puerto. IV.-Se implementará un programa y se cargará en la memoria Flash del microcontrolador (usando un Programador ) que debe realizar los siguiente: Carlos E. Canto Quintal M.C. - 120 - Laboratorio de Microprocesadores El MICROCONTROLADOR 8051 Al momento de resetear la tarjeta, se prende el LED en el bit menos significativo, un tiempo después se apaga y prende el siguiente y así sucesivamente, produciendo así corrimiento de encendido y apagado de LED´s Una vez que el funcionamiento del sistema sea satisfactorio, el alumno contará con una tarjeta para realizar las dos prácticas siguientes, eliminando así los riesgos inherentes al implementar el sistema en protoboard. SUGERENCIA DIDÁCTICA: I.- investigue acerca de los miembros de la familia de microcontroladores 8051 tanto de Intel como de otros fabricantes. II.- Implemente y cargue otros programas de prueba al sistema implementado III.- Estudie la posibilidad de implementar su propio programador del Microcontrolador ATMEL 89C52 y toda la parentela. IV.-Investigue y compare las ventajas de los Microcontroladores Programables en Sistema (ISP: In System Programming) como el AT89S52 y otros. REPORTE: I.- incluya en su reporte el layout de su tarjeta II.-incluya un resumen sobre su investigación realizada III.-sus comentarios y conclusiones BIBLIOGRAFÍA: • • • • http://www.8052.com Manual del Atmel 89C52 Manual del Max2322 8 bit Embedded microcontrollers Intel • TTL Data Book TI Carlos E. Canto Quintal M.C. - 121 -