Historia mikrokontrolerów

Wielkość: px
Rozpocząć pokaz od strony:

Download "Historia mikrokontrolerów"

Transkrypt

1 Historia mikrokontrolerów Dość złożone w budowie, elementy elektroniczne stosowane są powszechnie w komputerach klasy PC. W nie tak odległej przeszłości wielu użytkowników sędziwego dziś Spektruma, Commodora czy Atari często nie zdawało sobie sprawy, że jest posiadaczem mniej czy bardziej skomplikowanego układu mikroprocesorowego. Jednak mikroprocesory nie zostały wynalezione jedynie po to, aby zadowalać coraz bardziej wymagającego użytkownika, żądnego maszyn coraz szybciej obrabiające dane, chcącego mieć dostęp do multimedialnych gier zajmujących niebotyczne ilości miejsca na dysku twardym komputera domowego. Od samego początku inteligentnych układów cyfrowych na rynku elektronicznym istniała grupa dość prostych, na pierwszy rzut oka, mikroprocesorów, których ewolucja nie potraktowała tak ostro, jak to miało miejsce w wypadku rodziny Układy 8086 to prawdziwi pradziadowie procesorów Pentium obecnie masowo stosowanych w komputerach PC. Wspomniane układy, będące niejako oddzielną gałęzią w rodzinie układów cyfrowych wielkiej skali integracji przetrwały w niezmiennej postaci od kilkunastu lat. Co mogło być powodem tego stanu rzeczy? Otóż dzięki architekturze, czyli budowie wewnętrznej tych układów, okazało się możliwe zastosowanie ich nie tylko w specjalizowanym sprzęcie komputerowym. Głównym rynkiem zbytu okazali się producenci różnego rodzaju sprzętu gospodarstwa domowego, od ekspresów do kawy począwszy, poprzez sprzęt radiowo-telewizyjny, AGD, na motoryzacji skończywszy. Sam procesor to nie wszystko. Nasz na pozór inteligentny układ cyfrowy bez dołączenia kilku dodatkowych elementów zewnętrznych: zegara, pamięci, układów wejścia/wyjścia (I/O) potrafi niewiele. I wtedy ktoś padł na pomysł umieszczenia samego mikroprocesora z wymienionymi układami peryferyjnymi w jednym układzie scalonym. Tak powstał pierwszy mikrokontroler a właściwie mikrokomputer jednoukładowy. Słowo mikrokomputer: nie jest bynajmniej na wyrost, bowiem stworzony scalak był w istocie kompletnym komputerem tylko że w małym formacie. W wnętrzu posiadał jakby rdzeń, który potrafił przetwarzać komendy wydawane przez programistę; pamięć w której mógł przechowywać wyniki obliczeń oraz układy do komunikacji ze światem zewnętrznym czyli tzw. porty. Tak funkcjonalna budowa oraz, co miało nie małe znaczenie, niska cena mikrokontrolera, utorowała mu drogę do zastosowań praktycznie wszędzie. Niektóre z mikrokontrolerów wyspecjalizowały się w konkretnych dziedzinach tak bardzo, że nie potrafiły znaleźć miejsca gdzie indziej. Najprostszym przykładem niech będzie zapomniany już układ zegara MC1206. Przykładów może być wiele. Obecnie istnieje kilka rodzin tych układów, których producentami są największe koncerny elektroniczne na świecie. W mikroprocesorowym świadku najbardziej znani producenci to: Mikrochip, ze swoją rodziną: jednoukładowców PIC... Motorola, lansująca układy 8, 16 i 32-bitowych mikrokontrolerów jednoukładowych Intel, produkujący bodaj najbardziej popularne procesory serii Zilog, producent nowoczesnych kontrolerów jednoukładowych następców poczciwego Z80 (wykorzystywanego w produkcji sędziwego ZX81, ZX Spectrum) SGS-Thompson z rodziną ST62. Istnieje także kilka innych firm, które na bazie licencji opracowały mutacje tych procesorów, wyposażając je w wiele dodatkowych bloków funkcjonalnych, zachowując przy tym pełną kompatybilność

2 ze swymi pierwowzorami. Do nich z pewnością zależy zaliczać Philipsa, Siemesa oraz dwie amerykańskie firmy: Dallas oraz Atmel, które w ostatnich latach zaskoczyły najbardziej popularnych mikrokontrolerów jednoukładowych. Do zastosowań amatorskich (a nawet w pełni profesjonalnych) najbardziej praktyczne są mikroprocesory 8-bitowe. Wersje 16 i 32 bitowe są po prostu za dobre, a także za drogie jak na potrzeby domowego czy szkolnego laboratorium, Wśród popularnych 8-bitowych do niedawna prym wiodły Z80, niestety ze względu na ograniczone możliwości obsługi urządzeń peryferyjnych (wejścia/wyjścia) bez konieczności stosowania dodatkowych układów scalonych rodziny Z80 słuch praktycznie o nich zaginął. Obecnie najbardziej popularne mikrokontrolery to kostki PIC (Mikrochip) oraz rodzina MCS-51, czyli procesory oparte o układ SCHEMAT 8051 Końcówki 1..8 (Port P1) Są to wyprowadzenia 8-bitowego uniwersalnego portu mikroprocesora oznaczonego w literaturze jako P1. Port może pełnić rolę wyjścia informacji binarnej. Tak więc, jeżeli zachodzi potrzeba, procesor może np. wpisać do portu P1 dowolną liczbę binarną z zakresu , np. 48. Binarnie liczba 48 = b. Oznaczenie poszczególnych końcówek portu P1 wskazują na kolejną pozycje bitu (cyfry liczby binarnej), co pokazuje rysunek. Port (cały lub niektóre z jego pinów), podobnie jak przy zapisie, można ustawić także jako wejście informacji logicznej. Każde z wyprowadzeń staje się wtedy wyjściem o wysokiej impedancji dzięki temu dowolny poziom logiczny podany z wyjścia jakiegoś układu cyfrowego może być odczytany poprzez piny portu a informacja czy tym stanem była logiczna 1 czy 0, zostaje wykorzystana przez procesor dla dalszego jego działania w zależności od spełnianej funkcji. Krótko mówiąc, procesor może odczytać stany logiczne, jakie z zewnątrz podano na końcówki portu. Oczywiście poziomy logiczne napięć wejściowych portu P1 (oraz dla każdego innego )muszą zawierać się w przedziale napięć zasilania mikrokontrolera, czyli w zakresie 0...5V. Detekcja poziomów logicznych odbywa się jak dla bramek CMOS, stąd wartości progowe napięć tych stanów są zbliżone do połowy napięcia zasilającego. Istotną informacją jest fakt że w trybie odczytu z portu P1 koń- 2

3 cówki są wewnętrznie podczepiane (podciągane )do plusa zasilania poprzez wbudowane w 8051 rezystory, co wymusza odczyt wysoki z portu w wypadku nie podłączenia końcówki poru. Końcówka (RST) Z tematem mikroprocesorów czy mikrokontrolerów nierozłącznie wiąże się pojęcie resetowania czy jak kto woli kasowania układu. Czynność ta wykonywana poprzez podanie logicznej 1 na te wyprowadzenie na pewien okres czasu powoduje skasowanie układu, a więc natychmiastowe przerwanie wykonywanych czynności i rozpoczęcie cyklu działania procesora od samego początku (tak jakbyśmy włączyli zasilanie układu). Czas trwania dodatniego impulsu kasującego zależy od częstotliwości z jaką pracuje mikroprocesor. Z reguły w typowych zastosowaniach czas 1ms w zupełności wystarcza. W układach praktycznych do końcówki RST dołącza się mniej lub bardziej skomplikowany układ który generuje wymagany impuls zerujący najczęściej w trzech przypadkach: Po włączeniu zasilania układu na nasze żądanie - poprzez np. przyciśnięcie klawisza (umieszczonego z reguły na płytce drukowanej tuż obok procesora). W sytuacjach awaryjnych, kiedy np. poprzez zakłócenie najczęściej na liniach zasilających nastąpi błędne działanie układu mikroprocesora, w żargonie często określa się to mianem zawieszania lub niekontrolowanej pracy układu Trzeci przypadek dotyczy bardziej złożonych układów stosowanych szczególnie w automatyce i elektronice przemysłowej. My najczęściej spotykamy się z dwiema pierwszymi sytuacjami. W starszych wersjach 8051 wykonanych w technologii HMOS, niezbędny okazał się dodatkowy rezystor blokujący wejście RST do masy, co zapewniało wymuszenie stanu niskiego na tym pinie podczas normalnej pracy układu. W nowych katalogach opisujących układy w wersji CMOS, rezystor jest ten pominięty, aczkolwiek w praktycznych układach powinniśmy przewidzieć miejsce na płytce drukowanej, ze względu na różnorodność procesorów Końcówki o numerach (Port P3) Podobnie jak w przypadku portu P1, port P3 może pełnić wszystkie opisane wcześniej funkcje może być wyjściem lub wejściem. Port P3 spełnia dodatkowe funkcje. Piny P3.0 (RXD) i P3.1 (TXD) mogą pełnić rolę portu transmisji szeregowej. W praktyce poprzez te dwa wyprowadzenia można przesyłać informację (bajty i bity) z i do procesora z innych układów cyfrowych w sposób szeregowy, tzn. bit po bicie. Przesyłanie to może odbywać się na kilka sposobów: synchronicznie wtedy pin P3.0 pełni role dwukierunkowej magistrali szeregowej, po której przesyłane są dane, zaś pin P3.1 generuje sygnał taktujący, pełniąc rolę zegara. asynchronicznie kiedy z góry zadajemy prędkość transmisji pomiędzy naszym układem np. łączem RS232c komputera PC. W takim przypadku końcówka P3.0 RXD pełni rolę odbiornika przesyłanych szeregowo danych (R oznacza receive odbiór), zaś końcówka P3.1 TXD nadajnika (T-transmitt nadawanie). Ponadto rozróżnia się kilka trybów pracy asynchronicznej. Alternatywą funkcji końcówek P3.2 (INT0) oraz P3.3 (INT1) jest funkcja detekcji przerwań zewnętrznych. Pojęcie przerwania w tym przypadku odnosi się do zmiany stany logicznego z 1 na 0. W efekcie we wnętrzu procesora 8051zostaje ustawiona tak zwana flaga (nazywana także jako znacznik zgłoszenia przerwania, co w odniesieniu do techniki cyfrowej można wyobrazić sobie jako przerzutnik). Konsekwencją tego jest automatyczne przerwanie wykonywania przez procesor programu i natychmiastowe przejście do wykonania czynności ściśle określonych przez programistę. Ciąg takich czynności nazywany jest w technice mikroprocesorowej: procedurą obsługi przerwania. Wykrycie zmiany stanu logicznego na końcówkach przerwań INT0 i INT1 wiąże się ze spełnieniem 3

4 jednego warunku, a mianowicie, aby czas od wspomnianego ujemnego zbocza sygnału zgłoszenia przerwania do ponownego przejścia w stan wysoki był odpowiedni długi. Podobnie jak w przypadku warunku sygnału RST, czas ten zależy od częstotliwości zegara mikroprocesora. Końcówki (P3.4 i P3.5) oznaczone jako T0 i T1 pełnią dodatkową funkcję wejść uniwersalnych, programowanych liczników, wbudowanych w strukturę Procesor zawiera dwa bliźniacze liczniki T0 i T1. Maksymalnie mogą one zliczać do 2 16 =65536,po czym zostają wyzerowane. Liczniki te oprócz zliczania impulsów z wejść T0 i T1 mogą także zliczać impulsy wewnętrzne, pochodzące z generatora mikrokontrolera. W praktyce wykorzystywane jest to np. do odmierzania określonych odcinków czasu np. przy funkcji zegarka. Liczniki mogą być programowane przez użytkownika, a więc można np. zmniejszyć pojemność (do 2 8 lub 2 13 ), można także zapisać w nich wartość początkową, zatrzymać je w dowolnym momencie lub uruchomić. Pin WR jest sygnałem zapisu do zewnętrznej pamięci danych, a końcówka RD wysyła sygnał do odczytu. Końcówki 18 i 19(XTAL1 i XTAL2) Końcówki te służą do dołączenia zewnętrznego rezonatora kwarcowego o częstotliwości zależnej od potrzeb użytkownika, ale także od wersji układu W praktyce częstotliwość ta może wynosić od 1,2MHz do MHz na rynku spotyka się także wersje procesorów pracujące przy wyższych częstotliwościach nawet do 40MHz, a także przy niskich nawet do pojedynczych herców w wypadku procesorów 8051 w wersji statycznej (np. 89C51 firmy Atmel). Dołączony do tych pinów rezonator kwarcowy po uzupełnieniu o dodatkowe kondensatory o wartości z reguły z przedziału pF (w zależności od wartości rezonatora), umożliwiają pracę wbudowanemu w 8051 generatorowi, który napędza cały mikroprocesor. Oczywiście od częstotliwości rezonatora ściśle zależy szybkość działania naszego mikrokontrolera. Częstotliwość, z jaką pracują wewnętrzne układy mikroprocesora, jest określona wzorem: F=f xtal /12, gdzie f xtal jest częstotliwością rezonatora kwarcowego. Powodem takiego podziału częstotliwości rezonatora jest wewnętrzna architektura wszystkich procesorów serii Końcówka XTAL1 (pin19) w układach w wersji CMOS może także pełnić rolę wejścia zewnętrznego sygnału zegarowego o częstotliwości w zakresie, jak opisano w przypadku stosowania rezonatora kwarcowego. Wtedy rezonator i dodatkowe kondensatory są zbędne. W przypadku gdy mamy do czynienia z wersją w technologii HMOS wejściem takiego sygnału jest XTAL2 (pin 18). W obu przypadkach pozostały pin powinien być nie podłączony. Końcówka 20 (Vss) Podobnie jak w większości układów cyfrowych ostatnie wyprowadzenie w dolnym rzędzie obudowy jest końcówką ujemnego napięcia zasilającego masy (GND). W przypadku układów CMOS 4

5 podaje się oznaczenie Vss co oznacza biegun ujemny napięcia zasilającego. W naszych zastosowaniach będziemy dołączać ten pin do masy przyszłego układu elektronicznego. Końcówki o numerach (Port P2) Są to wyprowadzenia drugiego 8-bitowego portu procesora. Port P2 spełnia wszystkie funkcje podobnie jak P1. Dodatkowo poprzez końcówki portu P2 podawana jest w razie potrzeby starsza część adresu (A8...A15) przy dostępie do zewnętrznej pamięci danych (SRAM) a także programu (np. EPROM). Końcówka 29 (PSEN) W przypadku pracy procesora z zewnętrzną pamięcią programu (np. EPROM) końcówka ta wysyła sygnał odczytu z tej pamięci. W praktyce jest ona dołączona do wejścia OE współpracującej pamięci EPROM. Procesor chcąc odczytać kolejny rozkaz (polecenie do wykonania) z zewnętrznej pamięci programu podaje poziom niski na końcówkę PSEN a następnie dokonuje odczytu. Dzieje się tak w ściśle określonych warunkach, synchronicznie z częstotliwością zegara procesora. Jeżeli posiadamy wersję procesora z wewnętrzną pamięcią (typu EPROM lub EEPROM), i wykorzystujemy prace z tą wewnętrzną pamięcią, końcówka 29 powinna pozostać niepodłączona. Końcówka 30 (ALE) Informacje o tej końcówce zawarte są w opisie portu P0, czyli końcówek Końcówka 31 (EA) Powinna być dołączona do masy, jeżeli mikroprocesor pobiera rozkazy w zewnętrznej pamięci programu, lub do plusa zasilania (+5V) jeżeli z wewnętrznej. W pewnych układach procesor pomimo że posiada wewnętrzną pamięć programu, ze względu na zbyt małą jej pojemność, musi sięgać do zewnętrznej pamięci. W takim przypadku pin EA powinien być dołączony do plusa zasilania, tak aby procesor po jego resecie mógł rozpocząć pracę pobierając rozkazy z wbudowanej pamięci programu. Należy także pamiętać że dołączenie EA do masy blokuje wewnętrzną pamięć programu jeżeli ona istnieje. W praktyce jest to często stosowany chwyt, kiedy kupujemy w sklepie na ogół kilkakrotnie tańszą wersję procesora z pamięcią wewnętrzną typu ROM. W pamięci takiej najczęściej zapisany jest pewien program lecz, z naszego punktu widzenia jest on zupełnie bezużyteczny. Toteż aby w pełni wykorzystać walory mikroprocesora (oczywiście przy pracy z zewnętrzną pamięcią programu) bez uruchamiania nieznanego nam programu, blokujemy pamięć ROM poprzez zwarcie EA do masy. Końcówki o numerach (Port P0) Trzecim i ostatnim uniwersalnym portem procesora 8051 jest port P0. Podstawowe funkcje portu jako dwukierunkowej bramy do wymiany danych są takie same jak w przypadku portów P1 i P2. Zasadniczą różnicą jest jednak zwiększona obciążalność (do 8 wejść TTL) tego portu oraz fakt nie posiadanie wbudowanych rezystorów podciągających końcówki portu do plusa zasilania w przypadku odczytu. Dlatego przy projektowaniu dowolnych układów wyjściowych dołączanych do tego portu należy uwzględnić wspomniane wartości tak, aby np. odpowiednio spolaryzować bazy tranzystorów. Drugą bardzo ważną rolą, jaką pełni P0, jest funkcja multipleksowanej magistrali danych (8- bitów:d7...d0) i młodszej części adresu (A7...A0). multipleksowanej w praktyce znaczy przełączalnej, czyli raz na końcówkach portu P0 procesor może wystawić bajt danych (np. do zapisu do wewnętrznej pamięci danych), w innym przypadku adres, w celu wybrania potrzebnej komórki z pamięci SRAM, do której ma być zapisana. Do zapisu danej w zewnętrznej pamięci SRAM potrzeba w sumie 16 sygnałów adresu (A0...A15) oraz 8-bitów (sygnałów) danej. Potrzebne są zatem 3 ośmiobitowe porty (2 na adres i jeden na daną), a my mamy do dyspozycji tylko dwa P2 i P0. I tu właśnie leży zasada multipleksowania (naprzemiennego wystawiania adresu lub danej) procesora Otóż sygnał informacje o tym, co aktualnie znajduje się na szynie poru P0, pojawia się na wyprowadzeniu 30 oznaczonym jako ALE. Sygnał ten można nazwać sygnałem zapisu adresu do dodatkowego zewnętrznego układu cyfrowego. Układ ten jest 8-krotnym zatrzaskiem aktywnym wysokim poziomem logicznym. W momencie kiedy 8051 wystawi na port P0 młodszą część adresu (A7...A0), daje temu sygnał, zmieniając stan na końcówce ALE z niskiego na wysoki. W efekcie po nadejściu tym razem opadającego zbocza sygnału ALE, dana (adres) z portu P0 zostaje zapisana w zatrzasku. Teraz na ośmiu 5

6 jego wyjściach adres będzie utrzymywany niezależnie od zmieniających się stanów w porcie P0 aż do nadejścia następnego sygnału z końcówki ALE. Skoro procesor posługując się dodatkowym układem zapisał na zewnętrzny adres, może teraz śmiało wystawić na port P0 daną, która ma być zapisana w zewnętrznej pamięci danych. Oczywiście można też odczytać dane z pamięci. W przypadku nie korzystania z możliwości obsługi zewnętrznej pamięci tak programu (EPROM) lub danych (SRAM) końcówka ALE (30) jest nieodłączona. Końcówka 40 (Vcc) Oczywiście jest to końcówka zasilania mikroprocesora Napięcie względem końcówki Vss (czyli masy) z reguły nie może przekroczyć 6,5V. Dlatego układ mikrokontrolera należy zasilać napięciem 5V±0,25V używając do tego celu dowolnego zasilacza stabilizowanego. Zasadą przy projektowaniu układów z 8051 jest blokowanie tego wyprowadzenia kondensatorem o wartości 100nF do masy układu cyfrowego. Praktycznie na płytce drukowanej należy zawsze przewidzieć miejsce na taki kondensator umieszczając go jak najbliżej samego układu procesora lub po prostu przylutowując go od strony wyprowadzeń na płytce drukowanej. 6

7 BUDOWA MK8051 REJESTR B W operacjach mnożenia i dzielenia jeden z argumentów przechowywany jest w akumulatorze, a drugi w rejestrze B. Podobnie wynik wykonywanej operacji. Jeśli nie przewiduje się użycia tych rozkazów, to rejestr B może być wykorzystany do innych celów. AKUMULATOR A Akumulator A lub ACC (Accumulator) służy przede wszystkim do przechowywania jednego z argumentów (danej) w operacjach arytmetycznych i logicznych, a po ich wykonaniu do przechowywania wyniku operacji. Jednak część operacji logicznych wykonywana jest poza akumulatorem. Tylko w akumulatorze można przesuwać daną o jeden bit w lewo lub w prawo. Akumulator, co jest jego zasadniczą wadą, uczestniczy przy przesyłaniu wszystkich danych z/do zewnętrznej pamięci danych oraz pobierania argumentów z pamięci programu. WSKAŹNIK STOSU SP Jak w każdym komputerze także i w mikrokontrolerach rodziny '51 do wywoływania podprogramu przy przejściu do wykonywania innego podprogramu tworzony jest stos. Stosem jest wydzie- 7

8 lony fragment wewnętrznej pamięci RAM adresowany wskaźnikiem stosu SP. Kolejność odczytu bajtów ze stosu jest odwrotna w stosunku do kolejności ich zapisywania, zgodnie z regułą pamięci LIFO. Bezpośrednio dostępne są tylko bajty adresowane przez wskaźnik stosu SP znajdujące się na wierzchołku stosu, a nie w jego wnętrzu. Sytuację tę można porównać do sterty książek ułożonych jedna na drugiej. Dokładając kolejną książkę umieszcza się ją na szczycie sterty. Zabierając książkę ze sterty zabiera się książkę leżącą na jej szczycie. Książki leżące we wnętrzu sterty nie są dostępne. Stos używany jest do zapamiętywania adresów powrotu z podprogramów wywołanych programowo lub sprzętowo (przez przerwania), przenoszenia zmiennych między programami, czasowej ochrony rejestrów specjalnych i komórek wewnętrznej pamięci RAM jeśli są one zmieniane w trakcie wykonywania podprogramów. Najprościej stos można określić jako bardzo prostą w działaniu strukturę przechowującą bajty. Pod pojęciem przechowywania rozumiemy oczywiście operację zapisu a następnie odczytu dowolnej zmiennej lub rejestru SFR. W przypadku takich operacji tylko z udziałem np. wewnętrznej pamięci danych użytkownika, aby dokonać zapisu (odczytu) musisz daną komórkę pamięci najpierw zaadresować - czyli po prostu podać jej fizyczny adres. W przypadku korzystania ze stosu adresowanie jest niekonieczne. Przy takim sposobie obsługi konieczne jest jednak zachowanie odpowiedniej kolejności w zapisie i odczycie tak aby nasze cenne dane nie "pomieszały się". Otóż taki uporządkowany sposób przechowywania danych charakteryzuje właśnie stos. Rysunek wyjaśnia fizyczną budowę stosu. Jak widać wszystkie dane (bajty) przy zapisie odkładane są "na stos" jedna na drugą. Na wierzchołku stosu znajduje się zawsze ostatnio odłożona dana (w naszym przykładzie oznaczona jako X), toteż aby "dobrać się" do danej leżącej pod nią (Y) należy najpierw "zdjąć" ze stosu daną X, a potem dopiero odczytać Y. Można to porównać do stosu talerzy ustawionych jeden nad drugim. Odkładamy talerze na stos i zdejmujemy ze stosu. Nie możemy wyjąć talerza "z głębi" stosu - dostajemy się do niego dopiero po zdjęciu wszystkich stojących na nim. "Po co jednak jest ten "stos", czy nie jest to tylko niepotrzebna komplikacja"? Otóż struktura ta spełnia niezmiernie ważną rolę podczas wykonywania programu przez mikroprocesor. Po pierwsze: stos służy do przechowywania zmiennych lub rejestrów SFR. Po drugie: dostęp do nich (zmiennych) odbywa się w sposób uporządkowany. Stos umieszczony jest w wewnętrznej pamięci danych użytkownika, czyli w obszarze o adresach 00h...7Fh. Jak wynika z rysunku ilość tej pamięci zajętej przez stos będzie się zmieniać i zależeć od tego ile bajtów odłożyliśmy na ten stos. Aby ściśle określić miejsce położenia stosu, w architekturze 8051 znajduje się tzw. licznik stosu, a fachowo mówiąc "wskaźnik stosu". Fizycznie jest on po prostu 8-bajtowym rejestrem w obszarze SFR, położonym pod adresem 81h. W mnemonice (nazewnictwie) procesorów MCS-51 posiada on symbol SP (z ang. "Stack Pointer") - wskaźnik stosu. 8

9 Jego zadaniem jest automatyczne wskazywanie miejsca aktualnego wierzchołka stosu. Tak więc w przypadku odłożenia bajtu na stos, wskaźnik SP jest automatycznie zwiększany o 1. W przypadku zdjęcia danej ze stosu jest on zmniejszany. Sytuację tą wyjaśnia poniższy rysunek: Stos jest więc hierarchiczną strukturą do przechowywania danych (bajtów) z obszaru wewnętrznej pamięci RAM (włączając SFR) a położenie jego wierzchołka jednoznacznie określa jego wskaźnik SP. Przy korzystaniu ze stosu obowiązuje zasada, "ile bajtów odłożyłeś na stos, tyle potem musisz zdjąć", tak aby struktura stosu nie została zakłócona. W praktyce ma to szczególne znaczenie, bowiem stos wykorzystywany jest nie tylko poprzez świadome działanie użytkownika lecz także przechowywane są na nim ważne dla działania całego mikrokontrolera adresy powrotów z podprocedur oraz z procedur oraz obsługi przerwań, czyli innymi słowy mówiąc, aktualne zawartości 16-bitowego licznika rozkazów PC. Stos jednak składa się z 8-bitowych komórek, a licznik rozkazów jest 16- bitowy. Aby rozwiązać ten problem procesor na stos odkłada się najpierw młodszy bajt rejestru PC, a następnie starszy bajt, wskaźnik stosu zostaje więc zwiększony automatycznie o 2. Tak więc w prosty sposób można przechować inne rejestry podwójne np. wskaźnik adresu zewnętrznej pamięci DPTR, składający się z dwóch 8-bitowych rejestrów DPH (adresy 83h) oraz DPL (adres 82h). W przypadku rejestru DPTR jak i innych SFR przechowywanie na stosie odbywa się "na żądanie" użytkownika. Teraz jeszcze kilka informacji. Otóż po wyłączeniu zasilania procesora (lub jego resecie) wskaźnik stosu przyjmuje domyślnie wartość 07h - czyli po prostu 7, wskazując tym samym, że wierzchołek stosu - adres umieszczenia następnej danej - po odłożeniu jej na stos położony będzie w wewnętrznej pamięci danych pod adresem 08h (07h + 1 zgodnie z opisaną wcześniej zasadą). Jeśli więc odłożymy jakiś bajt na stos, najpierw licznik SP zostanie automatycznie zwiększony o 1, a następnie do komórki o adresie 08h, zostanie wpisany ten bajt. Przy zdjęciu ze stosu kolejność będzie odwrotna, najpierw zdjęty zostanie nasz bajt, a następnie zmniejszony zostanie wskaźnik SP o 1. Wskaźnik stosu SP tak jak każdy rejestr SFR może być dowolnie modyfikowany przez programistę poprzez zapisanie na nim dowolnej 8-bitowej wartości (0..255). W praktyce jednak sytuacja tak występuje tylko wtedy, jeżeli chcemy zmienić położenie stosu (czyli go przesunąć) na początku wykonywania programu. Operacja ta z oczywistych względów ma sens jeżeli stos w danej chwili jest "pusty", w przeciwnym razie przy lekkomyślnej modyfikacji wskaźnika SP wszystkie dane odłożone wcześniej na stos staną się niedostępne (przynajmniej z punktu działania samego stosu). I tak jeżeli chcesz wykorzystywać wewnętrzną. pamięć danych o adresach 08h..20h dla swoich potrzeb (a nie na stos), musisz na początku swego programu zmodyfikować wskaźnik SP wpisując do niego wartość np. 20h, co jest jednoznaczne z zawiadomieniem procesora, że stos ma rozpoczynać się od adresu 21h. 9

