La interfaz LED es lo primero que se intentaría hacer al comenzar con cualquier microcontrolador. Así que aquí en este tutorial vamos a conectar un LED con el microcontrolador 8051 y escribiremos un Programa C para hacer parpadear el LED. Hemos utilizado un microcontrolador AT89S52 muy popular, de la familia 8051, de ATMEL.
Antes de entrar en detalles, deberíamos hacernos una breve idea sobre el microcontrolador AT89S52. Es un microcontrolador de 40 pines y tiene 4 puertos (P0, P1, P2, P3), cada puerto tiene 8 pines. Podemos considerar cada puerto como un registro de 8 bits, desde el punto de vista del software. Cada pin que tiene una línea de entrada / salida, significa que cada pin se puede utilizar tanto para entrada como para salida, es decir, para leer datos de algún dispositivo como sensor o para proporcionar su salida a algún dispositivo de salida. Algunos pines tienen la funcionalidad Dual, que se ha mencionado entre paréntesis en el diagrama de pines a continuación. Funcionalmente dual como interrupción, contadores, temporizadores, etc.
El AT89S52 tiene dos tipos de memoria, el primero es RAM que tiene 256 bytes de memoria y el segundo es EEPROM (Memoria de solo lectura programable y borrable electrónicamente) que tiene 8k bytes de memoria. La RAM se usa para almacenar los datos durante la ejecución de un programa y la EEPROM se usa para almacenar el Programa en sí. EEPROM es la memoria flash en la que usamos para grabar el programa.
Diagrama de circuito y explicación
Estamos usando el pin uno del puerto 1 para conectar el LED. En la programación C embebida podemos acceder al PIN 1 del puerto 1 usando P1_0. Hemos conectado un oscilador de cristal de 11.0592MHz de frecuencia al PIN 19 y 18, es decir, XTAL1 y XTAL2. El oscilador de cristal se usa para generar pulsos de reloj y el pulso de reloj se usa para proporcionar la media para el cálculo de tiempo, que es obligatorio para sincronizar todos los eventos. Este tipo de cristales se utilizan en casi todos los equipos digitales modernos, como computadoras, relojes, etc. El cristal más utilizado es el cuarzo. Es un circuito oscilador resonante y los condensadores se utilizan para hacer oscilar el cristal, por lo que hemos conectado aquí condensadores de 22pf. Puede leer sobre "circuitos resonantes" para saber más.
El diagrama de circuito para la interfaz de LED con el microcontrolador 8051 89S52 se muestra en la figura anterior. El pin 31 (EA) está conectado a Vcc, que es un pin activo bajo. Esto debería estar conectado a Vcc cuando no estemos usando ninguna memoria externa. El pin 30 (ALE) y el pin 29 (PSEN) se utilizan para conectar el microcontrolador a la memoria externa y el pin 31 le dice al microcontrolador que use la memoria externa cuando esté conectado a tierra. No estamos usando ninguna memoria externa, así que conectamos el Pin31 a Vcc.
El pin 9 (RST) es el PIN de restablecimiento, que se utiliza para restablecer el microcontrolador y el programa comienza de nuevo desde el principio. Restablece el microcontrolador cuando se conecta a HIGH. Hemos utilizado un circuito de reinicio estándar, una resistencia de 10k ohmios y un condensador de 1uF para conectar el pin RST.
Ahora, la parte interesante aquí es que conectamos el LED al revés, significa pata negativa con PIN del microcontrolador, porque el microcontrolador no proporciona suficiente energía para encender un LED, por lo que aquí el LED funciona con lógica negativa como cuando, el pin P1_0 es 1 luego el LED se apagará y cuando la salida del pin sea 0, entonces el LED se encenderá. Cuando la salida del PIN es 0, se comporta como tierra y el LED se ilumina.
Explicación del código
Se ha incluido el encabezado REGX52.h para incluir las definiciones de registro básicas. Hay muchos tipos de variables y constantes en C incrustado como int, char, unsigned int, float, etc., puede aprenderlas fácilmente. Aquí estamos usando unsigned int cuyo rango es de 0 a 65535. Estamos usando "for loop" para crear un retardo, por lo que el LED estará encendido por algún tiempo (P1_0 = 0, lógica LED negativa) y apagado (P1_0 = 1, lógica LED negativa) por tiempo retardado. Generalmente cuando "for loop" se ejecuta 1275 veces, da un retraso de 1ms, por lo que hemos creado la función 'delay' para crear DELAY y la llamamos desde el programa principal (main ()). Podemos pasar el tiempo de DELAY (en ms) mientras llamamos a la función "delay" desde la función principal. En el programa, "Mientras (1)" significa que el programa se ejecutará infinitamente.
Estoy explicando brevemente cómo 1275 veces la ejecución del bucle "for" dan un retraso de 1 ms:
En 8051, 1 ciclo de máquina requiere 12 pulsos de cristal para ejecutarse y hemos usado cristal de 11.0592Mhz.
Entonces, el tiempo requerido para 1 ciclo de máquina: 12 / 11.0592 = 1.085us
Entonces 1275 * 1.085 = 1.3ms, 1275 veces el ciclo "for" da casi 1ms de retraso.
El retardo de tiempo exacto producido por el programa “C” es muy difícil de calcular, cuando se mide desde un osciloscopio (CRO), ya que (j = 0; j <1275; j ++) dan un retardo de casi 1 ms.
Entonces podemos entender simplemente conectando el LED con el microcontrolador 8051, que con una codificación simple, podemos interactuar y controlar el hardware a través del software (programación) usando un microcontrolador. También podemos manipular cada puerto y pin del microcontrolador mediante programación.