A interface de LED é a primeira coisa que se tentaria fazer ao começar a usar qualquer microcontrolador. Então, aqui neste tutorial, faremos a interface de um LED com o microcontrolador 8051 e escreveremos um Programa C para piscar o LED. Usamos um microcontrolador muito popular AT89S52, da família 8051, da ATMEL.
Antes de entrar em detalhes, devemos ter uma breve ideia sobre o microcontrolador AT89S52. É um microcontrolador de 40 pinos e possui 4 portas (P0, P1, P2, P3), cada porta possui 8 pinos. Podemos considerar cada porta como um registrador de 8 bits, do ponto de vista do software. Cada pino tendo uma linha de entrada / saída, significa que cada pino pode ser usado para entrada e saída, ou seja, para ler dados de algum dispositivo como sensor ou para fornecer sua saída para algum dispositivo de saída. Alguns pinos têm a funcionalidade Dual, que foi mencionada entre colchetes no diagrama de pinos abaixo. Dual funcionalmente como para interrupção, contadores, temporizadores, etc.
O AT89S52 tem dois tipos de memória, o primeiro é a RAM, com 256 bytes de memória, e o segundo, a EEPROM (memória somente leitura apagável eletronicamente e programável), que possui 8k bytes de memória. A RAM é usada para armazenar os dados durante a execução de um programa e a EEPROM usada para armazenar o próprio Programa. EEPROM é a memória flash na qual usamos para gravar o programa.
Diagrama de Circuito e Explicação
Estamos usando o pino um da porta 1 para conectar o LED. Na programação C incorporada, podemos acessar o PIN 1 da porta 1 usando P1_0. Conectamos um oscilador de cristal com frequência de 11,0592 MHz ao PIN 19 e 18, ou seja, XTAL1 e XTAL2. O oscilador de cristal é usado para gerar pulsos de clock, e o pulso de clock é usado para fornecer a média para o cálculo do tempo, que é obrigatório para sincronizar todos os eventos. Este tipo de cristal é usado em quase todos os equipamentos digitais modernos, como em computadores, relógios, etc. O cristal mais comumente usado é o quartzo. É um circuito oscilador ressonante e capacitores são usados para oscilar o cristal, então conectamos aqui capacitores de 22pf. Você pode ler sobre “circuitos ressonantes” para saber mais.
O diagrama de circuito para interface do LED com o microcontrolador 8051 89S52 é mostrado na figura acima. O pino 31 (EA) está conectado ao Vcc, que é um pino baixo ativo. Ele deve ser conectado ao Vcc quando não estivermos usando nenhuma memória externa. O pino 30 (ALE) e o pino 29 (PSEN) são usados para conectar o microcontrolador à memória externa e o pino 31 diz ao microcontrolador para usar a memória externa, quando conectado ao aterramento. Não estamos usando nenhuma memória externa, então conectamos o Pin31 ao Vcc.
O pino 9 (RST) é o PIN de reinicialização, usado para reinicializar o microcontrolador e o programa novamente começa do início. Ele reinicia o microcontrolador quando conectado em HIGH. Usamos circuito de reset padrão, resistor de 10k ohm e capacitor de 1uF para conectar o pino RST.
Agora a parte interessante aqui é que conectamos o LED ao contrário, significa perna negativa com o PIN do microcontrolador, porque o microcontrolador não fornece energia suficiente para acender um LED, então aqui o LED funciona na lógica negativa como quando o pino P1_0 é 1 então o LED será desligado e quando a saída do pino for 0, o LED será ligado. Quando a saída do PIN é 0, ele se comporta como o aterramento e o LED acende.
Explicação do código
O cabeçalho REGX52.h foi incluído para incluir as definições básicas de registro. Existem muitos tipos de variáveis e constantes em C embutido como int, char, unsigned int, float etc, você pode aprendê-los facilmente. Aqui estamos usando unsigned int cujo intervalo é de 0 a 65535. Estamos usando “for loop” para criar atraso, de modo que o LED ficará aceso por algum tempo (P1_0 = 0, lógica negativa do LED) e apagado (P1_0 = 1, lógica negativa do LED) para tempo de atraso. Geralmente, quando o “for loop” é executado por 1275 vezes, dá um atraso de 1ms, então criamos a função 'delay' para criar DELAY e a chamamos do programa principal (main ()). Podemos passar o tempo DELAY (em ms) enquanto chamamos a função “delay” da função principal. No programa, “While (1)” significa que o programa será executado infinitamente.
Estou explicando resumidamente, como 1275 vezes de execução de loop "for" dá atraso de 1 ms:
Em 8051, 1 ciclo de máquina requer 12 pulsos de cristal para ser executado e usamos cristal de 11.0592Mhz.
Portanto, o tempo necessário para 1 ciclo da máquina: 12 / 11,0592 = 1,085us
Portanto, 1275 * 1,085 = 1,3 ms, 1275 vezes de loop “for” dá quase 1 ms de atraso.
O atraso de tempo exato produzido pelo programa “C” é muito difícil de calcular, ao medir a partir do osciloscópio (CRO), pois (j = 0; j <1275; j ++) dá um atraso de quase 1ms.
Assim podemos entender simplesmente fazendo a interface do LED com o microcontrolador 8051, que com uma simples codificação podemos interagir e controlar o hardware através de software (programação) utilizando microcontrolador. Também podemos manipular cada porta e pino do microcontrolador através da programação.