10 Pamiętajmy zatem o stosie jako ważnej strukturze w architekturze 8051 oraz o tym, że tylko umiejętne i świadome z niego korzystanie przynosi efekty w postaci znacznego przyspieszenia działania programu oraz zmniejszenia jego rozmiarów. PAMIĘĆ TYPU RAM Wewnętrzna pamięć danych W mikrokontrolerze pamięć ta przeznaczona jest dla użytkownika do przechowywania argumentów wartości zmiennych oraz wyników obliczeń arytmetyczno logicznych. W zależności od typu mikrokontrolera pamięć ta ma pojemność 128 lub 256 bajtów. Dla 8051 wynosi ona 128B ( B). W przestrzeni adresowej można wyróżnić kilka obszarów. Dwa główne, wspomniane wcześnie to obszar pamięci użytkowej, oraz rejestrów specjalnych SFR. Pamięć użytkowa zajmuje 128 komórek, adresy (00h 7Fh), natomiast obszar SFR obejmuje adresy (80h FFh), z tym że nie wszystkie są wykorzystane przez rejestry specjalne. I chociaż pamięć użytkownika podzielona jest na obszar, do których dostęp może odbywać się przez tzw. indeksowanie obszaru, to użytkownik może adresować ją poprzez proste adresowanie. W pamięci użytkowej komórki o adresach 0..7, 8..15, i tworzą cztery zbiory uniwersalnych rejestrów roboczych. Każdy z rejestrów oznacza się symbolami R0...R7. W danej chwili użytkownik ma możliwość dostępu (poprzez nazwy R0...R7) tylko do jednego banku (zbioru) rejestrów roboczych. Przełączanie zbiorów odbywa się poprzez odpowiednie ustawienie dwubitowego wskaźnika zwanego jako RS z angielskiego Register bank Swich. Rejestry R0 i R1 z aktywnego banku pełnią rolę wskaźników danych do pośredniego adresowania wewnętrznej pamięci danych jak i zewnętrznej. W przypadku adresowania pamięci wewnętrznej można adresować cały obszar 8051 czyli adresy 0...7Fh. Zewnętrzna pamięć danych Do podłączenia zewnętrznej pamięci danych używa się zazwyczaj (a prawie zawsze) pamięci statycznych nazywanych często SRAM od skrótu: Static RAM, czyli pamięć statyczna. Pamięć taka powinna charakteryzować się 8-bitową organizacją danych oraz równoległym adresowaniem, tak jak w przypadku zwykłych EPROMów. Najpopularniejsze i spotykane w handlu, a przy tym najlepiej nadające się do naszych potrzeb kości pamięci SRAM to: 10

11 pamięć SRAM o pojemności 2kB ( kbitów, czyli bitów / 8 = 2kB = 2048 B) j/w lecz o pojemności 8kB ( kbity, czyli / 8 = 8kB = 8192 B) j/w lecz o pojemności 32kB ( kbitów, czyli / 8 = 32kB...) Cena układów wymienionych pamięci jest obecnie znikoma, nie znaczy to jednak, że warto stosować pamięć z zapasem (np. największe 32kB), zawsze warto przewidzieć wielkość praktycznie wykorzystanej ilości komórek pamięci i odpowiednio dobrać wymagany typ pamięci. Pierwszy z wymienionych układ SRAM 6116 spotykany jest w handlu w typowej obudowie 24- końcówkowej o rozstawie 600mils, dwa ostatnie natomiast w obudowach 28-pinowych (600mils, spotykane też są wersje w wąskich obudowach o rozstawie 300mils). Do kontrolerów serii 51 można dołączyć maksymalnie 64kB zewnętrznej pamięci danych. Można więc w takim przypadku zastosować: 2 kostki 6256 (2 x 32kB = 64kB) lub 8 kostek 6264 (8 x 8kB = 64kB) lub 32 kostki 6116 (32 x 2kB = 64kB). SRAM są niepraktyczne, po pierwsze ze względu na ilość układów scalonych co prowadzi do zwiększenia płytki drukowanej, po drugie pojawia się konieczność stosowania dodatkowego dekodera adresu (np. układu serii TTL-LS typ 74LS138 dekoder 1 z 8). Do adresowania pamięci wykorzystuje się, podobnie jak pamięci programu, te same linie adresowe: A0...A15, oraz danych: AD0...AD7. jednak sterowanie odczytem zewnętrznej pamięci danych zajmuje się sygnał RD od skrótu Read. Podanie odpowiednich stanów logicznych na końcówki adresowe pamięci odpowiadające adresowi komórki pamięci wewnątrz układu, a następnie podanie stanu niskiego na końcówkę RD spowoduje pojawienie się danej (z pamięci) na wyprowadzeniach magistrali AD0...AD7 i w konsekwencji odczyt jej przez mikroprocesor, za pośrednictwem portu P0. Do zapisu służy kolejny sygnał procesora nazywany WR (od skrótu write zapis),a wystawiany przez procesor na końcówkę 16 w czasie tej operacji. Podobnie jak w przypadku odczytu, najpierw procesor ustala adres na końcówkach A0...A15 (port P2 oraz wyjścia zatrzasku ), następnie podaje daną na port P0, po czym wystawia stan niski na pin WR, co powoduje zapis danej w pamięci SRAM. Zastosowanie zewnętrznej pamięci tak programu jak i danych wiąże się ze zubożeniem typowej jednoukładowości mikrokontrolera, bowiem zajęte zostają porty P0 i P2 procesora. O ile w przypadku pracy z zewnętrzną pamięcią programu dzieje się tak zawsze: port P0 pracuje jako multipleksowana (na zmianę) szyna danych lub młodszej części adresu, a port P2 wystawia starsze 8 bitów 16- bitowego adresu, o tyle w przypadku pracy z zewnętrzną pamięcią danych ( bez zewnętrznej pamięci programu) istnieje możliwość oszczędniejszego gospodarowania portami procesora. W przykładzie opisanym powyżej mówiliśmy, że procesor przy odczycie lub zapisie... wystawia 16-bitowy adres (A0...A15).... Do tego potrzebne są 2 porty, które w takim przypadku nie nadają się do dodatkowego wykorzystania, jako np. wyjścia sterowania przekaźnikami, lub czymkolwiek innym. Istnieje jednak możliwość innego odczytu zewnętrznej pamięci danych, nazywana stronicowaniem. Ma ona zastosowanie szczególnie wtedy, kiedy zewnętrzna pamięć danych ma mniejszy rozmiar od maksymalnej przestrzeni adresowej procesora np. 2kB. Pamięć taka ma tylko 11 linii adre- 11

12 sowych (A0...A10), co pozwala na zaadresowanie 2048 komórek pamięci (bajtów). Tak więc pozostałe linie adresowe procesora A11.A15 pozostałyby niewykorzystane gdyby zastosować odczyt jak w poprzednim przypadku z pełnym adresem A0...A15. Przy stronicowanym sposobie obsługi zewnętrznej pamięci danych, procesor wystawia tylko młodszą część 16-bitowego adresu (linie AD0...AD7), zaś port P2 pozostaje nietknięte. W konsekwencji takiego sposobu obsługi możliwe będzie zaadresowanie tylko 256 bajtów (2 do potęgi 8 = 256) tej pamięci, a nie jak w naszym przykładzie aż 2kB. No tak, chyba że przed odczytem przez procesor, sami, za pomocą sygnałów A8...A10 (wystawionych poprzez 3 piny portu P0) ustawimy niejako fizyczny adres 256 bajtowej strony adresowanej pamięci. Zauważmy przecież że za pomocą tych trzech końcówek można zaadresować 8 stron po 256 bajtów każda co w sumie da nam do dyspozycji pełne 2048 bajtów, czyli 2kB. Zauważmy też że, co najważniejsze, pozostałe końcówki portu P2 pozostają wolne i możemy je dowolnie wykorzystać jako wejścia lub wyjścia cyfrowe. W celu rozróżnienia przedstawionych dwóch typów adresowania wprowadzone są dwie różne instrukcje procesora, których używa programista podczas projektowania układu i pisania programu, w zależności od potrzeb. Połączenie mikrokontrolera z zewnętrznymi pamięciami Rejestry R0..R7? W 128-bitowym segmencie wewnętrznej pamięci RAM o adresach od 0 do 7Fh rozmieszczone są rejestry R0 i R1, które wykorzystywane są przy adresowaniu pośrednim. Oprócz nich konstruktorzy mikrokontrolera dali użytkownikom do dyspozycji 6 następnych rejestrów oznaczonych kolejnymi symbolami cyfrowymi: R2, R3, R4, R5, R6, R7. W ten sposób mamy w mikrokontrolerze 8 rejestrów. Osiem rejestrów (R0,.., R7) tworzy bank rejestrów i takich banków mamy 4 oznaczonych symbolami RB0 (bank numer 0),.., RB3 (bank numer 3). 12

13 Z powyższego rysunku wynika, że wszystkie banki rejestrów rozmieszczone są w początkowym obszarze wewnętrznej pamięci RAM mikrokontrolera. Oznacz to, że do każdego z rejestrów możemy odwołać się przez: podanie jego symbolu i numeru banku rejestrów, np. rejestr R7 w banku RB1 podanie adresu komórki wewnętrznej pamięci RAM, np. adres 0Fh dla tego samego rejestru. Pomimo, że mamy do dyspozycji 4 banki rejestrów, każdy po 8 rejestrów (łącznie 32 rejestry), to tylko programowy dostęp przez podanie symbolu rejestru możliwy jest tylko do jednego, wybranego banku. Po sprzętowym zerowaniu procesora (linią RTS) wybrany jest jako domyślny bank RB0, tzn. rejestry R0,..,R7 o adresach od 0 do 7. Adresując bezpośrednio zewnętrzną pamięć RAM w zakresie 0..1F dostępne są wszystkie 32 rejestry (traktowane jako komórki pamięci). Poza rejestrami R0,..R7 wszystkie inne rejestry, np. akumulator A, rejestr B, rejestr słowa statusowego PSW, itd., znajdują się w bloku, segmencie rejestrów specjalnych SFR. Jeśli w mikrokontrolerach rodziny '51 przewidziano 4 banki rejestrów (RB0,.., RB3) to oznacza to, że wystarczą 2 bity do określenia numerów banków. Te dwa bity oznaczone symbolami RS0 i RS1 (Register Select) znajdują się w rejestrze słowa statusowego PSW. Kodowanie numeru banku rejestrów za pomocą bitów RS1 i RS0 jest binarne, tzn.: RS1,RS0=00b oznacza zerowy bank rejestrów RB0; RS1,RS0=11b oznacza trzeci bank rejestrów RB3. 13

14 Odczyt/zapis danych do zewnętrznej pamięci RAM Zewnętrzna pamięć danych RAM, jeśli istnieje potrzeba jej dołączenia do mikrokontrolera wskutek zbyt małej wewnętrznej pamięci RAM, adresowana jest w dwojaki sposób: 1. Wskaźnikowy rejestr danych DPTR: Instrukcja: MOVX A,@DPTR zapis binarny instrukcji: b b Wykonywana operacja Jest to standardowy sposób odwoływania się do pamięci. 16-bitowy wskaźnikowy rejestr danych DPTR zawiera pełny 16-bitowy adres komórek pamięci. Ponieważ rejestr ten tworzą dwa połączone rejestry: DPH jako 8-bitowa, bardziej znacząca część rejestru DPTR; DPL jako 8-bitowa, mniej znacząca część rejestru DPTR. W trakcie adresowania komórek pamięci stan obu rejestrów pojawia się na liniach portu P0 (stan rejestru DPL) i P2 (stan rejestru DPH), tak jak przedstawiono na rysunku. Multipleksowanie stanu obu portów realizowane jest dynamicznie, tylko na czas wykonywanej instrukcji. Adresowanie zewnętrznej pamięci RAM za pośrednictwem wskaźnikowego rejestru danych DPTR 2. Zawartością portu P2 i rejestru R0 lub R1: zapis binarny wykonywana operacja instrukcja instrukcji b (256*P2+R0)XDATA MOVX A,@R b b (256*P2+R1)XDATA MOVX A,@R b XDATA XDATA Składnia instrukcji jest trochę myląca. Wynika z niej bezpośrednio, że do adresowania zewnętrznej pamięci RAM używany jest tylko jeden z rejestrów mikrokontrolera, R0 lub R1. Oba rejestry są rejestrami 8-bitowymi,a do zaadresowania pamięci wymagany jest adres 16-bitowy. W trakcie wykonywania jednej z czterech przedstawionych instrukcji na liniach portu P0 pojawia się zawartość rejestru R0 lub R1 (8 mniej znaczących bitów adresu) ale stan portu P2 nie ulega zmianie. Oznacza to, że przed wykona- 14

15 niem instrukcji należy wpisać do portu P2 8-bardziej znaczących bitów adresowanej komórki zewnętrznej pamięci RAM Przykładowo do zapisu akumulatora A do komórki pamięci adresie 3C58h należy wykonywać poniższe instrukcje: MOV R0,#58h ;R0-58H MOVX P2,#3cH ;P2-3Ch W każdej linii tego krótkiego programu pojawił się po znaku średnika (;) komentarz, który ma wyjaśnić, pomóc w zrozumieniu działania programu. W trakcie asemblacji wszystkie komentarze (od znaku średnika do końca wiersza ) są pomijane. Oba przedstawione sposoby adresowania zewnętrznej pamięci RAM określane są mianem adresowania pośredniego. We wszystkich trybach takiego adresowanie, za pośrednictwem jakiegoś rejestru, przed nazwą rejestru pojawia się Znak ten świadczy, że adres komórki pamięci podany jest w bezpośrednio po znaku występującym rejestrze, np.: w instrukcji MOVX A,@DPTR adres komórki podany jest w rejestrze DPTR w instrukcji rejestr R1 zawiera część adresu komórki zewnętrznej pamięci RAM, 8-mniej znaczących bitów adresu. Pozostałą część adresu, 8-bardziej znaczących bitów, zawiera port P2. Odczytywanie danych zapisanych w pamięci programu ROM oraz zapisanie i odczytywanie danych z zewnętrznej pamięci danych RAM wiąże się z pewnymi ograniczeniami: zawsze jednym z argumentów wykonywanych instrukcji jest akumulator A, co powoduje, że akumulator A staje się jednym z najbardziej zapracowanych rejestrów mikrokontrolera; do odczytu danych z pamięci programu ROM mamy tylko 2 instrukcje; w ich mnemoniku występuje zawsze litera C (MOVC), będąca pierwszą literą symbolu Code oznaczającego pamięć programu (Code memory); do zapisu i odczytu danych do / z zewnętrznej pamięci danych RAM dostępne są po dwie instrukcje, których mnemoniki zawierają zawsze literę X (MOVX); x pochodzi od symbolicznej nazwy tej pamięci Xdata (external Data memory); nie należy zapominać, że przy adresowaniu zewnętrznej pamięci danych RAM za pośrednictwem rejestru R0 lub R1 brakującą część adresu należy wpisać do portu P2 (8 bardziej znaczących bitów adresu). 15

16 Dążąc do uzyskania dużej szybkości działania mikrokontrolerów rodziny 51 należy unikać przechowywania często używanych danych w zewnętrznej pamięci RAM mikrokontrolera. Do tego powinna wystarczyć wewnętrzna pamięć RAM. Jak odczytywać i zapisywać dane z pamięci programu ROM i zewnętrznej pamięci danych RAM Jeśli mikroprocesor jest układem o dużym stopniu scalenia (dużej integracji), którego działanie zależy od programu, ciągu rozkazów, to w jaki sposób przygotować program? Jakie rozkazy można zastosować? Co to jest rozkaz? Gdzie przechowywane są dane i jak sterować przepływem danych? Program działania czyli sposób działania mikrokontrolera zapisany jest w pamięci programu ROM, wewnętrznej lub zewnętrznej. Rodzaj pamięci nie jest istotny. Pewne stałe współczynniki, war tości znane w czasie pisania programu i takie które nie zmienią się w trakcie wykonywania programu mogą być również wpisane wraz z programem do pamięci ROM. Ale wyniki obliczeń czy też pomiarów mogą być wpisywane tylko do pamięci RAM. Są to wartości zmieniające się w trakcie wykonywania programu, wartości, które nie są znane przed uruchomieniem, wykonaniem programu. Jeśli mikrokontroler ma zmierzyć temperaturę, to dopóki nie zostanie wykonany pomiar, dopóty nie wiadomo jaka jest jej wartość. Należy pamiętać, że: pamięć ROM jest pamięcią tylko do odczytu, mikrokontroler nie może do niej nic wpisać, pamięć RAM jest przystosowana do zapisu i odczytu, mikrokontroler może odczytywać i zapisywać dane. Realizowany przez mikrokontroler program jest ciągiem poleceń, instrukcji rozkazów, które są zrozumiałe przez mikrokontroler. Ponieważ konstruktorem mikrokontrolera 8051 jest amerykańska firma Intel, dlatego nazwy rozkazów pochodzą z języka angielskiego, podobnie jak wszystkie inne pojęcia wiążące się z mikrokontrolerem. W instrukcjach nie są stosowane pełne nazwy poleceń, a jedynie ich skróty, zwane mnemonikiem wchodzą argumenty (od jednego do trzech). Najpowszechniejszym rozkazem są rozkazy, instrukcje przesłań, których składnia jest następująca: 16

