Control de periféricos. Puertos de Entrada/ Salida

Anuncio
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
Descargar