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) |