17 Skrót instrukcji MOV pochodzi od słowa "MOVE" czyli przesunięcia, ruszenia czegoś z miejsca. W rozkazie tym użyto tylko dwóch argumentów. Pierwszy (dst) dookreślenia komórki pamięci lub rejestru specjalnego SFR, do których ma być przesunięta dana. Drugi (scr) także do określania adresu komórki pamięci lub rejestru specjalnego, z których ma być pobrana dana. Kolejność argumentów jest bardzo ważna. W instrukcjach 2-argumentowych jako pierwszy występuje zawsze adres docelowy, a jako drugi adres źródłowy. W innych instrukcjach liczba argumentów zmienia się od jednego do trzech, w zależności od realizowanej funkcji. Do adresowania wewnętrznej pamięci RAM wystarcza 8 bitów, czyli jeden bajt, ponieważ wewnętrzna magistrala adresowa jest 8-bitowa. Dlatego przesyłane dane między dwiema komórkami wewnętrznej pamięci RAM można wykonać poprzez następujący rozkaz: MOV 4Ah,8. Wykonując ten rozkaz, mikrokontroler pobiera zawartość komórki o adresie 8 i przesyła ją do komórki o adresie 4Ah. Adresy argumentów podane zostały w różnych kodach. Pierwszy (4Ah w kodzie szesnastkowym, a drugi (8) w kodzie dziesiętnym. Adresy można także podawać w kodzie binarnym i ósemkowym, np. 4Ah=74= b=112o Przedstawiony sposób adresowania obu komórek pamięci RAM nazywany jest adresowaniem bezpośrednim, ponieważ oba adresy są częścią rozkazu i w sposób jawny ( bezpośredni) wskazują na miejsce w pamięci RAM. To co zrozumiałe dla człowieka wcale nie musi być zrozumiałe dla mikroprocesora. Program zawierający mnemoniki wykonywanych instrukcji jest czytelny dla człowieka. Jeśli te same instrukcje mają być zrozumiałe dla mikrokontrolera, to muszą zostać przetłumaczone na ciąg zero-jedynkowy. Proces tłumaczenia i kodowania nazw instrukcji i ich argumentów nazywany jest asemblacją. Wynika z tego ( w dużym skrócie), że program będący ciągiem poleceń tłumaczony jest na kod wynikowy za pośrednictwem programu zwanego asemblerem. Przytoczona powyżej instrukcja MOV 4Ah,8 zmieniona zostaje na trzy bajty w postaci: W celu łatwiejszej interpretacji z ciągu zero-jedynkowego wyodrębnione zostały 3 bajty, a w każdym bajcie rozróżniono 4 mniej i 4 bardziej znaczące bity. Taka postać rozkazów jest przyjmowana i wykonywana przez mikrokontroler. Nie jest ona za bardzo czytelna dla człowieka. Jeśli program liczy kilkaset lub kilka tysięcy takich ciągów zero-jedynkowych to nietrudno o pomyłkę. Dlatego na przyszłość należy pozostać przy mnemonikach instrukcji. Pamięć programu ROM oraz zewnętrzna pamięć danych RAM adresowane są za pośrednictwem 16-bitowego rejestru. Takim rejestrem jest licznik rozkazów PC oraz wskaźnikowy rejestr danych DPTR. W przypadku zewnętrznej pamięci RAM możliwy jest jeszcze jeden sposób adresowania poprzez połączenie 8-bitowego rejestru R0 lub R1 i portu P2. Jednym z argumentów w tych rozkazach jest akumulator A, do którego przesyłane są lub z którego pobierane są dane. PAMIĘĆ TYPU ROM Wewnętrzna pamięć programu Program napisany przez użytkownika, dedykowany konkretnemu zastosowaniu 8051-ki powinien zostać umieszczony wewnątrz mikrokontrolera czyli w wewnętrznej pamięci programu. Pamięć ta służy mikrokontrolerowi wyłącznie do odczytu rozkazów programu. W pamięci tej mogą być umieszczone także argumenty bezpośrednie rozkazów oraz tablice ze stałymi potrzebnymi do pewnych działań programu, np. tablica sinusów, tablica czasów zachodu słońca, lub cokolwiek innego. Mikroprocesor 8051 ma możliwość późniejszego pobrania ze swojej pamięci programu takiej stałej i wyko- 17

18 rzystania jej np. w obliczeniach. Stała i tablice wprowadzane są przez programistę na etapie tworzenia programu. Jeżeli program został przez nas utworzony a następnie zapisany w pamięci programu a następnie zapisany w pamięci programu, mikrokontroler jest gotowy do działania. Otóż po włączeniu zasilania dzięki obwodowi Reset, wyzerowane zostają prawie wszystkie wewnętrzne układy mikroprocesora w tym także uwaga: licznik rozkazów. Ten ostatni służy mikroprocesorowi do kolejnego pobierania rozkazów z pamięci programu, a dokładnie do adresowania (czyli wskazywania) gdzie w przestrzeni adresowej pamięci programu znajduje się kolejna komenda. Jego początkowa wartość wynosi 0 (zero), toteż pierwszym rozkazem pobranym z tej pamięci będzie ten umieszczony pod adresem 0000h. Licznik rozkazów oznaczany jest w skrócie jako PC, ma długość 16 bitów, czyli maksymalnie może liczyć do włącznie, po czym zostaje wyzerowany. Stąd wynika m.in. maksymalna wielkość pamięci programu z jakiej procesor może korzystać a mianowicie 64kB (65536 bajtów). Tak dużą pamięć posiadają niektóre mutacje 51-ki, ale prawie każdy z mikrokontrolerów może współpracować z tak dużą pamięcią zewnętrzną. W trakcie pobierania i wykonywania przez mikrokontroler kolejnych instrukcji licznik PC zmienia swoją wartość jaką może osiągnąć licznik w naszym przypadku będzie 4095 bowiem w naszym przykładzie z kostką 87C51 mamy do dyspozycji 4kB pamięci programu. W celu ujednolicenia systemu przerwań procesora w pamięci programu określono odpowiednie miejsca adresy od których rozpoczyna się wykonywanie określonych procedur obsługi przerwań. W podstawowej rodzinie 51 są to adresy: 3, 11, 19, 27, 35 i 43 (03h, 0Bh, 13h, 1Bh, 23h, 2Bh szesnastkowo). Każdy z tych adresów określa początek wykonania innej procedury obsługi przerwania, dla 8051 są one następujące: 0003h przerwanie zewnętrzne z wejścia (końcówki) INT0 (pin 12) 000Bh przerw. wynikłe z przepełnienia pierwszego wewnętrznego licznika T0 procesora 0013h przerwanie zewnętrzne z wejścia (końcówki) INT1 (pin 13) 001Bh przerw. wynikłe z przepełnienia drugiego licznika wewnętrznego licznika T1 procesora 0023h przerwanie wynikłe z odebrania lub zakończenia wysyłania danej poprzez wewnętrzny port szeregowy mikroprocesora Dodatkowo w 8052 występuje : 002Bh przerw. wynikłe z odebrania lub zakończenia wysyłania danej poprzez wewnętrznego licznika T2. Na rysunku zilustrowano rozmieszczenie w/w adresów zgłoszenia przerwania. 18

19 Praktycznie wygląda to tak, że w momencie zgłoszenia któregoś z wymienionych przerwań, automatycznie zachowana zostaje aktualna wartość licznika PC, a następnie zostaje wpisana do niego wartość odpowiednia do rodzaju przerwania jak opisano wyżej. Czyli np. jeżeli wewnętrzny licznik procesora T1 został przepełniony, do PC zostaje wpisana wartość 001Bh, po czym mikroprocesor rozpoczyna wykonywanie programu od tego adresu w pamięci programu. Po zakończeniu wykonywania czynności związanych z przepełnieniem T1, licznik rozkazów PC przyjmie ponownie wartość jak z przed nadejścia przerwania i program potoczy się dalej. Zewnętrzna pamięć programu Procesor 8051 i mu podobne mają możliwość dołączenia dodatkowej zewnętrznej pamięci programu, np. typu EPROM. W pamięci tej podobnie jak w wewnętrznej pamięci programu zaszytej w kostce 8751 (8752) programista umieszcza poszczególne rozkazy programu, używając w tym celu np. programatora pamięci EPROM lub programatora z rodziny MCS-51. Procesor może pracować w następujących konfiguracjach: 1. tylko z wewnętrzną pamięcią programu (dla kostek 8751,8752) 2. z wewnętrzną i zewnętrzną pamięcią programu jednocześnie, w tym przypadku zewnętrzna pamięć programu stanowi jak gdyby przedłużenie pamięci wewnętrznej 3. tylko z zewnętrzną pamięcią programu np. typu EPROM. Pierwszy tryb jest bardzo wygodny, pozwala na pełne wykorzystanie wszystkich zalet mikrokontrolera jednoukładowego w całym tego słowa znaczeniu. Programista wykorzystując procesor w wersji z wbudowaną pamięcią programu (8751,8951,xx52) cały kod swego programu umieszcza wewnątrz kości, dzięki czemu ma do dyspozycji wszystkie porty mikrokontrolera w tym także P0 i P2. Kostka 87C51 (89C51) ma tylko 4kB (8x52 8kB pamięci programu), najczęściej te tylko w zupełności wystarcza, lecz zdarza się że jest to za mało, wtedy konieczne jest dołączenie dodatkowej zewnętrznej pamięci programu w postaci kostki EPROM. W tym przypadku maksymalna długość programu równa wielkości obu pamięci zewnętrznej jak i wewnętrznej nie może przekroczyć 64kB czyli bitowych słów. Czyli że np. kostki 87C52 (zawierającej 8 kb wewnętrznej EPROM) można dołączyć maksymalnie 56kB EPROM z zewnątrz. Trzeci tryb pracy tylko z zewnętrzną pamięcią programu wymaga zwarcia wyprowadzenia EA (pin 31 procesora 8051/52) do masy. Do celów amatorskich wystarczy pamięć o pojemności 8kB (27C64). W takim przypadku linie adresowe A15, A14, A13 (piny 28, 27 i 26 portu P2) pozostaną nie dołączone, lecz niestety i tak będą nie do wykorzystania, bowiem w trybie adresowania zewnętrznej pamięci programu (jak i danych) cały port P2 przekazuje starszy bajt 16-bitowego adresu. W układzie wykorzystuje się dodatkowy rejestr (74HCT573), którego zadaniem jest zatrzaśnięci młodszej części 16-bitowego adresu, czyli sygnałów A0...A7. W czasie trwania dodatniego poziomu sygnału na wyjściu ALE, mikroprocesor wystawia: na piny portu P2 starszą część 16-bitowego adresu A8...A15, natomiast na port P0 wystawiona zostaje młodsza część adresu A0...A7, która zostaje od razu przekazana poprzez rejestr (74HCT573) na wejścia adresowe A0...A7 pamięci EPROM. Dzieje się tak dlatego rejestr ( 573) aktywowany jest poziomem, toteż w przypadku gdy na jego wejściu C (połączonym z ALE) panuje stan wysoki, rejestr ten jest przezroczysty tzn. że dane pojawiające się na jego wejściach D1...D8 natychmiast pojawiają się na wyjściach Q1...Q8. Dołączenie wejścia OC układu do masy powoduje odblokowanie na stałe wyjść Q1...Q8 (gdy OC=1 to wyjścia te przechodzą w stan wysokiej impedancji. Następnie podczas opadającego zbocza sygnału ALE młodsza część adresu zostaje zapamiętana, a procesor może wtedy z port P0 odczytać kolejny bajt z pamięci EPROM podając stan niski na wyprowadzenie PSEN, które jest dołączone do wejść OE pamięci. Wejście wyboru pamięci CE jest na stałe zwarte do masy, co oznacza że pamięć EPROM jest ciągle aktywna a do jej odczytu wystarczy niski poziom podany na wejście OE. Czasem w różnych aplikacjach szczególnie w urządzeniach zasilanych bateryjnie wejście OC układu oraz wejście wyboru pamięci EPROM CE są razem dołączone do wejścia sygnału ALE. Nie 19

20 jest to błędem, bowiem podczas cyklu odczytu z zewnętrznej pamięci tak programu jak i danych wszystkie operacje tak odczytu jak i zapisu do tych pamięci odbywają się podczas stanu niskiego na wyjściu ALE procesora. Połączenie mikrokontrolera z zewnętrznymi pamięciami Odczyt danych z pamięci programu ROM Wewnętrzna lub zewnętrzna pamięć programu zawiera oprócz kodu programu także stałe wykorzystywane w programie. Ze względu na swój charakter, pamięć ROM (EPROM, EEPROM, Flash ROM), możliwy jest jedynie odczyt danych. Wybór typu pamięci, wewnętrznej lub zewnętrznej, mikrokontroler dokonuje testując linię EA w trakcie zerowania: EA=0, zewnętrzna pamięć programu EA=1, wewnętrzna pamięć programu 20

21 Stan linii EA niema znaczenia jeśli licznik rozkazów PC zawiera adres większy niż adres wewnętrzny pamięci programu. Przykładowo jeśli mikrokontroler 8051 zawiera 4KB-ową wewnętrzną pamięć programu to dla stanu licznika rozkazów PC: PC=0000h..0FFFh i EA-0 mikrokontroler wykonuje program z zewnętrznej pamięci programu; PC=0000h..0FFFh i EA=1 mikrokontroler wykonuje program z wewnętrznej pamięci programu; PC-1000h..0FFFFh - mikrokontroler wykonuje program z zewnętrznej pamięci programu, niezależnie od stanu linii EA Pamięć programu (wewnętrzna lub zewnętrzna) adresowana jest na trzy różne sposoby: 1a. przez drugi lub przez trzeci bajt wykonywanej instrukcji. Sytuacja taka występuje przy pobieraniu 8-bitowych stałych z pamięci programu, np. przy inicjalizacji wartości początkowych rejestrów komórek pamięci, np.: Instrukcje Zapis binarny instrukcji MOV A,#3Ch b b MOV R0,# b b MOV 35,#4Bh b b b Wykonywane operacje Dwie pierwsze instrukcje są instrukcjami 2-bajtowymi. Pierwszy bajt zawiera kod wykonywanej instrukcji i informację, adres docelowego rejestru. Drugi bajt zawiera wartość stałej, która wpisywana jest do akumulatora A (MOV A,#3Ch) i rejestru R0 (MOV R0,#6). W trzeciej instrukcji (MOV 35,#4Bh) pierwszy bajt zawiera kod wykonywanej instrukcji, drugi adres komórki wewnętrznej pamięci RAM (35) zamienianej na liczbę szesnastkową (23), a trzecia wartość stałej pobieranej z pamięci programu (4Bh). Z powyższej tabeli przedstawiono również zapis binarny wykonywanych instrukcji (zrozumiały dla mikrokontrolera) oraz wykonywane operacje. Strzałka oznacza kierunek przepływu danych, wartość ujęta w okrągłe nawiasy (35) jest adresem komórki pamięci, w tym przypadku wewnętrznej pamięci RAM. Należy zwrócić uwagę na sposób zapisu stałych, które poprzedzone są zawsze znakiem #. Pominięcie tego znaku powoduje, że odwołujemy się do komórki pamięci RAM lub rejestrów specjalnych SFR. Ten sposób adresowania nazywany jest adresowaniem natychmiastowym. 1b. przez drugi i trzeci bajt wykonywanej instrukcji. Sytuacja taka występuje przy inicjalizacji wartości początkowej 16-bitowego wskaźnikowego rejestru danych DPTR: Instrukcja: zapis binarny instrukcji: MOV DPTR,#2E59h b b b wykonywana operacja 2E59h Przedstawiona 3-bajtowa instrukcja jest jedyną instrukcją, w której wpisywana jest do rejestru DPTR stała 16-bitowa. Pierwszy bajt zawiera kod operacji, bajt drugi i trzeci 21

22 wpisywaną stałą. Ten sposób adresowania także nazywany jest adresowaniem natychmiastowym. 2. sumą zawartości 8-bitowego akumulatora A i 16-bitowego wskaźnikowego rejestru danych DPTR. Liczba zawarta w akumulatorze A traktowana jest jako liczba całkowita bez znaku, co oznacza, że jej zakres zmienności ograniczony jest do przedziału instrukcja: MOVC A,@A+DPTR zapis binarny: wykonywana operacja b Aby wykonać dodawanie zawartości 8-bitowego akumulatora A i 16-bitowego wskaźnikowego rejestru danych DPTR, zawartość akumulatora A rozszerzana jest znakowo z 8 bitów do 16 bitów o bajt równy 00. Adresowanie pamięci programu określane jest jako adresowanie za pomocą rejestrów bazowych ( w tym przypadku za pomocą indeksoworejestrowo pośrednie. Pobieranie danych z pamięci programu i wymiana danych z/do zewnętrznej pamięci RAM 3. sumą zawartości 8-bitowego akumulatora A i 16-bitowego licznika rozkazów PC. Podobnie jak poprzednio liczba zawarta w akumulatorze A traktowana jest jako liczba całkowita bez znaku: instrukcja: MOVC A,@A+PC zapis binarny instrukcji: b wykonywana operacja Zawartość akumulatora A jest rozszerzona znakowo z 1 do 2 bajtów. Różnica między tym, a poprzedni, rozkazem polega na tym, że po pobraniu kodu instrukcji licznik rozkazów PC zwiększany jest o 1. W ten sposób licznik rozkazów PC wskazuje na pierwszy bajt następnej instrukcji znajdującej się po wykonywanym rozkazie MOVC A,@A+PC. W podanej instrukcji pamięć programu adresowana jest za pomocą rejestru bazowego jakim jest licznik rozkazów PC (adresowanie indeksowo-rejestrowo pośrednie). W dwóch ostatnich rozkazach wskaźnikowy rejestr danych DPTR i bieżąca wartość licznika rozkazów PC traktowane są jako wskaźniki (adresy początkowe) do tablic umieszczonych w pamięci programu ROM. Zawartość akumulatora A traktowana jest jako indeks tablicy. Wielkość tych tablic ograniczona jest do 256 bajtów, ze względu na 8-bitową zawartość akumulatora z pamięci programu kolejnych znaków komunikatów, np.: pomiarowego, sterowanego urządzenia itp. 22

23 PORTY Port szeregowy Zadaniem portu szeregowego jest zapewnienie komunikacji poprzez łącze szeregowe między mikrokontrolerem a urządzeniami zewnętrznymi. Dane są wysyłane bit po bicie rozpoczynając od najmniej znaczącego bitu. Dane mogą być wysyłane i przyjmowane synchronicznie lub asynchronicznie. Przy transmisji synchronicznej przesyłanym danym towarzyszy sygnał synchronizujący, względem którego określa się stany przesyłanych bitów. Zaletą transmisji synchronicznej jest jej odporność na dewiacje częstotliwości sygnału taktującego, natomiast wadą - dwie linie przesyłowe: jedna dla danych, a druga dla sygnału taktującego. Przy transmisji asynchronicznej (UART) przesyłane są tylko dane, a sygnały taktujące są wytwarzane w nadajniku i odbiorniku niezależnie od siebie. Dlatego dla poprawnego odbierania danych nadajnik i odbiornik muszą być taktowane sygnałem o takiej samej częstotliwości. Wymaga to generatorów o wysokiej stabilności i uzgodnienia co do prędkości transmisji. Dla ułatwienia nawiązania łączności prędkości transmisji zostały unormowane. Są one podane w normie opisującej łącze szeregowe RS 232. Opisany poniżej port szeregowy jest identyczny dla całej rodziny mikrokontrolerów '51. W mikrokontrolerach spoza rodziny '51 transmisja szeregowa może być realizowana zupełnie inaczej. W rodzinie '51 port szeregowy może pracować w czterech trybach. Tryby pracy różnią się między sobą rodzajem transmisji (synchroniczna, asynchroniczna), liczbą przesyłanych bitów w jednej ramce i źródłem sygnałów taktujących port szeregowy.tryb pracy portu szeregowego, źródło jego taktowania itd. są wybierane poprzez odpowiednie ustawienie znaczników w rejestrze SCON: Rola znaczników jest następująca: SM0, SM1- wybór trybu pracy tryb pracy rodzaj transmisji częstotliwość taktująca synchroniczna, 8bitów fosc/ asynchroniczna, 8 bitów zmienna asynchroniczna, 9 bitów fosc/64 lub fosc/ asynchroniczna, 9 bitów zmienna SM2 - znacznik stosowany w transmisji wieloprocesorowej. W trybie pracy 0 znacznik nie ma wpływu na działanie portu szeregowego W trybie pracy 1, przy SM2=1, znacznik przerwania RI nie jest ustawiany w stan 1 przy braku bitu stop. W trybie pracy 2 i 3, przy SM2=1, znacznik przerwania RI nie jest ustawiany w stan 1 jeżeli dziewiąty bit odbieranego słowa jest równy 1. REN - znacznik uaktywnienia odbiornika. Gdy REN = 0 odbiornik portu szeregowego nie przyjmuje danych. TB8 - znacznik używany w transmisji dziesięciobitowej. Stan tego znacznika jest wysyłany jako dziewiąty bit danych. RB8 - w transmisji dziewięciobitowej do tego znacznika jest wpisywany stan dziewiątego bitu przyjmowanych danych. W trybie 1, gdy SM2=0, do RB8 jest wpisywany bit stopu. T1 - znacznik przerwania od nadajnika portu szeregowego. Jest ustawiany w stan 1 po wysłaniu ósmego bitu danych w trybie pracy 0 i na początku bitu stopu w pozostałych trybach. Musi być zerowany programowo. R1 - znacznik przerwania od odbiornika portu szeregowego. Jest ustawiany w stan 1 po odebraniu ósmego bitu danych w trybie pracy 0, lub w połowie bitu stopu w pozostałych trybach, za wyjątkiem sytuacji związanej z ustawieniem bitu SM2. 23

24 Drugim rejestrem związanym z portem szeregowym jest rejestr SBUF, umieszczony pod adresem 99h w obszarze SFR. Jest to rejestr podwójnym, do którego wpisuje się daną i z którego odczytuje się przyjętą daną. a) Tryb pracy 0 W trybie pracy 0, pracy synchronicznej, nadawanie i odbieranie danych odbywa się przez końcówkę P3.0, a przez końcówkę P3.1 jest wysyłany sygnał taktujący, niezależnie, czy zachodzi nadawanie, czy odbieranie danych. Przesyłanych jest osiem bitów danych zaczynając od bitu najmniej znaczącego. Częstotliwość taktowania jest stała i wynosi fosc/12. Proces wysyłania danych rozpoczyna się od momentu wpisania do rejestru SBUF wysyłanej danej. Rejestr SBUF jest rejestrem przesuwnym. Sygnał "wpis do SBUF" ustawia w stan 1 wyjście przerzutnika D oraz uaktywnia kontroler nadajnika. Po upływie jednego cyklu maszynowego następuje taktowanie kontrolera nadajnika. Na wyjściu NADAWANIE pojawia się stan 1, co umożliwia przesłanie sygnału z rejestru SBUF na końcówkę RxD i sygnału zegarowego na końcówkę TxD. Po każdym takcie następuje wysłanie kolejnego bitu z rejestru SBUF, natomiast do rejestru jest wpisywany stan wyjścia przerzutnika D. W pierwszym momencie jest to stan 1, a w pozostałych stan 0. Gdy do rejestru SBUF zostanie wpisanych 6 zer następuje zadziałanie detektora zera. Na wyjście jest wysyłany jeszcze jeden bit, następuje ustawienie w stan 1 znacznika TI i zamknięcie bramek wyjściowych, co kończy proces wysyłania danych. Ustawienie znacznika TI w stan 1 jest sygnałem, że można wysłać kolejny bajt danych. Znacznik TI może być zerowany w trakcie wysyłania danych. Odbiór danych może odbywać się pod warunkiem ustawienia znacznika REN w stan 1 i wyzerowania znacznika RI. W tym momencie do rejestru przesuwnego odbiornika jest wpisywana wartość , a z pewnym opóźnieniem sygnał odbiór otwiera bramkę BI dla sygnału zegarowego. Dana jest przyjmowania przez odbiornik portu szeregowego synchronicznie ze zboczem narastającym sygnału taktującego. Przyjęta dana jest wpisywana do rejestru przesuwnego, a zawartość rejestru jest przesuwana w lewo. Gdy zero wpisane podczas inicjalizacji odbiornika zostanie przesunięte na skrajną lewą pozycję, następuje jeszcze jeden odczyt stanu wejścia RxD, a następnie zawartość rejestru przesuwnego jest wpisywana do rejestru SBUF. Sygnał ODBIÓR jest ustawiany w stan 0, a znacznik RI w stan 1, co kończy proces odbierania danych. Gdy na wyjściu P3.0 znajduje się wysłana dana, sygnał taktujący przechodzi ze stanu 1 do stanu 0 i ponownie do stanu 1. Umożliwia to współpracę mikrokontrolera z układami zewnętrznymi, które reagują na zbocz narastające lub opadające sygnału taktującego. 24

25 Transmisja synchroniczna ma zastosowanie przy przesyłaniu danych pomiędzy mikrokontrolerami, a modułami zewnętrznymi takimi jak sterowniki pól odczytowych LCD lub LED, przetworniki A/C i C/A, potencjometry cyfrowe, itp. b) Tryb pracy 1 W trybie pracy 1 dziesięć bitów jest wysyłanych przez wyprowadzenie TxD (P3.1) lub przyjmowanych przez wyprowadzenie RxD (P3.0). Są to: bi startu (stan 0), 8 bitów danych i bit stopu (stan 1). We wszystkich mikrokontrolerach rodziny '51 port szeregowy w tym trybie pracy może być taktowany z wyjścia licznika T1. Ponadto w mikrokontrolerach z 8xC52 można go taktować z licznika T2. Nadawanie rozpoczyna się w momencie przesłania do rejestru SBUF wysłanej danej. Sygnał "wpis do SBUF" wpisuje 1 do przerzutnika D oraz uaktywnia kontroler nadajnika. Transmisja rozpoczyna się z momentem przepełnienia dzielnika :16. Na wyjściu NADAWANIE pojawia się stan 0 co powoduje wygenerowanie bitu startu (przy stanie 0 na wyjściu DANE). Kolejne przepełnienie licznika :16 zmienia stan na wyjściu DANE na 1 dzięki czemu jest otwarta bramka B3 dla bitów z rejestru SBUF. Proces wysłania bitów danych jest dalej taki sam jak przy transmisji synchronicznej. Gdy zostanie wysłany ostatni bit danych na wyjściu DANE jest ustawiany stan 0, a na wyjściu NADAWANIE stan 1, co powoduje wytworzenie bitu stopu. Jednocześnie w stan 1 jest ustawiany znacznik TI. Jest to informacja o zakończeniu procesu wysyłania danych. 25

26 Odbiór danej jest możliwy po ustawieniu w stan 1 znacznika REN oraz wyzerowaniu znacznika RI i rozpoczyna się w momencie wykrycia na wyprowadzeniu RxD zmiany stanu z 1 na 0, co powoduje wyzerowanie dzielnika :16 i wpisanie do rejestru przesuwnego odbiornika stanu Zerowanie dzielnika powoduje, że nadchodzące kolejno bity są testowane synchronicznie względem bitu startu. Stan wejścia RxD jest testowany trzykrotnie w okresie czasu przeznaczonym dla każdego bitu, dzięki czemu zwiększa się odporność odbiornika na zakłócenia. Jeżeli test nie będzie pozytywny, to odbiornik rozpoczyna proces odbierania danych od początku oczekując na zmianę stanu na wejściu RxD z 1 na 0. Przy pozytywnym teście przyjęty bit danej jest wpisywany do rejestru przesuwnego. W tym momencie, podobnie jak przy transmisji synchronicznej, nastąpi przyjęcie jeszcze jednego bitu, po czym nastąpi przepisanie przyjętej danej do rejestru SBUF oraz ustawienie znacznika RI w stan 1, co kończy proces przyjmowania danej przez port szeregowy. Bit stopu jest wpisywany do znacznika RB8. Dana z rejestru SBUF musi być odczytana przed nadejściem bitu stopu kolejnej danej, inaczej będzie stracona. Wpis do SBUF, RB8 i ustawienie znacznika w stan 1 odbywa się wtedy i tylko wtedy gdy są spełnione warunki: RI=0 SM2=0 lub bit stopu=1 c) Tryby pracy 2 i 3 W trybie pracy 2 i 3 proces wysyłania i przyjmowania danych jest taki sam jak w trybie 1, z tym że oprócz bitu startu i stopu jest przesyłanych 9 bitów danych. Przy nadawaniu, osiem bitów jest pobieranych z rejestru SBUF, a ostatni - 9 bit ze znacznika TB8. Dlatego przed wpisaniem danej do rejestru SBUF co rozpoczyna proces wysyłania danych, należy najpierw odpowiednio ustawić znacznik TB8. Po odebraniu danych przez odbiornik portu szeregowego, oprócz odczytania zawartości rejestru SBUF należy również odczytać znacznik RB8. Różnica między trybem pracy 2 i 3 polega na tym, że w trybie 2 prędkość transmisji, w zależności od stawienia znacznika SMOD, może wynosić tylko 1/32 (SMOD=1) lub 1/64 (SMOD=0) częstotliwości oscylatora mikrokontrolera. Znacznik SMOD jest najbardziej znaczącym bitem w rejestrze PCON, który znajduje się pod adresem 87h w obszarze SFR. Dlatego ustawienie tego znacznika wymaga operacji bajtowych. W trybie pracy 3 taktowanie portu szeregowego odbywa się tak jak w trybie 1. Tryb ten jest najczęściej stosowany przy połączeniach mikrokontrolerów ze sobą lub z komputerem gdyż daje możliwość uzyskania jednej ze standardowych prędkości transmisji, a 9-ty bit może być bitem parzystości ułatwiając w ten sposób kontrolę poprawności przesyłania danych. 26

27 Wybór trybu pracy 1 lub 3 powoduje, że nadajnik i odbiornik portu szeregowego jest taktowany z wyjścia licznika T1, chyba że konkretny mikrokontroler posiada możliwości taktowania z innego źródła. Jeżeli prędkość transmisji ma odpowiadać jednej z prędkości standardowych, to stopień podziału licznika i częstotliwość oscylatora powinny być tak dobrane, by rzeczywista prędkość transmisji nie różniła się od nominalnej więcej niż 1,8%. W trybie pracy 0 prędkość transmisji jest określoną zależnością: W trybie pracy 2 prędkość transmisji zależy od ustawienia znacznika SMOD: W trybach pracy 1 i 3, przy taktowaniu portu szeregowego z licznika T1 pracującego w trybie 2 (8- bitowy licznik z autoładowaniem) prędkość transmisji jest określona zależnością: gdzie: TH1 - liczba wpisana do rejestru TH1 Licznik T1 może również taktować port szeregowy pracując w pozostałych trybach, z sygnałem zewnętrznym lub wewnętrznym. W takim przypadku do ponownego załadowania licznika należy najpierw wykorzystać przerwanie wywołane przepełnieniem licznika, a czas obsługi przerwania musi być uwzględniony przy obliczaniu częstotliwości przepełnień licznika. Mikrokontroler 8051 i pochodne posiadają sprzętowy port szeregowy (w skrócie UART), dzięki któremu możliwe jest wysyłanie i odbieranie informacji w postaci szeregowej, czyli "bit po bicie". Procesor posiada dwie dedykowane końcówki, które wchodzą w skład portu P3 procesora. Są to: RxD - (P3.0) wejście szeregowe ("Recieve Data") TxD - (P3.1) wyjście szeregowe ("Transmit Data"). Końcówki te mogą być wykorzystywane jako uniwersalne wejścia-wyjścia procesora, dzięki instrukcjom zapisu do portu P3, np.: MOV P3,#dana lub indywidualnym sterowaniem każdej końcówki SETB P3.0 {ustawienie "1" na końcówce RxD CLR P3.1 {ustawienie "0" na końcówce TxD} Jednak przy wykorzystaniu portu szeregowego, sterowanie końcówkami odbywa się automatycznie (za pomocą CPU), według ustawionych wcześniej przez programistę parametrów przesyłowych. Port szeregowy wysyła i odbiera dane w postaci bajtów (8-bitowych słów danych). Konwersja danej wysłanej lub odebranej przez procesor z postaci bajtu do postaci szeregowej lub odwrotnie, odbywa się automatycznie. Dzięki temu wystarczy wskazać tylko daną, którą chcemy wysłać lub czekać na odbiór jej z zewnętrznego urządzenia, także wyposażonego w port szeregowy. Miejscem, z którego wysyła się wspomniane dane - bajty, lub do którego one trafiają po transmisji z zewnątrz jest specjalny rejestr, znajdujący się pod adresem 99h w pamięci wewnętrznej danych procesora w obszarze rejestrów specjalnych SFR. Rejestr ma nazwę SBUF a zapisać go można tak samo jak każdy inny rejestr, np. instrukcją zapisu poprzez wskaźnik Ri: MOV SBUF,@R1 W przypadku, kiedy wcześniej ustawiliśmy parametry transmisji i uruchomiliśmy port szeregowy, taki zapis spowoduje automatyczne wytransmitowanie bajtu, który wcześniej znajdował się pod adresem wskazanym przez rejestr indeksowy R1. W przypadku odbioru danej, po zakończeniu transmisji odebrany bajt informacji będzie automatycznie umieszczony w rejestrze SBUF, a fakt zajścia takiego zdarzenie zostanie zasygnalizowany w programie automatycznie. Dzięki temu będziemy wiedzieć, że w rejestrze SBUF czeka na odczytanie gotowa odebrana dana, z którą możemy zrobić na co się ma ochotę. Istnieją dwa sposoby na przesyłanie danych metodą szeregową, są to: transmisja synchroniczna i transmisja asynchroniczna. 27

28 Port szeregowy może pracować w obu tych trybach. Transmisja synchroniczna W tym przypadku dane (informacje) przesyłane są od nadajnika do odbiornika za pomocą dwóch przewodów (nie licząc oczywiście masy). Jednym przesyłane są dane, a drugim generowany jest sygnał zerowy, w takt którego odbiornik może odebrać informację i stwierdzić, czy nadeszła "1-ka" czy logiczne "0". Można więc powiedzieć, że dane są przesyłane synchronicznie z przebiegiem zegarowym transmitowanym równolegle z danymi, stąd m.in. nazwa transmisji. Stan nieaktywny na linii może być umowny, może to być logiczne 0 lub 1, umowny jest też sposób generowania sygnału zerowego, wszystko zależy od przyjętego w układzie rozwiązania. Transmisja asynchroniczna W przypadku tego rodzaju transmisji nie ma oddzielnej linii zegarowej, a dane przesyłane są w takt wewnętrznego sygnału zegarowego, generowanego oddzielnie w nadajniku i odbiorniku. Warunkiem prawidłowego przesłanie danych w asynchronicznym sposobie transmisji jest to, aby nadajnik i odbiornik miały ustawioną tą samą częstotliwość wspomnianych sygnałów zegarowych (nazywanych też "taktującymi"). Takie ustalenie prędkości transmisji odbywa się na różne sposoby, z reguły jest to "ręczne" ustalenie przez operatora. UART w mikrokontrolerze 8051 Teraz, kiedy już wiadomo na czym polega różnica pomiędzy transmisją synchroniczną a asynchroniczną możemy przejść do omawiania układu UART w naszym procesorze. Oprócz rejestru SBUF istnieje dodatkowy rejestr sterujący wszystkimi funkcjami portu, a więc trybem jego pracy, sygnalizowaniem stanu transmisji, czy wreszcie uaktywnieniem odbiornika portu szeregowego. SCON.0 (RI) - (ang. "Receive Interrupt") znacznik odebrania przez port szeregowy bajtu, jest jednocześnie znacznikiem zgłoszenia przerwania (przy uaktywnionym systemie przerwań). W przypadku kiedy układ szeregowy mikrokontrolera jest ustawiony na odbiór (odblokowany jest układ odbiornika: bit REN=1), po odebraniu poprawnego znaku z urządzenia zewnętrznego, znacznik ten zostaje automatycznie ustawiony. Zerowanie tego znacznika odbywa się wyłącznie programowo, np. przez instrukcję: CLR RI SCON.1 (TI) - (ang. "Transmit Interrupt") znacznik wysłania przez port szeregowy bajtu, jest jednocześnie znacznikiem zgłoszenia przerwania jeżeli uaktywniono wcześniej układ przerwań. W przypadku kiedy do rejestru SBUF zostanie zapisany znak (bajt) po wytransmitowaniu go przez procesor, bit ten zostaje automatycznie ustawiony (TI=1), co informuje o zakończeniu nadawania znaku przez UART. Podobnie jak w przypadku znacznika RI, znacznik ten jest ustawiany automatycznie a musi być zerowany programowo za pomocą instrukcji np. CLR TI SCON.2 (RB8) - (ang. "Receive Bit no. 8") port szeregowy mikrokontrolera 8051 ma możliwość odbioru i transmisji znaków 9-bitowych - istnieje specjalny tryb pracy UART. W takim trybie w przypadku odbioru znaku z urządzenia zewnętrznego, bit RB8 zawiera właśnie wspomniany 9-ty bit odebranego znaku. Oczywiście 8 pierwszych bitów znaku znajduje się jak poprzednio w rejestrze SBUF. 28

