You are on page 1of 14

El Microcontrolador 8051 CAP.

6
_________________________________________________________________________
ITMAR, Mazatlán 57 Ing. Rufino J. Domínguez Arellano
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.
El Microcontrolador 8051 CAP. 6
_________________________________________________________________________
ITMAR, Mazatlán 58 Ing. Rufino J. Domínguez Arellano




Figura 6.1






El Microcontrolador 8051 CAP. 6
_________________________________________________________________________
ITMAR, Mazatlán 59 Ing. Rufino J. Domínguez Arellano
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 Parámetro
TLHLL ALE Pulse Width (Anchura pulso ALE)
TAVLL Address Valid to ALE Low (Dirección válida a ALE bajo)
TLLAX Address Hold After ALE Low (Dirección mantenida después de ALE
bajo)
TLLIV ALE Low to Valid Instruction In (ALE bajo a Instr. In. válida)
TLLPL ALE Low to PSEN Low (ALE bajo a PSEN bajo)
TPLPH PSEN Pulse Width (Anchura pulso PSEN)
TPLIV PSEN Low to Valid Instruction In (PSEN bajo a Instr. In. válida)
TPXIX Input Instr. Hold After PSEN (Mantenimiento de Instr. In.
después de PSEN)
TPXIZ Input Instr. Float After PSEN (Bus flotante de Instr. In. después
de PSEN)
TPXAV PSEN to Address Valid / PSEN a Dirección válida
TAVIV Addres to Valid Instr. In. / Dirección a Instr. In. válida
TPLAZ PSEN Low to Addres Float / PSEN bajo a bus dirección flotante
TRLRH RD Pulse Width / Anchura del pulso de lectura
TWLWH WR Pulse Widht / Anchura del pulso de escritura.
TRLDV RD Low to Valid Data In / RD bajo a Dato In. válido
TRHDX Data Hold After RD / Mantenimiento de Dato después de RD
TRHDZ Data Float After RD / Bus Datos flotante después de RD
TLLDV ALE Low to Valid Data In / ALE bajo a Dato In. válido
TAVDV Addres to Valid Data In / Dirección a Dato In. válido
TLLWL ALE Low to RD or WR Low / ALE bajo a RD o WR bajo
TAVWL Addres to RD or WR Low / Dirección a RD o WR bajo
TQVWX Data Valid to WR Transition / Dato válido a transición WR
TQVWH Data Valid to WR High / Dato válido a WR alto
TWHQX Data Hold After WR (Mantenimiento de Dato después de WR)
TRLAZ RD Low to Addres Float (RD bajo a bus flotante Dirección)
TWHLH 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.




El Microcontrolador 8051 CAP. 6
_________________________________________________________________________
ITMAR, Mazatlán 60 Ing. Rufino J. Domínguez Arellano
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.

El Microcontrolador 8051 CAP. 6
_________________________________________________________________________
ITMAR, Mazatlán 61 Ing. Rufino J. Domínguez Arellano

+5 V
EPROM
2764
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
Vpp
O7
O6
O5
O4
O3
O2
O1
O0
CE
OE
PGW
U3
RAM
43256C
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
Q7
Q6
Q5
Q4
Q3
Q2
Q1
Q0
CS
OE
WR
U2
8052
P1.0/T2
P1.1/T2X
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
RESET
T0
T1
X2
X1
P2.5
P2.6
P2.7
P0.7
P0.6
P0.5
P0.4
P0.3
P0.2
P0.1
P0.0
EA/Vpp
P2.0
P2.1
P2.2
P2.3
P2.4
ALE/P
TXD
RXD
INT0
INT1
PSEN
WR
RD
U1
74LS373
D7
D6
D5
D4
D3
D2
D1
D0
Q7
Q6
Q5
Q4
Q3
Q2
Q1
Q0
OE E
U4
+5 V
+5 V
EPROM
2764
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
Vpp
O7
O6
O5
O4
O3
O2
O1
O0
CE
OE
PGW
U3
RAM
43256C
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
Q7
Q6
Q5
Q4
Q3
Q2
Q1
Q0
CS
OE
WR
U2
8052
P1.0/T2
P1.1/T2X
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
RESET
T0
T1
X2
X1
P2.5
P2.6
P2.7
P0.7
P0.6
P0.5
P0.4
P0.3
P0.2
P0.1
P0.0
EA/Vpp
P2.0
P2.1
P2.2
P2.3
P2.4
ALE/P
TXD
RXD
INT0
INT1
PSEN
WR
RD
U1
74LS373
D7
D6
D5
D4
D3
D2
D1
D0
Q7
Q6
Q5
Q4
Q3
Q2
Q1
Q0
OE E
U4
+5 V



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:

El Microcontrolador 8051 CAP. 6
_________________________________________________________________________
ITMAR, Mazatlán 62 Ing. Rufino J. Domínguez Arellano
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.






El Microcontrolador 8051 CAP. 6
_________________________________________________________________________
ITMAR, Mazatlán 63 Ing. Rufino J. Domínguez Arellano



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.
El Microcontrolador 8051 CAP. 6
_________________________________________________________________________
ITMAR, Mazatlán 64 Ing. Rufino J. Domínguez Arellano
• .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 ).





El Microcontrolador 8051 CAP. 6
_________________________________________________________________________
ITMAR, Mazatlán 65 Ing. Rufino J. Domínguez Arellano

; Escribe en el puerto P0 configurado como salida
;
ORG 0200H
;
RETAR1 EQU 0300H
MOV A, #00H
ANL P0, A ; Escribe CERO en el puerto P0
CALL RETAR1 ; Producir retardo
SAL0: 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
SAL0: MOV R1, #85H ;Se CARGA R1 con #85H
SAL1: MOV R2, #FFH ;Se CARGA R2 con #FFH
SAL2: 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
El Microcontrolador 8051 CAP. 6
_________________________________________________________________________
ITMAR, Mazatlán 66 Ing. Rufino J. Domínguez Arellano

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


El Microcontrolador 8051 CAP. 6
_________________________________________________________________________
ITMAR, Mazatlán 67 Ing. Rufino J. Domínguez Arellano



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:





El Microcontrolador 8051 CAP. 6
_________________________________________________________________________
ITMAR, Mazatlán 68 Ing. Rufino J. Domínguez Arellano



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

El Microcontrolador 8051 CAP. 6
_________________________________________________________________________
ITMAR, Mazatlán 69 Ing. Rufino J. Domínguez Arellano
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
El Microcontrolador 8051 CAP. 6
_________________________________________________________________________
ITMAR, Mazatlán 70 Ing. Rufino J. Domínguez Arellano
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
;

MOV DPTR, #0300H ;inicializa puntero de TABLA
SAL0: MOV A, P0 ; LEE puerto PO
ANL A, #07H ; Enmascara
MOVC A, @A+DPTR ; Direcciona y captura dato
MOV Pl, A ;Actúa
JMP SAL0
END