Interfejs LED to pierwsza rzecz, którą można by spróbować, zaczynając pracę z dowolnym mikrokontrolerem. Tak więc w tym samouczku połączymy diodę LED z mikrokontrolerem 8051 i napiszemy program w C, który będzie migał diodą LED. Wykorzystaliśmy bardzo popularny mikrokontroler AT89S52 z rodziny 8051 firmy ATMEL.
Zanim przejdziemy do szczegółów, powinniśmy uzyskać krótkie wyobrażenie o mikrokontrolerze AT89S52. Jest to 40-pinowy mikrokontroler i ma 4 porty (P0, P1, P2, P3), każdy port ma 8 pinów. Z punktu widzenia oprogramowania każdy port możemy traktować jako rejestr 8-bitowy. Każdy pin ma jedną linię wejścia / wyjścia, co oznacza, że każdy pin może być używany zarówno do wejścia, jak i do wyjścia, tj. Do odczytu danych z jakiegoś urządzenia, takiego jak czujnik, lub do dostarczenia wyjścia do jakiegoś urządzenia wyjściowego. Niektóre piny mają podwójną funkcjonalność, o której wspomniano w nawiasie w poniższym schemacie pinów. Podwójna funkcjonalność jak dla przerwań, liczników, timerów itp.
AT89S52 ma dwa rodzaje pamięci, pierwszy to RAM, który ma 256 bajtów pamięci, a drugi to EEPROM (elektronicznie kasowalna i programowalna pamięć tylko do odczytu), która ma 8k bajtów pamięci. Pamięć RAM jest używana do przechowywania danych podczas wykonywania programu, a pamięć EEPROM używana do przechowywania samego Programu. EEPROM to pamięć flash, w której wypaliliśmy program.
Schemat obwodu i wyjaśnienie
Używamy pierwszego pinu portu 1 do podłączenia diody LED. W programowaniu wbudowanym C możemy uzyskać dostęp do PIN 1 portu 1 za pomocą P1_0. Podłączyliśmy oscylator kwarcowy o częstotliwości 11,0592 MHz do pinów 19 i 18, czyli XTAL1 i XTAL2. Oscylator kwarcowy służy do generowania impulsów zegarowych, a impuls zegarowy służy do wyznaczania średniej do obliczania czasu, który jest niezbędny do synchronizacji wszystkich zdarzeń. Tego typu kryształy są używane w prawie każdym nowoczesnym sprzęcie cyfrowym, takim jak komputery, zegarki itp. Najczęściej używanym kryształem jest kwarc. To rezonansowy obwód oscylatora, a do oscylacji kryształu używane są kondensatory, więc podłączyliśmy tutaj kondensatory 22pf. Możesz przeczytać o „obwodach rezonansowych”, aby dowiedzieć się więcej.
Schemat obwodu dla diody łączenia z 8051 mikrokontrolera 89S52 przedstawiono na rysunku powyżej. Pin 31 (EA) jest podłączony do Vcc, które jest aktywnym pinem niskim. Powinien być podłączony do Vcc, gdy nie używamy żadnej pamięci zewnętrznej. Pin 30 (ALE) i pin 29 (PSEN) służą do podłączenia mikrokontrolera do pamięci zewnętrznej, a pin 31 nakazuje mikrokontrolerowi korzystanie z pamięci zewnętrznej po podłączeniu do masy. Nie używamy żadnej pamięci zewnętrznej, więc podłączyliśmy Pin31 do Vcc.
Pin 9 (RST) to PIN resetowania, używany do resetowania mikrokontrolera i program rozpoczyna się od początku. Resetuje mikrokontroler po podłączeniu do HIGH. Użyliśmy standardowego obwodu resetowania, rezystora 10 kΩ i kondensatora 1uF do podłączenia pinu RST.
Ciekawostką jest teraz to, że diodę podłączamy odwrotnie czyli nogę ujemną z PIN mikrokontrolera, bo mikrokontroler nie dostarcza wystarczającej mocy do zaświecenia diody, więc tutaj dioda LED pracuje na logice ujemnej jak wtedy, gdy pin P1_0 to 1 wtedy dioda LED zostanie wyłączona, a gdy wyjście pinowe będzie miało wartość 0, dioda LED zostanie włączona. Gdy wyjście PIN ma wartość 0, zachowuje się jak masa, a dioda LED świeci.
Objaśnienie kodu
Dołączono nagłówek REGX52.h zawierający podstawowe definicje rejestrów. W osadzonym C jest wiele typów zmiennych i stałych, takich jak int, char, unsigned int, float itp. Możesz się ich łatwo nauczyć. Tutaj używamy unsigned int, którego zakres wynosi od 0 do 65535. Używamy „for loop” do tworzenia opóźnienia, tak że dioda LED będzie świecić przez jakiś czas (P1_0 = 0, ujemna logika diody LED) i WYŁ. (P1_0 = 1, ujemna logika LED) dla opóźnienia czasu. Generalnie, gdy „pętla for” działa 1275 razy, daje opóźnienie 1 ms, więc stworzyliśmy funkcję „delay” do tworzenia DELAY i wywołaliśmy ją z programu głównego (main ()). Możemy przekroczyć czas DELAY (w ms) wywołując funkcję „delay” z funkcji głównej. W programie „While (1)” oznacza, że program będzie wykonywał się w nieskończoność.
Krótko wyjaśniam, jak 1275 razy przebieg pętli „for” daje opóźnienie 1ms:
W 8051 1 cykl maszyny wymaga 12 impulsów kryształu do wykonania i używamy kryształu 11,0592 MHz.
Zatem czas potrzebny na 1 cykl maszyny: 12 / 11,0592 = 1,085us
Więc 1275 * 1,085 = 1,3 ms, 1275 razy pętla „for” daje prawie 1 ms opóźnienia.
Dokładne opóźnienie czasowe wytwarzane przez program „C” jest bardzo trudne do obliczenia, gdy mierzy się z oscyloskopu (CRO), ponieważ (j = 0; j <1275; j ++) daje opóźnienie prawie 1 ms.
Możemy więc zrozumieć, po prostu łącząc diodę LED z mikrokontrolerem 8051, że dzięki prostemu kodowaniu możemy współdziałać i sterować sprzętem za pomocą oprogramowania (programowanie) za pomocą mikrokontrolera. Możemy również manipulować każdym portem i pinem mikrokontrolera poprzez programowanie.