El Microcontrolador 8051 CAP. 6 CAPITULO 6 Control de periféricos. Puertos de Entrada/ Salida 6.1. INTRODUCCION En el Capítulo 1 se describía la arquitectura de los puertos de entrada y salida (E/S) de la familia de Microcontroladores 51. En este capítulo, se retorna el tema para recordar, ampliar y mostrar una serie de ejercicios de iniciación en el control de los puertos que van a permitir comunicarse con una buena parte de los periféricos comerciales y con los que el usuario diseñe. Los cuatro puertos del 8052/8051 son bidireccionales, es decir, permiten la lectura y escritura en el periférico correspondiente. Las salidas están <latcheadas», lo que posibilita mantener el dato indefinidamente hasta que sobreescriba la información original. Otra característica importante es que los puertos pueden ser utilizados como buses de direcciones, datos y control, por lo que en estas circunstancias se dice que el microcontrolador trabaja como microprocesador. A esta característica se refiere el siguiente apartado. 6.2. EL MICROCONTROLADOR COMO MICROPROCESADOR Los drivers de salida de los Puertos P0 y P2 y los buffers de entrada del Puerto P0 se pueden utilizar para acceder a la memoria externa del sistema. En estas condiciones, el Puerto P0 se configura como salida del byte bajo del bus de direcciones (A0 a A7), de un bus que consta de 16 bits (capacidad de direccionamiento 64K), multiplexado en el tiempo como bus de datos bidireccional (D0 a D7). El Puerto P2 se configura como salida del byte alto del bus de direcciones (A8 a A15). De esta manera e] microcontrolador se configura a modo de CPU de un sistema externo con unas capacidades de expansión definibles por el usuario. Naturalmente, en estas condiciones, le queda como puerto íntegro, para el control de periféricos, el Puerto P1 y parte del Puerto P3. puesto que hay señales que se utilizan para el control del sistema (bus de control). En la Figura 6.1 se muestran los cronogramas correspondientes aun ciclo de lectura en la memoria externa de programas ya un ciclo de lectura y escritura en la memoria de datos externa. También, se hace referencia a los parámetros representados en la Figura 6.1 y en el Cuadro 6.1, sin hacer mención a los tiempos reales que dependen del tipo de microcontrolador y de la frecuencia de trabajo. _________________________________________________________________________ ITMAR, Mazatlán 57 Ing. Rufino J. Domínguez Arellano El Microcontrolador 8051 CAP. 6 Figura 6.1 _________________________________________________________________________ ITMAR, Mazatlán 58 Ing. Rufino J. Domínguez Arellano El Microcontrolador 8051 CAP. 6 Para un mejor entendimiento y seguimiento de los cronogramas anteriores, en la Figura 6.2 se dibuja un esquema en el que aparece el microcontrolador comandando una memoria RAM (43256C) y una memoria EPROM (2764). Cuadro 6.1. Símbolo TLHLL TAVLL TLLAX TLLIV TLLPL TPLPH TPLIV TPXIX TPXIZ TPXAV TAVIV TPLAZ TRLRH TWLWH TRLDV TRHDX TRHDZ TLLDV TAVDV TLLWL TAVWL TQVWX TQVWH TWHQX TRLAZ TWHLH Parámetro ALE Pulse Width (Anchura pulso ALE) Address Valid to ALE Low (Dirección válida a ALE bajo) Address Hold After ALE Low (Dirección mantenida después de ALE bajo) ALE Low to Valid Instruction In (ALE bajo a Instr. In. válida) ALE Low to PSEN Low (ALE bajo a PSEN bajo) PSEN Pulse Width (Anchura pulso PSEN) PSEN Low to Valid Instruction In (PSEN bajo a Instr. In. válida) Input Instr. Hold After PSEN (Mantenimiento de Instr. In. después de PSEN) Input Instr. Float After PSEN (Bus flotante de Instr. In. después de PSEN) PSEN to Address Valid / PSEN a Dirección válida Addres to Valid Instr. In. / Dirección a Instr. In. válida PSEN Low to Addres Float / PSEN bajo a bus dirección flotante RD Pulse Width / Anchura del pulso de lectura WR Pulse Widht / Anchura del pulso de escritura. RD Low to Valid Data In / RD bajo a Dato In. válido Data Hold After RD / Mantenimiento de Dato después de RD Data Float After RD / Bus Datos flotante después de RD ALE Low to Valid Data In / ALE bajo a Dato In. válido Addres to Valid Data In / Dirección a Dato In. válido ALE Low to RD or WR Low / ALE bajo a RD o WR bajo Addres to RD or WR Low / Dirección a RD o WR bajo Data Valid to WR Transition / Dato válido a transición WR Data Valid to WR High / Dato válido a WR alto Data Hold After WR (Mantenimiento de Dato después de WR) RD Low to Addres Float (RD bajo a bus flotante Dirección) RD or WR High to ALE Hight (RD o WR alto a ALE alto) El acceso a la memoria externa puede hacerse o bien a la memoria de programas o a la memoria de datos y esta última puede ser para leer o escribir un dato. Estos tres aspectos se van a desarrollar someramente a continuación. _________________________________________________________________________ ITMAR, Mazatlán 59 Ing. Rufino J. Domínguez Arellano El Microcontrolador 8051 CAP. 6 6.2.1. Ciclo de lectura en la memoria externa de programas Para acceder a la memoria externa de programas utiliza la señal PSEN (Program Store Enable) como señal de autorización de lectura (Figuras 6.1 (A) y 6.2). La señal ALE «latchea» el byte bajo del bus de direcciones en el primer estado (ciclo de reloj), y así permite direccionar, duranté todo el ciclo de instrucción, mientras esas mismas líneas son utilizadas, en el resto del ciclo de instrucción, como bus de datos. En la Figura 6.2 se puede observar que la lectura en la memoria de programas se realiza cuando PSEN está a nivel bajo y las líneas A13, A14 y A15 se encuentran a nivel alto, siendo el resto de las líneas de dirección las que establecen la localidad exacta del byte de instrucción u operando que ha de ser leído. (La actuación del PSEN elimina cualquier incompatibilidad que podría producirse al estar los dos «chips» seleccionados, es decir, CE complementado y CS = 0.) Para el acceso a la memoria de programas, utiliza los 16 bits del bus de direcciones, su posición en el mapa general de memoria es la que se encuentra al final de los 64 Kbytes puesto que A15=A14=A13=1, concretamente comienza en la dirección 1110 0000 0000 0000 = E000H y termina en la dirección FFFFH, en total 8 Kbytes. A la memoria de programas externa se accede bajo dos condiciones: I. Cuando la señal EA es activa, caso de la Figura 8.2. 2. Cuando el contador de programa (PC) contiene un número más grande que 0FFFH para el 8051 o 1 FFFH para el 8052. En las versiones de microcontroladores sin ROM (8031 y 8032) tienen la señal de control EA puesta a nivel bajo permanentemente para leer el programa en la memoria externa. 6.2.2. Ciclo de lectura en la memoria externa de datos Para el acceso a la memoria externa de datos utiliza la señal de control RD (función alternativa de P3.7) y puede utilizar los 16 bits de dirección (MOVX A, @DPTR) o bien 8 bits (MOVX A, @Ri) (véase Figura 6.1(B)). En un ciclo de lectura el byte de entrada es aceptado en el Puerto P0 justo antes de que la señal de control RD que autoriza la lectura sea desactivada. _________________________________________________________________________ ITMAR, Mazatlán 60 Ing. Rufino J. Domínguez Arellano El Microcontrolador 8051 CAP. 6 U2 U4 D0 D1 D2 D3 D4 D5 D6 D7 OE 74LS373 U1 EA/Vpp X1 +5 V X2 RESET INT0 INT1 T0 T1 8052 P1.0/T2 P1.1/T2X P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 E P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 A0 Q0 A1 Q1 A2 Q2 A3 Q3 A4 Q4 A5 Q5 A6 Q6 A7 Q7 A8 A9 A10 RAM A11 A12 A13 A14 CS U3 +5 V OE WR 43256C A0 O0 A1 O1 A2 O2 A3 O3 A4 O4 A5 O5 A6 O6 A7 O7 A8 A9 EPROM A10 A11 A12 CE OE PGW Vpp 2764 P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7 RD WR PSEN ALE/P TXD RXD Figura 6.2 6.2.3. Ciclo de escritura en la memoria externa de datos Para la escritura en la memoria externa de datos utiliza la señal de control WR (función alternativa P3.6) y puede utilizar los 16 bits de dirección (MOV @DPTR, A) o bien 8 bits (MOV @Ri, A) (Figura 6.1.(C)). En el ciclo de escritura, el byte de dato debe permanecer sobre el Puerto P0 antes y después de que la señal de control de escritura WR sea desactivada. En general, tanto para la lectura como para la escritura, cuando una dirección de 16 bits es utilizada (MOVX @DPTR), el byte alto de dirección sale por el Puerto P2 donde permanecerá mientras dura el ciclo de lectura o escritura. Si se utiliza una dirección de 8 bits (MOVX @Ri), el contenido del Puerto P2 en el SFR permanece sobre los pines de P2 durante todo el ciclo de acceso a la memoria externa. Esto facilita la paginación (véase Apartado 2.3). Resumiendo, si se utilizan los puertos para comandar unidades de memoria externa o interface, los puertos quedarán en esta situación: _________________________________________________________________________ ITMAR, Mazatlán 61 Ing. Rufino J. Domínguez Arellano El Microcontrolador 8051 CAP. 6 P0: Bus de direcciones de menos peso (A0 a A 7) y bus de datos (D0 a D7) multiplexados en el tiempo. P1: Puerto de E/S. P2: Bus de direcciones de más peso (A8 a A15). P3: Bus de control. 6.3. OPERACIÓN DE ESCRITURA EN LOS PUERTOS DE LOS MICROCONTROLADORES 8052/8051 La operación de escritura, utilizando los puertos del 8052/8051, puede ser realizada por cualquiera de ellos; no obstante, el Puerto P0 es el que presenta una mayor cargabilidad, permitiendo comandar ocho cargas TTL-LS, mientras que los otros tres permiten cuatro cargas TTL-LS. En la ejecución de una instrucción que cambia el valor del latch del puerto, el nuevo valor llega al latch durante el estado 6, fase 2 del final del ciclo de instrucción, según indica la Figura 6.3. Antes de comenzar con el estudio y comprobación de los puertos de E/S, se dibuja el interface para la conexión de los puertos a los dispositivos de salida, que en este caso pueden servir unos simples LED (Figura 6.4). Para comandar cargas de mayor consumo energético, como relés, se recomienda utilizar, entre el puerto y la carga, drivers no inversores, como el ULN 2003, o inversores, como el ULN 2803, que tienen una cargabilidad de 500 mA y soportan hasta 50 v. Como ya se sabe, el 8052/8051 presenta dos señales de control, una para ejecutar la lectura (RD) y otra para la escritura (WR). Por esto la activación de estas señales depende del formato de la instrucción. Para la operación de ESCRITURA en el puerto, la instrucción más habitual es la siguiente: MOV PX, <DATO> ; X toma valores 0, 1, 2 y 3 según el puerto. Admitiendo <DATO> todos los tipos de direccionamiento estudiados en el Capítulo 3. _________________________________________________________________________ ITMAR, Mazatlán 62 Ing. Rufino J. Domínguez Arellano El Microcontrolador 8051 CAP. 6 Figura 6.3 Figura 6.4 Ejercicio 6.1. El puerto P0 en modo salida Este ejercicio muestra cómo se deben tratar los cuatro puertos cuando se tiene que enviar una información de salida del microcontrolador. Se refiere, comúnmente, a una operación de escritura. El ejercicio se realiza con el Puerto P0 pero el usuario puede comprobar que el programa funcionará igual si sustituye el Puerto P0 por el P1 , P2 o P3. El programa muestra distintas formas de escritura en el puerto. Así: • • En las primeras instrucciones, mediante una máscara, se ponen todos los bits del Puerto P0 a CERO. Se incrementa el acumulador y se transfiere al Puerto P0. por lo que el contenido de dicho puerto se incrementará, así hasta contar hasta 5. _________________________________________________________________________ ITMAR, Mazatlán 63 Ing. Rufino J. Domínguez Arellano El Microcontrolador 8051 • • • CAP. 6 .Direccionando directamente los bits 0 y 2 del Puerto P0. que en la última operación habían quedado a UNO, se ponen a CERO. En este instante todos los bits de P0 están a CERO. Se pone a UNO el bit 7 de P0 y con direccionamiento inmediato se carga P0 con 55H. Finalmente, se complementa (operación lógica NOT) la información de P0 cambiando los UNOS por CEROS y los CEROS por UNOS. Se observará que entre las distintas operaciones se ha incluido un lazo de retardo para poder seguir la evolución de la secuencia anteriormente descrita. La rutina de retardo es la misma que la estudiada en el Ejercicio 5.1, con la diferencia del valor asignado al registro R0 y, también, que dicha rutina se ubica a partir de la localidad 0300H para que no coincida con el programa principal. Una última observación antes de pasar a realizar el ejercicio. Si se necesita activar o desactivar un bit de un puerto (se puede hacer extensivo a todos los registros direccionales «bit a bit» del SFR), puede hacerlo utilizando las instrucciones booleenas (ver Tabla 4.2). CLR bit SETB bit CPL bit Así, por ejemplo, para activar el bit0 del Puerto P0: SETB P0.0 o también SETB 80 o el bit 1 del Puerto P0: SETB P0.1 o también SETB 81 Efectivamente, por esta razón sólo son direccionables «bit a bit» los registros correspondientes a la primera columna (ver Tabla 4.1 ). _________________________________________________________________________ ITMAR, Mazatlán 64 Ing. Rufino J. Domínguez Arellano El Microcontrolador 8051 RETAR1 SAL0: SAL0: SAL1: SAL2: CAP. 6 ; Escribe en el puerto P0 configurado como salida ; ORG 0200H ; EQU 0300H MOV A, #00H ANL P0, A ; Escribe CERO en el puerto P0 CALL RETAR1 ; Producir retardo INC A ; Incrementa ACC MOV P0, A ; Escribe en el puel1o P0 CALL RETAR1 CJNE A, #05H , SAL0 ; Si se han realizado 5 incrementos de P0 sale CLR P0.0 ; Pone el bit 0 de P0 a CERO CLR P0.2 ; Pone el bit 2 de P0 a CERO CALL RETAR1 SETB P0.7 ; Pone el bit7 de P0 a UNO CALL RETAR1 MOV P0, #55H ; Carga P0 con 55H CALL RETAR1 MOV A, #FFH XRL P0, A ; Complementa P0 NOP END ; ORG 0300H ; MOV R0, #40H ; Se CARGA el registro R0 con #40H MOV R1, #85H ;Se CARGA R1 con #85H MOV R2, #FFH ;Se CARGA R2 con #FFH DJNZ R2, SAL2 ; Decrementa R2 y repite el lazo hasta que R2=0 DJNZ R1, SAL1 ; Lo mismo que la instrucción anterior, pero por cada ; lazo de R1, ejecuta FFH veces el lazo R2 DJNZ R0, SAL0 ; Lo mismo que las instrucciones anteriores, pero por ; cada lazo de R0, ejecuta 85H lazos de R1 y ; 85H * FFH lazos de R0 NOP RET END 6.4. OPERACION DE LECTURA EN LOS PUERTOS DE LOS MICROCONTROLADORES 8052/8051 La operación de lectura o de adquisición de datos no representa ningún tipo de problema; solamente se deberá cambiar el orden de los operandos en la instrucción respecto a la operación de escritura. Para la operación de lectura, el formato de la instrucción más habitual es el siguiente: MOV <destino>, PX _________________________________________________________________________ ITMAR, Mazatlán 65 Ing. Rufino J. Domínguez Arellano El Microcontrolador 8051 CAP. 6 Se presentan dos circuitos de interface muy sencillos para poder introducir datos a los puertos del microcontrolador, cuando éste trabaja en modo lectura. El primero, muy simple, es útil para la comprobación de la mayor parte de los ejercicios qué aquí se exponen; no obstante, tiene el problema de los «rebotes» (Figura 6.5). El segundo circuito está pensado especialmente para los ejercicios que se refieren al tema de las interrupciones. Este circuito es, hasta cierto punto, inmune a los rebotes de los contactos (Figura 6.6). Ejercicio 6.2. Operación de lectura en el puerto P0 y de escritura en el puerto P1 Este ejercicio trata de mostrar cómo se manipula el Puerto P0 para utilizarlo como entrada y el P1 como salida, de tal forma que la información leída por el Puerto P0 y después de ser tratada adecuadamente sale escrita por P1. En este caso concreto, la información leída por P0 sale intacta por el Puerto P1. Figura 6.5 Este es el listado del programa: Lazo: MOV A, P0 MOV P1, A AJMP Lazo _________________________________________________________________________ ITMAR, Mazatlán 66 Ing. Rufino J. Domínguez Arellano El Microcontrolador 8051 CAP. 6 Figura 6.6 Ejercicio 6.3. Control de un proceso industrial elemental El siguiente ejercicio muestra cómo realizar el control de un proceso industrial muy simple, utilizando la CPU del microcontrolador para la toma de decisiones, la memoria para almacenar las instrucciones del programa y los datos, y los puertos, uno (de lectura) para comprobar la situación de los sensores y el otro (de escritura) para enviar la señal a los actuadores. Se ha escogido este ejercicio resuelto en el libro Sistemas Microprocesadores, de J. M. Angulo Usategui, por considerar que es conocido entre muchos profesionales y entusiastas de los «micros», y es interesante ver su resolución desde la perspectiva de los Microcontroladores 8052/8051. • Proceso Se trata de controlar el nivel de liquido de un depósito, utilizando tres sondas detectoras de niveles A, B y C, y dos bombas B1 y B2 (Figura 6.7). He aquí una descripción del proceso, desde el punto de vista de su relación con el mundo exterior, según los tres tipos de señales principales: _________________________________________________________________________ ITMAR, Mazatlán 67 Ing. Rufino J. Domínguez Arellano El Microcontrolador 8051 CAP. 6 Figura 6.7 • • • Entrada de información: SENSORES (sondas). Actuación sobre los elementos finales: ACTUADORES. Señalización del proces{): INDICADORES. 1. SONDAS (entradas) La sonda A señala el nivel mínimo de agua. Por debajo de este nivel, se indicará «VACIO» en el cuadro de INDICADORES. La sonda B señala el nivel óptimo y cuando se alcance se indicará «LLENO». La sonda C señala el nivel peligroso e indica «REBOSE». Las sondas serán leídas por el Microcontrolador a través del Puerto P0. P0.0 - A P0.1- B P0.2 - C _________________________________________________________________________ ITMAR, Mazatlán 68 Ing. Rufino J. Domínguez Arellano El Microcontrolador 8051 CAP. 6 2. ACTUADORES (salidas) Cuando ninguna de las sondas está mojada, se entiende que el depósito está vacío y los actuadores activarán las dos bombas B1 y B2 (P1.0 y P1.1). Cuando el nivel del líquido toque la sonda B, se desactivará la bomba B2, quedando la bomba B1 activada en modo mantenimiento. Si el nivel del líquido moja la sonda C (rebose), se desactivará la bomba B1, quedando las dos bombas, de momento, fuera de servicio. 3. INDICADORES (salidas) La señalización utiliza el Puerto P1. P1.2 -- VACIO P1.3 -- LLENO P1.4 -- REBOSE y cuando se produce un fallo (mal funcionamiento) en las sondas de entrada –por ejemplo, que la sonda B (P0.1 ) se active cuando la A (P0.0), por debajo de la B, no lo está- se excita en el cuadro de indicadores una señal de ALARMA. P1.5 --ALARMA La Figura 6.8 muestra la disposición de los actuadores, indicadores y sondas. Figura 6.8 _________________________________________________________________________ ITMAR, Mazatlán 69 Ing. Rufino J. Domínguez Arellano El Microcontrolador 8051 CAP. 6 Este es el listado: ; Controla el nivel de líquido de un depósito. ; ORG 0300H ; .BYTE 07H,03H,20H,09H,20H,20H,20H,18H ; ORG 0200H ; SAL0: MOV MOV ANL MOVC MOV JMP END DPTR, #0300H ;inicializa puntero de TABLA A, P0 ; LEE puerto PO A, #07H ; Enmascara A, @A+DPTR ; Direcciona y captura dato Pl, A ;Actúa SAL0 _________________________________________________________________________ ITMAR, Mazatlán 70 Ing. Rufino J. Domínguez Arellano