29 SCON.3 (TB8) - (ang. "Transmit Bit no. 8") 9-ty bit nadawanego znaku w trybie transmisji z 9 bitami danych. Sytuacja analogiczna do poprzedniej, lecz w tym przypadku aby wysłać 9-bitowy znak poprzez port szeregowy należy najpierw wpisać 9-ty bit nadawanego znaku do bitu TB8 a potem załadować rejestr SBUF ośmioma młodszymi bitami (bajtem) nadawanego znaku. SCON.4 (REN) - (ang. "Receive ENable") bit uaktywnienia odbiornika transmisji szeregowej. W celu odbioru znaku (oczekiwanie na nadejście bajtu z port szeregowego) należy najpierw wyzerować bit REN, aby odblokować sprzętowy odbiornik znaku zawarty w mikrokontrolerze. W przypadku nadawania znaku bit ten powinien być wyzerowany (REN=0). SCON.5 (SM2) - znacznik maskowania odbioru transmisji. Bit ten może być zmieniany programowo. Ustawienie go (SM2=1) powoduje, że odbiornik ignoruje te odebrane znaki, których (w trybie 9-bitowym) 9-ty bit (RB8) jest równy zero (RB8=0). W efekcie w takim przypadku nie jest ustawiany znak znacznik odebrania znaku (RI). Dodatkowo w trybie 8-bitowym (tryb=1) sytuacja jest identyczna kiedy po odebraniu znaku nie został wykryty znak stop'u. SCON.7 (SM0) oraz SCON.6 (SM1) - bity ustalające jedno z czterech trybów pracy portu szeregowego. Oto one: SM0 SM1 = 00 - tryb 0: Transmisja szeregowa synchroniczna, znaki 8-bitowe, taktowane sygnałem zegarowym o częstotliwości Fxtal/12; SM0 SM1 = 01 - tryb 1: Transmisja szeregowa asynchroniczna, znaki 8-bitowe, szybkość transmisji może być ustawiana programowo (tryb do pracy np. z PC-tem): SM0 SM1 = 10 - tryb 2: Transmisja szeregowa asynchroniczna, znaki 9-bitowe, szybkość określana jako 1/32 lub jako 1/64 częstotliwości zegara procesora; SM0 SM1 = 11 - tryb 3: Transmisja szeregowa asynchroniczna, znaki 9-bitowe, szybkość transmisji może być określana programowo (znajduje także zastosowanie przy pracy z PC-tem). Znaczenie i funkcje poszczególnych trybów są następujące: Tryb 0 W tym synchronicznym trybie przesyłania informacji port szeregowy nadając i odbierając znaki 8- bitowe. Zawsze pierwszym nadawanym lub odbieranym bitem jest najmniej znaczący (D0). Znaczniki przesyłane są po dwukierunkowej linii P3.0 (RxD). Odbierane są i nadawane za pośrednictwem znanego nam już rejestru SBUF w takt sygnału zegarowego, który generowany jest przez kontroler na linii P3.1 (TxD). W tym trybie częstotliwość sygnału zegarowego jest stała i jest równa 1/12 częstotliwości sygnału taktującego procesor. W przypadku użycia obwodu oscylatora procesora z rezonatorem kwarcowym 12 MHz, znaki w tym trybie będą przesyłane z szybkością bitów/sek. (1Mb/s). Przy nadawaniu znaku obowiązuje zasada, że zapis wysyłanego kolejnego bitu znaku w urządzeniu odbiorczym (zewnętrznym np. rejestrze przesuwnym) powinien nastąpić przy narastającym sygnale zegarowym wytwarzanym na linii TxD. W przypadku odbioru (REN=1) narastające zbocze sygnału zegarowego powinno powodować przesunięcie zawartości zewnętrznego rejestru przesuwanego, z którego odbierane są dane, czyli de facto odczyt odbywa się przy opadającym sygnale przesyłanym linią TxD procesora. Po odebraniu znaku następuje automatyczne ustawianie znacznika RI, a przy nadawaniu - znacznika TI. Fakt że znaczniki te nie są zerowane automatycznie pozwala programiście na testowanie ich stanu, a co za tym idzie monitorowanie faktu odbioru czy nadania znaku bez potrzeby uruchomienia układu przerwań. Tryby 1, 2 i 3 Wspólną cechą charakteryzującą te tryby jest postać przesyłanej asynchronicznie informacji, czyli format przesyłania znaku (8-bitowy lub 9-bitowy). Ponieważw trybie asynchronicznym nie istnieje linia przesyłająca sygnał taktujący poszczególne nadawane i odbierane bity, obie strony nadawcza i odbiorcza muszą w jakiś sposób "wiedzieć" o tym, że np. w danej chwili nadajnik rozpoczął nadawanie znaku. Wtedy odbiornik detektując takie zajście będzie, znając oczywiście częstotliwość nadawania znaku przez nadajnik (znając prędkość transmisji), wiedział w jaki sposób odbierać nadawany z zewnątrz znak. 29

30 Ustalono, że podczas "ciszy na łączach", linie portów (RxD - odbioru i TxD - nadawania) są w stanie wysokim. Sygnałem rozpoczęcia nadawania znaku, a z drugiej strony sygnałem konieczności jego odbioru jest pojawienie się tzw. "bitu startu", czyli niskiego poziomu logicznego na linii (TxD w przypadku nadawania lub RxD w przypadku odbioru). Bit startu trwa dokładnie tyle ile powinny trwać (w zależności od szybkości transmisji) pozostałe bity informacji. Po bicie startu (zawsze równym zero!), następują kolejno bity danych. I tak pierwszy transmitowany jest najmłodszy bit (D0) bajtu wpisanego do rejestru SBUF, potem starszy (D1) i tak dalej, aż do bitu D7, a w przypadku transmisji 9-bitowej dodatkowo transmitowany jest bit SCON.3 (TB8), po czym następuje bit stopu, który jest zawsze równy "1". Pojawienie się bitu stopu kończy nadanie znaku, a po drugiej stronie następuje jego odbiór. Mechanizm transmisji znaku w trybach 1, 2, 3 jest taki sam, różna jest tylko liczba bitów danych oraz szybkość transmisji. Transmisja 9-bitowa jest często wykorzystywana do przesyłania danych z tzw. bitem parzystości. Jest to prosty sposób na wyeliminowanie odbioru fałszywych danych, kiedy to pomimo, że w określonej, koniecznej chwili nastąpiło wygenerowanie poprawnego bitu startu oraz bitu stopu, to jednak bity uległy zniekształceniu, co spowodowało zafałszowanie danych i odbiór niewłaściwego znaku. Porty Porty umożliwiają dołączenie do mikrokontrolera takich urządzeń zewnętrznych jak klawiatura, pole odczytowe, przekaźniki itp. Najczęściej porty posiadają osiem linii, którymi dane mogą być przesyłane w dwóch kierunkach, tzn. do lub z mikrokontrolera. Porty mogą być cyfrowe - przesyłające dane logiczne lub analogowe, np. wejścia przetwornika A/C. Mikrokontroler 8051 posiada cztery dwukierunkowe porty cyfrowe. Każdy port zawiera osiem linii, z których każda może pracować jako niezależna linia wejścia lub wyjścia. Inne mikrokontrolery rodziny '51 zawierają na ogół większą liczbę portów. Porty mogą być wielofunkcyjne, tzn. mogą być wykorzystywane do różnych celów. Port P0, przy współpracy mikrokontrolera z zewnętrzną pamięcią programu jest wykorzystywany do wysyłania mniej znaczącego bitu adresu rozkazu oraz do przyjmowania bajtu rozkazu. Przy współpracy z zewnętrzną pamięcią danych RAM, lub pamięcią programu, przez port P0 jest również przesyłany mniej znaczący bajt adresu oraz są przesyłane dane do i z zewnętrznej pamięci RAM lub z pamięci programu, a port P2 - do wysyłania bardziej znaczącego adresu dla zewnętrznej pamięci programu lub danych. W porcie P3 każde wyprowadzenie ma swą alternatywną funkcje, która występuje we wszystkich mikrokontrolerach rodziny '51: P3.0/RxD - wejście portu szeregowego P3.1/TxD - wyjście portu szeregowego P3.2/INT0# - wejście przerwania zewnętrznego lub bramkowania licznika T0 P3.3/INT1# - wejście przerwania zewnętrznego lub bramkowania licznika T1 P3.4/T0 - wejście taktujące licznik T0 P3.5/T1 - wejście taktujące licznik T1 P3.6/WR# - wyjście sygnału zapisu do zewnętrznej pamięci RAM P3.7/RD# - wyjście sygnału odczytu zewnętrznej pamięci RAM Porty w mikrokontrolerach mogą mieć różną budowę wynikającą z przeznaczenia. Na poniższych rysunkach przedstawione są schematy portów mikrokontrolerów rodziny '51. Wszystkie one zawierają przerzutnik typu D, który jest elementem rejestru danego port umieszczonego w obszarze SFR. Dana wysyłana na wyjście portu jest wpisywana właśnie do tego rejestru, np. rozkazem, który powoduje przepisanie zawartości akumulatora do rejestru portu P1. Odczytywanie danej z portu odbywa się poprzez bufory, przy czym w zależności od rozkazu dana może być odczytana albo z rejestru portu, albo bezpośrednio z końcówki portu. Pozostałe elementy portów zależą od dodatkowego przeznaczenia danego portu. I tak w porcie P0 (rys.1) znajduje się przełącznik przełączający wejście tranzystora wyjściowego do magistrali adresowanej i bezpośrednio do magistrali danych, gdyż mikrokontroler pobiera rozkazy z zewnętrznej pamięci programu lub komunikuje się z zewnętrz- 30

31 ną pamięcią danych. Rejestr portu jest dołączony do końcówki i jego zawartość nie ma wpływu na sygnał wyjściowy. W tym trybie pracy jest również aktywny tranzystor dołączony do zasilania, dzięki czemu można uzyskać większy prąd wyjściowy do sterowania wejść pamięci zewnętrznych. Gdy port P0 pracuje jako normalny port, to tranzystor ten pracuje jako źródło prądowe. Ponieważ przez port P2 dodatkowo być przesyłany tylko adres (bardziej znaczący bajt), dlatego jego układ jest prostszy niż portu P0. Zawiera on również przełącznik, dzięki któremu adres może być podany wyjście portu niezależnie od zawartości rejestru portu. Obciążeniem tranzystora wyjściowego, podobnie jak w pozostałych portach jest rezystor, a w rzeczywistości źródło prądowe. Konstrukcja pozostałych portów wielofunkcyjnych, wspólna dla całej rodziny mikrokontrolerów rodziny '51 jest pokazana na rysunku 3. W tych portach nie ma przełącznika dla dodatkowej funkcji wyjściowej, a sygnał funkcji jest wyprowadzony poprzez bramkę NAND, wspólnie sygnałem wyjściowym rejestru portu. Dlatego, aby funkcja wyjściowa mogła być aktywna, do rejestru portu musi być wpisana jedynka. Sygnał dodatkowej funkcji wejściowej z końcówki portu, poprzez dodatkowy bufor, jest doprowadzony do odpowiednich układów, na przykład do liczników, portu szeregowego, układu przerwań zewnętrznych, itp. Również w przypadku dodatkowej funkcji zewnętrznej do rejestru portu musi być wpisana jedynka, gdyż inaczej tranzystor wyjściowy zostanie wprowadzony w stan nasycenia, zwierając końcówkę portu do masy. Z tego też powodu, by nie blokować działania funkcji, po zerowaniu mikrokontrolera rejestry wszystkich portów są ustawiane w stan 1. 31

32 Schemat portów jednofunkcyjnych jest przedstawiony na rysunku 4. W układzie tym sygnał z wyjścia portu steruje bezpośrednio tranzystorem wyjściowym portu. Informacja wpisana do rejestru jest przekazywana bezpośrednio na końcówkę portu. Zastosowanie jako obciążenia tranzystora wyjściowego portu źródła prądowego daje to, że zwarcie wyjść portów do masy nie powoduje ich zniszczenia. Natomiast zwarcie końcówki do zasilania przy stanie zera logicznego końcówki może zniszczyć tranzystor wyjściowy. Do wejść portów można dołączyć układy typu otwarty kolektor, rysunek 5 linia P1.7, gdyż obciążeniem dla nich jest właśnie źródło prądowe portu, albo bezpośrednio sterować bazę tranzystora ponieważ odpowiedni prąd bazy jest dostarczany ze źródła prądowego portu, rysunek 5 linia P1.1. W wykonaniach standardowych mikrokontrolerów rodziny 51 wyjścia portów, poza portem P0, mogą sterować czterema wejściami TTL LS, natomiast mogą być sterowane układami TTL lub NMOS z otwartym kolektorem lub drenem. Wyjścia portu P0 mogą sterować ośmioma bramkami TTL LS. Jakie są oczywiście dopuszczane obciążenia portów należy sprawdzać w danych katalogowych producenta stosowanego mikrokontrolera. Przykładowo, niektóre mikrokontrolery rodziny 51 firmy ATMEL dopuszczają wartość prądu płynącego przez tranzystor wyjściowy portu diody LED lub wskaźnika 7-segmentowego. Z rysunków 1-4 wynika, że na wewnętrzną magistralę danych można przesyłać stan wyjścia rejestru portu lub jego końcówki. Może to wprowadzać tranzystor, jak na rysunku 5, to w celu włączenia tranzystora do komórki rejestru portu (P1.1) wpisujemy stan jedynki logicznej. Ponieważ napięcie nasycenia złącza baza emiter tranzystora wynosi 0,6-0,7V, to odczytując stan końcówki tego portu otrzymamy wartość zera logicznego. Rozkazy odczytujące zawartość rejestru portu są to rozkazy, których wykonanie równocześnie modyfikuje ich zawartość (Read-Modify-Write Instructions), natomiast rozkazy czytające stan końcówki portu są to rozkazy, które nie wpisują wyniku operacji do rejestru portu. 32

33 Rozkazy czytające rejestru portów ANL Pn,r (ANL P1,A) ORL Pn,r (ORL P3,B) XRL Pn,r (XRL P1,2Fh) JBC Pn.y,E_TA (JBC P1.3,PETLA) CPL Pn.y (CPL P3.4) INC Pn (INC P1) DEC Pn (DEC P3) DJNZ Pn,E-TA1 (DJNZ P1,PETLA2) MOV Pn.y,C (MOV P3.4,C) CLR Pn.y (CLR P1.5) SET Pn.y (SET P1.1) Rozkazy czytające końcówki portów ANL r,pn (ANL DPL,P1) ORL r,pn (ORL B,P3) XRL r,pn (ORL 23h,P1) JB Pn.y,E_TA (JB P1.7,SKOK) JNB Pn.y,E_TA (JNB P1.2,TAB1) CJNE A,Pn,E-TA (CJNE A,P3,Z_1) MOV r,pn (MOV A,P1) ADD A,Pn (ADD A,P2) ADDC A,Pn (ADDC A,P3) SUBB A,Pn (XCH A,P3) PUSH Pn (PUSH P1) Rejestry portów P0-P3 znajdują się w obszarze SFR pod tymi samymi adresami we wszystkich mikrokontrolerach rodziny 51. Wszystkie bity tych czterech portów mają tę właściwość, że posiadają własny indywidualny adres mogą być ustawiane niezależnie odpowiednimi rozkazami. Najmniej znaczący bit ma adres odpowiadający adresowi całego rejestru. Operowanie adresami poszczególnych bitów przy pisaniu programów jat bardzo uciążliwe, dlatego wszystkie narzędzia związane z programowaniem mikrokontrolerów dopuszczają adresowanie bitów poprzez podanie nazwy portu i numeru bitu. Na przykład bit 84h (port P0) może być opisany jako P0.4, a bit 0B0 jako P3.0. P0 87h 86h 85h 84h 83h 82h 81h 80h Adres 80h rw=1 P1 97h 96h 95h 94h 93h 92h 91h 90h Adres 90h rw=1 P2 0A7h 0A6h 0A5h 0A4h 0A3h 0A2h 0A1h 0A0h Adres rw=1 P3 0B7h 0B6h 0B5h 0B4h 0B3h 0B2h 0B1h 0B0h Adres rw=1 0A0h 0B0h We wszystkich rejestrach umieszczonych w obszarze SFR, których adresy są podzielne przez 8, każdy bit tych rejestrów może być ustawiany niezależnie. Stan wyjść linii portów można ustawić rozkazami typu MOV, ale ma to tę niedogodność, że rozkazem tym ustawia się jednocześnie wszystkie linie danego portu. Wygodniej jest użyć rozkazów logicznych operujących na bajtach lub pojedynczych bitach. W rodzinie mikrokontrolerów 51 są wykonywane następujące operacje logiczne na bajtach: CPL negacja logiczna, CLR zerowanie bitów, ANL iloczyn logiczny, ORL suma logiczna, XRL różnica symetryczna. Pierwsze dwie operacje są wykonywane wyłącznie w akumulatorze. Natomiast pozostałe mogą być wykonywane również poza akumulatorem na wszystkich rejestrach obszaru SFR i komórkach pamięci wewnętrznej RAM. Na pojedynczych bitach można wykonywać operacje: CLR zerowanie bitu, SETB ustawianie bitu w stan 1, CPL negacja bitu, ANL iloczyn logiczny, ORL suma logiczna. 33

34 Dwie ostatnie operacje mogą być wykonywane tylko z udziałem znacznika przeniesienia C. Należy zwrócić uwagę, że na pojedynczych bitach nie można wykonywać operacji różnicy symetrycznej. JEDNOSTKA ARYTMETYCZNO LOGICZNA ALU Jednostka artytmetyczno-logiczna wykonuje podstawowe działania arytmetyczne i logiczne. Należą do nich dodawanie arytmetyczne (binarne i dziesiętne), odejmowanie, mnożenie, dzielenie, porównywanie, przesunięcie o jeden bit w lewo lub w prawo, suma i iloczyn logiczny, różnica symetryczna oraz negacja. Wynik operacji wykonywanych w jednostce arytmetyczno-logicznej może mieć wpływ na kolejność wykonywanych rozkazów, działania programu. Z jednostką arytmetyczno-logiczną są funkcjonalnie powiązane trzy rejestry o ściśle sprecyzowanym przeznaczeniu: akumulator A, rejestr statusowy PSW, rejestr B. Pod pojęciem Jednostki Arytmetyczno-Logicznej kryje się jeden z elementów architektury 8051 odpowiedzialny za wykonanie operacji arytmetyczno-logicznych. Blok ten nazywany w skrócie jako ALU (ang. Arithmetic-Logic Unit), potrafi wykonywać operacje na liczbach (składnikach) 8-bitowych. Z matematyki wiemy, że do wykonania najprostszego działania dwuskładnikowego potrzebne są: po pierwsze składniki, po drugie w wyniku działania powstaje wynik, który też należy gdzieś przechować (umieścić). Do wprowadzenia (np. przez programistę) składników działania służą zarówno niektóre rejestry specjalne z grupy SFR jak i dowolna komórka wewnętrznej pamięci danych. Dla różnych działań występują jednak pewne ograniczenia w swobodzie umiejscawiania składników. Jednym z najważniejszych rejestrów z grupy SFR jest akumulator oznaczony dużą literą A (ang. "Accumulator"). Akumulator jest umieszczony pod adresem E0h (224 dziesiętnie). Rejestr ten służy jednostce ALU za miejsce pobrania argumentu oraz umieszczenia wyniku większości operacji arytmetyczno-logicznych. Rejestr ten może być adresowany bitowo (podobnie jak bajty spod adresów 20h... 2Fh), dzięki czemu możliwe jest testowanie jego bitów bez potrzeby wykonywania dodatkowych operacji logicznych. Dodatkowo rejestr A poza funkcjami związanymi z jednostką ALU służy do pobierania i umieszczania bajtów w zewnętrznej pamięci danych. Przy przesyłaniu tego rejestru na stos (umieszczanie lub pobieranie ze stosu) wykorzystuje się adresowanie bezpośrednie tego rejestru. Wtedy opisujemy go symbolem ACC (lub Acc). Drugim po akumulatorze ważnym rejestrem współpracującym z ALU jest, także 8-bitowy, rejestr B. Służy on do umieszczenia jednego ze składników mnożenia lub dzielenia, po wykonaniu jednej z tych operacji w rejestrze tym umieszczany jest: w przypadku mnożenia starszy bajt 16-bitowego wyniku mnożenia dwóch liczb 8-bitowych; w przypadku dzielenia reszta z dzielenia dwóch liczb 8-bitowych. Oczywiście zarówno rejestr B, jak i akumulator A, mogą być wykorzystywane dowolnie jako rejestry uniwersalne. Trzecim ważnym rejestrem związanym z ALU jest "słowo stanu programu" nazywane w skrócie jako PSW (ang. "Program Status Word"). Rejestr ten wchodzi w skład SFR a jego adres to D0h (208 dziesiętnie). W skład tego rejestru wchodzi osiem bitów nazywanych znacznikami, z których cztery informują o przebiegu wykonania informacji arytmetyczno-logicznych. PSW.0 (bit 0) - oznaczany jako P, to znacznik parzystości, ustawiany automatycznie w każdym cyklu maszynowym; wskazuje na to, czy liczba jednostek na poszczególnych pozycjach bitowych w akumulatorze A jest parzysta (P=1), czy nieparzysta (P=0). 34

35 PSW.2 (bit 2) - oznaczany jako OV, to znacznik przepełnienia (nadmiaru) ustawiany w wyniku wykonania dodawania lub odejmowania, a przy operacji dzielenia ustawienie go wskazuje na dzielenie przez zero. PSW.6 (bit 6) - oznaczany jego AC, to znacznik przeniesienia pomocniczego, do którego wpisane jest przeniesienie lub pożyczka z bitu 3, wykorzystywany jest przy korekcji dziesiętnej liczb. PSW.7 (bit 7) - znacznik przeniesienia oznaczany jako C, do którego następuje przeniesienie z najbardziej znaczącego bitu w wyniku wykonania operacji logicznych przesunięć liczb 8-bitowych lub w wyniku przekroczenia wyniku poza zakres liczb zapisanych w naturalnym kodzie dwójkowym (>255). Pozostałe znaczniki nie mają związku z ALU. W praktyce najczęściej nie jest konieczne pamiętanie o wszystkich wymienionych znacznikach, no może poza znacznikiem C (PSW.7). Znaczniki te działają jak gdyby automatycznie, to znaczy istnieją instrukcje programowania 8051, które uwzględniają wspomniane znaczniki, toteż nie jest konieczne badanie samego bitu słowa PSW, a jedynie wykonanie odpowiedniej instrukcji, która uwzględni odpowiedni stan danego znacznika. Znając pobieżnie 3 główne rejestry związane z ALU zapoznajmy się wstępnie z operacjami jakie można wykonać przy jej pomocy na liczbach 8-bitowych, są to: a) operacje arytmetyczne - dodawanie argumentów - dodawanie z przeniesieniem - odejmowanie z pożyczką W tych trzech przypadkach pierwszy z argumentów operacji (składnik lub odjemna) umieszczany jest w akumulatorze, drugi składnik lub odjemnik umieszczony jest w wewnętrznej pamięci danych, lub jest argumentem bezpośrednim rozkazu. Wynik działania umieszczany jest w akumulatorze. Dodatkowo w słowie PSW ustawiane są odpowiednie znaczniki: przeniesienia C i nadmiaru OV, co jest sygnałem przekroczenia zakresu liczb 8-bitowych odpowiednio bez lub ze znakiem. Pozostałe operacje arytmetyczne to: mnożenie dwóch 8-bitowych liczb bez znaku, gdzie jeden składnik wpisywany jest do akumulatora drugi do rejestru B, 16-bitowy wynik umieszczany jest w rejestrach A, B, odpowiednio starszy bajt w B, młodszy w A; dzielenie dwóch liczb 8-bitowych, gdzie dzielna umieszczana jest w akumulatorze A, a dzielnik w B, 8-bitowy wynik dzielenia znajduje się po tej operacji w A, natomiast B przechowuje resztę z dzielenia; inkrementacja (zwiększenie o 1) lub dekrementacja (zmniejszenie liczby o 1) akumulatora lub dowolnej komórki w wewnętrznej pamięci danych; korekcja dziesiętna wyniku zapisanego w akumulatorze. b) operacje logiczne suma logiczna (OR) iloczyn logiczny (AND) różnica symetryczna (XOR) negacja (NOT) zawartości akumulatora przesuwanie cykliczne akumulatora w lewo lub prawo, z lub bez przeniesienia. LICZNIK ROZKAZÓW PC Licznik rozkazów (16-bitowy) służy do adresowania pamięci programu. Szesnasto-bitowy adres umożliwia zaadresowanie 2 16 =65536 komórek pamięci, tzn. 64 KB. Należy pamiętać, że 1 KB = 35

36 2 10 =1024 bajty. Z zaadresowanej komórki pamięci programu procesor pobiera rozkaz, który złożony jest z jednego, dwóch lub trzech bajtów. Po pobraniu każdego bajtu rozkazu następuje zwiększenie licznika rozkazów PC o jeden (licznik rozkazów jest inkrementowany). W ten sposób licznik rozkazów PC wskazuje na adres pierwszego bajtu następnego do wykonania rozkazu. Przy pobieraniu rozkazów z zewnętrznej pamięci programu jej adres przesyłany jest za pośrednictwem portu P0 i P2, a bajty rozkazów przesyłane są poprzez port P0. Zawartość licznika rozkazów PC może być zmieniana odpowiednimi rozkazami, co umożliwia wykonywanie skoków do różnych fragmentów programu. REJESTRY SPECJALNE SFR Rejestry specjalne SFR mają szczególne znaczenie. Każdy element struktury wewnętrznej ma swoją reprezentację w postaci 1-bajtowego lub 2-bajtowego rejestru. Wpisanie informacji do tych rejestrów inicjuje działanie poszczególnych bloków funkcjonalnych mikrokontrolera. Dla przykładu wpisanie dowolnej wartości do rejestru SBUF rozpoczyna transmisję szeregową, a wpisanie jedynki logicznej na pozycję czwartego bitu w rejestrze TCON uruchamia licznik T0 itd. Rejestry specjalne są pomostem między programem, a wszystkimi urządzeniami peryferyjnymi mikrokontrolera (licznikami, portami równoległymi i szeregowym, strukturą przerwań itp.). Jak stwierdzono powyżej, rejestry specjalne SFR są odbiciem wszystkich wewnętrznych układów mikrokontrolera. Konstruktorzy mikrokontrolera 8051 przewidzieli miejsce na 128 rejestrów specjalnych. Rejestrów adresowanych tylko bezpośrednio, o adresach od 08h do 0FFh. W miarę upływu czasu, rozwoju nowych technologii i potrzeb użytkowników pojawiły się nowe mikrokontrolery ze zmienionymi lub całkiem nowymi układami wewnętrznymi. Każdy nowy element zmieniał tylko znaczenie kolejnych komórek rejestrów specjalnych. Z powyższego rysunku widać, że nie wszystkie rejestry są zagospodarowane, np. o adresach 0E1h..0EFh. Wolne rejestry nie mogą być jednak wykorzystane w programach jako dodatkowe komórki wewnętrznej pamięci RAM. Tylko niektóre z rejestrów mogą pełnić taką funkcję. O tym decydu- 36

37 je producent mikrokontrolera i programista. Analizując program wiadomo jakie jest wykorzystanie układów peryferyjnych, które mogą zmieniać w trakcie swoje pracy zawartość tych rejestrów. Poniżej znajduje się omówienie (łącznie z adresami) wybranych rejestrów specjalnych SFR. Oznaczenie rw-00h sygnalizuje: możliwość odczytu zawartości rejestru (read) możliwość wpisu (write) innych wartości zgodnie z wymaganiami programu zawartość rejestru po sprzętowym zerowaniu mikrokontrolera, 00h Akumulator (ACC - Accumulator) - adres 0E0h (rw-00h). Jest jednym z ważniejszych rejestrów procesora, ponieważ większość rozkazów wykorzystuje ten rejestr. Oznaczany jest w mnemonikach instrukcji jako ACC lub skróconym A. Rejestr B- adres 0F0h (rw-00h). Rejestr specjalnego przeznaczenia w operacjach mnożenia i dzielenia, zawierający jeden z argumentów oraz bardziej znaczącą część wyniku mnożenia lub resztę w operacji dzielenia. W innych sytuacjach może być używany jako rejestr ogólnego przeznaczenia. Rejestr słowa statusowego PSW (Program Status Word) - adres 0D0h (rw-00h). Rejestr zawiera bitowe informacje o wykonanej operacji, najczęściej o stanie akumulatora oraz numer wybranego banku rejestrów. Znaczenie poszczególnych bitów jest następujące: CY (PSW.7) znacznik przeniesienia (Carry Flag) z pozycji najbardziej znaczącego bitu akumulatora A7; przekroczenie zakresu liczb całkowitych bez znaku; AC (PSW.6) znacznik przeniesienia połówkowego (Auxiliary Carry Flag) między bitami akumulatora A3 i A4; F0 (PSW.5) znacznik F0 ogólnego przeznaczenia; RS1 (PSW.4) bit wyboru banku rejestrów Register Bank Select 1) RS0 (PSW.3) bit wyboru banku rejestrów (Register Bank Select 0) V (PSW.2) znacznik nadmiaru (Overflow Flag) dla dodawania i odejmowania liczb całkowitych ze znakiem w kodzie uzupełnienia do 2; przekroczenie zakresu liczb całkowitych bez znaku; 1 (PSW.1) znacznik F1 ogólnego przeznaczenia, brak w mikrokontrolerze 8051; (PSW.0) znacznik parzystości (Parity Flag) będący dopełnieniem do parzystej liczby jedynek w akumulatorze. Znaczniki F0 i F1 nie mają swojego specjalnego przeznaczenia i mogą być używane jako 1-bitowe komórki pamięci lub 1-bitowy rejestr. Znaczniki te są testowane w rozkazach skoków bezwarunkowych. Bity RS1 i RS0 wyboru banku rejestrów umożliwiają uaktywnienie jednego z czterech banków: RS1 RS0 Numer wybranego Adres wybranego banku rejestrów banku rejestrów (RB0) 00h..07h (RB1) 08h..0Fh (RB2) 10h..17h (RB3) 18h..1Fh 37

