Sistemas integrados: programación de E / S

En 8051, las operaciones de E / S se realizan mediante cuatro puertos y 40 pines. El siguiente diagrama de pines muestra los detalles de los 40 pines. El puerto de operación de E / S reserva 32 pines donde cada puerto tiene 8 pines. Los otros 8 pines se designan como V cc , GND, XTAL1, XTAL2, RST, EA (barra), ALE / PROG (barra) y PSEN (barra).

Es un PDIP de 40 pines (paquete de plástico dual en línea)

Note- En un paquete DIP, puede reconocer el primer pin y el último pin por el corte en el medio del IC. La primera clavija está a la izquierda de esta marca de corte y la última clavija (es decir, la clavija número 40 en este caso) está a la derecha de la marca de corte.

Puertos de E / S y sus funciones

Los cuatro puertos P0, P1, P2 y P3, cada uno usa 8 pines, lo que los convierte en puertos de 8 bits. Tras el RESET, todos los puertos se configuran como entradas, listos para ser utilizados como puertos de entrada. Cuando se escribe el primer 0 en un puerto, se convierte en una salida. Para reconfigurarlo como entrada, se debe enviar un 1 a un puerto.

Puerto 0 (Pin No 32 - Pin No 39)

Tiene 8 pines (32 a 39). Se puede utilizar para entrada o salida. A diferencia de los puertos P1, P2 y P3, normalmente conectamos P0 a resistencias pull-up de 10K ohmios para usarlo como un puerto de entrada o salida que es un drenaje abierto.

También se designa como AD0-AD7, lo que permite utilizarlo como dirección y como datos. En el caso de 8031 ​​(es decir, chip sin ROM), cuando necesitemos acceder a la ROM externa, se utilizará P0 tanto para la dirección como para el bus de datos. ALE (Pin no 31) indica si P0 tiene dirección o datos. Cuando ALE = 0, proporciona los datos D0-D7, pero cuando ALE = 1, tiene la dirección A0-A7. En caso de que no haya una conexión de memoria externa disponible, P0 debe conectarse externamente a una resistencia pull-up de 10K ohmios.

MOV A,#0FFH  ;(comments: A=FFH(Hexadecimal  i.e. A=1111 1111)  

