[8051][Funny] Co można zrobić z mikrokontrolera 80C51
: poniedziałek 08 maja 2017, 10:05
Na wstępie chcę poinformować, że pomysłodawcą poniższego dość humorystycznego i niezwykłego wykorzystania mikrokontrolera jest moja znakomita koleżanka Tasza. Swego czasu w “naszych rozmowach via e-mail” napisała mi, że ma ciekawe zastosowanie mikroprocesora. Co prawda tamte rozważania dotyczyły innego mikroprocesora i w sumie pomysł okazał się nierealizowalny (dokładniej rzecz ujmując jego realizacja wymagała użycia dodatkowo zbyt wielu układów). Zdumiało mnie jej tak niekonwencjonalne podejście do zastosowań starych mikroprocesorów. Jej pomysł bardzo zainspirował mnie do eksperymentów.
Otóż, rozpatrzmy klasyczną aplikację mikrokontrolera 80C51 (rysunek 1).Powyższy układ działa na tej zasadzie, że po wystawieniu na porcie P0 i P2 (wraz z strobem ALE – wpisem do rejestru 74xx573) wartości części adresu instrukcji, EPROM ma za zadanie na swojej szynie danych wystawić bajt pobieranego rozkazu do wykonania. Niech w ten sposób mikrokontroler będzie miał do wykonania instrukcję NOP – nic nie rób. W wyniku wykonania tej instrukcji zostanie zwiększony o jeden (ponieważ ta instrukcja jest jednobajtowa) adres wskazujący na następną instrukcję do wykonania. Efektem tego będzie wystawienie w następnym cyklu na porcie P0 i P2 adresu zwiększonego o jeden. Jeżeli stale dostarczać mikrokontrolerowi do wykonania instrukcję NOP, to po wykonaniu kolejnej instrukcji NOP, mikrokontroler zwiększy adres o jeden. Ponieważ instrukcja NOP mająca kod składający się z samych wyzerowanych bitów, nie bardzo nadaje się do “stałego podstawienia” (jej realizacja wymagałaby użycia dodatkowego układu), rozpatrzmy instrukcję o kodzie składającym się z samych ustawionych bitów. Analizując listę instrukcji zauważyć można, że jest to dwubajtowa instrukcja:
MOV R7,#<stała>
Jeżeli ma szynie danych mikrokontrolera zostanie wymuszony stan samych jedynek, to mikrokontroler będzie cyklicznie wykonywał instrukcję MOV R7,#255. W sumie to istotne jest by nie była to żadna instrukcja skoku, by licznik rozkazów w sposób naturalny był zwiększany o jeden. Rozpatrzmy użycie mikrokontrolera w następującym układzie (rysunek 2):Mikrokontroler w tym układzie będzie ciągle wykonywał instrukcję MOV R7,#255 i po każdym wykonaniu będzie zwiększał stan szyny adresowej, która będzie udostępniona na wyjściach portu P0 (po wpisie do rejestru zatrzasku) i P2. Stan wyjść Q0 do Q15 (rysunek 2) będzie zachowywać się jak licznik zliczający wykonane cykle maszynowe. Wykonanie cykli maszynowych jest determinowane poprzez impulsy taktujące doprowadzone z generatora (U1 na rysunku 2) do wyprowadzenia X2 w mikrokontrolerze. Przyłączając do szyny adresowej zestaw diód LED można zobrazować stan szyny adresowej (rysunek 3). Użyto tu układów typu ULN2803, które spełniają podwójną rolę. Z jednej strony oddzielają wyjścia portów od prądów obciążenia płynącego przez diody oraz zmieniają niejako polaryzację sygnału logicznego (dioda świeci gdy na wyjściu portu jest stan wysoki, czyli poprawnie obrazują stan szyny danych).Do eksperymentów został użyty generator o częstotliwości 1,8 MHz (o najmniejszej częstotliwości jaki znalazłem w szufladzie). Pomimo tego prędkość zliczania była zbyt duża by zaobserwować “gołym okiem” poprawność działania. W tor generatora został wstawiony dzielnik częstotliwości (rysunek 4) dający podział przez 16.Biorąc pod uwagę, że sam mikrokontroler dzieli częstotliwość taktującą (wynika to z tego, że wykonanie każdej instrukcji zajmuje dla mikrokontrolera określoną stałą liczbę taktów, jest to cecha mikrokontrolera), daje się zauważyć nawet nieuzbrojonym okiem, że tak użyty mikrokontroler jest 16-bitowym licznikiem wejściowych impulsów (dokładnie sam mikrokontroler dzieli częstotliwość impulsów wejściowych przez 12 – jest to cecha konstrukcyjna samego mikrokontrolera). Warto tu jeszcze zauważyć, że niektórzy producenci przedmiotowego mikrokontrolera zwiększyli moc jego przetwarzania tworząc układy realizujące wykonanie instrukcji w jednym takcie zegarowym, co oznacza, że opisany dzielnik częstotliwości impulsów nie będzie zawierał w sobie wstępnego preskalera (lub ewentualnie preskaler o innym stopniu podziału). Cały układ badawczy przedstawiony jest na fotografii.Reasumując, jeżeli zajdzie kiedykolwiek potrzeba użycia 16-bitowego licznika binarnego ze wstępnym preskalerem dzielącym impulsy taktujące przez 12 i w szufladzie wala się procesor 80C51 bez przydziału, to ... będzie miał już swoje zastosowanie, co prawda nietypowe, ale... Można to jeszcze rozpatrywać w kategorii żartu. Jeżeli mamy zlecenie na zbudowanie egzemplarza jakiegoś urządzenia, z użyciem 16-bitowego licznika (może być ewentualnie wykorzystane mniej bitów) można zaimplementować dzielnik bazujący na procesorze 80C51. To dopiero będzie rozkmina przez użytkownika, WTF?