38 Wskaźnik stosu SP (Stack Pointer) - adres 81h (rw-00h). Jest rejestrem, który adresuje stos - wydzielony logicznie fragment wewnętrznej pamięci RAM. Stos używany jest do zapamiętywania adresów powrotu z podprogramów wywołanych programowo lub sprzętowo (przez przerwania), przenoszenia zmiennych między programami, czasowej ochrony rejestrów specjalnych i komórek wewnętrznej pamięci RAM, jeśli są one zmieniane w trakcie wykonywania podprogramów. Informacja wpisywana do stosu powoduje automatyczne zwiększenia zawartości wskaźnika stosu o liczbę wpisanych bajtów. Jeśli w trakcie wykonanej instrukcji do stosu wpisywany jest 1 bajt to wskaźnik stosu zwiększy się o 1, jeśli 2 bajty to o 2. Odczyt, pobranie jednego lub dwóch bajtów ze stosu spowoduje automatyczne zmniejszenie zawartości wskaźnika stosu, odpowiednio, o 1 lub o 2. 8-bitowy wskaźnik stosu SP wskazuje ostatnią zdjętą komórkę stosu. Ze względu na 8-bitową długość rejestru wskaźnika stosu i deklarację w wewnętrznej pamięci RAM należy kontrolować rozmiar stosu. Przy niekontrolowanym przesyłaniu danych do obszaru stosu możliwe jest zniszczenie danych przechowywanych w wyższych obszarach adresu pamięci RAM oraz w kolejnych bankach rejestru rozpoczynając od RB0. Wskaźnikowy rejestr danych DPTR (Data Pointer Register) - adresy: 82h, 83h (rw-00h każdy). 16-bitowy wskaźnikowy rejestr danych DPTR złożony jest z dwóch 8-bitowych rejestrów, z części bardziej znaczącej DPH (adres 83h) i części mniej znaczącej DPL (adres 82h). Rejestr ten stosowany jest do adresowania zewnętrznej pamięci danych RAM lub pamięci programu ROM w trybie indexowo-rejestrowo pośrednim. Górną część przestrzeni adresowej: 80h...FFh zajmują rejestry SFR. Rejestry specjalne stanowią sprzętowy pomost komunikacyjny pomiędzy programistą a wszystkimi blokami funkcjonalnymi mikrokontrolera. W przestrzeni adresowej SFR znajdują się także rejestry będące jednocześnie portami wejścia wyjścia. Dzięki temu możliwy jest łatwy i szybki dostęp do dowolnych bitów portu czyli fizycznie do jego wyprowadzeń. Zapis do odpowiedniego rejestru portu spowoduje pojawienie się kombinacji na końcówkach mikrokontrolera, odczyt rejestru pozwoli użytkownikowi na zbadanie poziomu logicznego na wybranej linii portu. Nie wszystkie 128 adresów z przestrzeni SFR jest wykorzystanych. Puste adresy nie nadają się do wykorzystania przez użytkownika. Nie jest to bynajmniej marnotrawienie cennych bajtów pamięci, lecz czysta przezorność projektantów rodziny 8051, którzy konstruując rozszerzone wersje 51-ki wyposażają je w nowe dodatkowe bloki funkcjonalne, a w wolnych miejscach przestrzeni SFR umieszczane są dodatkowe rejestry sterujące ich pracą (wspomniane pomosty ). I tak np. w mikrokontrolerze 8052 umieszczono dodatkowy licznik T2, do sterowania którego niezbędne stało się zaimplementowanie w strukturze SFR rejestrów T2CON, TH2, TL2, RLDH i RLDL. Producenci wytwarzając nowe mutacje tych procesorów, nie muszą się martwić o kompatybilność programową, czy architekturę dostępu do poszczególnych bloków układu. W każdym przypadku dodatkowe rejestry specjalne sterujące ich pracą umieszczane są w tej samej przestrzeni SFR, w taki sam sposób dostępnej dla użytkownika. Zwykłe odwołanie do konkretnego rejestru (komórki) pamięci odbywa się poprzez zapisanie lub odczytanie całego bajtu czyli 8 bitów. Czasem jednak bardziej praktyczne jest zbadanie tylko wybranych bitów z danego rejestru. Najlepszym przykładem niech będzie sytuacja kiedy do końcówek portu P0 mamy dołączonych 5 wyjść sterujących przekaźnikami, pozostałe 3 linie wykorzystywane są jako wejścia. Jeżeli chcemy np. zmienić stan przekaźnika nr2, nie trzeba wpisywać całego 8-bitowego słowa do rejestru P0, wystarczy zmienić tylko pojedynczy bit. Nie wszystkie rejestry specjalne można adresować w sposób bitowy. Adresowanie poszczególnych bitów może mieć także miejsce w obszarze pamięci użytkownika: 00h...7Fh. Tutaj jednak dozwolone jest adresowanie tylko rejestrów z zakresu 20h...2Fh czyli po przemnożeniu: (2Fh-20h)*8=128 bitów. Podczas pisania programu użytkownik ma dostęp do nich 38

39 wszystkich podobnie jak w trybie adresowania pamięci, z tym przypadku odczyt i zapis poszczególnych bitów może odbywać się w sposób bezpośredni, czyli poprzez podanie adresu bitu ( ). Liczniki służą do zliczania impulsów, pomiarów odcinków czasu, generowania sygnałów o określonym czasie trwania, itp. Dlatego często znajdują się w strukturze wewnętrznej mikrokontrolerów. Ich budowa, liczba bitów, sposób sterowania, wpisywania i odczytywania zależą od typu mikrokontrolera. Również w rodzinie mikrokontrolerów '51 występują liczniki o różnej budowie i właściwościach, ale dwa podstawowe liczniki oznaczone jako T0 i T1 występują we wszystkich elementach tej rodziny w prawie nie zmienionej formie. Są to liczniki 16-bitowe, które składają się z dwóch rejestrów ośmiobitowych oznaczonych odpowiednio dla licznika T0 - TH0 i TL0 oraz TH1 i TL1 dla licznika T1 (H oznacza część bardziej znaczącą, a L mniej znaczącą). Liczniki te mogą pracować jako liczniki zliczające impulsy zewnętrzne (counter) lub impulsy z wewnętrznego zegara (timer). Liczą one w "przód", tzn. impuls wejściowy zwiększa stan liczników. Licznik T0 ma cztery tryby pracy, licznik T1 - trzy, takie same jak licznik T0. Do obsługi liczników są przeznaczone rejestry TCON i TMOD. Znaczniki TF0 i TF1 są ustawiane w stan 1 sprzętowo, gdy nastąpi przepełnienie odpowiedniego licznika T0 lub T1. Ustawienie ich w stan 1, również programowe, wywoła przerwanie, jeżeli będzie ono blokowane. Mogą być zerowane programowo lub są zerowane automatycznie po wejściu mikrokontrolera do obsługi przerwania wywołanego ustawieniem znacznika w stan 1. Znaczniki TR0 i TR1 sterują pracą liczników. Ustawienie ich w stan 1 odblokowuje liczniki i mogą one zliczać impulsy wejściowe. Pozostałe znaczniki są związane z przerwaniami zewnętrznymi. Każdy ze znaczników rejestru TCON może być zmieniany indywidualnie przez program. Tryby pracy liczników T0 i T1, źródło sygnałów wejściowych oraz sposób sterowania licznikami ustala się przez wpisanie do rejestru TMOD odpowiedniego słowa. Rejestr TMOD znajduje się w obszarze SFR pod adresem niepodzielnym przez 8 i dlatego zmianę stanu jego znaczników należy dokonywać poprzez wpis całego bajtu. Obydwa liczniki mają takie same układy współpracujące: przełącznik doprowadzający sygnał wejściowy do liczników albo z wewnętrznego oscylatora poprzez dzielnik :12, albo z zewnątrz mikrokontrolera poprzez końcówki T0 (P3.4) i T1 (P3.5) portu P3. Przełącznik jest przełączany znacznikiem C/T#. Gdy C/T#= 0, to taktowanie liczników odbywa się z układu wewnętrznego, a gdy C/T# = 1, to są zliczane impulsy zewnętrzne. zespół bramek blokujących pracę liczników. Znacznik TRi służy do programowego uruchamiania pracy licznika. Przy TRi = 0 licznik jest zatrzymanym, a przy TRi = 1 pracuje. Praca licznika może być również uruchamiana sygnałem zewnętrznym. Przy ustawieniu znacznika GATE=1 licznik pracuje, gdy wejście INTi (P3.2 lub P3.3) jest na wysokim poziomie, jeśli natomiast zatrzymana, gdy wejście to jest na poziomie niskim. Gdy znacznik GATE=0 praca licznika nie zależy od stanu wejścia INTi. 39

40 przerzutniki przepełnienia liczników TFi, umieszczone w rejestrze TCON. Przepełnienie licznika Ti (przejście ze stanu 1 do stanu 0 na wszystkich bitach licznika) powoduje wpisanie stanu 1 do przerzutnika TFi. Jeżeli przerwanie do licznika jest aktywne, to nastąpi wywołanie procedury obsługi tego przerwania. Gdzie: i = 0 lub i = 1. Wejścia bramkujące liczników są wspólne z wejściami przerwań zewnętrznych dzięki czemu zewnętrzny sygnał zamykający bramkę licznika może uruchomić system przerwań. Tryby pracy liczników wybiera się poprzez odpowiednie ustawienie znaczników M0 i M1: Tryb 0 M1 = 0, M0 = 0 Tryb 0 został wprowadzony dla zachowania kompatybilności z rodziną mikrokontrolerów MCS-48, pierwowzorem rodziny '51. W trybie tym rejestr TL pracuje w układzie dzielnika wstępnego o podziale przez 2 5 lub 5-bitowego licznika, a rejestr TH jako licznik lub dzielnik 8-bitowy. Oba rejestry są połączone kaskadowo. Tryb 1 M1 = 0, M0 = 1 Tryb 1 jest taki sam jak tryb 0 z tą różnicą, że rejestr TL pracuje jako licznik lub dzielnik 8-bitowy. Obydwa rejestry są połączone kaskadowo tworząc 16-bitowy dzielnik lub licznik. Tryb 2 M1 = 1, M0 = 0 W trybie 2 są połączone w konfiguracji dzielnika 8-bitowego z autoładowaniem, tzn. z zadawaniem stanu początkowego po przepełnieniu rejestru. Rejestr TL pracuje jako dzielnik właściwy, natomiast rejestr TH służy jako bufor, którego zawartość jest przepisywana do rejestru TL gdy nastąpi jego przepełnienie. Operacja ta umożliwia otrzymanie dzielnika o zmiennym podziale, przy czym należy pamiętać, że liczniki liczą "w przód" i dlatego do bufora trzeba wpisywać uzupełnienie do 0FFh liczby podziałowej. Ponadto, po uruchomieniu dzielnik może zawierać przypadkową wartość początkową, lub 0 po włączeniu zasilania lub zerowania procesora. Dlatego przed uruchomieniem dzielnika do rejestru TL należy wpisać taką samą wartość jaka jest wpisywana do rejestru TH. Licznik T1 pracujący w trybie 2 jest często stosowany do taktowania portu szeregowego mikrokontrolera. 40