MOV P0,A     ;(Port0 have 1's on every pin so that it works as Input)

Puerto 1 (Pin 1 a 8)

Es un puerto de 8 bits (pin 1 a 8) y se puede utilizar como entrada o salida. No requiere resistencias pull-up porque ya están conectadas internamente. Tras el reinicio, el puerto 1 se configura como puerto de entrada. El siguiente código se puede utilizar para enviar valores alternos de 55H y AAH al puerto 1.

;Toggle all bits of continuously 
MOV     A,#55 
BACK:    

MOV     P2,A 
ACALL   DELAY 
CPL     A      ;complement(invert) reg. A 
SJMP    BACK

Si el puerto 1 está configurado para usarse como puerto de salida, para usarlo de nuevo como puerto de entrada, prográmelo escribiendo 1 en todos sus bits como en el siguiente código.

;Toggle all bits of continuously 

MOV     A ,#0FFH    ;A = FF hex 
MOV     P1,A        ;Make P1 an input port                     
MOV     A,P1        ;get data from P1 
MOV     R7,A        ;save it in Reg R7 
ACALL   DELAY       ;wait 

MOV     A,P1        ;get another data from P1 
MOV     R6,A        ;save it in R6 
ACALL   DELAY       ;wait 

MOV     A,P1        ;get another data from P1 
MOV     R5,A        ;save it in R5

Puerto 2 (pines 21 a 28)

El puerto 2 ocupa un total de 8 pines (pines 21 a 28) y se puede utilizar para operaciones de entrada y salida. Al igual que P1 (Puerto 1), P2 tampoco requiere resistencias Pull-up externas porque ya están conectadas internamente. Debe usarse junto con P0 para proporcionar la dirección de 16 bits para la memoria externa. Por lo tanto, también se designa como (A0 – A7), como se muestra en el diagrama de clavijas. Cuando el 8051 está conectado a una memoria externa, proporciona una ruta para los 8 bits superiores de la dirección de 16 bits y no se puede utilizar como E / S. Tras el reinicio, el puerto 2 se configura como puerto de entrada. El siguiente código se puede usar para enviar valores alternos de 55H y AAH al puerto 2.

;Toggle all bits of continuously 
MOV     A,#55 
BACK: 
MOV     P2,A 
ACALL   DELAY 
CPL     A         ; complement(invert) reg. A 
SJMP    BACK

Si el puerto 2 está configurado para usarse como puerto de salida, para usarlo nuevamente como puerto de entrada, prográmelo escribiendo 1 en todos sus bits como en el siguiente código.

;Get a byte from P2 and send it to P1 
MOV    A,#0FFH    ;A = FF hex 
MOV    P2,A       ;make P2 an input port 
BACK: 
MOV    A,P2       ;get data from P2 
MOV    P1,A       ;send it to Port 1
SJMP   BACK       ;keep doing that

Puerto 3 (pines 10 a 17)

También es de 8 bits y se puede utilizar como Entrada / Salida. Este puerto proporciona algunas señales extremadamente importantes. P3.0 y P3.1 son RxD (receptor) y TxD (transmisor) respectivamente y se utilizan colectivamente para la comunicación en serie. Los pines P3.2 y P3.3 se utilizan para interrupciones externas. P3.4 y P3.5 se utilizan para los temporizadores T0 y T1 respectivamente. P3.6 y P3.7 son pines de escritura (WR) y lectura (RD). Estos son pines bajos activos, lo que significa que estarán activos cuando se les asigne 0 y se utilizan para proporcionar operaciones de lectura y escritura a la ROM externa en sistemas basados ​​en 8031.

Bit P3 Función Alfiler
P3.0 RxD 10
P3.1 < TxD 11
P3.2 < Complemento de INT0 12
P3.3 < INT1 13
P3.4 < T0 14
P3.5 < T1 15
P3.6 < WR dieciséis
P3.7 < Complemento de RD 17

Doble función del puerto 0 y el puerto 2

  • Dual role of Port 0- El puerto 0 también se designa como AD0 – AD7, ya que se puede utilizar para el manejo de datos y direcciones. Al conectar un 8051 a la memoria externa, el puerto 0 puede proporcionar tanto direcciones como datos. El microcontrolador 8051 luego multiplexa la entrada como dirección o datos para guardar pines.

  • Dual role of Port 2- Además de funcionar como E / S, el puerto P2 también se utiliza para proporcionar un bus de direcciones de 16 bits para la memoria externa junto con el puerto 0. El puerto P2 también se designa como (A8– A15), mientras que el puerto 0 proporciona los 8 bits inferiores a través de A0 – A7. En otras palabras, podemos decir que cuando un 8051 está conectado a una memoria externa (ROM) que puede tener un máximo de 64KB y esto es posible mediante un bus de direcciones de 16 bits porque sabemos que 216 = 64KB. El puerto 2 se usa para los 8 bits superiores de la dirección de 16 bits, y no se puede usar para E / S y esta es la forma en que se direcciona cualquier código de programa de ROM externa.

Conexión de hardware de pines

  • Vcc - El pin 40 proporciona alimentación al Chip y es de +5 V.

  • Gnd - El pin 20 proporciona tierra para la referencia.

  • XTAL1, XTAL2 (Pin no 18 & Pin no 19)- 8051 tiene oscilador en chip pero requiere un reloj externo para ejecutarlo. Un cristal de cuarzo está conectado entre el pin XTAL1 y XTAL2 del chip. Este cristal también necesita dos condensadores de 30pF para generar una señal de frecuencia deseada. Un lado de cada condensador está conectado a tierra. 8051 IC está disponible en varias velocidades y todo depende de este cristal de Cuarzo, por ejemplo, un microcontrolador de 20 MHz requiere un cristal con una frecuencia no mayor a 20 MHz.

  • RST (Pin No. 9)- Es un pin de entrada y un pin alto activo. Al aplicar un pulso alto en este pin, es decir 1, el microcontrolador se reiniciará y finalizará todas las actividades. Este proceso se conoce comoPower-On Reset. La activación de un reinicio de encendido hará que se pierdan todos los valores del registro. Establecerá un contador de programa en todos los 0. Para asegurar una entrada válida de Reset, el pulso alto debe ser alto durante un mínimo de dos ciclos de la máquina antes de permitir que baje, lo que depende del valor del capacitor y la velocidad a la que se carga. (Machine Cycle es la cantidad mínima de frecuencia que requiere una sola instrucción en ejecución).

  • EA or External Access (Pin No. 31)- Es un pin de entrada. Este pin es un pin bajo activo; al aplicar un pulso bajo, se activa. En caso de que el microcontrolador (8051/52) tenga ROM en el chip, el pin EA (barra) está conectado a V cc . Pero en un microcontrolador 8031 ​​que no tiene una ROM en chip, el código se almacena en una ROM externa y luego el microcontrolador lo recupera. En este caso, debemos conectar el EA (pin no 31) a Gnd para indicar que el código del programa se almacena externamente.

  • PSEN or Program store Enable (Pin No 29)- Este también es un pin bajo activo, es decir, se activa después de aplicar un pulso bajo. Es un pin de salida y se utiliza junto con el pin EA en sistemas basados ​​en 8031 ​​(es decir, ROMLESS) para permitir el almacenamiento del código del programa en una ROM externa.

  • ALE or (Address Latch Enable)- Este es un Pin de salida y está activo alto. Se utiliza especialmente para 8031 ​​IC para conectarlo a la memoria externa. Se puede utilizar al decidir si los pines P0 se utilizarán como bus de direcciones o bus de datos. Cuando ALE = 1, los pines P0 funcionan como bus de datos y cuando ALE = 0, los pines P0 actúan como bus de direcciones.

Puertos de E / S y direccionabilidad de bits

Es una de las características más utilizadas del 8051 al escribir código para 8051. A veces necesitamos acceder a solo 1 o 2 bits del puerto en lugar de los 8 bits completos. 8051 proporciona la capacidad de acceder a bits individuales de los puertos.

Al acceder a un puerto de una manera de un solo bit, usamos la sintaxis "SETB X. Y" donde X es el número de puerto (0 a 3) e Y es un número de bit (0 a 7) para los bits de datos D0-D7 donde D0 es el LSB y D7 es el MSB. Por ejemplo, "SETB P1.5" establece el bit alto 5 del puerto 1.

El siguiente código muestra cómo podemos alternar el bit P1.2 continuamente.

AGAIN: 
SETB    P1.2
ACALL   DELAY    
CLR     P1.2      
ACALL   DELAY 
SJMP    AGAIN

Instrucciones de un solo bit

Instrucciones Función
Bit SETB Establecer el bit (bit = 1)
Bit CLR borrar el bit (bit = 0)
Poco CPL complementar el bit (bit = NO bit)
Bit JB, objetivo saltar al objetivo si bit = 1 (saltar si bit)
Bit JNB, objetivo saltar al objetivo si bit = 0 (saltar si no hay bit)
Bit JBC, destino saltar al objetivo si bit = 1, borrar bit (saltar si bit, luego borrar)