41 Tryb 3 M1 = 1, M0 = 1 Tryb 3 występuje tylko dla licznika T0. W tym trybie rejestry TL0 i TH0 pracują jako dwa niezależne 8-bitowe liczniki/dzielniki. Rejestr TL0 pracuje w strukturze licznika T0 (znacznik TR0, GATE, C/T# oraz przerzutnik TF0). Może więc być sterowany i testowany jak licznik T0 w trybie 0 i 1. Natomiast rejestr TH0 jest połączony na stałe z wyjściem zegara wewnętrznego poprzez dzielnik :12 i jest bramkowany znacznikiem TR1. Wyjście tego rejestru jest połączone z przerzutnikiem TF1. Dlatego gdy licznik T0 pracuje w trybie 3, to licznik T1 może pracować w pozostałych trybach, ale bez możliwości bramkowania jego wejścia i testowania przepełnienia. W tej sytuacji licznik T1 nadaje się praktycznie tylko do taktowania portu szeregowego. Wprowadzenie trybu 3 dla licznika T1 powoduje jego zatrzymanie. Przy zliczaniu impulsów wewnętrznych (C/T# = 0) rejestr licznika jest inkrementowany co jeden cykl maszynowy. Odpowiada to 1/12 częstotliwości oscylatora. Natomiast przy zliczaniu impulsów zewnętrznych (C/T# = 1) stan odpowiedniego wejścia licznika jest taktowany podczas każdego cyklu maszynowego. Jeżeli test wykaże stan wysoki wejścia w jednym cyklu maszynowym oraz stan niski w następnym cyklu maszynowym, to w kolejnym cyklu maszynowym nastąpi inkrementacja licznika. Dlatego maksymalna częstotliwość impulsów zewnętrznych zliczanych przez liczniki przez liczniki T0 i T1 musi być mniejsza od 1/24 częstotliwości oscylatora. Natomiast częstotliwość minimalna nie jest niczym ograniczona. Układy czasowo-licznikowe Pod pojęciem tym kryją się wielokrotnie wspomniane dwa 16-bitowe liczniki T0 i T1 oraz dodatkowy licznik T2 który występuje w procesorze Najogólniej mówiąc każdy z tych liczników a właściwie układów czasowo-licznikowych jest tak uniwersalnym blokiem, że z wykorzystaniem jego można dokonać następujące dwie operacje: a. za pomocą T0 (T1lub T2) można zliczać impulsy z zewnętrznego wejścia licznikowego; pin 14 dla T0 i pin 15 dla T1 (tryb licznika) 41

42 b. można zliczać wewnętrzne impulsy pochodzące z układu taktującego procesor, w każdym przypadku będzie to sygnał o częstotliwości = Fxtal/12. Czyli jeżeli dopięliśmy do mikrokontrolera kwarc o częstotliwości 6MHz to częstotliwość sygnału taktującego licznik T0 lub T1 (T2) będzie równa 6MHz/12=500kHz. W tym trybie zwanym czasomierzem, liczniki wykorzystuje się do odmierzania pewnych określonych programowo przez użytkownika odcinków czasu (opóźnień) i generowania przerwań po przepełnieniu któregoś z liczników. W przypadku wykorzystania układu licznikowego w obu przypadkach należy wiedzieć że: maksymalna liczba zliczonych impulsów jest określona pojemnością 16-bitowego licznika, czyli 2 do potęgi 16 = (licznik zlicza od 0 do po czym po nadejściu kolejnego impulsu jest zerowany oraz z zależności od potrzeb jest generowanie odpowiednie przerwanie); licznik można w dowolnym momencie uruchomić (zezwolić na zliczanie) lub zatrzymać komendę; do licznika można w każdej chwili wpisać dowolną wartość (16-bitowa liczbę), co spowoduje że licznik będzie zliczał impulsy od tej wartości aż do przepełnienia; wpisu takiego najlepiej jest dokonać w czasie gdy licznik jest zatrzymany; dodatkowo licznik można bramkować czyli uzależnić jego pracę lub zatrzymanie w zależności od stanu panującego na wejściach:int0 dla licznika T0 oraz INT1 dla licznika T1; oprócz tego licznik T1 (jak i T2 w 8052) może taktować zbudowany port szeregowy w specjalnym trybie; W przypadku używania liczników do zliczania impulsów zewnętrznych należy wiedzieć, że maksymalna częstotliwość (Fmax) zliczanych impulsów jest ściśle zależna od częstotliwości oscylatora kwarcowego Fxtal i określona jest zależnością: Czyli w przypadku zastosowania kwarcu o częstotliwości 12MHz maksymalna częstotliwość impulsów na wejściu licznika może wynieść 500kHz dodatkowo przy założeniu że przebieg ma wypełnienie 1:2. Ograniczenie wynika z faktu, że liczniki T0 i T1 (także T2) fizycznie nie wyglądają jak np. 7493, lecz zliczają na zasadzie próbkowania wejścia impulsów w celu stwierdzenia czy jest logiczne 0 a następnie 1. Operacja ta odbywa się na synchronicznie z cyklem maszynowym. W każdym cyklu maszynowym procesor próbkuje wspomniane wejścia liczników, toteż stwierdzenie, że na jednym z wejść sygnał zmienił wartość z 0 na 1 lub odwrotnie zajmuje 2 cykle maszynowe stąd bierze się Fmax. Przy projektowaniu układów dla bezpieczeństwa warto jednak granicę tę nieco obniżać (np. do 480kHz przy Fxtal=12MHz). Podane możliwości wykorzystania liczników nie są zbyt imponujące. Wyobraź sobie że chcesz zmierzyć częstotliwość rzędu kilku (kilkunastu MHz) a więc znacznie przekraczającą możliwości liczników procesora. Do mierzenia każdej częstotliwości w zwykłych miernikach wykorzystuje się dwa sygnały: mierzony i oczywiście bramkujący. Ten drugi pochodzi zazwyczaj z wbudowanego w przyrząd generatora wzorcowego i powstaje przez wielokrotne podzielenie częstotliwości generowanej najczęściej za pomocą rezonatora lub generatora kwarcowego. Nasuwa się myśl, no dobrze wykorzystam generator procesora a właściwie jeden z jego liczników do mierzenia czasu bramkowania, a drugim licznikiem zmierzę impulsy wejściowe i będę miał szukaną częstotliwość, tylko że kilka MHz to stanowczo zbyt wiele na mój procesor... A gdyby tak odwrócić role i zliczać impulsy wewnętrzne o częstotliwości przecież znanej i równej Fxtal /12, a sygnał wejściowy wielokrotnie podzielić i wykorzystać do bramkowania licznika. Wtedy w zasadzie otrzymamy nie częstotliwość ale okres przebiegu wejściowego, ale od czego mamy mikroprocesor, który potrafi wykonywać obliczenia arytmetyczno-logiczne. Potrafi on także dokonać odwrócenia wyniku okresu w efekcie czego otrzymamy liczbową wartość mierzonej częstotliwości. Tak więc w prosty sposób można dokonać pomiaru dowolnej częstotliwości wejściowej a przy okazji wyświetlić ciekawskiemu użytkownikowi także okres badanego przebiegu. Wbrew pozorom metoda ta daje świetne wyniki oraz pozwala uzyskać dużą dokładność pomiaru przy krótkich czasach bramkowania. 42

43 Należy tylko częstotliwość wejściową podzielić przez taką wartość, która da wynik zbliżony do wymaganego okresu bramkowania. Dodatkowy sprzętowy programowany dzielnik najprościej jest wykonać chociażby za pomocą kaskadowo połączonych 4-bitowych liczników binarnych 7493 lub podwójny wraz z multiplekserem np Wejścia multipleksera decydujące o stopniu podziału sterowane będą oczywiście z wolnych końcówek dowolnego portu mikroprocesora 8051 (np. z P1). Uzyskany na wyjściu multipleksera przebieg doprowadzony zostanie do wejścia bramkującego licznik INT0 dla licznika T0 lub INT1 kiedy zlicza licznik T1. W tym przykładzie oczywiście licznik będzie zliczał impulsy zewnętrzne, tak więc poszukiwaną częstotliwość można będzie obliczyć z proporcji gdzie: Fx częstotliwość szukana Fwew częstotliwość imp. wewnętrznych = Fxtal / 12 Lx liczba zliczonych impulsów z zewnątrz Lwew liczba impulsów zliczonych przez licznik wewnętrzny W przypadku kiedy sygnał mierzony wykorzystujemy jak w naszym przykładzie do bramkowania to Lx = 1 toteż po przekształceniu otrzymujemy: ale Lx = 1 to Wynik należy jeszcze pomnożyć przez wartość dzielnika sprzętowego, czyli wzór przyjmie postać: gdzie Dz to dzielnik, pamiętając że [Hz] gdzie Fxtal częstotliwość oscylatora. Dla przykładu załóżmy że zewnętrzny programowany dzielnik dzieli częstotliwość mierzoną przez 64 tak, że na wyjściu multipleksera otrzymujemy przebieg którego okres, a więc czas od jednego np. ujemnego zbocza do drugiego ujemnego zbocza, wynosi tyle, że wewnętrzny licznik procesora bramkowany tymi zboczami zliczy w czasie jednego okresu impulsy (których częstotliwość przy zastosowaniu kwarcu 12MHz wynosi 1MHz). Więc: Sprawdźmy na chłopski rozum czy aby wynik jest w porządku: licznik procesora w przeciągu jednego okresu podzielonego przebiegu wejściowego zliczył impulsy każdy po 1s (mikrosekundzie) przy zegarze 12MHz 54,532 ms (milisekund) odwracamy tę wartość i uzyskujemy liczbę: 18,3378 pamiętając o dzielniku wstępnym mnożymy otrzymaną liczbę przez niego czyli przez 64 otrzymujemy wynik: Fx = *64 = 1173 Hz Tak więc się zgadza. Fizycznie 16-bitowe liczniki T0, T1 i T2 są zbudowane z dwóch 8-bitowych połówek, do których programista ma dostęp na poziomie programu. W czasie zliczania impulsów przeniesienie z młodszego bajtu licznika nazwanego jako TL powoduje automatyczną inkrementację bajtu starszego TH, 43

44 przy jednoczesnym wyzerowaniu bajtu TL. Taką sytuacja przedstawia jeden z kilku typów, w którym dwie połówki stanowią całość 16-bitowy licznik. W mnemonice (nazewnictwie) 8051 wspomniane dwie połówki liczników mają swoje oznaczenia, i tak: dla licznika T0 są to TH0 i TL0 (starsza i młodsza część), dla licznika T1 TH1 i TL1. Podobnie jest w przypadku licznika T2 w procesorze 8052, gdzie mamy: TH2 i TL2. W praktyce użytkownik ma możliwość zaprogramowania liczników w kilku innych trybach pracy, nie mniej użytecznych. W sumie jest ich 4, nazywane potocznie : trybem 0, 1, 2 i 3. Tryb 0 W tym trybie licznik pracuje w konfiguracji 13-bitowej. Starszy bajt TH0 zawiera 8 bardziej znaczących bitów licznika (bity TH0), natomiast 5 pozostałych bitów to najstarsze bity z TL0 (bity 7...3). Trzy najmłodsze bity bajtu TL0 są nieistotne i ignorowane przez procesor. Do licznika (do bajtów TH0 i TL0) można wpisać dowolną wartość pamiętając, że 3 najmłodsze bity słowa TL0 będą ignorowane. Licznik po uruchomieniu będzie zliczał od wartości wpisanej na początku (może to być wartość 0 ) do wartości maksymalnej czyli 2 (13-1) =8191 po czym się wyzeruje, dodatkowo zgłaszając jeżeli potrzeba przerwanie informujące program o tym fakcie. Struktura liczników T0 i T1 w trybie 0 (a także w trybie 1) Tryb 1 Tryb ten jest bardzo podobny do trybu 0, z tym że do zliczania wykorzystywane są wszystkie 16- bitów licznika. Stąd nasuwa się wniosek że maksymalną pojemność licznika w tym trybie wynosi 65535, po czym następuje przepełnienie czyli wyzerowanie z ustawieniem znacznika zgłoszenia przerwania (jeżeli jest taka potrzeba). Tryb ten najczęściej wykorzystuje się do generowania przerwań mających na celu odmierzenie czasu np. przy zegarze czasu rzeczywistego. Przykład zastosowania może być taki jak poprzednio zwiększy się tylko zakres mierzonych odstępów czasu. Tryb 2 Nieco ciekawszy jest tryb 2, w którym pracuje tylko młodsza połówka 16-bitowego licznika, a więc TL0 (TL1 dla licznika T1). Ośmiobitowy licznik TL0 zlicza w górę aż do wartości maksymalnej czyli 255, po czym... tu uwaga! Automatycznie zostaje przepisana do niego wartość początkowa ze starszej połówki TH0. Tak więc raz wpisując do TH0 jakąś wartość, nie musimy się martwić aby zrobić to programowo powtórnie przy przepełnieniu pracującego licznika TL0. Tryb ten ma wiele zastosowań, szczególnie przydaje się tam gdzie potrzebne jest generowanie przerwań w równych odstępach czasu, np. przy generacji sygnału prostokątnego o zadanej częstotliwości i wypełnieniu. Warto także wiedzieć, że tryb ten w liczniku T1 wykorzystuje się do taktowania portu szeregowego procesora, a właściwie do określania szybkości transmisji danych przez ten port. Wtedy jednak licznik nie może spełniać innych funkcji, np. generować przerwań przy przepełnieniu. 44

45 Struktura liczników T0 i T1 w trybie 2 Tryb 3 Tryb ten dotyczy obu liczników T0 i T1 procesora na raz. Otóż w trybie tym licznik T1 jest zatrzymany i nie pracuje. Dwa bajty licznika T0: TH0 i TL0 pracują jako dwa niezależne 8-bitowe liczniki, przy czy istnieją pewne ograniczenia co do ich funkcji, a mianowicie: TL0 może liczyć impulsy z wejścia T0 lub pracować jako czasomierz zliczając impulsy wewnętrzne (Fxtal / 12) TH0 może pracować jako czasomierz, czyli zliczać impulsy wewnętrzne. Tryb ten został zaimplementowany przez twórców 8051 po to, aby w wypadkach kiedy licznik T1 używany jest do określenia szybkości transmisji poprzez port szeregowy, a programiście niezbędne są dwa dodatkowe liczniki, których role spełniają wtedy wspomniane TL0 i TH0. W obecnych czasach, jeżeli zachodzi taka potrzeba czasem lepiej jest zastosować procesor w wersji 80C52 z wbudowanym trzecim licznikiem T2. Niemniej jednak warto wiedzieć o tym nietypowym trybie liczników T0 i T1. Struktura liczników T0 i T1 w trybie 3 Licznik T2 w 80C52 W mikrokontrolerze 80C52 występuje dodatkowy licznik nazywany T2. Podobnie jak licznik T0 i T1 jest on 16-bitowy. Posiada jednak kilka dodatkowych funkcji które rozszerzają jednak kilka dodatkowych funkcji które rozszerzają jego możliwości. Podobnie jak w licznikach T0 i T1 licznik T2 składa się z dwóch bajtów TH2 (starszy) i TL2 (młodszy). Podobnie jak T0 i T1 licznik T2 może pełnić rolę czasomierza, czyli zliczać impulsy wewnętrzne pochodzące z zegara procesora, może także zliczać impulsy zewnętrzne dzięki alternatywnej funkcji jednego z pinów portu P1 a mianowicie P1.0 nóżka 1 procesora Licznik ten posiada także możliwość automatycznego załadowania wartości początkowej określonej przez użytkownika a zapisanej w dwóch oddzielnych rejestrach 8-bitowych ( które w sumie dają 16- bitową wartość początkową) zwanych RLDH i RLDL. 45

46 Funkcja ta działa podobnie jak w liczniku T0 (T1) ustawionym w trybie 2. Zauważmy jednak że w przypadku 2 pracuje całe 16-bitów licznika i całe 16-bitów z RLDH.RLDL może być automatycznie załadowane,, kiedy licznik zostanie przepełniony. Z licznikiem T2 w kostce 80C52 związany jest dodatkowy także alternatywnie wykorzystywany pin portu P1 (zwany T2EX) a mianowicie P1.1 nóżka 2. Otóż jeżeli zachodzi potrzeba, programista może wykorzystać tę końcówkę do zewnętrznego bramkowania licznika T2, co bardzo często przydaje się podobnie jak przy bramkowaniu liczników T0 i T1 sygnałami INT0 INT1. I tak w przypadku gdy T2 pracuje jako licznik zewnętrzne impulsy, opadające zbocze na końcówce T2EX spowoduje automatyczne natychmiastowe załadowanie licznika T2 TH2 i TL2 wartością zdefiniowaną w rejestrach RLDH.RLDL. Do czego to wykorzystać? Jest wiele praktycznych zastosowań, ot chociażby funkcja ładowania pod wpływem zewnętrznego sygnału może być przydatna do synchronizowania pracy wewnętrznego licznika z zewnętrznym sygnałem zegarowym o niższej częstotliwości. Jeżeli zaś licznik T2 pracuje w roli czasomierza, to wejście T2EX można wykorzystać do automatycznego przepisania aktualnej wartości rejestrów TH2.TL2 do rejestrów RDLH.RLDL. Można powiedzieć że działanie w tym trybie (czasomierza) jest jakby odwrotne do sposobu w trybie licznika. Wartość zostaje przepisana do rejestrów RLDH.RLDL a nie odwrotnie jak to miało miejsce w przypadku pracy T2 w trybie licznika impulsów zewnętrznych. W praktyce takie działanie umożliwia np. na bardzo dokładny pomiar przebiegów wolnozmiennych bez konieczności stosowania dodatkowych układów scalonych Podobnie jak licznik T1, T2 może w zależności od potrzeb, taktować port transmisji szeregowej. W takim przypadku możliwe jest rozszerzenie zakresów prędkości transmisji o dodatkowe wartości niedostępne przy tradycyjnym taktowaniu portu poprzez licznik T1, jak opisano wcześniej. REJESTR STATUSOWY PSW W rejestrze statusowym PSW są zapamiętywane pewne cechy wyników operacji wykonywanych w jednostce arytmetyczno-logicznej. Wybrane bity tego rejestru informują o wyniku wykonywanych działań: przekroczenia zakresu liczb całkowitych ze znakiem i bez znaku w operacjach dodawania i odejmowania, korekcji sumy liczb przedstawionych w kodzie BCD, próbie dzielenia przez zero, parzystej liczbie jedynek w akumulatorze, wyborze grupy dostępnych rejestrów wewnętrznych. CY (PSW.7) znacznik przeniesienia (Carry Flag) z pozycji najbardziej znaczącego bitu akumulatora A7; przekroczenie zakresu liczb całkowitych bez znaku; AC (PSW.6) znacznik przeniesienia połówkowego (Auxiliary Carry Flag) między bitami akumulatora A3 i A4; F0 (PSW.5) znacznik F0 ogólnego przeznaczenia; RS1 (PSW.4) bit 1 wyboru banku rejestrów (Register Bank Select 1); RS0 (PSW.3) bit 0 wyboru banku rejestrów (Register Bank Select 0); OV (PSW.2) znacznik nadmiaru (Overflow Flag) dla dodawania i odejmowania liczb całkowitych ze znakiem w kodzie uzupełnienia do 2; przekroczenie zakresu liczb całkowitych bez znaków; 46

47 F1 (PSW.1) znacznik F1 ogólnego przeznaczenia, brak w mikrokontrolerze 8051/31; P (PSW.0) znacznik parzystości (Parity Flag) będący dopełnieniem do parzystej liczby jedynek w akumulatorze A. Arytmetyka mikrokontrolerów jest arytmetyką binarną z jednym wyjątkiem, który dotyczy dodawania liczb w kodzie BCD. Zasadnicza grupa instrukcji arytmetycznych związana jest z akumulatorem A. Jeden z argumentów i wynik operacji zawarty jest zawsze w akumulatorze A, z wyjątkiem instrukcji inkrementacji (zwiększania o 1) i dekrementacji (zmniejszania o 1) zawartości rejestrów Rn, rejestrów specjalnych SFR oraz komórek wewnętrznej pamięci RAM. Wyjątkiem są również instrukcje mnożenia i dzielenia, z którymi związany jest rejestr B. Związanie większości instrukcji arytmetycznych z akumulatorem powoduje, że akumulator jest najbardziej obciążonym rejestrem mikrokontrolera. Również czas wykonywania programu, który odwołuje się co chwilę do akumulatora jest długi. W rejestrze słowa statusowego PSW znajdują się znaczniki (C, AC, OV i P), które zmieniane są w trakcie wykonywania instrukcji arytmetycznych. Przeznaczenie każdego z nich jest inne: znacznik przeniesienia C sygnalizuje przekroczenie zakresu (0..0FFh) 8-bitowych liczb całkowitych bez znaku w operacji dodawania i odejmowania oraz przekroczenie zakresu 0..99d przy operacji korekcji dziesiętnej. Oznacza przeniesienie między kolejnymi dodawanymi bajtami na pożyczkę przy wielobajtowym odejmowaniu. Ustawienie znacznika przeniesienia C (C=1) świadczy o przekroczeniu zakresu liczb całkowitych bez znaku 0.0FFh. znacznik przeniesienia połówkowego AC ma podobne znaczenie jak znacznik C ale dotyczy przeniesienia między czteroma mniej znaczącymi i czteroma bardziej znaczącymi bitami akumulatora. Jeśli wystąpi przeniesienie między bajtami A3 A4 (w skrócie A4 3)wówczas ustawiany jest znacznik AC. Znacznik ten jest wykorzystywany tylko w operacjach arytmetycznych wykonywanych dla liczb zapisanych w kodzie BCD, którym towarzyszy instrukcja korekcji dziesiętnej DA A. Jeśli w akumulatorze znajduje się liczba 27 (liczba dziesiętna zapisana w kodzie BCD) to dodanie liczby 19 (też dziesiętnej zapisane w kodzie BCD) powinno dać wynik równy 46. Skorygowanie otrzymanego wyniku dodawania i uzyskanie poprawnego wyniku możliwe jest po wykonaniu instrukcji korekcji dziesiętnej DA A. znacznik nadmiaru OV informuje o: - przekroczeniu zakresu 8-bitowych liczb całkowitych ze znakiem, -128D..+127D w operacjach dodawania i odejmowania, - iloczynie większym od 255 przy obliczaniu iloczynu, - próbie dzielenia przez zero przy obliczaniu ilorazu. Znacznik nadmiaru OV jest aktywny (OV=1) jeśli wystąpiło przeniesienie między bitem A6 i A7, tzn. A7 6,które zmieniło bit A7. Stan znacznika nadmiaru OV można określić za pomocą wyrażenia: OV=C xor A7 6 Druga i trzecia sytuacja występuje przy obliczaniu iloczynu zawartości akumulatora i rejestru B oraz ilorazu obu rejestrów. Stan znacznika parzystości P jest taki, aby liczba jedynek w akumulatorze i znaczniku parzystości była parzysta. Znacznik ten ustawiany jest po każdej instrukcji zmieniającej stan akumulatora. Ponieważ znacznik parzystości P jest modyfikowany po każdej instrukcji zmieniającej stan akumulatora A, dlatego również instrukcje przesłań mają na niego wpływ: 47

48 MOV A,#0 MOV A,#1 ;P=0 ;P=1. REJESTR PRZERWAŃ Przerwanie (interrupt) to sposób pracy procesora polegający na tym, że pod wpływem sygnału zewnętrznego lub pochodzącego z układu wewnętrznego mikrokontrolera, procesor przerywa wykonanie bieżącego programu i przechodzi do wykonywania podprogramu związanego z sygnałem przerwania. Podprogram obsługi przerwania jest zakończony specjalnym rozkazem, który powoduje, że procesor powraca do wykonywania przerwanego programu. Aby móc kontrolować przerwany program, przed wejściem do podprogramu obsługi przerwania, procesor musi zapamiętać miejsce, w którym nastąpiło przerwanie. Odbywa się to poprzez zapisanie zawartości licznika rozkazów do buforu pamięciowego nazywanym stosem. W zależności od typu procesora czy mikrokontrolera, w momencie przejścia procesora do obsługi przerwania, na stosie oprócz zawartości licznika rozkazów mogą być składowane automatycznie również zawartości innych rejestrów. Ale w rodzinie '51 wywołanie przerwania, albo rozkaz CALL wywołujący podprogram, powoduje, że na stosie jest chowana tylko zawartość licznika rozkazów. Zawartość pozostałych rejestrów, np. rejestru PSW, DPTR itp. lub komórek pamięci muszą być chowane programowo. Również w zależności od typu procesora, adres (interrupt vector) od którego rozpoczyna się podprogram obsługi przerwania jest określany w różny sposób. W jednych procesorach może być stały, umieszczonym pod ściśle określonym adresem pamięci programu - tak jest w rodzinie '51, w innych może być określany programowo lub przez urządzenie zewnętrzne. Lp. znacznik źródło przerwania adres IE0 TF0 IE1 TF1 RI+TI TF2+EXF2 IADC IEX2 IEX3 IEX4 IEX5 IEX6 przerwanie zewnętrzne INT0 przerwanie od licznika T0 przerwanie zewnętrzne INT1 przerwanie od licznika T2 przerwanie od nad. i odb. portu szeregowego przerwanie od licznika T2 i wejścia T2EX przerwanie od przetwornika A/C przerwanie zewnętrzne INT2 przerwanie zewnętrzne INT3, komparator CRC przerwanie zewnętrzne INT4, komparator CC1 przerwanie zewnętrzne INT5, komparator CC2 przerwanie zewnętrzne INT6, komparator CC3 0003h 000Bh 0013h 001Bh 0023h 002Bh 0043h 004Bh 0053h 005Bh 0063h 006Bh W mikrokontrolerach rodziny '51 adresy podprogramów obsługi przerwań są umieszczone w początkowym obszarze pamięci programu. Źródła przerwań oraz ich adresy z pozycji 1 5 są wspólne dla całej rodziny '51. Przerwanie z pozycji 6 jest wspólne dla mikrokontrolerów 8xC52 i 80C515/535. Pozostałe źródła przerwań wraz z ich adresami obsługi występują w procesorze 80C515/535. W pozostałych procesorach tej rodziny, ponieważ struktura wewnętrzna jest inna, mogą występować inne źródła przerwań wraz z przypisanymi do nich adresami. Niezmienna pozostaje zasada, że odstępy pomiędzy kolejnymi adresami obsługi przerwań są nie mniejsze niż 8 bajtów. Takie rozmieszczenie adresów obsługi przerwań w mikrokontrolerach rodziny '51 powoduje, że dla ominięcia obszaru pamięci programu związanego z obsługą przerwań, pod adresem 0 programu 48

49 umieszcza się rozkaz skoku do programu głównego, a pod adresami obsługi przerwań - najczęściej tylko rozkaz skoku do podprogramu obsługi przerwań. Jeżeli w trakcie wykonywania programu przyjdzie sygnał przerwania i zostanie on przyjęty przez układ przerwań, to wykonywanie programu zostanie zawieszone i nastąpi skok pod adres związany, z występującym przerwaniem. Umieszczony tu rozkaz skoku powoduje skok do podprogramu obsługi przerwania. Po jego wykonaniu następuje powrót do przerwanego programu (rozkaz RETI), w miejscu gdzie nastąpiło przerwanie. Każdy sygnał, który może wywoływać przerwanie jest związany, w mikrokontrolerach rodziny '51, z odpowiadającym mu znacznikiem. W momencie, gdy sygnał przerwania jest aktywny, odpowiadający mu znacznik jest ustawiany w stan 1. Jeżeli dane przerwanie jest odblokowane, to nastąpi przejście do procedury obsługi tego przerwania. Efekt przerwania można również wywoływać poprzez programowe ustawienie znacznika w stan 1. Znaczniki te są umieszczone w różnych rejestrach. TF1 - znacznik przerwania od licznika T1 TF0 - znacznik przerwania od licznika T0 IE1 - znacznik przerwania zewnętrznego INT1 IE0 - znacznik przerwania zewnętrznego INT0 TI - znacznik przerwania od nadajnika portu szeregowego RI - znacznik przerwania od odbiornika portu szeregowego W mikrokontrolerach rodziny '51 część znaczników jest ustawiany w stan zera automatycznie po wejściu procesora do obsługi przerwania. Pozostałe znaczniki muszą być zerowane programowo. Do znaczników zerowanych automatycznie należą znaczniki TF0 TF1 oraz IE0 i IE1 jeżeli układ przerwań zewnętrznych reaguje na zbocze opadające sygnału wywołującego przerwanie. Jeżeli układ przerwań zewnętrznych reaguje na poziom, a na wejściu jest wymuszany stan zera, to programowe zerowanie znaczników nie da żadnego efektu. 49

50 Układ przerwań zewnętrznych INT0 i INT1mogą reagować albo na poziom sygnału (poziom 0) albo na zbocze opadające sygnału. Zależy to od ustawienia znaczników IT0 i IT1 umieszczonych w rejestrze TCON. Jeżeli te znaczniki zostaną wyzerowane, to układ przerwań będzie reagował na poziom zera logicznego. Układy przerwań zewnętrznych INT2 i INT3 mogą reagować albo na zbocze narastające albo na zbocze opadające sygnału zewnętrznego, w zależności od stanu znaczników I2FR i I3FR umieszczonych w rejestrze T2CON. Jeżeli znaczniki te są w stanie 1, to układ reaguje na zbocze narastające. W przeciwnym przypadku - na zbocze opadające. Wykrywanie przez procesor zmiany poziomu sygnału na wejściu przerwań zewnętrznych polega na testowaniu stanu wejścia w każdym cyklu maszynowym. Jeżeli w jednym cyklu maszynowym występuje jeden stan, a w drugim drugi stan, to jest to traktowane przez układ przerwań jako zmiana poziomu. Dlatego, by układ poprawnie zareagował na sygnał przerwania, zarówno stan wysoki jak i niski powinny trwać przynajmniej przez jeden cykl maszynowy. Przy przerwaniach zewnętrznych reagujących na poziom, przed zakończeniem podprogramu obsługi przerwania, sygnał wejściowy powinien przejść do poziomu wysokiego lub należy zablokować to przerwanie, gdyż w przeciwnym przypadku nastąpi ponowne wejście do obsługi tego przerwania W mikrokontrolerach rodziny '51 występuje jeden znacznik, którym można zablokować wszystkie przerwania równocześnie i znaczniki blokujące indywidualnie każde źródło przerwania. W zależności od liczby źródeł przerwań, znaczniki te mogą mieścić się w jednym lub dwóch rejestrach. W różnych mikrokontrolerach rodziny '51 rejestry zawierające te same znaczniki i mieszczące się pod tymi samymi adresami mogą mieć różne nazwy. Podobnie znaczniki pełniące tę samą funkcję mogą mieć również inną nazwę. Ustawienie znaczników w stan zera powoduje zablokowanie przerwania. Przechodzące sygnały przerwań nie są pamiętne. 50

51 8xC51/52 80C515/535 EA, EAL - znaczniki blokujące wszystkie przerwania ET2 - znacznik blokujący przerwanie od licznika T2 ES - znacznik blokujący przerwania od nadajnika i odbiornika portu szeregowego ET1 - znacznik blokujący przerwanie od licznika T1 EX1 - znacznik blokujący zewnętrzne przerwanie INT1 ET0 - znacznik blokujący przerwanie od licznika T0 EX0 - znacznik blokujący zewnętrzne przerwanie INT0 EXEN2 - znacznik blokujący przerwanie od zewnętrznego sygnału przeładowania licznika T2 EX6 EX4 - znacznik blokujący zewnętrzne przerwania INT6 INT4 oraz przerwania od kompilatorów CC3 CC1 EX3 - znacznik blokujący zewnętrzne przerwanie INT3 oraz przerwanie od kompilatora CRC EX2 - znacznik blokujący zewnętrzne przerwanie INT2 EADC - znacznik blokujący przerwanie od przetwornika A/C Stan znaczników wywołujących przerwania jest sprawdzany w fazie S5P2 każdego cyklu maszynowego. W następnym cyklu maszynowym po wykryciu sygnału przerwania następuje rozpoznanie źródła przerwania oraz ustalenie kolejności obsługi przerwania, jeśli wystąpiło kilka sygnałów przerwań równocześnie. W dwóch kolejnych cyklach maszynowych jest zapamiętywana na stosie zawartość licznika rozkazów, do licznika rozkazów jest wpisywany adres przerwania i jest ewentualnie zerowany znacznik wywołujący przerwanie, jeżeli jest to znacznik zerowany sprzętowo. Wejście do procedury obsługi przerwania może być opóźnione jeżeli: 1. jest obsługiwane przerwanie, które nie może być przerwane. W tej sytuacji musi być ono najpierw zakończone, potem jest wykonywany jeden rozkaz z przerwanego programu i dopiero wtedy może być obsłużone kolejne przerwanie. 2. nie został zakończony aktualnie wykonywany rozkaz. Najpierw musi być zakończony rozkaz, by procesor przeszedł do obsługi przerwania. Z powyższego wynika wniosek, że czas od momentu nadejścia sygnału przerwania do momentu wejścia do procedury obsługi przerwania może być różny. Mikrokontroler nie obsługuje sygnału przerwania, który przyszedł gdy przerwanie było zablokowane. Jeżeli do trzeciego cyklu maszynowego procedury przerwania nadejdzie następny sygnał przerwania o wyższym poziomie niż aktualny, to zostanie on obsłużony w pierwszej kolejności. Po wej- 51

52 ściu do procedury obsługi przerwania system przerwań zostaje zablokowany dla innych przerwań, chyba że nadejdzie przerwanie o wyższym priorytecie. Odblokowanie systemu następuje po rozkazie RETI. Rozkaz ten ponadto powoduje przepisanie dwóch bajtów ze szczytu stosu do rejestru rozkazów PC. Zakończenie podprogramu obsługi przerwania rozkazem RET również odtworzy zawartość rejestru rozkazów, czyli nastąpi powrót do wykonywania przerwanego programu, ale nie nastąpi odblokowanie systemu przerwań dla następnych przerwań! Gdy równocześnie nadejdzie kilka sygnałów przerwań żądających obsługi, to o kolejności ich obsłużenia decyduje priorytet ustalony arbitralnie przez producenta. Oznacza to, że przerwanie o wyższym priorytecie zostanie obsłużone przed przerwaniem o niższym priorytecie. Lp. Źródło przerwania Priorytet 1. IE0 najwyższy IADC TF0 IEX2 IE1 IEX3 TF1 IEX4 RI+TI 10. IEX5 11. TF2+EXF2 12. IEX6 najniższy W mikrokontrolerach rodziny '51 wprowadzono mechanizm umożliwiający nadanie wybranym przerwaniom bezwzględnego pierwszeństwa, tzn. mają one możliwość przerwania wykonywanego podprogramu obsługi innego przerwania. Przerwaniom można nadać odpowiedni poziom. Jeżeli w trakcie obsługi przerwania nadejdzie sygnał przerwania o wyższym poziomie, to procesor przerwie wykonywanie przerwania z poziomu niższego, wykona obsługę wyższego i ponownie przejdzie do wykonywania obsługi przerwania. Do ustalania poziomów przerwania służą rejestry poziomu przerwań. W zależności od typu mikrokontrolera mogą występować jeden lub dwa rejestry. W mikrokontrolerach 8xC51/52 występuje rejestr IP: X zarezerwowane PT2 licznik (mikrokontroler 8xC52) PS port szeregowy PT1 licznik T1 PX1 przerwanie zewnętrzne INT1 PT0 licznik T0 PX0 przerwanie zewnętrzne INT0 Należy zwrócić uwagę, że w mikrokontrolerach 8xC51/51 rejestr IP znajduje się pod adresem, pod którym w mikrokontrolerach 80C515/535 znajduje się rejestr IEN1. Ustawienie w rejestrze IP w stan 1 znacznika dla wybranego źródła przerwania powoduje, że przerwanie to osiąga wyższy poziom od przerwań, których znaczniki mają stan 0. W ten sposób wyróżnione przerwanie będzie obsłużone jako pierwsze, jeśli zgłosi się kilka przerwań, lub spowoduje przerwanie obsługiwanego przerwania i zostanie samo obsłużone. Jeśli kilka źródeł przerwań zostanie wyróżnionych wyższym poziomem, to, gdy zgłoszą się równocześnie, o kolejności obsłużenia zadecyduje priorytet, według podanej wyżej tabeli. 52

53 Ponieważ okazało się że dwa poziomy przerwań nie wystarczają do ustawienia hierarchii przerwań, w mikrokontrolerach 80C515/535 wprowadzono cztery poziomy ustalane przez ustawienie znaczników w dwóch rejestrach: Ponieważ liczba znaczników jaka jest do dyspozycji jest za mała, by ustawić poziomy przerwań dla wszystkich źródeł, dlatego źródła przerwań zostały połączone w pary i przypisane do odpowiednich znaczników. Para źródeł przerwań znajduje się zawsze na tym samym poziomie i nie może wzajemnie przerywać podprogramu obsługi przerwań. Na przykład sygnał przerwania od przetwornika A/C nie może przerwać podprogramu przerwania zewnętrznego INT0 i odwrotnie. WSKAŹNIKOWY REJESTR DANYCH DPTR W czasie wykonywania programu pobierane są dane lub stałe zapisane w pamięci progamu (ROM). Przechowywanie dużej liczby zmiennych, np.wyników obliczeń pomiarów lub transmisji danych, wymaga dołączenia do mikrokontrolera zewnętrznej pamięci danych (RAM), jeśli wewnętrzna pamięć jest za mała. Do adresowania obu typów pamięci wykorzystywany jest 16-bitowy wskaźnikowy rejestr danych DPTR (Data Pointer Register). Rejestr danych DPTR złożony jest z dwóch 8-bitowych rejestrów, z części bardziej znaczączej DPH (adres 83h) i części mniej znaczącej DPL(adres 82h). Działanie mikrokontrolera Mikrokontrolery są układami sekwencyjnymi, synchronicznymi, tzn. wszystkie operacje wykonywane przez układy procesora odbywają się w określonej kolejności i w ściśle określonych momentach czasowych. Dlatego muszą współpracować z generatorami impulsów zegarowych. Układy mikroprocesorowe korzystają najczęściej z generatorów zewnętrznych. Natomiast mikrokontrolery mają wewnętrzny generator, do którego dołącza się z zewnątrz albo tylko sam rezonator kwarcowy lub ceramiczny oraz dodatkowo dwa kondensatory, ułatwiające wzbudzenie się generatora na pożądanej częstotliwości. W mikrokontrolerach rodziny '51 jeżeli jest stosowany rezonator kwarcowy, to pojemności mają wartość pf, a przy rezonatorze ceramicznym pf. Dobierając częstotliwość generatora należy pamiętać, że musi się ona mieścić w zakresie określonym przez producenta. Przy częstotliwości za dużej lub za małej mikrokontroler przestanie poprawnie pracować. Stosowanie wyższych częstotliwości generatora przyspiesza wykonanie przez mikrokontroler operacji, ale odbywa się to kosztem zwiększenia prądu zasilania, zwiększenia poziomu zakłóceń wytwarzanych przez procesor, a ponadto wymaga stosowania szybszych, a więc i droższych elementów współpracujących z mikrokontrolerem, np. pamięci zewnętrznych. Ponadto przy wyższych częstotliwościach generatora mikrokontroler, zwłaszcza pobierający rozkazy z pamięci zewnętrznej 53

54 programu, jest bardziej podatny na zakłócenia zewnętrznych pól elektromagnetycznych. Dlatego częstotliwość generatora powinna być najniższa, ale zapewniająca wykonanie zadania w założonym czasie. W większości mikrokontrolerów praca generatora może być zatrzymana odpowiednim rozkazem, co powoduje zatrzymanie działania wszystkich elementów mikrokontrolera. Ma to na celu zredukowanie do minimum prądu zasilania, np. w momencie awarii sieci zasilającej. Układ każdego generatora wymaga odpowiedniego czasu od momentu włączenia zasilania do momentu osiągnięcia założonej częstotliwości. Czas ten wynosi na ogół około 10 ms. Ponieważ po włączeniu zasilania układy wewnętrzne mikrokontrolera przyjmują stan dowolny, dlatego musi istnieć możliwość wymuszenia na mikroprocesorze powtarzalnych stanów początkowych wszystkich jego rejestrów. W komputerach służy do tego przycisk RESET. Mikroprocesory posiadają wejście (RST), na które jeżeli poda się odpowiedni sygnał, to nastąpi wymuszenie stanów początkowych rejestrów wewnętrznych. Ponieważ stan początkowy procesora musi być ustalony po włączeniu zasilania, to do tego wejścia dołącza się układ czasowy RC, który wymusza, na wymagany odcinek czasu, sygnał zerujący. W większości mikrokontrolerów, np. w mikrokontrolerach rodziny '51 wykonanych w technologii CMOS rezystor jest umieszczony wewnątrz układu. Sygnałem tym, w zależności od typu mikrokontrolera może być poziom zera logicznego (masa układu), jak na przykład w mikrokontrolerach 80C515 lub poziom jedynki logicznej (zasilanie) jak w mikrokontrolerach W większości układów mikroprocesorowych stosuje się przełączniki, dołączone do linii RST, do ręcznego zerowania procesorów. Daje to możliwość uruchomienia od początku programu procesora, np. w przypadku testowania lub zawieszania się programu procesora. Podstawową jednostką określającą czas wykonywania instrukcji jest cykl maszynowy. Dla rodziny mikrokontrolerów '51 składa się on z sześciu stanów, oznaczonych od S1 do S6, z których każdy dzieli się na dwie fazy P1 i P2. Czas trwania jednej fazy jest równy okresowi oscylatora. Wynika stąd, że czas trwania cyklu maszynowego jest 12 razy dłuższy od okresu oscylatora. W każdym stanie cyklu maszynowego są realizowane pewne podstawowe procedury związane z wykonywaniem rozkazów. Rozkazy są pobierane z pamięci wewnętrznej lub zewnętrznej mikrokontrolera spod adresu wskazywanego przez licznik rozkazów (PC). Rozkazy mogą być jedno lub wielobajtowe, a czas ich wykonywania może trwać jeden lub kilka cykli maszynowych. W rodzinie '51 występują rozkazy jedno, dwu i trójbajtowe, które są wykonywane w jednym, dwóch lub czterech cyklach maszynowych. Pobranie pierwszego bajtu rozkazu odbywa się zawsze w takcie S1. Jeżeli rozkaz jest jednobajtowy, to jest on wykonywany w jednym cyklu maszynowym, a bajt następnego rozkazu jest pobierany w takcie S1 kolejnego cyklu maszynowego. 54

55 Większość rozkazów dwubajtowych jest wykonywana w jednym cyklu maszynowym, z tym że drugi bajt rozkazu jest pobierany w takcie S4 cyklu maszynowego. Rozkazy trójbajtowe są wykonywane w dwóch cyklach maszynowych. W jednym cyklu maszynowym, w taktach S1 i S4, są pobierane dwa bajty rozkazu, a w takcie S1 drugiego cyklu maszynowego jest pobierany trzeci bajt rozkazu. Bajt nowego rozkazu jest pobierany w takcie S1 trzeciego cyklu maszynowego. W rodzinie '51 występują również rozkazy jednobajtowe i dwubajtowe, które są wykonywane w dwóch lub czterech cyklach maszynowych. W czterech cyklach maszynowych są wykonywane tylko rozkazy mnożenia (MUL AB) i dzielenia (DIV AB). Po pobraniu każdego bajtu rozkazu następuje automatyczne zwiększenie o jeden licznika rozkazów. 55

56 Znajomość liczby cykli maszynowych potrzebnych na wykonanie poszczególnych rozkazów jest konieczna w przypadku generowania przez mikrokontroler odcinków czasów o dużej dokładności. Sygnały o krótkich czasach uzyskuje się najczęściej przez wykonanie programu wymagającego odpowiedniej liczby cykli maszynowych. Jeżeli mikrokontroler pobiera rozkazy z pamięci zewnętrznej, to musi istnieć możliwość wysłania na zewnątrz adresu komórki pamięci, której jest pobierany rozkaz oraz wejście poprzez które rozkaz jest przesyłane do struktury wewnętrznej mikrokontrolera. W mikrokontrolerach rodziny '51 można również dołączyć zewnętrzną pamięć RAM służącą do chwilowego przechowywania danych. Do dostępu zarówno do pamięci programu jak i danych wykorzystuje się dwa ośmiobitowe porty P0 i P2. Żeby zmniejszyć liczbę wyprowadzeń obsługujących pamięci zewnętrzne przez port P0 jest wysyłany mniej znaczący bajt 16-bitowego adresu oraz są przesyłane bajty rozkazów oraz dane do lub z pamięci RAM. Dla rozdzielenia bajtu adresu od rozkazów i danych jest stosowany zatrzask, w którym jest zapamiętywany adres. Rozdzielenie dostępu do pamięci danych i programu odbywa się sygnałami PSEN# i RD#. PSEN# odblokowuje pamięć programu na czas pobierania z niej rozkazów, WR# wpisuje dane do zewnętrznej pamięci RAM, RD# odczytuje dane z pamięci zewnętrznej RAM. Mniej znaczący bajt adresu jest wpisywany do zatrzasku opadającym zboczem sygnałem ALE i jest w nim pamiętany, aż do ponownego wpisu. Pamięć programu jest odblokowywana poziomem logicznego zera sygnału PSEN#. Narastające zbocze tego sygnału określa moment, w którym rozkaz jest przyjmowany przez procesor. Na czas wysyłania przez port P0 adresu i pobierania rozkazu, przez port P2 jest wysyłany bardziej znaczący bajt adresu. Strzałki na poniższym rysunku wskazują momenty czasowe, w których następuje zapamiętanie adresu, pobranie rozkazu lub przesłanie danej. PCI oznacza mniej znaczący bajt licznika rozkazu, a PCH - bardziej znaczący bajt licznika rozkazu. 56

57 Gdy ma nastąpić przesyłanie danych do lub z zewnętrznej pamięci RAM, to w zatrzasku jest zapamiętywany mniej znaczący bajt adresu komórki pamięci RAM. Sygnał ALE przyjmuje poziom 0 logicznego a sygnał PSEN 1 logicznej. Jeżeli dana jest zapisywana do pamięci, to sygnał WR# przyjmuje, na czas wpisywania danej, poziom 0 logicznego. Natomiast gdy dana jest odczytywana z pamięci, to 0 przyjmuje sygnał RD#. Zewnętrzna pamięć RAM może być adresowana w całym obszarze 64KB - wtedy na liniach port P2 pojawia się bardziej znaczący bajt adresu. Przy tym sposobie adresowania adres jest pobierany z 16 - bitowego rejestru DPTR, który składa się a dwóch rejestrów 8-bitowych: DPL, zawierający mniej znaczący bajt adresu i DPH, zawierający bardziej znaczący bajt adresu. Zewnętrzna pamięć RAM może być również adresowana poprzez rejestry R0 lub R1. Ponieważ rejestry te są rejestrami ośmiobitowymi, to można adresować obszar do 256 bajtów. Linie portu P2 mogą służyć wtedy jako normalne linie wejścia - wyjścia, lub jeżeli są połączone z wejściami adresowymi pamięci RAM. to programując odpowiednio port P2 można wybierać określone obszary pamięci RAM o objętości 256 bajtów. Jest to tzw. stronicowanie pamięci. Dostęp do pamięci RAM kończy się wraz z taktem S3. W ten sposób procesor może w takcie S5 wysłać adres rozkazu pobieranego w następnym cyklu maszynowym. Dzięki wydzieleniu sygnałów PSEN# oraz sygnałów RD# i WR#, pamięć programu i pamięć danych są rozdzielone, mino że znajdują się w tej samej przestrzeni adresowej. 57

58 Budowa W jednym układzie scalonym zawarto: rdzeń mikroprocesora CPU z 8-bitową, jednostką arytmetyczno-logiczną (ALU),zdolna do wykonania obliczeń na liczbach 8-bitowych; uniwersalne dwukierunkowe porty wejścia /wyjścia, do komunikowania się ze światem zewnętrznym po poprzez zapisywanie do nich jak i odczyt przez nie danych cyfrowych (w niektórych odmianach 8051 z wbudowanymi przetwornikami A/C i C/A, także wielkości analogowych; programowany szeregowy port transmisji dwukierunkowej, który może np. służyć do komunikowania się z dowolnym komputerem wyposażonym w złącze RS232C; dwa (w innych wersjach 3) uniwersalne liczniki/timery, do dowolnego wykorzystania; układ generowania przerwań systemowych, zawierający także możliwość generowania przerwań zewnętrznych; układ wewnętrznego oscylatora, który ogranicza do minimum konieczność stosowania zewnętrznych elementów do pojedynczego rezonatora kwarcowego oraz dwóch dodatkowych kondensatorów ceramicznych; pamięć do przechowywania danych i wyników obliczeń: RAM; wewnętrzna pamięć typu ROM, w której zawarty jest program działania. Program działania jest tworzony przez konstruktora w procesie tworzenia aplikacji, a następnie jest zapisywany za pomocą programatora w strukturę mikrokontrolera. Ponadto mikroprocesor 8051 posiada możliwość dołączenia z zewnątrz dodatkowych układów pamięci statycznych RAM (do przechowywania danych) oraz pamięci EPROM/ROM z której może odczytywać polecenia czyli programy. W tym ostatnim przypadku często wewnętrzna pamięć ROM jest wtedy nieaktywna, lub nie ma jej wcale. 58

59 Na rynku istnieje kilka podstawowych wersji procesora Wszystkie one mają takie same wewnętrzne bloki funkcjonalne, różnica polega na rodzaju pamięci programu czyli pamięci stałej z której mikrokontroler pobiera rozkazy. Wśród pamięci stałych ROM najbardziej popularne są pamięci EPROM (programowane elektrycznie, kasowane promieniami UV) głównie ze względu na ich cenę. Rzadziej stosowane są pamięci ROM programowane przez producenta lub pamięci EPROM/OTP (OTP One Time Progrmmable) czyli jednokrotnie programowane pamięci EPROM (jednokrotnie bo nie ma możliwości ich kasowania promieniami UV, co jest wynikiem braku okienka kwarcowego w obudowie pamięci). Ostatnio coraz większą popularność zdobywają pamięci EEPROM, czyli pamięci które można programować jak i kasować elektrycznie. Przy stosowaniu pamięci EEPROM odpada konieczność stosowania kłopotliwych i często drogich kasowników pamięci EPROM (z lampą ultrafioletową, pamięć można programować wielokrotnie, nawet 100 tysięcy razy. W różnych wersjach procesorów 8051 stosuje się różne, wymienione wcześniej typy pamięci programu. Tak więc mamy mikrokontrolery w wersji ROM, OTP, EPROM, wreszcie EEPROM oraz wersje pozbawione pamięci programu w ogóle, przystosowane do pracy z dołączoną z zewnątrz dowolną pamięcią programu. I tak w zależności od wbudowanej w układ mikrokontrolera 8051 pamięci programu, producenci ustalili w miarę jednolite i przejrzyste symbole, których znajomość przydaje się przy zakupie kostek. Zegar systemowy Do pracy potrzebny jest zewnętrzny obwód oscylatora. W praktyce obwód taki realizuje się dołączając zewnętrzny rezonator kwarcowy o częstotliwości z zakresu od mniej więcej 1MHz do 16MHz. W handlu spotyka się także wersje 8051 mogące pracować w szerszym zakresie: od pojedynczych Hz (wersje całkowicie statyczne CMOS) do nawet: MHz. w każdym przypadku producent konkretnego modelu procesora umieszcza na jego obudowie oprócz nazwy układu także symbol liczbowy określający maksymalną częstotliwość zewnętrznego sygnału taktującego (która w praktyce jest także równa dołączonemu rezonatorowi kwarcowemu). W przypadku wszystkich układów wykonanych w technologii MOS (CMOS, HMOS) wraz ze wzrostem częstotliwości pracy układu wzrasta wydzielana w nim moc, czyli wzrasta pobierany przez procesor prąd ze źródła zasilania. Praktyczny wniosek nasuwa się sam jeżeli mamy zastosować procesor w układzie przenośnym zasilanym np. z niewielkiej baterii, z pewnością nie użyjemy procesora 8051 w wersji 20MHz! Częstotliwość (nazwijmy ją jako Fxtal) uzyskiwana z rezonatora kwarcowego (dołączonego do pinów 18 i 19) jest we wnętrzu procesora kilkakrotnie dzielona. I tak w praktyce spotykamy się z podobnymi pojęciami jak: a. dwufazowy sygnał taktujący procesor (Fs) sygnał powstały z podzielenia przez 2 częstotliwości oscylatora (np. przy kwarcu = 12MHz, Fs = 6MHz). Sygnał ten używany jest bezpośrednio do taktowania układów wewnętrznych procesora i nie jest dostępny na żadnym z zewnętrznych jego wyprowadzeń. b. Sześć cykli sygnału Fs składa się na tzw. Cykl maszynowy procesora, czyli okres wykonywania elementarnej czynności przez naszą kostkę. Z prostych obliczeń wyniknie że, cykl maszynowy zajmuje: Fs x 6 = 2 x Fxtal x 6 = 12 cykli oscylatora, czyli dla np. Fxtal=12MHz będzie to 1MHz. Cykl maszynowy jest bardzo ważnym pojęciem, z jego częstotliwością (Fxtal/12) zachodzą podstawowe czynności procesora takie jak: pobieranie kodu rozkazów (czy to z wewnętrznej pamięci programu, czy z zewnętrznej) wykonywanie instrukcji programu pobieranie danych z zewnętrznej pamięci (jak i wewnętrznej) zwiększanie wartości wbudowanych liczników: T0, T1 także T2 dla 8052 próbkowanie wejść zewnętrznych przerwań: INT0 i INT1 wystawienie sygnału ALE pin 30 niezbędnego do zapisu młodszej części adresu multipleksowanej szyny adresowej portu P0. 59

60 Z częstotliwością tą taktowany jest także wbudowany port szeregowy w specjalnym trybie ustawionym przez użytkownika programowo. Cykl maszynowy dzieli się także na fazy (po 6 na każdy cykl),jednak ich opis i znaczenie w praktyce przy konstruowaniu większości urządzeń jest niepotrzebne. 60

61 Zegar mikroprocesorowy LED z alarmem Rysunek 1. Schemat elektryczny zegara 61

62 Sercem zegara jest mikrokontroler firmy Atmel AT89C2051. Jest to prosty mikrokontroler 8-bitowy bazujący na 8051 wyposażony w 2kB pamięci programu typu Flash i dwa uniwersalne porty I/O. W tej aplikacji mikrokontroler ten steruje prostymi urządzenimi wyjściowymi: czterema sterownikami wyświetlaczy 7-segmentowych, zespołem szeregowych rejestrów przesuwnych i generatorem sygnału akustycznego. Jedynymi urządzeniami wejciowymi są dwa przyciski zwierne podłączone do linii przerwań zewnętrznych. Schemat elektryczny zegara jest przed Mikrokontroler jest taktowany kwarcem 10MHz. Wartość tą można zmieniać, jednak trzeba również zmodyfikować wartości opóźnień czasomierza wewnętrznego mikrokontrolera. Wyjścia P1.0-P1.3 to linie danych sterowników wyświetlaczy 7-segmentowych typu 74HC4543. Linie P1.4-P1.7 sterują zatrzaskiwaniem wartości wejściowej poszczególnych driverów. Tak więc dane dla każdego wyświetlacza są wystawiane osobno i kolejno zatrzaskiwane. Wyświetlacze 7-segmentowe to typowe wyświetlacze LED ze wspólną anodą. Anody są podłączone do +5V przez zespół czterech diod 1N400X służące do obniżenia ich napięcia zasilania. Dwa dodatkowe LED'y służą do wyświetlania dwukropka pomiędzy godziną a minutą. Wyjście P3.7 wyzwala układ generatora sygnału akustycznego zbudowanego w oparciu o timer typu NE555 i mały głośnik sterowany tranzystorem. Układ ten znajduje zastosowanie w funkcji alarmu. Układ wyświetlania sekund składa się ze 120 diod LED umieszczonych na obwodzie tarczy zegara. Każda kolejna sekunda powoduje zapalenie dwóch kolejnych diod LED. Diody są sterowane przez układ ośmiu rejestrów przesuwnych typu 74HCT164 połączonych szeregowo w jeden duży rejestr 64-bitowy. Ostatnie cztery przerzutniki nie są wykorzystane i są obciążone zwykłymi rezystorami. Wyjście mikrokontrolera P3.0 to wejście danych tego rejestru, podczas gdy wyjście P3.1 to linia zegarowa. W każdej pełnej minucie następuje reset tego rejestru poprzez wpisanie do niego 64 jedynek (a zarazem zgaszenie diod LED). Wejścia mikrokontrolera to dwa przycisku zwierne umieszczone w zasilaczu. Są podłączone do linii przerwań zewnętrznych INT0 i INT1. Jeden z przycisków steruje przełączaniem aktualnie ustawianej zmiennej (minut aktualnego czasu, godzin aktualnego czasu, minut alarmu i godzin alarmu) podczas gdy drugi inkrementacją tej zmiennej. Zegar wymaga stabilizowanego zasilania +5V/1A. Dobrym pomysłem jest umieszczenie przycisków sterujących na zasilaczu. Wymaga to połączenia go czterema przewodami. Schemat prostego zasilacza jest przedstawiony na rysunku 2. Rysunek 2. Schemat elektryczny zasilacza Program sterujący jest napisany w assemblerze procesora Algorytm programu jest bardzo prosty i w zasadzie składa się z procedur obsługi przerwań przycisków INT0, INT1 oraz przerwania timera T0. Procedury obsługi INT0 i INT1 modyfikują odpowiednio wskazanie zegara, zaś procedura obsługi timera inkrementuje wskazanie sekund (ewentualnie minut i godzin) i sprawdza czy powinien być uruchomiony alarm. Pliki, linki: Program sterujący wersja źródłowa: zegar.asm 62

CYKL ROZKAZOWY = 1 lub 2(4) cykle maszynowe

CYKL ROZKAZOWY = 1 lub 2(4) cykle maszynowe MIKROKONTROLER RODZINY MCS 5 Cykl rozkazowy mikrokontrolera rodziny MCS 5 Mikroprocesory rodziny MCS 5 zawierają wewnętrzny generator sygnałów zegarowych ustalający czas trwania cyklu zegarowego Częstotliwość

Bardziej szczegółowo

A&Q PYTANIA I ODPOWIEDZI Z MIKROKONTROLERÓW

A&Q PYTANIA I ODPOWIEDZI Z MIKROKONTROLERÓW A&Q PYTANIA I ODPOWIEDZI Z MIKROKONTROLERÓW KŁ ZSP4 2012 Czym jest mikrokontroler? Mikrokontrolery są układami sekwencyjnymi, synchronicznymi, tzn. wszystkie operacje wykonywane przez układy procesora

Bardziej szczegółowo

MIKROKONTROLERY I MIKROPROCESORY

MIKROKONTROLERY I MIKROPROCESORY PLAN... work in progress 1. Mikrokontrolery i mikroprocesory - architektura systemów mikroprocesorów ( 8051, AVR, ARM) - pamięci - rejestry - tryby adresowania - repertuar instrukcji - urządzenia we/wy

Bardziej szczegółowo

Spis treœci. Co to jest mikrokontroler? Kody i liczby stosowane w systemach komputerowych. Podstawowe elementy logiczne

Spis treœci. Co to jest mikrokontroler? Kody i liczby stosowane w systemach komputerowych. Podstawowe elementy logiczne Spis treści 5 Spis treœci Co to jest mikrokontroler? Wprowadzenie... 11 Budowa systemu komputerowego... 12 Wejścia systemu komputerowego... 12 Wyjścia systemu komputerowego... 13 Jednostka centralna (CPU)...

Bardziej szczegółowo

Logiczny model komputera i działanie procesora. Część 1.

Logiczny model komputera i działanie procesora. Część 1. Logiczny model komputera i działanie procesora. Część 1. Klasyczny komputer o architekturze podanej przez von Neumana składa się z trzech podstawowych bloków: procesora pamięci operacyjnej urządzeń wejścia/wyjścia.

Bardziej szczegółowo

Rejestry procesora. Nazwa ilość bitów. AX 16 (accumulator) rejestr akumulatora. BX 16 (base) rejestr bazowy. CX 16 (count) rejestr licznika

Rejestry procesora. Nazwa ilość bitów. AX 16 (accumulator) rejestr akumulatora. BX 16 (base) rejestr bazowy. CX 16 (count) rejestr licznika Rejestry procesora Procesor podczas wykonywania instrukcji posługuje się w dużej części pamięcią RAM. Pobiera z niej kolejne instrukcje do wykonania i dane, jeżeli instrukcja operuje na jakiś zmiennych.

Bardziej szczegółowo

Wstęp...9. 1. Architektura... 13

Wstęp...9. 1. Architektura... 13 Spis treści 3 Wstęp...9 1. Architektura... 13 1.1. Schemat blokowy...14 1.2. Pamięć programu...15 1.3. Cykl maszynowy...16 1.4. Licznik rozkazów...17 1.5. Stos...18 1.6. Modyfikowanie i odtwarzanie zawartości

Bardziej szczegółowo

WPROWADZENIE Mikrosterownik mikrokontrolery

WPROWADZENIE Mikrosterownik mikrokontrolery WPROWADZENIE Mikrosterownik (cyfrowy) jest to moduł elektroniczny zawierający wszystkie środki niezbędne do realizacji wymaganych procedur sterowania przy pomocy metod komputerowych. Platformy budowy mikrosterowników:

Bardziej szczegółowo

Organizacja typowego mikroprocesora

Organizacja typowego mikroprocesora Organizacja typowego mikroprocesora 1 Architektura procesora 8086 2 Architektura współczesnego procesora 3 Schemat blokowy procesora AVR Mega o architekturze harwardzkiej Wszystkie mikroprocesory zawierają

Bardziej szczegółowo

MIKROPROCESORY architektura i programowanie

MIKROPROCESORY architektura i programowanie Systematyczny przegląd. (CISC) SFR umieszczane są w wewnętrznej pamięci danych (80H 0FFH). Adresowanie wyłącznie bezpośrednie. Rejestry o adresach podzielnych przez 8 są też dostępne bitowo. Adres n-tego

Bardziej szczegółowo

ARCHITEKTURA PROCESORA,

ARCHITEKTURA PROCESORA, ARCHITEKTURA PROCESORA, poza blokami funkcjonalnymi, to przede wszystkim: a. formaty rozkazów, b. lista rozkazów, c. rejestry dostępne programowo, d. sposoby adresowania pamięci, e. sposoby współpracy

Bardziej szczegółowo

3.2. Zegar/kalendarz z pamięcią statyczną RAM 256 x 8

3.2. Zegar/kalendarz z pamięcią statyczną RAM 256 x 8 3.2. Zegar/kalendarz z pamięcią statyczną RAM 256 x 8 Układ PCF 8583 jest pobierającą małą moc, 2048 bitową statyczną pamięcią CMOS RAM o organizacji 256 x 8 bitów. Adresy i dane są przesyłane szeregowo

Bardziej szczegółowo

architektura komputerów w 1 1

architektura komputerów w 1 1 8051 Port P2 Port P3 Transm. szeregowa Timery T0, T1 Układ przerwań Rejestr DPTR Licznik rozkazów Pamięć programu Port P0 Port P1 PSW ALU Rejestr B SFR akumulator 8051 STRUKTURA architektura komputerów

Bardziej szczegółowo

Temat: Pamięci. Programowalne struktury logiczne.

Temat: Pamięci. Programowalne struktury logiczne. Temat: Pamięci. Programowalne struktury logiczne. 1. Pamięci są układami służącymi do przechowywania informacji w postaci ciągu słów bitowych. Wykonuje się jako układy o bardzo dużym stopniu scalenia w

Bardziej szczegółowo

UTK Można stwierdzić, że wszystkie działania i operacje zachodzące w systemie są sterowane bądź inicjowane przez mikroprocesor.

UTK Można stwierdzić, że wszystkie działania i operacje zachodzące w systemie są sterowane bądź inicjowane przez mikroprocesor. Zadaniem centralnej jednostki przetwarzającej CPU (ang. Central Processing Unit), oprócz przetwarzania informacji jest sterowanie pracą pozostałych układów systemu. W skład CPU wchodzą mikroprocesor oraz

Bardziej szczegółowo

Architektura Systemów Komputerowych. Jednostka ALU Przestrzeń adresowa Tryby adresowania

Architektura Systemów Komputerowych. Jednostka ALU Przestrzeń adresowa Tryby adresowania Architektura Systemów Komputerowych Jednostka ALU Przestrzeń adresowa Tryby adresowania 1 Jednostka arytmetyczno- logiczna ALU ALU ang: Arythmetic Logic Unit Argument A Argument B A B Ci Bit przeniesienia

Bardziej szczegółowo

2. Architektura mikrokontrolerów PIC16F8x... 13

2. Architektura mikrokontrolerów PIC16F8x... 13 Spis treści 3 Spis treœci 1. Informacje wstępne... 9 2. Architektura mikrokontrolerów PIC16F8x... 13 2.1. Budowa wewnętrzna mikrokontrolerów PIC16F8x... 14 2.2. Napięcie zasilania... 17 2.3. Generator

Bardziej szczegółowo

Liczniki, rejestry lab. 08 Mikrokontrolery WSTĘP

Liczniki, rejestry lab. 08 Mikrokontrolery WSTĘP Liczniki, rejestry lab. 08 PODSTAWY TECHNIKI CYFROWEJ I MIKROPROCESOROWEJ EIP KATEDRA ENERGOELEKTRONIKI I AUTOMATYKI SYSTEMÓW PRZETWARZANIA ENERGII WWW.KEIASPE.AGH.EDU.PL AKADEMIA GÓRNICZO-HUTNICZA WWW.AGH.EDU.PL

Bardziej szczegółowo

Mikrokontrolery AVR techniczne aspekty programowania

Mikrokontrolery AVR techniczne aspekty programowania Andrzej Pawluczuk Mikrokontrolery AVR techniczne aspekty programowania Białystok, 2004 Mikrokontrolery rodziny AVR integrują w swojej strukturze między innymi nieulotną pamięć przeznaczoną na program (pamięć

Bardziej szczegółowo

Hardware mikrokontrolera X51

Hardware mikrokontrolera X51 Hardware mikrokontrolera X51 Ryszard J. Barczyński, 2016 Politechnika Gdańska, Wydział FTiMS, Katedra Fizyki Ciała Stałego Materiały dydaktyczne do użytku wewnętrznego Hardware mikrokontrolera X51 (zegar)

Bardziej szczegółowo

MOŻLIWOŚCI PROGRAMOWE MIKROPROCESORÓW

MOŻLIWOŚCI PROGRAMOWE MIKROPROCESORÓW MOŻLIWOŚCI PROGRAMOWE MIKROPROCESORÓW Projektowanie urządzeń cyfrowych przy użyciu układów TTL polegało na opracowaniu algorytmu i odpowiednim doborze i zestawieniu układów realizujących różnorodne funkcje

Bardziej szczegółowo

LEKCJA TEMAT: Zasada działania komputera.

LEKCJA TEMAT: Zasada działania komputera. LEKCJA TEMAT: Zasada działania komputera. 1. Ogólna budowa komputera Rys. Ogólna budowa komputera. 2. Komputer składa się z czterech głównych składników: procesor (jednostka centralna, CPU) steruje działaniem

Bardziej szczegółowo

Pamięci półprzewodnikowe w oparciu o książkę : Nowoczesne pamięci. Ptc 2013/2014 13.12.2013

Pamięci półprzewodnikowe w oparciu o książkę : Nowoczesne pamięci. Ptc 2013/2014 13.12.2013 Pamięci półprzewodnikowe w oparciu o książkę : Nowoczesne pamięci półprzewodnikowe, Betty Prince, WNT Ptc 2013/2014 13.12.2013 Pamięci statyczne i dynamiczne Pamięci statyczne SRAM przechowywanie informacji

Bardziej szczegółowo

1.2 Schemat blokowy oraz opis sygnałów wejściowych i wyjściowych

1.2 Schemat blokowy oraz opis sygnałów wejściowych i wyjściowych Dodatek A Wyświetlacz LCD. Przeznaczenie i ogólna charakterystyka Wyświetlacz ciekłokrystaliczny HY-62F4 zastosowany w ćwiczeniu jest wyświetlaczem matrycowym zawierającym moduł kontrolera i układ wykonawczy

Bardziej szczegółowo

Ćw. 7: Układy sekwencyjne

Ćw. 7: Układy sekwencyjne Ćw. 7: Układy sekwencyjne Wstęp Celem ćwiczenia jest zapoznanie się z sekwencyjnymi, cyfrowymi blokami funkcjonalnymi. W ćwiczeniu w oparciu o poznane przerzutniki zbudowane zostaną następujące układy

Bardziej szczegółowo

Przerzutnik ma pewną liczbę wejść i z reguły dwa wyjścia.

Przerzutnik ma pewną liczbę wejść i z reguły dwa wyjścia. Kilka informacji o przerzutnikach Jaki układ elektroniczny nazywa się przerzutnikiem? Przerzutnikiem bistabilnym jest nazywany układ elektroniczny, charakteryzujący się istnieniem dwóch stanów wyróżnionych

Bardziej szczegółowo

Technika Mikroprocesorowa

Technika Mikroprocesorowa Technika Mikroprocesorowa Dariusz Makowski Katedra Mikroelektroniki i Technik Informatycznych tel. 631 2648 dmakow@dmcs.pl http://neo.dmcs.p.lodz.pl/tm 1 System mikroprocesorowy? (1) Magistrala adresowa

Bardziej szczegółowo

Technika mikroprocesorowa I Wykład 4

Technika mikroprocesorowa I Wykład 4 Technika mikroprocesorowa I Wykład 4 Układ czasowo licznikowy 8253 INTEL [Źródło: https://www.vtubooks.com/free_downloads/8253_54-1.pdf] Wyprowadzenia układu [Źródło: https://www.vtubooks.com/free_downloads/8253_54-1.pdf]

Bardziej szczegółowo

PAMIĘCI. Część 1. Przygotował: Ryszard Kijanka

PAMIĘCI. Część 1. Przygotował: Ryszard Kijanka PAMIĘCI Część 1 Przygotował: Ryszard Kijanka WSTĘP Pamięci półprzewodnikowe są jednym z kluczowych elementów systemów cyfrowych. Służą do przechowywania informacji w postaci cyfrowej. Liczba informacji,

Bardziej szczegółowo

Technika mikroprocesorowa I Studia niestacjonarne rok II Wykład 2

Technika mikroprocesorowa I Studia niestacjonarne rok II Wykład 2 Technika mikroprocesorowa I Studia niestacjonarne rok II Wykład 2 Literatura: www.zilog.com Z80 Family, CPU User Manual Cykle magistrali w mikroprocesorze Z80 -odczyt kodu rozkazu, -odczyt-zapis pamięci,

Bardziej szczegółowo

MIKROPROCESORY architektura i programowanie

MIKROPROCESORY architektura i programowanie Struktura portów (CISC) Port to grupa (zwykle 8) linii wejścia/wyjścia mikrokontrolera o podobnych cechach i funkcjach Większość linii we/wy może pełnić dwie lub trzy rozmaite funkcje. Struktura portu

Bardziej szczegółowo

Programowanie w językach asemblera i C

Programowanie w językach asemblera i C Programowanie w językach asemblera i C Mariusz NOWAK Programowanie w językach asemblera i C (1) 1 Dodawanie dwóch liczb - program Napisać program, który zsumuje dwie liczby. Wynik dodawania należy wysłać

Bardziej szczegółowo

LABORATORIUM ELEKTRONIKI I TEORII OBWODÓW

LABORATORIUM ELEKTRONIKI I TEORII OBWODÓW POLITECHNIKA POZNAŃSKA FILIA W PILE LABORATORIUM ELEKTRONIKI I TEORII OBWODÓW numer ćwiczenia: data wykonania ćwiczenia: data oddania sprawozdania: OCENA: 6 21.11.2002 28.11.2002 tytuł ćwiczenia: wykonawcy:

Bardziej szczegółowo

WFiIS CEL ĆWICZENIA WSTĘP TEORETYCZNY

WFiIS CEL ĆWICZENIA WSTĘP TEORETYCZNY WFiIS LABORATORIUM Z ELEKTRONIKI Imię i nazwisko: 1. 2. TEMAT: ROK GRUPA ZESPÓŁ NR ĆWICZENIA Data wykonania: Data oddania: Zwrot do poprawy: Data oddania: Data zliczenia: OCENA CEL ĆWICZENIA Ćwiczenie

Bardziej szczegółowo

Zapoznanie się z podstawowymi strukturami liczników asynchronicznych szeregowych modulo N, zliczających w przód i w tył oraz zasadą ich działania.

Zapoznanie się z podstawowymi strukturami liczników asynchronicznych szeregowych modulo N, zliczających w przód i w tył oraz zasadą ich działania. Badanie liczników asynchronicznych - Ćwiczenie 4 1. el ćwiczenia Zapoznanie się z podstawowymi strukturami liczników asynchronicznych szeregowych modulo N, zliczających w przód i w tył oraz zasadą ich

Bardziej szczegółowo

Mikroprocesor Operacje wejścia / wyjścia

Mikroprocesor Operacje wejścia / wyjścia Definicja Mikroprocesor Operacje wejścia / wyjścia Opracował: Andrzej Nowak Bibliografia: Urządzenia techniki komputerowej, K. Wojtuszkiewicz Operacjami wejścia/wyjścia nazywamy całokształt działań potrzebnych

Bardziej szczegółowo

Przykładowe pytania DSP 1

Przykładowe pytania DSP 1 Przykładowe pytania SP Przykładowe pytania Systemy liczbowe. Przedstawić liczby; -, - w kodzie binarnym i hexadecymalnym uzupełnionym do dwóch (liczba 6 bitowa).. odać dwie liczby binarne w kodzie U +..

Bardziej szczegółowo

PRZERZUTNIKI: 1. Należą do grupy bloków sekwencyjnych, 2. podstawowe układy pamiętające

PRZERZUTNIKI: 1. Należą do grupy bloków sekwencyjnych, 2. podstawowe układy pamiętające PRZERZUTNIKI: 1. Należą do grupy bloków sekwencyjnych, 2. podstawowe układy pamiętające Zapamiętywanie wartości wybranych zmiennych binarnych, jak również sekwencji tych wartości odbywa się w układach

Bardziej szczegółowo

Mikrokontroler 80C51

Mikrokontroler 80C51 DSM-51 * STRONA 1 * Temat : Wiadomości podstawowe Układy cyfrowe to rodzaj układów elektronicznych, w których sygnały napięciowe przyjmują tylko określoną liczbę poziomów, którym przypisywane są wartości

Bardziej szczegółowo

Wydział Elektryczny. Katedra Automatyki i Elektroniki. Instrukcja. do ćwiczeń laboratoryjnych z przedmiotu: SYSTEMY CYFROWE 1.

Wydział Elektryczny. Katedra Automatyki i Elektroniki. Instrukcja. do ćwiczeń laboratoryjnych z przedmiotu: SYSTEMY CYFROWE 1. Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki Instrukcja do ćwiczeń laboratoryjnych z przedmiotu: SYSTEMY CYFROWE 1 PAMIĘCI SZEREGOWE EEPROM Ćwiczenie 3 Opracował: dr inŝ.

Bardziej szczegółowo

Układy sekwencyjne. Podstawowe informacje o układach cyfrowych i przerzutnikach (rodzaje, sposoby wyzwalania).

Układy sekwencyjne. Podstawowe informacje o układach cyfrowych i przerzutnikach (rodzaje, sposoby wyzwalania). Ćw. 10 Układy sekwencyjne 1. Cel ćwiczenia Celem ćwiczenia jest zapoznanie się z sekwencyjnymi, cyfrowymi blokami funkcjonalnymi. W ćwiczeniu w oparciu o poznane przerzutniki zbudowane zostaną układy rejestrów

Bardziej szczegółowo

dokument DOK 02-05-12 wersja 1.0 www.arskam.com

dokument DOK 02-05-12 wersja 1.0 www.arskam.com ARS3-RA v.1.0 mikro kod sterownika 8 Linii I/O ze zdalną transmisją kanałem radiowym lub poprzez port UART. Kod przeznaczony dla sprzętu opartego o projekt referencyjny DOK 01-05-12. Opis programowania

Bardziej szczegółowo

Układ sterowania, magistrale i organizacja pamięci. Dariusz Chaberski

Układ sterowania, magistrale i organizacja pamięci. Dariusz Chaberski Układ sterowania, magistrale i organizacja pamięci Dariusz Chaberski Jednostka centralna szyna sygnałow sterowania sygnały sterujące układ sterowania sygnały stanu wewnętrzna szyna danych układ wykonawczy

Bardziej szczegółowo

Metody obsługi zdarzeń

Metody obsługi zdarzeń SWB - Przerwania, polling, timery - wykład 10 asz 1 Metody obsługi zdarzeń Przerwanie (ang. Interrupt) - zmiana sterowania, niezależnie od aktualnie wykonywanego programu, spowodowana pojawieniem się sygnału

Bardziej szczegółowo

12. Wprowadzenie Sygnały techniki cyfrowej Systemy liczbowe. Matematyka: Elektronika:

12. Wprowadzenie Sygnały techniki cyfrowej Systemy liczbowe. Matematyka: Elektronika: PRZYPOMNIJ SOBIE! Matematyka: Dodawanie i odejmowanie "pod kreską". Elektronika: Sygnały cyfrowe. Zasadę pracy tranzystorów bipolarnych i unipolarnych. 12. Wprowadzenie 12.1. Sygnały techniki cyfrowej

Bardziej szczegółowo

LICZNIKI PODZIAŁ I PARAMETRY

LICZNIKI PODZIAŁ I PARAMETRY LICZNIKI PODZIAŁ I PARAMETRY Licznik jest układem służącym do zliczania impulsów zerojedynkowych oraz zapamiętywania ich liczby. Zależnie od liczby n przerzutników wchodzących w skład licznika pojemność

Bardziej szczegółowo

RODZAJE PAMIĘCI RAM. Cz. 1

RODZAJE PAMIĘCI RAM. Cz. 1 RODZAJE PAMIĘCI RAM Cz. 1 1 1) PAMIĘĆ DIP DIP (ang. Dual In-line Package), czasami nazywany DIL - w elektronice rodzaj obudowy elementów elektronicznych, głównie układów scalonych o małej i średniej skali

Bardziej szczegółowo

Wprowadzenie do architektury komputerów systemy liczbowe, operacje arytmetyczne i logiczne

Wprowadzenie do architektury komputerów systemy liczbowe, operacje arytmetyczne i logiczne Wprowadzenie do architektury komputerów systemy liczbowe, operacje arytmetyczne i logiczne 1. Bit Pozycja rejestru lub komórki pamięci służąca do przedstawiania (pamiętania) cyfry w systemie (liczbowym)

Bardziej szczegółowo

Zagadnienia zaliczeniowe z przedmiotu Układy i systemy mikroprocesorowe elektronika i telekomunikacja, stacjonarne zawodowe

Zagadnienia zaliczeniowe z przedmiotu Układy i systemy mikroprocesorowe elektronika i telekomunikacja, stacjonarne zawodowe Zagadnienia zaliczeniowe z przedmiotu Układy i systemy mikroprocesorowe elektronika i telekomunikacja, stacjonarne zawodowe System mikroprocesorowy 1. Przedstaw schemat blokowy systemu mikroprocesorowego.

Bardziej szczegółowo

Architektura komputera. Cezary Bolek. Uniwersytet Łódzki. Wydział Zarządzania. Katedra Informatyki. System komputerowy

Architektura komputera. Cezary Bolek. Uniwersytet Łódzki. Wydział Zarządzania. Katedra Informatyki. System komputerowy Wstęp do informatyki Architektura komputera Cezary Bolek cbolek@ki.uni.lodz.pl Uniwersytet Łódzki Wydział Zarządzania Katedra Informatyki System komputerowy systemowa (System Bus) Pamięć operacyjna ROM,

Bardziej szczegółowo

Dodatek B. Zasady komunikacji z otoczeniem w typowych systemach komputerowych

Dodatek B. Zasady komunikacji z otoczeniem w typowych systemach komputerowych Dodatek B. Zasady komunikacji z otoczeniem w typowych systemach komputerowych B.1. Dostęp do urządzeń komunikacyjnych Sterowniki urządzeń zewnętrznych widziane są przez procesor jako zestawy rejestrów

Bardziej szczegółowo

UKŁADY CYFROWE. Układ kombinacyjny

UKŁADY CYFROWE. Układ kombinacyjny UKŁADY CYFROWE Układ kombinacyjny Układów kombinacyjnych są bramki. Jedną z cech układów kombinacyjnych jest możliwość przedstawienia ich działania (opisu) w postaci tabeli prawdy. Tabela prawdy podaje

Bardziej szczegółowo

KOMUNIKACJA Z OTOCZENIEM MIKROKONTROLERA

KOMUNIKACJA Z OTOCZENIEM MIKROKONTROLERA Mikrokontrolery AVR KOMUNIKACJA Z OTOCZENIEM MIKROKONTROLERA Wyprowadzenia Każdy z mikrokontrolerów posiada pewną liczbę wyprowadzeń cyfrowych które służą do wprowadzania i odbierania informacji z mikrokontrolera.

Bardziej szczegółowo

Instrukcja do ćwiczenia : Matryca komutacyjna

Instrukcja do ćwiczenia : Matryca komutacyjna Instrukcja do ćwiczenia : Matryca komutacyjna 1. Wstęp Każdy kanał w systemach ze zwielokrotnieniem czasowym jest jednocześnie określany przez swoją współrzędną czasową T i współrzędną przestrzenną S.

Bardziej szczegółowo

Projekt z przedmiotu Systemy akwizycji i przesyłania informacji. Temat pracy: Licznik binarny zliczający do 10.

Projekt z przedmiotu Systemy akwizycji i przesyłania informacji. Temat pracy: Licznik binarny zliczający do 10. Projekt z przedmiotu Systemy akwizycji i przesyłania informacji Temat pracy: Licznik binarny zliczający do 10. Andrzej Kuś Aleksander Matusz Prowadzący: dr inż. Adam Stadler Układy cyfrowe przetwarzają

Bardziej szczegółowo

ZL4PIC. Uniwersalny zestaw uruchomieniowy dla mikrokontrolerów PIC

ZL4PIC. Uniwersalny zestaw uruchomieniowy dla mikrokontrolerów PIC ZL4PIC uniwersalny zestaw uruchomieniowy dla mikrokontrolerów PIC (v.1.0) ZL4PIC Uniwersalny zestaw uruchomieniowy dla mikrokontrolerów PIC 1 Zestaw jest przeznaczony dla elektroników zajmujących się aplikacjami

Bardziej szczegółowo

Systemy wbudowane. Wprowadzenie. Wprowadzenie. Mikrokontroler 8051 Budowa

Systemy wbudowane. Wprowadzenie. Wprowadzenie. Mikrokontroler 8051 Budowa Systemy wbudowane Mikrokontroler 8051 Budowa dr inż. Maciej Piechowiak Wprowadzenie rdzeń CPU z jednostką artymetyczno-logiczną (ALU) do obliczeń na liczbach 8-bitowych, uniwersalne dwukierunkowe porty

Bardziej szczegółowo

SML3 październik

SML3 październik SML3 październik 2005 16 06x_EIA232_4 Opis ogólny Moduł zawiera transceiver EIA232 typu MAX242, MAX232 lub podobny, umożliwiający użycie linii RxD, TxD, RTS i CTS interfejsu EIA232 poprzez złącze typu

Bardziej szczegółowo

Podział układów cyfrowych. rkijanka

Podział układów cyfrowych. rkijanka Podział układów cyfrowych rkijanka W zależności od przyjętego kryterium możemy wyróżnić kilka sposobów podziału układów cyfrowych. Poniżej podam dwa z nich związane ze sposobem funkcjonowania układów cyfrowych

Bardziej szczegółowo

Systemy mikroprocesorowe. Literatura podręcznikowa. Przedmioty związane. Przykłady systemów wbudowanych. Pojęcie systemu wbudowanego embedded system

Systemy mikroprocesorowe. Literatura podręcznikowa. Przedmioty związane. Przykłady systemów wbudowanych. Pojęcie systemu wbudowanego embedded system Systemy mikroprocesorowe dr inŝ. Stefan Brock pok. 627, hala 22B/3 (PP) Stefan.Brock@put.poznan.pl Stefan.Brock@gmail.com rozliczenie dwa kolokwia w trakcie wykładu dr inŝ. Stefan Brock 2008/2009 1 Literatura

Bardziej szczegółowo

Pamięci półprzewodnikowe

Pamięci półprzewodnikowe Pamięci półprzewodnikowe na podstawie książki: Nowoczesne pamięci półprzewodnikowe, Betty Prince, WNT Ptc 2014/2015 15.1.2015 Półprzewodnikowe pamięci statyczne Pamięci statyczne - SRAM przechowywanie

Bardziej szczegółowo

ĆWICZENIE 7. Wprowadzenie do funkcji specjalnych sterownika LOGO!

ĆWICZENIE 7. Wprowadzenie do funkcji specjalnych sterownika LOGO! ćwiczenie nr 7 str.1/1 ĆWICZENIE 7 Wprowadzenie do funkcji specjalnych sterownika LOGO! 1. CEL ĆWICZENIA: zapoznanie się z zaawansowanymi możliwościami mikroprocesorowych sterowników programowalnych na

Bardziej szczegółowo

Wykład II. Pamięci półprzewodnikowe. Studia Podyplomowe INFORMATYKA Architektura komputerów

Wykład II. Pamięci półprzewodnikowe. Studia Podyplomowe INFORMATYKA Architektura komputerów Studia Podyplomowe INFORMATYKA Architektura komputerów Wykład II Pamięci półprzewodnikowe 1, Pamięci półprzewodnikowe Pamięciami półprzewodnikowymi nazywamy cyfrowe układy scalone przeznaczone do przechowywania

Bardziej szczegółowo

Architektura komputerów

Architektura komputerów Architektura komputerów Tydzień 9 Pamięć operacyjna Właściwości pamięci Położenie Pojemność Jednostka transferu Sposób dostępu Wydajność Rodzaj fizyczny Własności fizyczne Organizacja Położenie pamięci

Bardziej szczegółowo

Opis procedur asemblera AVR

Opis procedur asemblera AVR Piotr Kalus PWSZ Racibórz 10.05.2008 r. Opis procedur asemblera AVR init_lcd Plik: lcd4pro.hvr Procedura inicjuje pracę alfanumerycznego wyświetlacza LCD za sterownikiem HD44780. Wyświetlacz działa w trybie

Bardziej szczegółowo

Opis funkcjonalny i architektura. Modu³ sterownika mikroprocesorowego KM535

Opis funkcjonalny i architektura. Modu³ sterownika mikroprocesorowego KM535 Opis funkcjonalny i architektura Modu³ sterownika mikroprocesorowego KM535 Modu³ KM535 jest uniwersalnym systemem mikroprocesorowym do pracy we wszelkiego rodzaju systemach steruj¹cych. Zastosowanie modu³u

Bardziej szczegółowo

Przerwania, polling, timery - wykład 9

Przerwania, polling, timery - wykład 9 SWB - Przerwania, polling, timery - wykład 9 asz 1 Przerwania, polling, timery - wykład 9 Adam Szmigielski aszmigie@pjwstk.edu.pl SWB - Przerwania, polling, timery - wykład 9 asz 2 Metody obsługi zdarzeń

Bardziej szczegółowo

Techniki mikroprocesorowe i systemy wbudowane

Techniki mikroprocesorowe i systemy wbudowane Techniki mikroprocesorowe i systemy wbudowane Wykład 1 Procesory rodziny AVR ATmega. Wstęp Wojciech Kordecki wojciech.kordecki@pwsz-legnica.eu Państwowa Wyższa Szkoła Zawodowa im. Witelona w Legnicy Wydział

Bardziej szczegółowo

Wstęp do informatyki. System komputerowy. Magistrala systemowa. Architektura komputera. Cezary Bolek

Wstęp do informatyki. System komputerowy. Magistrala systemowa. Architektura komputera. Cezary Bolek Wstęp do informatyki Architektura komputera Cezary Bolek cbolek@ki.uni.lodz.pl Uniwersytet Łódzki Wydział Zarządzania Katedra Informatyki System komputerowy systemowa (System Bus) Pamięć operacyjna ROM,

Bardziej szczegółowo

2. PORTY WEJŚCIA/WYJŚCIA (I/O)

2. PORTY WEJŚCIA/WYJŚCIA (I/O) 2. PORTY WEJŚCIA/WYJŚCIA (I/O) 2.1 WPROWADZENIE Porty I/O mogą pracować w kilku trybach: - przesyłanie cyfrowych danych wejściowych i wyjściowych a także dla wybrane wyprowadzenia: - generacja przerwania

Bardziej szczegółowo

Magistrala systemowa (System Bus)

Magistrala systemowa (System Bus) Cezary Bolek cbolek@ki.uni.lodz.pl Uniwersytet Łódzki Wydział Zarządzania Katedra Informatyki systemowa (System Bus) Pamięć operacyjna ROM, RAM Jednostka centralna Układy we/wy In/Out Wstęp do Informatyki

Bardziej szczegółowo

Ćwiczenie 2. Siedmiosegmentowy wyświetlacz LED

Ćwiczenie 2. Siedmiosegmentowy wyświetlacz LED Ćwiczenie 2 Siedmiosegmentowy wyświetlacz LED 2-1. Cel ćwiczenia Celem ćwiczenia jest zapoznanie się studentów ze sposobem obsługi wielopozycyjnego 7-segmentowego wyświetlacza LED multipleksowanego programowo

Bardziej szczegółowo

Systemy wbudowane. Uniwersytet Łódzki Wydział Fizyki i Informatyki Stosowanej. Witold Kozłowski

Systemy wbudowane. Uniwersytet Łódzki Wydział Fizyki i Informatyki Stosowanej. Witold Kozłowski Uniwersytet Łódzki Wydział Fizyki i Informatyki Stosowanej Systemy wbudowane Witold Kozłowski Zakład Fizyki i Technologii Struktur Nanometrowych 9-236 Łódź, Pomorska 49/53 https://std2.phys.uni.lodz.pl/mikroprocesory/

Bardziej szczegółowo

Architektura komputerów

Architektura komputerów Architektura komputerów Wykład 3 Jan Kazimirski 1 Podstawowe elementy komputera. Procesor (CPU) 2 Plan wykładu Podstawowe komponenty komputera Procesor CPU Cykl rozkazowy Typy instrukcji Stos Tryby adresowania

Bardziej szczegółowo

Technika mikroprocesorowa I Wykład 2

Technika mikroprocesorowa I Wykład 2 Technika mikroprocesorowa I Wykład 2 Literatura: www.zilog.com Z80 Family, CPU User Manual Cykle magistrali w mikroprocesorze Z80 -odczyt kodu rozkazu, -odczyt-zapis pamięci, -odczyt-zapis urządzenia we-wy,

Bardziej szczegółowo

Magistrala. Magistrala (ang. Bus) służy do przekazywania danych, adresów czy instrukcji sterujących w różne miejsca systemu komputerowego.

Magistrala. Magistrala (ang. Bus) służy do przekazywania danych, adresów czy instrukcji sterujących w różne miejsca systemu komputerowego. Plan wykładu Pojęcie magistrali i jej struktura Architektura pamięciowo-centryczna Architektura szynowa Architektury wieloszynowe Współczesne architektury z połączeniami punkt-punkt Magistrala Magistrala

Bardziej szczegółowo

UKŁAD SCALONY. Cyfrowe układy można podzielić ze względu na różne kryteria, na przykład sposób przetwarzania informacji, technologię wykonania.

UKŁAD SCALONY. Cyfrowe układy można podzielić ze względu na różne kryteria, na przykład sposób przetwarzania informacji, technologię wykonania. UKŁDAY CYFROWE Układy cyfrowe są w praktyce realizowane różnymi technikami. W prostych urządzeniach automatyki powszechnie stosowane są układy elektryczne, wykorzystujące przekaźniki jako podstawowe elementy

Bardziej szczegółowo

Struktura i działanie jednostki centralnej

Struktura i działanie jednostki centralnej Struktura i działanie jednostki centralnej ALU Jednostka sterująca Rejestry Zadania procesora: Pobieranie rozkazów; Interpretowanie rozkazów; Pobieranie danych Przetwarzanie danych Zapisywanie danych magistrala

Bardziej szczegółowo

Wykład Mikroprocesory i kontrolery

Wykład Mikroprocesory i kontrolery Wykład Mikroprocesory i kontrolery Cele wykładu: Poznanie podstaw budowy, zasad działania mikroprocesorów i układów z nimi współpracujących. Podstawowa wiedza potrzebna do dalszego kształcenia się w technice

Bardziej szczegółowo

Lista rozkazów mikrokontrolera 8051

Lista rozkazów mikrokontrolera 8051 Lista rozkazów mikrokontrolera 8051 Spis treści: Architektura mikrokontrolera Rozkazy Architektura mikrokontrolera Mikrokontroler 8051 posiada trzy typy pamięci: układ zawiera pamięć wewnętrzną (On-Chip

Bardziej szczegółowo

Technika mikroprocesorowa. W. Daca, Politechnika Szczecińska, Wydział Elektryczny, 2007/08

Technika mikroprocesorowa. W. Daca, Politechnika Szczecińska, Wydział Elektryczny, 2007/08 Pamięci Układy pamięci kontaktują się z otoczeniem poprzez szynę danych, szynę owa i szynę sterującą. Szerokość szyny danych określa liczbę bitów zapamiętywanych do pamięci lub czytanych z pamięci w trakcie

Bardziej szczegółowo

Porty wejścia/wyjścia w układach mikroprocesorowych i w mikrokontrolerach

Porty wejścia/wyjścia w układach mikroprocesorowych i w mikrokontrolerach Porty wejścia/wyjścia w układach mikroprocesorowych i w mikrokontrolerach Semestr zimowy 2012/2013, E-3, WIEiK-PK 1 Porty wejścia-wyjścia Input/Output ports Podstawowy układ peryferyjny port wejścia-wyjścia

Bardziej szczegółowo

Pośredniczy we współpracy pomiędzy procesorem a urządzeniem we/wy. W szczególności do jego zadań należy:

Pośredniczy we współpracy pomiędzy procesorem a urządzeniem we/wy. W szczególności do jego zadań należy: Współpraca mikroprocesora z urządzeniami zewnętrznymi Urządzenia wejścia-wyjścia, urządzenia których zadaniem jest komunikacja komputera z otoczeniem (zwykle bezpośrednio z użytkownikiem). Do najczęściej

Bardziej szczegółowo

Opis mikrokontrolera AT89C2051

Opis mikrokontrolera AT89C2051 Opis mikrokontrolera AT89C2051 Cechy mikrokontrolera AT89C2051: kompatybilny z układami rodziny MCS-51, 2kB wewnętrznej pamięci typu Flash-EPROM, zegar: 0Hz do 24MHz, 8-bitowa jednostka centralna, 128B

Bardziej szczegółowo

Pamięci półprzewodnikowe na podstawie książki: Nowoczesne pamięci

Pamięci półprzewodnikowe na podstawie książki: Nowoczesne pamięci Pamięci półprzewodnikowe na podstawie książki: Nowoczesne pamięci półprzewodnikowe, Betty Prince, WNT 16.12.2017 Półprzewodnikowe pamięci statyczne Pamięci statyczne - SRAM przechowywanie informacji w

Bardziej szczegółowo

petla:... ; etykieta określa adres w pamięci kodu (docelowe miejsce skoku) DJNZ R7, petla

petla:... ; etykieta określa adres w pamięci kodu (docelowe miejsce skoku) DJNZ R7, petla Asembler A51 1. Symbole Nazwy symboliczne Symbol jest nazwą, która może być użyta do reprezentowania wartości stałej numerycznej, wyrażenia, ciągu znaków (tekstu), adresu lub nazwy rejestru. Nazwy symboliczne

Bardziej szczegółowo

organizacja procesora 8086

organizacja procesora 8086 Systemy komputerowe Procesor 8086 - tendencji w organizacji procesora organizacja procesora 8086 " # $ " % strali " & ' ' ' ( )" % *"towego + ", -" danych. Magistrala adresowa jest 20.bitowa, co pozwala

Bardziej szczegółowo

Tranzystor JFET i MOSFET zas. działania

Tranzystor JFET i MOSFET zas. działania Tranzystor JFET i MOSFET zas. działania brak kanału v GS =v t (cutoff ) kanał otwarty brak kanału kanał otwarty kanał zamknięty w.2, p. kanał zamknięty Co było na ostatnim wykładzie? Układy cyfrowe Najczęściej

Bardziej szczegółowo

Wyniki (prawie)końcowe - Elektroniczne warcaby

Wyniki (prawie)końcowe - Elektroniczne warcaby Wyniki (prawie)końcowe - Elektroniczne warcaby Zbigniew Duszeńczuk 14 czerwca 2008 Spis treści 1 Stan realizacji projektu na dzień 14 czerwca 2008 2 2 Najważniejsze cechy projektu 2 2.1 Użyte elementy..............................

Bardziej szczegółowo

Kod produktu: MP01105

Kod produktu: MP01105 MODUŁ INTERFEJSU KONTROLNO-POMIAROWEGO DLA MODUŁÓW Urządzenie stanowi bardzo łatwy do zastosowania gotowy interfejs kontrolno-pomiarowy do podłączenia modułów takich jak czujniki temperatury, moduły przekaźnikowe,

Bardziej szczegółowo

Pamięć wirtualna. Przygotował: Ryszard Kijaka. Wykład 4

Pamięć wirtualna. Przygotował: Ryszard Kijaka. Wykład 4 Pamięć wirtualna Przygotował: Ryszard Kijaka Wykład 4 Wstęp główny podział to: PM- do pamięci masowych należą wszelkiego rodzaju pamięci na nośnikach magnetycznych, takie jak dyski twarde i elastyczne,

Bardziej szczegółowo

43 Pamięci półprzewodnikowe w technice mikroprocesorowej - rodzaje, charakterystyka, zastosowania

43 Pamięci półprzewodnikowe w technice mikroprocesorowej - rodzaje, charakterystyka, zastosowania 43 Pamięci półprzewodnikowe w technice mikroprocesorowej - rodzaje, charakterystyka, zastosowania Typy pamięci Ulotność, dynamiczna RAM, statyczna ROM, Miejsce w konstrukcji komputera, pamięć robocza RAM,

Bardziej szczegółowo

Technika Mikroprocesorowa Laboratorium 5 Obsługa klawiatury

Technika Mikroprocesorowa Laboratorium 5 Obsługa klawiatury Technika Mikroprocesorowa Laboratorium 5 Obsługa klawiatury Cel ćwiczenia: Głównym celem ćwiczenia jest nauczenie się obsługi klawiatury. Klawiatura jest jednym z urządzeń wejściowych i prawie zawsze występuje

Bardziej szczegółowo

STM32Butterfly2. Zestaw uruchomieniowy dla mikrokontrolerów STM32F107

STM32Butterfly2. Zestaw uruchomieniowy dla mikrokontrolerów STM32F107 Zestaw uruchomieniowy dla mikrokontrolerów STM32F107 STM32Butterfly2 Zestaw STM32Butterfly2 jest platformą sprzętową pozwalającą poznać i przetestować możliwości mikrokontrolerów z rodziny STM32 Connectivity

Bardziej szczegółowo

Ćwiczenie 5 Zegar czasu rzeczywistego na mikrokontrolerze AT90S8515

Ćwiczenie 5 Zegar czasu rzeczywistego na mikrokontrolerze AT90S8515 Laboratorium Techniki Mikroprocesorowej Informatyka studia dzienne Ćwiczenie 5 Zegar czasu rzeczywistego na mikrokontrolerze AT90S8515 Cel ćwiczenia Celem ćwiczenia jest poznanie możliwości nowoczesnych

Bardziej szczegółowo

Statyczne badanie przerzutników - ćwiczenie 3

Statyczne badanie przerzutników - ćwiczenie 3 Statyczne badanie przerzutników - ćwiczenie 3. Cel ćwiczenia Zapoznanie się z podstawowymi strukturami przerzutników w wersji TTL realizowanymi przy wykorzystaniu bramek logicznych NAND oraz NO. 2. Wykaz

Bardziej szczegółowo

Budowa systemów komputerowych

Budowa systemów komputerowych Budowa systemów komputerowych Krzysztof Patan Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski k.patan@issi.uz.zgora.pl Współczesny system komputerowy System komputerowy składa

Bardziej szczegółowo

Zaliczenie Termin zaliczenia: Sala IE 415 Termin poprawkowy: > (informacja na stronie:

Zaliczenie Termin zaliczenia: Sala IE 415 Termin poprawkowy: > (informacja na stronie: Zaliczenie Termin zaliczenia: 14.06.2007 Sala IE 415 Termin poprawkowy: >18.06.2007 (informacja na stronie: http://neo.dmcs.p.lodz.pl/tm/index.html) 1 Współpraca procesora z urządzeniami peryferyjnymi

Bardziej szczegółowo

Mikrokontroler ATmega32. System przerwań Porty wejścia-wyjścia Układy czasowo-licznikowe

Mikrokontroler ATmega32. System przerwań Porty wejścia-wyjścia Układy czasowo-licznikowe Mikrokontroler ATmega32 System przerwań Porty wejścia-wyjścia Układy czasowo-licznikowe 1 Przerwanie Przerwanie jest inicjowane przez urządzenie zewnętrzne względem mikroprocesora, zgłaszające potrzebę

Bardziej szczegółowo