You are on page 1of 133

Te to potr afisz potrafisz

Wkilku poprzednich numerach EdW miae okazj dowiedzie si wielu cie kawych informacji na temat ukadw mikroprocesorowych, czyli wskrcie mikroprocesorw. Wiesz ju e te, do zoone wbudowie, elementy elek troniczne stosowane s powszechnie wkomputerach klasy PC. Wnie tak od legej przeszoci wielu uytkownikw sdziwego dzi Spektrusia, Commodora czy Atari czsto nie zdawao sobie spra wy, e jest posiadaczem mniej czy bar dziej skomplikowanego ukadu mikropro cesorowego. Jednak mikroprocesory nie zostay wynalezione jedynie po to, aby zadowala coraz bardziej wymagajcego uytkownika, dnego maszyn coraz szybciej obrabiajcych dane, chccego mie dostp do multimedialnych gier zaj mujcych niebotyczne iloci miejsca na dysku twardym komputera domowego. Od samego pocztku inteligentnych ukadw cyfrowych na rynku elektronicz nym istniaa grupa do prostych, na pierwszy rzut oka, mikroprocesorw, ktrych ewolucja nie potraktowaa tak ostro, jak to miao miejsce wwypadku rodziny 8086. Jeeli nie wiesz, co kryje si pod t nazw, przypomn ci, e uka dy 8086 to prawdziwi pradziadowie procesorw Pentium obecnie masowo stosowanych wkomputerach PC. Wspomniane ukady, bdce niejako oddzieln gazi wrodzinie ukadw cyfrowych wielkiej skali integracji (po dobnie jak mapy wteorii Darwina), przetrway wniezmiennej postaci od kil kunastu lat. Co mogo by powodem te go stanu rzeczy? Ot dziki architektu rze, czyli budowie wewntrznej tych ukadw, okazao si moliwe zastoso wanie ich nie tylko wspecjalizowanym sprzcie komputerowym. Gwnym ryn kiem zbytu okazali si producenci rne go rodzaju sprztu gospodarstwa domo wego, od ekspresw do kawy poczw szy, poprzez sprzt radiowotelewizyjny, AGD, na motoryzacji skoczywszy. Przy okazji lektury artykuw wEdW na temat mikroprocesora dowiedziae si, e sam mikroprocesor to nie wszys tko. Nasz na pozr inteligentny ukad cyf rowy bez doczenia kilku dodatkowych elementw zewntrznych: zegara, pa mici, ukadw wejcia/wyjcia (I/O) po trafi niewiele. Iwtedy kto wpad na pomys umieszczenia samego mikroprocesora zwymienionymi ukadami peryferyjnymi zjednym ukadzie scalonym. Tak po wsta pierwszy mikrokontroler awa ciwie mikrokomputer jednoukadowy. Sowo mikrokomputer nie jest by najmniej na wyrost, bowiem stworzony scalak by wistocie kompletnym kompu terem tylko e wmaym formacie. Wwntrzu posiada jakby rdze, ktry

Mikrokontrolery? To takie proste...

potrafi przetwarza komendy wydawa ne przez programist; pami wktrej mg przechowywa wyniki oblicze oraz ukady do komunikacji ze wiatem zewntrznym czyli tzw. porty .Tak fun kcjonalna budowa oraz, co miao nie ma e znaczenie,niska cena mikrokontrole ra, utorowaa mu drog do zastosowa praktycznie wszdzie. Rysunek 1 1obrazuje rnic midzy mikroprocesorem a mikrokompute rem (mikrokontrolerem, jak kto woli).

Wida, e wszystkie urzdzenia pery feryjne znajdujce si na zewntrz mikroprocesora, wprzypadku mikro komputera zostay umieszczone wjed nym ukadzie scalonym. Iwtym tkwi potga naszych prostych mikrokompute rw. Wnaszych dalszych rozwaaniach, pomimo e mowa bdzie omikrokompu terach jednoukadowych ,bdziemy za miennie uywa okrele mikrokontro ler lub nawet mikroprocesor. Zapa

Rys.1. Mikroprocesor do pracy potrzebuje wielu dodatkowych ukadw peryferyjnych, a typowy "mikrokontroler jednoukadowy" ma je wbudowane w struktur.

ELEKTRONIKA DLA WSZYSTKICH 4/97

43

Te to potr afisz potrafisz


lonych czynnoci wzbudowanym przez ciebie ukadzie. Bdziesz mg zrobi sobie swj wasny MC1206, lecz np. z25 alarmami, ze sterowaniem 4przekanikami, stope rem.Wprzypywie nudy wykorzystasz ten sam ukad scalony mikrokontroler izbudujesz zpomoc kilku dodatkowych elementw dyskretnych miernik czs totliwoci lub licznik obrotw silnika do twego samochodu. Wreszcie dajc upust narastajcej grze pomysw wy korzystasz mikrokontroler do budowy przemylnego systemu alarmowego ze zdalnym sterowaniem wszystkich funk cji wtwoim mieszkaniu: od gaszenia wiata poczwszy, na sygnalizacji prze cieku wody lub gazu skoczywszy. Za trudne? Nic podobnego, znam to zautopsji. Wczasach szkoy redniej (la ta 80), nie miaem zielonego pojcia omikroprocesorach, nie mwic otym, e kupienie odpowiedniej kostki byo nie tylko lada trudnoci ale i... gupot ze wzgldu na kompletny brak jakiejkolwiek literatury na temat projektowania uka dw zwykorzystaniem mikroproceso rw. Moj pasj bya technika cyfrowa czyli najczciej sklecanie zwielu kostek TTL czy CMOS jakiego sensownie dzia ajcego ukadu, ktry czsto po du szym lub krtszym okresie czasu odcho dzi do lamusa, czyli krtko mwic ko czy wkartonie zinnymi elektronicznymi mieciami, czekajc, e moe ktra zkostek przyda si wprzyszoci. Iwtedy pojawi si ON mikrokompu ter jednoukadowy. Oczarowa mnie bar dziej ni poczciwy PC XT, ze wzgldu na swoj prostot imoliwo wielu zasto sowa. Tak zamieniem pytk drukowan ze gara owymiarach 20x30 cm zkilkuna stoma ukadami scalonymi (cao pobie raa ponad 0,5A prdu) na zgrabny ukad mieszczcy si wniewielkiej iestetycz nej obudowie wielkoci duego pudeka po zapakach. Rodzina ija byli dumni iza dowoleni zurzdzenia, ktre funkcjonal noci azarazem wielkoci wywietla czy konkurowao ztymi oferowanymi wwczesnych czasach na rynku. Apotem sprawy potoczyy si szy bko, po kolei na warsztat poszed mj pierwszy amplituner zRADMORu, potem wymieniem wntrznoci wzegarze akwariowym, take nieod wracalnej modyfikacji ulega moja, ztrudem kupiona, szuflada zDIO RY. Iwszystko spisuje si do dzi dzie znakomicie! Jeeli wtym momencie, drogi Czytel niku, pomylisz: No tak, tylko mikropro cesor, aco zrobi zszuflad niepotrzeb nych TTLi iCMOSw?. Odpowiem ci: zatrzymaj je wszystkie. Ukady mikropro cesorowe nie kocz si na... mikropro cesorach! Twoje zapasy zpewnoci zo stan zpoytkiem wykorzystane, bar dziej racjonalnie iekonomicznie zara zem, wwielu ukadach elektronicznych jako peryferia samego mikrokontrolera. Po tych kilku westchniciach za mi nion epok wrmy jednak do konkre tw na temat mikrokomputerw jedno ukadowych. Jak powiedziaem wcze niej, ukady te istniej do dzi, aich r norodno imoliwoci zastosowa s nieograniczone. Obecnie istnieje kilka rodzin tych uka dw, ktrych producentami s najwik sze koncerny elektroniczne na wiecie.

mitaj to, eby si nie pomyli. Ze wzgldw stylistycznych bdziemy uy wa nawet okrelenia mikroprocesor, cho nie jest to do koca cise. Ale przecie ju wiesz, drogi Czytelniku, oczym bdzie mowa. Itak niektre zmikrokontrolerw wyspecjalizoway si wkonkretnych dziedzinach tak bardzo, e nie potrafiy znale miejsca gdzie indziej. Najprost szym przykadem niech bdzie zapo mniany ju ukad zegara MC1206. Kt zwas nie prbowa, aprzynajmniej nie sysza otym jake popularnym, szcze glnie na giedach elektronicznych, uka dzie cyfrowym. Ten zegarek by prze cie mikrokontrolerem, tylko potrafi cym wykonywa okrelone czynnoci zwizane zpomiarem czasu. Ukad oscy latora mia, prawda? Pami wewntrz n (np. alarmu) te, wyjcia do sterowa nia wywietlaczami LED (porty I/O) tak e, wic teraz mi chyba nie zarzucisz, drogi Czytelniku, e ta kostka to nie by prosty ale funkcjonalny mikrokontro ler. Pomyl teraz, czy majc te wszystkie elementy skadowe, zamiast np. wy wietlaczy LED nasza kostka MC12... mogaby pracowa wroli programatora do pralki automatycznej. Niestety, wczasach PRLu nikt ootym nie pomy la, awkadym razie nie doczekano si wdroenia takiego ukadu. Powsta nato miast prymitywny, elektromechaniczny programator, ktrego kolejny, regenero wany egzemplarz pracuje w20letniej pralce autora (uywanej raczej ze wzgl dw sentymentalnych). Przykadw moe by wiele, my jed nak zajmiemy si jednoukadowcami bardziej uniwersalnymi ztwego punktu widzenia takimi ,ktre bdziesz sam mg zmusi do wykonywania okre

44

ELEKTRONIKA DLA WSZYSTKICH 4/97

Te to potr afisz potrafisz


wia podrczniki podejmujce temat mikrokontrolerw 8051 ipochodnych. Wreszcie dostpno wmiar tanich na rzdzi do wspomagania projektowania przewaya na ich korzy. Tylko nie myl od razu, e wcyklu powiconym 8051 bdziemy ci zmusza do kupowa nia komputera, programw czy nawet ksiek. Nie! Do zaznajomienia si zmoliwociami tych procesorw nie bdzie ci nawet potrzebny komputer! Tak, to jest moliwe. Przyjrzyjmy si teraz, co zawiera typo wy przedstawiciel rodziny MCS51 mik rokomputer jednoukadowy 8051 (rys. 2). Jak wida, wjednej kostce zawarto wszystkie niezbdne do pracy ukady, tote wystarczy dosownie kilka biernych elementw zewntrznych aby ruszy do pracy. Ale jakiej? Otym dowiesz si wkolejnej czci naszego cyklu o51ce. Wjednym ukadzie scalonym zawar to: rdze mikroprocesora CPU z8bitow jednostk arytmetycznologiczn (ALU), zdolna do wykonywania oblicze na liczbach 8bitowych; uniwersalne dwukierunkowe porty wejcia/wyjcia, do komunikowania si ze wiatem zewntrznym po po przez zapisywanie do nich jak iodczyt przez nie danych cyfrowych (w niekt rych odmianach 8051 z wbudowanymi przetwornikami A/C i C/A, take wiel koci analogowych; programowany szeregowy port trans misji dwukierunkowej, ktry moe np. suy do komunikowania si zdowol nym komputerem wyposaonym wzcze RS232C; dwa (w innych wersjach 3) uniwersal ne liczniki/timery, do dowolnego wy korzystania; ukad generowania przerwa systemo wych, zawierajcy take moliwo generowania przerwa zewntrznych; ukad wewntrznego oscylatora, ktry ogranicza do minimum konieczno stosowania zewntrznych elementw do pojedynczego rezonatora kwarco wego oraz dwch dodatkowych kon densatorw ceramicznych; wreszcie pami do przechowywania danych iwynikw oblicze: RAM; oraz wewntrzna pami typu ROM, wktrej zawarty jest program dziaa nia mikrokontrolera. Program dziaania jest tworzony przez konstruktora wprocesie tworzenia apli kacji, anastpnie jest zapisywany za po moc programatora wstruktur mikro kontrolera. Ponadto mikroprocesor 8051 posiada moliwo doczenia zze wntrz dodatkowych ukadw pamici statycznych RAM (do przechowywania danych) oraz pamici EPROM/ROM zktrej moe odczytywa polecenia czyli program. Wtym ostatnim przypad ku czsto wewntrzna pami ROM jest wtedy nieaktywna, lub nie ma jej wcale, ale otym pniej. Na rynku istnieje kilka podstawowych wersji procesora 8051. Wszystkie one maja takie same wewntrzne bloki funk cjonalne, rnica polega na rodzaju pa mici programu czyli pamici staej zktrej mikrokontroler pobiera rozkazy. Jak wiesz, wrd pamici staych ROM najbardziej popularne s pamici EPROM (programowane elektrycznie, kasowane promieniami UV) gwnie ze wzgldu na ich cen. Rzadziej stosowa ne s pamici ROM progamowane przez producenta lub pamici EPROM/OTP (OTP One Time Programmable) czyli jednokrotnie programowane pamici EP ROM (jednokrotnie bo nie ma moli woci ich kasowania promieniami UV, co jest wynikiem braku okienka kwarcowe go wobudowie pamici). Ostatnio coraz wiksz popularno zdobywaj pamici EEPROM, czyli pa mici ktre mona programowa jak ika sowa elektrycznie. Przy stosowaniu pamici EEPROM odpada konieczno stosowania kopotliwych iczsto dro gich kasownikw pamici EPROM (z lamp ultrafioletow, apami mona programowa wielokrotnie, nawet 100 tysicy razy. Wrnych wersjach procesorw 8051 stosuje si rne, wymienione wczeniej typy pamici programu. Tak wic mamy mikrokontrolery wwersji ROM, OTP, EPROM, wreszcie EEPROM oraz wersje pozbawione pamici progra mu wogle, przystosowane do pracy zdoczon zzewntrz dowoln pami ci programu. Itak. wzalenoci od wbudowanej wukad mikrokontrolera 8051 pamici

Wmikroprocesorowym wiatku najbar dziej znani producenci to: Microchip, ze swoj rodzin jednouk adowcw PIC... Motorola, lansujca ukady 8,16 i32 bitowych mikrontrolerw jednoukado wych Intel, produkujcy bodaj najbardziej popularne procesory serii 8051... Zilog, producent nowoczesnych kont rolerw jednoukadowych nastpcw poczciwego Z80 (wykorzystywanego wprodukcji sdziwych ZX81, ZX Spec trum) SGSThompson z rodzin ST62. Istnieje take kilka innych firm, ktre na bazie licencji opracoway mutacje tych procesorw, wyposaajc je wwie le dodatkowych blokw funkcjonalnych, zachowujc przy tym pen kompatybil no ze swymi pierwowzorami. Do nich zpewnoci naley zaliczy Philipsa, Sie mesa oraz dwie amerykaskie firmy: Dallas oraz Atmel, ktre wostatnich la tach zaskoczyy projektantw kilkoma udanymi wersjami najbardziej popular nych mikrokontrolerw jednoukado wych. Do zastosowa amatorskich (a nawet wpeni profesjonalnych) najbardziej pra ktyczne s mikroprocesory 8bitowe. Wersje 16 i32 bitowe s po prostu za dobre, atake za drogie jak na potrzeby domowego czy szkolnego laboratorium. Wrd popularnych 8bitowcw do niedawna prym wiody Z80, niestety ze wzgldu na ograniczone moliwoci ob sugi urzdze peryferyjnych (wejcia/ wyjcia) bez koniecznoci stosowania dodatkowych ukadw scalonych rodzi ny Z80 such praktycznie onich zagin. Obecnie najbardziej popularne mikrokon trolery to kostki PIC (Microchip) oraz ro dzina MCS51, czyli procesory oparte oukad 8051. Iwanie te ostatnie, drogi Czytelni ku, zostan opisane wkolejnych nume rach EdW. Dlaczego akurat te? Odpowied jest prosta. Po pierwsze: s to najatwiej do stpne inajtasze (w stosunku ceny do moliwoci) ukady mikroprocesorowe na rynku. Po drugie, wszdzie roi si od sharewareowych programw na ich te mat, ana naszym rynku zaczy si poja

Rys. 2. Mikrokomputer 8051.

ELEKTRONIKA DLA WSZYSTKICH 4/97

45

Te to potr afisz potrafisz


programu, producenci ustalili wmiar jednolite iprzejrzyste symbole, ktrych znajomo (na razie teoretyczna) zpew noci przyda si wpniejszych zaku pach tych kostek. W tabeli 1 zestawiono oznaczenia mutacji procesora 8051, oraz krtk cha rakterystyk zastosowanej pamici pro gramu. Literka C wnazwie kadego znich oznacza, e kady ukad wykonany jest wwersji CMOS. Niegdy do po pularne byy wersje HMOS (bez literki C, np. 8031), lecz jest to przeszo, tote nie bdziemy si nimi zajmowa. Jeeli przez przypadek natrafisz, np. wBOMISie, na ukad wwersji HMOS imoesz go naby za grosze, skorzystaj ikup go. Taki ukad jest identyczny jak wwersji CMOS, lecz bdzie pobiera wicej prdu podczas pracy, co czsto nie jest problemem. Ze wzgldu na rzadko takich sytua cji, wswoich rozwaaniach bdziemy podawa dane iparametry techniczne dotyczce ukadw 8051, wykonanych wwersji CMOS. Podane wtabeli wersje procesorw 80C51 i80C52 to typowe odpady pro dukcyjne wielkich koncernw produkuj cych sprzt elektroniczny. Odpady to nie znaczy bezwartociowe lub wybrako wane. W pamici wewntrznej ukadu 8051 producent zapisa jaki program dla konkretnego odbiorcy (np. wytwrcy pralek automatycznych). Kostki te nie zostay jednak sprzedane temu odbiorcy. Dla ciebie wpisany program jest bezuy teczny. Ale, jak wspomniaem wcze niej, mikrokontrolery rodziny 8051 maj moliwo pracy zwbudowan lub ze wntrzn pamici programu. Jeeli de cydujemy si na wykorzystanie tej dru giej moliwoci, pami wewntrzn Tabela 1
Symbol handlowy 80C51 Opis wersja zwewntrzn pamici programu typu ROM, ktrej zawarto jest nieznana znaszego punktu widzenia, tote ukad moemy wykorzysta do pracy tylko zdoczona zewntrzn pamici np. EPROM do ktrej zapiszemy nasz program (wtedy pami ROM jest wyczona nieaktywna) wersja procesora bez wewntrznej pamici programu. Mikrokontroler wtej wersji moe pracowa tylko zdoczon zewntrzn pamici jak dla 80C51. wersja zwbudowan pamici EPROM. Obudowa mikroprocesora posiada okienko kwarcowe, dziki ktremu moliwe jest kasowanie zawartoci tej pamici ,co umoliwia wielokrotne programowanie caego ukadu. najnowsza wersja procesora zkasowan elektrycznie pamici EEPROM. Poniewa wtej wersji caa pami programu EEPROM moe by kasowana bardzo szybko za pomoc tylko 1impulsu, procesory wtej wersji nazywa si typu Flash (czyt. flesz) jest to procesor identyczny z8051 tyle e posiada dodatkowy trzeci programowalny licznik/timer (nazywany jako T2) i dwa razy wicej pamici RAM (256B) .Reszta jak dla 80C51 patrz wyej. jak dla 80C31 zuwzgldnieniem T2i RAM jak dla 87C51 zuwzgldnieniem T2i RAM jak dla 89C51 zuwzgldnieniem T2 RAM

80C31

87C51

89C51

80C52

80C32 87C52 89C52

mona fizycznie odczy poprzez zwar cie do masy odpowiedniego wyprowa dzenia mikrokontrolera 8051. Wtakiej aplikacji mona zatem uy wersji 80C31 bez wewntrznej pamici programu, lub bardzo taniej (nazwanej wczeniej odpadow) wersji 80C51. Wobu przy padkach dziaanie ukadu bdzie takie sa me. Ze wzgldu na ogromn rnic wcenie tych dwch wersji, powiniene uywa taszej kostki 80C51. Zapytasz pewnie: To po co wogle na rynku s wersje 80C31, skoro mona uy 80C51

po niszej cenie? Ot pami pobiera prd rnica polega na poborze prdu przez te ukady. Jednak rnica ta wyno si zaledwie kilka mA, tote wnaszych za stosowaniach nie ma to adnego znacze nia. Wnastpnym odcinku przyjrzymy si temu, co wystaje zmikroprocesora czyli wyprowadzeniom iich znaczeniu dla ukadu samego mikrokontrolera. Sawomir Surowiski

ERRARE HUMANUM EST


WEdW 2/97 oprcz kilku literwek znalelicie nastpujce drobne bdy: Na str. 12 tytu powinien brzmie: Aplikacje wzmacniaczy operacyjnych. Wtym samym artykule na str. 13 na rys. 1naley zamieni znaczki + wukadzie wzmacniacza U1B. Grny tranzystor (BD281) powinien mie oznaczenie T2, tak jak na pytce. Wartykule Ukad gonomwicy MC34018 (str. 19) na rys. 4kocwka RLI ma numer 7, aVcc 20. Strona 24. Ju drugi raz nie zmienilimy roku: nie da si ukry, e mamy rok 1997. WKciku elektronika amigowca na str. 32 (szpalta 1wiersz 12) zamiast rozadowuje, naley wpisa aduje, za na rys. 7a odwrotnie narysowano diod zabezpieczajc optotriak. Na str. 33 na rys. 12. zamiast wyjcia powinno by we jcia. Na str. 34 na rys. 14 zamiast 470kW powinno by 470W . WProstym odbiorniku nasuchowym KF (str. 44) na rys. 2ukad scalony U1 to UL1202, jak podano wspisie elemen tw. Wartykule Pierwsze kroki wcyfrwce (str. 53) na rys. 2(przekanikowa bramka AND) wyjcie powinno by doczone do styku normalnie otwarty, anie normalnie zwarty dolnego przekanika. Za na rys. 6(tranzystorowa bramka NOR) brak kropki nad rodkowym tranzystorem. Drobn nagrodniespodziank otrzymuje Kazimierz Znojek zRudy lskiej.

46

ELEKTRONIKA DLA WSZYSTKICH 4/97

Te to potr afisz potrafisz


Wpoprzednim numerze Elektroniki dla Wszystkich zaznajomilimy Czytelnikw zpojciem mikroprocesora imikrokontrolera. Przedstawilimy oglne zaoenia dotyczce budowy ukadw scalonych tego typu oraz przybliony sposb wsppracy zinnymi ukadami peryferyjnymi. W tym odcinku przedstawimy oglny opis wyprowadze mikroprocesora. Jest to drugi z odcinkw wstpnych z cyklu obejmujcego nauk programowania procesora 8051. Przypominamy, e wkrtce zamkniemy list kandydatw na uczniw w klasie mikroprocesorowej. Na zgoszenia chtnych czekamy do koca maja. Klasa mikroprocesorowa to grupa 2030 osb, ktre orztymaj bezpatnie od firmy AVT zestaw edukacyjny (skadajcy si z dwch pytek z procesorem, klawiatur, wywietlaczami itp.). Osoby te zobowizane bd do przeprowadzania wszystkich prostych wicze z zakresu nauki programowania oraz do zgaszania autorowi cyklu wszelkich wynikych niejasnoci czy problemw. Ma to na celu praktyczne sprawdzenie stopnia opanowania przedstawionego materiau, a take niewtpliwie zapewni skuteczno nauki. Do skorzystania z tej moliwoci zapraszamy osoby w rnym wieku, od 12 do 80 lat.

Mikrokontrolery? To takie proste...


Cz 2 Charakterystyka mikrokontrolera 8051
Dlaczego 8051?
Poniewa elektronika oparta na uka dach mikroprocesorowych wkracza pod strzechy coraz silniej, warto by przyjrze si bliej jednemu, bodaj najpopularniej szemu ukadowi tego typu, amianowicie mikrokontrolerowi 8051. Zapewne wielu Czytelnikw EdW spotyka si zoznaczeniem 8051. Niekt rych zpewnoci ogarnia zimny dreszcz, inni jak wynika zlistw, s zaciekawieni tematem imoliwociami programowa nia mikroprocesorw. Postaram si wsposb przystpny, tak merytorycznie jak ifinansowo, (niestety znauk wie si cz praktyczna, ktra wymaga mi nimum sprztu do nauki programowa nia) pokaza iprzekona Was otym e projektowanie ukadw przy wykorzysta niu mikrokontrolera 8051 nie jest trudne. Wymagane s jedynie podstawowe wia domoci ztechniki cyfrowej, mwic konkretnie kady, kto zna podstawowe bramki logiczne oraz najprostsze typy przerzutnikw, ajeeli dodatkowo wyko na sam jaki ukad lub opisany wlitera turze, zpewnoci nie bdzie mia prob lemw zopanowaniem sztuki korzysta nia zmikroprocesora 8051. Przy opisie samego procesora, awpniejszych numerach EdW, take podczas krtkich lekcji na temat progra mowania, bd za kadym razem odwo ywa si do analogicznych ukadw wy konanych wstandardowej technice cyf rowej (TTL czy CMOS). Dziki temu ka dy zainteresowany tematem czytelnik, zorientowany cho wpodstawach cyf rwki, bdzie wstanie strawi pewna porcj wiedzy, oswajajc si jednocze

Rys. 3. Opis wyprowadze mikrokont rolera 8051.

ELEKTRONIKA DLA WSZYSTKICH 5/97

41

Te to potr afisz potrafisz


nictwem dziau obsugi czytelnikw. jest do koca jasne, posu si porw Koszt zakupu 8051 wchwili obecnej wa naniem (cho mao dokadnym) do uka ha si wgranicach 2,00...4,00 nowych du typu rejestrowego o8miu wyprowa zotych, nie jest to wic duo jak na kie dzeniach (8bitach std nazwa 8bito sze nawet nie zarabiajcego amatora. wy). Czy pamitamy ukad serii TTL Wchwili obecnej na rynku znajduje si 74198?. Jest to co wtym stylu, tylko wersja mikroprocesora wykonana wtech e bardziej uniwersalne. Dla tych, ktrzy nologii CMOS oznaczona jako 80C51. nie wiedz, co to 74198, inne proste po Wszystkie parametry charakterys rwnanie. Port, jak kady port, pomaga tyczne (prdowe inapiciowe) podane w przyjmowaniu i wysyaniu, tyle e nie wartykule bd odnosi si do tej wers towarw, lecz informacji. Rys. 4. Zapis przykadowej liczby do ji, aczkolwiek dla uproszczenia bdziemy Port moe peni rol wyjcia informa portu P1. posugiwa si okreleniem bez litery cji binarnej (czyli e procesor moe usta C mwic otyp ukadzie. wia stany logiczne na kocwkach tego nie zna pozr skomplikowanym uka Mikrokontroler 8051 umieszczony portu). Tak wic, jeeli zachodzi potrze dem cyfrowym, jakim jest 8051 ka. jest w40nkowej obudowie (przewa ba, procesor moe np. wpisa do portu Dla sceptykw, ktrzy sdz, e pro nie plastikowej) typu DIL (skrt od Dual P1 dowoln liczb binarn z zakresu gramowanie procesora 8051, nawet na InLine Package, co po angielsku zna 0...255, np. 48. Binarnie liczba 48 = poszczegl etapie przedszkola, wymaga posiada czy obudowa dwurzdowa). Sama 00110000 B .Oznaczenia nia drogiego komputera klasy PC, mam ilo kocwek nie jest przeraajca, nych kocwek portu P1 wskazuj na mi wiadomo. Ot skonstruowaem wszake znamy inne ukady np. kolejn pozycj bitu (cyfry liczby binar podstawowy ukad aplikacyjny na proce ICL7106, ktre take umieszczone s nej), co pokazuje rysunek 4. Tak wic kocwka P1.7 (najstarsza) sor 8051 (niedua pytka drukowana wtakiej obudowie. +kilka podzespow), dziki ktremu Wtym miejscu kto moe powie przyjmie poziom logiczny 0, kocwka kada teoretyczna lekcja na amach na dzie: No tak, ale opis typowej ICL ki P1.6 poziom 0, P1.5 poziom 1itd. Ale co daje zapisanie jakiej liczby do szego pisma, bdzie moga by natych (7106) mona znale prawie wkadym miast powtrzona wpraktyce na stole czasopimie lub podrczniku, znaczenie portu P1? Ot zastosowa moe by kadego zWas, drodzy Czytelnicy. By 40tu wyprowadze te, atu mam taki wiele. Najprostsze znich obrazuje rysu 5. Do kadego wyprowadzenia portu najmniej nie bdzie potrzebny take a mikroprocesor, kady mi mwi e to nek 5 den programator pamici EPROM lub in ukad uniwersalny, aja itak nie wiem co P1 doczono ukad zprzekanikiem, kt rego styki zacza ne, czsto kosztowne wyposaenie. Wy mam znim zro j dowolne urz starcz dobre chci itroch wolnego bi.... Kocwki dowolnego portu dzenie elektryczne czasu, azpewnoci kady zWas b Zapoznanie si procesora mog peni zarwno np. wmieszkaniu. dzie zachwycony efektami swojej pracy, zmikrokontrole rol wej, jak wyj. Wsumie na rysun czynic pierwsze kroki wtechnice mik rem rozpoczniemy ku jest ich osiem, roprocesorowej. od oglnego poz nania jego 40 wyprowadze, wkocu lecz wpraktyce nie musimy korzysta ze Troch osamym tylko to wystaje zobudowy ijest wi wszystkich wyprowadze portu. Przy ta kim wykorzystaniu portu program zawar doczne. bohaterze ty w mikroprocesorze moe na przykad Na pocztek przyjrzyjmy si samemu 1. Kocwki onumerach 1...8 wcza i wycza owietlenie w miesz (port P1) mikroprocesorowi 8051. Warto wtym kaniu. Uzyskamy wietny symulator miejscu wyjc zszuflady biurka tak kos S to wyprowadzenia 8bitowego, obecnoci domownikw. tk, ajeeli kto jej nie posiada, moe j uniwersalnego portu mikroprocesora Projektujc ukad wykonawczy naley naby prawie wkadym sklepie zpodze oznaczanego wliteraturze jako P1 (port mi na uwadze maksymaln obcial spoami elektronicznymi, lub za pored nr 1jak kto woli). Jeeli sowo port nie no kadego zwyprowadze portu P1, zreguy wynosi ona 10mA (w obecnie oferowanych wersjach procesora) na kady pin. Mona zatem wysterowa za pomoc portu maksymalnie do czterech wej TTL serii standard. Istotn zalet portw uniwersalnych procesora (w tym take P1) jest moli wo indywidualnego ustawiania pozio mu logicznego na kadym wyprowadze niu niezalenie. Nie trzeba zatem zapisy wa caej liczby do portu aby np. zmieni stan tylko na jednym wyprowadzeniu, wystarczy ustawi (rozkazem zwanym SETB) lub wyzerowa (rozkazem CLR) odpowiedni bit rejestru portu P1, tote np. ustawienie pinu P1.5 na logiczne 0 nastpi poprzez wydanie polecenia: CLR P1.5 (clr clear, ang. zeruj,wyczy). Niechccy zahaczylimy oprogramowa nie, ale otym bdziemy mwi szczeg owo przy innej okazji. Rys. 5. Najprostsze wykorzystanie portu portu P1.

42

ELEKTRONIKA DLA WSZYSTKICH 5/97

Te to potr afisz potrafisz


elementem ukadu resetu jest kon densator elektrolityczny C. Zreguy jego warto powinna wynosi 10...22F. Jest on niezbdny do prawidowej gene racji impulsu resetu przez ukady we wntrzne mikrokontrolera. Wstarszych wersjach 8051 wykona nych wtechnologii HMOS, niezbdny okaza si dodatkowy rezystor blokujcy wejcie RST do masy, co zapewniao wymuszenie stanu niskiego na tym pinie podczas normalnej pracy ukadu. Wno wych katalogach opisujcych ukady wwersji CMOS, rezystor jest ten pomi jany, aczkolwiek wpraktycznych uka dach powinnimy przewidzie miejsce na pytce drukowanej, ze wzgldu na rnorodno procesorw serii 8051. Niech za przykad posuy fakt, e pro ducent najnowszych procesorw zrodzi ny 8051 wkartach katalogowych naj nowszych wersji zwewntrzna pami ci EEPROM typu Flash zaleca stoso wanie tego rezystora pomimo i produ kowane ukady s wykonane wwersji CMOS. My moemy stosowa rezystor owartoci 8,2...10kW . Widoczny na rysunku 6klawisz suy do resetowania procesora bez koniecz noci wyczania napicia zasilajcego. Tote wkadej chwili uytkownik moe przerwa wykonywanie programu przez procesor. Na rysunku 7 7pokazano inne, bardziej zoone wersje ukadw penicych funk cje resetu, lecz wnaszym przypadku wzupenoci wystarczy wersja zrysun ku 6. 3. Kocwki onumerach 10...17 (port P3) Podobnie jak wprzypadku portu P1, port P3 moe peni wszystkie opisane wczeniej funkcje moe by wyjciem lub wejciem. Dodatkowe symbole na rysunku 3tu obok wyprowadze portu P3 sugeruj e port moe te spenia in ne dodatkowe funkcje. Itak te jest.

Rys. 6. Podstawowy (uytkowy) ukad resetowania 8051. Port (cay lub niektre zjego pinw), podobnie jak przy zapisie, mona usta wi take jako wejcie informacji logicz nej. Kade zwyprowadze staje si wte dy wyjciem o wysokiej impedancji, dziki temu dowolny poziom logiczny podany zwyjcia jakiego ukadu cyfro wego (np. zwyjcia bramki ukadu TTL lub CMOS) moe by odczytany poprzez piny portu ainformacja czy tym stanem bya logiczna 1 czy 0, zostaje wyko rzystana przez procesor dla dalszego je go dziaania wzalenoci od spenianej akurat funkcji. Krtko mwic, procesor moe odczyta stany logiczne, jakie z zewntrz podano na kocwki portu. Oczywicie poziomy logiczne napi wejciowych portu P1 (oraz kadego in nego) musz zawiera si wprzedziale napi zasilania mikrokontrolera, czyli wzakresie 0...5V. Detekcja poziomw logicznych odbywa si jak dla bramek CMOS, std wartoci progowe napi tych stanw s zblione do poowy na picia zasilajcego. Istotn informacj jest fakt e wtrybie odczytu zportu P1 kocwki s wewntrznie podczepia ne (podcigane) do plusa zasilania po przez wbudowane w80C51 rezystory, co wymusza odczyt wysoki zportu wwypadku niepodczenia kocwki portu. 2. Kocwka 9(RST) Ztematem mikroprocesorw czy mik rokontrolerw nierozcznie wie si pojcie resetowania, czy jak kto woli kasowania ukadu. Czynno ta wyko nywana poprzez podanie logicznej 1 na te wyprowadzenie na pewien okres czasu (jaki otym pniej) powoduje skasowanie ukadu, a wic natychmias towe przerwanie wykonywanych czyn noci irozpoczcie cyklu dziaania proce sora od samego pocztku (tak jakbymy wczyli zasilanie ukadu). Czas trwania dodatniego impulsu ka sujcego zaley od czstotliwoci zjak

Rys. 7. Inne rozwizania ukadw RESET. pracuje mikroprocesor. Wyjani to do kadnie wdalszej czci artykuu. Zregu y wtypowych zastosowaniach czas 1ms wzupenoci wystarcza. Wukadach praktycznych do kocw ki RST docza si mniej lub bardziej skomplikowany ukad ktry generuje wy magany impuls zerujcy najczciej wtrzech przypadkach: po wczeniu zasilania ukadu na nasze danie poprzez np. przyci nicie klawisza (umieszczonego zre guy na pytce drukowanej tu obok procesora). wsytuacjach awaryjnych, kiedy np. poprzez zakcenie najczciej na li niach zasilajcych nastpi bdne dzia anie ukadu mikroprocesora, wargo nie czsto okrela si to mianem zawieszenia lub niekontrolowanej pracy ukadu. Trzeci przypadek dotyczy bardziej zo onych ukadw stosowanych szczegl nie wautomatyce ielektronice przemys owej. My najczciej spotkamy si zdwiema pierwszymi sytuacjami. Przy kadowy ukad zapewniajcy prawidowy skasowanie iponowny start procesora 80C51 przedstawia rysunek 6 6. Gwnym

Rys. 8. Najprostszy przykad wykorzystania transmisji synchronicznej.

ELEKTRONIKA DLA WSZYSTKICH 5/97

43

Te to potr afisz potrafisz


Piny P3.0 (RXD) iP3.1 (TXD) mog peni rol portu transmisji szeregowej. Wprak tyce poprzez te dwa wyprowadzenia mo na przesya informacj (bajty ibity) zido procesora zinnych ukadw cyfrowych wsposb szeregowy, tzn. bit po bicie. Ciekawostk niech bdzie te fakt, e przesyanie to moe odbywa si na kil ka sposobw: synchronicznie wtedy pin P3.0 peni role dwukierunkowej magistrali szere gowej, po ktrej przesyane s dane, za pin P3.1 generuje sygna taktujcy, penic rol zegara (podobnie jak wszeregowych rejestrach przesuw nych np. 74164, 74165). Rysunek 8 obrazuje sposb transmisji synchro nicznej do zewntrznego 8bitowego rejestru TTL typu 74164. asynchronicznie kiedy zgry zadaje my prdko transmisji pomidzy na szym procesorem 8051 ainnym, ze wntrznym ukadem np. czem RS232c komputera PC. Wtakim przy padku kocwka P3.0 RXD peni rol odbiornika przesyanych szeregowo danych (pierwsza litera symbolu R oznacza receive ang. odbir), za kocwka P3.1 TXD nadajnika (T transmitt ang. nadawanie). Ponadto rozrnia si kilka trybw pracy asynchronicznej. Tych, ktrzy nie zrozumieli dokadnie dodatkowych funkcji wyprowadze RXD i TXD pocieszam, e temat ten wyjani dokadnie w rozdziale na temat sposo bw komunikacji szeregowej w jednym z kolejnych odcinkw cyklu. Alternatywna funkcj kocwek P3.2 (INT0\) oraz P3.3 (INT1\) jest funkcja de tekcji przerwa zewntrznych. Dla tych czytelnikw, ktrzy nie wiedz, co to oznacza, wyjaniam, e pojcie przerwa nia wtym przypadku odnosi si do zmia ny stanu logicznego (na omawianym wy prowadzeniu P3.2 lub P3.3) z1 na 0. Wefekcie we wntrzu procesora 8051 zostaje ustawiona tak zwana flaga (nazywana take jako znacznik zgosze nia przerwania, co wodniesieniu do techniki cyfrowej mona wyobrazi so bie jako przerzutnik). Konsekwencj tego jest automatyczne przerwanie wykony wania przez procesor programu inatych miastowe przejcie do wykonania czyn noci cile okrelonych przez progra mist. Cig takich czynnoci nazywany jest wtechnice mikroprocesorowej: procedur obsugi przerwania. Naj prostsz analogi do zasady dziaania do wolnego przerwania (take zewntrzne go typu INT0 lub INT1) jest np. sytuacja, kiedy sprztamy mieszkanie, czyli wyko nujemy okrelone czynnoci, powiedz my odkurzanie. Po tym mamy za zadanie sprztn kurz zpek, anastpnie umy okna. Wpewnej chwili rozlega si gwizdek czajnika, wic oczywicie prze rywamy wykonywanie tu uyj sformu owania: ptli gwnej programu, ktr jest sprztanie pokoju iszybko biegnie my wyczy gaz. Wykonalimy dwie do datkowe czynnoci: bieglimy do kuchni iwyczylimy czajnik, czyli mona po wiedzie, e wykonalimy procedur obsugi przerwania (wyczenia czajni ka, jak kto woli). Wykrycie zmiany stanu logicznego na kocwkach przerwa ze wntrznych INT0 iINT1 wie si ze spenieniem jednego warunku, amiano wicie, aby czas od wspomnianego ujem nego zbocza sygnau zgoszenia prze rwania do ponownego przejcia wstan wysoki by odpowiednio dugi. Podobnie jak wprzypadku warunku sygnau RST, czas ten zaley od czstotliwoci zegara mikroprocesora. Dokadnie sposb dziaania systemu przerwa procesora 8051 przedstawi wkolejnych odcinkach. Kocwki (P3.4 iP3.5) oznaczone na diagramie zrysunku 3jako T0 iT1 peni dodatkow funkcj wej uniwersal nych, programowalnych licznikw, wbu dowanych wstruktur 8051. Procesor 80C51 zawiera dwa bliniacze liczniki T0 iT1 (oznaczenie takie same jak kocw ki). Maksymalnie mog one zlicza do 216 =65536, po czym zostaj wyzerowa ne. Liczniki te oprcz zliczania impulsw zwej T0 iT1 mog take zlicza impul sy wewntrzne, pochodzce zgenerato ra mikrokontrolera. Wpraktyce wyko rzystywane jest to np. do odmierzania okrelonych odcinkw czasu np. przy funkcji zegarka. Jak wspomniaem wczeniej, liczniki mog by programo wane przez uytkownika, awic mona np. zmniejszy ich pojemno (do 28 lub 213), mona take zapisa wnich war to pocztkow, zatrzyma je wdowol nym momencie lub uruchomi. Szczeg y wrozdziale na temat ukadw liczniko wych procesora 8051. Pozostay do omwienia wyprowa dzenia P3.6 iP3.7, oznaczone jako WR\ iRD\. Jak pisalimy we wczeniejszych nu merach EdW, prawie kady mikrokontro ler posiada moliwo wsppracy z pa mici zewntrzn, ktr przecie trzeba zaadresowa. W pamici tej mona prze chowywa istotne zpunktu widzenia uytkownika dane, np. poziom tempera tury zostatnich dni procza (jeeli pro cesor pracuje wukadzie stacji meteoro logicznej), lub inne wzalenoci od po trzeb. Aby zapisa takie informacje wze wntrznej pamici danych potrzebne s oprcz podania adresu komrki pamici do ktrej ma nastpi zapis, take sygna y sterujce zapisem lub wprzypadku odczytywania odczytem zpamici.

Rys. 9. Typowe ukady zewntrznego oscylatora kwarcowego. Wanie pin WR\ jest sygnaem zapisu do zewntrznej pamici danych, ako cwka RD\ wysya sygna do odczytu. Wpraktycznych zastosowaniach jako elementy pamici wykorzystuje si uka du statycznych RAM czyli wskrcie SRAM. Procesor 8051 potrafi zaadresowa maksymalnie 65536 (216)komrek pa mici (bajtw), ale otym pniej. Ito tyle na temat alternatywnych fun kcji portu P3, nie zapominajmy jednak e port P3 (lub niektre zjego pinw) moe peni rol zwykego, uniwersalnego por tu wejcia wyjcia, podobnie jak P1. 4. Kocwki 18 i19 (XTAL1 iXTAL2) Kocwki te su do doczenia ze wntrznego rezonatora kwarcowego oczstotliwoci zalenej od potrzeb uytkownika, ale take od wersji ukadu 8051. Wpraktyce czstotliwo ta moe wynosi od 1,2MHz do 12...16MHz, na rynku spotyka si take wersje proceso rw pracujce przy wyszych czstotli wociach nawet do 40MHz, atake przy niskich nawet do pojedynczych hercw wwypadku procesorw 80C51 wwersji statycznej (np. 89C51 firmy Atmel). Doczony do tych pinw rezonator kwarcowy po uzupenieniu ododatkowe kondensatory owartoci zreguy zprze dziau 22...40pF (w zalenoci od warto ci rezonatora), umoliwiaj prac wbudo

44

ELEKTRONIKA DLA WSZYSTKICH 5/97

Te to potr afisz potrafisz


wanemu w8051 generatorowi, ktry napdza cay mikroprocesor. Oczy wicie od czstotliwoci rezonatora ci le zaley szybko dziaania naszego mikrokontrolera. Typowy ukad zewnt rznego oscylatora przedstawia rysunek 9a 9a. Czstotliwo, zjak pracuj we wntrzne ukady mikroprocesora, jest okrelona wzorem: F=fxtal/12, gdzie fxtal jest czstotliwoci rezonatora kwarcowego. Powodem takiego podziau czstotli woci rezonatora jest wewntrzna archi tektura wszystkich procesorw serii 8051. Wie si ztym pojcie cykli ma szynowych procesora oktrych zna czeniu napisz wrozdziale na temat os cylatora 8051. Wkadym razie zpraktycznego punk tu widzenia, przedstawiony na rysunku 9ukad, podobnie jak ukad resetu zrys. 6jest niejako obowizkowym (przynaj mniej na etapie nauki programowania). Kocwka XTAL1 (pin 19) wukadach wwersji CMOS moe take peni rol wejcia zewntrznego sygnau zegaro wego oczstotliwoci wzakresie, jak opisano wprzypadku stosowania rezo natora kwarcowego. Wtedy rezonator idodatkowe kondensatory s zbdne. Wprzypadku gdy mamy do czynienia zwersj wtechnologii HMOS wejciem takiego sygnau jest XTAL2 (pin 18). Wobu przypadkach pozostay pin powi nien by nie podczony. Dokadnie sytu c. acj t wyjania rys. 9b ic 5. Kocwka 20 (Vss) Podobnie jak wwikszoci ukadw cyfrowych ostatnie wyprowadzenie wdolnym rzdzie obudowy jest ko cwk ujemnego napicia zasilajcego masy (GND). Wprzypadku ukadw CMOS podaje si oznaczenie Vss co oznacza biegun ujemny napicia zasilaj cego. Wnaszych zastosowaniach b dziemy docza ten pin do masy przy szego ukadu elektronicznego. 6. Kocwki onumerach 21...28 (port P2) S to wyprowadzenia drugiego 8bito wego portu procesora. Port P2 spenia wszystkie funkcje podobnie jak P1. Do datkowo poprzez kocwki portu P2 po dawana jest wrazie potrzeby starsza cz adresu (A8...A15) przy dostpie do zewntrznej pamici danych (SRAM) atake programu (np. EPROM). Sposb wjaki to si odbywa opiszemy przy okazji doczania pamici zewntrznej do mikrokontrolera 8051. 7. Kocwka 29 (PSEN\) Wprzypadku pracy procesora zze wntrzna pamici programu (np. EP ROM) kocwka ta wysya sygna odczy tu ztej pamici. Wpraktyce jest ona do czona do wejcia OE\ wsppracujcej pamici EPROM. Procesor chcc odczy ta kolejny rozkaz (polecenie do wykona nia) zzewntrznej pamici programu po daje poziom niski na kocwk PSEN anastpnie dokonuje odczytu. Dzieje si tak wcile okrelonych warunkach, synchronicznie zczstotli woci zegara procesora. Jeeli posiada my wersj procesora zwewntrzn pa mici (typu EPROM lub EEPROM), iwykorzystujemy prace zt wewntrzn pamici, kocwka 29 powinna pozo sta niepodczona. 8. Kocwka 30 (ALE) Okocwce 30 powiemy przy okazji omawiania portu P0. 9. Kocwka 31 (EA\) Powinna by doczona do masy, je eli mikroprocesor pobiera rozkazy wze wntrznej pamici programu (patrz pkt.7), lub do plusa zasilania (+5V) jeeli zwewntrznej. Wpewnych ukadach procesor pomi mo e posiada wewntrzna pami pro gramu, ze wzgldu na zbyt ma je po jemno, musi siga do zewntrznej pamici. Wtakim przypadku pin EA\ po winien by doczony do plusa zasilania, tak aby procesor po jego resecie mg rozpocz prac pobierajc rozkazy zwbudowanej pamici programu. Nale y take pamita e doczenie EA\ do masy blokuje wewntrzn pami pro gramu jeeli ona istnieje. Wpraktyce jest to czsto stosowany chwyt, kiedy kupujemy wsklepie na og kilkakrotnie tasz wersj proceso ra zpamici wewntrzn typu ROM. Wpamici takiej najczciej zapisany jest pewien program lecz, znaszego punktu widzenia jest on zupenie bezuy teczny. Tote aby wpeni wykorzysta walory mikroprocesora (oczywicie przy pracy zzewntrzn pamici programu) bez uruchamiania nieznanego nam pro gramu, blokujemy pami ROM poprzez zwarcie EA\ do masy. 10. Kocwki onumerach 32...39 (port P0) Trzecim iostatnim uniwersalnym por tem procesora 8051 jest P0. Podstawo we funkcje portu jako dwukierunkowej bramy do wymiany danych s takie sa me jak wprzypadku portw P1 iP2. Za sadnicz rnic jest jednak zwikszona obcialno (do 8wej TTL) tego por tu oraz fakt nie posiadania wbudowa nych rezystorw podcigajcych ko cwki portu do plusa zasilania wwypad ku odczytu. Dlatego przy projektowaniu dowol nych ukadw wyjciowych doczanych do tego portu naley uwzgldni wspo mniane waciwoci tak, aby np. odpo wiednio spolaryzowa bazy tranzysto rw zrys. 5. Drug bardzo wan rol, jak peni P0, jest funkcja multipleksowanej magis trali danych (8bitw: D7...D0) imodszej czci adresu (A7...A0). Multipleksowa nej wpraktyce znaczy przeczalnej, czyli raz na kocwkach portu P0 proce sor moe wystawi bajt danych (np. do zapisu do zewntrznej pamici da nych), winnym przypadku adres, wcelu wybrania potrzebnej komrki zpamici SRAM, do ktrej ma by za pisana. Bardziej wnikliwy czytelnik zauway, e przecie do zapisu danej wzewntrz nej pamici SRAM potrzeba wsumie 16 sygnaw adresu (A0...A15) oraz 8bitw (sygnaw) danej. Potrzebne s zatem 3omiobitowe porty (2 na adres ijeden na dan), amy mamy do dyspozycji tylko dwa P2 iP0.

Rys. 10. Doczanie zatrzasku do procesora.

ELEKTRONIKA DLA WSZYSTKICH 5/97

45

Te to potr afisz potrafisz


Tabela 2. Parametr Symbol Warto dopuszczalna 6,6V Warto zalecana 5V 20% wzakresie napicia zasilania 1W 0oC...70oC 65oC...+150oC nie dotyczy 0oC...70oC nie dotyczy 11. Kocwka 40 (Vcc) Oczywicie jest to kocwka zasilania mikroprocesora 8051. Napicie wzgl dem kocwki Vss (czyli masy) zreguy nie moe przekroczy 6,5V. Dlatego ukad mikrokontrolera naley zasila na piciem 5V 0,25V uywajc do tego ce lu dowolnego zasilacza stabilizowanego najlepiej przy pomocy znanego ukadu 7805. Zasad przy projektowaniu ukadw z8051 jest blokowanie tego wyprowa dzenia kondensatorem owartoci 100nF do masy ukadu cyfrowego. Praktycznie na pytce drukowanej naley zawsze przewidzie miejsce na taki kondensator umieszczajc go jak najbliej samego ukadu procesora lub po prostu przyluto wajc go od strony wyprowadze na pytce drukowanej. tabeli 2 Wtabeli 2przedstawiono parametry dopuszczalne oraz zalecane przez produ centw procesora 80C51 oraz pochod nych produkowanych wwersjach CMOS. Na koniec pozostaje jeszcze krtkie wyjanienie oznaczenia samego kontro lera ikryjcych si wnim dodatkowych istotnych dla nas informacji. Problem ten dokadniej przedstawia tabela 3 3. Sawomir Surowiski dla wersji specjalnych ukadu zakres pracy moe by wikszy Uwagi

napicie zasilania

UccUss

napicie wzgl. masy na dolnej kocwce ukadu 1,0...7,0V moc rozpraszana temperatura pracy temp. przechowywania Ptot

Tabela 3. Oznaczenie 80C31

Wbudowana pami programu bez pamici

Uwagi ukad nadaje si do pracy po doczeniu zewntrznej pamici EPROM wraz zniezbdnym zatrzaskiem (np. 74373/573) wersja, ktra wymaga zablokowania pamici, patrz opis pkt. 9(reszta jak dla 80C31) procesor zwbudowan pamici typu EPROM imoliwoci kasowania jej promieniami UV poprzez okienko kwarcowe

80C51

4kB ROM

87C51

4kB ERPOM lub EPROM OTP*

89C51

4kB EEPROM (Flash) podobnie jak 87C51 ztym e pami programu mona skasowa drog elektryczn przez podanie impulsu dlatego mwi si opamici typu Flash (ang.bysk).

* OTP (One Time Programable) pami EPROM zapisywalna jednokrotnie (kostka nie ma okienka kwar cowego umoliwiajcego skasowanie zawartoci pamici na pomoc promieniowania ultrafioletowego.

Itu wanie ley zasada multiplekso wania (naprzemiennego wystawiania ad resu lub danej) procesora 8051. Ot sygna informacja o tym, co aktualnie znajduje si na szynie portu P0, pojawia si na wyprowadzeniu 30 oznaczonym jako ALE. Sygna ten mona nazwa sygnaem zapisu adresu do dodatko wego zewntrznego ukadu cyfrowego. Ukad ten jest 8krotnym zatrzaskiem aktywowanym wysokim poziomem logicznym. Wserii TTL znajduj si dwie kostki speniajce rol ukadu zatrzaskiwania modszej czci adre su przez 8051, s to 74373 lub 74573. Rnica midzy nimi polega jedynie na innym wyprowadzeniu kocwek, reszta dziaa tak samo. Rysunek 10 10po kazuje sposb doczenia zatrzasku do procesora 8051. Wmomencie kiedy 8051 wystawi na port P0 modsz cz adresu (A7...A0), daje temu sygna, zmieniajc stan na kocwce ALE znis kiego na wysoki. Wefekcie po nadejciu tym razem opadajcego zbocza sygnau

ALE, dana (adres) zportu P0 zostaje za pisana wzatrzasku 74373 (573). Teraz na omiu jego wyjciach adres bdzie utrzymywany niezalenie od zmieniaj cych si stanw wporcie P0 a do nade jcia nastpnego sygnau zkocwki ALE. Skoro procesor posugujc si do datkowym ukadem zapisa na ze wntrz adres, moe teraz miao wysta wi na port P0 dan, ktra ma by zapi sana wzewntrznej pamici danych. Oczywicie mona te odczyta dane z pamici. Tak wic podsumowujc, przeanalizo walimy sposb wjaki za pomoc jedne go sygnau ALE procesor 8051 moe niejako rozszerzy liczb linii adreso wych z 8 do 16. Wprzypadku niekorzystania zmoli woci obsugi zewntrznej pamici tak programu (EPROM) lub danych (SRAM) kocwka ALE (30) jest nieodczona. Wodcinku powiconym rozbudowie systemu opartego na 51ce powrcimy do tego tematu, na razie istotne s infor macje oglne.

46

ELEKTRONIKA DLA WSZYSTKICH 5/97

Te to potrafisz
Kontynuujemy opis ukadw we wntrznych mikrokontrolera 8051. W tym odcinku wyjanimy pojcie i znaczenie stosu i jednostki aryt metycznologicznej Przy okazji wszystkim niecierpli wym lub wtpicym w swoje moliwoci dotyczce programowa nia 8051 jeszcze raz przypominam, e w tej czci cyklu nie opisujemy szczegowo wszystkich komponen tw procesora, jedynie w sposb przystpny staramy si wsplnie zrozumie fakt istnienia tych ele mentw oraz ich znaczenie dla cae go procesora. Autor robi to celowo, tak aby mg drogi Czytelniku oswoi si z naszym bohaterem. Wszystkie omwione elementy ar chitektury 8051 bdziemy sukce sywnie przywoywa z pamici i sprawdza ich dziaanie w praktyce podczas nauki programowania 8051. Wtedy to zdobyta i oswo jona wiedza okae si kluczem do sukcesu ktrym bdzie z pewnoci pierwszy napisany przez Ciebie pro gram na 8051.

Mikrokontrolery? To takie proste...


Cz 3 Mikrokontroler 8051 opis ukadu
Na pocztek krtkie przypomnienie: w poprzednim odcinku zajmowalimy si wewntrzn pamici programu mikro procesora oraz wewntrzn pamici da nych. W jej obrbie pobienie omwili my istnienie rejestrw specjalnych SFR oraz poznalimy funkcj licznika rozkazw PC. Szczegowy opis SFR oraz sprztowe dziaanie licznika rozkazw opiszemy przy okazji omawiania cyklu rozkazowego procesora oraz wstpu do asemblera. Na tym etapie jednak naszym celem bdzie poznanie pozostaych blo kw funkcjonalnych 8051ki. try wskanikowe R0 i R1) lub bezpored ni odwoujc si niejako wprost do da nej komrki pamici. Pozostae 128 baj tw pamici o adresach 80h...FFh to ob szar omawianych w skrcie rejestrw specjalnych SFR. Obok na rysunku 1b pokazaem struk tur wewntrznej pamici danych w mik rokontrolerze 8052. Jak wida w prze strzeni tej istnieje dodatkowa, niejako zdublowana pami danych o adresach 80h...FFh. Przeznaczenie jej jest takie jak pamici uytkownika o adresach 00h...7Fh, czyli w caoci (128 bajtw) mona ja wykorzysta do swoich potrzeb umieszczajc w niej te wyniki oblicze oraz pozostae zmienne programowe, ktre po prostu nie mieszcz si w ob rbie pamici danych uytkownika o ad resach 00h...7Fh. Ze wzgldu jednak e ta dodatkowa, nazywana czsto nakad kow, pami danych pokrywa si adre sowo (adresy 80h...FFh) z obszarem re jestrw specjalnych SFR, naleao j w ja ki sposb rozrni, tak aby np. podczas odczytu lub zapisu ktrej z komrek tej pamici nie zmodyfikowa przypadkiem ktrego z rejestrw specjalnych SFR. Ot konstruktorzy kontrolera 8052 roz wizali ten problem w prosty sposb umoliwiajc dostp do tej dodatkowej nakadkowej czci pamici , jedynie za porednictwem adresowania porednie go. Tote jeeli np. w przyszoci, drogi

Wewntrzna pami danych w 8052


Wbrew pozorom tytu tego akapitu nie wykracza poza ramy naszego minikursu na temat 8051. Jak ju wiesz (z czci I) mikrokontroler 8052 to rozszerzona wer sja 51ki, posiadajca: dodatkowy 16bitowy uniwersalny ukad licznikowy dodatkowe 128 bajtw wewntrznej pamici danych RAM. I wanie tym drugim elementem za jmiemy si teraz. Na rysunku 1a przed stawiem znan Ci ju struktur wewnt rznej pamici danych w 8051. Jak mwi limy poprzednio obszar o adresach: 00h...7Fh (128 bajtw) zajmuje pami danych uytkownika, ktr mona adre sowa w sposb poredni (poprzez rejes

ELEKTRONIKA DLA WSZYSTKICH 7/97

43

Te to potrafisz
W przypadku mwic wskanik stosu. Fizycznie jest korzystania ze sto on po prostu 8bitowym rejestrem w ob su adresowanie szarze SFR, pooonym pod adresem 81h jest niekonieczne. (patrz tabela 1 w poprzedniej czci). Przy takim sposo W mnemonice (nazewnictwie) proceso bie obsugi ko rw MCS51 posiada on symbol SP z an nieczne jest jednak gielskiego stack pointer wskanik zachowanie odpo stosu. Jego zadaniem jest automatyczne wiedniej kolejnoci w zapisie i odczy wskazywanie miejsca aktualnego wierz cie tak aby nasze choka stosu. Tak wic w przypadku odo cenne dane nie enia bajtu na stos, wskanik SP jest au tomatycznie (bez ingerencji programisty) pomieszay si. Ot taki upo zwikszany o 1, w przypadku zdjcia da Rys. 1. Pami w procesorach 8051 oraz 8052 rzdkowany spo nej ze stosu jest on zmniejszany. Sytua sb przechowywa cj te wyjania rysunek 3. Podsumujmy wic: stos jest hierar Czytelniku, odwoasz si (zaadresujesz) do nia danych charakteryzuje wanie stos. dowolnej komrki wewntrznej pamici Rysunek 2 wyjania fizyczn budow sto chiczn struktur do przechowywania da danych w sposb bezporedni a wskazy su. Jak wida wszystkie dane (bajty) przy nych (bajtw) z obszaru wewntrznej pa wanym przez Ciebie adresem komrki b zapisie odkadane s na stos jedna na mici RAM procesora (wczajc SFR) dzie np. F0h (240 dziesitnie) to z pewno drug. Na wierzchoku stosu znajduje si a pooenie jego wierzchoka jednoznacz ci dobierzesz si do .... rejestru spe zawsze ostatnio odoona dana (w naszym nie okrela jego wskanik SP. Przy ko cjalnego o symbolu B (patrz tabela 1 w po przykadzie oznaczona jako X), tote aby rzystaniu ze stosu obowizuje zasada, przednim odcinku), natomiast jeeli wyko dobra si do danej lecej pod ni (Y) ile bajtw odoye na stos, tyle potem nasz to samo tym razem jednak adresujc naley najpierw zdj ze stosu dan X, musisz zdj, tak aby struktura stosu nie komrk w sposb poredni poprzez re a potem dopiero odczyta Y. Mona to zostaa zakcona. W praktyce ma to jestry wskanikowe R0 lub R1, to doko porwna do stosu talerzy ustawionych szczeglne znaczenie, bowiem stos wy nasz zapisu (lub odczytu) komrki pooo jeden nad drugim. Odkadamy talerze na korzystywany jest nie tylko poprzez wia nej w obszarze nakadkowym czyli cz stos i zdejmujemy ze stosu. Nie moemy dome dziaanie uytkownika lecz take wyj talerza z gbi stosu dostajemy przechowywane s na nim wane dla ci dodatkowej pamici danych. Oczywicie jeeli wykonasz t ostat si do niego dopiero po zdjciu wszystkich dziaania caego mikrokontrolera adresy powrotw z podprocedur oraz procedur ni operacj programujc kostk 8051, to stojcych na nim. Po co jednak jest ten stos, czy nie obsugi przerwa, czyli innymi sowy m w efekcie zaadresowania poredniego komrki o adresie z zakresu 80h...FFh jest to tylko niepotrzebna komplikacja wic, aktualne zawartoci 16bitowego trafisz przysowiow kul w pot, czyli ....., z pewnoci wielu z Was w tej licznika rozkazw PC. No tak ale przecie stos skada si nie uzyskasz oczekiwanego efektu , bo chwili zadaje sobie to pytanie. Ot jak po prostu w tym obszarze 8051 adreso si okae pniej a szczeglnie podczas z 8bitowych komrek pamici, a licznik wanym porednio po prostu nie ma nic. nauki programowania, struktura ta spe rozkazw (programu PC) jest 16bitowy. Warto o tym pamita, bowiem zgodnie nia niezmiernie wana rol podczas wy W takim przypadku procesor na stos od z zasad kompatybilnoci w d, program konywania programu przez mikroproce kada najpierw modszy bajt rejestru PC, napisany na procesor o mniejszych mo sor. Na tym etapie powiniene wiedzie a nastpnie starszy bajt, wskanik stosu liwociach (np. 8051) z pewnoci bdzie tylko dwie podstawowe rzeczy: stos su SP zostaje wiec zwikszony automatycz pracowa poprawnie na 8052, ale nie od y do przechowywania zmiennych lub re nie o 2. Tak wic w prosty sposb mona wrotnie. To samo dotyczy kadego czon jestrw SFR i druga sprawa: dostp do przechowywa inne rejestry podwjne nich odbywa si w sposb uporzdkowa np. wskanik adresu zewntrznej pami ka rodziny MCS51. ny w odpowiedniej kolejnoci, jak opi ci DPTR (tabela.1), skadajcy si z dwch 8bitowych rejestrw DPH (ad saem wczeniej. Stos i wskanik stosu No tak ale gdzie jest ten stos ?...., ju res 83h) oraz DPL (adres 82h). Z pojciem stosu miae okaz W przypadku rejestru DPTR jak i innych j, drogi Czytelniku, spotka si w artyku odpowiadam. W przypadku procesorw le omawiajcym oglne zaoenia doty rodziny MCS51 stos umieszczony jest... SFR przechowywanie na stosie odbywa czce mikroprocesorw, pisalimy o tym uwaga !, w wewntrznej pamici danych si na danie uytkownika w potrze w EdW. Jeeli nie do koca rozumiesz is uytkownika, czyli w obszarze o adresach bnym dla niego momencie. O tym jak tot stosu postaram si Ci j jeszcze raz 00h...7Fh. Jak wynika z ry przedstawi. Ot najprociej mona stos okreli jako bardzo prost w dziaa sunku 2 ilo tej pa niu struktur przechowujc bajty. Pod mici zajtej przez pojciem przechowania rozumiemy stos bdzie si zmie oczywicie operacje zapisu z nastpnie nia i zalee od te odczytu dowolnej zmiennej lub rejestru go ile bajtw odoy limy na ten stos. SFR. Aby cile okre Wiesz ju e w przypadku takich ope racji tylko z udziaem np. wewntrznej li miejsce pooe pamici danych uytkownika, aby doko nia stosu, w archi na zapisu (odczytu) musisz dan komr tekturze 51ki zna k pamici najpierw zaadresowa czyli jduje si tzw. licznik Rys. 2. Zasada dziaania stosu stosu a fachowo po prostu pod jej fizyczny adres.

44

ELEKTRONIKA DLA WSZYSTKICH 7/97

Te to potrafisz
f) po odoeniu na stos licznika PC (2 baj ty), procesor wykonuje procedur ob sugi przerwania g) w tej procedurze uytkownik wiado mie uywa stosu do przechowywania tymczasowo pewnych wartoci, zapi sujc na stos np. 3 bajty (te 3 bajty zna jd si w ssiedztwie bezporednio nad bajtami z licznika rozkazw PC) h) z powodu bdu w programie pope nionego przez uytkownika pod ko niec procedury zostaj zdjte ze stosu dwa (a nie trzy) bajty, ktre przechowy way dane uytkownika i) nastpuje zakoczenie procedury ob sugi przerwania, procesor zdejmuje ze wierzchoka stosu adres powrotu do ptli gwnej programu (2 bajty, ktre wpisuje do licznika rozkazw PC) i tu nastpuje ...... kompletny klops program prawdopodobnie zawiesi si lub po prostu zwariuje. Powd tego jest oczywisty, do liczni ka rozkazw PC nie zostay wpisane wczeniej przechowane 2 bajty bdce pierwotn zawartoci PC, a za to wpisa ny zostaje bajt pozostawiony przez uyt kownika (zawierajcy najpewniej inn warto liczbow) w procedurze obsugi przerwania, oraz starszy bajt licznika roz kazw PC. W tej sytuacji procesor powrci w zu penie inne miejsce programu, ni w te w ktrym si znajdowa w momencie na dejcia przerwania, czego skutki dla dziaa nia procesora okaza si mog opakane. Pamitajmy zatem o stosie jako o wanej strukturze w architekturze 8051, oraz o tym e tylko umiejtne iwiadome, oczywicie, z niego korzysta

Rys. 3. Stos a wskanik stosu w praktyce i dlaczego przechowuje si re jestry na stosie dowiesz si drogi Czytelni ku przy okazji nauki programowania 8051. Na rysunku 4 przedstawiono dwie sy tuacje w ktrych uywany jest stos. Pier wsza dotyczy przechowania rejestru licz nika rozkazw (programu) podczas obsu gi procedury po nadejciu przerwania, druga obrazuje jak wiadomie mona wy korzysta stos do przekazywania danych pomidzy rejestrami. W praktyce ten ostatni przypadek jest niezmiernie rzadko wykorzystywany, lecz w tym przykadzie chodzi nam o zrozumienie samego spo sobu dziaania struktury stosu. Na koniec dwie pozostae wane infor macje dotyczce stosu. Ot po wcze niu zasilania procesora (lub jego resecie oczywicie) wskanik stosu SP przyjmuje domylnie warto 07h czyli po prostu 7, wskazujc tym samym e wierzchoek stosu adres umieszczenia nastpnej da nej po odoeniu jej na stos pooony bdzie w wewntrznej pamici danych pod adresem 08h (07h +1 zgodnie z opi san wczeniej zasad). Jeeli wic odoymy jaki bajt na stos, najpierw licznik SP zostanie auto matycznie zwikszony o 1 (wskazujc te raz 08h) , a nastpnie do komrki pami ci o tym adresie 08h, zostanie wpisany ten bajt. Przy zdjciu ze stosu kolejno bdzie odwrotna, najpierw zdjty zosta nie nasz bajt, a nastpnie zmniejszony zostanie wskanik SP o 1. Wskanik stosu SP tak jak kady rejestr SFR moe by dowolnie modyfikowany przez programist poprzez zapisanie w nim dowolnej 8bitowej wartoci (0...255) W praktyce jednak sytuacja taka wy stpuje tylko wtedy, jeeli chcemy zmie ni pooenie stosu (czyli go przesun) na pocztku wykonywania programu. Operacja ta z oczywistych wzgldw ma sens jeeli stos w danej chwili jest pusty , w przeciwnym razie przy lekko mylnej modyfikacji wskanika SP wszys tkie dane odoone wczeniej na stos sta n si niedostpne (przynajmniej z punktu widzenia dziaania samego stosu). I tak jeeli np. zechcesz drogi Czytelni ku wykorzystywa wewntrzn pami danych o adresach 08h...20h dla swoich potrzeb (a nie na stos) , musisz na poczt ku swego programu zmodyfikowa wskanik SP wpisujc do niego warto np. 20h, co jest jednoznaczne z powie dzeniem mikroprocesorowi: ... uwaaj mikroprocesorze, twj stos bdzie rozpo czyna si od adresu 21h, (a nie od 08h), adresy 08h...20h s przeznaczone dla moich potrzeb... . Na koniec jeszcze jedna istotna uwa ga. Ot jak wida ze sposobu dziaania stosu, poprzez nieumiejtne korzystanie z niego bardzo atwo jest go zamaza lub mwic inaczej zniszczy. Przyka dem niech bdzie sytuacja w ktrej: a) mikroprocesor wykonuje swj rutyno wy program b) nagle nadchodzi przerwanie z wejcia INT0 c) procesor przerywa dziaanie ptli gw nej programu d) nastpuje skok do wykonania procedu ry obsugi przerwania e) zanim jednak to nastpi procesor auto matycznie zapisuje na stos aktualn za warto licznika rozkazw PC (tak aby potem wiedzie gdzie ma wrci do ptli gwnej programu) a)

b)

Rys. 4. Przykady wykorzystania stosu

ELEKTRONIKA DLA WSZYSTKICH 7/97

45

Te to potrafisz
nie przynosi czsto efekty w postaci znacznego przypieszenia dziaania pro gramu oraz zmniejszenia jego rozmiarw. O tym jak w praktyce korzysta z dobro dziejstw stosu powiemy dowiemy si podczas nauki programowania. w przypadku dzielenia: reszta z dziele nia dwch liczb 8bitowych. Oczywicie zarwno rejestr B jak i akumulator A mog by wykorzystywa ne dowolnie jako rejestry uniwersalne. Trzecim wanym rejestrem zwiza nym z ALU jest sowo stanu programu nazywane w skrcie jako PSW (od ang. program status word) patrz rysu nek 5. Z tabeli 1 moemy odczyta e re jestr ten wchodzi w skad SFR a jego ad res to D0h (208 dziesitnie). W skad te go rejestru wchodzi 8 bitw nazywanych znacznikami z ktrych cztery informuj o przebiegu wykonania operacji arytme tyczno logicznych. I tak: Znajc pobienie gwne 3 rejestry zwizane z ALU zapoznajmy si wstpnie z operacjami jakie mona wykonywa przy jej pomocy na liczbach 8bitowych, s to a) operacje arytmetyczne dodawanie argumentw dodawanie z przeniesieniem odejmowanie z poyczk W tych trzech przypadkach pierwszy z argumentw operacji (skadnik lub od jemna) umieszczana jest w akumulato rze, drugi skadnik lub odjemnik umiesz czony jest w wewntrznej pamici da nych, lub jest argumentem bezpored nim rozkazu. Wynik dziaania umieszcza ny jest w akumulatorze. Dodatkowo w sowie PSW ustawiane s odpowied nio znaczniki: przeniesienia C i nadmiaru OV, co jest sygnaem przekroczenia za kresu liczb 8bitowych odpowiednio bez lub ze znakiem. Pozostae operacje arytmetyczne to: mnoenie dwch 8bitowych liczb bez znaku, gdzie jeden skadnik wpisywa ny jest do akumulatora drugi do rejest ru B, 16bitowy wynik umieszczany jest w rejestrach B.A odpowiednio starszy bajt w B , modszy w A; dzielenie dwch liczb 8bitowych, gdzie dzielna umieszczana jest w aku mulatorze A, a dzielnik w B, 8bitowy wynik dzielenia znajduje si po tej ope racji w A, natomiast B przechowuje reszt z dzielenia. inkrementacja (zwikszanie o 1) lub dekrementacja (zmniejszenie o 1) aku mulatora lub dowolnej komrki w we wntrznej pamici danych korekcja dziesitna wyniku zapisanego w akumulatorze b) operacje logiczne logiczna suma (OR) iloczyn logiczny (AND) rnica symetryczna (EXOR) negacja (NOT) zawartoci akumulatora A przesuwanie cykliczne akumulatora w lewo lub prawo, z lub bez przenie sienia (znacznika C > PSW.7). Ze wszystkimi operacjami tak logicz nymi jak i arytmetycznymi zapoznasz si drogi Czytelniku podczas omawiania po szczeglnych instrukcji, na razie wane jest aby zapamita omwione tu pod stawowe zagadnienia zwizane z ALU procesora 8051 i pochodnych. Nie zaamuj si, jeli co nie jest dla Ciebie do koca jasne. Sprbuj rozjani obraz materiaem z poprzednich odcin kw. Jeli to nie pomoe, zrozumiesz te szczegly przy omawianiu praktycznych przykadw. Sawomir Surowiski c.d. w EdW 8/97
Uwaga! W czci 2 (EdW 6/97, s. 41) zamiast: Pami mikroprocesowa powinno by Pami mikroprocesora.

Jednostka arytmetyczno logiczna


Pod tym pojciem kryje si jeden z elementw architektury 8051 odpowie dzialny za wykonywanie operacji arytme tyczno logicznych. Blok ten nazywany w skrcie jako ALU, potrafi wykonywa operacje na liczbach (skadnikach) 8bito wych. Z matematyki wiemy e do wyko nania najprostszego dziaania dwuskad nikowego potrzebne s: po pierwsze skadniki, po drugie w wyniku dziaania powstaje wynik, ktry te naley gdzie przechowa (umieci). Do wprowadzenia (np. przez progra mist) skadnikw dziaania su zar wno niektre rejestry specjalne z grupy SFR jak i dowolna komrka wewntrznej pamici danych. Dla rnych dziaa wy stpuj jednak pewne ograniczenia w swobodzie umiejscawiania skadni kw, lecz to temat na oddzielny artyku. Jednym z najwaniejszych rejestrw z grupy SFR jest akumulator oznaczany du liter A (ang. accumulator). W tabeli 1 z poprzedniej czci wida e akumulator umieszczony jest pod adre sem E0h (224 dziesitnie). Rejestr ten su y jednostce ALU za miejsce pobrania ar gumentu oraz umieszczenia wyniku wik szoci operacji arytmetyczno logicznych. Rejestr ten moe by adresowany bito wo (podobnie jak bajty spod adresw 20h...2Fh patrz poprzedni odcinek), dzi ki czemu moliwe jest testowanie dowol nych jego bitw bez potrzeby wykonywa nia dodatkowych operacji logicznych. Mu sz w tym miejscu zasygnalizowa e do datkowo rejestr A poza funkcjami zwiza nymi z jednostk ALU suy do pobierania i umieszczania bajtw w zewntrznej pa mici danych, dokadnie o tym powiemy w kolejnych odcinkach kursu. Przy przesyaniu tego rejestru na stos (umieszczenie lub pobranie ze stosu) wyko rzystuje si adresowanie bezporednie tego rejestru. Wtedy opisujemy go symbolem ACC (lub Acc). Dokadnie takie przypadki poznasz przy okazji programowania 8051. Drugim po akumulatorze wanym re jestrem wsppracujcym z ALU jest, tak e 8bitowy, rejestr B. Suy on do umieszczenia jednego ze skadnikw mnoenia lub dzielenia, a po wykonaniu jednej z tych operacji w rejestrze tym umieszczany jest w przypadku mnoenia starszy bajt 16 bitowego wyniku mnoenia dwch liczb 8bitowych

Rys. 5. Zawarto rejestru stanu PSW.0 (bit 0) oznaczany jako P, to znacznik parzystoci, ustawiany automa tycznie w kadym cyklu maszynowym wskazuje na to czy liczba jedynek (na po szczeglnych) pozycjach bitowych w aku mulatorze A jest parzysta (P=1) lczy nie parzysta (P=0). PSW.2 (bit2) oznaczany jako OV, to znacznik przepenienia (nadmiaru), usta wiany w wyniku wykonania dodawania lub odejmowania, a przy operacji dziele nia ustawienie go wskazuje na dzielenie przez zero. PSW.6 (bit 6) oznaczany jako AC, to znacznik przeniesienia pomocniczego, do ktrego wpisywane jest przeniesienie lub poyczka z bitu 3, wykorzystywany jest przy korekcji dziesitnej liczb. PSW.7 (bit 7) znacznik przeniesienia oznaczany jako C, do ktrego nastpuje przeniesienie z najbardziej znaczcego bi tu w wyniku wykonania operacji logicz nych przesuni liczb 8bitowych lub w wypadku przekroczenia wyniku poza zakres liczb zapisanych w naturalnym ko dzie dwjkowym (>255). Pozostae znaczniki nie maj zwizku z ALU, tote ich omwieniem zajmiemy si przy innej okazji. W praktyce najczciej nie jest koniecz ne pamitanie o wszystkich wymienio nych znacznikach, no moe poza znaczni kiem C (PSW.7). Jak si okae podczas na uki programowania, znaczniki te dziaaj jak gdyby automatycznie, to znaczy istnie j instrukcje programowania 8051, ktre uwzgldniaj wspomniane znaczniki, tote nie jest koniecznym badanie samego bitu sowa PSW, a jedynie wykonanie odpo wiedniej instrukcji ktra uwzgldni odpo wiedni stan danego znacznika.

46

ELEKTRONIKA DLA WSZYSTKICH 7/97

Te to potrafisz

Kontynuujemy opis mikrokontrole ra 8051. W tym odcinku powiemy w jaki sposb mona doczy ze wntrzn pami pogramu oraz danych. Podane konkretne rozwi zania sprztowe poparte schema tami elektrycznymi, z pewnoci dadz Ci pojcie na temat kontruo wania podstawowych blokw fun kcjonalnych maego systemu mik roprocesorowego. Opis takiego ukadu bdcego jednoczenie ba z do naszej przyszej nauki pro gramowania 8051 prezentujemy w niniejszym numerze EdW, warto jednak aby najpierw zapozna si z niniejszym artykuem.

Mikrokontrolery? To takie proste...


Cz 4 Mikrokontroler 8051 opis ukadu
Kostka 87C51 (89C51) ma tylko 4kB (8x52 8kB pamici programu), najczciej te tylko w zupenoci wystarcza, lecz zdarza si e jest to za mao, wtedy ko nieczne jest doczenie dodatkowej ze wntrznej pamici programu w postaci kostki EPROM. W tym przypadku (jak wspomniaem w poprzednim odcinku) maksymalna dugo programu rwna wielkoci obu pamici zewntrznej jak i wewntrznej nie moe przekroczy 64kB czyli 65536 8bitowych sw. Czyli e np. do kostki 87C52 (zawiera jcej 8 kB wewntrznej EPROM) mona doczy maksymalnie 56kB EPROM z zewntrz. Trzeci tryb pracy tylko z zewntrzn pa mici programu jak pamitasz z pierw szej czci cyklu wymaga zwarcia wypro wadzenia /EA (pin 31 procesora 8051/52) do masy. Par lat temu, kiedy procesory 51 z wbudowan wewntrzn pamici programu kosztoway niemao, natomiast kostki bez niej mona byo naby za kilka dziesit tysicy (starych zotych) nazywa em ten tryb pracy oszczdnociowym (chyba tylko dla wasnej kieszeni). Jak si wkrtce przekonasz drogi Czytelniku pier wsze praktyczne kroki z wykorzystaniem twego pierwszego systemu mikroproce sorowego warto bdzie poczyni korzys tajc wanie z tego trybu. Tak jak przy nauce jazdy samochodem istnieje wiksze ryzyko stuczki, tak w przypadku mikroprocesora nie warto na pocztku ryzykowa uszkodzeniem kostki z zapisanym w niej programem, le piej jest kod programu umieci w ze wntrznej pamici EPROM. A propos pierwszego systemu z 8051 w biecym numerze EdW znajdziesz opis kitu zawierajcego wszys tkie niezbdne elementy do zbudowania maego lecz w peni funkcjonalnego sys temiku do nauki programowania i obsugi procesorw rodziny MCS51. Publikacja tego systemu jest celowa i wyprzedza nieco rozpoczcie nauki programowania. Wszystko po to aby drogi Czytelniku mia troch czasu na nabycie tego zesta wu, zapoznanie si z nim, zmontowanie oraz wstpne sprawdzenie poprawnego dziaania. Wtedy wraz z pierwszym arty kuem dotyczcym programowania 8051 bdziesz mg rozpocz praktyczne lek cje z mikrokontrolerem. Pocztek kursu planowany jest w padzierniku. Wracajmy jednak do naszego artykuu. Pozostajc wiernym zasadzie przekazy wania Tobie, tylko niezbdnych, praktycz nych informacji na temat 51ki nie bd si rozwodzi nad teori obsugi zewn trznej pamici programu przez sam pro cesor, a jedynie przedstawi Ci nieza wodny sposb doczenia jej do ukadu mikrokontrolera. Rysunek 5 przedstawia schemat elekt ryczny takiego poczenia. W ukadzie tym

Zewntrzna pami programu


Jak si dowiedziae z wczeniejszych czci naszego cyklu, procesor 8051 i mu podobne maj moliwo doczenia do datkowej zewntrznej pamici programu, np. typu EPROM. W pamici tej podobnie jak w wewntrznej pamici programu za szytej w kostce 8751 (8752) programista umieszcza poszczeglne rozkazy progra mu , uywajc do tego celu np. programa tora pamici EPROM lub programatora do programowania mikroprocesorw z rodzi ny MCS51. Wiesz ju e procesor moe pracowa w nastpujcych konfiguracjach: a) tylko z wewntrzn pamici progra mu (dla kostek 8751, 8752) b) z wewntrzna i zewntrzn pamici programu jednoczenie, w tym przy padku zewntrzna pami programu stanowi jak gdyby przeduenie pa mici wewntrznej. c) oraz tylko z zewntrzn pamici pro gramu np. typu EPROM. Pierwszy tryb jest bardzo wygodny, po zwala na pene wykorzystanie wszyst kich zalet mikrokontrolera jednoukado wego w caym tego sowa znaczeniu. Pro gramista wykorzystujc procesor w wers ji z wbudowan pamici programu (8751,8951, xx52) cay kod swego progra mu umieszcza wewntrz koci, dziki czemu ma do dyspozycji wszystkie porty mikrokontrolera w tym take P0 i P2. (patrz poprzednie odcinki naszego cyklu).

40

ELEKTRONIKA DLA WSZYSTKICH 8/97

Te to potrafisz

Rys. 5. Sposb doczenia zewntrznej pamici programu do procesora zrezygnowano z uycia wewntrznej pa mici programu wykorzystano wic kos tk w wersji bez ROM (8051/52), pin /EA zwarto do masy, w jako zewntrzn pa mi programu wykorzystano kostk EP ROM o pojemnoci 64kB typu 27C512. Oczywicie w praktyce nie jest konieczne uywanie tak pojemnej pamici. Do na szych celw i eksperymentw wystarczy pami 27C64 o pojemnoci 8kB. W ta kim przypadku linie adresowe A15, A14, A13 (piny 28, 27 i 26 portu P2) pozostan niedoczone, lecz niestety i tak bd nie do wykorzystania, bowiem w trybie adre sowania zewntrznej pamici programu (jak i danych) cay port P2 przekazuje star szy bajt 16bitowego adresu. Zgodnie z opisem z I czci artykuu, w ukadzie wykorzystano dodatkowy re jestr w postaci ukadu 74HCT573, ktre go zadaniem jest zatrzanicie modszej czci 16bitowego adresu, czyli sygna w A0...A7. W czasie trwania dodatniego poziomu sygnau na wyjciu ALE, mikro procesor wystawia: na piny portu P2 star sza cz 16bitowego adresu A8...A15, natomiast na port P0 wystawiona zostaje modsza cz adresu A0...A7, ktra zo staje od razu przekazana poprzez 74HCT573 na wejcia adresowe A0...A7 pamici EPROM. Dzieje si tak dlatego e ukad 573 aktywowany jest poziomem, tote w przypadku gdy na jego wejciu C (poczonym z ALE) panuje stan wyso ki, rejestr ten jest przezroczysty tzn. e dane pojawiajce si na jego wejciach D1...D8 natychmiast pojawiaj si na wy jciach Q1...Q8. Doczenie wejcia /OC ukadu U2 do masy powoduje odblokowa nie na stae wyj Q1...Q8 (gdy /OC=1 to wyjcia te przechodz w stan wysokiej impedancji lecz w na szym przypadku nie ma to praktycznego zastosowania). Nastpnie podczas opadajcego zbocza sygnau ALE modsza cze adresu zostaje zapamitana w U2, a procesor moe wte dy z portu P0 odczyta kolejny bajt z pami ci EPROM podajc stan niski na wyprowa dzenie /PSEN, ktre jak wida ze schematu jest doczone do wejcia /OE pamici. Wejcie wyboru pamici U3 /CE jest na stae zwarte do masy, co oznacza e pami EPROM jest cigle aktywna a do jej odczytu wystarczy niski poziom poda ny na wejcie /OE. Czasem w rnych aplikacjach szczegl nie w urzdzeniach zasilanych bateryjnie wejcie /OC ukadu U2 oraz wejcie wybo ru pamici EPROM /CE s razem doczone do wyjcia sygnau ALE. Nie jest to bdem, bowiem podczas cyklu odczytu z zewntr znej pamici tak programu jak i danych wszystkie operacje tak odczytu jak i zapisu do tych pamici odbywaj si podczas sta nu niskiego na wyjciu ALE procesora. Cykl odczytu z zewntrznej pamici programu moesz dodatkowo przele dzi na rysunku 6. Podsumowujc te akapit powiniene zapamita, e przestawiony sposb doczenia ze wntrznej pamici programu jest typo wym dla tej konfiguracji pracy procesora odczyt kolejnych bajtw (rozkazw) z ze wntrznej EPROM odbywa si za pored nictwem sygnau /PSEN, o ktrym pisa em w I czci naszego cyklu przy okazji omawiania wyprowadze procesora dodatkowo w ukadzie z zewntrzn pamici programu (jak si zaraz oka e take i danych) niezbdny jest do datkowy ukad scalony w postaci 8 krotnego rejestru rwnolegego 74HCT573. Mona uy wersji LS. Natomiast kostki 74HCT373 (LS373), ktre maja taka sam struktur we wntrzn, rni si od ukadu 573 rozmieszczeniem wyprowadze D1...D8 i Q1...Q8. Zainteresowanych w/w ukadami od syam do katalogw serii TTL. My w na szych rozwizaniach bdziemy nagmin nie korzysta z ukadw 573 ze wzgldu na bardziej korzystny rozkad jego wypro wadze wprost dostosowany do uycia

Rys. 6. Cykl odczytu z zewntrznej pamici programu

ELEKTRONIKA DLA WSZYSTKICH 8/97

41

Te to potrafisz

Rys. 7. Sposb doczenia zewntrznej pamici danych 32kB do procesora 8051 wraz z poczciwym 8051 oraz pochodny mi w obudowach DIL40. 8 kostek 6264 (8x 8kB = 64kB) lub /RD (kocwka 17 U1) od skrtu Read przypomnij sobie cz I naszego cyklu). w ostatecznoci Podanie odpowiednich stanw logicznych 32 kostki 6116 (32x 2kB = 64kB). Oczywicie dwie ostatnie sytuacje na kocwki adresowe pamici (U3) odpo w przypadku wymaganej maksymalnej po wiadajce adresowi komrki pamici we jemnoci zewntrznej SRAM s nieprak wntrz ukadu, a nastpnie podanie stanu tyczne, po pierwsze ze wzgldu na ilo niskiego na kocwk /RD spowoduje po ukadw scalonych co prowadzi do zwik jawienie si danej (z pamici) na wyprowa szenia pytki drukowanej, po drugie pojawia dzeniach magistrali AD0...AD7 i w konsek si konieczno stosowania dodatkowego wencji odczyt jej przez mikroprocesor, za dekodera adresu w postaci np. ukadu serii porednictwem portu P0. Sytuacj te w postaci przebiegw TTLLS typ 74LS138 dekoder 1 z 8. Rysunek 7 pokazuje podstawowy ukad przedstawia rysunek 8. Nie podaj tu cza doczenia zewntrznej kostki SRAM sw poszczeglnych cykli, po pierwsze o pojemnoci 32kB do mikrokontrolera z czysto prakt]ycznego powodu, po dru 8051. Jak wida ukad pocze jest bar gie ze wzgldu e zale one od czstot dzo zbliony do schematu z rysunku 5, liwoci zegara (rezonatora kwarcowego gdzie omawialimy praktyczny sposb do doczonego do procesora). Skoro wiemy jak praktycznie (sprzto czenia zewntrznej pamici programu typu EPROM. Dla zwikszenia czytelnoci wo) realizowany jest odczyt z zewntrznej rysunku rezygnujemy z rysowania ka dego z pocze magistrali adresowej (A0...A15) oraz danych (AD0...AD7) od dzielnie, w zamian zastpimy je wspl nym fachowym symbolem szyny w postaci pogrubionej kreski. Kade poczenie odchodzce od takiej magistrali ma swoj nazw (etykiet), czyli e kocwki ukadw scalonych (w tym przypadku: procesora U1, pa mici U3 oraz zatrzasku U2) przy kt rych znajduje si taka sama etykieta li terowa, s ze sob elektrycznie po czone. Prawda, e prostsze?! Przyzwyczajmy si zatem do takie go sposobu czytania i rysowania sche matw, szczeglnie jeeli przedsta wiony schemat zawiera wielokocw kowe ukady scalone takie jak mikro procesor. Wracajmy jednak do tematu. Do adresowania pamici wykorzys tuje si, podobnie jak do pamici pro gramu, te same linie adresowe: A0...A15, oraz danych: AD0...AD7. Rys. 8. Cykl odczytu i zapisu Jednak sterowanie odczytem zewntr z zewntrznej pamici danych znej pamici danych zajmuje si sygna

Zewntrzna pami danych


W podobny sposb jak w przypadku zewntrznej pamici programu, do wik szoci procesorw serii MCS51 (w tym 8051/52) docza si zewntrzn pami danych. Do tego celu uywa si zazwy czaj (a prawie zawsze) kostek pamici statycznych nazywanych czsto SRAM od skrtu: Static RAM, czyli pami statyczna. Pami taka powinna charak teryzowa si 8bitow organizacj da nych oraz rwnolegym adresowaniem, tak jak w przypadku zwykych EPROM w. Najpopularniejsze i spotykane w han dlu, a przy tym najlepiej nadajce si do naszych potrzeb koci pamici SRAM to: a) 6116 pami SRAM o pojemnoci 2kB (6116 16kbitw, czyli 16384 bi tw / 8 = 2kB = 2048 B ). b) 6264 j/w lecz o pojemnoci 8kB (6264 64kbity, czyli 65536 / 8 = 8kB = 8192 B) c) 62256 j/w lecz o pojemnoci 32kB (62256 256 kbitw, czyli 262144 / 8 = 32kB...) Cena ukadw wymienionych pamici jest obecnie znikoma, nie znaczy to jednak e warto stosowa pamici z zapasem (np. najwiksze 32kB), zawsze warto prze widzie wielko praktycznie wykorzysty wanej iloci komrek pamici i odpowied nio dobra wymagany typ pamici. Pierwszy wymienionych ukad SRAM 6116 spotykany jest w handlu w typowej obudowie 24kocwkowej o rozstawie 600 mils, dwa ostatnie natomiast w obu dowach 28pinowych (600 mils, spotyka ne tez s wersje w wskich obudo wach o rozstawie 300 mils). Do kontrolerw serii 51 mona do czy maksymalnie 64kB zewntrznej pa mici danych. Mona wic w takim (skrajnym) przypadku zastosowa: 2 kostki 62256 (2x 32kB = 64kB) lub

42

ELEKTRONIKA DLA WSZYSTKICH 8/97

Te to potrafisz
pamici danych, to warto powiedzie jak dokonywany jest zapis. Ot do tego ce lu suy kolejny sygna procesora nazywa ny /WR (od skrtu write zapis), a wy stawiany przez procesor na kocwk 16 (U1) w czasie tej operacji. Podobnie ja w przypadku odczytu, najpierw procesor ustala adres na kocwkach A0...A15 (port P2 oraz wyjcia zatrzasku U2), na stpnie podaje dan na port P0, po czym wystawia stan niski na pin /WR, co po woduje zapis danej w pamici SRAM. Jak ju wczeniej wspomniaem, za stosowanie zewntrznej pamici tak pro gramu jak i danych wie si ze zuboe niem typowej jednoukadowoci mik rokontrolera, bowiem zajte zostaj portu P0 i P2 procesora. O ile w przypadku pra cy z zewntrzn pamici programu dzie je si tak zawsze: port P0 pracuje jako multipleksowana (na zmian) szyna da nych lub modszej czci adresu, a port P2 wystawia starsze 8 bitw 16bitowe go adresu, o tyle w przypadku pracy z ze wntrzn pamici danych (bez zewntr znej pamici programu) istnieje moli wo oszczdniejszego gospodarowania portami procesora. W przykadzie opisanym powyej m wilimy , e procesor przy odczycie lub zapisie ....wystawia 16bitowy adres (A0...A15) ... . Do tego potrzebne s 2 porty, ktre w takim przypadku nie na daj si do dodatkowego wykorzystania, jako np. wyjcia sterowania przekanika mi, lub czymkolwiek innym. Istnieje jednak moliwo innego odczy tu zewntrznej pamici danych, nazywana stronicowaniem. Ma ona zastosowanie szczeglnie wtedy, kiedy zewn. pami da nych mam mniejszy rozmiar od maksymal nej przestrzeni adresowej procesora np. 2kB. Jak wida z rysunku 9 pami taka (U3) ma tylko 11 linii adresowych (A0...A10), co pozwala na zaadresowanie 2048 kom rek pamici (bajtw). Tak wic pozostae li nie adresowe procesora A11...A15 pozosta yby niewykorzystane gdyby zastosowa odczyt jak w poprzednim przypadku z pe nym adresem A0...A15. Przy stonicowanym sposobie ob sugi zewn. pamici danych, procesor wystawia tylko modsz cz 16bitowe go adresu (linie AD0...AD7), za port P2 pozostaje nietknity. Wnikliwy czytel nik zauway e w konsekwencji takiego sposobu obsugi moliwe bdzie zaadre sowanie tylko 256 bajtw (2 do potgi 8 = 256) tej pamici, a nie jak w naszym przykadzie a 2kB. No tak, chyba e przed odczytem przez procesor, sami, za pomoc sygnaw A8...A10 (wystawia nych poprzez 3 piny portu P0) ustawimy niejako fizyczny adres 256 bajtowej strony adresowanej pamici. Zauwamy przecie e za pomoc tych trzech kocwek mona zaadresowa 8 stron po 256 bajtw kada co w sumie da nam do dyspozycji pene 2048 bajtw, czyli 2kB. Zauwamy te e, co najwa niejsze, pozostae kocwki portu P2 po zostaj wolne i moemy je dowolnie wy korzysta jako wejcia lub wyjcia cyfro we... Prawda, e genialne?! No tak, ale kiedy ten procesor adresuje pami za pomoc penego adresu, a kie dy za pomoc stronicowania .....!. Ot w celu rozrnienia przedstawionych dwch typw adresowania wprowadzone s dwie rne instrukcje procesora, kt rych uywa programista (w przyszoci Ty ! drogi Czytelniku) podczas projektowania ukadu i pisania programu, w zalenoci od potrzeb, ale o tym powiemy dokadnie przy okazji nauki programowania 8051. dzone przez programist na etapie tworzenia programu, stae np. w posta ci tablic (sinusw, logarytmw nie zbdnych do oblicze) lub cokolwiek innego, nie bdcego typow instrukcj programu lub jej argumen tem. A si prosi eby te dane umiesz czane byy w zewntrznej pamici da nych (w wewntrznej RAM prawdopo dobnie zabrakoby na nie miejsca), czy li w ukadach SRAM. Nie ma sprawy, mona przecie je przenie (progra mowo) z EPROM do SRAM w czasie inicjacji mikroprocesora, tylko po co !. Czy nie lepiej jako poczy obszar pamici programu i danych, zachowu jc oczywicie odrbne obszary adre sowe, pozostawiajc tylko jednolity sposb odczytu tych danych?! I druga sytuacja, bardziej praktyczna w fazie nauki sytuacja. b) Zbudowaem uniwersalny mikroste rownik z 8051...., chciabym mie mo liwo wpisywania na bieco (np. za pomoc komputera) moich programw i testowania ich w tym ukadzie bez po trzeby kadorazowego programowania pamici EPROM za pomoc drogiego programatora, na ktry mnie zreszt nie sta ..... . Czy nie dao by si wykorzys ta doczon pami danych SRAM ja ko cz obszaru adresowego pamici programu (i odwrotnie) i wpisywa do niej nowe programy bez wyjmowania ukadu scalonego z podstawki ?... . W przedstawionych dwch przypad kach, rozwizaniem problemu jest wyko rzystanie do odczytu danych tak z pamici programu jak i danych, iloczynu sygnaw: odczytu z zewntrznej pamici danych /RD oraz odczytu z zewntrznej pamici progra mu /PSEN Iloczyn taki w praktyce najatwiej jest wykona za pomoc pojedynczej 2we jciowej bramki AND, jak pokazano na rysunku 10. Przedstawiono nieco rozbudo wan konfiguracj procesora pracujcego

Miksowanie przestrzeni adresowych programu i danych


Czsto w praktyce podczas konstruo wania i oprogramowywania ukadw wy korzystujcych zewntrzne pamici tak programu jak i danych zdarzaj si nast pujce dwie sytuacje: a) w zewntrznej pamici programu (EP ROM staej) znajduj si, wprowa

Rys. 9. Przykad adresowania zewntrznej pamici danych 2kB poprzez stronicowanie

ELEKTRONIKA DLA WSZYSTKICH 8/97

43

Te to potrafisz

Rys. 10. Sposb zmiksowania zewntrznych pamici danych i programu z zewntrzn pamici programu U3 (EP ROM 8kB) oraz pamici danych U4 (SRAM 8kB). Zauwamy jednak e odczyt z obu pamici moe odbywa si tak samo. Dziki wymnoeniu sygnaw /RD i /PSEN, procesor ma moliwo odczytu kolejnej instrukcji programu (za pomoc /PSEN) tak z pamici U3 jak i U4, bowiem sygna RD&PS (bdcy iloczynem /RD i /PSEN) steruje wejciami /OE odczytu obu pamici (U3 i U4). Oczywicie sprawa zapisu nadal dotyczy tylko pamici SRAM U4 (doczony sygna /WR procesora U1 do kocwki /WE pamici U4). W celu rozdzielenia obszarw adreso wych obu pamici (tak aby nie nastpo wa konflikt przy odczycie na magistrali AD0...AD7, co moe mie miejsce w przypadku jednoczesnego pojawienia si danej na wyjciach 11...19 ukadu U3 i U4), wykorzystano lini adresow A15. Dziki niej pami EPROM (U3) bdzie aktywna kiedy sygna A15 bdzie mia stan niski, co jest adekwatne do obszaru adresowania rwnemu: 0000h.....7FFFh (oczywicie wtedy pami U4 jest nieak tywna, bo sygna wyboru CS2 U4 ma stan linii A15 = niski). Pami SRAM U4 bdzie natomiast obsugiwana w obszarze adresowym dla A15 rwnego logicznemu 1, czyli w za kresie: 8000h...FFFFh. Na zakoczenie, krtki przykad w jaki sposb w takim ukadzie (z rys.10) reali zowany jest przypadek b) omawiany wczeniej. Ot w pamici EPROM U3 na stae znajduje si program umoliwiajcy np. przesanie danych (ktrymi mog by tak e instrukcje programu) z komputera do naszego ukadu mikroprocesorowego, chociaby tego z rys.10. Program ten czsto zwany monitorem lub biosem wykonywany zostaje zaraz po wczeniu zasilania procesora, bowiem pami EP ROM z rys.10 ukad U3 zaczyna si od adresu pocztkowego 0000h. Nie jest na razie istotne w jaki sposb wspomniane dane zostaj przesane z kom putera, (moe by w tym celu uyty port szeregowy lub np. rwnolegy komputera). Wane jest e po przesaniu mog one by zapisane w zewntrznej pamici SRAM U4, ktra przecie daje si zapi sywa jak zwyk pami danych dziki sygnaowi /WR. Kiedy ju te dane, bdce np. kawa kiem jakiego nowego, utworzonego przez Ciebie programu (powiedzmy ze garka z 256 alarmami i tyloma timerami) zostana wpisane do pamici U4, moesz teraz rozkaza procesorowi (wydajc od powiedni instrukcj), skoczy do ad resu 8000h i stamtd rozpocz dalsze wykonywanie programu. Co bdzie w efekcie ...?, w efekcie dziki bramce AND (rys.10) jak powiedziaem wcze niej, dalej wykonywanym programem b dzie ten przesany wczeniej z kompute ra i umieszczony w SRAM, czyli np. twj superzegarek (lub cokolwiek co w przy szoci stworzysz). Zaletami takiego rozwizania s: brak koniecznoci stosowania drogich programatorw EPROM bardzo szybkie adowanie nowych pro gramw do pamici SRAM, co pozwo li uczcemu si programicie (takiemu jak Ty) na szybkie obserwowanie efek tw swojej pracy niepotrzebne jest oczywicie kasowa nie SRAM przed zapisem nowej wers ji tworzonego programu Nie brakuje i wad: po wyczeniu zasilania program umiesz czony w SRAM zostaje wymazany (ale dalej znajduje si np. w komputerze); konieczne jest posiadanie EPROM ze wspomnianym biosem (moni torem). Jak si wkrtce przekonasz, drogi Czy telniku, na etapie nauki programowania i obsugi procesorw 8051 pierwsza wa da w praktyce wcale nie jest wad. O drugi drobiazg (zaprogramowany EP ROM) nie musisz si martwi, bdziesz mg go otrzyma wraz zestawem dla po cztkujcych programistw, ktry znaj dziesz w tym numerze EdW. Bardziej ambitnych musz w tym miejscu uspokoi. Jestem pewien, e kady kto ukoczy nasz kurs projektowa nia bdziecie w stanie sam napisa swj wasny program monitora. Na razie na etapie wstpnej nauki programowa nia, do ktrej niebawem przejdziemy, nie zbdna bdzie wersja gotowa bio su, wierzcie mi drodzy Czytelnicy, za oszczdzi to wam wielu stron teorii, kt ra na pocztku mogaby niejednego z Was przerazi swoimi rozmiarami, a ktr sami nabdziecie z czasem, uczc si pisa pierwsze swoje programy. W nastpnym odcinku omwi po krtce (praktyczne rady) waniejsze te maty dotyczce czasowego sposobu wykonywania przez mikrokontroler 8051 programu, po czym przejdziemy do pier wszych krokw w programowaniu. Sawomir Surowiski

44

ELEKTRONIKA DLA WSZYSTKICH 8/97

Te to potrafisz

W kolejnym odcinku opisujcym procesor 8051 przedstawi kilka praktycznych wiadomoci na temat pracy mikrokontrolera, jej szybkoci w zalenoci od czstotliwoci tak tujcej zegara. Nastpnie pokrtce zapoznamy si z niemniej wanym blokiem funkcjonalnym, czyli: uka dem czasowo licznikowym. Tak jak w poprzednich odcinkach nie b d wgbia si w teori dotyczc tych zagadnie, przekazujc jedynie wiadomoci potrzebne do osucha nia a raczej oswojenia si z proceso rem. Szczegowy opis wszystkich rejestrw sterujcych praca 8051 opisz w jednym z kolejnych odcin kw, ktry bdzie niejako podstawo w cigawk w stawianiu pierw szych krokw w programowaniu.

Mikrokontrolery? To takie proste...


Cz 5 Mikrokontroler 8051 to takie proste!
Nie oznacza to, e w kadym przypadku ugania si bdziemy za moliwie naj szybsza wersj ukadu, nie zawsze przecie taka bdzie potrzebna. Wiedzie wszake trzeba e tak jak w przypadku wszystkich ukadw wykonanych w technologii MOS (CMOS, HMOS) wraz ze wzrostem czs totliwoci pracy ukadu wzrasta wydzielana w nim moc, czyli wzrasta pobierany przez procesor prd ze rda zasilania. Praktyczny wniosek nasuwa si sam je eli masz zamiar zastosowa procesor w ukadzie przenonym zasilanym np. z nie wielkiej baterii, z pewnoci nie uyjesz pro cesora 8051 w wersji 20MHz! Poborem mo cy oraz zagadnieniami z tym zwizanymi zaj miemy si w dalszej czci naszego cyklu. Przejdmy jednak do informacji prak tycznych. Musisz wiedzie, e czstotliwo (na zwijmy j jako Fxtal) uzyskiwana z rezona tora kwarcowego (doczonego do pinw 18 i 19) jest we wntrzu procesora kilka krotnie dzielona. I tak w praktyce spo tkasz si w literaturze i katalogach na te mat 8051 i podobnych z pojciami jak: a) dwufazowy sygna taktujcy procesor (Fs) sygna powstay z podzielenia przez 2 czstotliwoci oscylatora (np. przy kwarcu = 12 MHz, Fs = 6MHz). Sygna ten uywany jest bezporednio do taktowania ukadw wewntrznych procesora i nie jest dostpny na adnym z zewntrznych jego wyprowadze. b) sze cykli sygnau Fs skada si na tzw. cykl maszynowy procesora, czyli okres wykonywania elementarnej czynnoci (jakiej ?... za chwil) przez nasza kostk. Z prostych oblicze wyniknie Ci e, cykl maszynowy zajmuje: Fs x 6 = 2 x Fxtal x 6 = 12 cykli oscylatora, czyli dla np. Fxtal=12MHz bdzie to 1MHz. Cykl maszynowy jest bardzo wanym pojciem, z jego czstotliwoci (Fxtal/12) zachodz podstawowe czynnoci proce sora takie jak: pobieranie kodu rozkazw (czy to z we wntrznej pamici programu, czy z ze wntrznej) wykonywanie instrukcji programu pobieranie danych z zewntrznej pa mici (jak i z wewntrznej) zwikszanie wartoci wbudowanych licznikw: T0, T1 take T2 dla 8052 prbkowanie wej zewntrznych przerwa: INT0 i INT1 wystawianie sygnau ALE pin 30 (opi sywanego wczeniej) niezbdnego do zapisu modszej czci adresu multiplek sowanej szyny adresowej portu P0, przypomnij sobie wczeniejszy odcinek. Z czstotliwoci t taktowany jest take wbudowany port szeregowy w specjalnym trybie ustawionym przez uytkownika programowo. Warto wiedzie e cykl maszynowy dzieli si take na fazy (po 6 na kady cykl), jednak ich opis i znaczenie w praktyce przy

Zegar systemowy
O zegarze wspominaem na pocztku naszego cyklu, kiedy to poznawalimy wyprowadzenia mikrokontrolera. Czy pa mitasz funkcje jaka peni wyprowadze nia 18 i 19 procesora (w obudowie DIL 40)? Jeli nie to radz przeczyta stoso wny akapit w EdW 5/97 str. 41. Powiedziaem, e do poprawnej pracy, a w zasadzie w ogle do pracy, czyli do poruszenia caego procesora potrzeb ny jest zewntrzny obwd oscylatora. W praktyce taki obwd realizuje si do czajc zewntrzny rezonator kwarcowy o czstotliwoci z zakresu od mniej wi cej 1MHz do 16MHz. W handlu spotyka si take wersje 8051 mogce pracowa w szerszym zakresie: od pojedynczych Hz (wersje cakowicie statyczne CMOS) do nawet: 33...40MHz. W ka dym przypadku producent konkretnego modelu procesora umieszcza na jego obudowie oprcz nazwy ukadu take symbol liczbowy okrelajcy maksymal n czstotliwo zewntrznego sygnau taktujcego (ktra w praktyce jest take rwna doczanemu rezonatorowi kwar cowemu). Nie bdziemy jednak si za jmowa tutaj sposobami oznaczania po szczeglnych wersji 8051, nie to jest w tej chwili najwaniejsze, wane jest to e im wiksza czstotliwo graniczna procesora, tym oczywicie ukad bdzie mg pracowa szybciej.

ELEKTRONIKA DLA WSZYSTKICH 9/97

39

Te to potrafisz
konstruowaniu wikszoci urzdze jest niepotrzebne, dlatego nie bdziemy si tym w biecym odcinku zajmowa. Rysunek 1 ilustruje zalenoci czaso we pomidzy omwionymi podstawowy mi pojciami spotykanymi podczas oma wiania zegara i cyklu maszynowego. Warto o tym pamita. wany oraz z zalenoci od potrzeb jest generowane odpowiednie przerwanie); licznik mona w dowolnym momencie uruchomi (zezwoli na zliczanie) lub zatrzyma wydajc w programie odpo wiedni komend; do licznika mona w kadej chwili wpisa dowolna warto (16bitowa liczb), co spowoduje e licznik bdzie zlicza impul sy od tej wartoci a do przepenienia; wpisu takiego najlepiej jest dokonywa w czasie gdy licznik jest zatrzymany; dodatkowo licznika mona bram kowa czyli uzaleni jego prac lub zatrzymanie w zalenoci od stanu pa nujcego na wejciach: INT0 dla liczni ka T0 oraz INT1 dla licznika T1; oprcz tego licznik T1 (jak i T2 w 8052) moe taktowa wbudowany port szeregowy w specjalnym trybie ktry opiszemy przy okazji omawiania tego bloku procesora. W przypadku uywania licznikw do zli czania impulsw zewntrznych naley wiedzie, e maksymalna czstotliwo (Fmax) zliczanych impulsw jest cile za lena od czstotliwoci oscylatora kwar cowego Fxtal i okrelona jest zalenoci: Fxtal F max = 24 Czyli w przypadku zastosowania kwarcu o czstotliwoci 12 MHz maksymalna czs totliwo impulsw na wejciu licznika mo e wynie 500kHz dodatkowo przy zaoe niu e przebieg ma wypenienie 1:2. Ograni czeni wynika z faktu, e liczniki T0 i T1 (tak e T2) fizycznie nie wygldaj jak np. 7493, lecz zliczaj na zasadzie prbkowania we jcia impulsw w celu stwierdzenia czy jest logiczne 0 a nastpnie 1. Operacja ta odbywa si na synchronicznie z cyklem ma szynowym o ktrym mwilimy wczeniej. W kadym cyklu maszynowym procesor prbkuje wspomniane wejcia licznikw, to te stwierdzenie, e na jednym z wej syg na zmieni warto z 0 na 1 lub od wrotnie zajmuje 2 cykle maszynowe std bierze si Fmax. Przy projektowaniu ukadw dla bez pieczestwa warto jednak granic t nieco obnia (np. do 480 kHz przy Fxtal=12MHz). Podane moliwoci wykorzystania licz nikw jako np. wej mierzcych czstot liwo nie s zbyt imponujce. Jednak jak si sam przekonasz w przyszoci ta kie wykorzystanie licznikw procesora np. do bezporedniego mierzenia czs totliwoci wejciowej jest niepraktyczne. Dlaczego, w odpowiedzi podaj przykad. Wyobra sobie e chcesz zmierzy czstotliwo rzdu kilku (kilkunastu MHz) a wic znacznie przekraczajc moliwo ci licznikw procesora. Do mierzenia ka dej czstotliwoci w zwykych miernikach wykorzystuje si dwa sygnay: mierzony i oczywicie bramkujcy. Ten drugi pocho dzi zazwyczaj z wbudowanego w przyrzd generatora wzorcowego i powstaje przez wielokrotne podzielenie czstotliwoci ge nerowanej najczciej za pomoc rezona tora lub generatora kwarcowego. Nasuwa Ci si pewnie w tej chwili myl: ... No dobrze wykorzystam gene rator procesora a waciwie jeden z jego licznikw do odmierzania czasu bramko wania a drugim licznikiem mierz impulsy wejciowe i bd mia szukan czstotli wo, tylko e kilka MHz to stanowczo zbyt wiele na mj procesor ... A gdyby tak odwrci role i zlicza impul sy wewntrzne o czstotliwoci przecie znanej i rwnej Fxtal / 12, a sygna wejcio wy wielokrotnie podzieli i wykorzysta do bramkowania licznika. Wtedy w zasadzie otrzymamy nie czstotliwo ale okres przebiegu wejciowego, ale od czego ma my mikroprocesor, ktry potrafi wykonywa obliczenia arytmetyczno logiczne. Potrafi on take dokona odwrcenia wyniku okre su w efekcie czego otrzymamy liczbowa warto mierzonej czstotliwoci. Tak wic w prosty sposb mona dokona pomiaru dowolnej czstotliwoci wejciowej a przy okazji wywietli ciekawskiemu uytkowni kowi take okres badanego przebiegu. Rysunek 2 ilustruje zasad pomiaru czstot liwoci, ktr najczciej wykorzystuje si w ukadach z mikroprocesorem. Wbrew po zorom metoda ta daje wietne wyniki oraz pozwala uzyska du dokadno pomiaru przy krtkich czasach bramkowania. Naley tylko czstotliwo wejciow podzieli przez tak warto ktra da wy nik zbliony do wymaganego okresu bramkowania. Dodatkowy sprztowy pro gramowany dzielnik najprociej jest wyko na chociaby za pomoc kaskadowo po czonych 4bitowych licznikw binarnych 7493 lub podwjny 74393 wraz z multi plekserem np. 74151 (sprawdzi w katalo gu). Wejcia multipleksera decydujce o stopniu podziau sterowane bd oczy wicie z wolnych kocwek dowolnego portu mikroprocesora 8051 (np. z P1).

Ukady czasowolicznikowe
Pod pojciem tym kryj si wielokrot nie wspominane dwa 16bitowe liczniki T0 i T1 oraz dodatkowy licznik T2 ktry wystpuje w procesorze 8052. Najoglniej mwic kady z tych liczni kw a waciwie ukadw czasowoliczni kowych jest tak uniwersalnym blokiem e z wykorzystaniem jego mona dokona nastpujce dwie podstawowe operacje: a) za pomoc T0 (T1 lub T2) mona zlicza impulsy z zewntrznego wejcia liczni kowego; pin 14 dla T0 i pin 15 dla T1 (tryb licznika) oraz b) mona zlicza wewntrzne impulsy po chodzce z ukadu taktujcego proce sor, w kadym przypadku bdzie to sygna o czstotliwoci = Fxtal / 12. Czyli jeeli dopielimy do mikrokont rolera kwarc o czstotliwoci 6 MHz to czstotliwo sygnau taktujcego licz nik T0 lub T1 (T2) bdzie rwna 6 MHz/12 = 500 kHz. W tym trybie zwanym czasomierzem, liczniki wyko rzystuje si do odmierzania pewnych okrelonych programowo przez uyt kownika odcinkw czasu (opnie) i generowania przerwa po przepenie niu ktrego z licznikw. W dalszej czci artykuu przedstawi przykad takiego zastosowania. W przypadku wykorzystania ukadu licznikowego w obu przypadkach naley wiedzie e: maksymalna liczba zliczonych impulsw jest okrelona pojemnoci 16bitowe go licznika, czyli 2 do potgi 16 = 65536 (licznik zlicza od 0 do 65535 po czym po nadejciu kolejnego impulsu jest zero

Rys. 1. Zegar, faza, a cykl maszynowy procesora 8051

40

ELEKTRONIKA DLA WSZYSTKICH 9/97

Te to potrafisz

Rys. 2. Zasada pomiaru czstotliwoci z wykorzystaniem mikroprocesora Uzyskany na wyjciu multipleksera przebieg doprowadzony zostanie do we jcia bramkujcego licznik INT0 dla licz nika T0 lub INT1 kiedy zlicza licznik T1. W tym przykadzie oczywicie licznik b dzie zlicza impulsy wewntrzne, tak wic poszukiwana czstotliwo mona bdzie obliczy z proporcji Dla przykadu zamy e zewntrzny programowany dzielnik dzieli czstotli wo mierzon przez 64 tak, e na wyj ciu multipleksera otrzymujemy przebieg ktrego okres, a wic czas od jednego np. ujemnego zbocza do drugiego ujem nego zbocza, wynosi tyle, e wewntrzny licznik procesora bramkowany tymi zbo czami zliczy w czasie jednego okresu 54532 impulsy (ktrych czstotliwo przy zastosowaniu kwarcu 12MHz wyno si 1MHz). Skomplikowane? Przeczytaj to zdanie jeszcze raz i postaraj si zrozu mie. No i jak z tego policzy czstotli wo? Z naszego wzoru! Tak wic: mo pozornie trudniejszego sposobu mie rzenia tej wielkoci. Po tym maym przykadzie wracajmy do tematu naszego odcinka. Fizycznie 16bitowe liczniki T0, T1 i T2 s zbudowane z dwch 8bitowych powek, do ktrych programista ma dostp na poziomie programu. W czasie zliczania impulsw przeniesie z modsze go bajtu licznika nazywanego jako TL po woduje automatyczn inkrementacj baj tu starszego TH, przy jednoczesnym wy zerowaniu bajtu TL. Taka sytuacja przed stawia jeden z kilku trybw w ktrym dwie powki stanowi cao 16bito wy licznik. W mnemonice (nazewnictwie) 8051 wspomniane dwie powki liczni kw maja swoje oznaczenia, i tak: dla licznika T0 s to TH0 i TL0 (starsza i mod sza cz), dla licznika T1 TH1 i TL1. Po dobnie jest w przypadku licznika T2 w procesorze T2, gdzie mamy: TH2 i TL2. W praktyce uytkownik ma moliwo zaprogramowania licznikw w kilku in nych trybach pracy, nie mniej uytecz nych. W sumie jest ich 4, nazywane po tocznej : trybem 0, 1, 2 i 3. Poniej opi szemy je po krtce. Ze wzgldu na to e liczniki T0 i T1 s bliniaczo podobne b dziemy odwoywa si przy opisie tylko do licznika T0. Ze wzgldu na rozbudowa ne funkcje licznik T2 zostanie opisany w dalszej czci artykuu osobno.

Fx Lx = Fwew Lwew
gdzie: Fx czstotliwo szukana Fwew czstotliwo imp. wewn trznych = Fxtal / 12 Lx liczba zliczonych impulsw z zewntrz Lwew liczba impulsw zliczonych przez licznik wewntrzny W przypadku kiedy sygna mierzony wykorzystujemy jak w naszym przyka dzie do bramkowania to Lx = 1 tote po przeksztaceniu otrzymamy:

Fx =

64(dzie ln ik)1000000 = 1173 Hz 54532

Fx =
ale Lx = 1 to

1 Lwew Fwew Fwew Lwew

Fx =

Wynik naley jeszcze pomnoy przez warto dzielnika sprztowego, czyli wzr przyjmie posta: Fwew Fx = Dz [Hz] Lwew gdzie Dz to dzielnik pamitajc e

Sprawdmy na chopski rozum czy aby wynik jest w porzdku: licznik procesora w przecigu jednego okresu podzielonego przebiegu wej ciowego zliczy 54532 impulsy kady po 1us (mikrosekundzie) przy zegarze 12MHz tak wic okres podzielonego przebiegu z wejcia wynosi: 54532 s (mikrose kundy), czyli 54,532 ms (milisekundy). odwracamy t warto i uzyskujemy liczb: 18,3378 pamitajc o dzielniku wstpnym mno ymy otrzyman liczb przez niego czy li przez 64 otrzymujemy wynik:
Fx = 18.337864 = 1173 Hz

Tryb 0
W tym trybie licznik pracuje w konfigu racji 13bitowej. Starszy bajt TH0 zawiera 8 bardziej znaczcych bitw licznika (bity 7...0 TH0), natomiast 5 pozostaych bitw to najstarsze bity z TL0 (bity 7...3). Trzy najmodsze bity bajtu TL0 s nieistotne i ignorowane przez procesor. Rysunek 3

Fwew =

Fxtel 12

gdzie Fxtal czstotliwo oscylatora.

tak wic si zgadza. Uff, jeeli masz do oblicze, odpocz nij chwil, w kadym razie musisz pami ta e z wykorzystaniem procesora mo liwoci obliczeniowe oraz atrakcyjno przyrzdu pomiarowego wzrasta, pomi

ELEKTRONIKA DLA WSZYSTKICH 9/97

41

Te to potrafisz
przedstawia konfiguracj licznika T0 (T1) w tym trybie. Do licznika (do bajtw TH0 i TL0) mo na wpisa dowolna warto pamitajc, e 3 najmodsze bity sowa TL0 bd ig norowane. Licznik po uruchomieniu b dzie zlicza od wartoci wpisanej na po cztku (moe to take by warto 0) do wartoci maksymalnej czyli 2131=8191 po czym si wyzeruje, dodatkowo zga szajc jeeli potrzeba przerwanie infor mujce program o tym fakcie. Jeeli nie ktrych z Was denerwuje te przer wanie to nie bd trzyma w niepew noci i wyjani na czym polega istota zgoszenia przerwania w momencie prze penienia licznika. Wyobra sobie e chcesz odmierza rwnomierne odstpy czasu o dugoci np. 2,45 ms (milisekund). Co robisz? Ma jc do dyspozycji procesor z kwarcem np. 12 MHz wpisujesz do licznika T0 warto pocztkow rwn: warto_maksymalna_licznika_T0 + 1 2450 Dlaczego 2450? Bo jest to 2450 x 1s = 2,45 ms A skd 1 s? Bo przecie jest to czstotliwo zliczania wewntrznych impulsw = Fxtal / 12). Tak wic po odjciu otrzymasz liczb: 8191 + 1 2450 = 5742, ktr zanim wpi szesz do licznika T0 musisz pomnoy dodatkowo przez 8 (1000 binarnie) bo pa mitaj przecie e trzy najmodsze bity 2..0 TL0 s ignorowane. Teraz po wpisaniu uruchamiasz licznik, ktry liczy w gr od wartoci wpisanej: 5742 a do przepenienia 8191 czyli 2450 impulsw, zajmie mu to wic dokadnie 2450 us czyli 2,45 ms, po czym zgoszo ne zostanie przerwanie, w ktrym Ty przyszy programisto okrelisz co akurat ma si wydarzy po upyniciu 2,45 ms.

Tryb 1
Tryb ten jest bardzo podobny do trybu 0, z tym e do zliczania wykorzystywane s wszystkie 16bitw licznika. Std nasuwa si wniosek e maksymaln pojemno licznika w tym trybie wynosi 65535, po czym nastpuje przepenienie czyli wyze rowanie z ustawieniem znacznika zgosze nia przerwania (jeeli jest taka potrzeba). Tryb ten najczciej wykorzystuje si do generowania przerwa majcych na celu odmierzanie czasu np. przy zegarze czasu rzeczywistego. Przykad zastoso wania moe by taki jak poprzednio zwiksza si tylko zakres mierzonych od stpw czasu.

a waciwie do okrelenia szybkoci transmisji danych przez ten port. Wtedy jednak licznik nie moe spenia innych funkcji, np. generowa przerwa przy przepenieniu.

Tryb 3
Tryb ten dotyczy obu licznikw T0 i T1 procesora na raz. Ot w trybie tym licz nik T1 jest zatrzymany i nie pracuje. Dwa bajty licznika T0: TH0 i TL0 pracuj jako dwa niezalene 8bitowe liczniki, przy czym istniej pewne ograniczenia co do ich funkcji, a mianowicie: TL0 moe liczy impulsy z wejcia T0 lub pracowa jako czasomierz zliczajc impulsy wewntrzne (Fxtal / 12) TH0 moe pracowa tylko jako czaso mierz, czyli zlicza impulsy wewntrzne Tryb ten zosta zaimplementowany przez twrcw 8051 po to, aby w wypad kach kiedy licznik T1 uywany jest do okrelania szybkoci transmisji poprzez port szeregowy, a programicie niezbd ne s dwa dodatkowe liczniki, ktrych ro le speniaj wtedy wspomniane TL0 i TH0. W obecnych czasach, jeeli zachodzi taka potrzeba, czasem lepiej jest zastoso wa procesor w wersji 80C52 z wbudo wanym trzecim licznikiem T2. Niemniej jednak warto wiedzie o tym nietypo wym trybie licznikw T0 i T1.

Tryb 2
Nieco ciekawszy jest tryb 2, w ktrym pracuje tylko modsza powka 16bito wego licznika a wic TL0 (TL1 dla licznika T1). Omiobitowy licznik TL0 zlicza w g r a do wartoci maksymalnej czyli 255, po czym ... tu uwaga! Automatycznie zo staje przepisana do niego warto po cztkowa ze starszej powki TH0. Tak wic raz wpisujc do TH0 jak warto, nie musimy si martwi aby zrobi to programowo powtrnie przy przepenie niu pracujcego licznika TL0. Tryb ten ma wiele zastosowa, szcze glnie przydaje si tam gdzie potrzebne jest generowanie przerwa w rwnych odstpach czasu, np. przy generacji syg nau prostoktnego o zadanej czstotli woci i wypenieniu. O tym jak to si reali zuje dowiesz si Czytelniku podczas nauki programowania 8051. Na razie proponuj Ci si nad tym zastanowi samemu. Po mocny bdzie rysunek 4 na ktrym poka zana jest struktura licznika w trybie 2. Warto take wiedzie, e tryb ten w liczniku T1 wykorzystuje si do takto wania portu szeregowego procesora,

Licznik T2 w kostce 80C52


W mikrokontrolerze 80C52 wystpuje dodatkowy licznik nazywany T2. Podob nie jak licznik T0 i T1 jest on 16bitowy. Posiada jednak kilka dodatkowych funkcji ktre rozszerzaj jego moliwoci. Zacz nijmy jednak po kolei. Podobnie jak w licznikach opisanych wczeniej licznik T2 skada si z dwch bajtw TH2 (starszy) i TL2 (modszy). Po

Rys. 3. Struktura licznikw T0 i T1 w trybie 0 (a take w trybie 1)

42

ELEKTRONIKA DLA WSZYSTKICH 9/97

Te to potrafisz

Rys. 4. Struktura licznikw T0 i T1 w trybie 2 dobnie jak T0 i T1 licznik T2 moe peni rol czasomierza, czyli zlicza impulsy wewntrzne pochodzce z zegara proce sora, moe take zlicza impulsy zewnt rzne dziki alternatywnej funkcji jednego z pinw portu P1 a mianowicie P1.0 nka 1 procesora 8052. Licznik ten posiada take moliwo automatycznego zaadowania wartoci pocztkowej okrelonej przez uytkowni ka a zapisanej w dwch oddzielnych re jestrach 8bitowych (ktre w sumie daj 16bitow warto pocztkow) zwanych RLDH i RLDL (patrz odcinek w EdW nr 6/97 tabela rejestrw specjalnych SFR). Funkcja ta dziaa podobnie jak w liczni ku T0 (T1) ustawionym w trybie 2. Za uwamy jednak e w przypadku T2 pra cuje cae 16bitw licznika i cae 16bitw z RLDH.RLDL moe by automatycznie zaadowane, kiedy licznik zostanie prze peniony. Z licznikiem T2 w kostce 80C52 zwiza ny jest dodatkowy take alternatywnie wy korzystywany pin portu P1 (zwany T2EX) a mianowicie P1.1 nka 2. Ot jeeli za chodzi potrzeba, programista moe wyko rzysta t kocwk do zewntrznego bramkowania licznika T2, co bardzo czsto przydaje si podobnie jak przy bramkowa niu licznikw T0 i T1 sygnaami INT0 i INT1. I tak w przypadku gdy T2 pracuje jako licznik liczcy zewntrzne impulsy, opada jce zbocze na kocwce T2EX spowodu je automatyczne natychmiastowe zaado wanie licznika T2 TH2 i TL2 wartoci zdefiniowan w rejestrach RLDH.RLDL. Do czego to wykorzysta? Jest wiele praktycznych zastosowa ot chociaby funkcja autoadowania pod wpywem ze wntrznego sygnau moe by przydatna do synchronizowania pracy wewntrzne go licznika z zewntrznym sygnaem ze garowym o niszej czstotliwoci. Jeeli za licznik T2 pracuje w roli cza somierza, to wejcie T2EX mona wyko rzysta do automatycznego przepisania aktualnej wartoci rejestrw TH2.TL2 do rejestrw RLDH.RLDL. Mona powie dzie e dziaanie w tym trybie (czaso mierza) jest jakby odwrotne do sposobu w trybie licznika. Warto zostaje przepi sana do rejestrw RLDH.RLDL a nie od wrotnie jak to miao miejsce w przypadku pracy T2 w trybie licznika impulsw ze wntrznych. W praktyce takie dziaanie umoliwia np. na bardzo dokadny pomiar przebie gw wolnozmiennych bez koniecznoci stosowania dodatkowych ukadw scalo nych. Odpowied na pytanie A jak to si robi...? otrzymasz drogi Czytelniku przy okazji kursu programowania 8051. Na koniec istotna dodatkowa informa cja dotyczca licznika T2. Podobnie jak licznik T1, T2 moe w zalenoci od po

Rys. 5. Struktura licznikw T0 i T1 w trybie 3

ELEKTRONIKA DLA WSZYSTKICH 9/97

43

Te to potrafisz

Rys. 6. Budowa licznika T2

trzeb, taktowa port transmisji szerego wej. W takim przypadku moliwe jest roz szerzenie zakresw prdkoci transmisji o dodatkowe wartoci niedostpne przy tradycyjnym taktowaniu portu poprzez licznik T1, jak to opisano wczeniej. Po tej porcji wiadomoci, w nastp nym odcinku pozostanie nam do om

wienia ukad transmisji szeregowej oraz ukad przerwa. Te pozostae dwa bloki funkcjonalne zakocz cz zaznajamia jc Ciebie drogi Czytelniku z procesora mi 8051 i 8052. Wkrtce rozpoczniemy omwienie wszystkich rejestrw specjalnych, ale to ju przy okazji pierwszych krokw w pro

gramowaniu 8051. A propos,... czy za poznae si ju z ukadem Komputerka edukacyjnego z 8051 opisanym w po przednim i tym numerze EdW? Bdzie on niezbdnym narzdziem podczas lek cji, tote warto pomyle o jego zmonto waniu. Sawomir Surowiski

44

ELEKTRONIKA DLA WSZYSTKICH 9/97

Te to potrafisz
W kolejnym odcinku naszego cyklu, ktrego celem jest poznanie i naucze nie si programowania mikrokontrole rw serii MCS51, postanowiem od oy na bok pozostae do omwienia bloki funkcjonalne procesora 8051 (port szeregowy, system przerwa, specjalne tryby pracy), a wrzuci Ci, drogi Czytelniku gar informacji po chodzcej troch z innej beczki. Chodzi mianowicie o krtkie, aczkol wiek wystarczajce zapoznanie si z podstawowymi pojciami dotyczcy mi obsugi tych wszystkich mdro ci, o ktrych od kilku miesicy uwa nie czytasz czyli o sposb progra mowania, czyli: czym?, jak?, i dlacze go?... si ten procesor programuje. Decyzja moja jest po czci Wasz, prawdopodobnie przecie wikszo z Was ma ju swj Komputerek edu kacyjny, ktrego konstrukcja zostaa opisywana w dwch poprzednich nu merach EdW. A skoro wydae na to swoje oszczdnoci, to dobrze by by o, nie patrze tylko na te cudeko ale je w kocu wyprbowa!

Mikrokontrolery? To takie proste...


Cz 6 Asembler jzyk maszynowy procesora
trzebny jest jzyk porozumiewania si z mikroprocesorem. Ten jzyk najczciej nazywa si jzykiem maszyno wym. Brzmi bardzo powanie, praw da? Tak na prawd jzyk ten jest prostym zbiorem polece, dziki ktrym moliwa jest nie tylko ingerencja we wszystkie wspominanie bloki funkcjonalne proceso ra, ale take wykonywanie okrelonych logicznych czynnoci: sprawdzanie wa runkw czy operacje arytmetycznolo giczne. Sam jzyk maszynowy to na po zr nieczytelny dla czowieka cig liczb. Aby spraw uproci stworzono posta jawn jzyka maszynowego asemb ler. W jzyku tym kolejne polecenia opi sywane s za pomoc sownych instruk cji uzupenionych odpowiednimi do danej sytuacji argumentami. Tak posta jest ak ceptowalna przez programist, dziki te mu program pisze si po prostu w dowol nym edytorze tekstowym (np. na kompu terze), nastpnie dokonuje si zamiany (translacji) tak napisanego programu na wspomniany cig liczb czyli jzyk ma szynowy procesora. Tak jak istnieje na wiecie wiele jzy kw porozumiewania si midzy ludmi, tak samo w rodzinach rnych mikroproce sorw, czsto pochodzcych od rnych producentw, istnieje wiele jzykw, wszystkie jednak to jzyki maszynowe. Producenci oprogramowania tworz bardziej zaawansowane tzw. jzyki wyszego poziomu, syszae zapew ne o takich jak Pascal, C, Basic oraz inne. Tak naprawd to s to translatory bardziej zoonych polece danego jzyka wy szego poziomu na kod maszynowy pro cesora. Zawsze na samym kocu obrb ki programu uytkownika, czy powsta on w takim czy innym jzyku powstaje i za wsze kod maszynowy, ktry akceptuje dedykowany mikroprocesor. W przypadku pisania wikszoci pro gramw na kontrolery 8051 (lub kade inne jednoukadowce), szczeglnie podczas nauki, kady pocztkujcy musi pozna jego jzyk maszynowy, czyli asembler. Dziki temu pniej, kiedy nauczy si nim biegle posugiwa, b dzie mie dua swobod i moliwo obiektywnej oceny w wyborze dowolne go innego narzdzia wspomagajcego programowanie tego procesora, ale to zupenie inna historia. Oglnie mona powiedzie, e pisanie programu na procesor to po prostu two rzenie kolejnych polece, z ktrych w efekcie powstaje cay program. Tworzenie to np. pisanie w dowolnym edytorze tekstowym ASCII w przypadku posiadaczy komputerw. Pozostae oso by nie majce dostpu, mog taki pro gram napisa chociaby na kartce papie ru (aczkolwiek w przypadku wikszych programw jest to bardzo trudne, czy wrcz niemoliwe).

Do wsplnego zrealizowania tego za dania niezbdnych jest kilka informacji oraz zrozumienie pojcia programowa nia ukadu scalonego w naszym przy padku mikroprocesora. Zanim przejd do wyjanienia tych po j, pragn uspokoi wszystkich drobiaz gowych Czytelnikw, e wspomniane po zostae bloki funkcjonalne procesora omwi w nastpnych odcinkach nasze go cyklu, ale tym razem... uwaga: na go rco, czyli z wykorzystaniem naszego edukacyjnego ukadu. Tym wszystkim, ktrzy nie zaopatrzyli si w dedykowany temu kursowi, kom puterek, radz o jak najszybsze zmonto wanie go, dziki czemu bdziecie, moi drodzy, na bieco praktycznie wykony wa wszystkie zadania. A wic zacznijmy od najwaniejszego stwierdzenia: Mikrokontroler bez pro gramu jest jak onierz bez.... wiesz bez czego. I jest to wita racja. Jak sam zd ye si zorientowa ledzc poprzednie odcinki kursu, e kostka 8051 zawiera w swojej strukturze cae mnstwo uy tecznych elementw takich jak np. pa mi programu, danych, programowane ukady licznikowe, stos, itd. Wszystko faj nie... tylko jak nad tym wszystkim zapa nowa?.... Ot aby odpowiednio wyko rzysta zasoby kontrolera i zmusi je do pracy zgodnie z naszym zamysem i prze znaczeniem konstruowanego ukadu, po

44

ELEKTRONIKA DLA WSZYSTKICH 10/97

Te to potrafisz
Polecenie zwykle zawiera si w jednej linii programu. Jego skadnia jest zasadni czo okrelona, z reguy mona j przed stawi jako: instrukcja <argument_1>, <argument_2>.....(1) Czasami przed instrukcj wystpuje take etykieta zakoczona znakiem : (dwukropka), np. etyk01:, ktrej zada niem jest po prostu nazwanie danej linii polecenia. Ilo argumentw w linii pole cenia moe by rna w zalenoci od ro dzaju instrukcji. W przypadku asemblera procesora 8051 i pochodnych liczba ta waha si od zera w przypadku instrukcji bezargumentowych do trzech. Zasad jest e poszczeglne argumenty oddziela si zawsze znakiem ,: (przecinka), na tomiast instrukcja oddzielona jest od pier wszego argumentu spacj (odstpem) lub znakiem tabulacji (to informacja dla komputerowcw). Podajmy przykad polecenia dla proce sora 8051 w ktrym procesor wykonuje dodawanie zawartoci dwch jego rejes trw: ADD A, B (2) W poleceniu tym wystpiy: instrukcja: ADD argumenty: A rejestr A (akumulator) oraz rejestr B W nazewnictwie asemblerowym pier wsz cz polecenia, czyli instrukcj (np. ADD ) nazywa si mnemonikiem, tote od tego momentu bdziemy posu giwa si tym zwrotem. Aby otrzyma wynik dodawania naley doda do siebie dwa argumenty. Pierwszy argument (ja ka liczba) znajduje si w akumulatorze procesora 8051, druga za w tym przy padku w rejestrze B. W wyniku wykona nia przytoczonego polecenia procesor do da do zawartoci rejestru A warto z re jestru B, a wynik umieci w rej. A (aku mulatorze). Powiedzmy e chcemy do da dwie liczby: 25 + 43. W tym celu mu simy wpisa te warto (skadniki doda wania) do rejestrw procesora a potem jej doda poleceniem (2). Mona to zrobi w sposb nastpujcy: MOV A, #25 (3) MOV B, #43 (4) ADD A, B (5) W liniach 3 i 4 rozkazalimy procesoro wi wpisanie skadnikw odpowiednio do rejestrw A i B, dziaanie polecenia w linii (5) jest Ci ju znane. Osoby znajce asembler i moliwoci 8051 pewnie si troch zamiej z przykadu (3)...(5), bowiem dodawanie 2 staych da si zapisa krcej w dwch liniach, lecz nie o to nam chodzi, przynaj mniej na tym etapie kursu. Mnemonik MOV ma wiele zastoso wa w jzyku procesorw 51, na jzyk polski mona j przetumaczy jako przemieszczenie (przesunicie) czego gdzie. Czego i gdzie to zaley od kontek stu, czyli od rodzaju argumentw, ale o tym za chwil. Linia (3) oznacza do sownie w tumaczeniu na jz. polski: wpisz do akumulatora liczb 25, linia (4) wpisz do rejestru B liczb 43, linia (5) dodaj do akumulatora zawarto rejest ru B. W efekcie wykonania tych 3 pole ce w akumulatorze bdzie wynik doda wania, czyli liczba 68 (binarnie bdzie to 01000100). Jeeli teraz kaesz proceso rowi wykona np. polecenie MOV P1, A (6) spowoduje to e liczba 68 pojawi si na kocwkach portu P1 procesora, oczy wicie w postaci binarnej. Aby to spraw dzi naocznie wystarczy doczy do ka dej z 8miu jego kocwek (piny 1...8 8051/2) diod wiecc z rezystorem, z pewnoci zapalone zostan diody do czone do kocwek: 3 i 7 (na tych pozy cjach liczby 68 w postaci binarnej jest 1. Procesor po prostu w wyniku poda nia polecenia (6) wpisa zawarto aku mulatora do rejestru portu P1. No ale na razie wystarczy przykadw, wyjanimy sobie teraz, jak fizycznie pro cesor akceptuje instrukcje, no bo prze cie nie zje od razu cigu liter ukadaj cych si w napis chociaby z przykadu (6). Ot asembler procesora 8051 posia da okrelon liczb mnemonikw oraz okrelone rodzaje argumentw. Jeeli jeste ciekawy to powiem Ci e mnemonikw jest nie tak wiele bo 42. W przyszoci bdziesz musia je poz na i zapamita, ale nie przejmuj si, nie jest to duo, przy okazji praktycznego pro gramowania same wpadn ci do gowy i ju zostan...na zawsze. Jeeli chodzi o argumenty to wyrnia si kilka ich rodzajw, nie bd teraz szczegowo wylicza ich wszystkich, pierwszy ich rodzaj argument bezpo redni, poznae w przykadzie dodawa nia dwch rejestrw liczby: #25 i #43. W zalenoci od rodzaju argumentw jakie wystpuj po mnemoniku, rne jest dziaanie caego polecenia instruk cji. W architekturze procesorw 8051 konstruktorzy wyrnili 255 takich sytua cji i ponumerowali je od 0 do 255 (FFh szesnastkowo). Tak powstao 255 instrukcji procesora (nie 256 bo jeden numer nie jest wyko rzystany). I jak si pewnie niedugo przekonasz z punktu widzenia programisty uyt kownika liczba ta jest mniejsza, to jednak naley zapamita ten fakt. Jeeli zatem cay zbir instrukcji pro cesora daje si przedstawi jako liczba wraz z towarzyszcymi jej ewentualnie argumentami, z ktrych kady take daje si przetumaczy na liczb, w efekcie mona wywnioskowa, e cay program pisany przez uytkownika w postaci rdowej (literowej) mona przetuma czy na cig liczb. Mao tego, wszystkie te liczby mog zawiera si jedynie w 8 bitach, co idealnie pasuje architektu ry naszego procesora jest on przecie prawdziwym omiobitowcem. Zamienio ny do takiej postaci Twj program wy starczy teraz miao wpisa do poszcze glnych komrek pamici EPROM bd samego procesora (gdy ten pracuje w trybie z wewntrzn pamici progra mu np.87C51) lub do kostki EPROM z ktrej pniej procesor bdzie pobiera instrukcje. Operacj programowania pamici EP ROM przyprowadza si oczywicie za pomoc specjalizowanych narzdzi do programowania procesorw tzw. pro gramatorw. Na pocieszenie powiem Ci e w ofercie handlowej AVT pod nazw AVT320 znajduje si taki programator idealnie nadajcy si do programowania wszystkich dostpnych na rynku kostek serii MCS51. W przyszoci, kiedy nab dziesz ju umiejtnoci swobodnego surfowania (to ostatnio bardzo popu larne sowo) wrd rodziny 51nek, z pewnoci takie narzdzie Ci si przy da. To przyszo, na razie do tego etapu jeszcze wsplnie nie doszlimy. Ca drog od pomysu na program po przez jego napisanie i zamian do postaci akceptowanej przez procesor i jedno czenie dajcej wpisa si do pamici programu procesora obrazuje rysunek 1.

Rys. 1. Od pomysu na program do jego realizacji

ELEKTRONIKA DLA WSZYSTKICH 10/97

45

Te to potrafisz
Wrmy na chwil do naszego proste go przykadu dodawania dwch liczb. Za piszmy instrukcje (3)...(5) z argumentami dodawania w postaci szesnastkowej: MOV A, #19h (7) MOV B, #2Bh (8) ADD A, B (9) Liczba 25 dziesitnie mona zapisa w postaci heksadecymalnej jako 19, a liczba 43 jako 2B, dodajc na kocu kadej z nich ma literk h co oznacza zapis e zapisalimy liczb w ta kiej wanie postaci. Sprbujmy teraz za mieni te trzy linie na posta liczbow (bajtow) akceptowan przez procesor. W licie rozkazw 8051 instrukcja: MOV A, jaka_liczba_8_bitowa ma numer (odtd bdziemy ten numer nazywa kodem rozkazu): 74h. Ale w linii (7) wystpuje jeszcze argument liczba staa 19h, dlatego ostatecznie li ni t w kodzie maszynowym (liczbowo) mona zapisa jako:74h, 19h. Podob nie tumaczymy lini (8). Odwoujc si do listy instrukcji (ktr ca niebawem poznasz), sekwencj: MOV B,jaka_liczba_8_bitowa tumaczymy jako: 75h, F0h, 2Bh. Trze cia linia za bdzie miaa posta: 25h, F0h. Skd to wszystko wiem? Ano ze wspomnianej listy instrukcji. Nie martw si w tej chwili nie jest Ci ona potrzebna, wane jest aby uzmysowi sobie w jaki sposb pisze si program w jzyku asemblera i jak go potem tumaczy si na jzyk maszynowy procesora czyli po sta liczbow. W efekcie po przetumaczeniu nasze go przykadu otrzymamy sekwencj liczb: 74h, 19h, 75h, F0h, 2Bh, 25h, F0h (10) Jeeli teraz poszczeglne liczby wpi szesz do kolejnych komrek pamici programu (czy to zewntrznej czy to we wntrznej) to po uruchomieniu ukadu procesor wykona dokadnie to czego do niego oczekujesz, czyli zaaduje dwa skadniki do dwch rejestrw procesora a nastpnie dokona operacji dodania ich. Uff, wygldao to do mozolnie, bo trzeba byo napisa instrukcje w posta ci asemblerowej czyli jawnej (linie 7,8,9), potem na podstawie bliej Ci nie znanej (na razie) tabeli instrukcji zamie ni program do postaci maszynowej, wreszcie umieci sekwencj w pa mici programu. W praktyce dziki zastosowaniu do wolnego komputera proces ten da si przypieszy. O ile kady program w postaci asem blera trzeba wstuka z klawiatury i zapi sa na dysku w posta pliku tekstowego (np. korzystajc z edytora popularnego Norton Commandera), to do przetuma czenia postaci rdowej za wykonywal n (maszynowej) su specjalne narz dzia (programy) zwane kompilatora mi. Dziki nim proces zamiany zwany dalej kompilacj kodu rdowego na maszynowy trwa czsto bardzo krtko, a tumaczenie nawet kilku tysicy linii nie trwa duej ni kilkanacie sekund. W efekcie dziaania kompilatora powsta je zbir z programem zapisany w postaci maszynowej, czyli cigu liczb jak zilustro waem na przykadzie dodawania liczb. Plik taki najczciej jest gotowy do uy cia przez programatory pamici EPROM (lub programatory procesorw). Taki zbir wietnie nadaje si te do zapisania w pamici operacyjnej twojego kompu terka edukacyjnego opisywanego w trzech ostatnich numerach EdW. Jee li posiadasz dowolny komputer klasy PC, bdziesz mg naby dyskietk z takim kompilatorem, dziki ktremu efekty twojej pracy bd natychmiastowe. Szczegowe informacje zawarte s w 3 czci opisujcej komputerek eduka cyjny na 8051 w tym numerze EdW. Jeeli nie masz dostpu do kompute ra, bdziesz zmuszony do tumaczenia przykadw z naszego kursu, rcznie na kartce papieru, korzystajc ze cigawki, ktr bdzie lista instrukcji procesora 8051. Lista taka ukae si w przyszym numerze EdW. Bdziesz j mg wyci i w razie potrzeby zafolio wa, chronic j tym samym przez znisz czeniem. I cho wszystkie przykady w czasie programowania bd do proste i daj ce si zrealizowa na papierze, to po winiene ju teraz pomyle o wyposae niu swego domowego kcika, nawet w przestarzay komputer klasy AT286 lub w muzealn wersj XT. Uytkownicy komputerw innych ro dzajw, np. Amiga, Commodore, Atari, posiadajcy interfejs szeregowy zgodny z RS232c bd mogli take ich uywa, do przesyania kodu maszynowego pisa nych przez siebie programw z kompu tera do naszego systemiku edukacyjne go. Musicie jednak kochani poszpera wrd swoich kolegw i namierzy kom pilator na procesory 8051 dziaajcy na waszym komputerze, bowiem na dys kietce oferowanej do naszego kursu zna jduje si zestaw programw na kompu tery klasy PC. W tym odcinku do nietypowo, umieszczamy pierwsze 5 wicze w czci III opisu zestawu AVT2250. Za praszam do lektury w tym numerze EdW. Sawomir Surowiski

46

ELEKTRONIKA DLA WSZYSTKICH 10/97

Te to potrafisz

W kolejnym odcinku powiconym naszym wsplnym staraniom maj cym na celu ujarzmienie mikrokont rolera 8051 postaram si zapozna Was drodzy Czytelnicy w przystp ny sposb z list instrukcji tego pro cesora. Na kocu tego odcinka cze ka na Was druga ju lekcja czyli kolejny praktyczny krok w nauce z wykorzystaniem naszego kompu terka edukacyjnego z 8051. Dzi wsplnie napiszemy i przeanali zujemy krtki ale ju prawdziwie asemblerowy program
W poprzednim odcinku poznae ju ide tworzenia programw na mikrokont rolery 8051. Wiesz e do tego celu nie zbdny jest zestaw instrukcji danego pro cesora (u nas jest to rodzina MCS51, kt ra ma wsplny jzyk programowania) oraz znajomo kodw numerycznych po szczeglnych instrukcji w przypadku kiedy nie masz dostpu do komputera i wszyst kie czynnoci musisz wykona rcznie. W przypadku kiedy do dyspozycji progra misty jest komputer, procedur tumacze nia instrukcji zapisanych jawnie w jzyku asemblera automatycznie wykonuje komputer korzystajcy z programu zwane go kompilatorem. Autor cyklu zadba, aby kady z Was drodzy Czytelnicy, niskim kosztem mg sta si posiadaczem takie go kompilatora. Jest on dostpny na dys kietkach 3,5 w ofercie handlowej AVT pod nazw AVT2250/D. Wan informacj jest to e zamieszczono tam dwie wersje kompilatora: wersj angielsk oraz pols k!. Jest to chyba pierwszy program tego typu komunikujcy si w naszym ojczys tym jzyku z programist. Dziki temu osoby nie znajce angielskiego bd mog y bez problemw korzysta z takiej wers ji kompilatora. Funkcjonalnie obie wersje s takie same, to znaczy e wykonuj wszystkie czynnoci identycznie, jedynie komunikaty zgaszane przez program wy stpuj w dwch ronych jzykach, jak wspomniaem wczeniej. Na dyskietce

Mikrokontrolery? To takie proste...


Cz 7 Asembler jzyk maszynowy procesora
znajduje si plik tekstowy z rozszerzeniem .DOC, w ktrym zawarte s informacje o kompilatorze i jego moliwociach nie zbdne do prawidowego posugiwania si nim. Dlatego nie zbd opisywa szczegowo tych spraw, poniewa wrd naszych czytelnikw s osoby nie majce komputera PC a poza tym kady zaintere sowany PCtowiec bdzie mia sam okaz j na zapoznanie si z instrukcj uytkowa nia programu. Ze wzgldu na mocno ograniczone moliwoci rcznej kompilacji tworzo nych przez Ciebie programw do postaci maszynowej, powiniene ju teraz zasta nowi si nad moliwoci nabycia lub przynajmniej korzystania z komputera PC, nawet poczciwej AT czy XT. Efektywne, pozbawione niepotrzebnych pomyek, tworzenie nawet mao skomplikowanych programw jest moliwe tylko przy wyko rzystaniu komputera oraz kompilatora, ktry jest dostpny dla wszystkich zainte resowanych po przystpnej cenie. W tym miejscy chc uspokoi wszyst kich antykomputerowcw. Wszystkie przedstawiane w cyklu przykadowe pro gramy bd drukowane w postaci czytel nej i jasnej take dla tego grona czytelni kw. Uatwi to analiz i pokae jak w praktyce tumaczy si komendy asem blera na jzyk maszynowy. W tym odcinku szkoy mikroprocesoro wej zapoznamy si z list instrukcji proce sora, oraz dodatkowo zbierzemy w ca o wiadomoci dotyczce wszystkich rejestrw specjalnych SFR take tych nie omawianych (na razie). Wszystko to jest umieszczone dodatkowo we wkadce wewntrz numeru w postaci kartki A4 z nadrukowanymi dwustronnie skrtowo wszysktimi informacjami niezbdnymi do rozpoczcie pisania wasnych programw oraz ich tumaczenia (asemblacji) w przy padku osb ktre musza to zrobi rcznie. Taka ciga powinna by przez Ciebie drogi Czytelniku wycita a nastpnie zafo liowana, by moga ci suy przez cay czas zabawy z procesorem 8051. Zawie szenie jej na cianie nad twoim biurkiem z pewnoci uatwi Ci poznanie i zapami tanie wszystkich instrukcji procesora, tak aby w przyszoci mg wada asemble rem tak ja wasnym ojczystym jzykiem gwarantuj Ci jest to moliwe! Przejdmy zatem do zapoznania si i wyjanienia dziaania wszystkich pole ce kontrolerw 8051. Lista instrukcji Informacje zawarte w tej czci artyku u s rozszerzeniem listy przedstawionej we wkadce wewntrz numeru. Dlatego analizuj opisy poszczeglnych instrukcji powiniene mie take przed oczyma wspomnian cig. Kiedy w przy szoci nabierzesz nieco wprawy w posu giwaniu si poleceniami asemblera, po trzebna bdzie Ci tylko strona z wkadki,

36

ELEKTRONIKA DLA WSZYSTKICH 11/97

Te to potrafisz
a do niniejszego opisu bdzie mg za wsze wrci w przypadku niejasnoci, szczeglnie wtedy jeeli bdziesz chcia tworzy programy nie majc dostpu do komputera PC. Tak wic zaczynamy. Opis kadej instrukcji skada si zasad niczo z nastpujcych elementw: nazwy angielskiej i polskiej instrukcji: pkt. a) krtkiego opisu dziaania instrukcji: pkt. b) wyszczeglnienia znacznikw na ktre dziaa instrukcja: pkt. c) opisu szczegowego instrukcji lub jej rodzajw: pkt. d), wraz z podaniem for matu i kodw maszynowych instrukcji, w zapisanych binarnie i heksadecymal nie, z podaniem iloci cykli i bajtw ko du oraz ewentualnie poparte przyka dem lub uwagami dotyczcymi efek tw uycia danej instrukcji. Wikszo z tych informacji znajduje si take w tabeli zestawieniowej instruk cji we wkadce wewntrz numeru.
Operacje arytmetyczne ADD a) ang. add to acummulator dodaj do aku mulatora b) Do wartoci przechowywanej w akumulato rze dodawany jest wskazany argument, a wynik zostaje wpisany do akumulatora. c) znaczniki: C, AC i OV d) rodzaje instrukcji: ADD A , Rn do akumulatora dodawana jest zawarto rejestru Rn A < A + Rn gdzie Rn = R0...R7 (jeden z rejestrw roboczych) kod: 0 0 1 0 1 n2 n1 n0, gdzie n2...n0 wskazuj na R0...7 std: 28h2Fh cykle: 1 bajty: 1 przykad: ADD A , R2 ADD A , adres do akumulatora dodawana jest zawarto komrki w wewn. RAM o adresie adres A < A + (adres) kod: 0 0 1 0 0 1 0 1 25h cykle: 1 bajty: 2 (kod instrukcji 25h + adres) przykad: ADD A , 2Fh (dodanie do A zawartoci komrki o adresie 2Fh) ADD A , @Ri do akumulatora dodawana jest zawarto komrki w wewn. RAM o adresie wskazywanym przez rejestr Ri (R0 lub R1) A < A + (Ri). kod: 0 0 1 0 0 1 1 i gdzie i wskazuje na R0 (i=0) lub R1 (i=1) std: 26h, 27h cykle: 1 bajty: 1 przykad: ADD A , @R0 (dodanie do A zawartoci komrki o adresie w R0) ADD A , #dana do akumulatora dodawany jest argument stay (8bitowa liczba) A < A + dana kod: 0 0 1 0 0 1 0 0 cykle: 1 bajty: 2 (kod instrukcji + dana) przykad: ADD A , #120 (dodanie do A licz by 120) b) Do wartoci przechowywanej w akumulato rze dodawany jest wskazany argument oraz zawarto znacznika przeniesienia C, a wy nik zostaje wpisany do akumulatora. c) znaczniki: C, AC i OV d) rodzaje instrukcji: ADDC A , Rn do akumulatora dodawana jest zawarto rejestru Rn oraz C A < A + Rn + C gdzie Rn = R0...R7 (jeden z rejestrw roboczych) kod: 0 0 1 1 1 n2 n1 n0 gdzie n2...n0 wskazuj na R0...7 std: 38h3Fh cykle: 1 bajty: 1 przykad: ADDC A , R4 ADDC A , adres do akumulatora dodawana jest zawarto komrki w wewn. RAM o adresie adres oraz znacznik C A < A + (adres) + C kod: 0 0 1 1 0 1 0 1 35h cykle: 1 bajty: 2 (kod instrukcji 35h + adres) przykad: ADDC A , 7Eh (dodanie do A za wartoci komrki o adresie 7Eh) ADDC A , @Ri do akumulatora dodawana jest zawarto komrki w wewn. RAM o adresie wskazywanym przez rejestr Ri. (R0 lub R1) oraz C A < A + (Ri) + C kod: 0 0 1 1 0 1 1 i gdzie i wskazuje na R0 (i=0) lub R1 (i=1) std: 36h, 37h cykle: 1 bajty: 1 przykad: ADDC A , @R1 (dodanie do A za wartoci komrki o adresie w R1) ADDC A , #dana do akumulatora dodawany jest argument stay (8bitowa liczba) i C A < A + dana + C kod: 0 0 1 1 0 1 0 0 cykle: 1 bajty: 2 (kod instrukcji + dana) przykad: ADDC A , #120 (dodanie do A liczby 120) A < A (Ri) C kod: 1 0 0 1 0 1 1 i gdzie i wskazuje na R0 (i=0) lub R1 (i=1) std: 96h, 97h cykle: 1 bajty: 1 przykad: SUBB A , @R1 (odjcie od A za wartoci komrki o adresie w R1oraz C) SUBB A , #dana od akumulatora odejmowany jest argu ment stay (8bitowa liczba) oraz C A < A dana C kod: 1 0 0 1 0 1 0 0 94h cykle: 1 bajty: 2 (kod instrukcji + dana) przykad: ADDC A , #86h (odjcie od A licz by 86h i znacznika C)

INC
a) ang. increment zwikszenie o 1 b) do wskazanego argumentu jest dodawana jedynka c) znaczniki: bez zmian d) rodzaje instrukcji: INC A do akumulatora dodawana jest jedynka A < A + 1 kod: 0 0 0 0 0 1 0 0 04h cykle: 1 bajty: 1 INC Rn do zawartoci rejestru Rn dodawana jest jedynka Rn < Rn + 1 gdzie Rn = R0...R7 (jeden z rejestrw roboczych) kod: 0 0 0 0 1 n2 n1 n0 gdzie n2...n0 wskazuj na R0...7 std: 08h0Fh cykle: 1 bajty: 1 przykad: INC R3 INC adres do zawartoci komrki o adresie adres dodawana jest jedynka (adres) < (adres) + 1 kod: 0 0 0 0 0 1 0 1 05h cykle: 1 bajty: 2 (kod instrukcji 05h + adres) przykad: INC 12h (inkrementacja zawarto ci komrki o adresie 12h) INC @Ri do zawartoci komrki o adresie wskazy wanym przez Ri dodawana jest jedynka (Ri) < (Ri) + 1 kod: 0 0 0 0 0 1 1 i gdzie i wskazuje na R0 (i=0) lub R1 (i=1) std: 06h, 07h cykle: 1 bajty: 1 przykad: INC @R1 INC DPTR do 16bitowego wskanika danych DPTR zoonego z rejestrw SFR: DPH (bardziej znaczcy bajt) i DPL (mniej znaczcy bajt) dodawana jest jedynka. Znaczniki nie ulegaj zmianie. DPTR < DPTR + 1 kod: 1 0 1 0 0 0 1 1 A3h cykle: 2 bajty: 1

SUBB
a) ang. substract from acummulator with bor row odejmij od akumulatora z poyczk b) Od wartoci przechowywanej w akumulato rze odejmowany jest wskazany argument oraz zawarto znacznika przeniesienia C, a wynik zostaje wpisany do akumulatora. c) znaczniki: C, AC i OV d) rodzaje instrukcji: SUBB A , Rn od akumulatora odejmowana jest zawar to rejestru Rn oraz C A < A Rn C gdzie Rn = R0...R7 (jeden z rejestrw roboczych) kod: 1 0 0 1 1 n2 n1 n0 gdzie n2...n0 wskazuj na R0...7 std: 98h9Fh cykle: 1 bajty: 1 przykad: SUBB A , R6 SUBB A , adres od akumulatora odejmowana jest zawar to komrki w wewn. RAM o adresie adres oraz znacznik C A < A (adres) C kod: 1 0 0 1 0 1 0 1 95h cykle: 1 bajty: 2 (kod instrukcji 95h + adres) przykad: SUBB A , 45h (odjcie od A zawartoci komrki o adresie 45h i znacznika C) SUBB A , @Ri od akumulatora odejmowana jest zawar to komrki w wewn. RAM o adresie wskazywanym przez rejestr Ri. (R0 lub R1) oraz C

DEC
a) ang. decrement zmniejszenie o 1 b) od wskazanego argumentu odejmowana jest jedynka c) znaczniki: bez zmian d) rodzaje instrukcji: DEC A od akumulatora odejmowana jest jedynka A < A 1 kod: 0 0 0 1 0 1 0 0 14h cykle: 1 bajty: 1 DEC Rn od zawartoci rejestru Rn odejmowana jest jedynka Rn < Rn 1 gdzie Rn = R0...R7 (jeden z rejestrw roboczych)

ADDC
a) ang. add to acummulator with carry do daj do akumulatora z przeniesieniem

ELEKTRONIKA DLA WSZYSTKICH 11/97

37

Te to potrafisz
kod: 0 0 0 1 1 n2 n1 n0 gdzie n2...n0 wskazuj na R0...7 std: 18h1Fh cykle: 1 bajty: 1 przykad: DEC R5 DEC adres od zawartoci komrki o adresie adres odejmowana jest jedynka (adres) < (adres) 1 kod: 0 0 0 1 0 1 0 1 15h cykle: 1 bajty: 2 (kod instrukcji 15h + adres) przykad: DEC 3Fh (inkrementacja zawar toci komrki o adresie 3Fh) DEC @Ri od zawartoci komrki o adresie wskazy wanym przez Ri odejmowana jest jedynka (Ri) < (Ri) 1 kod: 0 0 0 1 0 1 1 i gdzie i wskazuje na R0 (i=0) lub R1 (i=1) std: 16h, 17h cykle: 1 bajty: 1 przykad: DEC @R0 cykle: 1 bajty: 1 Przykad: jeeli w wyniku dodawania w akumulatorze jest liczba 6Ah, to po ko rekcji dziesitnej akumulator bdzie zawie ra liczb 70h, patrz listing: MOV A,#69h ;wpisanie liczby 69h do akumulatora (1) ADD A,#1 ;inkrementacja akumulatora poprzez dodawanie (2) ;w wyniku tego w A bdzie liczba 6Ah da A ;korekcja dziesitna A, w A bdzie po tym 70h (3). Uwaga: jeeli w przykadzie w linii (2) uyje my instrukcji INC A zamiast dodania jedyni, to korekcja dziesitna bdzie nieprawidowa. Operacje logiczne ANL adres , #dana wymnoona logicznie zostaje zawarto komrki o adresie adres przez argument stay (8bitowa liczba) (adres) < (adres) dana kod: 0 1 0 1 0 0 1 1 53h cykle: 2 bajty: 3 (kod instrukcji 54h + adres + dana) przykad: ANL 45h , #23 (mnoenie logicz ne zawartoci komrki 45h i liczby 23)

ORL
a) ang. logical OR zsumuj logicznie b) wykonywana jest suma logiczna OR (doda wanie bitw bit po bicie) wskazanych w instrukcji dwch argumentw. Wynik operacji jest wpisywany do argumentu pier wszego instrukcji c) znaczniki: nie zmieniaj si d) rodzaje instrukcji: ORL A , Rn dodana logicznie zostaje zawarto akumu latora i rejestru Rn, wynik w A A < A Rn gdzie Rn = R0...R7 (jeden z rejestrw roboczych) kod: 0 1 0 0 1 n2 n1 n0 gdzie n2...n0 wskazuj na R0...7 std: 48h4Fh cykle: 1 bajty: 1 przykad: ORL A , R7 ORL A , adres dodana logicznie zostaje zawarto akumu latora i komrki o podanym adresie adres, wynik zostaje umieszczony w A A < A (adres) kod: 0 1 0 0 0 1 0 1 45h cykle: 1 bajty: 2 (kod instrukcji 45h + adres) przykad: ORL A , 19h (dodanie logiczne A i zawartoci komrki pod adresem 19h) ORL A , @Ri dodana logicznie zostaje zawarto akumu latora komrki w wewn. RAM o adresie wskazywanym przez rejestr Ri. (R0 lub R1) A < A (Ri) kod: 0 1 0 0 0 1 1 i gdzie i wskazu je na R0 (i=0) lub R1 (i=1) std: 46h, 47h cykle: 1 bajty: 1 przykad: ORL A , @R0 (dodanie logiczne A i zawartoci komrki o adresie w R0) ORL A , #dana dodana logicznie zostaje zawarto akumu latora przez argument stay (8bitowa liczba) A < A dana kod: 0 1 0 0 0 1 0 0 44h cykle: 1 bajty: 2 (kod instrukcji 44h + dana) przykad: ORL A , #23 (dodanie logiczne A i liczby 23) ORL adres , A dodana logicznie zostaje zawarto akumu latora i komrki o podanym adresie adres, wynik zostaje umieszczony w ko mrce pamici o adresie adres (adres) < (adres) A kod: 0 1 0 0 0 0 1 1 42h cykle: 1 bajty: 2 (kod instrukcji 42h + adres) przykad: ORL A , 20h (dodanie logicznie A i zawartoci komrki pod adresem 20h) ORL adres , #dana dodana logicznie zostaje zawarto komr ki o adresie adres oraz argument stay (8bitowa liczba) (adres) < (adres) dana kod: 0 1 0 0 0 0 1 1 43h cykle: 2 bajty: 3 (kod instrukcji 43h + adres + dana) przykad: ORL 12h , #99 (dodanie logiczne zawartoci komrki 12h i liczby 99)

MUL AB
a) ang. multiply pomn b) 8bitowa liczba bez znaku znajdujca si w aku mulatorze jest mnoona przez 8bitow liczb bez znaku z rejestru B. 16bitowy wynik wpisy wany jest do rejestrw B i A (bardziej znaczcy bajt do B, mniej znaczcy bajt do A) c) znaczniki: jeli wynik mnoenia jest > 255 to ustawiany jest znacznik OV, w przeciwnym razie OV jest zerowany. znacznik C jest zerowany. d) B.A < A x B kod: 1 0 1 0 0 1 0 0 A4h cykle: 4 bajty: 1

ANL
a) ang. logical AND pomn logicznie b) wykonywany jest iloczyn logiczny AND (mnoenie bitw bit po bicie) wskaza nych w instrukcji dwch argumentw. Wy nik operacji jest wpisywany do argumentu pierwszego instrukcji c) znaczniki: nie zmieniaj si d) rodzaje instrukcji: ANL A , Rn wymnoona logicznie zostaje zawarto akumulatora i rejestru Rn, wynik w A A < A Rn gdzie Rn = R0...R7 (jeden z rejestrw roboczych) kod: 0 1 0 1 1 n2 n1 n0 gdzie n2...n0 wskazuj na R0...7 std: 58h5Fh cykle: 1 bajty: 1 przykad: ANL A , R3 ANL A , adres wymnoona logicznie zostaje zawarto akumulatora i komrki o podanym adresie adres, wynik zostaje umieszczony w A A < A (adres) kod: 0 1 0 1 0 1 0 1 55h cykle: 1 bajty: 2 (kod instrukcji 55h + adres) przykad: ANL A , 45h (mnoenie logicznie A i zawartoci komrki pod adresem 45h) ANL A , @Ri wymnoona logicznie zostaje zawarto aku mulatora komrki w wewn. RAM o adresie wskazywanym przez rejestr Ri. (R0 lub R1) A < A (Ri) kod: 0 1 0 1 0 1 1 i gdzie i wskazuje na R0 (i=0) lub R1 (i=1) std: 56h, 57h cykle: 1 bajty: 1 przykad: ANL A , @R1 (wymnoenie. logicz ne A i zawartoci komrki o adresie w R1) ANL A , #dana wymnoona logicznie zostaje zawarto aku mulatora przez argument stay (8bitowa liczba) A < A dana kod: 0 1 0 1 0 1 0 0 54h cykle: 1 bajty: 2 (kod instrukcji 54h + dana) przykad: ANL A , #23 (mnoenie logiczne A i liczby 23) ANL adres , A wymnoona logicznie zostaje zawarto akumulatora i komrki o podanym adre sie adres, wynik zostaje umieszczony w komrce pamici o adresie adres (adres) < (adres) A kod: 0 1 0 1 0 0 1 1 52h cykle: 1 bajty: 2 (kod instrukcji 55h + adres) przykad: ANL A , 45h (mnoenie logicznie A i zawartoci komrki pod adresem 45h)

DIV AB
a) ang. divide podziel b) 8bitowa liczba bez znaku, znajdujca si w akumulatorze jest dzielona przez 8bito w liczb z rejestru B. Cze cakowita ilora zu wpisywana jest do akumulatora, a reszta z dzielenia do rejestru B. W przypadku gdy dzielnik jest rwny 0 (B=0) to po wykonaniu operacji zawarto akumulatorze i rejestru B jest nieokrelona oraz dodatkowo usta wiony zostaje znacznik OV. c) znaczniki: C = 0, OV =0 (zerowane) d) A < A : B B < reszta (A : B) kod: 1 0 0 0 0 1 0 0 84h cykle: 4 bajty: 1

DA A
a) ang. decimal adjust korekcja dziesitna b) wykonywana jest korekcja dziesitna wyni ku dodawania. Operacja ta sprowadza wynik do postaci dwch cyfr dziesitnych w kodzie BCD, jeeli argumenty byy w kodzie BCD. Rozkaz ten powinien by uywany jedynie w poczeniu z rozkazem dodawania (ADD, ADDC). Take inkrementacja powinna odby wa si poprzez instrukcj ADD A, #1, a nie INC A, bowiem w tym drugim przypadku nie s ustawianie znaczniki C i AC, tak wic nie moe by wykonana korekcja dziesitna. Korekcja polega na tym e w przypadku kiedy po wykonanej na akumulatorze operacji doda wania (ADD, ADDC) zawarto jego bitw 3...0 jest wiksza od 9 lub jest ustawiony znacznik AC, to do wartoci akumulatora doda wana jest liczba 6. Po tym jeeli okae si e zawarto bitw 7...4 jest wiksza od 9 lub jest ustawiony znacznik C to do tych bitw doda wana jest take liczba 6. Jeeli podczas tej ostatniej operacji wystpio przeniesienie to do znacznika wpisywana jest 1, w przeciwnym wypadku stan znacznika C nie zmienia si. c) znaczniki: C, OV (patrz pkt.a) d) A < korekcja dziesitna (A) kod: 1 1 0 1 0 1 0 0 D4h

38

ELEKTRONIKA DLA WSZYSTKICH 11/97

Te to potrafisz
XRL
a) ang. logical XOR zsumuj mod 2 (rnica symetryczna) b) wykonywana jest suma mod 2 XOR wska zanych w instrukcji dwch argumentw. Wynik operacji jest wpisywany do argu mentu pierwszego instrukcji c) znaczniki: nie zmieniaj si d) rodzaje instrukcji: XRL A , Rn zsumowana (mod 2) zostaje zawarto akumulatora i rejestru Rn, wynik w A A < A Rn gdzie Rn = R0...R7 (jeden z rejestrw roboczych) kod: 0 1 1 0 1 n2 n1 n0 gdzie n2...n0 wskazuj na R0...7 std: 68h6Fh cykle: 1 bajty: 1 przykad: XRL A , R7 XRL A , adres zsumowana (mod 2) logicznie zostaje za warto akumulatora i komrki o podanym adresie adres, wynik zostaje umieszczo ny w A A < A (adres) kod: 0 1 1 0 0 1 0 1 65h cykle: 1 bajty: 2 (kod instrukcji 65h + adres) przykad: XRL A , 19h (dodanie logiczne A i zawartoci komrki pod adresem 19h) XRL A , @Ri zsumowana (mod 2) logicznie zostaje za warto akumulatora komrki w wewn. RAM o adresie wskazywanym przez rejestr Ri. (R0 lub R1) A < A (Ri) kod: 0 1 1 0 0 1 1 i gdzie i wskazuje na R0 (i=0) lub R1 (i=1) std: 66h, 67h cykle: 1 bajty: 1 przykad: XRL A , @R0 (zsumowanie (mod 2) logiczne A i zawartoci komrki o adresie w R0) XRL A , #dana zsumowana (mod 2) logicznie zostaje za warto akumulatora przez argument stay (8bitowa liczba) A < A dana kod: 0 1 1 0 0 1 0 0 64h cykle: 1 bajty: 2 (kod instrukcji 64h + dana) przykad: XRL A , #23 (zsumowanie (mod 2) logiczne A i liczby 23) XRL adres , A zsumowana (mod 2) logicznie zostaje za warto akumulatora i komrki o poda nym adresie adres, wynik zostaje umieszczony w komrce pamici o adresie adres (adres) < (adres) A kod: 0 1 1 0 0 0 1 1 62h cykle: 1 bajty: 2 (kod instrukcji 62h + adres) przykad: XRL A , 20h (zsumowanie (mod 2) logicznie A i zawartoci komrki pod ad resem 20h) XRL adres , #dana zsumowana (mod 2) logicznie zostaje za warto komrki o adresie adres oraz ar gument stay (8bitowa liczba) (adres) < (adres) dana kod: 0 1 1 0 0 0 1 1 63h cykle: 2 bajty: 3 (kod instrukcji 63h + adres + dana) przykad: XRL 12h , #99 (dodanie logiczne zawartoci komrki 12h i liczby 99) d) A < 0 kod: 1 1 1 0 0 1 0 0 E4h cykle: 1 bajty: 1 Przykad: efekt wyzerowania akumulatora mona uzyska stosujc instrukcj: MOV A , #0 lecz w tym przypadku instrukcja ma du go 2 bajtw (a CLR A tylko 1), co w efekcie skraca dugo kodu programu i oszczdza pami. bit 1 przyjmuje warto bitu 2 itd...... bit 6 przyjmuje warto bitu 7 a bit 7 przyjmuje warto bitu 0 c) znaczniki: bez zmian d) A < rotacja w prawo (A) kod: 0 0 0 0 0 0 1 1 03h cykle: 1 bajty: 1 Przykad: jeeli w A jest liczba 43h (01000011 binarnie) to po wykonaniu instrukcji RR A akumulator bdzie zawiera liczb: A1h (10100001 binarnie).

CPL A
a) ang. complement accumulator zaneguj akumulator b) warto akumulatora zostaje zanegowa na, wynik wpisany zostaje do akumulatora c) znaczniki: bez zmian d) A < / A kod: 1 1 1 1 0 1 0 0 F4h cykle: 1 bajty: 1 Przykad: aby np. zmieni znak liczby zapi sanej w akumulatorze w kodzie U2 naley wykona sekwencj instrukcji: CPL A ;negacja akumulatora INC A ;inkrementacja akumulatora .....

RRC A
a) ang. rotate right through carry przesu cyklicznie w prawo ze znacznikiem C b) zawarto akumulatora zostaje przesunita w prawo o 1 pozycj (o 1 bit) z uwzgldnie niem znacznika C, to znaczy e: znacznik C przyjmuje warto bitu 0 (akumulatora oczywicie) bit 0 przyjmuje warto bitu 1 bit 1 przyjmuje warto bitu 2 itd...... bit 6 przyjmuje warto bitu 7 a bit 7 przyjmuje warto znacznika C c) znaczniki: C jest ustawiany zgodnie z wyni kiem operacji d) A < rotacja w prawo (A) z C kod: 0 0 0 1 0 0 1 1 13h cykle: 1 bajty: 1 Przykad: jeeli w A jest liczba 54h (01010100 binarnie) to wykonanie instruk cji: CLR C ;wyzeruje znacznik C RLC A ;przesu w lewo z C akumulator .... spowoduje podzielenie przez 2 liczby zapi sanej w naturalnym kodzie binarnym w akumulatorze.

RL A
a) ang. rotate left przesu w lewo b) zawarto akumulatora zostaje przesunita w lewo o 1 pozycj (o 1 bit), to znaczy e: bit 1 przyjmuje warto bitu 0 bit 2 przyjmuje warto bitu 1 itd...... bit 7 przyjmuje warto bitu 6 a bit 0 przyjmuje warto bitu 7 c) znaczniki: bez zmian d) A < rotacja w lewo (A) kod: 0 0 1 0 0 0 1 1 23h cykle: 1 bajty: 1 Przykad: jeeli w A jest liczba 43h (01000011 binarnie) to po wykonaniu instrukcji: RL A akumulator bdzie zawiera liczb: 86h (10000110 binarnie).

RLC A
a) ang. rotate left through carry przesu cyklicznie w lewo ze znacznikiem C b) zawarto akumulatora zostaje przesunita w lewo o 1 pozycj (o 1 bit) z uwzgldnie niem znacznika C, to znaczy e: znacznik C przyjmuje warto bitu 7 (akumulatora oczywicie) bit 1 przyjmuje warto bitu 0 bit 2 przyjmuje warto bitu 1 itd...... bit 7 przyjmuje warto bitu 6 a bit 0 przyjmuje warto znacznika C c) znaczniki: C jest ustawiany zgodnie z wyni kiem operacji d) A < rotacja w lewo (A) z C kod: 0 0 1 1 0 0 1 1 33h cykle: 1 bajty: 1 Przykad: jeeli w A jest liczba 54h (01010100 binarnie) to wykonanie instrukcji: CLR C ;wyzeruje znacznik C RLC A ;przesu w lewo z C ;akumulator .... spowoduje wymnoenie przez 2 liczby za pisanej w naturalnym kodzie binarnym w akumulatorze.

SWAP A
a) ang. swap nibbles within accumulator wymie pbajty w akumulatorze b) w wyniku tej instrukcji wymieniona zostaje zawarto bitw 3...0 (mniej znaczcy p bajt) i bitw 7...4 (bardziej znaczcy pbajt) akumulatora. Operacja ta jest rwnowana 4krotnemu przesuniciu zawartoci aku mulatora. c) znaczniki: bez zmian d) A30 <> A74 kod: 1 1 0 0 0 1 0 0 C4h cykle: 1 bajty: 1 Przykad: sekwencja podana poniej powo duje zamian pbajtw akumulatora MOV A , #52h ;wpisanie do akumulatora liczby 52h SWAP A ;wykonanie polecenia zamiany ..... ;w akumulatorze znajduje si teraz liczba 25h

RR A CLR A
a) ang. clear accumulator zeruj akumulator b) do akumulatora zostaje wpisana warto 0. c) znaczniki: bez zmian a) ang. rotate right przesu w prawo b) zawarto akumulatora zostaje przesunita w prawo o 1 pozycj (o 1 bit), to znaczy e: bit 0 przyjmuje warto bitu 1

Uff! Na razie to tyle w nastpnym od cinku dokoczenie listy instrukcji, a wic pozostae komendy dotyczce: operacji przemieszczania danych operacji na bitach (znacznikach) skoki i pozostae oraz krtki opis asemblera ASM51 przezna czony szczeglnie dla komputerowcw.
Sawomir Surowiski

ELEKTRONIKA DLA WSZYSTKICH 11/97

39

Te to potrafisz

Lekcja

W dzisiejszej lekcji sprawdzimy dziaa nie niektrych spord omwionych wczeniej instrukcji arytmetycznych i lo gicznych procesora na podstawie przyka dowego programu. Dziaanie programu jest bardzo proste, ot: a) najpierw program prosi o wprowadze nie dwch liczb 8bitowych w postaci heksadecymalnej,

czyli z zakresu 0...FFh (0...255 dziesit nie). Pierwsza liczba wywietlana jest na wywietlaczach DL1 i DL2, druga na DL4 i DL5 b) nastpnie wykonywana jest wybrana przez Ciebie operacja arytmetyczna lub logiczna (o tym jak j wybra za chwil c) w efekcie na wywietlaczach DL7 i DL8 wypisywany jest wynik operacji, ktry mo

esz sprawdzi rcznie (na papierze) lub korzystajc z kalkulatora wyposaonego w konwerter liczb zapisanych dziesitnie i szesnastkowo (np. taki z MSWindows). Program w postaci listingu czyli w zapisie rdowym z dodatkowymi in formacjami istotnymi szczeglnie dla tych ktrzy nie maj komputera jest na stpujcy:

;Program do lekcji nr 2 ;testowanie komend: ADD, SUBB, ANL, ORL, XRL, SWAP ;z wykorzystaniem instrukcji BIOSa ;******************************** org 8000h ;******************************** znowu: lcall mov mov mov lcall lcall push mov mov mov lcall lcall pop clr add mov lcall lcall lcall sjmp CLS B,#1 DL1,#_minus DL2,#_minus GETACC wait1 Acc B,#4 DL4,#_minus DL5,#_minus GETACC wait1 B C A,B B,#7 A2HEX wait1 wait1 znowu

8000

;pocztek zewn. pamieci programu

8000 120274 8003 75F001 8006 757840 8009 757940 800C 1203A7 800F 128036 8012 C0E0 8014 75F004 8017 757B40 801A 757C40 801D 1203A7 8020 128036 8023 D0F0 8025 C3 8026 25F0 8028 75F007 802B 12024E 802E 128036 8031 128036 8034 80CA

;wyczyszczenie wyswietlacza ;pozycja 1 na displeju ;znak na pozycji wprowadzenia ;pierwszego skladnika ;pobranie skladnika 1 dodawania ;odczekaj sekunde ;i przechowanie go na stosie ;pozycja 4 na displeju ;znak na pozycji wprowadzeniaa ;drugiego skladnika ;pobranie skladnika 2 dodawania ;odczekaj sekunde ;sciagniecie skladnika 1 ze stosu do rej.B ;potrzebne do testowania instrukcji SUBB ;komenda dodania skladnikow - tu wstaw inne komendy ;pozycja 7 na displeju ;wypisanie wyniku dodawania ;odczekaj sekunde ;odczekaj sekunde ;i nastepne skladniki

8036 C0E0 8038 74FF 803A 120295 803D 74FF 803F 120295 8042 D0E0 8044 22 8045

;******************************** wait1: push Acc mov A,#255 lcall DELAY mov A,#255 lcall DELAY pop Acc ret ;******************************** END

;przechowanie A na stosie ;odczekanie 0,5 sek ;odczekanie 0,5 sek (w sumie 1 sek.) ;odtworzenie A (ze stosu) ;powrot do programu glownego

Szczegowy opis listingu nie jest te matem niniejszej lekcji (a przyszego odcinka szkoy mikroprocesorowej), to te przedstawi tylko istotne informa cje potrzebne do wykonania zadania z naszej dzisiejszej lekcji. Informacje podziel na te istotne dla komputerow cw oraz dla rczniakw (o ile mog posuy si takim skrtem), tak wic, patrzymy na listing powyej i wyjania my sobie:

a) w pierwszej kolumnie podany jest ad res pocztkowy danej linii programu z zawart w niej instrukcj. U nas adres pocztkowy to 8000h pocztek pa mici SRAM w komputerku. Zauwa my e cay program zajmuje 45 bajtw, bo ostatnim adresem jest 8045h ostatnia linia listingu. b) w kadej zawierajcej instrukcj lini i tu za adresem znajduje si cig baj tw bdcy odpowiednikiem maszyno

wym instrukcji zapisanej w dalszej czci linii w sposb jawny. Dziki te mu niekomputerowcy bd mogli po prostu wklepa te dane ciurkiem od adresu 8000h bez mozolnego tu maczenia z postaci rdowej znajduj cej si w trzeciej kolumnie listingu). Warto jednak przy tym chocia chwil zastanowi si i przetumaczy ju te raz (korzystajc z tabeli we wkadce) znane i nieznane instrukcje w kolej

40

ELEKTRONIKA DLA WSZYSTKICH 11/97

Te to potrafisz
nych liniach a nastpnie porwna je z danymi z kolumny drugiej. c) w listingu wystpuj odwoania do pro cedur umieszczonych w programie monitora s to: GETACC, A2HEX i DELAY. Nie wdajc si w szczegy (na razie) wyjaniam e nazwom tym przypisane s adresy w przestrzeni programu monitora (EP ROM) od ktrych zaczynaj si kody tych procedur. Ich dziaanie jest nastpujce: GETACC : procedura pobrania, z kla wiatury, 8bitowej liczby zapisanej w postaci szesnastkowej i umieszcze nie jej w akumulatorze z jednoczesnym wywietleniem wpisywanej przez uytkownika wartoci na wywietla czu. Pozycja na ktrej wypisywana jest warto na displeju powinna by okrelona przed jej wywoaniem w re jestrze B. W naszym przykadzie dziki tej procedurze moesz wprowadzi skadniki testowanego dziaania. A2HEX : procedura wywietlenia na displeju w postaci szesnastkowej (na 2 wywietlaczach) aktualnej zawarto ci akumulatora. Podobnie jak poprzed nio pozycja od ktrej ma by wypisana liczba musi by okrelona w rejestrze B. W naszym przykadzie dziki tej pro cedurze wywietlany jest wynik opera cji na wywietlaczach DL7 i DL8. DELAY : procedura opnienia, czas opnienia jest podawany w akumulato rze przed wywoaniem procedury a mnonik wynosi okoo 1,95 ms. Jeeli zatem wpiszemy do akumulatora war to 255 to po wywoanie procedury DELAY bdzie trwao ok. 255 x 1,95 ms = 497 ms czyli okoo 0,5 sekundy. Zasto sowanie tej procedury w naszym przy kadzie ma umoliwi Ci obserwacj wy konywania programu krok po kroku. d) dowolny tekst znajdujcy si za zna kiem rednika ; jest traktowany jako komentarz i nie jest brany pod uwag podczas kompilacji programu w przy padku korzystania z kompilatora na komputer PC. Uwagi zawarte w ko mentarzu s bardzo przydatne podczas analizy programu. e) w przykadowym listingu wikszo in strukcji jest Ci jeszcze nie znana, s one jednak niezbdne do wykonania tej lekcji, tote prosz traktuj je jako do mylne, wicej informacji na ich temat w kolejnym numerze EdW. Wytrwaym proponuj analiz i prze tumaczenie (tabela instrukcji we wkad ce) kilku pierwszych lub caego listingu programu a nastpnie porwnanie efek tw swojej pracy z kodami podanymi w naszym przykadzie. f) `w naszym listingu w linii o adresie 8026h znajduje si waciwa instrukcja testujca dziaanie danej funkcji aryt metycznologicznej (zaciemniona linia). W przykadzie naszym znajduje si in strukcja ADD dodawania. W przypadku chci zastosowanie in nej funkcji naley w miejsce kodu 25 F0 (pod adresem 801A) wpisa odpo wiednie dla poszczeglnych instrukcji, cigi bajtw: dla SUBB wpisa: 95 F0 dla ANL wpisa: 55 F0 dla ORL wpisa: 45 F0 dla XRL wpisa: 65 F0 korzystajc z funkcji Edit monitora. Uwaga, w przypadku testowania instruk cji SWAP A naley wpisa liczby: C4 00. Zauwamy wszake e poprzednie in strukcje byy dwubajtowe, ta ostatnia za jest 1bajtowa. dlatego na pozycji drugiego bajtu wpisaem 00 co jest kodem maszy nowym instrukcji NOP nie rb nic. Instrukcj NOP poznasz dokadnie w kolej nym numerze EdW. Na razie powiem Ci tylko e podczas wykonywania instrukcji NOP procesor nie robi nic czyli de facto leniuchuje przez jeden cykl maszynowy (12 cykli zegara). Zastosowanie tej instruk cji przy modyfikacji kodu z poziomu moni tora (funkcja Edit) jest uzasadnione, bo wiem jest ona niejako wypeniaczem brakujcego bajtu kodu o adresie: 8027h. Przy wprowadzaniu danych podczas testu instrukcji SWAP pierwszy skadnik nie jest brany pod uwag (bo instrukcja SWAP jest 1argumentowa) , tote mona wpisa do woln warto najlepiej 00. Po modyfikacjach naley opuci funk cj Edit i uruchomi ponownie pro gram komenda monitora Jump, a na stpnie sprawdzi dziaanie nowo wpro wadzonej instrukcji. uruchom program (komenda Jump) najpierw z instrukcj arytmetyczn ADD (domylnie znajduje si w pliku LEKCJA2.S03) wykonaj kilka dziaa na przykadowych liczbach zmodyfikuj plik rdowy (klawisz F4 w Nortonie) czyli lini z instrukcj ADD zamie na inne instrukcje poda ne wczeniej w wiczeniu: SUBB, ANL, ORL, XRL, wpisujc je w miejs ce ADD (uwaga: wielko liter nie ma znaczenia) skompiluj ponownie program i zaaduj do komputerka uruchom ponownie program i wykonaj kilka dziaa sprawdzajc na kartce pa pieru lub kalkulatorze poprawno dzia ania poszczeglnych instrukcji. Przy okazji zajrzyj do powstaych w wyniku kompilacji zbiorw: listingu : LEKCJA2.LST zbioru : LEKCJA2.HEX zapisanego w formacie Intel HEX. Wicej na temat tego formatu danych moesz dowie dzie si z artykuu w naszym bratnim pimie Elektronika Praktyczna nr 10/97 na stronie 75. Na amach nasze go kursu wrcimy przy innej okazji do tego tematu. Postaraj si zapozna ze zbiorem typu listing. Przekszta rcznie dowolne li nie programu (korzystajc z tabeli we wkadce w tym numerze EdW) i porw naj otrzymane kody poszczeglnych lini i z tymi w zbiorze LEKCJA2.LST . Jako przykady proponuj wykona na stpujce operacje: a) test funkcji ADD: argumenty: 12h, 67h wynik: 79h argumenty: FEh, 02h wynik: 00h b) test funkcji SUBB: (uwaga: tu 1szy ar gument jest odejmowany od 2go !) argumenty: 12h, 67h wynik: 55h argumenty: F0h, 05h wynik: 15h c) test funkcji ANL: argumenty: 1Fh, EEh wynik: 0Eh argumenty: F0h, 0Fh wynik: 00h d) test funkcji ORL: argumenty: 7Eh, 80h wynik: FEh argumenty: 70h, 09h wynik: 79h e) test funkcji XRL: argumenty: 25h, 6Bh wynik: 4Eh argumenty: 55h, AAh wynik: FFh f) test funkcji SWAP: argumenty: pierwszy nie istotny , 78h wynik: 87h argumenty: pierwszy nie istotny , 39h wynik: 93h Zauwa e wszystkie instrukcje dziaaj na liczbach 8bitowych, tote w przypad ku przekroczenia zakresu tych liczb infor macja o wyniku jest czciowo tracona. ycz wesoej zabawy i duo wytrwa oci ! Sawomir Surowiski

Dla komputerowcw:
Uwaga: przy przegldaniu i modyfikacjach naszego przykadu korzystaj z DOSowego Nortona Commandera! Zanim zaczniesz zabaw przeczytaj uwanie plik informa cyjny ASM51.DOC. Na dyskietce z kompilatorem ASM51 znajduje si zbir rdowy z naszym przy kadem pod nazw LEKCJA2.S03. Po winiene wykona nastpujce czynnoci: skompilowa przykad do postaci ma szynowej , skorzystaj z programu wsa dowego DO.BAT , wydaj komend: > DO LEKCJA2 {Enter} zaaduj program do komputerka (ko menda Load monitora)

Dla niekomputerowcw:
Korzystajc z funkcji monitora Edit naley wklepa kod programu, korzysta jc z listingu powyej, od adresu 8000h. Dla uatwienia podaj e pierwsze bajty kodu to: 12, 02, 74, 75, F0, 01, 75, 78, 40, 75, 79, 40, 12, 03, A7, 12, 80, 36, C0, E0 itd.... .

ELEKTRONIKA DLA WSZYSTKICH 11/97

41

Te to potrafisz

W kolejnym odcinku naszego cyklu o mikrokontrolerach 8051 kontynuu jemy szczegowy opis instrukcji procesora ze zwrceniem uwagi na skadni instrukcji oraz skrtowe przykady zastosowania. Podczas analizy z pewnoci przyda si za mieszczona we wkadce poprzed niego numeru EdW, tabela ze spi sem wszystkich instrukcji. I cho dzisiejszy odcinek moe wyda si nieco monotonny, to trzeba pami ta, e nauka kadego jzyka, tak porozumiewania si jak i programo wania inteligentnych ukadw elekt ronicznych jest niezbdna kademu elektronikowi hobbycie.
Kontynuujc opis instrukcji przedsta wimy kolejno grup najwaniejszych in strukcji dotyczcych przemieszczania da nych w strukturze rejestrw procesora. Dodatkowe instrukcje umoliwiajce sko ki warunkowe oraz wywoywanie pod programw, przedstawimy w ostatniej, trzeciej czci opisu asemblera.

Mikrokontrolery? To takie proste...


Cz 8 Asembler jzyk maszynowy procesora
<d>. We wszystkich przypadkach (oprcz jednego) argumentami instrukcji MOV s wyraenia 8bitowe: rejestry, dane adre sy porednie itp. Jedynie zaadowanie 16bitowego wskanika adresu DPTR wymaga odpowiedniego 16bitowego (staej) argumentu. Poniej opiszemy wszystkie moliwe przypadki uycia instrukcji MOV.
MOV A, Rn do akumulatora zostaje zaadowana zawar to rejestru Rn A < Rn kod: 1 1 1 0 1 n2 n1 n0 gdzie n2...n0 wskazuj na R0...7 std: E8hEFh cykle: 1 bajty: 1 przykad: MOV R7,#0 MOV A, R7 ;wyzerowanie akumulatora ...... MOV A, adres do akumulatora zostaje zaadowana zawar to komrki wewntrznej pamici RAM o adresie: adres A < (adres) kod: 1 1 1 0 0 1 0 1 E5h cykle: 1 bajty: 2 (kod instrukcji E5h + 8bitowy adres) przykad: MOV A, 20h ;zaadowanie do A zawartoci komrki o adresie 20h MOV A, @Ri do akumulatora zostaje zaadowana zawarto ko mrki wewn. RAM, ktrej adres znajduje si w re jestrze R0 (i=0), lub R1 (i=1) A < (Ri) gdzie i = 0 lub 1 kod: 1 1 1 0 0 1 1 i std: E6h, E7h cykle: 1 bajty: 1 przykad: ;przed wywoaniem instrukcji R1 zawiera warto 34h MOV A, @R1 ;zaadowanie zawartoci komrki o adresie 34h do ;akumulatora MOV A, #dana instrukcja zaadowania 8bitowej liczby dana do akumulatora A < dana kod: 0 1 1 1 0 1 0 0 74h cykle: 1 bajty: 2 (kod instrukcji: 74h + dana) przykad: MOV A,#100 ;zaadowanie do akumulatora liczby 100 MOV Rn, A do rejestru Rn (R0...R7) zostaje zaadowana zawarto akumulatora Rn < A kod: 1 1 1 1 1 n2 n1 n0 gdzie n2...n0 wskazuj na R0...7 std: F8hFFh cykle: 1 bajty: 1 przykad: MOV R3, A ;przepisanie zawartoci akumulatora do rejestru R3 MOV Rn, adres do rejestru Rn (R0...R7) zostaje zaadowana zawarto komrki o adresie adres Rn < (adres) gdzie n = 0...7 kod: 1 0 1 0 1 n2 n1 n0 gdzie n2...n0 wskazuj na R0...7 std: A8hAFh cykle: 1 bajty: 2 (kod instrukcji + adres) przykad:

Operacje przemieszczenia danych


1. Instrukcja MOV Instrukcj suc do przekazywania danych pomidzy rejestrami procesora MOV (ang. pamici wewntrzn jest: M move przesu, przenie) W zalenoci od tego co i gdzie przenosimy, polecenie to moe mie kilkanacie rnych postaci w zalenoci od zastosowanych argumentw. Jedno czenie warto wiedzie, e polecenie to w praktyce nie powoduje dosownego przemieszczenia danej, lub zawartoci rejestru, ale jej skopiowanie ze rda do miejsca przeznaczenia. Oglne instrukcj MOV mona zapi sa jako: MOV <d> <s> gdzie: <d> jest miejscem przeznaczenia tam dokd ma by skopiowana dana ze rda (ang. destination) , a <s> rd em pobrania danej (ang. source). W wyniku wykonania instrukcji MOV za warto rda <s> zostaje umieszczona (skopiowana) w obiekcie przeznaczenia

ELEKTRONIKA DLA WSZYSTKICH 12/97

37

Te to potrafisz
MOV R4, 65h ;zaadowanie do rejestru R4 zawartoci komrki o adresie 65h MOV 45h, #100;komrce o adresie 45h zostaje nadana warto 100 MOV @Ri, A do komrki o adresie znajdujcym si w re jestrze R0 (i=0) lub R1 (i=1) zostaje wpisana zawarto akumulatora (Ri) < A kod: 1 1 1 1 0 1 1 i gdzie i = 0 lub 1 std: F6h, F7h cykle: 1 bajty: 1 przykad: CLR A ;wyzerowanie akumulatora MOV @R1, A ;wyzerowanie komrki o adresie w R1 MOV @Ri, adres do komrki o adresie znajdujcym si w re jestrze R0 (i=0) lub R1 (i=1) zostaje wpisana zawarto komrki o adresie adres (Ri) < (adres) kod: 1 0 1 0 0 1 1 i gdzie i = 0 lub 1 std: A6h, A7h cykle: 2 bajty: 2 (kod instrukcji + adres) przykad: MOV R0, #11h MOV @R0,10h ;przepisanie zawartoci komrki o adresie 10h do komrki ;ssiedniej o adresie 11h MOV @Ri, #dana do komrki o adresie znajdujcym si w re jestrze R0 (i=0) lub R1 (i=1) zostaje wpisana warto staa (liczba) (Ri) < dana kod: 0 1 1 1 0 1 1 i gdzie i = 0 lub 1 std: 76h, 77h cykle: 1 bajty: 2 (kod instrukcji + dana) przykad: MOV @R0, #255 ;jeeli wczeniej rejestr R0 mia warto np. 30h, to w ;efekcie tej operacji do komrki o adresie 30h zostanie ; wpisana liczba 255 MOV DPTR, #dana16 instrukcja zaadowania 16bitowego, bez wzgldnego adresu do wskanika danych DPTR DPTR < dana16 gdzie dana16 jest liczb 16bitow (zakres: 0...FFFFh) kod: 1 0 0 1 0 0 0 0 90h cykle: 2 bajty: 3 (kod instrukcji + starszy bajt + modszy bajt liczby dana16) przykad: MOV DPTR,#0 ;wyzerowanie wskanika danych

MOV Rn, #dana do rejestru Rn (R0...R7) zostaje wpisana 8bitowa liczba Rn < dana gdzie n = 0...7 kod: 0 1 1 1 1 n2 n1 n0 gdzie n2...n0 wskazuj na R0...7 std: 78h7Fh cykle: 1 bajty: 2 (kod instrukcji + dana) przykad: jeeli chcemy np. wpisa do rejes tru R6 liczb 16 mona wyda komend MOV R6, #10h ;10h szesnastkowo to 16 dziesitnie MOV adres, A do komrki o adresie adres zostaje wpi sana zawarto akumulatora (adres) < A kod: 1 1 1 1 0 1 0 1 F5h cykle: 1 bajty: 2 (kod instrukcji + adres) przykad: MOV 00h, A ;wpisanie zawartoci akumulatora do komrki o adresie 0 ;instrukcja rwnoznaczna zapisowi MOV R0, A w ;przypadku gdy aktywnym zbiorem rej. roboczych jest 0. MOV adres, Rn do komrki o adresie adres zostaje wpi sana zawarto rejestru Rn (R0...R7) (adres) < Rn gdzie n = 0...7 kod: 1 0 0 0 1 n2 n1 n0 gdzie n2...n0 wskazuj na R0...7 std: 88h8Fh cykle: 2 bajty: 2 (kod instrukcji + adres) przykad: MOV 30h, R5 ;wpisanie do komrki w wew. RAM zawartoci rejestru ;R5. MOV adres1, adres2 przepisanie zawartoci komrki o adresie adres2 do komrki o adresie adres1 (adres1) < (adres2) kod: 1 0 0 0 0 1 0 1 cykle: 2 bajty: 3 (kod instrukcji + adres2 + adres1) przykad: MOV 7Fh, 7Eh ;przepisanie zawartoci dwch ssiadujcych komrek w ;wew. RAM procesora MOV adres, @Ri do komrki o adresie adres zostaje wpi sana zawarto komrki ktrej adres znajduje si w rejestrze R0 (i=0) lub R1 (i=1) (adres) < (Ri) kod: 1 0 0 0 0 1 1 i gdzie i = 0 lub 1 std: 86h, 87h cykle: 2 bajty: 2 (kod instrukcji + adres) przykad: MOV R1, #32 MOV 32h, @R1 ;przepisanie zawartoci komrki o adresie 32h na nia ;sam (fizycznie operacja ta nie ma efektu)

o konkretnym zdarzeniu. Poniewa takie komunikaty s z reguy niezmienne, w praktyce programista umieszcza je w kodzie programu (pamici staej). Dziki takiemu dziaaniu instrukcja MOVC umoliwia odczytanie caego kodu programu uytkownika, co czsto w prakty ce nie jest podane, bo pozwala na np. nielegalny odczyt i skopiowanie przez osob niepowoan (hackera) programu utworzonego przez programist. Jest to oczywicie naruszeniem praw autorskich danego projektu, ale amicemu prawo pi ratowi pozwala np. na powielenie ciekawe go urzdzenia (np. sterownika) bez zgody jego autora. Na szczcie procesor 8051 i wszystkie z jego rodziny maj wbudowa ne mechanizmy sprztowego zabezpiecze nia przed tak sytuacj. Istnieje bowiem moliwo permanentnego zablokowania instrukcji MOVC wywoywanej z zewn trznej pamici programu (napisanego np. przez hackera). Sytuacja ta dotyczy oczy wicie aplikacji wykorzystujcych proceso ry z wewntrzn pamici programu (87xx, 89xx) gdzie przezorny programista umieci kod programu w wewntrznej pamici pro gramu, uniemoliwiajc tym skopiowanie go przez osoby niepowoane. W przypadku aplikacji z kodem programu umieszczone go w zewntrznej pamici programu (np. EPROM) nie istnieje moliwo zabezpie czenia programu hacker moe w po pros tu wyj z ukadu pami EPORM (ROM) i odczyta j na dowolnym programatorze (bez stosowania instrukcji MOVC) .
MOVC A, @A+DPTR do akumulatora zostaje zaadowana dana z pa mici programu spod adresu bdcego sum biecej wartoci wskanika danych DPTR i za wartoci akumulatora. Najpierw procesor two rzy 16bitowy adres poprzez dodanie DPTR i A potem pobiera spod tego adresu dan (bajt kodu programu) i umieszcza j z akumulatorze. A < (A + DPTR) kod: 1 0 0 1 0 0 1 1 93h cykle: 2 bajty: 1 przykad: MOV DPTR, #tablica ;zaadowanie adresu tablicy do wskanika DPTR MOV A,#3 ;pobierz czwarty element tablicy (nie trzeci, bo od ;elementy s numerowane od zera) MOVC A, @A+DPTR ;pobranie elementu litera A ....... ;gdzie tablica moe by zdefiniowana w programie jako np.: tablica DB WITAJ KOLEGO! MOVC A, @A+PC do akumulatora zostaje zaadowana dana z pamici programu spod adresu bdcego sum wartoci: licznika rozkazw PC (na

MOV adres, #dana


do komrki o adresie adres zostaje wpi sana warto sta (8bitowa liczba) (adres) < staa kod: 0 1 1 1 0 1 0 1 75h cykle: 2 bajty: 3 (kod instrukcji + adres + dana) przykad:

2. Instrukcja MOVC Podobn do instrukcji MOV jest MOVC. Suy ona take do przemieszcza nia danych z tym e przemieszczanie do tyczy tylko pobierania danych (bajtw) znajdujcych si w kodzie programu, czy li w wewn. lub zewntrznej pamieci pro gramu procesora. W praktyce instrukcj t wykorzystuje si do pobierania danych staych (np. tablic przy konwersji arytme tycznej lub logicznej. Innym czsto spoty kanym przypadkiem jest generowanie standardowych komunikatw (teksto wych) np. na wywietlaczach LCD w okrelonych sytuacjach pracy proceso ra w celu poinformowania uytkownika

38

ELEKTRONIKA DLA WSZYSTKICH 12/97

Te to potrafisz
stpnej po tej instrukcji) i zawartoci aku mulatora. W praktyce przy wykonaniu tej in strukcji, adres pobrania jest rwny sumie zawartoci akumulatora oraz wartoci liczni ka rozkazw bdzie to adres nastpnej po MOVC instrukcji. A < (A + PC) kod: 1 0 0 0 0 0 1 1 83h cykle: 2 bajty: 1 przykad: CLR A ;wyzerowanie akumulatora MOVC A, @A+PC ;pobranie do akumulatora kodu rozkazu NOP (00h) NOP ...... A < (DPTR) kod: 1 1 1 0 0 0 0 0 E0h cykle: 2 bajty: 1 przykad: aby odczyta zawarto komrki z zewn. RAM o adresie np. 1240h nalezy wykona instrukcje: MOV DPTR, #1240h ;zaadowanie adresu (16bit) do wskanika DPTR MOVX A, @A+DPTR ;i odczyt danej spod tego adresu ...... ;dana znajduje si w akumulatorze MOVX @DPTR, A do komrki zewntrznej pamici danych o podanym w DPTR adresie zostaje przesa na zawarto akumulatora innymi sowy jest to operacja zapisu do zewntrznej pa mici danych. (DPTR) < A kod: 1 1 1 1 0 0 0 0 F0h cykle: 2 bajty: 1 przykad: aby zapisa dan w obszarze zewntrznej pamici danych pod adresem np. 8000h na ley wykona instrukcje: MOV A, ...... ;w miejsce kropek naley wpisa rdo danej MOV DPTR, #8000h ;podajemy te adres zapisu MOVX @DPTR,A ;i zapisujemy dan w zewn. pamici tu P2 procesora, co w wielu przypadkach jest wrcz niezbdne. Mona by oczywicie zaadresowa t pami za pomoc instrukcji MOVX A, @DPTR (podajc wtedy adres MOV DPTR, #0124h), ale wtedy zniszczeniu ulegy by stany pozostaych, nie doczonych do pamici, kocwek portu P2. MOVX @Ri, A do obszaru zewntrznej pamici danych o adresie znajdujcym si w rejestrze Ri (R0 gdy i=0 lub R1 gdy i=1) zostaje przesana za warto akumulatora. Innymi sowy jest to zapis do zewntrznej pamici danych. (Ri) < A gdzie Ri = R0, lub R1 kod: 1 1 1 1 0 0 1 i gdzie i = 0,1 std: F2, F3 cykle: 2 bajty: 1 przykad: wemy sytuacje z poprzedniego przykadu, ale tym razem chcemy zapisa dan znajdu jc si w akumulatorze do komrki o adre sie 00h na stronie 7 (innymi sowy fizyczny adres komrki bdzie rwny: 0700h), w tym celu naley wykona cig instrukcji: SETB P2.2 ;ustawienie linii adresowej A10 SETB P2.1 ;ustawienie linii adresowej A9 SETB P2.0 ;ustawienie linii adresowej A8 (strona: 7) MOV R1, #00h ;zaadowanie adresu komrki do wskanika MOVX @R1, A ;i zapisane danej z akumulatora w zewn. RAM ......

3. Instrukcja MOVX Instrukcja MOVX suy do przesyania danej pomidzy akumulatorem a zewnt rzn pamici danych. Wykonanie tej in strukcji uaktywnia sygnay /RD (przy od czycie z zewntrznej pamici) lub /WR (przy zapisie) procesora piny P3.7 i P3.6. Dodatkowo porty P0 i P2 peni wtedy ro l magistrali systemowej dziki ktrej wy stawiany jest adres oraz przekazywana dana do zewntrznej pamici danych. Jak ju zapewne wiesz z poprzednich odcinkw naszego cyklu zewntrzna pa mi danych mona zaadresowa w dwo jaki sposb. Pierwsz metod jest uycie penego 16bitowego adresu. W takim przypadku procesor odczytujc lub zapisujc dan w tej pamici (wanie dziki instrukcji MOVX) modsz cz adresu zatrzaskuje w zewntrznym latch u (np. 74573), star sz wystawia na port P2. Czsto jednak uywana kostka pami ci SRAM jest mniejszej pojemnoci i wikszo linii adresowych starszego bajta (adresu) nie jest wykorzystana do sterowania pamici. W takim przypadku moliwe jest adresowanie pamici za po moc tzw. stronicowania. Ten sposb omwilimy ju w poprzednich odcin kach szkoy mikroprocesorowej. Jak za pewne pamitasz w takim trybie adreso wania procesor przy obsudze zewntr znej pamici danych wystawia tylko modsz cz adresu (A0...A7), nato miast port P2 nie jest modyfikowany, co pozwala uytkownikowi na pena kontro l sposobu i kierunku ustawienia jego kocwek a wic jest metod na mak symalne wykorzystanie cechy jed noukadowoci procesora. I tak dwa wspomniane dwa tryby ad resowania zewntrznej RAM maja swoje odzwierciedlenie w licie instrukcji z wy korzystaniem rozkazu MOVX, oto one.

Tryb stronicowania (niepenego adresu)


MOVX A, @Ri do akumulatora zostaje przesana zawarto komrki w obszarze zewn. pamici danych spod adresu znajdujcego si w rejestrze R0 (i=0) lub R1 (i=1): adres 8bitowy A < (Ri) gdzie Ri = R0, lub R1 kod: 1 1 1 0 0 0 1 i gdzie i = 0,1 std: E2, E3 cykle: 2 bajty: 1 przykad: niech w ukadzie z procesorem 8951 pracu jcym z wewn. pamici programu znajduje si zewntrzna pami danych w postaci kostki SRAM 2kB typ 6116. Linie adresowe A0...A7 tej pamici s do czone do zatrzasku modszej czci adresu szyny procesora (patrz poprzednie odcinku cyklu). Trzy starsze linie A8...A10 s do czone np. do pinw P2.0, P2.1 i P2.2 proce sora, pozostae kocwki portu P2 (P2.2...P2.7) s wykorzystywane np. do ste rowania przekanikami jakiego urzdzenia zewntrznego. Aby odczyta dan z tej pa mici np. spod adresu 24h na stronie pierw szej (strony liczone od 0 do 7, bo 2kB / 256 = 8 stron) naley wykona instrukcje: CLR P2.2 ;wyzerowanie linii adresowej A10 CLR P2.1 ;wyzerowanie linii adresowej A9 SETB P2.0 ;ustawienie linii adresowej A8 (strona: 1) MOV R1, #24h ;zaadowanie adresu komrki do wskanika MOVX A, @R1 ;i przesanie jej zawartoci do akumulatora ...... Zauwa e przy takim zaadresowaniu pami ci nie ulegy modyfikacji piny P2.3...P2.7 por

4. Instrukcje przesyania wymiany danych ze stosem


PUSH adres ang. push onto stack, przelij na stos w wyniku tej operacji zawarto wskanika stosu SP jest zwikszana o 1, po czym na wierzchoek stosu (adresie w wew. RAM wskazywanym przez SP) zostaje zapisana zawarto komrki z wew. RAM o podanym adresie bezporednim adres. Innymi so wy wykonywana jest operacja przesania na stos. SP < SP + 1, (SP) < (adres) kod: 1 1 0 0 0 0 0 0 C0h cykle: 2 bajty: 2 (kod instrukcji C0h + adres) przykady: PUSH ACC ;przesanie akumulatora na stos PUSH B ;przesanie rejestru B na stos PUSH 20h ;przesanie zawartoci komrki o adresie 20h na stos PUSH DPH ;przesanie 16bitowego wskanika danych na stos PUSH DPL ;w dwch instrukcjach, starsza i modsza cz DPTR ..... POP adres ang. pop from stack , zdejmij ze stosu w wyniku tej operacji dana znajdujca si pod adresem w wewn. RAM okrelonym w SP zostaje wpisana do komrki o poda nym adresie bezporednim adres. Na stpnie wskanik stosu SP zostaje zmniej szony o 1. Innymi sowy wykonywana jest operacja zdjcia ze stosu.

Tryb penego adresu (16bitowego)


MOVX A, @DPTR do akumulatora zostaje zaadowana dana (bajt) z zewntrznej pamici danych (odczyt z zewntrznej pamici danych) spod adresu w DPTR

ELEKTRONIKA DLA WSZYSTKICH 12/97

39

Te to potrafisz
(adres) < (SP), SP < SP 1 kod: 1 1 0 1 0 0 0 0 D0h cykle: 2 bajty: 2 (kod instrukcji D0h + adres) przykad: jeeli w poprzednim przykadzie zaadowalimy na stos rejestry w w/w kolej noci, to aby poprawnie je odtworzy nale y zdj je w kolejnoci odwrotnej, czyli: POP DPL POP DPH ;odtworzenie wskanika DPTR POP 20h ;nastpnie komrki o adresie 20h POP B ;i rejestru B POP ACC ;wreszcie akumulatora .... A30 <> (Ri)30 kod: 1 1 0 1 0 1 1 i gdzie i = 0,1 std: D6h, D7h cykle: 1 bajty: 1 przykad: MOV A, #5Ah MOV @R1, #A5h XCHD A, @R1 .... ;teraz w akumulatorze bdzie liczba 55h, a pod ;adresem @R1 liczba AAh e) przykad: SETB C ADDC A,#0 .... CLR bit a) ang. clear bit , zeruj bit b) w wyniku tej operacji wyzerowany zostaje bit ktrego adres podany jest bezporednio (bit) < 0 c) kod: 1 1 0 0 0 0 1 0 C2h d) cykle: 1 bajty: 2 (instrukcja C2 + adres bitu) e) przykad: CLR AFh ;zablokowanie systemu przerwa (EA w sowie IE = 0) .... Przykad ten mona take zapisa w postaci CLR EA SETB bit a) ang. set bit, ustaw bit b) w wyniku tej operacji ustawiony zostaje bit ktrego adres podany jest bezporednio (bit) < 1 c) kod: 1 1 0 1 0 0 1 0 D2h d) cykle: 1 bajty: 2 (instrukcja + adres bitu) e) przykad: SETB P1.2 ;ustawienie wysokiego poziomu logicznego ;na wyprowadzeniu 2 portu P1 (pin 3 procesora) CPL C a) ang. complement carry , zaneguj flag przeniesienia b) w wyniku tej operacji flaga C zostaje zane gowana C < /C c) kod: 1 0 1 1 0 0 1 1 B3h d) cykle: 1 bajty: 1 e) przykad: SETB C ; C=1 CPL C ;teraz C=0 CPL bit a) ang. complement bit , zaneguj bit b) w wyniku tej operacji zanegowany zostanie bit, ktrego adres podany jest bezporednio (bit) < /(bit) c) kod: 1 0 1 1 0 0 1 0 B2h d) cykle: 1 bajty: 1 e) przykad: wykonanie instrukcji neg: CPL P1.0 SJMP neg spowoduje nieprzerwane generowanie na pinie 1 procesora fali prostoktnej o czstotliwoci rwnej: ..... (jako wiczenie powiniene sam wpisa warto odpo wied w kolejnym odcinku naszego cyklu). ANL C, bit a) ang. AND direct bit to carry , iloczyn lo giczny znacznika C i bitu o adresie podanym jako bezporedni b) w wyniku tej operacji zostanie wykonany iloczyn logiczny flagi przeniesienia C oraz bi tu o adresie bit, a wynik zostanie umiesz czony w C C < C (bit) c) kod: 1 0 0 0 0 0 1 0 82h d) cykle: 2 bajty: 2 (kod instrukcji + adres bitu) e) przykad: ANL C, D6h ;iloczyn flagi przeniesienia C i flagi przeniesienia ;pomocniczego AC (jej adres w sowie PSW to D6h) ;inkrementacja akumulatora z wykorzystaniem C

Operacje na bitach
Do tej pory omawialimy instrukcje operujce na bajtach danych. Procesor 8051 i mu pochodne zawiera bardzo po mocny zestaw instrukcji do wykonywa nia operacji na pojedynczych bitach. Dziki temu moliwe jest wykonanie wielu czsto niezbdnych operacji, jed na z nich byo omwione wczeniej stro nicowanie zewntrznej pamici danych (przykad z instrukcj MOV @Ri,A). Trze ba wiedzie e wikszo rejestrw specjalnych SFR procesora posiada moliwo bezporedniego adresowa nia ich bitw. I tak np. akumulator (A) skada si z 8miu adresowanych bitw Acc.7 ... Acc.0 Tote aby np. ustawi wybrane bity te go rejestru nie trzeba modyfikowa cao ci a jedynie wyzerowa lub ustawi wy brani bit. Dla przykadu przeledzimy sytu acj kiedy chcemy wyzerowa bit 4 aku mulatora bez ingerowania w pozostae, mona wykona te zadanie dwojako: poprzez instrukcj iloczynu logicznego: ANL A, #11101111b ;wyzerowanie bitu 4 akumulatora lub poprzez instrukcj dziaajc na po jedynczym bicie: CLR Acc.4 Instrukcje operujce na bitach nabiera j szczeglnie praktycznego znaczenia przy badaniu stanu kocwek (portw) mikroprocesora lub przy ich sterowaniu (ustawianiu na nich poziomw logicznych niskich lub wysokich oraz przy ustawianiu w stan wysokiej impedancji). Problemem tym zajmiemy si przy okazji kolejnej lek cji ze szkoy mikroprocesorowej.
CLR C a) ang. clear carry, zeruj flag przeniesienia b) w wyniku tej operacji wyzerowany zostaje znacz nik (bit w rejestrze PSW) przeniesienia C C < 0 c) kod: 1 1 0 0 0 0 1 1 C3h d) cykle: 1 bajty: 1 e) przykad: CLR C ;wyzerowanie przeniesienia SUBB A, B ;aby odj A B bez poyczki .... SETB C a) ang. set carry, ustaw flag przeniesienia b) w wyniku tej operacji ustawiona zostaje fla ga przeniesienia C < 1 c) kod: 1 1 0 1 0 0 1 1 D3h d) cykle: 1 bajty: 1

5. Dodatkowe instrukcje przemieszczania danych


XCH A, Rn ang. exchange register with accumulator, wymie akumulator z rejestrem w wyniku tej operacji zawarto akumulato ra zostaje wymieniona z zawartoci rejest ru Rn (R0...R7), wymieniona tzn. e liczba znajdujca si w A znajdzie si w Rn, i od wrotnie. A <> Rn kod: 1 1 0 0 1 n2 n1 n0 gdzie n2...n0 wskazuj na R0...7 std: C8hCFh cykle: 1 bajty: 1 przykad: MOV A, #10 ;nadanie wartoci akumulatorowi MOV R4, #23 ;nadanie wartoci rejestrowi R4 XCH A, R4 ;wymiana danych .... ;teraz w A jest liczba 23, a w R4 liczba 10 XCH A, adres w wyniku tej operacji zawarto akumulato ra zostaje wymieniona z zawartoci komr ki w wew. pamici RAM o podanym adresie bezporednim A <> (adres) kod: 1 1 0 0 0 1 0 1 C5h cykle: 1 bajty: 2 (kod instrukcji C5 + adres) przykad: MOV A,#99 MOV 00h, #0 XCH A, 00h ;teraz w akumulatorze bdzie 0 .... XCH A, @Ri w wyniku tej operacji zawarto akumulato ra zostaje wymieniona z zawartoci komr ki w wew. RAM o adresie znajdujcym si w rejestrze R0 (i=0) lub R1 (i=1) A <> (Ri) kod: 1 1 0 0 0 1 1 i gdzie i = 0,1 std: C6h, C7h cykle: 1 bajty: 1 przykad: wykonanie instrukcji MOV R1, #20h CLR A XCH A, @R1 jest rwnowane MOV A, 20h MOV 20h, #0 zastanw si dlaczego ? XCHD A, @Ri w wyniku tej operacji modszy pbajt (bity 30) akumulatora zostaje wymieniony z modszym pbajtem komrki w wew. RAM o adresie zawartym w rejestrze Ro (i=0) lub R1 (i=1).

40

ELEKTRONIKA DLA WSZYSTKICH 12/97

Te to potrafisz
ANL C, /bit a) ang. AND complement of direct bit to car ry, iloczyn logiczny znacznika C i zanego wanego bitu o adresie podanym jako bezpo redni b) w wyniku tej operacji zostanie wykonany iloczyn logiczny flagi przeniesienia C oraz za negowanego bitu o adresie bit, a wynik zostanie umieszczony w C C < C /(bit) c) kod: 1 0 1 1 0 0 0 0 B0h d) cykle: 2 bajty: 2 (kod instrukcji + adres bitu) e) przykad: ANL C, /D7h ;rwnowane wyzerowaniu znacznika C ;bo wymnoono C przed zanegowane C ;(adres C w PSW to D7h) ORL C, bit a) ang. OR direct bit to carry, logiczna suma znacznika C i bitu o adresie podanym jako bezporedni b) w wyniku tej operacji zostanie wykonana suma logiczna flagi przeniesienia C oraz bitu o adresie bit, a wynik zostanie umiesz czony w C C < C (bit) c) kod: 0 1 1 1 0 0 1 0 72h d) cykle: 2 bajty: 2 (kod instrukcji + adres bitu) e) przykad: ORL C, D6h ;suma flagi przeniesienia C i flagi przeniesienia ;pomocniczego AC (jej adres w sowie PSW to D6h) ORL C, /bit a) ang. OR complement of direct bit to car ry, suma logiczna znacznika C i zanegowa nego bitu o adresie podanym jako bezpo redni b) w wyniku tej operacji zostanie wykonana suma logiczna flagi przeniesienia C oraz za negowanego bitu o adresie bit, a wynik zostanie umieszczony w C C < C /(bit) c) kod: 1 0 1 0 0 0 0 0 A0h d) cykle: 2 bajty: 2 (kod instrukcji + adres bitu) e) przykad: ORL C, /D7h ;rwnowane ustawieniu znacznika C ;bo zsumowano C przed zanegowane C ;(adres C w PSW to D7h) MOV C, bit a) ang. move direct bit to carry , przenie za warto bitu o podanym adresie bezpored nim do znacznika przeniesienia C b) w wyniku tej operacji zawarto bitu o po danym adresie bit zostanie przepisana do znacznika przeniesienia C C < (bit) c) kod: 1 0 1 0 0 0 1 0 A2h d) cykle: 1 bajty: 2 (kod instrukcji A2h + adres bitu) e) przykad: MOV C, P1.7 ;odczyt stanu kocwki 7 portu P1 i wpisanie go do C MOV bit, C a) ang. move carry to direct bit, przenie za warto znacznika C do bitu o podanym ad resie bezporednim b) w wyniku tej operacji zawarto znacznika przeniesienia C zostanie przepisana do bitu o podanym adresie bezporednim bit (bit) < C c) kod: 1 0 0 1 0 0 1 0 92h d) cykle: 2 bajty: 2 (kod instrukcji + adres bitu) e) przykad: pytanie?... jak przenie zawarto jakiego bitu (o podanym adresie bezporednim do innego o innym adresie bezporednim czyli wykona operacj : (bit2) < (bit1) Ot do wykonania tego niezbdny jest znacznik C, nie mona bowiem wykona ta kiej operacji bezporednio jednym rozkazem. Nie istnieje w 8051 instrukcja ktra by wyko nywaa tak operacj przeniesienia zawarto ci jednego bitu do drugiego bezporednio.

Te to potrafisz
Zamy e bit1 zdefiniowalimy jako: bit1 EQU 20h ;EQU to deklaracja rwnowanoci przypisania ;nazwie umownej (wyrazowi) konkretnego adresu a bit 2 jako bit2 EQU 30h Chcc teraz przenie zawarto bitu 1 do bitu 2 czsto pocztkujcy wykonuj bdn operacj: MOV bit2, bit1 co w efekcie nie powoduje przeniesienia bi tu 1 do 2 ale przepisanie zawartoci komrki wew. RAM o adresie 20h do komrki o adre sie 30h wykonywana jest zatem operacja na bajtach , a nie przenoszenie bitw (patrz instrukcja: MOV adres1, adres2) Prawidow odpowiedzi na postawione za danie bdzie wykorzystania instrukcji MOV dziaajcych na bitach i znaczniku przenie sienia C w postaci sekwencji: MOV C, bit1 ;najpierw zaaduj bit1 do C MOV bit2, C ;a potem C do bitu 2, w efekcie przeniose bit1 do 2 ....

W dzisiejszym odcinku to wszystkie instrukcje, w trzeciej czci ostatniej opisujcej list polece procesora 8051 zapoznasz si drogi Czytelniku z instruk cjami skokw warunkowych, bezwarun kowych i do podprogramw. Po zapozna niu si z pozostaymi poleceniami roz poczniemy wsplne tworzenie pierw szych aplikacji (programw) na procesor 8051 przy wykorzystaniu zmontowanego przez Ciebie komputerka edukacyjnego. Na razie w celu przewiczenia om wionych dzisiaj instrukcji zapraszam do wnikliwej lektury Lekcji 3 szkoy mikro procesorowej. Sawomir Surowiski

Lekcja

Jako uwieczenie analizy drugiej czci listy instrukcji procesora 8051 proponuj abymy przewiczyli przesy anie danych pomidzy procesorem a zewntrzn pamici danych, umiesz czon na pytce komputerka ukad U4. Ot wsplnie napiszemy prost proce dur testujc wszystkie komrki tej pa mici, z dodatkowym wywietlaniem na wywietlaczu aktualnie testowanego adresu i ewentualnych bdw. Wyko rzystamy przy tym m.in. instrukcj MOVX, a pami bdziemy adresowa z wykorzystaniem penego 16bitowego adresu. Popatrzmy zatem i przeanalizujmy lis ting przykadowego programu, realizuj cego procedur testowania pamici. Program zasadniczo skada si z 3 czci:

w pierwszej na wywietlaczu wypisywa ny adres aktualnie testowanej komrki w drugiej: testowana jest komrka pa mici przez zapisanie w niej, odczyt i weryfikacj wartoci testowej: czyli dwch liczb: 55h i AAh. Wybrano wa nie takie liczby, bowiem jak pewnie za uwaye s one kombinacjami zer i jedy nej na przemian: 55h = 01010101b, a AAh = 10101010h, co pozwala na spraw dzenie wszystkich 8miu bitw danej komrki pamici. w trzeciej czci inkrementowany jest adres wskanika DPTR po czym jeeli nie przekracza on zaoonego obszaru pamici (8100h...9FFFh) wykonywany jest skok na pocztek procedury i tes towana jest nastpna komrka. W przypadku wykrycia bdu nastpu je skok do etykiety blad w ktrej

w efekcie zostaje wypisany komunikat Err skrt od error z angielskiego bd wraz z widniejcym adresem wadliwej komrki. W przypadku przetestowania caego zakresu pamici wypisany zostaje komu nikat o zakoczeniu: End koniec. Zauwamy e testowany obszar za czyna si od adresu 8100h, a nie np. 8000h, dlaczego? Ot pamitajmy e w obszarze 8000h....8040h znajduje si kod naszego programu, tote gdybymy wpisali jako warto pocztkow adres 8000h, program zostaby zamazany i komputerek zawiesiby si. Ta sama uwaga dotyczy adresu ko cowego, w przypadku pamici 8kB (6264). Posiadacze komputerkw z 32kB RAM (62256) mog zakoczy testowanie pamici na adresie FFFFh.

ELEKTRONIKA DLA WSZYSTKICH 12/97

41

Te to potrafisz
W takim przypadku naley nieco zmody fikowa program, sposb w dalszej czci artykuu. Uwaga, przed rozpoczeciem wpisywa nie programu upewnij si czy zwora JP3 znajduje si w pozycji 8000h. a nastpnie przekompilowa program rdowy jeszcze raz. Wtedy w momen cie gdy po inkrementacji DPTR bdzie = 0000h (przekroczy FFFFh czyli ostatni adres w RAM) warunek : mov A, DPH jnz next i tak bdzie speniony bez skasowanej linii i w efekcie nastpi skok na koniec programu. DPTR (inn ni proponowana: 8100h). W tym miejscy uwaga: pjcie wyej adresu 8041h spowoduje zamazanie czci kodu programu testujcego patrz listing 1. Jeeli denerwuje Ci szybkie przemia tanie testowanego adresu, moesz to spowolni wpisujc w linii pod adresem 8006h wiksz warto do akumulatora. Regua: warto wpisana do A * 2 mi lisekundy = opnienie po tecie kadej komrki. Komputerowcy moga zmodyfikowa t lini w programie LEKCJA3.S03 np. mov A, #99h ..... przy takiej wartoci procedura testujca bdzie trwaa niesamowicie dugo (mo na si zdrzemn). Pozostali moga modyfikowa opnie nie poprzez wpisanie do komrki o adre sie 8007h (funkcja Edit monitora) do woln warto z zakresu 1...FFh (1...255) i prbowac od nowa. Wesoej zabawy ! Sawomir Surowiski

Dla komputerowcw:
Przedstawiony program znajduje si na dyskietce kursu (AVT2250/D) jako zbir LEKCJA3.S03. Naley go skompilowa jak poprzed nie lekcje wydajc komend DO LEKCJA3 lub uy bezporednio komendy kompilatora: > PASM51 LEKCJA3.S03 /H /L co spowoduje utworzenie zbioru wynikowego w postaci IntelHEX, gotowego do przesania do komputerka poprzez cze szeregowe. Dodatkowy zbir LEKCJA3.LST jest listingiem programu przedstawionym w artykule. W przypadku chci przetestowania pa mici 32kB (posiadacze U4 62256) na ley wykasowa lini :
8024 64A0 xrl A,#A0h ;testujemy RAM

Dla nie posiadajcych PC ta:


Tak jak poprzednio naley wstuka kod programu poczwszy od adresu 8000h, korzystajc z gotowych bajtw kodu poda nych w drugiej kolumnie listingu 1, czyli: 12, 02, 74, 90, 81, 00 .... itd. W przypadku chci przetestowania pa mici 32kB (U4 62256) naley pomin lini z listingu pod adresem 8024h, wpisujc w miejsce bajtw : 64, A0 bajty 00, 00 czyli dwie instrukcje NOP (puste). Dodatkowo mona poeksperymento wa z pocztkow wartoci wskanika

CPU 8052.DEF ;*************************************************************** ; Lekcja 3: Testowanie zewnetrznej pamieci danych U4 ;*************************************************************** const.inc bios.inc ;deklaracje dla kompilatora org lcall mov next: mov lcall mov lcall test55: mov movx movx xrl jnz testAA: mov movx movx xrl jnz inc mov xrl jnz koniec: mov mov mov sjmp DL6,#_E DL7,#_n DL8,#_D stop ;na koniec milutki napis End koniec ;informujacy ze koniec testu ;i skok na koniec programu A,#AAh @DPTR,A A,@DPTR A,#AAh blad DPTR A,DPH A,#A0h next ;zaladowanie 2 liczby testowej (10101010b) ;i zapisanie jej w zewn. RAM ;i odczyt spod tego samego adresu ;sprawdzenie danej ze wzorcem ;jezeli sie nie zgadza to blad komorki ;zwiekszenie wskaznika adresu o 1 ;spr. czy nie koniec testowanego adresu ;testujemy RAM do adresu A000h ;jezeli nie to testuj nastepna komorka A,#55h @DPTR,A A,@DPTR A,#55h blad ;zaladowanie 1 liczby testowej (01010101b) ;i zapisanie jej w zewn. RAM ;i odczyt spod tego samego adresu ;sprawdzenie danej ze wzorcem ;jezeli sie nie zgadza to blad komorki A,#5 DELAY B,#1 DPTR4HEX ;male opoznienie (ok. 10ms) ;abys mogl zaobserwowac zmiane adresu ;od pozycji 1 wyswietlacza ;wypisz aktualnie testowany adres RAM 8000h CLS DPTR,#8100h ;kod programu od adresu 8000h ;wyczyszczenie wyswietlacza ;testujemy od adresu 8100h do 9FFFh

include include 8000 8000 120274 8003 908100 8006 8006 7405 8008 120295 800B 75F001 800E 12025F 8011 8011 7455 8013 F0 8014 E0 8015 6455 8017 701A 8019 8019 74AA 801B F0 801C E0 801D 64AA 801F 7012 8021 8022 8024 8026 A3 E583 64A0 70DE

8028 8028 757D79 802B 757E54 802E 757F5E 8031 8009

; ;ta czesc programu zadziala gdy bedzie blad jakiejs komorki RAM 8033 757D79 8036 757E50 8039 757F50 803C 7571E0 803F 80FE 8041 blad: stop: stop2: mov mov mov mov sjmp END DL6,#_E DL7,#_r DL8,#_r blinks,#E0h stop2 ;niemmily komunikat ze pod adresem z DPTR ;jest blad pamieci RAM napis Err ;aby napis End lub Err bedzie mrygal ;i stop programu (klawisz M powrot)

42

ELEKTRONIKA DLA WSZYSTKICH 12/97

Te to potrafisz

Niniejszy, trzeci z kolei odcinek kursu programowania powicony licie in strukcji procesora 8051, jest ostatnim teoretycznym kawakiem niezbd nych informacji, dziki ktrym wsplnie krok po kroku utworzymy pierwszy prawdziwy program. Przy okazji pragn wspomnie e w lis tach napywajcych od Was drodzy Czy telnicy, czsto poruszacie spraw niedo sytu wiedzy oraz informacji na temat przytaczanych w lekcjach przykadw. Ot sprawa kompleksowego a jedno czenie przystpnego przedstawienia problemw zwizanych z programowa niem mikrokontrolerw nie jest taka prosta, nawet z mego punktu widzenia. Przekonaem si e nie da si w jednym odcinku naszego cyklu przedstawi wszystkich zagadnie uytych w jednej z naszych lekcji. Zbyt wiele informacji zazbia si za siebie, tote prosz o cierpliwo, wszystkie niejasne in strukcje z przykadw zostan w kolej nym odcinku wyjanione do koca.
Jak wspominaem w poprzednim odcinku, przysza pora na zapoznanie si z ostatni gru p instrukcji, a mianowicie skokami oraz wy woaniami podprogramw. Pierwsze z nich dzielimy na: skoki warunkowe skoki bezwarunkowe Dodatkowo, w przypadku skokw warun kowych, warunek przy ktrym nastpuje skok, moe spenia okrelony bajt z we wntrznej pamici danych procesora (np. kie dy dany bajt konkretna liczba to nastpuje skok) lub bit. W tym ostatnim przypadku pro cesor sprawdza czy bit jest ustawiony (=1) czy wyzerowany (=0) i podejmuje decyzj o skoku lub nie. A co moe w programie zmieni takim czy inny bit?, a no jaka in strukcja ktra zostaa wykonana wczeniej, a wyniku ktrej dany bit zosta ustawiony lub wyzerowany. W jzyku programistw bit (bi ty), ktrego znaczenie jest istotne dla dziaa nia programu, ktry informuj o tym czy, np. przy dodawaniu dwch liczb 8bitowych na stpio przeniesienie (kiedy wynik > 255), na flag. Okreleniem tym bdziemy zywa si f si do czsto posugiwa, tote warto je zapamita. Warto te sobie wyjani co oznacza samo pojcie skoku fizycznie dla pracy procesora. Ot jeeli procesor wykonuje kolejne instruk cje programu, to za kadym pobraniem kolej nej instrukcji zwiksza si automatycznie licz nik rozkazw PC, o ktrym mwilimy ju wczeniej. Jeeli procesor napotka na instruk cj skoku, to argumentem (tej instrukcji) w ta kim przypadku, jest liczba bdca: przesuniciem (liczba w kodzie U2, zakres <128...127>, ktra jest dodawana do bie cej wartoci PC lub wartoci bezwzgldn licznika rozkazw PC (w przypadku skokw bezwarunkowych)

Mikrokontrolery? To takie proste...


Cz 9 Asembler jzyk maszynowy procesora
Argument taki zostaje w efekcie dodany do licznika rozkazw PC, co w efekcie powoduje skok do innej czci programu w przd lub w ty. Na pocztek poznajmy wic skoki warunko we testujce bity znajdujce si w obszarze wew. RAM procesora, oczywicie. JC rel ang.jump if Carry skocz jeeli znacznik przeniesienia C jest ustawiony sprawdzany jest bit przeniesienia C w so wie PSW (adres bajtu: D0h), jeeli jest usta wiony (=1) to do licznika rozkazw PC jest dodawana 8bitowa liczba rel (zapisana w kodzie U2), zostaje wykonany skok wzgldny PC < PC + 2, jeli C=1, to PC < PC + rel kod: 0 1 0 0 0 0 0 0 40h cykle: 2 bajty: 2 (kod instrukcji 40h + przesunicie rel) przykad: MOV A,#20h ;zaadowanie do akumulatora liczby 32 ADD A,B ;dodanie do akumulatora biecej wartoci rej. B JC przenies ;czy nastpio przeniesienie, tak to skocz do etykiety ;przenies MOV B,#0 ;nie, to wyzeruj rejestr B ..... ;po czym wykonuj dalsze instrukcje ..... ..... przenies: ;tu nastapi skok jeeli znacznik C by ustawiony CLR C ;w efekcie nastpi jego wyzerowanie Jak wida z przykadu korzystajc z instrukcji JC nie podawalimy argumentu bezpored niego, czyli liczby, tylko okrelilimy za pomo ca etykiety przenies miejsce w programie rdowym do ktrego ma nastpi skok, je eli warunek bdzie speniony. Taki sposb zapisu jest jak wida prostszy, nie musimy li czy przesunicia sami, ktre to jest zreszt iloci bajtw kodu programu pomidzy in strukcj skoku JC a miejscem skoku. Ta mo liwo dotyczy jednak tych z Was drodzy Czytelnicy, ktrzy posiadaj komputery i mo g skorzysta z kompilatora zawartego na dyskietce AVT2250/D lub kadego innego. W przypadku osb ktre rcznie tuma cz kod programu, sprawa si nieco kompli kuje, ale nie do tego stopnia, aby nie da so bie z ni rady. W kolejnych lekcjach poka jak prosto oblicza przesunicia w tej in strukcji oraz pozostaych, tam gdzie wyst rel, pamitajcie o nim przy puje symbol r lekturze dalszej czci artykuu! W tym miejscu istotna uwaga dla wszyst kich. Ot jak wida warto przesunicia nie moe przekroczy liczb z zakresu U2 czy li 128...127, innymi sowy skok wzgldny moe odby si tylko w pewnym otocze niu (w gr lub w d) od instrukcji skoku. Jeeli warto przesunicia jest ujemna, to skok nastpi oczywicie w kie runku mniejszych adresw (do PC zostaje dodana liczba ujemna), w przeciwnym przy padku w kierunku adresw wzrastajcych. W przypadku umieszczenia etykiety (miejs ca) skoku poza tym zakresem, prawidowe obliczenie przesunicia bdzie niemoliwe (dla rczniakw), a w przypadku korzysta nia z kompilatora 8051 (komputerowcy) wystpi komunikat o bdzie kompilacji m wicy o przekroczeniu zakresu skoku wzgldnego. Programicie w takim przypad

ELEKTRONIKA DLA WSZYSTKICH 1/98

41

Te to potrafisz
ku nie pozostaje nic innego jak poprawi bd modyfikujc program rdowy. JNC rel ang.jump if not Carry skocz jeeli znacz nik przeniesienia C jest wyzerowany sprawdzany jest bit przeniesienia C w so wie PSW (adres bajtu: D0h), jeeli jest wy zerowany (=0) to do licznika rozkazw PC jest dodawana 8bitowa liczba rel (zapi sana w kodzie U2), zostaje wykonany skok wzgldny PC < PC + 2, jeli C=0, to PC < PC + rel kod: 0 1 0 1 0 0 0 0 50h cykle: 2 bajty: 2 (kod instrukcji 50h + przesunicie rel) przykad: MOV A,#20h ;zaadowanie do akumulatora liczby 32 dodaj: ADD A,#1 ;dodanie do akumulatora liczby 1 JNC dodaj ;czy nastpio przeniesie nie, nie to dodaj jeszcze raz ..... ;w efekcie akumulator bdzie inkrementowany a do ..... ;czasu kiedy osignie warto 00h, a do znacznika C ;zostanie wpisana 1ka, potem zostan wykonane ..... ;dalsze instrukcje JB bit, rel ang.jump if Bit Set skocz jeeli bit jest ustawiony sprawdzany jest bit, ktrego adres podany jest w bit, jeeli jest ustawiony (=1) to do licznika rozkazw PC jest dodawana 8bito wa liczba rel (zapisana w kodzie U2), zo staje wykonany skok wzgldny PC < PC + 3, jeli (bit)=1, to PC < PC + rel kod: 0 0 1 0 0 0 0 0 20h cykle: 2 bajty: 3 (kod instrukcji 20h + adres bitu + przesunicie rel) przykad: JB 7Fh, zeruj ;jeeli bit o adresie 7Fh = 1 to skocz do etykiety zeruj MOV A,B ;jeli nie to dodaj do akumulatora rejestr B ..... ;i wykonuj dalsze instrukcje ..... zeruj: CLR A ;jeeli bit by ustawiony to wyzeruj akumulator JNB bit, rel ang.jump if Bit not Set skocz jeeli bit jest wyzerowany sprawdzany jest bit, ktrego adres podany jest w bit, jeeli jest wyzerowany (=0) to do licznika rozkazw PC jest dodawana 8bitowa liczba rel (zapisana w kodzie U2), zostaje wykonany skok wzgldny PC < PC + 3, jeli C=0, to PC < PC + rel kod: 0 0 1 1 0 0 0 0 30h cykle: 2 bajty: 3 (kod instrukcji 30h + bajt + przesunicie rel) przykad: CLR C ;wyzerowanie znacznika przeniesienia zeruj: MOV 70h, C ;wyzerowanie bitu a adresie 70h JNB 70h,zeruj ;jeeli bit 70h jest =0 to skok do etykiety zeruj Podany przykad, z praktycznego punktu wi dzenia jest nieprzydatny, lecz pokazuje jak mona zrealizowa ptl nieskoczon (zawiesi procesor), uywajc instrukcji skoku warunkowego. Zauwamy przecie, e warunek: e bit 70h jest wyzerowany b dzie speniony zawsze, tote za kadym ra zem nastpi skok do etykiety zeruj w miejsce programu gdzie nastpuje zero wanie bitu 70h, i caa ptla si powtarza. JBC bit, rel ang.jump if Bit Set and Clear Bit skocz jeeli bit jest ustawiony i wyzeruj go sprawdzany jest bit, ktrego adres podany jest w bit, jeeli jest ustawiony (=1) to zostaje wy zerowany po czym do licznika rozkazw PC jest dodawana 8bitowa liczba rel (zapisana w ko dzie U2), zostaje wykonany skok wzgldny PC < PC + 3, jeli (bit)=1, to (bit)<0 i PC < PC + rel kod: 0 0 0 1 0 0 0 0 10h cykle: 2 bajty: 3 (kod instrukcji 10h + adres bitu + przesunicie rel) przykad: wykonanie sekwencji instrukcji ADD A, B ;dodaj do akumulatora zawarto rejestru B JBC C, et01 ;jeeli nastpio przeniesienie to wyzeruj C i skocz ..... ;jeeli nie to wykonuj dalsze instrukcje ..... et01: MOV P1, A ;tu nastpi skok jeeli byo przeniesienie funkcjonalnie jest rwnowane sekwencji: ADD A, B ;dodaj do akumulatora zawarto rejestru B JC et01 ;jeeli nastpio przeniesienie skocz ..... ;jeeli nie to wykonuj dalsze instrukcje ...... et01: CLR C ;tu nastpi skok jeeli byo przeniesienie, zeruj C MOV P1,A przeanalizuj i zastanw si dlaczego? To tyle jeeli chodzi o skoki warunkowe operujce na bitach, teraz pora na kilka in strukcji skokw warunkowych operujcych na bajtach, bezwzgldnych oraz wywoa podprogramw. ACALL adr11 ang. subroutine call on page, skocz do podprogramu na stronie licznik rozkazw PC jest zwikszany o 2, na stpnie adowany jest na stos (najpierw modszy bajt, potem starszy), wskanik stosu jest zwikszany o 2, a do bitw 0...10 liczni ka PC zostaje wpisany 11bitowy adres bez poredni podany jako argument instrukcji: adr11. Pi najstarszych bitw licznika roz kazw PC nie ulega zmianie, tote skok zo staje wykonany w obrbie 2 kilobajtowej strony pamici programu, na ktrej wyst puje nastpna po ACALL adr11 instrukcja. PC < PC + 2, SP < SP + 1, (SP) < PC70, SP < SP + 1, (SP) < PC158 PC100 < adr11 kod: a10 a9 a8 1 0 0 0 1 gdzie: a10, a9, a8 zale od numeru strony std: 11h, 31h, 51h, 71h, 91h, B1h, D1h, F1h cykle: 2 bajty: 2 (kod instrukcji + modszy bajt adresu adr11 bity a7...a0) przykad: ACALL PISZ ;wywoanie podprogramu ...... ;po zakoczeniu go zostaj wykonane kolejne ...... ;instrukcje programu ...... ;tu zaczyna si podprogram, ktrego (w tym przykadzie) zadaniem jest wysanie ;poprzez kocwki portu P1 procesora sek wencji kodw ASCII odpowiadajcych ;kolejnym literom tekstu Hello from AVT 2250, a do momentu napotkania kodu ;zerowego (0). PISZ: MOV ;etykieta nazwa podprogramu DPTR, #tekst ;zaaduj do wska nika DPTR adres tesktu

next: CLR A ;wyzeruj akumulator MOVC A,@A+DPTR ;pobierz kolejny znak z tekstu (do akumulatora) JZ koniec ;czy koniec tekstu ( znak = Acc = 0 )?, tak to skocz MOV P1, A ;nie to wylij kod na ko cwki portu P1 INC DPTR ;przesu adres na kolejn liter tekstu SJMP next ;i skocz do next aby pobra kolejn liter koniec: RET ;instrukcja zakoczenia podprogramu i powrotu do ;gwnej czci programu ;a to jest zdefiniowany przykadowy tekst, zakoczony kodem (bajtem) 0 ;w celu identyfikacji koca tekstu. tekst DB HELLO FROM AVT2250, 0 LCALL adr16 ang. subroutine call skocz do podpro gramu licznik rozkazw PC zostaje zwikszony o 3, jest adowany na stos w efekcie czego wskanik stosu jest zwikszany o 2, a do licznika rozkazw PC zostaje wpisany 16bitowy adres bezporedni, podany jako argu ment przy wywoaniu instrukcji LCALL. Dziki tej instrukcji moliwe jest wywoanie podprogra mu w dowolnym obszarze pamici (64kB) po przez podanie bezporedniego adresu. PC < PC + 3 SP < SP + 1, (SP) < PC70, SP < SP + 1, (SP) < PC158 PC < adr16 kod: 0 0 0 1 0 0 1 0 12h cykle: 2 bajty: 3 (kod instrukcji 12h + bardziej znaczcy bajt adr16 + mniej znaczcy bajt adr16 przykad: wypisanie liczby 12h na wywiet laczu komputerka edukacyjnego przy pomo cy instrukcji A2HEX standardowo umiesz czonej w kodzie monitora systemu (w EP ROM doczonej do zestawu). A2HEX EQU 024Eh ;deklaracja adresu podpro gramu w monitorze MOV A, #12h ;wypisz liczb 12h jako 2 znaki w HEX MOV B, #3 ;na pozycji 3 wywietlacza LCALL A2HEX ;pod adresem 024Eh znajduje si gotowy ;podprogram do wypisywania akumulatora w ;postaci 2 cyfr HEX W efekcie wykonania przykadu na wy wietlaczach zostanie wypisana liczba 12h. W postaci 12.

42

ELEKTRONIKA DLA WSZYSTKICH 1/98

Te to potrafisz
RET ang. return from subroutine, powr z podprogramu adres powrotu z podprogramu (zapamitana wczeniej podczas instrukcji ACALL lub LCALL warto licznika PC) jest wpisywany do licznika rozkazw PC. Wskanik stosu zo staje mniejszony o 2. W efekcie nastpuje powrt z podprogramu. Instrukcj t musi koczy si kady podprogram (z wyjtkiem podprogramw obsugi przerwa, wywoy wanych automatycznie przez procesor). PC158 < (SP), SP < SP 1 PC70, < (SP), SP < SP 1 kod: 0 0 1 0 0 0 1 0 22h cykle: 2 bajty: 1 przykad: patrz procedura PISZ przy okaz ji omawiania instrukcji ACALL. Procedura PISZ zostaa zakoczona instrukcj po wrotu z podprogramu RET, dziki ktrej mogo nastpi odtworzenie pierwotnego stanu licznika PC i dziki temu powrt do programu gwnego. Tak powinien koczy si kady Twj podprogram. RETI ang. return from interrupt, powr z pod programu obsugi przerwania adres powrotu z podprogramu obsugi prze rwania jest wpisywany do licznika rozkazw PC. Wskanik stosu zostaje mniejszony o 2. Instrukcj t musi koczy si kady pod program, ktry jest wywoywany automa tycznie przez procesor w przypadku zgo szenia przerwania i dania jego obsugi. PC158 < (SP), SP < SP 1 PC70, < (SP), SP < SP 1 kod: 0 0 1 1 0 0 1 0 32h cykle: 2 bajty: 1 przykad: omwimy przy okazji dokadnego opisu systemu przerwa oraz moliwoci praktycznych zastosowa. Teraz zapoznam Was, drodzy Czytelnicy z trzema bardzo czsto uywanymi instruk cjami skokw bezwarunkowych. W licie in strukcji procesora 8051 istniej trzy rodzaje instrukcji skoku bezwarunkowego. Rznica midzy nimi polega na odlegoci (o ile bajtw programu dalej mona skoczy) po midzy instrukcj skoku a miejscem w kt re nastpuje skok. I tak mamy do czynienia ze skokiem : krtkim (instrukcja SJMP short jump), gdzie skoczy moemy w obrbie 256 bajtw (w gre o 127 lub w d o 128) od miejsca wy woania instrukcji SJMP. W tym przypadku ar gumentem instrukcji jest przesunicie (tak jak wspominany wczesniej parametr rel przy okazji omawiania insturkcji skokw warunko wych operujcych na bitach), wyraone po przez liczb 8bitowa zapisan w kodzie U2. na stronie (instrukcja AJMP absolute jump on page), gdzie skok moe nastapi w obsza rze 2 kilobajtowej strony. W tym przypakdu ar gumentem instukcji jest 11bitowy adres bez poredni, ktry podajemy po mnemoniku AJMP. W praktyce mona ten skok okreli ja ko redni (w stosunku do krtkiego SJMP) dugi (instrukcja LJMP long jump), gdzie skok moe nastapi w dowolne miejsce w obszarze 64kB przestrzeni pamici progra mu procesora. W tym przypadku argumen tem skoku jest 16bitowy adres bezpored ni podawany jako argument tej instrukcji. Kto moe w tym miejscu zapyta, po co ta komplikacja, przecie wystarczyby w za sadzie tylko jeden typ skoku, taki ktry daje najwiksze moliwoci, czyli LJMP?. Tak ale w przypadku pisania programw na pro cesory jednoukadowe istnieje potwierdzo na w praktyce zasada, e: kady bajt kodu jest cenny, tote program naley pisa tak aby zajmowa jak najmniej miejsca. I tu le y sedno sprawy, ot trzy wymienione ro dzaje instrukcji skokw rni sie objtoci zajmowan w kodzie programu. I tak skok krtki SJMP oraz na stronie AJMP zajmuja 2 bajty kodu, natomiast skok dugi LJMP za jmuje 3 bajty, kto powie e to maa rnica, otz moi drodzy bdziecie mogli si o tym jeszcze przekona e czsto 1 dodatkowy bajt wolny w programie to recepta na zreali zowanie i dokoczenie niejednego progra mu. Przejdmy zatem do szczegow. AJMP adr11 ang. Absolute Jump, skocz bezwarunko wo na stronie licznik rozkazw zostaje zwikszony o 2, na stpnie do jego bitw 010 zostaje wpisany 11 bitowy adres bezporedni podany jako para metr. Pozostae 5 bardziej znaczcych bitw nie zmienia si. W efekcie wykonania tego polece nia nastpuje skok pod adres na stronie pami ci programu o wielkoci 2 kilobajty, na ktrej jest umieszczona kolejna instrukcja po AJMP. PC100 < adr11 kod: a10 a9 a8 0 0 0 0 1 ,gdzie: a10, a9, a8 zale od numeru strony std: 01h, 21h, 41h, 61h, 81h, A1h, C1h, E1h cykle: 2 bajty: 2 (kod instrukcji + modszy bajt adresu adr11 bity a7...a0) przykad: MOV P1,A AJMP koniec ..... ..... ..... koniec: Po przesaniu zawartoci akumulatora do por tu P1 (na kocwki tego portu) procesor omi nie instrukcje w liniach oznaczonych wielo kropkiem i wykona skok do miejsca (etykie ty) programu oznaczonej jako koniec. SJMP rel ang. Shot Jump skok bezwarunkowy krtki do zawartoci licznika rozkazw PC jest do dawane 8bitowe przesunicie (liczba ze znakiem w kodzie U2 z zakresu <128...127>). W efekcie wykonywany jest skok w obrbie 256 bajtw od kolejnej po SJMP instrukcji. PC < PC + 2, PC < PC + rel kod: 1 0 0 0 0 0 0 0 80h cykle: 2 bajty: 2 (kod instrukcji 80h + przesunicie rel) przykad: MOV A,B ;dowolne insturkcje programu CLR B ; ..... stop: SJMP stop ;i przykad ptli nieskoczonej, ktr powinien dla ;bezpieczestwa koczy si kady program END ;deklaracja koca programu (to nie jest instrukcja!) A oto pozostae instrukcje skokw, jedna bezwarunkowa oraz pozostae warunkowe sprawdzajce warunek rwnoci bajtu o po danym adresie lub rejestru z innym bajtem lub argumentem bezporenim. Dokoczenie listy instrukcji w nastpnym numerze. Sawomir Surowiski

Lekcja

4
ROM zawarty jest program monitora o tym ju wiecie. Dziki niemu moliwa jest komuni kacja i adowanie programw z komputera PC lub rcznie. Monitor jest na tyle mdry e do datkowo komunikuje si z uytkownikiem za pomoc 8mio pozycyjnego wywietlacza i lo kalnej klawiatury. No ale przecie ten moni tor to w kocu te kawaek programu napisa ny za pomoc tych samych instrukcji , ktre poznawalicie przez ostatnie 3 odcinki nasze go kursu. To wanie dziki niemu cae urz dzenie yje i pozwala na niez zabaw. Oprcz zawartych w monitorze funkcji uak tywnianych klawiszami np. LOAD, EDIT, itp. istnieje kilka bardzo uytecznych procedur ktre s potrzebne no chociaby do wypisania aktualnej wartoci rejestru DPTR na wywiet laczu (tak si dzieje np., przy edycji pamici RAM kiedy na 4 pierwszych wywietlaczach DPTR jest wywietlany jako 4 znaki w kodzie szesnastkowym. A czy zastanawiae si drogi Czytelniku, jak to si dzieje, e po naciniciu przez Cie bie odpowiedniego klawisza, ukad reaguje

W dzisiejszej lekcji powiczymy sobie uycie niektrych z przedstawionych instrukcji wywo a podprogramw. Na wstpie jednak kilka wyjanie. Ot jak zdylicie si zorientowa z poprzednich lekcji w przykadach podawaem listingi programw, w ktrych wystpoway in strukcje wywoa dziwnych procedur np. LCALL A2HEX (1) lub LCALL CLS (2) Ot moi drodzy w programie monitora kt ry macie w swoim komputerku w pamici EP

ELEKTRONIKA DLA WSZYSTKICH 1/98

43

Te to potrafisz
np. uaktywniajc odpowiedni funkcj moni tora? Do tego celu wykorzystywany jest inny podprogram (take zawarty w monitorze) kt rego zadaniem jest oczekiwanie na nacini cie klawisza a nastpnie podjcie decyzji co z tym fantem dalej robi.... Takie przykady mona by mnoy. Ja w kadym razie w kolejnym odcinku przedstawi Ci pen list dodatkowych pro cedur (podprogramw) ktre bd niezmier nie przydatne przy tworzeniu wsplnych pro gramw. Ci z komputerowcw, ktrzy ju nabyli dyskietk AVT2250/D mog zapozna si z ta k list czytajc zbir BIOS.INC, w ktrym s zawarte definicje adresw wszystkich po trzebnych procedur . Dodatkowo umieszczo no w nich opis i sposb wywoania, czyli para metry wejciowe podprogramu, oraz efekt dziaania. Pamitaj, wszystkie one s czci progra mu monitora i tak samo jak napisany przez Cie bie program s cigiem okrelonych instrukcji, w wyniku dziaania ktrych otrzymujesz okre lony efekt, np. na wywietlaczu. Ze wzgldu na ograniczona objto artyku u, w dzisiejszej lekcji wykorzystamy tylko nie ktre procedury (podprogramy). Dla przykadu skorzystajmy z podprogramu ktrego zadaniem jest wypisanie na wywiet laczu na pozycji okrelonej w rejestrze B, licz by znajdujcej si w akumulatorze w postaci heksadecymalnej (szesnastkowej). Procedu ra ta znajduje si w monitorze pod adresem 024Eh . Ciekawa jest te procedura CLS w wyniku wykonania jej cae pole odczytowe zostaje wy czyszczone. Adres tego podprogramu w moni torze to 0274h. Procedura ta jest bezparamet rowa, wystarczy j wywoa aby uzyska za mierzony efekt. zawarty jest przetumaczony kod (tekst pogru biony) niezbdny dla rczniakw przetu maczcie sami i porwnajcie wynik! Przyjrzyjmy si listingowi dokadnie i przea nalizujmy go linia po linii. Dla uproszczenia b d uywa dodatkowych oznaczenia (K) w przypadku gdy linia ma znaczenie tylko dla komputerowcw, oraz (R) gdy linia ma zna czenie dla rczniakw. gdy nie wystpuje adne z oznacze, informacja jest istotna dla wszystkich. A wic zaczynamy (Lx numer li nii, np. L4 linia nr 4) L1: (K), deklaracja zbioru ktry zawiera nie zbdne definicje rejestrw procesora 8052 (a take 8051 oczywicie) L2: deklaracja EQU rwnowanoci, ozna cza e w dalszej czci programu sowo licz ba jest rwnowane (literowo) wyraeniu 45h, a 45h to zapisana w kodzie szesnastko wym liczba. L3: deklaracja EQU podobnie jak poprzed nio, tym razem sowo pozycja bdzie ozna czao wyraenie 3, u nas jest to numer po zycji na wywietlaczu, na ktrej ma by wy wietlona 2pozycyjna liczba z akumulatora. L4: deklaracja ORG nakazuje kompilatoro wi (K) przetumaczenie (kompilacj) instrukcji wystpujcych po tej deklaracji poczwszy od adresu wskazanego w parametrze ORG, czyli w naszym przypadku bdzie to 8000h pocz tek zewntrznej pamici w komputerku edu kacyjnym. Dla rczniakw jest to informacja aby wprowadza kod programu (pogrubiony tekst) od adresu 8000h korzystajc oczywicie z funkcji EDIT komputerka. Std zaczyna si prawdziwa cz programu. L5: dobrze by byo aby po rozpoczciu wy konywania naszego programu wywietlacz nie by zapisany jakimi znakami, zupenie nam niepotrzebnymi. W tym celu profilaktyczne wywoujemy podprogram CLS czyszczcy wywietlacz. L6: do akumulatora zostaje zaadowana licz ba do wywietlenia, tym razem jest to liczba 45h. Te polecenie mona zapisa take jako: mov A, #45h . Rczniacy tak bd musieli postpi, bo wiem nie korzystaj z mdrego kompilatora, czyli wspomniana liczba 45h prawda e si zgadza! L7: musimy take powiedzie procedurze A2HEX, eby wywietlia liczb od pozycji 3 na displeju, tote adujemy jako drugi parametr pozycj (ktra oznacza po prostu 3).. Uff! L8: wreszcie waciwe wywoanie podpro gramu A2HEX. Rczniacy bd musieli wpi sa adres bezporedni procedury, ktry poda em wczeniej, std w linii po lewej stronie lis tingu mamy sekwencj kodu: 12 02 4E, pierw sza liczba to kod instrukcji LCALL, nastpne dwie to adres procedury A2HEX sprawd! W efekcie po wykonaniu tego podprogramu na wywietlaczach DL3 i DL4 pojawi si liczba 45, czyli to co chcielimy! L8: tu mamy omawiany przy okazji prezen towania instrukcji skokw bezwarunkowych, przykad instrukcji SJMP , ktra zostaa uyta do zatrzymania programu. Instrukcja uyta w ten sposb spowoduje e procesor bdzie skaka w kko pod adres etykiety stop, czy li pod adres pod ktrym znajduje si instrukcja SJMP ... i tak w koo Macieju..., w efekcie mona powiedzie e program bdzie kry w ptli nieskoczonej, i tylko klawisz M powrotu do monitora moe nas wybawi z tego lepego zauka. Kto moe powiedzie, .... ale po co wa ciwie ta instrukcja SJMP, przecie i tak to ju koniec programu.... Koniec dla nas drodzy Czytelnicy, my o tym doskonale wiemy, bo takie byo zaoenie, ale biedny procesor, kiedy wrci z podprogramu A2HEX, bdzie poera kolejne bajty kodu programu, i jeeli nie napotka na sensowne za koczenie w ptli nieskoczonej (jak w przy kadzie) zacznie pobiera kolejne bajty progra my spoza adresu 800Dh, a tam co jest?, a no same mieci Kochani sprawdcie to fun kcj EDIT monitora. Nie musze tumaczy, co si wtedy moe sta. Nielogiczna sekwencja bajtw spowodu je niekontrolowane dziaanie procesora, w efekcie czego najprawdopodobniej ukad dojdzie do koca pamici programu FFFFh po czym licznik rozkazw PC zostanie wyzerowa ny a w zwizku z tym na wywietlaczu zoba czymy znajomy napis HELLO, oznajmiajcy nam e wanie zrestartowalimy nasz kompu terek. Dodatkowo stanie si to tak szybko e efekt naszej pracy zostanie nie zauwaony przez nasze czujne oko. Dlatego stosowanie na kocu programu takiego skoku jest wskazane w kadym przy padku. No dobrze skoro wiecie o co chodzi, to ra dz poeksperymentowa z innymi wartocia mi akumulatora oraz zmienia np. pozycj wy wietlania, pamitajc e moe ona zawiera si w granicach 1...7. W kolejnej lekcji omwi wszystkie pozo stae procedury dostpne w monitorze oraz podam ich adresy wywoa, wtedy bdziemy modli naprawd poszale. Nabywcy dyskie tek AVT2250/D mog si z nimi ju teraz za pozna czytajc zbiory BIOS.INC i CONST.INC. Wesoej zabawy! Sawomir Surowiski

Zadanie
Wypisa dowoln 8bitow liczb na wy wietlaczu w postaci heksadecymalnej. Zamy e chcemy aby liczba pojawia si na 3ciej i 4tej pozycji, naley wykona i skompilowa (komputerowo lub rcznie prze tumaczy) instrukcje:

CPU 0045 0003 8000 8000 8003 8005 8008 120274 7445 75F003 12024E stop: END

8052.DEF 45h 3 ;liczba do wyswietlenia ;pozycja na ktorej ma byc ;wyswietlona liczba

liczba equ pozycja equ org 8000h lcall mov mov lcall sjmp

CLS A, #liczba B, #pozycja A2HEX stop

;wyczyszczenie wyswietlacza ;zaladowanie liczby ;i pozycji na displeju ;wyswietlenie ;stop programu

800B 80FE 800D

Pamitajmy, e jest to listing programu, czy li e komputerowcy wpisuj tylko deklaracje i instrukcje wraz z ewentualnymi komentarza mi (po redniku), bez pierwszej kolumny liczb okrelajcej adres biecej instrukcji (tekst po chyy), oraz bez drugiej kolumny liczb w ktrej

ktry wie e od momentu deklaracji w linii 2 (L2) sowo liczba oznacza 45h. Popatrz cie zreszt na kod tej linii po lewej stronie (po grubione liczby) 7445 = 74 45, pierwsza to kod instrukcji mov A, #dana (patrz wkadka z tabel instrukcji 8051), druga to argument,

44

ELEKTRONIKA DLA WSZYSTKICH 1/98

Te to potrafisz
JMP @A+DPTR ang. Jump Indirect relative to DPTR skocz porednio wzgldem rejestru DPTR w wyniku tej instrukcji nastpuje skok pod adres bdcy sum aktualnej wartoci re jestru DPTR (liczba 16bitowa) i wartoci akumulatora (liczba 8bitowa). Mona po wiedzie e skok nastpuje pod adres w pa mici programu umieszczony w DPTR z przesuniciem podanym w akumulatorze. Przesuniecie to traktowane jest jako liczba bez znaku, czyli z zakresu <0...255> PC < A + DPTR kod: 0 1 1 1 0 0 1 1 73h cykle: 2 bajty: 1 przykad: realizacja skokw w miejsca w programie okrelone poprzez numer w zmiennej pozycja (umieszczonej za deklarowanej z wewn. RAM procesora) MOV A, pozycja ;zaadowanie numeru pozycji MOV B, #2 ;2 bo instrukcje w tabeli skokw sa 2bajtowe (AJMP) MUL A, B ;obliczenie faktycznego ofsetu do tabeli skokw MOV DPTR, #tablica_skokow ;zaadowanie adresu tabeli skokw do DPTR JMP @A+DPTR;wykonanie skoku tablica_skokw: ;tu zaczyna sie tabela skokw AJMP etyk01 ;tu nastapi skok gdy pozycja = 0 AJMP etyk02 ;tu nastpi skok gdy pozycja = 1 AJMP etyk03 ;tu nastpi skok gdy pozycja = 2 AJMP etyk04 ;tu nastpi skok gdy pozycja = 3 ..... ;pozostae instrukcje programu ..... etyk01: ;waciwe miejsce skoku wedug pozycji = 0 ..... ;tu mozna umieci etyk02: ..... etyk03: ..... etyk04: ..... Poniej zapoznamy si z instrukcjami sko kw warunkowych, ktre badaj warunek zgodnoci zadanego bajtu w wew. RAM procesora (rejestru) z innym rejestrem lub argumentem bezporednim (liczb). Dwie z nich JZ i JNZ sprawdzaj czy w akumula torze znajduje si liczba zero czy nie i na tej podstawie podejmowana jest decyzja o skoku. Pozostae instrukcje porwnujce wybrane rejestry z innym lub konkretn licz b znajduj zastosowanie szczeglnie w ptlach programowych, gdzie konieczne jest wykonanie nrazy okrelonej opracji. JZ rel ang. Jump if Accumulator is Zero, skocz jeeli w akumulatorze jest liczba 0 (zero) sprawdzana jest zawarto akumulatora (A), jeeli jest rwna zero, to do licznika rozka zw PC dodawane jest przesunicie rel na zasadach takich jak opisano wczesniej przy okazji omawiania poprzednich instrukcji skokw z argumentem rel (liczba 8bito wa ze znakiem w kodzie U2). PC < PC + 2, jeli A = 0, to PC < PC + rel kod: 0 1 1 0 0 0 0 0 60h cykle: 2 bajty: 2 (kod instrukcji 60h + przesunicie rel) przykad: MOV A, B ;zaadowanie rej. B do Acc celem sprawdzenia czy = 0 JZ jest_zero ;jeeli tak to skok do ety kiety jest_zero nie_zero: ;jeeli nie to wykonuj po zostae instrukcje instrukcje ;waciwe miejsce skoku wedug pozycji = 1 ;waciwe miejsce skoku wedug pozycji = 2 ;waciwe miejsce skoku wedug pozycji = 3 ..... ..... jest_zero: ..... .....

Te to potrafisz
;tu nastapi skok jeeli rej.B by rwny zero ;i zostan wykonane te instrukcje

JNZ rel ang. Jump if Accumulator is Not Zero, skocz jeeli akumulator nie jest = 0 (zero) sprawdzana jest zawarto akumulatora (A), jeeli jest rna od zera, to do licznika rozka zw PC dodawane jest przesunicie rel na zasadach takich jak opisano wczesniej przy okazji omawiania poprzednich instrukcji skokw z argumentem rel (liczba 8bito wa ze znakiem w kodzie U2). PC < PC + 2, jeli A <> 0, to PC < PC + rel kod: 0 1 1 1 0 0 0 0 70h cykle: 2 bajty: 2 (kod instrukcji 70h + przesuenicie rel) przykad: MOV A, B ;zaadowanie rej. B do Acc celem sprawdzenia czy = 0 JNZ nie_zero ;jeeli nie to skok do etykiety nie_zero jest_zero: ;jeeli tak to wykonuj po zostae instrukcje ..... ..... nie_zero: ;tu nastapi skok jeeli rej.B by rny od zera ..... ;i zostan wykonane te instrukcje ..... A oto wspomniana wczesniej grupa instruk cji uywana gwnie w ptlach programo wych lub przy zwielokrotnionym sprawdza niu warunkw zgodnosci okrelonych rejes trw z innym lub z argumentami staymi. Oglna posta instrukcji jest nastpujca: CJNE <arg1>, <arg2>, rel

ang. Compare and Jump if Not Equal, po rwnaj i skocz jeeli argumenty porwnania nie s sobie rwne W instrukcji tej porwnywane sa dwa argu menty: arg1 i arg2. Jeeli nie s one rwne (ich wartoci nie sa rwne), to do zawarto ci licznika rozkazw jest dodawane przesu nicie rel na zasadach zgodnych z om wionymi wczesniej. W efekcie zostaje wy konany skok w programie. Tu uwaga, skok nastepuje wzgldem instrukcji wystpuj cej po instrukcji CJNE. Dodatkwo jest zmie niany znacznik przeniesienia C. I tak, jeeli w wyniku porwnania okae sie z argum rent arg1 jest mniejszy od argumentu arg2 to do znacznika C wpisywana jest jedynka (znacznik jest ustawiany), w przeciwnym przypadku znacznik jest zerowany (C=0). W zaleznoci od typu argumentw instruk cji moliwe s cztery przypadki, oto one. CJNE A, adres, rel

porwnywany jest akumulator oraz komr ka wew. RAM o adresie podanym bezpo srednio jako argument adres PC < PC + 3, jesli A <> (adres), to PC < PC + rel dodatkowo: C < 0 gdy A>= (adres), lub C<1 gdy A< (adres) kod: 1 0 1 1 0 1 0 1 B5h cykle: 2 bajty: 3 (kod instrukcji + adres + przesunicie rel) przykad: MOV B,#56 check: CJNE A, B, zwieksz SJMP koniec zwieksz: INC A SJMP check koniec: CLR B ...... W przykadzie tym do rejestru B wpisywana jest liczba 56. Nastepnie sprawdzany jest warunek zgodnoci akumulatora z rejest rem B, jeeli nie s sobie rwne, to akumu

lator jest inkrementowany (dodawana jest do niego jedynka) patrz etykieta zwiek sz. Nastpnie operacja jest powtarzana od pocztku instrukcja SJMP check. Jeeli w kocu nastpi zgodno obu rejestrw, wykonywany jest skok do etykiety ko niec, gdzie rejestr B zostaje wyzerowany. CJNE A, #dana, rel akumulator zostaje porwnany z argumen tem bezporednim (8bitow liczb), jeeli nie s zgodne nastepuje skok. PC < PC + 3, jeli A <> dana, to PC < PC + rel dodatkowo: C < 0 gdy A>= dana, lub C<1 gdy A< dana kod: 1 0 1 1 0 1 0 0 B4h cykle: 2 bajty: 3 (kod instrukcji + dana + przesunicie rel) przykad: niech w zmiennej (rejestrze) kla wisz bdzie przechowywany kod wcin tego klawisza w systemie mikroprocesoro wym (ot choby w naszym komputerku). Jeeli chcemy podj okrelone dziaanie

ELEKTRONIKA DLA WSZYSTKICH 1/98

45

Te to potrafisz
w zalenoci od rodzaju klawisza, naley przechowywany kod klawisza porwna z konkretna liczb. czekaj: MOV A, klawisz ;pobranie kody wcisnitego klawisza CJNE A, #65, sprB ;czy wcisnito klawisz A (65 kod A) ........ ;tak to wykonuj te instrukcje sprB: CJNE A, #66, sprC ;nie to czy wcinito klawisz B ........ ;tak to wykonuj te instrukcje sprC: CJNE A,#67, sprD ;nie to czy wcinito klawisz C ......... ;tak to wykonuj te instrukcje sprD: CJNE A, #68,czekaj ;nie to czekaj na kolejne nacinicie klawisza ......... ;tak to wykonuj te instrukcje CJNE Rn, #dana, rel rejestr Rn (R0...R7) zostaje porwnany z ar gumentem bezporednim, jelei nie sa zgodne zostaje wykonany skok PC < PC + 3, jeli Rn <> dana, to PC < PC + rel gdzie n = 0...7 dodatkowo: C < 0 gdy Rn>= dana, lub C<1 gdy Rn< dana kod: 1 0 1 1 0 n2 n1 n0 gdzie n2 n1 n0 okrelaj jeden z rejestrw R0...R7 std kody: B8h....BFh cykle: 2 bajty: 3 (kod instrukcji + dana + przesuniecie rel) przykad: MOV R4, P1 odczytanie stanw z portu P1 CJNE R4, #100, nie_100 ;porwnanie ich z liczba 100 SETB P3.0 ;rwne to ustaw pin 0 portu P3 ...... nie_100: CLR P3.0 ;nie rwne to zeruj pin 0 portu P3 W przykadzie porwnywana jest zawarto rejestru R4 z liczb 100, jeeli wystpuje zgodno, to w porcie P3 zostaje ustawiony najmodszy bit (pin) P3.0,w przeciwnym przypadku jest zerowany. Jest to prosty przykad komparatora liczby 8bitowej poda wanej na port P1 z zewntrz ze sta liczb (w tym przypadku jest to liczba 100). CJNE @Ri, #dana, rel porwnywana jest zawartoc komrki w wew. RAM ktrej adres znajduje sie w re jestrze Ri (R0 gdy i=0, lub R1 gdy i=1) z ar gumentem bezporednim. Jeeli si rzni to nastpuje skok. PC < PC + 3, jeli (Ri) <> dana, to PC < PC + rel gdzie i = 0, 1 dodatkowo: C < 0 gdy (Ri) >= dana, lub C<1 gdy (Ri) < dana kod: 1 0 1 1 0 1 1 i gdzie i=0, 1 std kody: B6h, B7h cykle: 2 bajty: 3 (kod instrukcji + dana + przesuniecie rel) przykad: sekwencja instrukcji porwnania w postaci: MOV R1, #30h CJNE @R1, #255, skocz ....... skocz: ....... jest rwnowana sekwencji

...... ......

46

ELEKTRONIKA DLA WSZYSTKICH 1/98

MOV A, #255 CJNE A, 30h, skocz ....... skocz: ....... przeanalizuj i zastanw sie dlaczego?, pod powiem tylko e w przykadzie porwnywa na jest zawarto komrki pamici wew. RAM z okrelon liczb, przy rnicy wyste puje skok Ostatni instrukcj skokw warunkowych jest polecnie DJNZ. Oglna posta instruk cji jest nastpujca: DJNZ <arg>, rel ang. Decrement and Jump if Not Zero, zmniejsz o jeden i skocz jeeli nie rwne zero W wyniku tej operacji od wskazanego argu mentu arg jest odejmowana jedynka (jest on dekrementowany). Jeeli w wyniku odj cia warto argumentu nie jest rwna zero, to zostaje wykonany skok zgodnie z zasada mi opisanymi wczeniej w przypadku argu mentu rel. Stan znacznikw nie zmienia

si. W zaleznoci od typu argumentu rozr nia si dwa typy instrukcji, oto one. DJNZ Rn, rel zmniejszona zostaje zawarto podanego rejestru Rn (R0...R7) o jeden, a nastepnie je eli nie jest rwna zero, to nastpuje skok. PC < PC + 2, Rn < Rn 1, gdzie n = 0...7 jeeli Rn <> 0, to PC < PC + rel kod: 1 1 0 1 1 n2 n1 n0 gdzie n2 n1 n0 okrelaj jeden z rejestrw R0...R7 std ko dy: D8h...DFh cykle: 2 bajty: 2 (kod instrukcji + przesunicie rel) przykad: sekwencja instrukcji MOV R7, #26 dodaj: ADD A, #1 DJNZ R7, dodaj ...... jest rwnowazna poleceniu ADD A,#26 co w obu przypadkach powoduje dodanie do akumulatora liczby 26.

DJNZ adres, rel zmniejszona zostaje zawarto komrki pa micie wew. RAM o podanym bezpored nio adresie o jeden, a nastepnie jeeli nie jest rwna zero, to nastpuje skok. PC < PC + 2, (adres) < (adres) 1, je eli (adres) <> 0, to PC < PC + rel kod: 1 1 0 1 0 1 0 1 D5h cykle: 2 bajty: 3 (kod instrukcji + adres + przesunicie rel) przykad: sekwencja instrukcji przedstawio na poniej daje taki sam efekt jak w porzed nim przykadzie. MOV B, #26 dodaj: ADD A, #1 DJNZ B, dodaj ....... A teraz pora na naprawd ostatni instruk cj z listy polece procesora 8051. NOP ang. No OPeration, nie rb nic

Te to potrafisz
jest to instrukcja, w wyniku ktrej nie zmie nia sie stan procesora, z wyjtkiem licznika rozkazw ktrym po pobraniu tej instrukcji jest zwiekszany o jeden. kod: 0 0 0 0 0 0 0 0 00h cykle: 1 bajty: 1 przykad: sekwencja instrukcji MOV A, B NOP MUL A, B bdzie zajmie procesorowi 1 cykl maszyno wy wicej niz sekwencja MOV A, B MUL A, B ale efekt dziaania bdzie taki sam w obu przypadkach.

LEKCJA 4 W dzisiejszej lekcji powiczymy sobie uycie instrukcji wywoa podprogra mw do realizacji prostych ukadw licz nikowych. Na wstepnie jednak kilka wy jasnie. Ot jak zdylicie sie zoriento wac z poprzednich lekcji w przykadach podawaem listingi programw, w kt rych wystpoway instrukcje wywoa dziwnych procedur np. LCALL A2HEX (1) oraz operacje przesania niezrozumia ych argumentw bezporednich np.: MOV DL1, #_minus (2) Ot moi drodzy w programie monito ra ktry macie w swoim komputerku w pamici EPROM zawarty jest program monitora o tym juz wiecie. Dziki nie mu moliwa jest komunikacja i adowanie programw z komputera PC lub rcznie. Monitor jest na tyle mdry e dodatkowo komunikuje sie z uytkownikiem za po moca 8mio pozycyjnego wywietlacza i lokalnej klawiatury. No ale przecie ten monitor to w kocu te kawaek pro gramu napisany za pomoc tych samych instrukcji, ktre poznawalicie przez ostatnie 3 odcinki naszego kursu. To wasnie dzikiniemu cae urzdzenie yje i pozwala na niez zabaw. Oprcz zawartych w monitorze funkcji uaktywnianych klawiszami np. LOAD, EDIT, itp. istnieje kilka bardzo uytecz nych procedur ktre sa potrzeben ano chociaby do wypisania aktualnej warto ci rejestru DPTR na wywietlaczu (tak si dzieje np., przy edycji pamici RAM kiedy na 4 pierwszych wywietlaczach DPTR jest wywietlany jako 4 znaki w kodzie szesnastkowym. A czy zastanawiae sie drogi Czytelni ku, jak to sie dzieje, e po nacisniciu przez Ciebie odpowiedniego klawisza, ukad reaguje np. uaktywniajc odpo wiedni funkcj monitora? Do tego celu wykorzystywany jest inny podprogram (take zawarty w monitorze) ktrego za daniem jest oczekiwanie na nacisnicie klawisza a nastepnie podjcie decyzji co z tym fantem dalej robi.... Takie przy kady mona by mnozy.

Ja w kadym razie w kolejnym odcin ku przedstawi Ci pen list dodatko wych procedur (podprogramw) ktre beda niezmiernie przydatne przy tworze niu wsplnyhc programw. Ci z komputerowcw, ktrzy juz na byli dyskietk AVT2250/D mog zapoz na si z tak list czytajc zbir BIOS.INC, w ktrym s zawarte defini cje adresw wszysktich portrzebnych procedur . Dodatkowo umieszczono w nich opis i sposb wywoania, czyli pa rametry wejciowe porprogramu, oraz efekt dziaania. Pamitaj, wszystkie one s czci programu monitora i tak samo jak napisa ny przez Ciebie program s cigiem okrelonych instrukcji, w wyniku dziaa nia ktrych otrzymujesz okrelony efekt, np. na wywietlaczu. Ze wzgldu na ograniczona objeto artykuu, w dzisiejszej lekcji wykorzysta my tylko niektre procedury (podprogra my). Dla przykadu skorzystajmy z podpro gramu ktrego zadaniem jest wypisanie na wywietlaczu na pozycji okrelonej w rejestrze B, liczby znajdujcej si w akumulatorze w postaci heskadecy malnej (szesnastkowej). Procedura ta znajduje si w monitorze pod adresem 024Eh. Zadanie 1 Wypisa dowoln 8bitow liczb na wywietlaczu w postaci heksadecymal nej. Zamy e chcemy aby liczba pojawi a si na 3ciej i 4tej pozycji, naley wy kona i skompilowa (komputerowo lub rcznie przetumaczy) instrukcje: MOV A, #liczba ;jako liczba wpisac dowolna warto np. 45h MOV B, #3 ;na DL3 i DL4 LCALL A2HEX

Sawomir Surowiski

48

ELEKTRONIKA DLA WSZYSTKICH 1/98

Te to potrafisz

W niniejszym odcinku szkoy mikro procesorowej koczymy omawianie listy instrukcji procesora 8051. Po zostao kilka prostych instrukcji uy wanych gwnie w ptlach progra mowych oraz instrukcja pusta. W dalszej czci artykuu zajmiemy si dokadnym opisem wszystkich podprogramw usugowych monitora czyli programu komputerka eduka cyjnego, ktry kady z Was ma zapi sany w EPROMie swego zestawu. Poznamy tez proste sposoby na wy korzystanie podstawowych zaso bw tego programu, dziki ktrym moliwa bdzie kontrolowana inge rencja we wszystkie mechanizmy dostpne w Twoim systemie eduka cyjnym.

Mikrokontrolery? To takie proste...


Cz 10 Asembler jzyk maszynowy procesora
etyk02: ..... etyk03: ..... etyk04: ..... ;waciwe miejsce skoku wedug pozycji = 1 ;waciwe miejsce skoku wedug pozycji = 2 ;waciwe miejsce skoku wedug pozycji = 3

Kontynuujemy opis instrukcji z grupy skokw. Pozostaa nam do omwienia do rzadko wykorzystywana przez pocztkujcych progra mistw, instrukcja skoku wzgldem wskanika danych DPTR, dwie in strukcje skokw warunkowych testujcych zawarto akumulatora oraz dwa typy instrukcji, ktre dziki swojej konstrukcji znajduj najszer sze zastosowanie przy porwnywaniu zawartoci niektrych rejestrw z wartociami staymi (wykorzystywane np. przy odczycie kodw naci nitego klawisza) lub w ptlach programowych. Oto one: JMP A+DPTR ang. Jump Indirect relative to DPTR skocz porednio wzgldem rejestru DPTR w wyniku tej instrukcji nastpuje skok pod adres bdcy sum aktu alnej wartoci rejestru DPTR (liczba 16bitowa) i wartoci akumulato ra (liczba 8bitowa). Mona powiedzie e skok nastpuje pod adres w pamici programu umieszczony w DPTR z przesuniciem poda nym w akumulatorze. Przesuniecie to traktowane jest jako liczba bez znaku, czyli z zakresu <0...255> PC < A + DPTR kod: 0 1 1 1 0 0 1 1 73h cykle: 2 bajty: 1 przykad: realizacja skokw w miejsca w programie okrelone po przez numer w zmiennej pozycja (umieszczonej zadeklarowanej z wewn. RAM procesora) MOV A, pozycja ;zaadowanie numeru pozycji MOV B, #2 ;2 bo instrukcje w tabeli skokw sa 2bajtowe (AJMP) MUL A, B ;obliczenie faktycznego ofsetu do tabeli skokw MOV DPTR, #tablica_skokow ;zaadowanie adresu tabeli skokw do DPTR JMP A+DPTR ;wykonanie skoku tablica_skokw: ;tu zaczyna sie tabela skokw AJMP etyk01 ;tu nastapi skok gdy pozycja = 0 AJMP etyk02 ;tu nastpi skok gdy pozycja = 1 AJMP etyk03 ;tu nastpi skok gdy pozycja = 2 AJMP etyk04 ;tu nastpi skok gdy pozycja = 3 ..... ;pozostae instrukcje programu ..... etyk01: ;waciwe miejsce skoku wedug pozycji =0 ..... ;tu mozna umieci instrukcje

Poniej zapoznamy si z instrukcjami skokw warunkowych, kt re badaj warunek zgodnoci zadanego bajtu w wew. RAM proceso ra (rejestru) z innym rejestrem lub argumentem bezporednim (licz b). Dwie z nich JZ i JNZ sprawdzaj czy w akumulatorze znajduje si liczba zero czy nie i na tej podstawie podejmowana jest decyzja o skoku. Pozostae instrukcje porwnujce wybrane rejestry z innym lub konkretn liczb znajduj zastosowanie szczeglnie w ptlach programowych, gdzie konieczne jest wykonanie nrazy okrelonej opracji. JZ rel ang. Jump if Accumulator is Zero, skocz jeeli w akumulatorze jest liczba 0 (zero) sprawdzana jest zawarto akumulatora (A), jeeli jest rwna zero, to do licznika rozkazw PC dodawane jest przesunicie rel na zasa dach takich jak opisano wczesniej przy okazji omawiania poprzednich instrukcji skokw z argumentem rel (liczba 8bitowa ze znakiem w kodzie U2). PC < PC + 2, jeli A = 0, to PC < PC + rel kod: 0 1 1 0 0 0 0 0 60h cykle: 2 bajty: 2 (kod instrukcji 60h + przesunicie rel) przykad: MOV A, B ;zaadowanie rej. B do Acc celem ;sprawdzenia czy = 0 JZ jest_zero ;jeeli tak to skok do etykiety jest_zero nie_zero: ;jeeli nie to wykonuj pozostae instrukcje ..... ..... jest_zero: ;tu nastpi skok jeeli rej.B by rwny zero ..... ;i zostan wykonane te instrukcje .....

ELEKTRONIKA DLA WSZYSTKICH 2/98

35

Te to potrafisz
JNZ rel ang. Jump if Accumulator is Not Zero, skocz jeeli akumulator nie jest = 0 (zero) sprawdzana jest zawarto akumulatora (A), jeeli jest rna od zera, to do licznika rozkazw PC dodawane jest przesunicie rel na za sadach takich jak opisano wczesniej przy okazji omawiania poprzed nich instrukcji skokw z argumentem rel (liczba 8bitowa ze zna kiem w kodzie U2). PC < PC + 2, jeli A <> 0, to PC < PC + rel kod: 0 1 1 1 0 0 0 0 70h cykle: 2 bajty: 2 (kod instrukcji 70h + przesuenicie rel) przykad: MOV A, B ;zaadowanie rej. B do Acc celem sprawdzenia czy = 0 JNZ nie_zero ;jeeli nie to skok do etykiety nie_zero jest_zero: ;jeeli tak to wykonuj pozostae instrukcje ..... ..... nie_zero: ;tu nastapi skok jeeli rej.B by rny od zera ..... ;i zostan wykonane te instrukcje ..... A oto wspomniana wczesniej grupa instrukcji uywana gwnie w ptlach programowych lub przy zwielokrotnionym sprawdzaniu wa runkw zgodnosci okrelonych rejestrw z innym lub z argumentami staymi. Oglna posta instrukcji jest nastpujca: CJNE <arg1>, <arg2>, rel ang. Compare and Jump if Not Equal, porwnaj i skocz jeeli argu menty porwnania nie s sobie rwne W instrukcji tej porwnywane sa dwa argumenty: arg1 i arg2. Jeeli nie s one rwne (ich wartoci nie sa rwne), to do zawartoci licznika rozkazw jest dodawane przesunicie rel na zasadach zgodnych z omwionymi wczeniej. W efekcie zostaje wykonany skok w progra mie. Tu uwaga, skok nastepuje wzgldem instrukcji wystpujcej po in strukcji CJNE. Dodatkowo jest zmieniany znacznik przeniesienia C. I tak, jeeli w wyniku porwnania okae sie z argumrent arg1 jest mniejszy od argumentu arg2 to do znacznika C wpisywana jest jedynka (znacznik jest ustawiany), w przeciwnym przypadku znacznik jest zero wany (C=0). W zaleznoci od typu argumentw instrukcji moliwe s cztery przypadki, oto one. CJNE A, adres, rel porwnywany jest akumulator oraz komrka wew. RAM o adresie podanym bezposrednio jako argument adres PC < PC + 3, jesli A <> (adres), to PC < PC + rel dodatkowo: C < 0 gdy A>= (adres), lub C<1 gdy A< (adres) kod: 1 0 1 1 0 1 0 1 B5h cykle: 2 bajty: 3 (kod instrukcji + adres + przesunicie rel) przykad: MOV B,#56 check: CJNE A, B, zwieksz SJMP koniec zwieksz: INC A SJMP check koniec: CLR B ...... W przykadzie tym do rejestru B wpisywana jest liczba 56. Nastepnie sprawdzany jest warunek zgodnoci akumulatora z rejestrem B, jeeli nie s sobie rwne, to akumulator jest inkrementowany (dodawana jest do niego jedynka) patrz etykieta zwieksz. Nastpnie operacja jest powtarzana od pocztku instrukcja SJMP check. Jeeli w kocu na stpi zgodno obu rejestrw, wykonywany jest skok do etykiety ko niec, gdzie rejestr B zostaje wyzerowany. CJNE A, #dana, rel akumulator zostaje porwnany z argumentem bezporednim (8bito w liczb), jeeli nie s zgodne nastepuje skok. PC < PC + 3, jeli A <> dana, to PC < PC + rel dodatkowo: C < 0 gdy A>= dana, lub C<1 gdy A< dana kod: 1 0 1 1 0 1 0 0 B4h cykle: 2 bajty: 3 (kod instrukcji + dana + przesunicie rel) przykad: niech w zmiennej (rejestrze) klawisz bdzie przechowy wany kod wcintego klawisza w systemie mikroprocesorowym (ot choby w naszym komputerku). Jeeli chcemy podj okrelone dziaanie w zalenoci od rodzaju klawisza, naley przechowywany kod klawisza porwna z konkretna liczb. czekaj: MOV CJNE ........ sprB: CJNE ........ sprC: CJNE ......... sprD: CJNE ......... A, klawisz A, #65, sprB A, #66, sprC A,#67, sprD A, #68,czekaj ;pobranie kodu wcinitego klawisza ;czy wcisnito klawisz A (65 kod A) ;tak to wykonuj te instrukcje ;nie to czy wcinito klawisz B ;tak to wykonuj te instrukcje ;nie to czy wcinito klawisz C ;tak to wykonuj te instrukcje ;nie to czekaj na kolejne nacinicie klawisza ;tak to wykonuj te instrukcje

CJNE Rn, #dana, rel rejestr Rn (R0...R7) zostaje porwnany z argumentem bezpored nim, jeeli nie sa zgodne zostaje wykonany skok PC < PC + 3, jeli Rn <> dana, to PC < PC + rel gdzie n = 0...7 dodatkowo: C < 0 gdy Rn>= dana, lub C<1 gdy Rn< dana kod: 1 0 1 1 0 n2 n1 n0 gdzie n2 n1 n0 okrelaj jeden z rejest rw R0...R7 std kody: B8h....BFh cykle: 2 bajty: 3 (kod instrukcji + dana + przesuniecie rel) przykad: MOV R4, P1 ;odczytanie stanw z portu P1 CJNE R4, #100, nie_100 ;porwnanie ich z liczb 100 SETB P3.0 ;rwne to ustaw pin 0 portu P3 ...... nie_100: CLR P3.0 ;nie rwne to zeruj pin 0 portu P3 ...... ...... W przykadzie porwnywana jest zawarto rejestru R4 z liczb 100, jeeli wystpuje zgodno, to w porcie P3 zostaje ustawiony najmod szy bit (pin) P3.0,w przeciwnym przypadku jest zerowany. Jest to pros ty przykad komparatora liczby 8bitowej podawanej na port P1 z ze wntrz ze sta liczb (w tym przypadku jest to liczba 100). CJNE @Ri, #dana, rel porwnywana jest zawartoc komrki w wew. RAM ktrej adres znajduje sie w rejestrze Ri (R0 gdy i=0, lub R1 gdy i=1) z argumen tem bezporednim. Jeeli si rni to nastpuje skok. PC < PC + 3, jeli (Ri) <> dana, to PC < PC + rel gdzie i = 0, 1 dodatkowo: C < 0 gdy (Ri) >= dana, lub C<1 gdy (Ri) < dana kod: 1 0 1 1 0 1 1 i gdzie i=0, 1 std kody: B6h, B7h cykle: 2 bajty: 3 (kod instrukcji + dana + przesuniecie rel) przykad: sekwencja instrukcji porwnania w postaci: MOV R1, #30h CJNE @R1, #255, skocz ....... skocz: ....... jest rwnowana sekwencji MOV A, #255 CJNE A, 30h, skocz ....... skocz: ....... przeanalizuj i zastanw sie dlaczego. Podpowiem tylko, e w przyka dzie porwnywana jest zawarto komrki pamici wew. RAM z okre lon liczb, przy rnicy wystepuje skok. Ostatni instrukcj skokw warunkowych jest polecnie DJNZ. Ogl na posta instrukcji jest nastpujca: DJNZ <arg>, rel ang. Decrement and Jump if Not Zero, zmniejsz o jeden i skocz je eli nie rwne zero W wyniku tej operacji od wskazanego argumentu arg jest odejmo wana jedynka (jest on dekrementowany). Jeeli w wyniku odjcia war to argumentu nie jest rwna zero, to zostaje wykonany skok zgodnie z zasadami opisanymi wczeniej w przypadku argumentu rel. Stan

36

ELEKTRONIKA DLA WSZYSTKICH 2/98

Te to potrafisz
znacznikw nie zmienia si. W zaleznoci od typu argumentu rozrnia si dwa typy instrukcji, oto one. DJNZ Rn, rel zmniejszona zostaje zawarto podanego rejestru Rn (R0...R7) o je den, a nastepnie jeeli nie jest rwna zero, to nastpuje skok. PC < PC + 2, Rn < Rn 1, gdzie n = 0...7 jeeli Rn <> 0, to PC < PC + rel kod: 1 1 0 1 1 n2 n1 n0 gdzie n2 n1 n0 okrelaj jeden z rejest rw R0...R7 std kody: D8h...DFh cykle: 2 bajty: 2 (kod instrukcji + przesunicie rel) przykad: sekwencja instrukcji CLR A MOV R7, CLR A #26 dodaj: ADD A, #1 DJNZ R7, dodaj ...... jest rwnowana poleceniu ADD A,#26 co w obu przypadkach powoduje dodanie do akumulatora liczby 26. DJNZ adres, rel zmniejszona zostaje zawarto komrki pamicie wew. RAM o poda nym bezporednio adresie o jeden, a nastepnie jeeli nie jest rwna zero, to nastpuje skok. PC < PC + 2, (adres) < (adres) 1, jeeli (adres) <> 0, to PC < PC + rel kod: 1 1 0 1 0 1 0 1 D5h cykle: 2 bajty: 3 (kod instrukcji + adres + przesunicie rel) przykad: sekwencja instrukcji przedstawiona poniej daje taki sam efekt jak w porzednim przykadzie. CLR A MOV B, #26 dodaj: ADD A, #1 DJNZ B, dodaj ....... A teraz pora na naprawd ostatni instrukcj z listy polece proceso ra 8051. NOP ang. No Operation, nie rb nic jest to instrukcja, w wyniku ktrej nie zmienia si stan procesora, z wyjtkiem licznika rozkazw ktrym po pobraniu tej instrukcji jest zwikszany o jeden. kod: 0 0 0 0 0 0 0 0 00h cykle: 1 bajty: 1 przykad: sekwencja instrukcji MOV A, B NOP MUL A, B zajmie procesorowi o 1 cykl maszynowy wicej niz sekwencja MOV A, B MUL A, B ale efekt dziaania bdzie taki sam w obu przypadkach. I na tym koczy si lista instrukcji procesora 8051. Teraz pozostaje juz tylko praktyczne ich wykorzystanie w celu tworzenia programw. Na pocztku bd to aplikacje na komputerek edukacyjny, ktry kady z Was powinien ju mie uruchomiony, potem na dowolne ukadu elek troniczne, ktre ju sami bdziecie konstruowa bazujc na proceso rach serii 8051 I pochodnych. Pozostaje jeszcze do wyjanienia grupa polece nie bedcych in strukcjami asemblera procesora 8051, lecz bdca deklaracjami przypi sania i definiowania ciagw bajtw, akceptowanymi przez wiekszo kompilatorw (w tym zamieszczony na dyskietce AVT2250/D program PASM51.EXE). Dziki nim czytanie kodu programu przez programist jest atwiejsze, tote powinni szczeglnie pamita o tym kompu terowcy. Ze wzgldu jednak na uywanie takich polece w naszych przykadach, szczegln uwag powinni zwrci na te cz artykuu take rczniacy. EQU (ang. equal Pierwsz uzyteczn deklaracj jest polecenie E rwny, taki sam, tosamy) przypisania nazwie wystpujacej po lewej stronie polecenia wartoci z prawej strony, np. DL1 EQU 78h oznacza e w dalszej czci programu przez skrt DL1 naley rozu mie liczb szesnastkow 78h (120 dziesitnie). I tak kompilator oraz rczniacy powinny tumaczy (rozumie) te 3 litery DL1 jako liczb 120. I tak jeeli w dalszej czci programu, juz w samym kodzie pojawi sie np. instrukcja: MOV DL1, A oznacza to bedzie to samo co instrukcja MOV 78h, A Podobnie np. jeeli zechcemy np. zaadowa liczb (nie zawarto ko mrki spod podanego adresu) 78h np. do rejestru B wykonamy operacj: MOV B, #DL1 co bdzie tosame jako MOV B, #78h Znaczek # oznacza e mamy do czynienia z argumentem bezpo rednim, czyli liczb, a nie jak w przykadzie poprzednim z adresem ko mrki w wewntrznej pamici RAM procesora. Warto to zapamita. Dla zapamitania jeszcze jeden przykad: niech pod adresem F005h w obszarze zewntrznej przestrzeni adresowej procesora (w jakim ukadzie skonstruowanym przez nieznanego elektronika a wykorzystu jcym procesor 8051) znajduje si 8bitowy rejestr pracujacy jako wy jcie informacji, np. sterujcy omioma przekanikami zaczajcymi a rwki wa wietlnego chociaby znany wam ju ukad 74573. Aby zapali co drug arwk naley wykona proste instrukcje zapisu do zewntrznej pamici danych, zakadajc e rejestr jest zatrzaskiwany pod wpywem (nie bezporednio !!!) sygnau /WR zapisu do ext. RAM procesora. Zadeklarujmy zatem ten specjalny adres jako nazw pocho dzaca od angielskiego sowa w: SNAKE EQU 0F005h Wykonanie w dalszej czci programu sekwencji: MOV DPTR, #SNAKE ;zaaduj adres do wskanika danych MOV A, #55h ;w liczbie 55h ssiednie bity sa rne: 01010101 MOVX @DPTR, A ;i zapisz do rejestru pod wskazany adres spowoduje zamierzony efekt. Pierwsz lini mona zapisa oczywicie jako: MOV DPTR, #F005h ...... ...... ale jak sami widzicie pierwszy sposb jest bardziej czytelny, bowiem od razu wiemy czytajc program, e w tym miejscu nastapi zapis do rejes tru wa wietlnego. Drug deklaracj wan szczeglnie a moe przede wszysktim dla INCLUDE ang. wcz w sensie do komputerowcw jest dyrektywa I cz, dopnij, we pod uwag kompilujc program. Suy ona do wcza nia podczas kompilacji zbiorw dodatkowych ), oprcz tego, ktrym jest celem kompilacji, przy wywoaniu programi kompilatora PASM51.EXE, w ktrych znajduj si dodatkowe kawaki kodu rdowego uyt kownika. W sensie dosownym mog to by zbiory tekstowe zawiera jce biblioteki (w postaci rdowej) dodatkowych procedur np. mate matycznych. W praktyce np. kiedy zachodzi potrzeba uycia podprogramu doda wania dwch liczb 32bitowych w piciu aplikacjach (programach), nie warto umieszcza kodu tej procedury w kadym z piciu zbiorw rd owych. Lepiej i wygodniej jest raz zapisa kod rdowy takiej procedu ry w odzielnym zbiorze np. pod nazw: ADD32.INC, po czym w ka dym z pieciu aplikacji zapisa 1liniow deklaracj doczenia tego zbio ru podczas kompilacji w postaci: INCLUDE ADD32.INC co spowoduje doczenie treci zbioru ADD32.INC do pliku gwnego w miejscu jej wywoania. Oczywicie jeeli w zbiorze z podprogramem wystpi bd w zapisie jakiej instrukcji kompilator automatycznie prze rwie tumaczenie sygnalizujc komunikatem odpowiedni bd z poda niem nazwy zbioru wczonego dyrektyw INCLUDE. Jak wiecie, kod programu (ju po przetumaczeniu) na procesor ska da si z cigu bajtw instrukcji i danych. Czasami zachodzi potrzeba de finiowania w kodzie programu (podczas pisania) tablic wartoci staych, np. opisujcych przebieg sinusa dla kta penego, lub numer ostatniego dnia kadego miesica. Program w czasie pracy za pomoca instrukcji MOVC A, @A+DPTR (patrz opis instrukcji) moe pobra takie dane i wykorzysta je do dalszych oblicze. Jak zatem zdefiniowac takie ci gi bajtw w naszym programie, ano za pomoca dyrektyw: DB definiu jacej bajty, DW definiujacej 16bitowe sowa (podwjne bajty) oraz DD definiujcej 32bitowe sowa (poczwrne bajty). Przy tworzeniu takiego strumienia danych (staych) wszystkie skad niki, liczby musza by oddzielone przecinkami. Liczby mozna zapisywa

ELEKTRONIKA DLA WSZYSTKICH 2/98

37

Te to potrafisz
z oglnie przyjet zasad (jak w caym asemblerze) w czterech rnych postaciach: dziesietnej, np. 23, 199, 45, 255, 54675 szesnastkowej (na kocu litera h): 12h, 7Fh, 0ABh, 1234h, itp binarnej (na kocu litera b): 10101010b, 010b, 010010010010b za pomoc kodu znaku (znak w apostrofach): 4 oznacza kod zna ku ASCII 4 czyli fizycznie liczb: 52. Sposb ten w przypadku kom pilatora PASM51.EXE daje sie wykorzysta z dyrektyw DB. Argu mentami DW i DD mog by tylko liczby zapisane w trzech po przednich formatach. Korzystajc z ostatniego sposobu mozna zapisywa cae teksty (np. do wywietlenia potem na doczonym do komputerka wywietlaczu tekstowym LCD), lub po prostu informacje autorskie o danym progra mie, jego wersji, czy dacie powstania. I tak np. jeeli chcemy zdefiniowac tablic cyfr wykorzystywanych w kodzie szesnastkowym, naley uy dyrektywy DB w postaci np. hextab DB 0123456789ABCDEF co po przetumaczeniu na kod maszynowy procesor zrozumie jako cig bajtw: 48 49 50 51 52 53 54 55 56 57 65 66 67 68 69 70 zapisanych dziesitnie. Czyli mona zapisac ten cig w inny sposb np.: hextab DB 48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70 W przypadku dyrektywy DW mozna w roli skadnikw umieszcza liczby 16bitowe czyli z zakresu: 0...65535, a w przypadku dyrektywy DD, liczby z zakresu 0... 4294967295, przykady deklaracji mieszanych:
bigtab DW 1234h, 65535, 1010101001010101b, 1, 0 longtab DD 12345678h, 10000234,0101010b, 1000000000000000000001b

i wyszukiwanie bdw, a o modyfikacjach nie wspomn. Przykad ko mentarza: MOV A, B ;zaadowanie zawartoci rejestru B do akumulatora Tekstem pochyym zaznaczono komentarz. ORG, ktrej zadaniem Pozostaa jeszcze do omwienia dyrektywa O jest deklarowanie adresu w pamieci programu procesora, od ktrego bd umieszczane kolejne, wystepujace po tej dyrektywie, bajty pro gramu. I tak np. kiedy piszemy aplikacje na nasz komputerek edukacyj ny, liczymy si z tym, e fizyczna pamie (SRAM) do ktrej adowany jest program zaczyna si od adresu 8000h. Dlatego kady z przykadw do wklepania zaczyna sie od dyrektywy: ORG 8000h co mwi kompilatorowi PASM51.EXE, e wystpujce instrukcje po tej dyrektywie ma umieszcza od adresu 8000h poczwszy, czyli od po cztku fizycznej pamici SRAM komputerka. Dyrektywa ORG, tak jak omwione wczeniej, moe by uywana wielokrotnie w tym samym kodzie rdowym programu. Wane jest aby panowana ni, ale o tego nauczymy sie przy innej okazji, kiedy zajdzie taka potrzeba. No i ostatnia sprawa dotyczca stosowania etykiet przy skokach wa runkowych ale i bezwarunkowych,czy deklaracjach podprogramw. Dla porzdku naley powiedzie e wszysktie etykiety powinny zaczyna si od pierwszej kolumny w danej linii tekstu, czyli od pierwszego zna ku, dodatkowo naley je zakoczy znakiem dwukropka, np. etyk01: etyk02: dodaj: przyklad: Wielko liter z kodzie rdowym programu w przypadku kompilato ra PASM51.EXE nie ma znaczenia, wyjtek stanowi teksty bdace ar gumentami instrukcji czy dane w tablicach tworzonych z wykorzysta niem dyrektywy DB i umieszczone pomiedzy znakami apostrofa, np. tekst.

Zauwacie, e przed kad deklaracj umieciem jaki wyraz, ktry jest po prostu etykiet opisujac deklarowane stae. W programie jest to bar dzo czsto niezbdne a nader wygodne. No bo jaki adres zapiszecie do wskanika DPTR przy uzyciu instrukcji MOVC A, @A+DPTR, rczniacy beda musieli po prostu policzy wszysktie bajty znajdujce sie przed da na deklaracj tablicy i wpisa je po kodzie instrukcji MOV DPTR,# ja ka_liczba_16_bitowa, komputerowcy zastosuja polecenie, np. MOV DPTR, #bigtab a kompilator PASM51 sam obliczy adres tablicy, gdziekolwiek ona by si znalaza, a nastpnie wstawi go za kodem instrukcji MOV DPTR, #nn. W przypadku dyrektywy DB moliwe jest czenie w jednej lini i kilku rodzajw zapisw liczb, np. mieszajc teksty z zapisem dziesit nym, np. tekst1 DB 16, WITAJ CZYTELNIKU A propos ten przykad moe posuy jako ilustracja argumentu wy woania jakiej procedury (podprogramu) w wyniku ktrego zostaje wy pisany wskazany tekst. Pierwszy bajt w deklaracji tablicy okrela fizycz n liczb znakw w tablicy tekstowej czyli dugo napisu, dalej od ra zu wystepuje dany tekst, prawda e logiczne podejcie. W ten prosty sposb procedura wie kiedy dany tekst si koczy. Istniej take inne sposobu realizacji tego pomysu, ale to nie jest w tej chwili tematem na szego artykuu. Kady program pisany i kompilowany przez komputerowcw za po END, kt moc programu PASM51.EXE musi si koczy deklaracj E ra mwi programowi, e w tym miejscu koczy si tekst rdowy i reszt linii jeeli one istniej, naley zignorowa. Dodatkowo przy uyciu tego kompilatora w kadym programie rdo wym (gwnym a nie w zbiorach z podprogramami typu INC) w pierw szej linii powinna znale si dyrektywa deklarujaca procesor na ktry pi CPU, za ktr powinien zna sany jest dany program. Dyrektywa ta to : C le sie argument w postaci nazwy zbioru zawierajcego deklaracje typu EQU opisujce nazwy wszystkich rejestrw specjalnych oraz bitw i w ogle caego nazewnictwa zwiazanego z wybran kostk. Na dyskietce AVT2250/D znajduje sie taki zbir definicyjny o nazwie 8052.DEF warto go sobie obejrze, aby stwierdzi zgodno informacji przedstawionych przeze mnie w niniejszym artykule. Zbir taki mozna oczywicie modyfikowa, lecz na wstepnym etapie nauki programowa nia radze tego nie robi, a przynajmniej zrobi jego wiern kopi przed takimi eksperymentami. Jak kady program tekst rdowy powinien zawiera komentarze programisty, dziki czemu pniejsza analiza programu jest atwiejsza czy w ogle moliwa do zrealizowania. Wiekszo asemblerw na procesory 8051 (ale nie tylko) rozpoznaje znak rednika ; jako znak zaczynajcy w danej linii tekst komentarza. Tote kompilator analizu jc lini po linii kod rdowy programu i tumaczac go, napotkawszy rednik ignoruje cay tekst od tego znaku a do koca linii. Jak zdy licie sie zorientowa, komentarze mog by umieszczane na poczt ku linii wtedy caa linia jest komentarzem, lub po kadej linii z instruk cj dla procesora, co znacznie uatwia pniejsz analize programu

Program monitora (BIOS)


Ze wzgldu na ograniczon objto a jednoczesnie do szerok te matyk zwizan z programem monitora zawartym w EPROMie, a znaj dujcym si w kadym zestawie edukacyjnym AVT2250, nie byem w stanie opisa szczegowo tego problemu przy okazji opisu kontruk cji i sposobw uruchomienia tego urzdzenia w poprzednich numerach EdW. Drugim powodem pewnego ominicia tego tematu by fakt bezce lowoci wyjasniania tego problemu na etapie kiedy nie znalicie jeszcze listy instrukcji procesora 8051, no przynajmniej wikszej jej czci. Skoro tak ju sie stao i w ostatnich trzech numerach wakowa limy teoretycznie ten temat, przysza odpowiednia pora na wyjanie nie sobie podstawowego pytania: Co tak naprawd siedzi w tym monitorze prcz funkcji usugowych ktre ju znacie czyli operacji umoliwiajcych np. adowanie (LOAD), podgldanie (EDIT) i urucha mianie programw (JUMP). Jak wspomaniaem w lekcji nr 4 zamieszczonej w poprzednim stycz niowym numerze EdW, w programie monitora znajduj si dodatko we procedury podprogramy (uyte okrelenia s tosame), dziki kt rym w prosty sposb moliwe jest wywoanie okrelonego dziaania na szego komputerka z zalenoci od Twoich potrzeb, czyli np. wyczysz czenie pola odczytowego wywietlacza, odczyt nacisnitego klawisza, czy wywietlenie liczby lub pseudotekstu w celu poinformowania uzytkownika o zaistniaym zdarzeniu lub wykonaniu pewnej operacji przez nasze urzdzenie. W tym miejscu szczeglnie komputerowcy stwierdz e sprawa wyglda podobnie jak w przypadku zwykego PCta czy kadego innego komputera, ktry posiada przecie dwa podstawo we urzdzenia wejciawyjcia czyli klawiatur i monitor (u nas jest to omiopozycyjny wywietlacz 7segmentowy). Tym osobom chc wyjani, e aby zrozumie znaczenie dodatko wych procedur o ktrych mwi, wystarczy porwna monitor pro gram komputerka do coraz rzadziej (niestety z punktu widzenia elek tronikahardwareowca a zarazem programisty) dzi spotykanego systemu operacyjnego MSDOS w waszym komputerze. Taki system oprcz tego e posiada pewne standardowe polecenia, chociaby do pokazania na ekranie drzewa katalogw na danym napdzie dyskietek lub dysku twardym (dir w PCtach). Te polecenia mona wanie po rwna do polece dostpnych bezporednio (bez pisania programu) z klawiatury komputerka edukacyjnego. W komputerze (np. PC) trzeba wpisa polecenie w postaci wyrazu i potwierdzi, u nas w naszym urz dzeniu wystarczy nacisn jeden klawisz aby wywoa okrelon funk cj porwnanie to dotyczy samej zasady posugiwana si programem monitora jako takim wanie prociutkim systemem operacyjnym, kt ry nagminnie nazywam monitorem lub biosem.

38

ELEKTRONIKA DLA WSZYSTKICH 2/98

Te to potrafisz
Jak jednak wiecie (zwracam si nie tylko do komputerowcw ale i do ciekawskich rczniakw), moe nie wszyscy, w kadym systemie operacyjnym istniej dodatkowe funkcje usugowe, ktre wykorzysty wane s poprzez rne programy, ktre uytkownik uruchamia z pozio mu systemu np. gry, arkusze kalkulacyjne, edytory tekstw, lub inne specjalistyczne oprogramowanie, praktycznie wszystko. Takie funkcje np. w sysytemie MSDOS dostepne s poprzez funkcj systemow INT21h. Programici piszcy aplikacje np,. w asemblerze x86 lub popu larnym Turbo Pascalu z pewnoci wiedz o co chodzi. Takie te funkcje posiada nasz komputerek,oczywiscie ze wzgldu na ograniczone moliwoci i potrzeby naszego systemiku oraz zupenie od mienn architektur procesora, s one mocno ograniczone, lecz dla na szych zastosowa w zupenoci wystarcz. Przejdmy zatem do ich omwienia. Przestawiajc wspomniane pod programy bd kierowa sie pewnym schematem, co z pewnoscia uat wi zrozumienie poszczeglnych procedur i pozwoli na ich bezproblemo we uycie w programie przykadowym, ktry przeanalizujemy krok po kroku w kolejnej lekcji nr 5. Oto schemat: umowna nazwa podprogramu oraz jego adres fizyczny (adres wywo ania instrukcj LCALL) krtki opis dziaania danego podprogramu, czyli co w efekcie si stanie parametry wejciowe (we:) wywoania, czyli co i do jakiego rejes tru trzeba zaadowa przed wywoaniem podprogramu parametry wyjciowe (wy:), czyli wynik (efekt) dziaania danej pro cedury po jej zakoczeniu dodatkowo podam w niektrych przypadkach, co taki podprogram zmienia (jakie rejestry) w procesorze. Ta informacja jest bardzo wa na, bowiem przecie piszc jaki program operujemy na rejestrach procesora, do ktrych zapisujemy okrelone wartoci, i w ktrych przechowuujemy wyniki operacji. Niektre z tych rejestrw (np. aku mulator lub rejestr B, czy rejestry R0...R7) s take wykorzystywane dodatkowo w celu zrealizowania okrelonej operacji (wewntrz pod programu) a wic ich zawarto jest w wyniku dziaania danej proce dury zmieniana. Konieczne zatem si staje zapamitanie przechowa nie na czas wykonywania podprogramu zawartoci tych rejestrw, aby po zakoczeniu procedury, mozna byo odtworzy ich zawarto pierwotn. Kto w tym miejscy moze zadac pytanie: a dlaczego ka dy podprogram po rozpoczciu swego dziaania (po wywoaniu) sam nie zadba i nie przechowa tych rejestrw, po czym je odtworzy po za koczeniu dziaania przeciez jest to moliwe.... Tak ale z punktu widzenia uytkowego, taka sytuacja jest w praktyce po prostu niepo trzebna, wydua to tylko niepotrzebnie dziaanie podprogramu, a co za tym idzie spowalnia dziaanie programu gwnego. HEXASCII (0235h) Przejdmy zatem do opisu poszczeglnych procedur podprogramw. zamienia liczb znajdujc si w akumulatorze (Acc) na dwa znaki ASCII ktrych kody umieszcza w rejestrach B (starszy pbajt) i A (modszy pbajt), np. jeeli w Acc przed wywoanie podprogramu bedzie liczba 4Fh (wszystkie liczby w kodzie heksadecymalnym), to po zakoczeniu wykonywania procedury bdzie: B = 4` (52) a aku mulator Acc= F (70) adres wywoania: 0235h we: Acc 8bitowa liczba do zamiany wy: B kod starszego pbajtu liczby wejciowej, Acc to samo ale modszy przykad: MOV A, #60h LCALL HEXASCII ....... ;liczba 60h do zamiany ;wywoanie podprogramu ;po wykonaniu w B bdzie znak 6 (liczba 54) ....... ;a w Acc kod znaku 0` (liczba 48) Procedur mona te wywoa w postaci : LCALL 0235h co przyniesie taki sam skutek. Rczniacy mog sobie od rki przetumaczy na jzyk maszynowy te polecenie jako cig bajtw: 02, 02, 35h pierwszy bajt to kod instrukcji LCALL, dwa nastpne to adres procedury HEXASCII. Tak samo mona postpowa z kadym innym wywoaniem, jednak w przypadku komputerowcw ze wzgl du na czytelno programu, naley uywa nazw sownych. A2HEX (024Eh) powoduje wywietlenie zawartoci akumulatora na wywietlaczu w postaci dwch znakw ze zbioru 0...9, A...F, na pozycji (wywiet laczu) podanej w rejestrze B adres wywoania: 024Eh we: Acc 8bitowa liczba do wywietlenia, B numer wywietlacza (1...8) od ktrego ma sie zaczyna wywietlana liczba wy: wywietlenie liczby na okrelonej pozycji traci: R0, A i B przykad: patrz lekcja nr 4 z poprzedniego numeru EdW, inny przykad: ;niech w rejestrze pod nazw sek bed przechowywane sekundy pro gramu zegara, ktry akurat uruchomilismy w naszym komputerku za pomoca innego podprogramu, w rej. min minuty a w rejestrze godz godziny aktualnego czasu, aby pokaza aktualny czas w postaci np. GG_ MM_ SS ,gdzie GG pozycja godzin, ;MM pozycja minut ;SS pozycja sekund (podkrelenie oznacza wygaszon pozycj wywietlacza) np. 12 45 00 (godz 12:45 i 00 sekund) nalezy wykonac sekwencj: LCALL CLS ;najpierw wyczycimy cae pole odczytowe MOV B, #1 ;godziny wywietlimy od 1 wywietlacza MOV A, godz ;zaadowanie godzin LCALL A2HEX ;i wywoanie podprogramu ;...... po wykonaniu na DL1 i DL2 bdzie godzina MOV B, #4 ;minuty wywietlimy od 4 wywietlacza MOV A, min ;zaadowanie minut LCALL A2HEX ;i wywoanie podprogramu ;...... po wykonaniu na DL4 i DL5 bd minuty MOV B, #7 ;sekundy wywietlimy od 7 wywietlacza MOV A, sek ;zaadowanie sekund LCALL A2HEX ;i wywoanie podprogramu ;...... po wykonaniu na DL7 i DL8 bd sekundy DPTR4HEX (025Fh) wywietla 16bitow liczb zawart w parze rejestrw DPH i DPL (DPTR) jako 4 znaki 0...9, A...F na pozycji podanej w rejestrze B (1...5). adres wywoania: 025Fh we: DPTR liczba do wywietlenia, B numer pozycji na wywiet laczu (1...5) wy: wywietla na 4 pozycjach 16bitowa liczb z DPTR traci: R0, A i B przykad: MOV DPTR,#1998h MOV B, #3 LCALL DPTR4HEX ;wywietl aktualny rok ;od 3ciego wywietlacza ;wywoanie podprogramu ;po wykonaiu na DL3456 bdzie wywietlony;rok z DPTR

CLS (0274h) czyci cae pole wyswietlacza (wstawia spacje na pozycje DL1...8) adres wywoania: 0274h we: bez parametrw wy: czyci wyswietlacz traci: R0 i R7 z aktualnie ustawionego zbioru przykad: LCALL CLS ;wyczyszczenie wywietlacza Sawomir Surowiski

ELEKTRONIKA DLA WSZYSTKICH 2/98

39

Te to potrafisz

Lekcja

5
operatora timer zaczyna odliczanie w ty do zera z wywietleniem pozostaego czasu. Zamy e w tym miejscu programu istnie je (po wciniciu innego klawisza) dodatko wa moliwo ustawienia innego czasu, np. w przypadku kiedy pomylilimy si przy wpisywaniu czasu wczenia. f) po zakoczeniu odliczania urzdzenie po winno zosta wyczone, a program powi nien powrci do punktu e) dajc dwie mo liwoci: rozpoczcia ponownego odliczania po wci niciu klawisza START lub powrotu do punktu a) celem poprawienia (zmiany) nastaw minut i sekund. Pamitajmy, e nasz program napisany b dzie z wykorzystaniem podprogramw pro cedur standardowych naszego monitora i w zwizku z tym jego dziaanie bdzie moli we tylko z wykorzystaniem komputerka AVT 2250 z zawartym w EPROM ie monitorem. W podanym niej przykadzie wykorzystane bd pewne, nie omwione wczeniej rejest ry procesora, ktre modyfikowane s automa tycznie przez cay czas dziaania komputerka. Modyfikacje te odbywaj si w tle, tzn. e pogram monitora jest Bity: 76543210 skonstruowany tak, e nawet pod Segmenty: H G F E D C B A (msb...lsb) czas dziaania naszego programu Liczba Binarnie Znak z przykadu, wspomniane modyfika 63 00111111 cyfra 0 cje rejestrw odbywaj si nieprze 6 00000110 cyfra 1 rwanie. Dzieje si tak za spraw 91 01011011 cyfra 2 ukadu licznikowego procesora oraz 127 01111111 cyfra 8 systemu przerwa. Sprawa jest nie 111 01101111 cyfra 9 co skomplikowana, a poniewa b 119 01110111 litera A dzie omwiona w kolejnych lek 124 01111100 litera B cjach, nie bdziemy jej teraz szcze 94 01011110 litera D gowo omawia. 64 01000000 znak (minus) Omwimy sobie teraz tylko krtko 118 01110110 litera H wspomniane rejestry, tak aby lepiej zrozumie dziaanie programu. Ot program monitora do dziaania potrze buje kilku rejestrw, ktre fizycznie znajduj si w obszarze wewntrznej pamici RAM procesora, przeznaczonej do dowolnego wy korzystania przez uytkownika. Oto kilka z nich, wykorzystane w naszym programiku: DL1...DL8 (adresy: 78h...7Fh) osiem rejes trw, ktre peni rol bufora znakw wy wietlanych przez 7segmentowy wywietlacz naszego komputerka. Zapis liczby odpowiada jcej wywietlanemu znakowi do jednego z tych rejestrw powoduje zapalenie odpo wiednio jednego z 8miu pozycji wywietlacza. Wywietlane znaki tworzone s nastpujco. Kady z omiu bitw liczby danego znaku od powiada poszczeglnym segmentom wy wietlacza. Bitw w liczbie 8bitowej jest oczywicie osiem, a segmentw w pojedyn czym wywietlaczu take osiem wliczajc w to kropk. Ukad elektroniczny komputerka jest tak skonstruowany (przypomnij sobie opis z EdW 9/97), e ustawienie bitu (1) w tej licz bie powoduje zapalenie danego segmentu, odwrotnie wyzerowanie (0) zgaszenie go. I tak najstarszy bit 7 odpowiada za segment H czyli kropk, najmodszy bit 0 za segment A wywietlacza w kolejnoci jak na rysunku 1. Dla przykadu podam kilka znakw i odpo wiadajce im liczby (kody).

W dzisiejszej lekcji przeanalizujemy obszer niejszy przykad programu, ktrego zadaniem bdzie realizacja funkcji prostego minutnika ze sterowaniem dowolnego urzdzenia zewntr znego poprzez wybrane kocwki portu P1 mikroprocesora. W programie tym wykorzys tamy omwione w poprzednich lekcjach in strukcje procesora 8051 oraz niektre proce dury usugowe czyli podprogramy zawarte w programie monitora znajdujcego si w EP ROMie waszego komputerka edukacyjnego. Na listingu poniej znajduje si wspomniany program w postaci generowanej przez kompila tor PASM51 znajdujcy si na dyskietce AVT 2250/D. Przypomn tylko ze waciwy kod rdowy programu zaczyna si od trzeciej ko lumny tekstu (nie wliczajc numerw linii, podanych w nawiasach). Pierwsza kolumna zawiera zapisany w postaci szesnastkowej ad res pod ktrym wystpuje znajdujca si w da nej linii instrukcja. W przypadku kiedy w linii nie wystpuje instrukcja lecz deklaracja przypi sania EQU liczba ta wskazuje na argument znajdujcy si po prawej stronie. W drugiej kolumnie jak zapewne zdylicie si zorientowa z poprzednich przykadw, znajduje si przetumaczony na kod maszyno wy cig 8mio bitowych licz zapisanych take w postaci heksadecymalnej. Dalsza cze linii tak jak wspomniaem przed chwila, to kod rdowy programu. Dla uatwienia dodatkowo wszystkie linie ponumerowano liczbami w nawiasach. Przed stworzeniem dowolnego programu, kady programista powinien zastanowi si nad tym co powinien on realizowa jaka ma by jego funkcja?. W naszym przypadku pro gram, jak powiedziaem wczeniej, ma by mi nutnikiem, czyli mwic inaczej timerem z moliwoci wprowadzenia przez uytkowni ka czasu, a nastpnie zaczenie urzdzenia zewntrznego na ten wprowadzony wczeniej okres. Zakadamy, e czas bdzie ustawiany w minutach i sekundach, a maksymalny za kres ustawionego czasu to 99 minut i 99 se kund. Dodatkowo wykorzystamy wywietlacz naszego komputerka oraz jego klawiatur do wprowadzenia nastaw minut i sekund oraz wywietlenia go w trakcie odliczania a do osignicia stanu 0:00 i wyczenia sterowa nego urzdzenia. Przed rozpoczciem pisania programu okre lmy sobie scenariusz, ktry czsto odpowiada tzw. algorytmowi programu. Poniewa nasz program jest do prosty, taki algorytm mona zapisa w postaci kolejnych podpunktw, oto one. a) wprowadzenie z klawiatury minut b) wprowadzenie z klawiatury sekund mamy czas zaczenia c) wybr przez uytkownika kocwki proce sora (np. z portu P1) sterujcej urzdzeniem d) oczekiwanie na rozpoczcie odliczania. Za kadamy e polaryzacja sygnau sterujcego bdzie ujemna. e) po naciniciu odpowiedniego klawisza (umownie nazwanego jako START) przez

Zastanw si chwil i pomyl jak mona utworzy inne znaki, np. L, 4, 7. Posia dacze dyskietek AVT2250/D mog znale od

Rys. 1.

40

ELEKTRONIKA DLA WSZYSTKICH 2/98

Te to potrafisz
powied w pliku CONST.INC, gdzie zdefinio wano wikszo znakw uywanych w na szych aplikacjach. Pozostae osoby bd miay okazj zapozna si z tymi informacjami w ko lejnej lekcji szkoy mikroprocesorowej. BSW (adres: 70h) Kolejnym istotnym re jestrem jest nazwane umownie sowo stanu monitora. Kady z bitw tego sowa peni okrelona rol. I tak np. najmodszy bit 0 zmie nia swj stan (z 0 na 1 i odwrotnie) z czstotliwoci 2 Hz, co bdzie wykorzysta ne w naszym programie do odliczania sekund. Dwukrotna zmiana bitu moe bowiem by in formacj, e upyna wanie dokadnie 1 se kunda. BLINKS (adres: 71h) bajt, ktrego poszcze glne bity odpowiadaj za atrybut wywietla nego na displeju znaku. Ustawienie np. naj starszego bitu w tym sowie powoduje e za pisany do rejestru DL8 znak bdzie migota. Czstotliwo migania okrelona jest wewnt rznie przez program monitora na 2Hz i oczy wicie mona j zmienia, lecz sposb tej spo sb na to nie jest tematem tego artykuu. Przy porzdkowanie poszczeglnych bitw pozy cjom wywietlacza jest nastpujce. DL 12345678 bity: 76543210 Teraz zajmijmy si ju naszym programem. Na pocztku znajduje si deklaracja CPU procesora oraz kilka linii komentarza, ktre w kadym przypadku zaczynaj si znakiem rednika. W linii (1) zdefiniowano dodatkowy znak imi tujcy ma liter o, w naszym programie minutnika bdzie on zapalany na ostatniej po zycji celem sygnalizacji e urzdzenie jest za czone i odliczany jest ustawiony wczeniej czas. Linie (2) i (3) to definicje dodatkowych rejes trw w wew. RAM procesora, w ktrych bd przechowywane wprowadzone i potem dekre mentowane minuty i sekundy ustawionego czasu minutnika. Linia (4) to deklaracja dla kompilatora, ktry musi wiedzie e program ma zaczyna si od adresu 8000h, gdzie zlokalizowana jest pami ci operacyjne SRAM naszego komputerka i gdzie bdzie zaadowany nasz program. Od komentarza przed lini (5) zaczyna si waciwy program. Na pocztku trzeba wy czyci wywietlacz wywoujc podprogram nazwany jako CLS (jego adres w pamici mo nitora to 0274h). Dodatkowo linia ta zostaa oznaczona etykiet pocz: ktra posuy po tem do powrotu na pocztek programu po za koczeniu jednego cyklu odliczania i chci roz poczcia nastpnego. Linia (6) powoduje ustawienie wszystkich kocwek portu P1 w stan wysoki, co w na szym zaczeniu oznacza wyczone urzdze nie zewntrzne. Komu w tym miejscu moe wydawa si, e bardziej logiczne byoby wy zerowanie kocwek i sterowanie np. przeka nikiem za pomoc tranzystora NPN (jak poka zano na rys.1a) lecz takie rozumowanie moe w pewnych przypadkach by bdne. Jak wia domo w prawdziwych zastosowaniach wszel kie stany przejciowe szczeglnie ukadw wykonawczych s niepodane. Tak tez moe si zdarzy w przypadku sterowania przekani ka z rys.1a, bowiem procesor po wczeniu za silania przez krtk chwil (kilka do kilkuset mi lisekund) znajduje si w stanie resetu, a ko cwki jego portw znajduj si w stanie wyso kiej impedancji. W takim przypadku sterowany przekanik w sposb jak na rys.1a zostaby za czony na krtko po wczeniu zasilania, uka du, a do momentu planowanego wyczenia na pocztku programu instrukcj np. MOV P1, #0 etykieta pocz:. Linie (7)..(12) powoduj wywietlenie zna kw informacyjnych, bdcych zacht do wprowadzenia danych przez uytkownika przed rozpoczciem odliczania. F W linii (13) znajduje si wywoanie podpro gramu WAITSEK, ktry nie ma specjalnego przeznaczenia, poza tym e wykonanie go za jmuje procesorowi okoo 1 sekundy. Procedu ra ta zdefiniowana jest w dalszej czci listin gu, tote omwimy j za chwil. W kolejnej czci programu nastpuje po branie liczby minut za pomoc podprogramu GETACC (adres: 03A7h) linia (16) na pozycji podanej w linii (15) w rejestrze B przed wywo aniem podprogramu. Dodatkowym uytecz nym wodotryskiem s migajce pozycje 1 i 2 wywietlacza, co zachca uytkownika do wprowadzenia liczby minut. W linii (17) wprowadzona liczba jest zapa mitywana w zdefiniowanym wczeniej rejes trze nazwanym jako minuty. Warto w tym miejscu powiedzie, e liczb minut (a take sekund) naley wprowadza ko rzystajc z klawiszy cyfr: 0...9 czyli w postaci dziesitnej, atwiejszej dla przecitnego uyt kownika. Podprogram GETACC akceptuje oczy wicie take klawisze A...F, lecz nie naley ich uywa, bowiem spowoduje to nieprawidow prace programu, dlaczego o tym za chwil. Po pobraniu minut w liniach (19)...(22) reali zowane jest w analogiczny sposb wprowa dzenie sekund, z t rnic, e tym razem mi gocz pozycje 4 i 5 wywietlacza, co jest natu ralne i czytelne dla operatora. Linie (23)...(25) realizuj pobranie numeru aktywnego wyjcia portu P1, do ktrego ko cwki doczone jest sterowane zewntrznym urzdzeniem. Numer wyjcia powinien by po dany za pomoc klawiszy od: 0 (dla kocw ki P1.0) do 7 (dla kocwki P1.7). Wykorzystany zostaje do tego inny podpro gram monitora: GETDIGIT pobranie cyfry szesnastkowej za pomoc klawiszy 0...9, A...F. Po wykonaniu tej operacji (podobnie jak w przypadku GETACC) cyfra znajduje si w akumulatorze. Rejestr B przed wywoaniem powinien zawiera pozycj na ktrej bdzie wywietlona wprowadzana przez operatora cyfra. W linii (26) cyfra ta jest dodatkowo fil trowana, tak e pozostaj 3 najmodsze bity czyli cyfra z zakresu 0...7. Linia ta jest w zasa dzie nie jest konieczna, lecz pokazuje w jak prosty sposb mona czasem zabezpieczy si przed nieprawidowym wprowadzeniem danych. Nastpnie w linii (27) numer wyjcia zapa mitany zostaje w rejestrze B, gdzie poczeka na swj moment. W linii (28) koczy si wprowadzanie da nych, a displej wywietlajc na przedostatniej pozycji migajcy znak informuje uytkowni ka o gotowoci do rozpoczcia odliczania. W linii (29) znajduje si wywoanie podpro gramu, ktrego zadaniem jest oczekiwanie na nacinicie dowolnego klawisza a nastpnie zwrcenie jego kodu w akumulatorze. W przy padku klawiszy 0...9, A...F kody te odpowiada j kodom ASCII przyjtym na wiecie, jedynie nacinicie klawisza OK. (okej) powoduje zwrot kodu 13. W linii (30) sprawdzany jest warunek, czy kod ten odpowiada naciniciu klawisza START, czyli OK. Jeeli tak, to wykonane zo stan linie programu poczwszy od linii (31). Linia (31) wykonywana jest w po urucho mieniu odliczania. Wywoana w niej procedura WAITSEK powoduje odczekanie okresu do kadnie 1 sek., tak aby przygotowa odliczanie a jednoczenie spowolni dziaanie programu po wciniciu klawisza OK. W liniach (32) i (33) wykonywana jest kosmetyka wywietlacza, polegajca na zapaleniu migajcej kreski rozdzielajcej mi nuty i sekundy, co daje efekt wizualny upy wu czasu. Nastpnie w linii (34) pobrany zostaje adres tabeli bajtw z ktrych kady po zapisaniu do portu P1 (linia 37) spowoduje zaczenie jedne go z 8miu wyj. I tak w linii (35) zostaje od tworzony w akumulatorze a przechowywany w rejestrze B (patrz linia nr 27) numer wybra nego wyjcia portu P1. W linii (36) pobrany zostaje bajt z tabeli zde finiowanej w dalszej czci kodu programu, a w nastpnej bajt ten zostaje wpisany do por tu P1 zaczajc jedno z 8miu wyj. Popatrz my przez chwil i zastanwmy si, jak to si dzieje. Ot wyobramy sobie e podczas wprowadzania numeru aktywnego wyjcia wcisnlimy (za pomoc procedury GETDIGIT, linia 25) klawisz 4, czyli w domyle wybralimy wyjcie P1.4, gdzie ma wystpi zaoony wczeniej stan aktywny (u nas niski), a na po zostaych kocwkach stan nieaktywny (u nas wysoki). Teraz jeeli pobierzemy za pomoc in strukcji MOVC A, @A+DPTR, ze zdefiniowanej tabeli, bajt z przesuniciem 4 wzgldem po cztku tabeli, to fizycznie bdzie to 5ty bajt popatrz na tabel! Pierwszy bajt w tabeli ma przesunicie 0 bo jest on umieszczony pod ad resem umieszczonym w rejestrze DPTR. Ad res tabeli zosta przecie wpisany w linii (34). Drugi bajt bdzie mia przesunicie 1, trzeci 2 itd. Popatrzmy teraz na sam bajt, pobrany przed chwil ze zdefiniowanej tabeli wyj. Pity z tabeli bajt to 11101111b, po wpisaniu w linii 37 na wszystkich kocwkach oprcz P1.4 pojawi si logiczna 1ka, a na tym jednym stan niski, proste prawda. W linii (38) dodatkow po zaczeniu wyjcia, zapalony zostaje znaczek o na ostatniej pozycji wywietlacza, co sygnalizuje opera torowi, e wyjcie zostao uaktywnione, a przyczone do niego urzdzenie pracuje. Teraz nastpuje cz programu, w ktrej ustawiony czas bdzie odliczany a do zera. Do tego celu wykorzystane zostaj dwa rejestry robocze R3 i R4. Do nich to wanie zostaje przepisana zawarto rejestrw min uty i sekundy. Taka operacja jest potrzebna do tego, aby w czasie odliczania nie zmniejszane byy rejestry przechowujce ustawiony czas (minuty i sekundy), tylko inne wolne rejestry, u nas R3 i R4. Dziki temu kiedy czas osignie zero, a uytkownik bdzie chcia powtrzy proces odliczania, bdzie mg to zrobi bez ponownego ustawiania nastaw minut i sekund, powtrnie przepisujc nastawy do rejestrw R3 i R4. W liniach (42) i (43) sprawdzany jest warunek, czy nastawa sekund jest rwna 0?. Wykorzystana tu jest instrukcja JNZ, po uprzednim przepisaniu R4 do akumulatora. W tym miejscu zamiast tych dwch instruk cji mona by uy polecenia CJNE R4, #0, niezer, ale wtedy midzy etykiet niezer a instruk cj kall DECACC trzeba wstawi instrukcj: MOV A; R4 zastanw si jednak dlaczego? Jeeli warunek jest speniony, czyli zawarto licznika sekund (rejestru R4) jest rna od zera, nastpuje skok do miejsca programu oznac zonego przez etykiet niezer.

ELEKTRONIKA DLA WSZYSTKICH 2/98

41

Te to potrafisz
Tutaj w linii (53) wywoany zostaje podpro gram, ktrego zadaniem jest dekrementacja zawartoci akumulatora, ktry przecie zaw iera to co przed chwil byo w R4, czyli licznik sekund. Dlaczego uyto podprogramu, a nie np. instrukcji DEC A, ktra przecie take zmniejsza zawarto rejestru (akumulatora), a no dlatego, e instrukcja ta dekrementuje rejestr w sposb naturalny w kodzie szes nastkowym, czyli np. 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, jak dotd jest wszystko w porzdku, ale nastpne zmniejszenie rejestru nie spowoduje ustaw ienia sekund na liczb 49 ale na 4Fh !, a tego nie chcielibymy wywietli na displeju jako pozostaych sekund. Gdyby zatem uy tej pojedynczej instrukcji, to nie tylko odczyty na wywietlaczu byyby bezsensowne, ale i 10 sekund w naszym timerku trwaoby a 16 sekund! Dlatego od linii (79) rozpoczyna si zdefin iowany podprogram procedura, ktrej zadaniem jest waciwe, dziesitne (lub jak kto woli z korekcj dziesitn) zmniejszenie aku mulatora, czyli w naszym przypadku jeeli np. licznik sekund bdzie zawiera 50, to po dekre mentacji za pomoc naszego podprogramu bdzie w nim liczba 49, a wic to co trzeba. Ta sama sprawa dotyczy licznika minut, ale o tym za chwil. Tak wic po zmniejszeniu, dalej w linii (54), zdekrementowana zawarto akumula tora zostaje przepisana do waciwego rejestru R4, po czym w liniach nastpnych (55 oznaczona jako wypisz) i (56), nastpuje wywietlenie aktualnej zawarto ci sekund na displeju. Korzystamy tu z pod programu A2HEX, omwionego w tym odcinku szkoy mikroprocesorowej. W linii (57) nastpuje planowe odliczenie czasu 1 sekundy z wykorzystaniem podprogramu WAITSEK, a nastpnie skok z powrotem do momentu kiedy sprawdzany jest warunek wyzerowania sekund etykieta nsek (linia 42). Wrmy teraz do linii (43), kiedy to warunek zgodnoci sekund z 0 jest speniony. Wtedy wykonana zostanie instrukcja nastpna po JNZ niezer, czyli linia (44). W niej to do akumulatora zostaje zaa dowana zawarto rejestru R3, ktra jest prze cie odzwierciedleniem licznika minut. W linii (45) zostaje sprawdzony warunek, czy licznik minut (przepisany przed chwil do akumulatora) jest rwny zero. Jeeli tak jest to znaczy e licznik timera do szed do zera i nastpi skok do etykiety koniec: linia 59, ktr omwimy za chwil. Jeeli licznik minut jest rny od zera, to wykonana zostanie linia (46), czyli dekremen tacja minut (przepisanych przecie do akumu latora) za pomoc omwionego wczeniej podprogramu DECACC. Po tym w linii (47) zmniejszona w A liczba minut zostaje przepisana do rejestru R3, a w kolejnych liniach (48) i (49) wypisana na pozy cji wywietlacza okrelonej w rejestrze B (linia 48). Teraz uwaga, skoro zmniejszono liczb minut, to teraz w linii (50) zostaje ustawiona pocztkowa (przy zmniejszaniu) liczba sekund, czyli 59. No bo skoro byo np. 19:00 (min:sek) to po zmniejszeniu o 1 sekund licznik powinien wskazywa 18:59 (min:sek) tak te si stanie, dziki tej operacji. Oczywicie skorygowana tutaj liczba sekund musi by zapisana w rejestrze R4, co dzieje si w linii (51). Teraz naleaoby wypisa na displeju nowe wartoci licznika timera, tote w kolejnej linii (52) znajduje si skok bezporedni do miejsca znanego nam ju, czyli do etykiety wypisz. Po tym i wykonaniu linii (57) i (58), ktre opisaem wczeniej, program skacze na pocztek ptli zmniejszania licznika timera, czyli do etykiety nsek linia 42 i ptla pow tarza si. Takie odliczanie w ty licznika timera odbywa si, jak zapewne zauwaylicie, a do momen tu, gdy nastpi sytuacja, gdy minuty jak i sekundy bd rwne zero. Wtedy warunek w omwionej wczeniej linii (43) nie bdzie speniony (sekundy = 0), a warunek w linii (45) speniony (minuty = 0) i nastpi skok do etyki ety koniec: linia 59. Tutaj do portu P1 zostaje zapisana liczba 255, binarnie 11111111, czyli wszystkie kocwki portu zostaj dezaktywowane, a przy tym zostaje wyczone sterowane urzdzenie. W linii (60) wyczone zostaje migotanie niektrych zapalonych wczeniej znakw na wywietlaczu. W linii kolejnej na pozycji 8 zostaje wypisany znak F co jak wspomniaem na pocztku programu, jest sygnaem dla uytkownika, e urzdzenie zostao wyczone. W liniach (62)....(67) program wypisuje ustawion wczeniej, nastaw minut i sekund timera, byy one przez cay czas prze chowywane w rejestrach nazwanych jako minuty i sekundy. Dziki uyciu rej. roboczych R3 i R4 jak powiedziaem wczeniej ich zawarto nie ulega zmianie podczas dekrementacji. Nastpnie w linii (68) nastpuje skok do etykiety wait, gdzie zgodnie z naszym sce nariuszem, program czeka na kolejn decyzj operatora, ktry ma do wyboru dwie sytuacje. Pierwsza to rozpoczcie ponownego odlicza nia ustawionych nastaw minut i sekund (klaw isz OK.), druga to ustawienie nowych klawisz 0 (zero). Program wraca zatem do linii (29), wrmy i my w naszej analizie. Tutaj jak pamitamy wywoywany jest podprogram CONN, ktrego zadaniem jest czekanie na nacini cie klawisza i zwrcenie jego kodu w aku mulatorze. W poprzednim przypadku po ustawieniu timera wcisnlimy klawisz OK. i program potoczy si jak opisywaem wczeniej. Zamy teraz e wcinitym klawiszem nie by OK., tote warunek w linii (30) bdzie speniony i nastpi skok do etykiety nieok linia 69. Tutaj kod wcinitego klawisza jest porwnywany z liczb kodem 0, czyli poleceniem zmiany nastaw timera (minut i sekund). Jeeli nie wcinito klawisza 0, to warunek bdzie speniony i nastpi skok do linii (29), czyli do ponownego oczekiwania na wcinicie klawisza. Jeeli natomiast operator wcinie 0, warunek w linii (69) nie bdzie speniony i pro gram przejdzie do linii (70), gdzie wystpuje polecenie skoku bezwarunkowego na pocztek programu. Tam w linii (5) wszystko zaczyna si od pocztku. Tak moi drodzy i tak dziaa cay program z naszego przykadu. Kto moe zada pytanie, a co zrobi jak chc zakoczy program, nic prostszego. Przypominam e do eleganck iego wyjcia z prawie kadego programu suy klawisz monitora M.. Mona take zre setowa komputerek, i potem uruchomi pro gram od nowa. Pozostay do omwienia dwa zaimplemen towane w programie procedury: WAITSEK linia 71, i DECACC linia 79. Pierwsza procedura WAITSEK opiera si na zasadzie sprawdzenia dwukrotnej zmiany stanu najmodszego bitu w sowie specjal nym monitora BSW, opisanym na pocztku lekcj. Dwukrotna zmiana fazy (stanu) tej flagi wyznacza nam okres 1 sekundy, przy zaoeniu, e podprogram jest wykonywany cyklicznie. Zastanw si dlaczego np. przy pierwszym wywoaniu tej procedury okres oczekiwania moe by mniejszy? odpowied w kolejnej lekcji naszej klasy mikroprocesorowej. Dodatkowo ze wzgldu na to e w podpro gramie wykorzystywany jest i modyfikowany akumulator, w linii (71) nastpuje zapamitanie stanu tego rejestru na stosie, a po zakocze niu wykonywania operacji, w linii (77) odt worzenie jego stanu poprzez zdjcie go ze stosu. Podprogram koczy si oczywicie, zgodnie z zasadami pisania procedur, instrukcj RET w linii (78). Analiz i wyjanienie zasady dziaania pod programu DECACC proponuj wykona samodzielnie. Najlepiej jest za pomoc owka i kartki papieru, analizujc linia po linii kod podprogramu, oblicza wartoci akumulatora po wykonaniu kadej z linii pro cedury DECACC a do instrukcji RET. Pamitajmy tylko, e przy wywoaniu tego podprogramu argumentem jest liczba zawarta w akumulatorze, a po zakoczeniu wynik take znajduje si w rejestrze A, lecz jest zmniejszony o 1 w sposb jaki omwiem wczeniej. Na koniec lekcji podaj kilka wskazwek, co mona zmieni w programie, przynajmniej na platformie obsugi, tak aby zachowa funkcjon alno programu. I tak: Mona zmieni symbolik wywietlanych informacji, definiujc swoje znaki zamiast symboli wczenia o lub wyczenia F urzdzenia. Ciekaw modyfikacj jest take zezwolenie na sterowanie kilkoma urzdzeniami na raz w omiu dozwolonych kombinacjach. Mona to uzyska modyfikujc poszcze glne bity liczb umieszczonych w tabeli tab_wyj. Mona take zmieni rodzaje klawiszy uruchamiajcych procedur odliczania lub wprowadzania nowych nastaw przez opera

Rys. 2.

42

ELEKTRONIKA DLA WSZYSTKICH 2/98

Te to potrafisz
tora oraz wprowadzi dodatkowy klawisz koczcy program np. komunikatem End. Proponuj jako zadania wykona nastpu jce wiczenia. Zadanie 1 Zaprojektowa i uy zamiast symbolw F i o inne wskazujce na stan pracy stero wanego urzdzenia. Zadanie 2 Wprowadzi do programu obsug i rozpoz nawanie klawisza 1 jako koczcego pro gram napisem End. Nie zapomnijcie o ptli nieskoczonej typu stop: SJMP stop z wczonymi w szereg opornikami (180...470 omw) i sprawdzi efekt swojej pracy, obser wujc stan wyj po uruchomieniu tajmera. Przypominam o prawidowym wczeniu kadej z diod LED w sposb jak na rysunku 2. Wszystkie odpowiedzi znajdziecie, drodzy Czytelnicy w kolejnej lekcji szkoy mikroproce sorowej. ycz wiele cierpliwoci oraz duo satysfakcji! Sawomir Surowiski

po instrukcjach wypisujcych wspomniany napis, inaczej program wpadnie w maliny i nic nie zobaczycie. Zadanie 3 Zmodyfikowa tabel wyj tab_wyj, tak aby przy wymienionych poniej nastawach wyboru wyjcia (0...7) moliwe byy odpowiadajce im, a wypisane obok kombi nacje zaczenia wyjc portu P1. Dodatkowo proponuj do portu P1 doczy 8 diod LED

Listing programu
CPU 8052.def ;Lekcja nr 5 szkoly mikroprocesorowej w EdW ;program prostego minutnika z ustawianiem czasu ;zalaczenia zewntrznego urzdzenia sterowanego ;poprzez jedna z koncowek portu P1 ;-------------------------_o equ 01011100b ;definicja znaku o wyswietlacza minuty equ 50h ;rejestr przechowujacy minuty sekundy equ 51h ;rejestr przechowujacy sekundy ;--------------------------org 8000h ;poczatek pamieci zewn.RAM ;napisy i znaki informacyjne pocz: lcall CLS mov P1,#255 mov DL1,#_minus mov DL2,#_minus mov DL4,#_minus mov DL5,#_minus mov DL7,#_minus mov DL8,#_F lcall WAITSEK ;wprowadzanie czasu - minuty mov blinks,#00000011b mov B,#1 lcall GETACC mov minuty,A ;wprowadzanie czasu - sekundy mov blinks,#00011000b mov B,#4 lcall GETACC mov sekundy,A ;wybor wyjscia - pinu portu P1 mov blinks,#01000000b mov B,#7 lcall GETDIGIT anl A,#7 mov B,A mov blinks,#10000000b ;czekanie na rozpoczecie odliczania lcall CONIN cjne A,#klaw_OK,nieok

(1) (2) (3) (4)

005C 0050 0051 8000

(5) (6) (7) (8) (9) (10) (11) (12) (13)

8000 120274 8003 7590FF 8006 757840 8009 757940 800C 757B40 800F 757C40 8012 757E40 8015 757F71 8018 1280A4

;wyczysc displej ;wszystkie piny portu OFF

;napis , zacheta do o ;wprowadzenia czasu ;i dodatkowo znacznik -F ;wylaczenia F wyjscia -

(14) (15) (16) (17) (18) (19) (20) (21) (22)

801B 757103 801E 75F001 8021 1203A7 8024 F550 8026 8026 757118 8029 75F004 802C 1203A7 802F F551

;miga pozycja minut ;na pozycji nr 1 displeja ;pobranie liczby minut 0..99 ;i zapamietanie jej w rejestrze

;miga pozycja sekund ;na pozycji nr 4 displeja ;pobranie liczby sekund 0..59 ;i zapamietanie jej w rejestrze

(23) (24) (25) (26) (27) (28)

8031 757140 8034 75F007 8037 120379 803A 5407 803C F5F0 803E 757180

;miga pozycja numeru wyjscia ;na pozycji 7 displeja ;pobierz numer pinu P1: 0..7 ;dla bezpieczenstwa wazne tylko 3 lsb ;i przechowanie numeru wyjscia ;miga znacznik zalaczenia

(29) (30)

8041 1202C5 8044 B40D57

wait:

;czekanie na klawisz ;start - klawisz OK

(31) (32) (33) (34) (35) (36)

8047 1280A4 804A 757A40 804D 757104 8050 9080CC 8053 E5F0 8055 93

;te instrukcje beda wykonane gdy wcisnieto klawisz startu odliczania lcall WAITSEK ;czekanie sekunde mov DL3,#_minus mov blinks,#00000100b ;miga kreska miedzy (mm-ss) mov mov movc DPTR,#tab_wyj A,B A,@A+DPTR ;pobierz adres tabeli wyjsc ;odtworzenie numeru wyjscia ;pobranie maski wyjsc z tabeli

ELEKTRONIKA DLA WSZYSTKICH 2/98

43

Te to potrafisz
(37) (38) (39) (40) (41) (42) (43) (44) (45) (46) (47) (48) (49) (50) (51) (52) (53) (54) (55) (56) (57) (58) 8056 F590 8058 757F5C 805B 805B AB50 805D AC51 805F EC 8060 7012 8062 EB 8063 601E 8065 1280B3 8068 FB 8069 75F001 806C 12024E 806F 7459 8071 FC 8072 8004 8074 1280B3 8077 FC 8078 75F004 807B 12024E 807E 1280A4 8081 80DC mov mov P1,A DL8,#_o ;i zapisanie do portu P1 - zalaczenie ;znaczek o na DL8 - ON

;tutaj odliczanie ustawionego czasu do zera mov R3,minuty mov R4,sekundy nsek: mov jnz mov jz lcall mov mov lcall mov mov sjmp lcall mov mov lcall lcall sjmp A,R4 niezer A,R3 koniec DECACC R3,A B,#1 A2HEX A,#59h R4,A wypisz DECACC R4,A B,#4 A2HEX WAITSEK nsek

;przechowanie ustawionego czasu ;czy sekundy = 0 ?

;czy minuty = 0 ? ;nie, to zmniejszenie minut

;wypisanie minut ;i korekcja sekund ;zmniejszenie sekund

niezer: wypisz:

;wypisanie sekund ;i nastepna sekunda

(59) (60) (61) (62) (63) (64) (65) (66) (67) (68) (69) (70)

8083 7590FF 8086 757100 8089 757F71 808C 75F001 808F E550 8091 12024E 8094 75F004 8097 E551 8099 12024E 809C 80A3 809E B430A0 80A1 028000

;te instrukcje gdy zakonczono proces odliczania koniec: mov P1,#255 mov blinks,#0 mov DL8,#_F mov B,#1 mov A,minuty lcall mov mov lcall sjmp nieok: cjne ljmp A2HEX B,#4 A,sekundy A2HEX wait A,#0,wait pocz

;wylaczenie urzdzenia ;wylaczenie migania displeja ;znaczek - na DL8 - OFF ;pokazanie wprowadzonego czasu ;minuty ;i sekundy ;i skok do momentu czekania na klawisz ;wrowadz czas jeszcze raz - klawisz 0 ;i skok na poczatek programu

;----------------------------(71) (72) (73) (74) (75) (76) (77) (78) (79) (80) (81) (82) (83) (84) (85) (86) (87) (88) (89) (90) (91) (92) (93) (94) (95) 80A4 80A4 C0E0 80A6 E570 80A8 20E0FB 80AB E570 80AD 30E0FB 80B0 D0E0 80B2 22 80B3 80B3 7003 80B5 7499 80B7 22 80B8 C3 80B9 9401 80BB C0E0 80BD 540F 80BF B40F07 80C2 D0E0 80C4 54F0 80C6 4409 80C8 22 80C9 D0E0 80CB 22 80CC FEFDFBF7 80D0 EFDFBF7F ;procedura czekania 1 sek. push Acc czek1: mov A,bsw ;pobranie slowa stanu monitora jb Acc.0,czek1 ;czekanie na wyzerowanie bitu 2Hz czek2: mov A,bsw jnb Acc.0,czek2 ;a potem na jego ustawienie pop Acc ret ;---------------------------DECACC: ;dekrementacja Acc z korekcja dziesietna jnz niero mov A,#99h ret niero: clr C subb A,#1 push Acc anl A,#0Fh cjne A,#0Fh,nie0F pop Acc anl A,#0F0h orl A,#9 ret nie0F: pop Acc ret ;---------------------------tab_wyj db 11111110b,11111101b,11111011b,11110111b ;wyj: 0,1,2,3 db 11101111b,11011111b,10111111b,01111111b ;wyj: 4,5,6,7 ;---------------------------END WAITSEK:

(96)

80D4

44

ELEKTRONIKA DLA WSZYSTKICH 2/98

Te to potrafisz

Mikrokontrolery? To takie proste...


W kolejnej czci naszego cyklu zapoznamy si z pozostaymi pod programami zawartymi w monitorze komputerka edukacyjnego AVT2250. W dalszej czci artykuu postaram si wyjani znaczenie kilku wa nych dla dziaania monitora rejest rw. Na kocu jak zwykle proponuj kolejn lekcj szkoy mikroproceso rowej, tematem dziesiejszej bdzie konwersacja liczb szesnastkowych na dziesitne.

Cz 11 Asembler jzyk maszynowy procesora


Prawda e proste, zauwa wszake e do prawidowego wywietle nia potrzebny jest kod 0 (00h) na kocu kadego cigu bajtw i tak te jest u w naszym przykadzie. Teraz ilekro bdziesz chcia wywoa taki komunikat w swoim pro gramie zamiast wystarcz te oto instrukcje: MOV DPTR, #napis_blad ;adres cigu znakw (bajtw) MOV B, #1 ;wypisz od 1szej pozycji displeja LCALL TEXT ;no i wypisz komunikat Komputerowcy mog w tej chwili zajrze do zbioru o nazwie CONST.INC z dyskietki AVT2250/D, gdzie zdefiniowano wikszo potrzebnych znakw jednoczenie na tyle czytelnych aby by rozpozna ne na wywietlaczu wskanika 7segmentowego. Rczniakom poda j cig, oto ona: znak kod komentarz _0 equ 00111111b ;cyfra 0 (3Fh) _1 equ 00000110b ;cyfra 1 (06h) _2 equ 01011011b ;cyfra 2 (5Bh) _3 equ 01001111b ;cyfra 3 (4Fh) _4 equ 01100110b ;cyfra 4 (66h) _5 equ 01101101b ;cyfra 5 (6Dh) _6 equ 01111101b ;cyfra 6 (7Dh) _7 equ 00000111b ;cyfra 7 (07h) _8 equ 01111111b ;cyfra 8 (7Fh) _9 equ 01101111b ;cyfra 9 (6Fh) _A equ 01110111b ;litera A (77h) _B equ 01111100b ;litera B (7Ch) _C equ 00111001b ;litera C (39h) _D equ 01011110b ;litera D (5Eh) _E equ 01111001b ;litera E (79h) _F equ 01110001b ;litera F (71h) _kropka equ 10000000b ;kropka wywietlacza (80h) _pusty equ 0 ;wszystkie segmenty wygaszone (00h) _kursor ko kursor _minus _H _J _L _P equ equ equ equ equ equ 00001000b 01000000b 01110110b 00011110b 00111000b 01110011b ;znak podkrelenia _, znany ja ;znak (40h) ;litera H (76h) ;litera J (1Eh) ;litera L (38h) ;litera P (73h)

Na pocztek naszego dzisiejszego spotkania kilka uytecznych przy pisaniu programw podprocedur standardowych biosu naszego komputerka. TEXT (0285h) wyprowadza na wywietlacz znaki poczwszy od pozycji DLx poda nej w rejestrze B a do kodu pustego 00h. Kody musz znajdo wa si w pamici programu, a adres ich pocztku przed wywoa niem procedury powinien znajdowa si w rejestrze DPTR. Jeeli ko lejne kody (bajty) opisuj znaki np. cyfry, litery: A...F, P, L, oraz inne zgodnie z zasad tworzenia wasnego znaku podan w po przednim odcinku szkoy mikroprocesorowej, a cay cig bajt koczy si liczb 0, to w efekcie podprogram powoduje wypisanie na wy wietlaczu pseudotekstu. adres wywoania: 0285h we: DPTR wskazuje pocztek cigu bajtw w pamici programu, B pozycja 1 znaku na wywietlaczu (1...8) wy: wypisuje znaki na wywietlaczu zgodnie z zasada opisan wczeniej traci: rejestry DPTR, A i R0 przykad: powiedzmy e chcemy wypisa pseudonapis informujcy o bdzie, np. Error. W pierwszej kolejnoci dobrze jest zdefinio wa trzy znaki (litery), a wic E, r i o opierajc si na matrycy wywietlacza 7segmentowego. Korzystajc z zasady tworzenia zna kw opisanej w lekcji 5, definiujemy : _Eequ 01111001b ;litera E (segmenty B, C i kropka zgaszone) 79h _r equ 01010000b ;litera podobna do maego r 50h _oequ 01011100b ;litera podobna do maego 5Ch Przy definicji kadej z liter dodano znak podkrelenia, ze wzgldu na komputerowcw, ktrzy korzystajc z asemblera nie powinni tworzy (z zasady) jednoznakowych przypisa EQU. Ja w swoich rozwaaniach przyjem zasad, e przy definiowaniu znaku do wywietlenia poprzed zam jego symbol wanie znakiem okrelenia, a np. definiujc kod wci nitego klawisza dodaj na pocztku liter k, ot tak dla porzdku i wikszej czytelnoci caego programu. No dobrze ale wracajmy do naszego przykadu, ot teraz w dowol nej czci programu, najlepiej na jego kocu (przed deklaracj END) na ley zdefiniowa cay napis, a wic: napis_blad DB _E, _r, _r, _o, _r, 0

34

ELEKTRONIKA DLA WSZYSTKICH 3/98

Te to potrafisz
_U _Y _M _n _T _S _r equ equ equ equ equ equ equ 00111110b 01101110b 00110111b 01010100b 00110001b _5 01010000b ;litera U (3Eh) ;litera Y (6Eh) ;znak podobny do duej litery M (37h) ;znak podobny do maej litery n (54h) ;znak podobny do duej litery T (31h) ;litera S jest taka sama jak cyfra 5 ;znak podobny do maego r (50h) przykad: powiedzmy e czekamy na klawisz OK lub na 4, poni szy przykad pozwoli nam rozstrzygn, ktry z nich zosta wcinity. Zdefiniujemy na pocztku kod klawisza OK jako: klaw_OK czekaj: LCALL CJNE ....... OK ....... czy4: CJNE A, # 4, czekaj ;czy klawisz 4, nie to czekaj dalej ....... ....... tu dalsze instrukcje programu waciwe dla klawisza 4 Zauwamy, e w linii sprawdzajcej klawisz 4 uylimy znakw apo strofw, dlaczego?, ano dlatego e argumentem bezporednim w przy padku asemblera PASM51.EXE nie musi by bezporednio liczba, ale take moe by odpowiadajcy jej kod znaku zgodny z ASCII, jak poda no w tabeli powyej. Dziki temu program staje si bardziej czytelny, a komputerowcy nie musza sobie wyrywa wosw z gowy, zadajc sakramentalne pytanie podczas analizy dawno zapomnianego progra mu: ... co ja w tym momencie chciaem osign???....... Lini t mona oczywicie zapisa jako czy4: CJNE A, #34h, czekaj ;.... itd. EQU 13

CONIN A, #klaw_OK, czy4

;oczekiwanie na klawisz ;czy klawisz = OK, nie to skocz jest_OK: tu dalsze instrukcje programu waciwe dla klawisza

W nawiasach podano, uyteczne przy rcznym wklepywaniu progra mw, szesnastkowe postacie kodw przedstawionych znakw. Oczy wicie podane przykady nie wyczerpuj moliwoci definiowania was nych znakw i symboli, przecie segmentw w wywietlaczu jest 7, czyli teoretycznych kombinacji a 128, do tego dochodzi jeszcze krop ka, ale to pozostawiam ju waszej wyobrani oraz naszym dalszym wsplnym rozwaaniom. DELAY (0295h) wykonanie tego podprogramu zajmuje procesorowi okrelony czas, ktrego wielkoci mona okreli podajc warto rejestru A (akumu latora przed wywoaniem procedur, zgodnie z zasad: czas wykonania = warto z Acc * 1,95 ms (milisekundy) okoo. Skoro wic do akumulatora mona wpisa dowoln liczb z zakresu 1...255 (nie zalecam w tym przypadku zera) to w efekcie dziaanie pod programu DELAY mona porwna z wywoaniem celowego opnie nia o czasie trwania w zakresie okoo 2...500 ms, czyli od uamkw do prawie do 1/2 sekundy. adres wywoania: 0295h we: Acc opnienie * 1,95 ms wy: j/w traci: Acc przykad: MOV A, #255 LCALL DELAY ;okoo 1/2 sekundy MOV A, #255 LCALL DELAY ; i znw okoo 1/2 sekundy .......... co w programie wywoa opnienie okoo 1 sekundy. Uwaga, procedury nie naley wykorzystywa w celu generowania opnie czasowych, np. przy odliczaniu sekund, minut czy godzin, po niewa jej konstrukcja powoduje bd odmierzania. Do tego celu nada je si inny rejestr w pamici wewntrznej RAM procesora, ale o tym za chwil. CONIN (02C5h) zeruje bufor klawiatury (komrk w wewn. RAM o adresie 76h) a na stpnie oczekuje a do skutku na wcinicie dowolnego klawisza, po czym umieszcza w akumulatorze (Acc) kod tego klawisza zgodnie z tabel ASCII, czyli przy wciniciu w Acc klawisza: bdzie kod: 0 30h 1 31h 2 32h 3 33h 4 34h 5 35h 6 36h 7 37h 8 38h 9 39h A 41h B 42h C 43h D 44h E 45h F 46h Wyjtkiem jest klawisz OK, w wyniku nacinicia ktrego w akumu latorze znajdzie si kod 0Dh (13 dziesitnie). Kto w tej chwili zapyta a co si stanie w przypadku wcinicia kla wisza M, a no nic poniewa ten klawisz zarezerwowany jest do na tychmiastowego przerwania programu uytkownika i powrotu do moni tora komputerka edukacyjnego. adres wywoania: 02C5h we: czekanie na klawisz a do skutku wy: w Acc kod nacinitego klawisza zgodnie z tabel powyej

a efekt dziaania bdzie ten sam. Naley przy tym wspomnie e ta for ma jest bardziej czytelna dla rczniakw, maj oni bowiem od razu kod argumentu do wklepania w postaci szesnastkowej. GETDIGIT (0379h) podprogram suy do wprowadzenia z klawiatury cyfry kodu szesnast kowego (0..9,A..F) z jednoczesnym wypisaniem jej na wywietlaczu na pozycji podanej w rejestrze B przed wywoaniem procedury. Praktycz nym zastosowaniem jest wprowadzanie przez uytkownika programu danych liczbowych w postaci szesnastkowej (lub jak si to okae za chwil take dziesitnej) w sytuacji gdy zachodzi taka potrzeba, np. przy podawaniu adresu obszaru w zewn. pamici RAM procesora. adres wywoania: 0379h we: B numer pozycji na wywietlaczu (1...8) wy: wprowadzona cyfra (0...15) 0...9, A...F traci: rejestr R0 przykad: niech w naszym programie zajdzie potrzeba wprowadzenia liczby graczy, dziki naszemu podprogramowi mona to osign ele gancko za pomoc kilku poniszych linii: ....... poprzednie dziaania programu ....... LCALL CLS ;wyczyszczenie displeja MOV DPTR, #napis_play ;adres napisu PLAY MOV B, #1 ;od 1szej pozycji LCALL TEXT ;wypisz psudotekst MOV B, #6 ;na 6tej pozycji LCALL GETDIGIT ;pobierz liczb graczy ANL A, #7 ;i ogranicz ja w zakresie 0...7 JZkoniec ;jeeli liczba graczy = 0 to zakocz program MOV B, A ;jeeli nie to umie j w rejestrze B ......... ;....i baw si dalej koniec: ......... tu zakoczenie programu Nie zapomnijmy zdefiniowa psudonapisu PLAY, ktry daje zna e program czeka na podanie iloci graczy, a wic: napis_play DB _P, _L, _A, _Y, _minus, 0 W efekcie dziaania instrukcji z przykadu, na pocztku profilaktycznie wyczyszczony zostanie wywietlacz, potem procesor wypisze komunikat PLAY, informujc uytkownika o potrzebie wprowadzenia liczby gra czy, nastpnie po wciniciu klawisza, program ograniczy liczb zawodni kw do 7miu i sprawdzi ilu graczy wybrano. Jeeli ich liczba jest = 0 to program zakoczy si, jeeli nie to rozpocznie si jego dalsza cz. GETACC (03A7h) podprogram pochodny od GETDIGIT. W wyniku jego wywoania komputerek oczekuje od uytkownika wprowadzenia 8bitowej liczby szesnastkowej (2 cyfry) a nastpnie wprowadza j do akumulatora.

ELEKTRONIKA DLA WSZYSTKICH 3/98

35

Te to potrafisz
Dodatkowo mona okreli pozycj na wywietlaczu od ktrej ma by wypisana wprowadzona liczba. adres wywoania: 03A7h we: B pozycja displeja, od ktrej ma by wywietlana wprowadza na liczba (1...7) wy: Acc wprowadzona liczba (np. 64h po wciniciu klawiszy 6 i 4) traci: rejestr R0 przykad: program prosi o podanie 2 liczb 8bitowych, nastpnie je mnoy, a wynik wypisuje na wywietlaczu LCALL CLS ;profilaktycznie czycimy pole odczytowe MOV DPTR, #napis1 ;zaproszenie do wpisania 1 skadnika MOV B, #1 ;od pozycji 1 displeja LCALL TEXT ;wypisz komunikat MOV B, #4 ;od 4tej pozycji displeja LCALL GETACC ;pobierz 1szy skadnik PUSH Acc ;i zapamitaj go na stosie MOV DPTR, #napis2 ;zaproszenie do wpisania 2 skadnika MOV B, #1 ;od pozycji 1 displeja LCALL TEXT ;wypisz komunikat MOV B, #4 ;od 4tej pozycji displeja LCALL GETACC ;pobranie 2ego skadnika LCALL CLS ;przygotowanie do wypisania wyniku POP B ;odtwarzamy 1szy skadnik w rej. B MUL AB ;pomnoenie skadnikw (drugi jest w Acc) MOV DPH, B ;przepisujemy wynik mnoenia B.A MOV DPL, A ;do rejestru DPTR celem wypisania wyniku MOV B, #5 ;od 5tej pozycji displeja LCALL DPTR4HEX ;wypisanie wyniku mnoenia ...... Nie zapomnijmy zdefiniowa komunikatw zapraszajcych do wpro wadzenia pierwszego, a nastpnie drugiego wskanika, a wic np.: napis1 DB _L, _1, _minus, 0 ;napis: L1 (skadnik nr 1) napis2 DB _L, _2, _minus, 0 ;napis: L2 (skadnik nr 2) GETDPTR (03B9h) podprogram sucy do wprowadzenia przez uytkownika 16bitowej liczby (4 cyfry) z jednoczesnym wywietleniem jej na displeju od po zycji okrelonej w rejestrze B. Wynik wprowadzania zostaje umiesz czony w rejestrze DPTR. Procedura pochodna od GETACC. adres wywoania: 03B9h we: B pozycja displeja, od ktrej ma by wywietlana wprowadza na liczba (1...5) wy: DPTR wprowadzona liczba (np. AC81h po wciniciu klawiszy A, C, 8 i 1 ) traci: rejestr R0 przykad: sprbujmy zapisa dziaanie programu podobne do funkcji FILL dostpnej z poziomu monitora komputerka edukacyjnego, oto instrukcje, w wyniku ktrych program pyta o koniec i pocztek obszaru zewn. pamici RAM do wypenienia oraz o sta wypenie nia, a nastpnie zapenia wszystkie komrki podan wartoci. Wer sja surowa bez bajeranckich komunikatw. nasz_fill: LCALL CLS ;to ju znamy MOV B, #1 ;od pozycji 1 displeja LCALL GETDPTR ;pobierz najpierw koniec obszaru MOV R7, DPH ;i zapamitaj go w rejestrach R7.R6 MOV R6, DPL LCALL CLS ;to ju znamy MOV B, #1 ;take od pozycji 1 LCALL GETDPTR ;pobierz pocztek obszaru MOV B, #7 LCALL GETACC ;i pobierz sta do wypenienia MOV B, A wypelniaj: MOV A, B MOVX @DPTR, A INC DPTR MOV A, DPL CJNE A, DPL, wypelniaj MOV A, DPH CJNE A, DPH, wypelniaj koniec_wypelniania: ......... ......... Przykad byby krtszy, gdyby istniaa instrukcja 8051 typu: CJNE Rn, adres, ofset zastanw si dlaczego i sprbuj uzupeni program o niezbdne komu nikaty. W przykadzie dla uproszczenia algorytmu najpierw wprowadza si ad res kocowy obszaru do wypenienia, a nastpnie pocztkowy, to te te mat na krtkie zastanowienie si. O ile linii program byby duszy, gdyby byo odwrotnie najpierw pocztek a potem koniec obszaru pamici? I to ju wszystkie podprogramy standardowe dotyczce podstawo wych urzdze wejciawyjcia naszego komputerka edukacyjnego, czyli klawiatury i wywietlacza. Pozostao nam jeszcze jedno specjalne i jednoczenie do uyteczne urzdzenie wbudowane standardowo w procedur 8051 a pozwalajce komunikowa si naszemu komputer kowi ze wiatem zewntrznym chodzi mianowicie o potocznie nazywa ny port szeregowy. Zauwacie e na pytce waszego zestawu znajduje si kompletny ukad do takiej transmisji (U13 wraz z C7...C10) oraz do poczenia kom puterka wprost do portu szeregowego komputerka PC lub kadego in nego wyposaonego w taki ukad. Moe to by take inny komputerek AVT2250 to podpowied dla rczniakw. W programie monitora znajduj si 3 dodatkowe podprogramy uat wiajce komunikowanie si naszego komputerka z innym urzdzeniem port transmisji szeregowej, omwimy je za chwil. Chce w tym miejscu wyjani e podane w tej czci artykuu informa cje na temat portu szeregowego nie wyczerpujc tego tematu, maj jedy nie za zadanie wyjani dziaanie opisanych podprogramw. Dlatego bez wchodzenia w szczegy (na ktre przyjdzie pora w jednym z kolejnych od cinkw naszego cyklu) poka praktyczny sposb zmuszenia naszego komputerka do odbierania i wysyania danych poprzez port szeregowy. Czy to nie wspaniae mc doczy nasze malutkie urzdzonko do zwykego PCta, Amigi lub innego urzdzenia zawierajcego ukad asynchro nicznej transmisji szeregowej, tak drodzy Czytelnicy, za chwil si to stanie. Dla porzdku powiem e przed rozpoczciem zabawy z portem sze regowym i wywoaniem zwizanych z nim podprogramw monitora, powiem e bdziemy korzysta z typu transmisji ktry mona okreli nastpujcymi cechami: asynchroniczna: oznacza to e urzdzenie nadawcze jak i odbiorcze musza mie ustalon t sam szybko transmisji, czyli e w takim samym tempie musza odbiera i nadawa kolejne bity danych. Nie stety aby tak byo najprociej jest ustawi rcznie szybko transmis ji w sposb rczny. W przypadku naszego komputerka najatwiej jest tego dokona za pomoc funkcji monitora BAUD klawisz B. W przyrodzie przyjto pewne standardowe szybkoci transmisji szeregowej asynchronicznej, a mianowicie: 1200, 2400, 4800, 9600, 19200, 38400, 57600 bodw. Liczby te oznaczaj ilo przesyanych bitw w cigu jednej sekundy, w argo nie komputerowcw nazywa si je jednostk bod (ang. baud). Profesjonalici na prezentacjach mwi o bitach na sekund (B/sek) lub o kilobitach / sekund. Zakres standardowych prdkoci jest szerszy, tak w d jak i gr, lecz my w naszej praktyce bdziemy uywa podanych wyej, co w zupenoci wystarczy kademu zjadaczowi chle..., chyba zjadaczowi kompute..., sami zreszt dokoczcie. w typowej transmisji zakadamy, e dana jest liczb 8bitow (mona zatem przesya znaki z zakresu 0...255) dodatkowo wystpuje tzw. bit startu (logiczne 0) oraz bity stopu, u nas bdzie to jeden (logiczne 1). Tak jak wspomniaem wczeniej o szczegach transmisji dowiemy si pniej, tote prosz si nie denerwowa chwilowym brakiem wiedzy. W praktyce wszystko co trzeba zrobi aby procesor 8051 zacz od biera i wysya znaki w tym trybie, naley wpisa odpowiednie warto ci do kilku rejestrw specjalnych (SFR). Na szczcie program monito ra komputerka edukacyjnego jest tak skonstruowany, e po wczeniu zasilania automatycznie ustawia wszystkie niezbdne rejestry tak jak trzeba, tote pozostaje tylko skorzysta z dobrodziejstw transmisji sze regowej i zabra si do roboty. Do tego potrzebny bdzie kabel, ktrego konstrukcj sposb wyko nania przedstawiem przy okazji prezentacji konstrukcji komputerka w numerach EdW z poprzedniego roku. Tak a propos, to musze przyzna e cho wspomniany kabelek ska da si tylko z dwch identycznych wtyczek DB9 oraz 3 kabelkw, to z prawidowym jego wykonaniem macie czsto sporo problemw. Tak na prawd to nie wiem dlaczego, tote prosz o wiadomoci, piszcie drodzy czytelnicy, piszcie... . Zanim przejd do omwienia wspomnianych podprogramw, musz wyjani e zmian szybkoci transmisji asynchronicznej naszego kom puterka oprcz metody rcznej, mona osign take poprzez modyfi kacj rejestru specjalnego TH1 (SFR, adres: 8Dh). W zalenoci od danej prdkoci transmisji naley wpisa do niego odpowiedni liczb, zgodnie z wykazem poniej: prdko warto transmisji TH1 (8Dh) 1200 D0h

ELEKTRONIKA DLA WSZYSTKICH 3/98

37

Te to potrafisz
2400 4800 9600 19200 38400 57600 E8h F4h FAh FDh FEh FFh napis_OK DB _S, _U, _C, _C, 0 ;SUCC skrt od succes full (ang. pomylnie) napis_ERR DB _E, _r, _r, _o, _r, 0 ;to ju znamy patrz opis proc. TEXT W przykadzie procesor odbiera 10 znakw (bajtw) z portu szerego wego ustawionego na szybko 9600 bit/sek, i umieszcza je w wewn. pamici RAM procesora w obszarze o adresach 50h....59h (patrz na wskanik R0). W przypadku prawidowego odebrania wszystkich 10ciu bajtw na wywietlaczu wypisywany jest komunikat o pomylnym prze biegu transmisji. Jeeli za wystpi bd, na wywietlaczu pojawia si komunikat o bdzie (Error) oraz dodatkowo zostaje wypisana liczba prawidowo odebranych znakw. W kilku liniach zrealizowano uprosz czon konwersj liczby szesnastkowej na dziesitn, korzystajc z faktu, e w przypadku wystpienia bdu nasz wskanik R0 bdzie zawiera liczb z przedziau 50...59h. Tote poprzez logiczne wymnoenie (instruk cja ANL) tej wartoci przez liczb 0Fh pozbywamy si niepotrzebne go starszego pbajtu 5, i zostaje nam tylko liczba z przedziau 0...9, czyli ilo prawidowo odebranych znakw, ktr nastpnie wypisujemy na displeju tu za napisem Error, prawda e eleganckie. OUTRS (02B9h) podprogram natychmiast po wywoaniu ustawia port szeregowy w tryb nadawania (blokuje odbiornika), wysya do portu bajt znajduj cy si w akumulatorze (Acc), a na zakoczenie ponownie odblokowu je odbiornik ustawiajc w ten sposb port w tryb odbioru danych. adres wywoania: 02B9h we: A znak do nadania wy: bez parametrw zmienia: (informacje zaawansowane) zeruje znacznik TI oraz po za koczeniu ustawia znacznik REN (odblokowuje odbiornik) przykad: poniej zrealizujemy tzw. efekt echa, dziki ktremu moliwe jest atwe sprawdzanie obu linii (odbiorczej i nadawczej) por tu szeregowego. Wszystkie odebrane znaki bd natychmiast wysy ane przez nasz komputerek z powrotem do urzdzenia zewntrzne go, ktre powinno by ustawione w odpowiedni tryb pracy. Dodatko wo odebranie bajtu o kodzie 27 (komputerowcy w tym miejscu roz poznaj klawisz Esc) koczy program. nastepny: LCALL INRS ;czekanie na dan z portu JC blad ;jeeli przeterminowanie to skocz LCALL OUTRS ;jeli nie to odeslij znak CJNE A, #27, nastepny ;czy bajt = 27, nie to odbierz nastpny SJMP stop ;tak to skok na koniec blad: MOV DPTR, #napis_ERR ;komunikat o bdzie MOV B, #1 ;na pozycji 1 displeja LCALL TEXT ;wypisz stop: SJMP stop ;i zakocz program napis_ERR DB _E, _r, _r, _o, _r, 0

W praktyce modyfikacji rejestru mona dokona za pomoc instrukcji: MOV TH1, #baud gdzie za wyraz baud podstawiamy wybran z tabeli powyej warto, np. MOV TH1, #FDh ; ustawienie prdkoci transmisji na 19200 bit/sek. Z obsug cza szeregowego za pomoc wspomnianych procedur monitora, do omwienia ktrych za chwil przejdziemy, wie si do datkowo rejestr przeterminowania transmisji, umieszczony w wewn. RAM procesora pod adresem 74h nazywany przeze mnie overtime (z ang. przeterminowanie). Uwaga, rejestr ten nie jest standardowym rejestrem specjalnym SFR procesora 8051, zosta on zaimplementowany przeze mnie w trakcie two rzenia programu monitora dla komputerka AVT2250, tote jeeli, kto np. postanowi sam zaprogramowa sterowanie transmisj poprzez port sze regowy, powinien si z tym liczy. Wnikliwi czytelnicy z pewnoci a tym ju wiedz, ano choby z informacji o adresie rejestru overtime rwnym 74h, a wic znajdujcym si poza obszarem rejestrw specjalnych proce sora SFR, mniej wtajemniczonym wszake o tym przypominam. W przypadku uycia procesor standardowych monitora czas przeter minowania okrelono na 60 sekund, co oznacza, e jeeli w cigu 1 mi nuty od wywoania podprogramu odebrania danej (bajtu) z portu szere gowego, dana ta nie zostania odebrana pomylnie, to procedura zako czy si z ustawionym odpowiednim wskanikiem bdu. Dziki temu uytkownik moe stwierdzi fakt, e np. zewntrzne urzdzenie jest nie aktywne (np. wyczone) nie moe przesya danych, na skutek rnych szybkoci transmisji odbiornika i nadajnika odbir danej jest bdny. Przejdmy zatem do omwienia procedur obsugi cza szeregowego. INRS (02A5h) podprogram oczekuje na dan (bajt) z portu szeregowego, a po ode braniu umieszcza j w akumulatorze (Acc). W przypadku gdy w cigu minuty nie nadejdzie aden znak, procedura koczy si automatycz nie i dodatkowo zostaje ustawiony znacznik C, co wiadczy o bdzie. adres wywoania: 02A5h we: bez parametrw wy: jeli C=0 to odebrany znak znajduje si w Acc, w przeciwnym przypadku (C=1) wystpi bd przeterminowanie zmienia: znacznik C (oraz dodatkowo informacja na przyszo: zeruje znacznik RI oraz usta wia znacznik REN, znaczenie tych dwch ostatnich poznamy przy okazji szczegowego omawiania portu transmisji szeregowej procesora 8051). przykad: zaprogramujmy procesor tak aby odebra 10 bajtw poprzez cze szeregowe, a nastpnie zakoczy program stwierdzajc czy transmisja si powioda, czy te nie. b9600 EQU 0FAh ;deklaracja liczby z tabeli szybkoci ;ustaw prdko na 9600 bodw ;10 znakw do odebrania ;bufor na 10 znakw od adresu 50h

MOV TH1, #b9600 MOV R7, #10 MOV R0, #50h nastpny: LCALL INRS JC blad MOV @R0, A INC R0 DJNZ R7, nastepny

pisz:

;pobierz bajt z portu ;jeeli wystpi bd to skocz do etykiety ;zapamitaj dan w pamici ;zwiksz adres wskanika bufora ;jeli nie to nastpny bajt do odebrania okej: MOV DPTR, napis_OK ;komunikat o poprawnym odbiorze MOV B, #1 ;od pierwszej pozycji LCALL TEXT ;wypisz na displeju SJMP stop MOV A, R0 ANL A, #0Fh ;stop programu

stop: blad:

;pobierz warto wskanika bufora ;zamie warto wskanika R0 na liczb ;odebranych prawidowo bajtw (0...9) MOV B, #7 ;na pozycji 78 LCALL A2HEX ;poka liczb odebranych znakw MOV DPTR, #napis_ERR ;komunikat o bdzie SJMP pisz ;skok do etykiety pisz = wypisanie Naley jeszcze zdefiniowa komunikaty o przebiegu transmisji, np.:

INACCRS (02F2h) podprogram oczekuje na 2 znaki ASCII z portu szeregowego a nastpnie zamienia je na bajt i umieszcza wynik w akumulatorze. Odbierane znaki musz reprezentowa cyfry kodu szesnastkowego, czyli 0 ... 9, A ... F. Ko dy tych znakw czyli ich reprezentacje liczbowe podaem wczeniej w ar tykule przy okazji omawiania procedury CONIN. Obowizuje zasada z prze terminowaniem, tak jak w przypadku procedury INRS. Pierwszy odebrany kod jest traktowany jako starszy pbajt liczby, drugi 0 jako modszy. adres wywoania: 02F2h we: bez parametrw wy: C=0 to w Acc znajduje si liczba (np. 8Eh po odbiorze liczb: 38h (znak 8 ) i 45h (znak E )), w przeciwnym przypadku (C=1) transmis ja si nie powioda. zmienia: uwagi jak w przypadku procedury INRS. przykad: poniewa uycie tej procedury jest trywialne, poka w ja ki sposb wykona podprogram odwrotny, czyli taki ktry wysya licz b znajdujca si w akumulatorze poprzez port szeregowy jako 2 zna ki ASCII, oto instrukcje: OUTACCRS: ;tak nazwiemy nasz przykad MOV DPTR, #tabela ;pobranie adresu wskanika tabeli ;kodw ASCII PUSH Acc ;zapamitanie liczby do wysania SWAP A ;zamiana pbajtw ANL A, #0Fh ;i obliczenie ofsetu w tabeli MOVC A, @A+DPTR ;pobranie znaku z tabeli LCALL OUTRS ;i wysanie starszy pbajt POP Acc ;odtworzenie akumulatora ANL A, #0Fh ;obliczenie ofsetu w tabeli MOVC A, @A+DPTR ;pobranie znaku z tabeli

38

ELEKTRONIKA DLA WSZYSTKICH 3/98

Te to potrafisz
LCALL ....... tabela DB OUTRS ;o wysanie modszego pbajtu ;dalsze instrukcje programu lub RET MOV DL2, #0 MOV DL3, #0 MOV DL4, #0 MOV DL5, #0 MOV DL6, #0 MOV DL7, #0 MOV DL8, #0 spowoduj to samo co podprogram CLS wyczyszczenie wywie tlacza. c) wykonanie instrukcji MOV DL1, #_H MOV DL2, #_E MOV DL3, #_L MOV DL4, #_L MOV DL5, $_0 spowoduje pojawienie si znajomego napisu HELLO na wywietlaczu. W przypadku rejestrw DL1...DL8 ich przypadkowa modyfikacja nie spowoduje w adnym przypadku zawieszenia systemu, jedynym efektem ubocznym moe by wywietlanie przypadkowych znakw i symboli. CNT256 rejestr licznika wywietlacza (adres: 77h) Rejestr ten jest automatycznie inkrementowany 256 razy na sekund, czy li co 1 sekund nastpuje jego wyzerowanie. Warto wiedzie e trzy najmod sze bity tego rejestru wykorzystywane s do okrelenia aktualnie aktywnej (w trybie multipleksowania) pozycji wywietlacza (1 z 8miu). Dlatego rejest ru tego nie naley pod adnym pozorem zapisywa instrukcjami typu: MOV CNT256, ....... moe to bowiem zakci kolejno wywietlania informacji na disple ju, lub spowodowa migotanie wywietlaczy. Rejestr ten mona oczywicie odczytywa, w pewnych zastosowa niach moe on posuy jako generator 8bitowych liczb pseudoloso wych, kiedy to np. liczba taka generowana jest po naciniciu klawisza przez uytkownika. Ze wzgldu na do czste zmiany zawartoci tego rejestru (256 Hz) trudno jest przewidzie potencjalnemu operatorowi, kiedy powinien wcisn klawisz aby uzyska konkretn liczb. KLAWISZ rejestr przechowujcy kod wcinitego klawisza (adres: 76h) W tej komrce pamici znajduje si kod ostatnio nacinitego klawi sza klawiatury komputerka. Istotne jest to e po zwolnieniu klawisza re jestr ten nie jest automatycznie zerowany. Mona to zrobi samodziel nie instrukcj: MOV KLAWISZ, #0 po odczytaniu klawisza instrukcj : MOV A, KLAWISZ. Korzystajc z podprogramu CONIN nie jest to konieczne, bowiem wyzerowanie nastpuje kadorazowo po wywoaniu tej procedury. CNTDEL rejestr do generowania opnie przez procedur DELAY (adres: 75h) Rejestr ten jest uywany przez procedur DELAY do generowania opnie programowych, zgodnie z opisem przedstawionym wczeniej przy okazji omawiania tego podprogramu. Jeeli do tego rejestru wpi szemy jak liczb to bdzie on automatycznie (z czstotliwoci 256Hz) dekrementowany a do wartoci 0. Po osigniciu zera rejestr nie jest dalej modyfikowany. Rejestr ten moe by modyfikowany do wolnie, jednak naley mie wiadomo e jest on automatycznie zmniejszany z podan wczeniej czstotliwoci. OVERTIME rejestr przeterminowania (adres: 74h) Rejestr wykorzystywany do okrelania faktu przeterminowania jakie go procesu np. odbioru znaku z cza szeregowego. Moe by wyko rzystywany do innych celw. Naley jednak mie wiadomo e w przypadku wpisania jakiej liczby (rnej od 0) rejestr ten jest auto matycznie dekrementowany dokadnie co jedn sekund. Aby jednak wykorzysta rejestr do odmierzania duszego odcinka czasu (z zakresu 1...255 sekund) naley przedtem zsynchronizowa moment rozpocz cia odliczania (wpisanie liczby do rejestru OVERTIME) z momentem zmniejszenia o 1, tak aby pierwsza dekrementacja nastpia dokadnie po 1 sekundzie od momentu wpisu. Najatwiej tego dokona testujc zawarto rejestru CNT256. Jeeli w momencie odczytu wynosi ona 00h, to moemy by pewni e pierwsze zmniejszenie nastpi dokadnie po 1 sekundzie. A oto przykad praktyczny odliczenie podanej liczby sekund (liczb t naley podstawi za nazw: liczba_sekund). czekaj: MOV A, CNT256 ;testowanie rejestru cnt256 JNZ czekaj ;jeli <>0 to testuj dalej ;jeli cnt256=0 to rozpocznij odliczanie MOV OVERTIME, #liczba_sekund; zaadowanie liczby sekund czekaj2: MOV A, OVERTIME ;testowanie rejestru overtime JNZ czekaj2 ;jeeli nie rwny 0 to testuj dalej

0123456789ABCDEF

W przykadzie do konwersji liczby 8bitowej (np. 49h) posuono si dodatkow tabel zdefiniowan jako cig znakw ASCII odpowiadajcy kolejnym cyfrom kodu szesnastkowego, a wic: 0...9, A...F. Zauwamy e tabela po przetumaczeniu na kod wynikowy bdzie miaa posta: tabela DB DB 30h,31h,32h,33h,34h,35h,36h,37h,38h,39h 41h, 42h,43h,44h,45h,46h

Tak wic np. w przypadku gdy wywoamy wspomniany przykad z liczb w akumulatorze np. 4Ch, to najpierw program pobierze z tabeli bajt z przesuniciem +4 czyli 34h (co odpowiada znakowi 4 ), i wyle go poprzez port szeregowy, a nastpnie to samo zrobi z modszym p bajtem C. W efekcie zewntrzne urzdzenie odbiorcze odbierze zna ki: 4 i C. Proponuj przeanalizowa dokadnie jeszcze raz cay przykad. I to ju wszystkie procedury monitora z ktrych mona korzysta i ktre pozwol na skrcenie czasu pisania programu przez Ciebie, dro gi Czytelniku. W naszej szkole spotkamy si z wieloma innymi przyka dami, ktre przy okazji bardziej wyrafinowanych programw bdziemy wsplnie omawia, a nastpnie stosowa.

Dodatkowe rejestry
Przy okazji omawiania zasobw systemowego biosa naszego kom puterka nie sposb nie wspomnie o dodatkowych rejestrach (komr kach wewn. RAM) ktre wykorzystywane s przez monitor do jego pra cy. Musisz wszake, drogi Czytelniku, zda sobie spraw, e nawet wte dy gdy wydaje Ci si e komputerek nie robi nic, to jednak tak nie jest, w kadej sekundzie wykonywanych jest kilka tysicy operacji, ktrych zadaniem jest chociaby cige kontrolowanie stanu wszystkich klawiszy oraz przemiatanie wszystkich pozycji wywietlacza. Do tego wszystkie go potrzebne s niektre komrki pamici w obszarze wewntrznej RAM procesora. Autor piszc program monitora stara si ograniczy do minimum ilo tych komrek, z ktrych korzysta monitor, tak aby uyt kownik komputerka mia do dyspozycji jak najwikszy obszar z 128 baj tw wewntrznej RAM procesora 8051. To tak jak z pamici operacyj n prawdziwych komputerw PC (informacja dla komputerowcw), gdy jej brakuje (bo jest zajmowana przez mniej lub bardziej rozbudowane programu rezydentne TSR), to inne uruchamiane programy maj mniej pamici do dyspozycji, a czsto w ogle nie mog dziaa. W przypadku naszego komputerka ze 128 bajtw wewn. RAM pro cesora monitor zajmuje 16 pooonych najwyej tzn. adresy 70h...7Fh. Tote nie naley niewiadomie w tym obszarze umieszcza swoich danych, modyfikujc tym samym istotne dla dziaania caego systemu dane. Przypadkowa i nieprawidowa modyfikacja jednej z tych komrek moe nawet spowodowa zawieszenie si komputerka i ko nieczno jego zresetowania przyciskiem reset. Dlatego warto powici troch czasu i zapozna si z rejestrami wy korzystywanymi przez monitor. Powiniene tez wiedzie drogi Czytelni ku e znajomo funkcji tych rejestrw uatwi nam wsplna analiz przykadw publikowanych w naszym cyklu oraz uatwi realizowanie wielu poytecznych funkcji podczas pisania wasnych programw. DL1...DL8 rejestry bufora wywietlanych znakw DL1 equ 78h ;komorka znaku do wyswietlenia na DL1 DL2 equ 79h ;j/w lecz na DL2 DL3 equ 7Ah ;j/w lecz na DL3 DL4 equ 7Bh ;j/w lecz na DL4 DL5 equ 7Ch ;j/w lecz na DL5 DL6 equ 7Dh ;j/w lecz na DL6 DL7 equ 7Eh ;j/w lecz na DL7 DL8 equ 7Fh ;j/w lecz na DL8 Powyej podano definicje adresw komrek (rejestrw) w wewn. RAM procesora, ktre uywane s do wywietlania znakw na poszcze glnych pozycjach wywietlacza. I tak jeeli wpiszemy jak liczb (8bit) do rejestru DL4, to na czwartym wywietlaczu zapalone zostan seg menty odpowiadajce ustawionym pozycjom bitw w tej liczbie, zgod nie ze schematem opisanym w poprzednim odcinku naszego cyklu. Modyfikujc bezporednio te rejestry moemy umieszcza rne na pisy lub pojedyncze znaki na wywietlaczu. Oto kilka przykadw: a) instrukcja MOV DL1, #255 spowoduje zapalenie wszystkich segmentw wywietlacz DL1 (tak e kropki) b) instrukcje MOV DL1, #0

ELEKTRONIKA DLA WSZYSTKICH 3/98

39

Te to potrafisz
....... ;tu dalsze instrukcje po odliczeniu sekund OVERCONST rejestr obsugi przeterminowania portu szeregowego (adres: 73h) Komrka przechowujca czas przeterminowania (w sekundach) przy odbiorze znaku z portu szeregowego. Warto domylna to liczba 60, czyli 60 sekund. Wpisujc inn warto z zakresu 1...255 mona ten czas modyfikowa. Warto z tej komrki jest automatycznie przepisy wana do rejestru OVERTIME po wywoaniu podprogramu INRS odbie rajcej znak z portu szeregowego Przykad: wykonujc instrukcj MOV OVERCONST, #10 zmieniamy czas przeterminowania przy odbiorze z portu szeregowego z 60 na 10 sekund. INTVEC rejestr tablicy wektorw przerwa (adres: 72h) Ze wzgldu na fakt e nie zajmowalimy si do tej pory szczego wym opisem ukadu przerwa procesora 8051 znaczenie tego rejestru okae si szczeglnie wane gdy zapoznasz si z t czci ukadu. Dla porzdku powiem tylko e komrka ta przechowuje warto bardziej znaczcego bajtu, 16bitowego adresu skoku do tablicy procedur obsu gi przerwa zdefiniowanej przez uytkownika w przestrzeni adresowej procesora zewntrznej pamici danych (ukad SRAM U4). Warto wpisywana tu powinna by z reguy rwna pocztkowemu segmentowi pamici U4, ustawianej przez zwor JP3 patrz schemat elektryczny systemu AVT2250. W chwili obecnej, bez znajomoci ukadu przerwa, szczegowe wy janianie znaczenia rejestru jest bezcelowe. Zgodnie z przedstawion wczeniej zasad, radz bez znajomoci i dziaania tej komrki pamici, nie modyfikowa jej niewiadomie. BLINKS rejestr atrybutw pozycji wywietlacza (adres: 71h) Znaczenie tego rejestru omwilimy przy okazji poprzedniej lek cji 5 szkoy mikroprocesorowej. Dla porzdku przypomn tylko e po szczeglne bity tego rejestru odpowiadaj za atrybut wywietlanego na displeju znaku. Ustawienie np. najstarszego bitu w tym sowie powodu je e zapisany do rejestru DL8 znak bdzie migota. Czstotliwo mi gania okrelona jest wewntrznie przez program monitora na 2Hz. Przy porzdkowanie poszczeglnych bitw pozycjom wywietlacza jest na stpujce. DL 12345678 bity: 76543210 Przykad zastosowania podaem podczas ostatniej lekcji 5 w poprzed nim odcinku szkoy mikroprocesorowej. A teraz ostatni rejestr wykorzystywany przez monitor. Dziki niemu moliwe jest ingerowanie w sposb dziaania procedury obsugujcej wywietlacz i klawiatur do tego stopnia, e mona j programowo od czy i wykorzysta do wasnych celw. Mowa o procedurze przerwa nia generowanej przy przepenieniu licznika T0. BSW rejestr specjalny monitora systemu AVT2250 (adres: 70h) Komrka przechowujca sowo specjalne monitora systemu AVT 2250, tzw. Bios Status Word. Kady z bitw tego rejestru ma szcze glne znaczenie, dlatego zapisujc t komrk naley robi to bardzo ostronie. A oto nazewnictwo i znaczenie poszczeglnych bitw. 7 int/ext T0 6 5 ext T0 4 3 1/4 Hz 2 1/2 Hz 1 1 Hz 0 2 Hz

bit 7: int/extT0 ustawienie bitu spowoduje skok pod adres xx0Bh, (gdzie xx to warto rejestru INTVEC adres 72h), po wykonaniu pro cedury obsugi wywietlacza i klawiatury pod tym adresem powinna znajdowa si dalsza cze tej procedury lub instrukcja RETI po wrotu z procedury obsugi przerwania bit 6: extT0 ustawienie powoduje zaniechanie wykonywania procedury obsugi wywietlacza i klawiatury zawartej w monitorze i skok pod ad res w pamici zewntrznej rwny xx00h, gdzie xx to warto ze zmien nej INTVEC (adres 72h). Bit ten ma wyszy priorytet od bitu int/extT0 bity 5 i 4: nie uywane bit 3: 1/4 Hz w przypadku gdy bit extT0 jest wyzerowany, bit ten zmienia swoj warto co 4 sekundy (0,25 Hz) bit 2: 1/2 Hz j/w lecz co 2 sekundy (0,5 Hz) bit 1: 1Hz j/w lecz co 1 sekund (1 Hz) bit 0: 2Hz j/w lecz co 0,5 sekundy (2 Hz) I tak np. z bitu BSW.0 korzysta funkcja migotania wywietlaczy, uak tywniana za pomoc rejestru BLINKS. Sposb korzystania szczeglnie z dwch najstarszych bitw rejestru BSW (int/extT0 oraz extT0) wyjaniony zostanie dokadnie przy okazji omawiania ukadu przerwa procesora 8051. Bity 3,2,1 i 0 powinny by tylko odczytywane, co pozwala na realizacj wielu ciekawych efektw zwizanych z dokadnym odmierzaniem rwnych interwaw czaso wych. Przykadowe algorytmy korzystajce z dobrodziejstw tych bitw podam przy okazji nastpnych spotka w szkole mikroprocesorowej. Sawomir Surowiski

Lekcja

6
dzie skada si z trzech bajtw, bo np. zamie niajc liczb 90ach na posta dziesitn otrzy mamy wynik 37036 dziesitnie, tote: liczba liczba HEX DEC 90 AC 03 70 36 Jak wida liczba przed zamian zajmuje 2 bajty, po zamianie a 3. Oczywicie przy kon wersji liczb poniej 10000 trzeci najstarszy bajt bdzie nieznaczcy, lecz nasza procedura po winna obsugiwa liczby z penego zakresu 16 bitw czyli 0...65535. Zasada konwersji w naszym przykadzie po lega na testowaniu kadego z 16tu bitw licz by, jeeli jest on ustawiony (=1) to do wyniku dodawana jest liczba bdca potg dwjki, ktrej stopie odpowiada numerowi testowa nego bitu, tzn. e dla bitu 0 bdzie to 2^0 czy li 1, dla bitu 1 bdzie 2^1 = 2,..... itd, a do bi tu 15, gdzie 2^15 = 32768. Jeeli za testowa ny bit jest rwny 0 to wynik pozostaje bez zmian. Dodatkowo podczas dodawania wyko rzystano korekcj dziesitn, dziki czemu, wynik ma posta dziesitn, a o to nam prze cie chodzio. Jeeli kto chce moe na kartce papieru przeprowadzi konwersj t metod, jest to do proste, naley tylko operowa na maych wartociach. A oto kilkanacie linii, dziki ktrym przepro wadzana jest konwersja. Na pocztku definicje dodatkowych rejest rw, rda i wyniku dziaania procedury. Oznaczmy w wewn. pamici RAM procesora dwie grupy rejestrw, rda jako par rejest rw Data: hiData i loData. Do nich wpisywana bdzie liczba do przeksztacenia. Okrelimy te miejsce wyniku, czyli trzy rejestry wyn3, wyn2, wyn1 gdzie po zakoczeniu dzia ania procedury bdzie znajdowa si wynik.

W dzisiejszej lekcji proponuj przeanalizo wanie ciekawej procedury podprogramu do datkowych ktry bdzie nieraz wykorzysty wany przez nas w kolejnych tworzonych wsplnie programach. Komputerowcy mog te przykady przepisa umieszczajc go w do wolnie nazwanym przez siebie zbiorze typu *.INC. Zadanie 1 Napisa podprogram zamieniajcy 16bito w liczb na jej posta dziesitn. Np. niech w DPTR bdzie liczba 8A12h, w wyniku wywoania tej procedury powinni my otrzyma wynik w postaci dziesitnej, czy li: 35346. Naley przy tym zauway, e o ile ilo cyfr liczby szesnastkowej to cztery, o ty le przy zamianie liczb powyej 270Fh wynik, czyli posta dziesitna bdzie miaa a 5 cyfr. Wynika z tego e wynik operacji zamiany b

40

ELEKTRONIKA DLA WSZYSTKICH 3/98

Te to potrafisz
loData hiData wyn1 wyn2 wyn3 equ equ equ equ equ 21h 20h 24h 23h 22h jz ;wej: hiData,loData = XXXX h ;wyj: wyn3,wyn2, ;wyn1 = (0)XXXXX d add da mov jnc mov add mov poC2: movc jz add mov fini: mov rl mov djnz ret A, wyn2 A wyn2, A poC2 A, wyn3 A, #1 wyn3, A mov A,R3 A, @A+DPTR fini A, wyn3 wyn3, A A, R0 A R0, A R1, again fini

;Procedura zamiany 16bitowej liczby z rejestrw hiData.loData ;na posta dziesitn. ;we: hiData starszy bajt liczby do przeksztacenia loData modszy bajt tej liczby ;wy: wyn3 najstarszy bajt liczby po przeksztaceniu wyn2 starszy bajt liczby po przeksztaceniu wyn1 modszy bajt liczby po przeksztaceniu DEC16: mov mov mov mov mov mov mov again: mov loD: mov anl jz mov dec mov mul mov inc inc movc add da mov jnc mov add da mov jnc mov add mov poC: mov inc movc ;a oto i sama procedura wyn1, #0 wyn2, #0 wyn3, #0 R0, #1 R1, #16 R2, loData DPTR, #tabl cjne ;na pocztku ;wyzerowanie wyniku ;licznik bitw liczby 16bitowej ;pobranie adresu tabeli skadnikw

Na koniec nalezy jeszcze odpowiednio zdefiniowa tabel potg dwjki, oto ona. tabl db db db db db db db db db db db db db db db db 03h,27h,68h 01h,63h,84h 00h,81h,92h 00h,40h,96h 00h,20h,48h 00h,10h,24h 00h,05h,12h 00h,02h,56h 00h,01h,28h 00h,00h,64h 00h,00h,32h 00h,00h,16h 00h,00h,08h 00h,00h,04h 00h,00h,02h 00h,00h,01h ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 do do do do do do do do do do do do do do do do 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

R1, #8, loD ;czy testujemy modszy ;czy starszy bajt R2, hiData A, R2 A, R0 fini A, R1 A B, #3 AB R3, A A A A, @A+DPTR A, wyn1 A wyn1, A poC A, wyn2 A, #1 A wyn2, A poC A, wyn3 A, #1 wyn3, A A, R3 A A, @A+DPTR ;poprawka na adres ;obliczenie waciewj liczby ;z tabeli ;dla odpowiedniego bitu ;tabela ma po 3 bajty ;poprawka na adres ;pobranie pierwszego bajtu liczby ;dodanie go do wyniku ;z korekcj dziesitn ;dodanie staszego bajtu ;do wyniku ;z korekcj dziesitn ;to samo z nastarszym bajtem ;wyniku

I gotowe, tera mona bez obawy zamienia liczby, np. tak: MOV MOV LCALL MOV MOV LCALL MOV MOV LCALL MOV MOV LCALL DEC16 hiData, DPH ;pobierz liczb ;z DPTR

A2HEX A2HEX A2HEX

loData, DPL ;wywoaj podprogram A, wyn3 ; a nastepnie wypisz ;wynik na displeju B, #3 ;najstarszy bajt A, wyn2 B, #5 ;starszy bajt A, wyn1 B, #7 ;i wreszcie modszy bajt wyniku

W przykadzie zawarto rejestrw DPTR zostaa zamieniana do postaci dziesitnej a nastpnie wypisana na wywietlaczu na pozycjach DL3...DL8. Zadanie 2 I na deser mae zadanko, prosz samodzielnie sprbowa napisa nastpujce procedury: a) dodawania dwch liczb 16bitowych b odejmowania dwch liczb 16bitowych c) mnoenia liczby 16bitowej przez 8bitow (wynik bdzie 24 bitowy) d) dekrementacji z korekcj akumulatora Za miesic rozwizanie zadania, tymczasem ycz wesoej zabawy. Sawomir Surowiski

ELEKTRONIKA DLA WSZYSTKICH 3/98

41

Te to potrafisz
Po duszej przerwie w opisie blo kw funkcjonalnych mikrokontrolera 8051, wypenion opisem niezbd nych do programowania, instrukcji asemblera, kontynuujemy prezenta cj pozostaych ukadw wewn trznych procesora. Dziki temu, e ju znacie jzyk ma szynowy procesora, a przynajmniej orientujecie si w jego skadni i spo sobach panowania na rnego ro dzaju rejestrami kostki, bdzie mi atwiej opisywa elementy proceso ra, bowiem za kadym razem bd ilustrowa opisy, przykadami sposo bw programowania takich elemen tw jak port szeregowy, ukady licz nikowoczasowe, czy ukad prze rwa. Cel takiego podejcia do te matu jest oczywisty, to praktyczne nauczenie Was, drodzy Czytelnicy, atwego i przyjemnego korzystania z wszystkich moliwoci mikrokon trolera 8051.

Mikrokontrolery? To takie proste...


Cz 12 UART port szeregowy procesora
obszarze rejestrw specjalnych SFR. Rejestr ma nazw SBUF a zapisa go mona tak samo jak kady inny rejestr, np. instrukcj zapisu poprzez wskanik Ri: MOV SBUF, @R1 W przypadku, kiedy wczeniej ustawilimy parametry transmisji i u ruchomilimy port szeregowy (o tym jak to zrobi za chwil), taki za pis spowoduje automatyczne wytransmitowanie bajtu ktry wczeniej znajdowa si pod adresem wskazywanym przez rejestr indeksowy R1. W przypadku odbioru danej, po zakoczeniu transmisji odebrany bajt informacji bdzie automatycznie umieszczony w rejestrze SBUF, a fakt zajcia takiego zdarzenia zostanie zasygnalizowany w programie auto matycznie. Dziki temu bdziemy wiedzie, e w rejestrze SBUF czeka na odczytanie gotowa odebrana dana, z ktr mona zrobi na co si ma ochot. Zanim przejd do omawiania sposobu sterowania transmisj danych poprzez port szeregowy, pragn wyjani dwa pojcia zwizane z por tem szeregowym. By moe niektrzy z Was dokadnie wiedz o co chodzi, lecz pozostaym Czytelnikom naley si wyjanienie zasady sa mej transmisji szeregowej. Po pierwsze, naley wiedzie e istniej praktycznie dwa sposoby na przysyanie danych metod szeregow, s to: transmisja synchroniczna i transmisja asynchroniczna. Poniewa port szeregowy procesora 8051 moe pracowa w oby tych trybach, wyjani na pocztku o co chodzi i jakie s zasadnicze r nice pomidzy obiema rodzajami transmisji. Transmisja synchroniczna W tym przypadku dane (informacje) przesyane s od nadajnika do odbiornika za pomoc dwch przewodw (nie liczc oczywicie masy). Jednym przesyane s dane, a drugim generowany jest sygna zegaro wy, w takt ktrego odbiornik moe odebra informacj i stwierdzi, czy nadesza 1ka czy logiczne 0. Mona wic powiedzie e dane s przesyane synchronicznie z przebiegiem zegarowym transmitowanym rwnolegle z danymi, std m.in. nazwa rodzaju transmisji. Sytuacj t ilustruje rys.1a. Stan nieaktywny na linii moe by umo wny, moe to by logiczne 0 lub jedynka, umowny jest te sposb ge nerowania sygnau zegarowego, wszystko zaley od przyjtego w uka dzie rozwizania. Nie dotyczy to konkretnie mikrokontrolera 8051 i po chodnych, lecz tu take ustalono, kiedy transmisja si zaczyna i w jaki sposb generuje si sygna zegarowy (nazywany czasem synchronizu jcym). O tym jakie zasady obowizuj w przypadku 8051 powiem za chwil.

Zanim przejd do sedna dzisiejszego odcinka, chciabym zaanonso wa wszystkim zainteresowanym Czytelnikom, e od dzisiejszego nu meru EdW uruchamiam Kcik pocztowy 8051, w ktrym bd odpowiada na wszystkie za warte w waszych listach problemy, dotyczce programowania naszego mikrokontrolera. Ze wzgldu na to, e cz z ogromnej liczby listw ktre dostaj bdzie wizaa si z wybranymi, prezentowanymi w kolej nym odcinku, problemami, odpowiedzi bd wizay si z tematami, ktre ju omawialimy lub tymi, ktre akurat s tematem kolejnego od cinka klasy mikroprocesorowej. W dzisiejszej czci zapoznamy si z ukadem transmisji szeregowej oraz praktycznymi sposobami programowania go i wykorzystywania do wasnych celw, w tym take do przesyania danych pomidzy kompu terem PC lub dwoma komputerkami edukacyjnymi.

Port szeregowy
Mikrokontroler 8051 i pochodne posiadaj sprztowy port szeregowy (w skrcie UART), dziki ktremu moliwe jest wysyanie i odbieranie informacji w postaci szeregowej, czyli bit po bicie. Jak ju wiecie z o pisu wyprowadze, ktry przedstawiem na pocztku naszego kursu, procesor posiada dwie dedykowane kocwki ktre wchodz w skad portu P3 procesora. S to: Receive data) RXD (P3.0) wejcie szeregowe (R Transmit data) TXD (P3.1) wyjcie szeregowe (T Jak zapewne pamitacie, kocwki te mog by wykorzystywane jako uniwersalne wejciawyjcia, dziki instrukcjom zapisu do portu P3, np. MOV P3, #dana lub indywidualnym sterowaniem kadej kocwki portu np.: SETB P3.0 ;ustawienie 1 na kocwce RXD CLR P3.1 ;ustawienie 0 na kocwce TXD Jednak przy wykorzystaniu portu szeregowego, sterowanie kocw kami odbywa si automatycznie (za pomoc CPU), wedug ustawio nych wczeniej przez programist parametrw przesyowych. Port sze regowy wysya i odbiera dane w postaci bajtw (8bitowych sw da nych). Konwersja danej wysanej lub odebranej przez procesor z posta ci bajtu do postaci szeregowej lub odwrotnie, odbywa si automatycz nie. Dziki temu wystarczy wskaza tylko dana ktr chcemy wysa lub czeka na odbir jej z zewntrznego urzdzenia, take wyposaone go w port szeregowy. Miejscem z ktrego wysya si wspomniane dane bajty, lub do kt rego one trafiaj po transmisji z zewntrz jest specjalny rejestr, znajdu jcy si pod adresem 99h w pamici wewntrznej danych procesora w

ELEKTRONIKA DLA WSZYSTKICH 4/98

35

Te to potrafisz
Jakie s zalety a jakie wady obu rodzajw transmisji?...hm, na to pytanie do trudno jednoznacznie odpowiedzie, zreszt jedna wyrana korzy od razu si rysuje: zmniejszenie liczby przewodw w przypadku transmisji asynchronicznej. Istniej urzdzenia ktre po prostu z definicji potrzebuj zewntrznego sygnau zegarowe go, nie tylko do przesyania danych pomidzy nim a systemem nadrzdnym, lecz take do poprawnej pracy innych funkcjonalnych blo kw systemu. W takich przypadkach transmi sja synchroniczna staje si nieodzowna. Do niedawna panowao mniemanie, e trans misja synchroniczna jest bezpieczniejsza od asynchronicznej, a take znacznie szybsza. Tak jednak byo dla nieduych pocze pomidzy nadajnikiem a odbiornikiem (do kilkudziesiciu centymetrw dla szybkoci do kilkunastu MHz). Wynikao to z tego, e jak dotd urz dzenia nadawcze i odbiorcze pracujce w try bie asynchronicznym nie byy do doskonae, i czsto przy stosunkowo duych (cho i tak maych w porwnaniu z transmisj synchro niczn) prdkociach transmisji nastpoway przekamania i gubienie informacji. W dzisiejszych czasach, kiedy mamy do dyspo zycji takie urzdzenia jak port szeregowy w kontrolerze 8015 i podobnych, zaawansowa ne ukady UART w komputerach PC, zdolne do transmitowania danych w trybie asynchronicz nym z prdkociami nawet do 4Mb/sek. (tak !, czterech megabitw na sekund), problem ten praktycznie znikn. Dochodz do tego jeszcze inne udogodnienia takie jak korekcja bdw o raz kompresja danych, co zwiksza realne szyb koci transmisji oraz zwiksza bezpieczestwo przed utrat czsto tak cennej informacji. Jednak w wielu sytuacjach fakt e procesor 8051 potrafi przesya danej w sposb synchroniczny, moe pomc w rozwizywaniu wielu ciekawych zagadnie przy projektowaniu peryferyjnych ukadw cyfro wych, wykorzystywanych nie tylko w domowym zaciszu. Warto zatem o tym pamita. UART w mikrokontrolerze 8051 Teraz, kiedy ju wiecie na czym polega rnica pomidzy transmisj synchroniczn a asynchroniczn moemy przej do omawiania ukadu UART w naszym procesorze. Oprcz rejestru SBUF istnieje dodatkowy rejestr sterujcy wszystki mi funkcjami portu, a wic trybem jego pracy, sygnalizowaniem stanu transmisji, czy wreszcie uaktywnianiem odbiornika portu szeregowego. Znajduje si on pod adresem 98h w obszarze wewntrznej pamici da nych procesora i jest jednym z rejestrw specjalnych SFR. Na scigaw ce we wkadce z numeru 11/97 EdW znajduje si opis tego rejestru, jednak przedstawi poniej nieco dokadniej znaczenie poszczeglnych jego bitw.

Rys. 1. Transmisja synchroniczna i asynchroniczna Transmisja asynchroniczna W przypadku tego rodzaju transmisji (patrz rys.1b) nie ma oddzielnej linii zegarowej, a dane s przesyane w takt wewntrznego sygnau ze garowego, generowanego oddzielnie w nadajniku i odbiorniku. Warun kiem prawidowego przesania danych w asynchronicznym sposobie transmisji jest to, aby nadajnik i odbiornik miay ustawion t sam cz stotliwo wspomnianych sygnaw zegarowych (nazywanych te taktujcymi). Takie ustalenie prdkoci transmisji odbywa si na r ne sposoby, z reguy jest to rczne ustalenie przez operatora. Zauwacie przecie e w naszym komputerku, przed przesaniem da nych z komputera PC mona ustawi (za pomoc klawisza Bbaud) dan szybko transmisji, tak samo mona postpi w portem szere gowym komputera PC, za pomoc komendy DOSu np.: MODE COM2: 9600, n, 8, 1 {Enter} gdzie szybko ustalono na 9600 bitw na sekund (bodw). Pozosta e parametry omwi za chwil. Jeeli zatem urzdzenie odbiorcze uczestniczce w przesyaniu da nych wie z jak szybkoci nadawane s dane, to bdzie mogo odebra informacj, bez dodatkowej linii zegarowej, jak to miao miejsce w przy padku transmisji synchronicznej. Zaoszczdzimy w ten sposb jeden przewd. No tak, ale przecie w mikrokontrolerze 8051 s dwie linie portu szeregowego: nadawania (TXD) i odbioru (RXD). To prawda, nie jest moliwe przesyanie danych w obie strony po jedne linii w trybie asynchronicznym (oczywicie przy wykorzystaniu sprztowego portu szeregowego o ktrym mowa), lecz zauwamy e w przypadku, kiedy np. do naszego komputerka doczymy urzdzenie ktre potrafi tylko odbiera dane, to wystarczy poczy je tylko 1 przewodem z kocw k TXD procesora (nie zapominajc o masie), a lini RXD pozostawi nie wykorzystan. Z drugiej strony, wyobra sobie e jeeli np. do naszego komputerka doczono oddalony o kilkadziesit metrw cyfrowy ukad automatycz nego termometru, ktry w okrelonych odstpach czasu automatycz nie przesya dane dotyczce aktualnej temperatury, to do odbioru tych danych wystarczy doczy lini do wejcia RXD procesora. W obu przypadkach jeeli chcielibycie wykorzysta transmisj syn chroniczn, trzeba by pocign jeszcze jeden przewd midzy odbior nikiem a nadajnikiem,. co zwikszyoby koszty takiego przedsiwzicia a jednoczenie skomplikowao instalacj urzdzenia.

SCON.0 (RI) (ang. Receive Interrupt) znacznik odebrania przez port szeregowy bajtu, jest jednoczenie znacznikiem zgoszenia przerwa nia (przy uaktywnionym systemie przerwa). W przypadku kiedy u kad szeregowy mikrokontrolera jest ustawiony na odbir (odbloko wany jest ukad odbiornika: bit REN=1), po odebraniu poprawnego znaku z urzdzenia zewntrznego, znacznik ten zostaje automatycz nie ustawiony. Zerowanie tego znacznika odbywa si wycznie pro gramowo, np. przez instrukcj: CLR RI SCON.1 (TI) (ang.Transmit Interrupt) znacznik wysania przez port szeregowy bajtu, jest jednoczenie znacznikiem zgoszenia przerwa nia jeeli uaktywniono wczeniej ukad 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 zakoczeniu nadawania znaku przez UART. Podobnie jak w przypadku znacznika RI, znacznik ten jest ustawiany automatycz nie a musi by zerowany programowo za pomoc instrukcji np. CLR TI

36

ELEKTRONIKA DLA WSZYSTKICH 4/98

Te to potrafisz
SCON.2 (RB8) (ang. Receive Bit no. 8) port szeregowy mikrokon trolera 8051 ma moliwo odbioru i transmisji znakw 9bitowych istnieje specjalny tryb pracy UART, o tym za chwil. W takim trybie w przypadku odbioru znaku z urzdzenia zewntrznego, bit RB8 za wiera wanie wspomniany 9ty bit odebranego znaku, Oczywicie 8 pierwszych bitw znaku znajduje si jak poprzednio w rejestrze SBUF. SCON.3 (TB8) (ang. Transmit Bit no. 8) 9ty bit nadawanego znaku w trybie transmisji z 9 bitami danych. Sytuacja analogiczna do po przedniej, lecz w tym przypadku aby wysa 9bitowy znak poprzez port szeregowy naley najpierw wpisa 9ty bajt nadawanego znaku do bitu TB8 a potem zaadowa rejestr SBUF omioma modszymi bi tami (bajtem) nadawanego znaku. SCON.4 (REN) (Receive ENable) bit uaktywnienia odbiornika trans misji szeregowej. W celu odbioru znaku (oczekiwania na nadejcie bajtu z portu szeregowego) naley najpierw wyzerowa bit REN, aby odblokowa sprztowy odbiornika znaku zawarty w mikrokontrole rze. W przypadku nadawania znaku bit ten powinien by wyzerowa ny (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 odbierane znaki, ktrych (w trybie 9bitowym) 9 ty bit (RB8) jest rwny zero (RB=0). W efekcie w takim przypadku nie jest ustawiany znacznik odebrania znaku (RI). Dodatkowo w trybie 8 bitowym (tryb=1) sytuacja jest identyczna kiedy po odebraniu znaku nie zosta wykryty bit stopu. Numeracja trybw ich znaczenie oraz wyjanienie bitw stopu ju za chwil. SCON.7 (SM0) oraz SCON.6 (SM1) bity ustalajce jeden z czterech trybw pracy portu szeregowego. Oto one: SM0 SM1 = 00 tryb 0: Transmisja szeregowa synchroniczna, znaki 8 bitowe, taktowane sygnaem zegarowym o czstotliwoci Fxtal/12, SM0 SM1 = 01 tryb 1: Transmisja szeregowa asynchroniczna, znaki 8bitowe, szybko transmisji moe by okrelana programowo (tryb do pracy np. z PCtem) SM0 SM1 = 10 tryb 2: Transmisja szeregowa asynchroniczna, znaki 9bitowe, szybko okrelona jako 1/32 lub 1/64 czstotliwoci zega ra procesora, SM0 SM1 = 11 tryb 3. Transmisja szeregowa asynchroniczna, znaki 9bitowe, szybko transmisji moe by okrelana programowo (znajduje take zastosowanie przy pracy z PCtem) Znaczenie i funkcje poszczeglnych trybw s nastpujce. Tryb 0 Jak ju powiedziaem w tym synchronicznym trybie przesyania infor macji port szeregowy pracuje nadawajc i odbierajc znaki 8bitowe. Za wsze pierwszym nadawanym lub odbieranym bitem jest najmniej zna czcy (D0). Znaki przesyane s po dwukierunkowej linii P3.0 (RXD). Odbierane s i nadawane za porednictwem znanego nam ju rejestru SBUF w takt sygnau zegarowego, ktry generowany jest przez kontroler na linii P3.1 (TXD). W tym trybie czstotliwo sygnau zegarowego jest staa i jest r wna 1/12 (jednej dwunastej) czstotliwoci sygnau taktujcego proce sor. W przypadku uycia obwodu oscylatora procesora z rezonatorem kwarcowym 12 MHz, znaki w tym trybie bd przesyane z szybkoci 1 000 000 bitw / sek. (1 Mb/sek). Przy nadawaniu znaku obowizuje zasada, e zapis wysanego kolej nego bitu znaku w urzdzeniu odbiorczym (zewntrznym np. rejestrze przesuwnym) powinien nastpi przy narastajcym sygnale zegarowym wytwarzanym na linii TXD. W przypadku odbioru (REN=1) narastajce zbocze sygnau zega rowego powinno powodowa przesunicie zawartoci zewntrzne go rejestru przesuwnego, z ktrego odbierane s dane, czyli de fac to odczyt odbywa si przy opadajcym sygnale przesyanym lini TXD procesora. Po odebraniu znaku nastpuje automatyczne ustawienie znacznika RI, a przy nadawaniu znacznika TI. Fakt e znaczniki te nie s zerowa ne automatycznie pozwala programicie na testowanie stanu ich, a co za tym idzie monitorowanie faktu odbioru czy nadania znaku bez potrze by uruchamiania ukadu przerwa. Oto praktyczny przykad ilustrujcy t waciwo. Procedura nadania znaku z akumulatora bez korzystania z ukadu przerwa moe wyglda nastpujco: OUTRS: mov SBUF, A ;przepisanie zawartoci ;akumulatora do rejestru UART czekaj: jnb clr ret TI, czekaj ;testowanie flagi nadania ;(czekanie na zakoczenie nadawania) TI ;wyzerowanie flagi nadawania ;powrt z procedury (podprogramu)

Za procedur odebrania znaku i umieszczenia go w akumulatorze mo e wyglda tak: INRS: czekaj: setb jnb clr clr mov ret REN RI, czekaj ; RI REN A, SBUF ;odblokowanie odbiornika testowanie flagi odbioru ;(czekanie na odbir znaku) ;po odbiorze wyzerowanie flagi ;i zablokowanie odbiornika ;przepisanie znaku do akumulatora ;powrt z podprogramu

O ile podprogram nadania znaku nie zajmie z reguy wicej ni 10 cyk li maszynowych procesora, o tyle sprawa odbioru znaku bez wczone go ukadu przerwa moe by czasochonna. Popatrzcie przecie, e w przypadku gdy nie bdzie nadchodzi aden znak z portu szeregowego, procedura INRS w ogle si nie zakoczy, innymi sowy program moe si zawiesi w przypadku gdy czekamy na jakis znak z urzdzenia ze wntrznego, a on nie nadchodzi. Wanie dlatego uycie ukadu przerwa przy odbiorze znakw moe okaza si bardzo pomocne. Jak tego dokona omwi w dalszej cz ci cyklu klasy mikroprocesorowej. Istnieje jednak sposb zabezpieczenia si przed takim nieskoczo nym czekaniem na odbir znaku bez angaowania czsto i tak przeci onego systemu przerwa procesora. Ot wystarczy oprcz flagi RI sprawdza stan jakiego przyjtego w programie rejestru, ktry jest au tomatycznie zmniejszany o jeden np. co 1 sekund. Zamy e zmniej szanie odbywa si automatycznie w procedurze przerwania generowa nej przez jeden z licznikw procesora np. T0. W takim przypadku, jee li stwierdzimy e rejestr ten (nazywany czsto rejestrem przetermino wania) jest rwny zero, koczymy sprawdzanie flagi RI, uznajc e na stpi bd w odbiorze znaku. Wtedy nasza procedura odbioru znaku b dzie wygldaa nastpujco. Zamy przy tym e wspomniany rejestr przeterminowania na zwalimy np. jako overtime i zdefiniowalimy jego adres jako np. overtime EQU 7Fh czyli 7Fh w pamici wewntrznej danych kontrolera. Zakadamy te e w wywoywanej automatycznie co 1 sekund procedurze przerwania od licznika T0 licznik overtime w przypadku stwierdzenia jego wartoci ja ko rnej od zera jest zmniejszany o 1. Wtedy uycie podprogramu: INRS: czekaj: setb jb mov jnz jest: koniec: sjmp clr mov clr ret REN RI, jest A, overtime czekaj koniec RI A, SBUF REN ;odblokowanie odbiornika ;testowanie flagi odbioru ;(czekanie na odbir znaku) ;sprawdzenie rejestru przeterminowania ;jeeli jeszcze <>0 to czekaj na znak ;jeeli =0 to zaniechaj czekania ;po odbiorze wyzerowanie flagi ;przepisanie znaku do akumulatora ;i zablokowanie odbiornika ;powrt z podprogramu

z uprzednim zaadowaniem rejestru overtime liczb sekund przezna czonych na maksymalne oczekiwanie na odbir znaku poprzez instrukcj: mov lcall overtime, #10 INRS ;10 sekund na odbir znaku ;i wywoanie podprogramu odbioru

spowoduje czekanie maksymalnie 10 sekund na dobir znaku z portu szeregowego. Opisana zasada znajduje zastosowanie w trzech pozostaych trybach pracy portu szeregowego, a wic w trybach 1, 2 i 3. Tryby 1, 2 i 3 Zanim opisz szczegowo wspomniane trzy pozostae tryby pracy portu szeregowego kontrolera powinienem przedstawi wspln cech charakteryzujca te tryby a mianowicie posta przesyanej asynchronicz nie informacji, czyli format przesyania znaku (8bitowy lub 9bitowy). Poniewa w trybie asynchronicznym nie istnieje linia przesyajca syg na taktujcy poszczeglne nadawane i odbierane bity, obie strony nadawcza i odbiorcza musz w jaki sposb wiedzie o tym e np. w danej chwili nadajnik rozpocz nadawanie znaku. Wtedy odbiornik

ELEKTRONIKA DLA WSZYSTKICH 4/98

37

Te to potrafisz
MODE COMx: baud, parity, data, stop, retry gdzie, poszczeglne nazwy oznaczaj: x okrela numer portu szeregowego, do ktrego do czony jest UART mikrokontrolera (1 dla COM1, 2 dla COM2, 3 dla COM3 itd.) baud okrela szybko transmisji w bitach na sekund (standardowe najczciej uywane szybkoci to: 600, 1200, 2400, 4800, 9600, 19200 bodw czyli bitw/sek) parity parametr okrelajcy sposb kontroli parzysto ci. Moliwe wartoci to: oodd (nieparzysty) lub e even (parzysty) data parametr okrelajcy liczb bitw danych. Warto ci typowe akceptowane przez instrukcj MODE to 5...8 stop liczba bitw stopu. Wartoci akceptowane to 1 lub 2 (bity stopu). Parametru retry nie naley w ogle podawa. W ten sposb mona zdefiniowa parametry transmisji w komputerze PC dla nastpujcych trybw pracy portu szeregowego mikrokontrolera 8051, np.: MODE COM2: 9600, n, 8, 1 (1)

dla trybu 1 portu UART w 8051, prdkoci 9600 bodw, doczonego do portu COM2 komputera PC, a w przy padku trybu 9bitowego (3) : MODE COM2: 9600, e, 8, 1 (2)

w przypadku badania parzystoci bitw danych lub Rys.2. Format znaku w trybie 8b bitowym (a) oraz 9b bitowym (b). detektujc takie zajcie bdzie, znajc oczywicie czstotliwo na dawani znaku przez nadajnik (znajc prdko transmisji), wiedzia w jaki sposb odbiera nadawany z zewntrz znak. Ustalono, e podczas ciszy na czach, linie portw (RXD odbioru i TXD nadawania ) s w stanie wysokim. Sygnaem rozpoczcia na dawania znaku, a z drugiej strony sygnaem koniecznoci jego odbio ru jest pojawienie si tzw. bitu startu, czyli niskiego poziomu lo gicznego na linii (TXD w przypadku nadawania) lub (RXD w przypad ku odbioru). Bit startu trwa dokadnie tyle ile powinny trwa (w zalenoci od szybkoci transmisji) pozostae bity informacji. Na rysunku 2 oznaczono ten bit dokadnie. Po bicie startu (pamitajmy, zawsze rwny zero!), nastpuj kolejno bity danych. I tak pierwszy transmitowany jest najmodszy bit (D0) baj tu wpisanego do rejestru SBUF, potem starszy (D1) i tak dalej a do bi tu D7, a w przypadku transmisji 9bitowej dodatkowo transmitowany jest bit SCON.3 (TB8), po czym nastpuje bit stopu, ktry zawsze jest rwny 1. Pojawienie si bitu stopu koczy nadanie znaku, a po drugiej stronie jego odbir. Mechanizm transmisji znaku w trybach 1, 2 i 3 jest taki sam, rna jest tylko liczba bitw danych oraz szybko transmisji, zgodnie z opi sem wczeniej. Dla przykadu powiem, e cho transmisja 9bitowa moe wydawa si mniej naturalna i niepotrzebna, to jednak jest ona czsto wykorzystywa na do przesyania danych z tzw. bitem parzystoci. Jest to prosty sposb na wyeliminowanie odbioru zafaszowanych danych, kiedy to pomimo, e w okrelonej, koniecznej chwili nastpio wygenerowanie poprawnego bitu startu o raz bitu stopu, to jednak bity danych ulegy znieksztaceniu, co spowodowao zafaszowanie danych i odbir niewaciwego znaku. Przy korzystaniu z transmisji z komputerem PC mona poleceniem MODE ustawi tryb transmisji portu szeregowego komputera na kilka sposobw, a mianowicie: Jak si za chwil przekonasz nasz UART w mikrokontrolerze 8051 potrafi pracowa z wikszymi szybkociami, lecz ustawienie tych szybkoci transmisji w PCcie jest moliwe tylko za pomoc specjal nie utworzonych programw, ktre s dostpne jako programu ter minalowe shareware, lub mog by napisane przez Czytelnikw, tych ktrzy potrafi to zrobi. Najprostszym a jednoczenie oglnie dostpnym programem twego typu jest program pochodzcy z pa kietu popularnego DOSowego Norton Commandera pod nazw: TERM90.EXE. O sposobie uywania tego programu nie bd si tu rozwodzi, zasady powinien zna kady komputerowiec, a jeeli nie to radz si tym programem nieco pobawi. MODE COM2: 9600, o, 8, 1 (3)

dla nieparzystoci. Najczciej jednak przydaje si ustawienie portu komputera PC jak w linii (1) oraz korzystanie z trybu 1 UART kontrolera 8051. W trybie 2 pracy, port szeregowy taktowany jest sygnaem zegaro wym o czstotliwoci Fxtal/32 lub Fxtal/64 (gdzie Fxtal to czstotliwo rezonatora oscylatora). O tym, ktra z czstotliwoci bdzie taktowa port, decyduje stan bitu 7 (SMOD) w rejestrze SFR o nazwie PCON (a dres: 87h). Ustawienie tego bitu powoduje podwojenie szybkoci trans misji (Fxtal / 32) wyzerowanie ustawienie taktowania na Fxtal/64. Jak wspomniaem wczeniej w trybach 1 i 3 szybko transmisji moe by okrelana programowo. W tym przypadku ukad transmisyjny taktowa ny jest za pomoc sygnau przepenienia licznika T1 ukadu czasowoliczni kowego. W kontrolerach 8032/52 do taktowania portu moe take posuy licznik dodatkowy T2. Jak tego dokona poka na przykadach po opi sie sposobw modyfikacji i wartoci szybkoci transmisji. Poniewa wgbianie si w przebiegi i szczegy nadawania i odbioru znakw w trybach asynchronicznych jest mao praktyczna, zaintereso wanych odsyam do lektury [1]. Poniej skupie si jedynie na praktycz nych aspektach korzystania z dobrodziejstw portu szeregowego oraz programowania jego rejestrw. Zanim do tego przejd zapoznajmy si z moliwociami modyfikowania Szybkoci transmisji W trybie 0 szybko przesyania danych, jak powiedziaem wczeniej jest niezmienna i wynosi Fxtal/12. W trybie 2 prdko transmisji wynosi: Fxtal/32 przy SMOD=1, lub Fxtal/64 przy SMOD=0. W trybach 1 i 3 sprawa ma si nieco inaczej. W tym przypadku prd ko transmisji okrela wzr: Fxtal n = (256 TH1) x 12 x dz gdzie: dz = 32 w przypadku gdy SMOD = 0 za dz = 16 gdy SMOD = 1, za TH1 to warto pocztkowa 8bitowego licznika TH1 (starszy bajt T1) pracujcego w trybie taktowania portu szeregowego. Aby wykorzysta standardowe prdkoci transmisji znane z kompu terw PC oraz innych wyposaonych w asynchroniczny port szeregowy (Commodore, Amiga), czyli: 600, 1200, 2400, 4800, 9600, 19200, 28800, 38400, 57600, 76800 bit/sek naley zastosowa taki kwarc (os cylator) aby po lewej stronie rwnania otrzyma te wartoci przy pami taniu e warto TH1 jest liczb cakowit z zakresu 0...255. I tu wyjani si sprawa stosowania troch dziwnych wartoci rezona torw kwarcowych w niektrych ukadach wykorzystujcych procesory rodziny 8051 i ich port szeregowy.

38

ELEKTRONIKA DLA WSZYSTKICH 4/98

Te to potrafisz
Ot chociaby w naszym komputerku edukacyjnym zastosowany re zonator kwarcowy ma warto 11,0592 MHz, zobaczmy dlaczego i co w efekcie uzyskamy. Podstawiajc do powyszego wzoru, okrelajcego prdko trans misji danych, warto oscylatora rwn 11059200 Hz oraz zakadajc e SMOD = 1 (czyli dz = 16) otrzymamy np. dla TH1 = F4h (244 dziesitnie): n = 11059200/((256244)x12x16)=4800 bodw. Postepujc podobnie z innymi wartociami pocztkowymi licznika TH1 otrzymamy dla podanego rezonatora oraz innych (ktrych czstot liwo rezonansowa dzieli si przez liczb 12 i 32 (lub 16)) inne standar dowe wartoci, oto one: Fxtal (MHz) 11,0592 11,0592 11,0592 11,0592 11,0592 11,0592 11,0592 11,0592 11,0592 14,7456 14,7456 14,7456 14,7456 14,7456 14,7456 14,7456 1,8432 1,8432 1,8432 1,8432 1,8432 SMOD 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 TH1 FFh FEh FDh FCh FAh F4h E8h D0h A0h FFh FEh FCh F8h F0h E0h C0h FFh FEh FDh FAh F4h n (bodw) 57600 28800 19200 14400 9600 4800 2400 1200 600 76800 38400 19200 9600 4800 2400 1200 9600 4800 2400 1200 600

Te to potrafisz
2400 bodw (TH1 = F3h, SMOD = 0), wtedy bd wyniesie tylko: 0,16% 4800 bodw (TH1 = E6h, SMOD = 0), wtedy bd wyniesie take 0,16% ale ju przy prdkoci transmisji rwnej 9600 bodw (TH1 = F9h, SMOD = 1), bd wyniesie a 7%, bo aktual na szybko transmisji bdzie mniejsza od zaoonej i wyniesie w tym przypadku: 8923 body. W przypadku uycia do taktowania portu szeregowego w kontrole rach 8032/52 licznika T2, prdko transmisji okrelona bdzie wzorem: Fxtal n = (65536 RLD) x 16 x 2 gdzie RLD to warto pocztkowa, zapisana przez program uytkowni ka do pary rejestrw RLDH i RLDL. Jeeli zastosujemy rezonator kwar cowy o czstotliwoci np. 16 MHz to moliwe do uzyskania czstotli woci transmisji bd z przedziau: 7...50000 bitw / sek. Praktyczne wskazwki Jak zatem zaprogramowa rejestr sterujcy portu szeregowego oraz jak zmusi do pracy licznik ktrego zadaniem bdzie taktowanie trans misji. Oto przykad ktry pomog wam zrozumie ten problem. Przykad Zaprogramujemy UART tak, e bdzie pracowa w trybie asynchro nicznym 8bitowymi znakami, a taktowany bdzie licznikiem T1. Prd ko transmisji okrelimy np. na 19200 bitw / sek (bodw). Inne war toci transmisji patrz tabela. Aha, byby zapomnia, zakadamy e w systemie zastosowano rezo nator kwarcowy o Fxtal = 11,0592 MHz. Oto sekwencja pocztkowa uruchamiajca prac portu: INIT_RS: mov SCON, #01000000b ;tryb 1 portu orl TMOD, #00100000b ;licznik T1 tryb pracy 8bitowej ;liczy TL1 z automatycznym ;wpisywaniem wartoci ;pocztkowej ;z TH1 orl PCON, #80h ;ustawienie SMOD = 1 mov TH1, #FDh ;prdko = 19200 bodw ;(tabela) setb TR1 ;start licznika T1 (TL1) ..... ;i gotowe... Teraz wystarczy uy procedur ktre opisaem wczeniej (INRS i OUTRS) aby wysa dowolny znak poprzez cze szeregowe. Zmienia jc warto adowan do rejestru TH1 (linia: mov TH1, #xx) mona w dowolnej chwili zmienia prdko transmisji w zakresie zalenym o czywicie od zastosowanego rezonatora kwarcowego. Analogicznie, opierajc si o opis rejestru licznika T2CON (w kost kach 8032/52) mona zaprogramowa i zmusi do pracy licznik T2, ra dz poeksperymentowa w domu, oczywicie zaopatrujc si wcze niej w odpowiedni mikrokontroler. No dobrze ale czy mona bezporednio doczy kocwki portu pro cesora 8051 (TXD i RXD) do np. komputera PC ?... absolutnie nie. Po trzebny jest do tego odpowiedni konwerter poziomw napi. Przykad takiego rozwizania powinien nasun si Wam sam, no tak przecie w naszym komputerku edukacyjnym zastosowalimy taki wanie ukad, wykorzystujcy popularn przetwornic w postaci ukadu scalonego MAX232 lub ICL232. Wicej na temat portu szeregowego moecie przeczyta w kilku o statnich numerach EdW (6, 7, 9 z roku 1997). Dodatkowe szczegowe informacje oraz specyficzne cechy ukadu UART mikrokontrolera 8051 o pochodnych znajdziecie w dodatkowej li teraturze [1]. Sawomir Surowiski
Literatura [1] A. Rydzewski Mikrokomputery jednoukadowe rodziny MCS51, WNT1992, 1995

Jak zapewne si domylacie wyzerowanie znacznika bitu SMOD w rejestrze PCON (87h) spowoduje zmniejszenie o poow wszystkich prdkoci transmisji podanych w tabeli. I tu uwaga, poniewa rejestr PCON nie moe by adresowany bitowo, czyli nie da si zmodyfikowa wspomnianego bitu w tym rejestrze instrukcja np. setb SMOD std trzeba uy innego polecenia, a mianowicie: anl PCON, #7Fh ;aby SMOD = 0 lub orl PCON, #80h ;aby SMOD = 1 sprawdcie na kartce papieru lub kalkulatorze. W tabeli podano najczciej uywane wartoci rezonatorw kwarco wych dla zastosowa portu szeregowego 8051. Najbardziej popularn jest warto 11,0592 MHz, do rozpowszechniona w handlu, w szcze glnych zastosowaniach przydaje si rezonator o Fxtal = 14,7456 MHz, kiedy chcemy aby nasz mikroprocesor konsumowa jak najmniej prdu a jednoczenie pracowa przy kilku standardowych prdkociach trans misji, powinnimy uy kostki w wersji CMOS (80C51/80C31) oraz za stosowa rezonator o Fxtal = 1,843200 MHz. Moliwe jest take w praktyce stosowanie okrgych wartoci re zonatorw kwarcowych, lecz w tym przypadku naley liczy si z bda mi szybkoci, ktre jednak przy maych prdkociach transmisji nie ma j wielkiego znaczenia dla poprawnej pracy ukadu UART mikrokontro lera 8051. Wynika to z faktu e bdnie odebrany bit zawsze ley po za transmitowanymi 9cioma czy 10cioma bitami (nie wystpuje), kt re wchodz w skad transmitowanego w trybie asynchronicznym so wa. I tak np. z zastosowaniem rezonatora kwarcowego Fxtal = 12 MHz moemy miao wymienia dane z komputerem PC lub innym urzdze niem wykorzystujcym cze szeregowe i standardowe prdkoci transmisji prdkociami:

ELEKTRONIKA DLA WSZYSTKICH 4/98

39

Te to potrafisz

Lekcja

7
pop ret Acc prawda e proste! komentarz jest chyba zbdny, poza wyjanie niem, dlaczego na pocztku procedury wyzerowano znacznik prze niesienia C. Ot instrukcja SUBB procesora 8051 powoduje z de finicji odjcie dwch skadnikw dziaania z uwzgldnieniem znacz nika C. Tote profilaktycznie naley go wyzerowa przez wykona niem procedury, inaczej w przypadku gdy bdzie C=1, wynik bdzie obarczony bdem (bdzie za may o 1). Podobnie jak poprzednio procedur mona zapisa jako: ; B.A = B.A DPTR SUBB16_2: clr C subb A, DPL xch A, B subb A, DPH xch A, B ret Uwaga! W przypadku kiedy B. A bdzie mniejsze od DPTR, obliczo ny zostanie modu rnicy, a ujemny znak dziaania bdzie sygna lizowany ustawieniem znacznika C! 3. Procedura mnoenia liczby 16b bitowej przez 8b bitow W tym przypadku pomnoymy zawarto rejestru DPTR przez Acc (akumulator). Wynik bdzie zatem 24bitowy, a umieszczony w DPTR. A (DPH. DPL. A) Zauwamy e mnoenie moemy zapisa jako: DPH. DPL x Acc = DPL x Acc + DPH x Acc x 100h Jak wida najpierw trzeba wymnoy starszy (MSB) oraz mod szy bajt (LSB) rejestru DPTR przez akumulator, a potem odpowied nio doda skadniki. Wykonam zatem dziaania: wymno DPL x Acc mno DPH x Acc a nastpnie dodam w kolejnoci DPH DPL 00h + B A DPH DPL A i w ten sposb otrzymam wynik. Skorzystam przy tym z instrukcji mnoenia dwch liczb 8bitowych. A oto procedura:
MUL24:

W dzisiejszej lekcji rozwi zadania z poprzedniego miesica i wyjani sposb wykonywania przytoczonych procedur arytme tycznych przez mikrokontroler 8051. dla uatwienia bd numero wa wszystkie linie w nawiasach tu obok komentarza. 1. Procedura dodawania dwch liczb 16b bitowych Pierwszy skadnik bdzie np. umieszczony w rejestrach DPH i DPL (DPTR) Drugi skadnik dodawania bdzie umieszczony w rejestrach B (starszy bajt) i A (modszy bajt). W wyniku dodawania powstanie liczba w rejestrach B.A oraz dodatkowo przy przekroczeniu zakresu liczb zostanie ustawiony znacznik przeniesienia C. ; C.B.A = DPTR + ADD16: add A, DPL push Acc mov A, B addc A, DPH mov B, A pop Acc ret B.A ;(1) ;(2) ;(3) ;(4) ;(5) ;(6) ;(7) dodanie LSB przechowanie LSB wyniku na stosie przepisanie skadnika MSB do Acc dodanie skadnika 2 przepisanie wyniku do rejestru B odtworzenie LSB wyniku i koniec (powrt) podprogramu

W podprogramie wykonano operacj: B A + DPH DPL C B A Popatrzmy na zapis matematyczny. Najpierw dodajemy skadniki a prawej strony, czyli A i DPL (linia 1). Potem aby doda starsze baj ty (B i DPH) trzeba byo uy znowu akumulatora, lecz aby to zrobi naleao najpierw zachowa wynik z Acc, std linia (2) posuono si stosem. Nastpnie przepisano zawarto B do A (linia 3), aby j doda za chwil (linia 4) do MSB drugiego skadnika, ktry przecie znajduje si w DPH. Na kocu przepisano tak powsta sum MSB do rejestru B (linia 5) i odtworzono akumulator (linia 6). A teraz dodatkowe zadanie, poniej przedstawi alternatywny za pis powyszej procedury, sprbuj si zastanowi, dlaczego oba przykady w efekcie wykonuj to samo? ; C.B.A = DPTR + B.A ADD16_2: add A, DPL xch A, B addc A, DPH xch A, B ret 2. Procedura odejmowania dwch liczb 16b bitowych Odejmowanie dwch liczb 16bitowych przeprowadzimy w po dobny sposb jak to miao miejsce z dodawaniem, a wic od pary rejestrw B.A odejmiemy zawarto DPTR, wynik pozostanie w B.A ; B.A = B.A SUBB16: clr subb push mov subb mov DPTR C A, DPL Acc A, B A, DPH B, A ;wyzerowanie znacznika C

less:

push mov mul mov push mov pop pop mul xch add mov jnc inc xch ret

Acc B, DPH AB DPH, B DPL DPL, A B Acc AB A, B A, DPL DPL, A less DPH A, B

;przechowanie mnonika na stosie ;mnoenie DPH x Acc ;i zapisanie wyniku MSB ;przechowanie wyniku poredniego ;przepisanie LSB wyniku mnoenia DPH x Acc ;odtworzenie wyniku poredniego ;odtworzenie mnonika ;mnoenie DPL x Acc ;dodanie Acc + DPL ;czy > FFh ;tak to korekcja na DPH wyniku ;odtworzenie Acc ;...i koniec mnoenia, wynik w DPTR. A

40

ELEKTRONIKA DLA WSZYSTKICH 4/98

Te to potrafisz
4. Procedura dekrementacji z korekcj akumulatora Jak wiemy zastosowanie instrukcji dec A nieF: w przypadku kiedy w akumulatorze znajduje si liczba np. 50h da w rezultacie wynik w postaci liczby 4Fh. A co zrobi aby zamiast ta kiego wyniku otrzyma po podobn do ludzi liczb 49h. Do takiej dekrementacji czyli zmniejszania o 1 liczb zapisanych w kodzie BCD, posuy moe ponisza procedura, oto ona: DECACC: jnz nie0 ;(1) sprawdzenie czy Acc=0 mov A,#99h ;(2) tak to zaadowanie liczby 99h ret ;(3) i powrt z podprogramu nie0: clr C ;(4) nie to zeruj wskanik C subb A,#1 ;(5) odejmij od akumulatora 1 push Acc ;(6) i przechowaj wynik na stosie anl A,#0Fh ;(7) zamaskuj 4 msb wyniku cjne A,#0Fh,nieF ;(8) czy druga cyfra to F? pop anl orl ret pop ret Acc ;(9) tak to odtwrz wynik A,#0F0h ;(10) i zamaskuj 4 lsb A,#9 ;(11) a na miejsce 4 lsb wpisz cyfr 9 ;(12) i zakocz podprogram Acc ;(13) jeeli druga cyfra to nie F to ;odtwrz wynik ;(14) i zakocz podprogram

Procedura sprawdza trzy warunki: a) jeeli w akumulatorze jest liczba 0, to wpisywana jest liczba 99h i procedura zostaje zakoczona (linie 1...3) b) jeeli po zwyczajnym odjciu jedynki (linia 5) druga cyfra wyniku jest rwna F to przeprowadzana jest konwersja wyniku do po staci BCD linie 9...11. Taka sytuacja ma miejsce gdy liczba we jciowa jest okrga czyli np. 30h, 40h, 50h, 60h, itp. c) jeeli po odjciu jedynki druga cyfra wyniku jest z przedziau 0...9 to nie rb nic tylko opu podprogram wynik jest w porzdku. Sytuacja taka mam miejsce w przypadku gdy liczba wejciowa ma na drugiej pozycji cyfr z przedziau: 1...9.

Kcik pocztowy 8051


Zasypany wieloma listami, dotyczcymi cyklu artykuw powiconych programowaniu mik rokontrolerw 8051, postanowiem uruchomi kcik pyta i odpowiedzi, ktre kierujecie do mnie w swoich listach. Na wstpie chciaem bardzo podzikowa za kady list, zarwno te pochwalne jak i krytycz ne. Przyznam e, cieszy mnie bardzo fakt, i tak wielu z Was zdecydowao si sign po mikroprocesory, a co najwaniejsze odnosi ju mae ale jak wane w nauce sukcesy.
Na pocztek chciaem szczeglnie podzikowa: Rafaowi Maj dzie z Krakowa, Hubertowi Hawasowi z Warszawy, Zdzisawowi Chmielewskiemu z Tomaszowa Mazowieckiego, Robertowi Szy maszkowi z BielskoBiaej, Tomaszowi Jabonowskiemu z Moniek, Jarosawowi Chudobie z Gorzowa Wlkp. Specjalnie podzikowania take dla pana Wiesawa Zacharskiego z Karolin i Piotrkiem. Chciabym jednoczenie uspokoi Konrada Iwaniuka z Mysowic, drogi Konradzie przelij swj komputerek pod adresem redakcji AVT z dopiskiem na kopercie Serwis, problem zostanie rozwizany. Wyrazy uznania dla Przemka Pietrzyka z Lublina za jego wyczer pujcy list z zamieszczonymi, wasnorcznie napisanymi programi kami brawa rczniakom. Gorca proba ode mnie: piszcie prosz swoje adresy nie tylko na kopertach ale take w treci korespondencji. Przyznam e cz sto koperty z natury swojej zostaj oddzielone o listu i pniejsze dopasowanie obu czci jest praktycznie niemoliwe. No dobrze, przejdmy zatem do kilku listw. wynika z waszych listw, czste prby wykonywania ukadu na wasnych PCB kocz si problemami. Podziwiam jednak determi nacj Czytelnikw i ch wykonania wszystkiego samemu (sam ta ki byem), dlatego informuj e zaprogramowany EPROM mona naby za porednictwem Dziau Handlowego AVT.

*
...Jeeli chodzi o sam ukad (elektroniczny) to zastrzee nie mam, ale jeeli chodzi o zaprojektowana pytk, to zastanawia mnie kilka rzeczy: czy umieszczone zcze ARK do zasilania jest tu najlep szym rozwizaniem... lepiej by byo zastosowa standardowy wtyk zasilania. nie wiem czym kierowa si projektant pytki podczajc w do dziwnej kolejnoci linie do zcza PORT, nie wierz w to e na dwustronnej pytce nie dao si poczy tego normalnie. Jak ju wspomniaem mam pytki przykrcone jedna nad drug i prawd mwic jedne otwr mi nie pasowa, wiem e przeszkadza wy wietlacz, ale czy nie dao si tego poprzesuwa... Hubert Hawas z Warszawy Jako odpowied cytuje fragment innego listu Andrzeja Milew skiego z Torunia: ... trafne moim zdaniem byo zastosowanie typowego zcza ARK roli gniazda doprowadzajcego zasilanie do ukadu. W wielu kon strukcjach kitach AVT uywacie nietypowych, rnych gniazd za silajcych, a kady elektronik zdaje sobie spraw, e w tej dobie na rynku nie panuje praktycznie aden standard, przynajmniej jeeli chodzi o ukady niskonapiciowe... Sposb wyprowadzania sygnaw na zcz komputerka opisuje Krzysztof Wjcik z Gdaska, mianowicie: ... zreszt kady wie, e porzdkowanie sygnaw na zczach po woduje zwikszenie komplikacji druku a im wicej przelotek na pytce szczeglnie dwustronnej, tym wiksze prawdopodobie stwo uszkodzenia mechanicznego pytki podczas wielu godzin pra cy z komputerem edukacyjnym.... I chwaa za to autorowi, bowiem przyzna musze e wykonujc pytki samodzielnie miaem mniej ot worw do wiercenia...

*
...Jestem pocztkujcym studentem telekomunikacji jak rwnie czytelnikiem gazety EdW. ... Nawizujc do sprawy z zaciekawie niem ledz artykuy dotyczce 8051, lecz zakup kitu jest do kosztowny i moje pytanie i proba do Was czy jest moliwo za kupienia samej kostki EPROM wraz z monitorem? Rafa Majda z Krakowa Odpowied: No c, nie wszystkim dobrze si powodzi, aczkolwiek przyznam e troch jestem zaskoczony twierdzeniem e kit kompu terka jest kosztowny. Musz przyzna e AVT poczynio wszelkie kroki, aby w zestaw by jak najtaszy. Porwnujc obecne ceny u kadw scalonych oraz pytek drukowanych doszedem wielokrot nie do wniosku, e samodzielny zakup elementw oraz wykonanie (rczne !, tak rczne) pytek w sumie daje koszt zbliony do ceny zestawu. Dochodzi do tego sprawa pozornej prostoty ukadu, i jak

ELEKTRONIKA DLA WSZYSTKICH 4/98

41

Te to potrafisz
Sprawa sposobu mocowania obu pytek, obok siebie, czy jedna nad drug, jest dyskusyjna, w kadym razie otrzymuj od Czytelni kw zdjcia komputerkw obudowanych w rny sposb. Wszyst kie wygldaj wspaniale! Oby tak dalej. Nieco szerszy list napisa Przemysaw Piertrzyk z Lublina, ktry postanowi zastosowa w czasie wit komputerek do sterowania lampkami na choince i bardzo dobrze! ... Wykorzystaem do tego specjalne zcze z wyprowadzeniami portu P1 i na prb zmontowaem ukad z 8miu diod LED tak by kada odpowiadaa innemu bitowi portu. Ukad prbny miaem go towy, teraz wystarczy tylko program. ... Poniewa Przemek jest rczniakiem, musia samodzielnie napi sa a nastpnie zamieni na kod maszynowy programik do stero wania lampkami. Pierwsza wersja programu nie dziaaa popra wnie powodowaa zawieszanie si systemu, druga za jak pisze nasz czytelnik dziaa znakomicie, dlatego przytaczam ja poniej ja ko dobry i prosty przykad. Przemek do efektu tzw. biegncego wiata wykorzysta instrukcj rotacji akumulatora (RL A i RR A). Oto listing. kod etyk mnemonik komentarz 74FE pr1: mov A,#254 ;zaadowanie do A liczby 254 (11111110) 12801A pr_1: lcall wait ;wywoanie podprogramu ;opnienia F590 mov 90h, A ;wywietlenie A w porcie P1 23 rl A ;rotacja bitw A w lewo ;(11111101) 309702 jnb 97h, pr2 ;skok jeli najstarszy bit P1 jest =0 80F5 sjmp pr_1 ;skok do etykiety pr_1 747F pr2: mov A, #127 ;zaadowanie do A liczby 127 ;(01111111) 12801A pr_2: lcall wait ;wywoanie programu ;opnienia F590 mov 90h, A ;wywietlenie A w porcie P1 03 rr A ;rotacja bitw A w prawo 3090E1 jnb 90h, pr1 ;skok do pr.1 jeeli najmodszy ;bit P1=0 ;nastpny cykl 80F5 sjmp pr_2 ;skok do etykiety pr_2 ;(od pocztku) wait: C0E0 7433 120295 proc. D0E0 22 push Acc mov A, #51 lcall pop DELAY Acc ret ;definicja procedury wait ;przechowaj A na stosie ;czas opnienia = 51 x 4 ms ;(ok. 200ms) ;wywoanie systemowej opnienia ;odtworzenie akumulatora ;i powrt z podprogramu y akceptowane przez kompilator oferowany na dyskietce : AVT 2250/D. Ot aby wszystko byo w porzdku, jak ju wspominaem przy pisaniu programw, obowizuje zasada, e wszystkie etykiety powinny zaczyna si od pierwszej kolumny tekstu (czyli najbliej brzegu). Pan Tomasz zwraca uwag, e w artykuach klasy mikrop rocesorowej przy opisywaniu kompilatora AVT2250/D nie podano tego faktu. Odpowiadam: na dyskietce znajduje si zbir tekstowy, w kt rym wymienione s wszystkie zasady pisania programw rdo wych na zawarty kompilator, prosz tylko go przeczyta. W artyku ach pominito niektre informacje zawarte w treci tego zbioru, ze wzgldu na fakt, e cz czytelnikw tzw. rczniakw nie korzy sta w ogle z kompilatora, i taki opis byby praktycznie zbdny. Dlatego zachcam do przestudiowania zbioru tekstowego zawar tego na dyskietce, z pewnoci rozwieje on wszystkie wtpliwoci. W swoim jake ciekawym licie, Tomasz porusza take spraw prb wywietlania liczb wikszych ni te akceptowane przez proce dur A2HEX, opisywan przy okazji prezentowania Biosu kompu terka. Przytacza prosty programik prbny, dziki ktremu na pozy cjach DL3,4, i 5 zostaj wywietlona liczba 123. Zamieszcza listing tego programu, oto on: include const.inc include bios.inc org lcall mov mov mov END Program jest jak najbardziej poprawny, z jednym wyjtkiem, jego wpisanie do komputerka i wykonanie spowoduje e system pj dzie w maliny, a to ze wzgldu na brak na kocu programu przed deklaracj END ptli zatrzymujcej program w postaci np.: stop: SJMP stop Poniewa mwiem w artykule dwa miesice temu o konieczno ci stosowania tego polecenia, nie bd przypomina konsekwencji wykonania programu, ktry koczy si bez tej nieskoczonej ptli (lub innego skoku bezwzgldnego gdzie w gr programu). Pro sz zatem pamita o stosowaniu tego zalecenia, w przeciwnym przypadku przy wykonaniu tego programu nie zobaczy si efektu swojej pracy, bowiem natychmiast po wywietleniu liczby 123, na wywietlaczu prawdopodobnie pojawi si komunikat HELLO, znany wszystkim, a sygnalizujcy zresetowanie komputerka. W kolejnej skrzynce porad omwi pozostae listy, na razie po zdrawiam wszystkich sympatykw i uczestnikw Klasy Mikroprocesorowej! Sawomir Surowiski 8000h CLS DL3, #_1 DL4, #_2 DL5, #_3

Przemysaw pyta take o moliwo zastosowania komputerka jako timera zegara, tematem tym zajm si w kolejnym odcinku przy okazji omawiania ukadu przerwa kontrolera i ukadu liczniko wego oraz sposobw praktycznego ich programowania. I na koniec uwaga Przemka dotyczca treci artykuu klasy mik roprocesorowej z 11 numeru EdW z poprzedniego roku, gdzie ob janiano przykad obliczania skoku do etykiety w gr. W artyku le wkrad si bd, napisano mianowicie, e: ... jeeli policzona ilo bajtw jest rwna 10 (0Ah), to przy skoku w gr bdzie: U2ofset = 100h F6h... Oczywicie zamiast liczby 100h powinno by FFh, za zwrcenie uwagi na bd w treci bardzo dzikuj, jak wida chochlik drukar ski nie pi.

*
Tomasz Jabonowski jako komputerowiec w swoim licie po rusza spraw sposobu pisania programw rdowych tak, aby by

42

ELEKTRONIKA DLA WSZYSTKICH 4/98

Te to potrafisz
Dzisiejszy odcinek klasy mikroprocesorowej to pierwsze po okrgym roku spotkanie z Wami. Tak moi drodzy, spotykamy si ju tak dugo. Jak wynika z listw ktre otrzymu j od Was, materia z 12tu miesicznikw, rednio po 10 stron co daj ponad 100 stron materiaw, wikszoci z Was wystarczy aby do tej pory pochwali si pierwszymi prosty mi, aczkolwiek funkcjonalnymi programikami na 8051. Mniej wicej poowa jednak ma na dal pewne problemy, bd to z pisaniem lis tingw, bd ich kompilacj (roczniacy) lub nawet z poprawnym uruchomieniem kompu terka edukacyjnego ktry opisaem 9 mcy te mu na amach EdW. Podejrzewam, e gdy bymy wszyscy spotykali si w jednej sali (tak jak w szkole) na zajciach z programowa nia, wszyscy z pewnoci byliby zadowoleni. Musimy zda sobie jednak spraw, e nauka programowania mikrokontrolerw (nie tylko 8051) jest tematem do zoonym, i wyma ga nie tylko cierpliwoci, lecz take nieco wy siku w samodzielnym myleniu i siganiu po dodatkow literatur zwizan nie tylko z te matem mikroprocesorw, ale i technik cyf row w szczeglnoci. Namawiam wic wszystkich, was drodzy Czytelnicy do korzystania takiego sposobu nauki, w ktrym przewodnikiem moe by publikowany w EdW cykl, ktry opracowuj co miesic specjalnie dla Was. A tak na marginesie mam nadziej, e 13ty odcinek szkoy mikroprocesorowej nie bdzie pechowy, i tym optymistycznym akcentem zapraszam wic do lektury.

Mikrokontrolery? To takie proste...


Cz 13
Ukad przerwa i ukad czasowolicznikowy
z UART u, procesor automatycznie przerywa wykonywanie programu i wykonuje skok do tzw. procedury (podprogramu) obsugi przerwania z portu szeregowego. Po wykonaniu tej procedury napisanej oczy wicie przez programist i koczcej si instrukcj RETI program powraca do kolejnej instrukcji ptli gwnej ktra nastpuje po tej przy ktrej nastpio przerwanie. A co si dzieje w podprogramie obsugi przerwania? Co nam przyj dzie do gowy, czyli przede wszystkim przepisanie danej z rejestru SBUF do innego rejestru, z obszary wewntrznej pamici danych pro cesora, aby nie straci cennego znaku, kiedy przyjdzie nastpny (i SBUF zostanie ponownie zmieniony). To tylko ilustracja wykorzystania systemu przerwa do wspomoenia pracy programu mikroprocesora. Przejdmy jednak od szczegowego omwienia rde wszystkich przerwa w mikrokontrolerze 8051 i sposobw ich wykorzystania w na szych programach. Ukad przerwa procesora moe przyjmowa zgoszenia nastpuj cych przerwa: zewntrzne: z wej /INT0 i /INT1 (piny P3.2 12, P3.3 13) (2 prze rwania) z portu szeregowego (jedno przerwanie) z ukadu licznikowego: przepenienie licznika T0, lub T1 oraz w przy padku procesora 80C52 z ukadu licznikowego T2 (dwa przerwania dla 8051) Zanim przejdziemy do omwienia kadego ze rde przerwa powin nimy sobie uzmysowi fakt istnienia tzw. znacznikw kadego z prze rwa. Znacznik fizycznie jest pojedynczym bitem zawartym w kilku re jestrach SFR procesora. W przypadku pocztkowym znacznik danego przerwania jest wyzerowany do bitu wpisane jest zero. W przypadku ustawienia znacznika przerwania (wpisania do niego jedynki) nastpuje zgoszenie przerwania. Wyzerowania znacznika to anulowanie zgosze nia. Kade z wymienionych przerwa posiada wasny znacznik zgosze nia przerwania. Znaczniki przerwa s ustawiane automatycznie przez procesor w momencie wystpienia warunku nadejcia przerwania, i tak dla poszczeglnych rde bd to: /INT0, /INT1 : opadajce zbocze sygnau na tym wejciu (lub poziom niski) zakoczenie odbioru lub nadawania znaku przez UART przepenienie licznika T0 lub T1 (zmiana zawartoci z 0FFFF na 0000h)

W poprzednim odcinku w praktyczny sposb omwiem port szere gowy mikrokomputera 8051 oraz sposoby transmisji danych poparte prostymi listingami. Dzisiaj przypomnimy sobie wiadomoci na temat omawianych wczeniej ukadw czasowolicznikowych oraz ukadu przerwa proce sora. Teraz kiedy zapoznalicie si z jzykiem procesora, bdzie mi at wiej pokaza w praktycznych przykadach sposb obsugi przerwa i licznikw mikrokontrolera.

Ukad przerwa
W jednym z pierwszych odcinkw szkoy mikroprocesorowej, przy okazji omawiania kocwek mikroprocesora, podaem przykad po rwnanie systemu przerwa mikroprocesora do sytuacji z ycia co dziennego. Wspominaem e sama nazwa przerwanie doskonale od zwierciedla sposb i znaczenie tego ukadu dla pracy caego mikropro cesora. Jeeli nie pamitasz, z czym si je temat ukadu przerwa, ra dz przypomnie sobie ten artyku. Przejdmy zatem do konkretw. W ukadzie mikrokontrolera 8051 istnieje kilka rde przerwa. rde, czyli dosownie mwic podukadw mikroprocesora, ktre mog generowa przerwania. I tak np. wemy omawiany w poprzed nim odcinku port szeregowy. Opisywaem, jak w prosty sposb mona np. odebra znak z portu szeregowego. Pamitasz, e podaem dwa przykady. Pierwszy mniej doskonay polega na cigym sprawdzaniu flagi RI odbioru znaku, i jeeli stwierdzalimy, e flaga ta zostaa przez procesor ustawiona, to znaczy e odebrano znak, ktry znajduje si w rejestrze SBUF i jest gotowy do odczytania. Wad tego sposobu by fakt niekoczcego oczekiwania na nadejcie bajtu danych z urzdzenia zewntrznego doczonego do portu szeregowego. Procesor po prostu nie robi nic innego jak tylko czeka na przyjcie znaku z portu. Drugi sposb wprowadza tzw. bd przeterminowania, kiedy to np. przy braku nadejcia znaku z portu szeregowego, procesor po okrelo nym w programie przez nas) czasie przerywa wykonywanie procedury czekania na znak z UARTa, i powraca do programu gwnego sygnali zujc bd przeterminowania. A gdyby tak w pewnych przypadkach dao si uniezaleni odbir znakw portu szeregowego (szczeglnie wtedy gdy nadchodz one w nieokrelonych przedziaach czasowych) od wykonywania ptli gw nej programu? Ot tu z pomoc moe przyj system przerwa mikrokontrolera. Ano wyobramy sobie sytuacj, kiedy program gwny wykonuje pew ne okrelone przez nas czynnoci, natomiast port szeregowy jest usta wiony w taki sposb, e w momencie kiedy zostaje odebrany znak

ELEKTRONIKA DLA WSZYSTKICH 5/98

37

Te to potrafisz
Poniewa jednoczenie w programie moe pracowa kilka ukadw generujcych przerwania, a same przerwania czasem nie s nam po trzebne, istnieje specjalny rejestr w obszarze SFR o nazwie IE (ang. Interrupt Enable zezwolenie na przerwanie), dziki ktremu moe my uaktywnia lub blokowa generowanie wybranych przerwa. Po szczeglne bity tego rejestru odpowiadaj za generowanie przerwania od okrelonego podbloku mikrokontrolera, a dodatkowo najstarszy bit tego rejestru pozwala na bezwarunkowe wyczenie systemu prze rwa. Bity te czsto nazywa si maskujcymi, co w praktyce oznacza, e wpisanie do niego jedynki powoduje uaktywnienie danej funkcji bi tu, wyzerowanie za to zablokowanie. Oto rejestr IE (adres w SFR A8h) i znaczenie jego poszczeglnych bi tw: I tak ze wzgldu na to e mamy w procesorze 8051 pi (w 8052 sze) rde przerwa, kade z nich posiada odpowiedni priorytet, i tak w kolejnoci od najmniejszego priorytetu do najwikszego jest: ET2, ES, ET1, EX1, ET0, EX0, czyli najmniej uprzywilejowanym jest przerwanie od licznika T2 (w 8052), da lej w kolejnoci (jak w rejestrze IE) wikszy priorytet ma przerwanie z portu szeregowego UART, dalej od licznika T1, z wejcia INT1, wresz cie od licznika T0, a najbardziej uprzywilejowanym jest przerwanie z we jcia /INT0. Kto zapyta, a co si stanie, jeeli nadchodzi przerwanie np. z wejcia INT1 i rozpoczte zostaje wykonywanie procedury obsugi przerwania dla tego wejcia, a w czasie jej trwania nadchodzi przerwanie o wy szym priorytecie np. z wejcia INT0?. A no wtedy procedura obsugi przerwania z INT1 zostaje natychmiast przerwana i procesor skacze do procedury obsugi przerwania z wejcia INT0. Kiedy j skoczy, powra ca (skacze) do miejsca skd nastpi skok gdy nadeszo przerwanie o wyszym priorytecie i program toczy si dalej, prawda e logiczne roz wizanie. Jak nad tym wszystkim zapanowa tak, aby program nie poszed w maliny, opowiem za chwil. ...No dobrze, ju wiem, o co chodzi z tym priorytetem przerwa, ale przecie moe zaj przypadek, kiedy mam taki ukad elektroniczny, w ktrym zastosowany procesor musi wykorzystywa przerwania z nie co inn kolejnoci priorytetw, i co wtedy? Czy jestem skazany na ustalon kolejno priorytetw przerwa? Odpowied brzmi nie. Ot istnieje dodatkowy specjalny rejestr tzw. priorytetw przerwa o na zwie IP (ang. Interrupt Priority priorytet przerwania). Znajduje si on pod adresem B8h jak si zapewne domylasz w obszarze SFR proce sora. Dziki niemu mona zmienia priorytety poszczeglnych prze rwa wymienionych wczeniej, powodujc e dane przerwanie majce dotd niszy priorytet moe uzyska wyszy, dziki odpowiedniemu ustawieniu bitw w rejestrze priorytetu IP. Oto szczegowe znaczenie poszczeglnych bitw tego rejestru:

EA (bit IE.7, adres: AFh) bit aktywacyjny systemu przerwa (=0 wszystkie przerwania s zablokowane, =1 odblokowane s te przerwa nia, ktrych bit jest ustawiony) bit IE.6 o adresie AEh jest nie wykorzystany ET2 (bit IE.5, adres: ADh) tylko w 80C52 (8052) bit maskujcy prze rwanie z licznika T2 ES (bit IE.4, adres: ACh) bit maskujcy przerwanie z portu szeregowego ET1 (bit IE.3, adres: ABh) bit maskujcy przerwanie z licznika T1 EX1 (bit IE.2, adres: AAh) bit maskujcy przerwanie z wejcia /INT1 ET0 (bit IE.1, adres: A9h) bit maskujcy przerwanie z licznika T0 EX0 (bit IE.0, adres: A8h) bit maskujcy przerwanie z wejcia /INT0 Czyli jeeli np. chcemy uaktywni przerwanie z wejcia zewntrzne go INT1, naley wykona instrukcje: SETB EX1 ;uaktywnienie przerwania z INT1 SETB EA ;globalne odblokowanie przerwa W przypadku chci uaktywnienia kilku przerwa np. z licznika T0 i ukadu transmisji szeregowej UART, mona wykona nastpujce ope racje: SETB ET0 ;uaktywnienie przerwania od T0 SETB ES ; uaktywnienie przerwania od UART a SETB EA ;globalne odblokowanie przerwa Poniewa wszystkie bity maskujce przerwania znajduj si w jed nym rejestrze, mona w/w instrukcje zapisa jako jedn: MOV IE, #10010010b prawda, e proste. W praktyce jeeli chcemy np. na jaki czas wyczy jakie przerwanie np. od licznika T0 wystarczy wykona instrukcj: CLR ET0 ;zablokowanie przerwania od T0 Jeeli za zachodzi potrzeba zablokowania caego systemu przerwa mona tego dokona wyzerowujc bit EA za pomoc instrukcji : CLR EA lub ANL IE, #7Fh ;7Fh = 01111111b Ten pierwszy sposb, kiedy operujemy na bitach jest bardziej czytel ny, dlatego polecam go w praktyce. Wan informacj jest fakt, e po resecie procesora rejestr IE jest wy zerowany, co oznacza e wszystkie przerwania s zablokowane (EA=0) oraz dodatkowo maski wszystkich przerwa s take zablokowane (IE.5 IE.0 = 0). Ze wzgldu na fakt e przerwania nie s przewanie generowane roz mylnie poprzez instrukcje programisty (a jak?... to proste przecie po przez ustawienie jednego ze znacznikw przerwa o tym za chwil) ale przez podbloki wykonawcze procesora, zatem moe si zdarzy sy tuacja, kiedy to w jednej chwili nadejd dwa lub wicej przerwania np. w tej samej chwili na wejciu INT1 pojawi si stan niski (generujc prze rwanie od /INT1) oraz przepeni si licznik T0 (generujc przerwanie od T0), i co wtedy, czy nie nastpi zatem jaki konflikt? Ot nie. Okazuje si bowiem, e projektanci mikrokontrolerw 8051 i pochodnych po myleli o takiej sytuacji i ustalili, e kade przerwanie procesor posiada odpowiedni priorytet. To bardzo wane sowo i dlatego warto je dobrze zapamita. Priorytet danego przerwania nad innym, w praktyce to znaczy, e w przypadku kiedy zajdzie przypadek jak przedstawiony powyej, kiedy w jednej chwili zachodz dwa rne przerwania, to w pierwszej kolej noci zostanie przyjte przerwanie o wyszym priorytecie i wykonana zostanie stosowna dla niego procedura obsugi przerwania (czyli nic in nego jak kawaek napisanego przez ciebie programu zakoczony in strukcj RETI). Przerwanie drugie o niszym priorytecie bdzie jak gdyby czeka na swoj kolej, a kiedy ta przyjdzie, zostanie ono przy jte i wykonana zostanie procedura obsugi tego drugiego przerwania (take zakoczona instrukcj RETI).

bity IP.7 i IP.6 nie wykorzystane PT2 (bit IP.5, adres: BDh) bit priorytetu przerwania z licznika T2 (tylko w 80C52,8052 PS (bit IP.4, adres: BCh) bit priorytetu przerwania z portu szeregowego. PT1 (bit IP.3, adres BBh) bit priorytetu przerwania z licznika T1 PX1 (bit IP.2, adres BAh) bit priorytetu przerwania z wejcia /INT1 PT1 (bit IP.3, adres BBh) bit priorytetu przerwania z licznika T1 PX1 (bit IP.2, adres BAh) bit priorytetu przerwania z wejcia /INT1 PT0 (bit IP.1, adres B9h) bit priorytetu przerwania z licznika T0 PX0 (bit IP.0, adres B8h) bit priorytetu przerwania z wejcia /INT0 I tak ustawienie jednego z bitw powoduje ustawienie danego prze rwania na wyszym poziomie i odwrotnie, wyzerowanie danego bitu powoduje ustawienie niszego priorytetu danego przerwania. W przy padku kiedy ustawimy wyszy priorytet kilku przerwa na raz, o kolej noci wykonywania poszczeglnych procedur obsugi przerwa decy duje ustalona wczeniej kolejno dla przypadku kiedy wszystkie bitu rejestru IP s rwne 0. Warto zatem powiedzie sobie, e podprogram (procedura) obsugi przerwania z umieszczonego na najwyszym pozio mie jest nieprzerywalna. W przypadku np. kiedy IP=0, bdzie to prze rwanie z wejcia /INT0. Po resecie procesora podobnie jak w przypadku rejestru IE, wszyst kie bity rejestru IP s wyzerowane (IP=0). ...No dobrze ale co fizycznie zachodzi, kiedy nadchodzi przerwanie, i o co chodzi z t procedura obsugi przerwania? Oto wyjanienie. Ot kiedy zajdzie warunek przerwania (kiedy znacznik danego prze rwania zostaje ustawiony), np. kiedy nadejdzie zbocze opadajce na wejciu /INT1, przy ustawionym bicie EX1 oraz uaktywnionym syste mie przerwa (EA=1) procesor wykona nastpujce operacje po pierwsze: sprawdzi czy nie jest wykonywana akurat procedura obsugi przerwania o wyszym priorytecie lub czy jednoczenie nie nadeszo przerwanie o wyszym priorytecie z innego rda po drugie (jeeli nie zdarzy si warunek z pierwszego): wyzeruje znacznik zgoszenia przyjtego przerwania. I tu wyjtek, nie s bo wiem automatycznie zerowane znaczniki przerwa: z portu szerego wego TI przy wysaniu znaku, RI przy nadejciu znaku, oraz z licz nika T2 w przypadku procesora 8052/C52. po trzecie: procesor zapisze na stosie zawarto 16bitowego liczni ka rozkazw PC i po czwarte : procesor automatycznie wpisze do licznika rozka zw PC ustalony fabrycznie adres pocztku programu (procedury) obsugi danego przerwania, oto te adresy dla poszczeglnych przerwa:

38

ELEKTRONIKA DLA WSZYSTKICH 5/98

Te to potrafisz
0003h dla przerwania z wejcia /INT0 000Bh dla przerwania z licznika T0 0013h dla przerwania z wejcia /INT1 001Bh dla przerwania z licznika T1 0023h dla przerwania z portu szeregowego oraz dodatkowo w procesorach 8052/C52 002Bh dla przerwania z licznika T2 Jak zauwaylicie, przytoczone adresy s ustalone fabrycznie a odda lone od siebie dokadnie o 4 bajty. Dlaczego akurat o cztery, zaraz si okae. W kadym razie zanim to wyjani, sprbuj oswoi Was przy tej okazji z okreleniem takiej struktury adresw, ktre obowizuje nie tylko w nazewnictwie zwizanym z 8051, ale wszystkimi ukadami mik roprocesorowymi, a mianowicie nazw: tablicy wektorw przerwa. Tablicy bo poszczeglne adresy oddalone dodatkowo rwno od sie bie (o 4 bajty) mog kojarzy si z tablic Wektorw bo ze wzgldu na tylko 4 bajty przeznaczone na podpro gram, fizycznie nie zapiszemy w tym miejscu podprogramu, a jedynie wpiszemy wskanik (wektor) pokazujcy gdzie w programie (pod jakim adresem) znajduje si waciwa procedura obsugi danego przerwania. Przerwa bo oczywicie cay zwrot dotyczy przerwa. ...Co oznaczaj te adresy, i jak je wykorzysta? Ot jak zapewne pamitacie po resecie procesora licznik rozkazw jest wyzerowany, co oznacza e procesor rozpoczyna wykonywanie programu od adresu 0000h. Z drugiej strony zauwacie, e pomidzy adresem 0000h a adresami procedur obsugi przerwa znajduj si zawsze 4 bajty na... program, czy to aby nie za mao? Ot nie! Istnieje przecie w licie rozkazw mikrokontrolera 8051 instrukcja skoku bezwzgldnego pod wskazany adres. Jest to LJMP, czasem AJMP (SJMP) Aby zbytnio nie namiesza Wam w gowach posu si przykadem. Zamy e chcemy napisa program, w ktrym wykorzystamy dwa rda przerwa: pierwsze z wejcia /INT0 drugie z licznika T1. Generalnie zatem program bdzie skada si z: instrukcji ptli gwnej programu oraz dwch procedur (podprogramw) obsugi przerwa: pierwsza dla wejcia /INT0, druga dla licznika T1. Podprogramy z reguy s ci giem minimum kilku instrukcji, ktre przecie nie zmieszcz si w 4 bajtach! Uyjemy wic wektorw przekierowujcych program z tablicy wektorw przerwa do waciwego miejsca w programie gdzie znajduje si waciwy dla danego przerwania podprogram. Przykadowy listing takiego programu mgby wyglda nastpujco: ;pocztek programu ORG 0000h ;pocztek wykonywania programu LJMP START ;skocz do etykiety pocztku programu ;gwnego ;tablica wektorw przerwa ORG 0003h ;pod adresem 0003h umieszczam LJMP intEX0 ;wektor czyli instrukcj skoku do ;procedury intEX0 ORG 001Bh ;a pod adresem 001Bh umieszczam LJMP intT1 ;wektor do procedury obsugi ;przerwania od T1 ;waciwy pocztek ptli gwnej programu START: .................. ;instrukcje inicjujce (pocztkowe) SETB EX0 ;uaktywnienie przerwania z /INT0 SETB ET1 ;uaktywnienie przerwania z T1 SETB EA ;globalne odblokowanie przerwa ........... ;inne instrukcje ptli gwnej ........... ........... ;tu pocztek podprogramu obsugi przerwania z /INT0 intEX0: ........... ;instrukcje dotyczce ........... ;procedury w przypadku ........... ;nadejcia przerwania z /INT0 reti intT1: ........... ;instrukcje dotyczce ........... ;procedury w przypadku ........... ;nadejcia przerwania z T1 reti END ;koniec programu z przerwa do miejsc w programie gdzie rozpoczynaj si waciwe procedury ich obsugi. W praktyce w zalenoci od rozmiarw kodu programu mona uy take instrukcji AJMP ale tylko kiedy wszystkie podprogramy znajduj si w pierwszych 2 kilobajtach kodu programu (czyli o adresach: 0000h....07FFh). Mona take umieszcza podprogramy obsugi prze rwa w rnych miejscach pamici programu w stosunku do ptli gw nej np. przed ni (w naszym przykadzie przed etykieta START). Czasa mi, w przypadku kiedy rozmiar dostpnej pamici programu jest do krytyczny (brakuje nam pamici) aby nie marnowa drogocennych baj tw, mona take zrezygnowa ze skoku typu LJMP, i rozpocz proce dur obsugi przerwania od adresu z tabeli wektorw przerwa. Oczy wicie dotyczy to przypadku, kiedy wspomniane przerwanie albo jest jedyne w uaktywnionych w systemie, albo jest na ostatnim miejscu w tabeli wektorw przerwa. W przypadku naszego przykadu listing mgby wyglda nastpujco: ;pocztek programu ORG 0000h LJMP START ;tablica wektorw przerwa ORG 0003h LJMP intEX0 ORG 001Bh ;pocztek wykonywania programu ;skocz do etykiety pocztku programu ;gwnego ;pod adresem 0003h umieszczam ;wektor czyli instrukcj skoku do ;procedury intEX0 ;a tu zaczyna si procedura obsugi ;przer. od T1

intT1: ........... ;instrukcje dotyczce ........... ;procedury w przypadku ........... ;nadejcia przerwania z T1 reti ;waciwy pocztek ptli gwnej programu START: .................. ;instrukcje inicjujce (pocztkowe) SETB EX0 ;uaktywnienie przerwania z /INT0 SETB ET1 ;uaktywnienie przerwania z T1 SETB EA ;globalne odblokowanie przerwa ........... ;inne instrukcje ptli gwnej ........... ........... ;tu pocztek podprogramu obsugi przerwania z /INT0 intEX0: ........... ;instrukcje dotyczce ........... ;procedury w przypadku ........... ;nadejcia przerwania z /INT0 reti END ;koniec programu Oczywicie w zasadzie etykieta intT1 jest w tym przypadku zbdna, informuje jedynie o tym e w tym miejscu zaczyna si procedura obsu gi przerwania od licznika T1. Mona by oczywicie przerzuci procedur intEX0 w miejsce pomi dzy instrukcj koczca procedur intT1 a etykiet START, w praktyce najczciej nie ma to adnego znaczenia. Program obsugi przerwania musi by zakoczony instrukcj RETI. Do tej instrukcji nie zostanie przyjte zgoszenie adnego przerwania z po ziomu rwnego (tego samego) lub niszego. Wreszcie kiedy procesor wykona instrukcj koczc podprogram przerwania (RETI) odtwarzany jest ze stosu adres powrotu sprzed wywoania i wpisany do licznika roz kazw PC procesora, po czym program gwny toczy si dalej. Jeeli chodzi o znaczniki zgoszenia przerwa to mona je wyowi z wkadki z EdW nr 11/97, gdzie znajduje si skrcony opis wszystkich rejestrw SFR procesora. Oto one: a) z wejcia /INT0: bit IT0 (adres: 88h) w rejestrze TCON (88h) b) z wejcia /INT1: bit IT1 (adres: 8Ah) w rejestrze TCON (88h) c) z licznika T0: bit TF0 (adres: 8Dh) w rejestrze TCON (88h) d) z licznika T1: bit TF1 (adres: 8Fh) w rejestrze TCON (88h) e) z portu szeregowego: bit TI w przypadku nadania znaku (adres: 99h) oraz bit RI w przypadku odbioru znaku z portu (adres: 98h) z rejestru SCON (98h) f) z licznika T2: bit TF2 (adres: CFh) dla przepenienia licznika T2 oraz bit EXF2 (adres: CEh) przy wykryciu opadajcego zbocza sygnau na tym wejciu (P1.1 w 8052/C52), oba znaczniki z rejestru steruj cego praca licznika T2 T2CON (C8h). Poniewa spraw ukadu czasowolicznikowego zajm si w drugiej czci artykuu, pozostaje mi do omwienia kilka dodatkowych informa cji dotyczcych obsugi i generowania przerwa zewntrznych z wej /INT0 i /INT1.

Tak wic jak wida z przytoczonego listingu w tablicy wektorw prze rwa umieszczone zostay jedynie skoki bezwzgldne dla kadego

ELEKTRONIKA DLA WSZYSTKICH 5/98

39

Te to potrafisz
I tak na wstpie wana informacja: przerwania te mog by zgasza ne opadajcym zboczem sygnau na tym wejciu (zmiana z poziomu lo gicznego H na L) lub poziomem niskim sygnau. Wybr naley do pro gramisty i moe by zmieniany za pomoc odpowiedniego rejestru, ale o tym za chwil. W praktyce rnica pomidzy tymi dwoma typami zgaszania prze rwa polega na tym, e: w przypadku zgoszenia przerwania opadajcym zboczem: procedu ra zostanie wywoana tylko jeden raz, nawet jeeli pierwsze jej wy woanie zostanie zakoczone (instrukcja RETI) a stan na wejciu /INTx po jej zakoczeniu nadal jest niski. w przypadku zgoszenia przerwania poziomem niskim: poziom na wejciu /INTx powinien zmieni si znowu na wysoki przed zako czeniem procedury obsugi przerwania (przed instrukcj RETI) w przeciwnym przypadku procedura obsugi zostanie wywoana po nownie. A oto wspomniany rejestr kontrolujcy przerwania zewntrzne: TCON (adres: 88h). Starsze 4 bity z tego rejestru obsuguj ukady cza sowo licznikowe, tote omwieniem ich zajm si za chwil. Wyobramy sobie sytuacj, kiedy to procesor spokojnie i sielan kowo wykonuje napisany przez ciebie program gwny i np. w tej chwili prbuje doda dwie liczby znajdujce si w rejestrach A i B, po czym bdzie chcia wypisa je na wywietlaczu naszego komputerka edukacyjnego korzystajc ze standardowej procedury A2HEX (dla uproszczenia przyjmujemy wypisanie wyniku bez najstarszego bitu wy niku umieszczonego w C). Aby to wykona zapewne posuy si instrukcjami: MOV A, #skadnik1 ;zaadowanie skadnika (1) ADD A, #skadnik2 ;i dodanie skadnika 2 (2) MOV B, #1 ;na 1szej pozycji (3) LCALL A2HEX ;wypisz zawarto Acc (4) ......... ;i rb cos dalej (5) W nawiasach podano numery linii. Popatrzmy, niech no wykonane zostan instrukcje z linii (1) i (2) oraz (3), w tym momencie, przed wykonaniem linii (4), kiedy wypisany zosta je wynik, nastpuje zgoszenie jakiego przerwania (obojtne jakiego) o program automatycznie skacze do odpowiedniego wskanika z tabli cy wektorw przerwa, a z tamt prawdopodobnie w inne miejscy pro gramu, gdzie znajduje si waciwa dla danego zdarzenia procedura ob sugi przerwania. Dla przykadu powiedzmy, e procedura ta wykonuje pewne oblicze nia i operacje na rejestrach, w tym m.in. na akumulatorze, np. intT2: MOV A, LICZNIK ADD A, #1 DA A MOV LICZNIK, A RETI No dobrze, po zgoszeniu przerwania i wykonaniu instrukcji zawar tych w procedurze procesor po wykonaniu instrukcji RETI powrci do linii (4) programu gwnego i.... no wanie, wypisana zostanie nie war to sumy dwch skadnikw, ale zawarto jakiego rejestru LICZNIK (zdefiniowanego gdzie wczeniej w programie przez programist). W efekcie wywietlacz pokae bzdury, a my nie bdziemy wiedzieli co si stao. Takich sytuacji moe by bardzo wiele. Jak zatem w prosty sposb mona si zabezpieczy przed skutkami modyfikacji rejestrw podczas wykonywania pojawiajcych si czsto nie std ni z owd procedur obsugujcych przerwania? Metoda jest bardzo prosta i polega na zapa mitywaniu wartoci uywanych w danej procedurze rejestrw na po cztku tej procedury, po czym przed kocem procedury obsugi prze rwania odtworzenie ich pierwotnej zawartoci i wykonaniu standardo wej ju instrukcji powrotu z przerwania RETI. Najprostszym i zdecydowanie polecanym, a praktycznie jedynym sensownym sposobem zapamitywania i odtwarzania rejestrw jest korzystanie ze stosu. Oto poprzedni przykad zmodyfikowany w sposb zabezpieczajcy zawarto akumulatora przed przypadkow utrata biecej wartoci, intT2: PUSH Acc ;zapamitanie akumulatora MOV A, LICZNIK ADD A, #1 DA A MOV LICZNIK, A POP Acc ;odtworzenie akumulatora RETI Jak wida stos w tym przypadku odda nam niesamowit przysug, bowiem za pomoc jednej instrukcji odoenia na stos a nastpnie zdj cia nie zakcilimy toku wykonywania czci gwnej programu aku mulator pozosta ten sam, a wynik na wywietlaczu bdzie z pewno ci poprawny. Kto moe w tym miejscu powiedzie, e przecie mona by podzie li uywane rejestry (w kocu w procesorze jest ich duo...) na dwie grupy w tym przypadku, jedna byaby modyfikowana w programie gwnym, a druga wykorzystywana by bya tylko w procedurze obsugi przerwania. Gdyby dao si tak zrobi w praktyce, byoby wspaniale, rzeczywisto jest jednak nieco mniej rowa. Co zrobi bowiem z re jestrami uniwersalnymi np. jednostki arytmetyczno logicznej ALU? Przecie jest tylko jeden rejestr Acc oraz np. rejestr B (nie mwic o wskaniku danych DPTR). Odpowied jest jedna: uywa stosu. W przypadku gdy w procedurze obsugi przerwania modyfikowanych jest wicej ni jeden rejestr, naley odkada je i zdejmowa ze stosu w sposb zgodny z zasad dziaania samego stosu, a mianowicie, to co pierwsze odoylimy to ostatnie zdejmujemy, czyli np. jeeli w naszym przykadzie procedury intT2 zaprzgniemy dodatkowy re jestr, prawidowa kolejno instrukcji bdzie nastpujca.

Bity dotyczce wej /INT0 i /INT1 procesora: IE1 (bit TCON.3, adres: 8Bh) znacznik zgoszenia przerwania na wejs ciu /INT1. Jest ustawiany sprztowo po wykryciu zgoszenia. Zerowany automatycznie przy przyjciu przerwania (przy wejciu do procedury ob sugi) IT1 (bit TCON.2, adres: 8Ah) bit sterujcy sposobem zgoszenia prze rwania na wejciu /INT1: opadajcym zboczem (IT1=1) lub poziomem niskim (IT1=0) sygnau zewntrznego IE0 (bit TCON.1, adres: 89h) znacznik zgoszenia przerwania na wejs ciu /INT0. Jest ustawiany sprztowo po wykryciu zgoszenia. Zerowany automatycznie przy przyjciu przerwania (przy wejciu do procedury ob sugi) IT0 (bit TCON.0, adres: 88h) bit sterujcy sposobem zgoszenia prze rwania na wejciu /INT0: opadajcym zboczem (IT0=1) lub poziomem niskim (IT0=0) sygnau zewntrznego Analizujc sposb zgaszania przerwa zewntrznych nie sposb nie powiedzie w jaki sposb fizycznie procesor rejestruje zajcie zgosze nia przerwania. Czy np. wejcia /INTx maj na wejciu jakie przerzut niki? Ot nie. Procesor w pewnych okresach kadego cyklu maszyno wego prbkuje stan wej /INTx, i jeeli w dwch kolejnych cyklach stwierdzi zmian stanu z 1 na 0 oznaczao to bdzie e nastpi waru nek zgoszenia przerwania. Dokadne zalenoci czasowe pomidzy fi zyczn zmian poziomu na wejciu przerywajcym /INTx a zgoszeniem przerwania mona znale w katalogach procesorw 8051 rnych pro ducentw (Philips, Atmel, itp.) Poniewa w praktyce rzadko zachodzi potrzeba takiej analizy, nadmie ni, eby wobec braku sprztowych przerzutnikw rejestrujcych opadajce zbocza na wejciach /INTx, kady z sygnaw przerywajcych (generowanych na kocwkach /INTx) trwa co najmniej przez 12 tak tw zegarowych procesora. W praktyce oznacza to, e np. w przypadku procesora pracujcego z kwarcem 12MHz najkrtsza jedynka i zero generowana na tym we jciu (przez ukad zewntrzny) wystarczajca jednake do wywoania przerwania w programie procesora, powinna trwa nie mniej ni 1 us (mikrosekund kady poziom) W sumie wyszo nam, e mona ju apa ujemne impulsy o czasie trwania 1 us (poziom niski). Z pewnoci niektrzy z czytelnikw odwrc sytuacj i stwierdz, e przerwanie /INTx mona teoretycznie generowa przy takim kwarcu prawie 500 000 razy na sekund (500kHz), tylko po co? Zreszt gdyby kto np. uaktywni przerwanie np. /INT0 i do tego we jcia /INT0 doczy generator przebiegu TTL o takiej czstotliwoci, to program procesora w praktyce zwariowaby, bowiem co chwil wy woywana by procedura obsugi przerwania z INT0, i nic innego w pro gramie nie byoby wykonywane. Dlatego pamitajc o tym naley roz sdnie wybiera zastosowania ukadu przerwa zewntrznych pamita jc take o wystpujcych tu ograniczeniach. Na koniec omawiania ukadu przerwa nie mona zapomnie o prak tycznej wskazwce dotyczcej pisania procedur obsugi przerwa. I tak przypomnijmy sobie stwierdzenie, mwice e procedura obsugi prze rwania rozpoczyna si w chwili nadejcia przerwania. Poniewa gene rowanie przerwania zazwyczaj zaley od mniej lub bardziej zoonych czynnikw zewntrznych, i nie jest z reguy przewidywalne w progra mie, moe nastpi sytuacja tzw. gubienia zawartoci rejestrw robo czych (np. akumulatora) po wykonaniu procedury obsugi przerwania.

40

ELEKTRONIKA DLA WSZYSTKICH 5/98

Te to potrafisz
intT2: PUSH PUSH MOV ADD DA MOV MUL MOV MOV POP POP RETI Acc B A, LICZNIK1 A, #1 A B, #3 AB LICZNIK1, A LICZNIK2, B B Acc ;zapamitanie akumulatora ;zapamitanie rejestru B

Te to potrafisz
w systemie. W przypadku uywania np. wszystkich czterech bankw oraz dodatkowo korzystania ze stosu (cho w ograniczonym zakresie) w procedurach obsugi przerwa, na pocztku programu naley wyko na instrukcj: MOV SP, #1Fh ;przesunicie wskanika stosu co spowoduje e aden z 32 rejestrw roboczych (4 banki po 8 R0...R7) nie zostanie zamazany w przypadku odoenia jakiej zmiennej w procedurze obsugi przerwania. Oczywicie uywanie pojcia bankw oraz takiej architektury rejest rw roboczych nie jest wymagane, mona przecie adresowa kady z nich (32) bezporednio za pomoc odpowiednich instrukcji MOV, np. MOV adres, #dana gdzie adres jest z zakresu <0...31>. Korzystanie z systemu bankw rejestrw roboczych powoduje jed nak, e listing programu, jest bardziej czytelny, a jego pniejsza anali za przez programiste szybsza.

;odtworzenie rejestru B ;odtworzenie akumulatora

Przy okazji omawiania systemu przerwa nie sposb nie wspomnie o dwch gwnych, czsto popenianych bdach pocztkujcy progra mistw podczas pisania pierwszych programw wyposaonych w pro cedur obsugi jednego lub kilku przerwa. Pierwszy bd polega na wykorzystywaniu zbyt duej liczby rejestrw w procedurze obsugi przerwania, a co za tym idzie koniecznoci odka dania na stos zbyt duej liczby danych. W efekcie czsto (szczeglnie w przypadkach kiedy pracuj wicej ni jeden rda przerwa) stos zo staje przepeniony tzn. e wskanik stosu zostaje zwikszony do war toci pod ktr w pamici wewntrznej RAM programista zaplanowa mniej lub bardziej wane (ale wane i przewidziane w programie!) zmienne programowe. W takim przypadku zmienne te zostan z pew noci zamazane, i nasz program bdzie do niczego. O tym jakie s spo soby omijania takich przypadkw, opowiem za chwil. Drugi bd polega na tym e programista tworzy zbyt dugi kod pro cedury obsugi przerwania. Przecie kada instrukcja zajmuje proceso rowi okrelon ilo czasu! W efekcie np. w sytuacji kiedy przerwanie zewntrzne (lub z przepenienia licznika) nadchodzi odpowiednio czsto czyli w okrelonych przedziaach czasu, moe doj do sytuacji, kiedy to w trakcie trwania nie zakoczonej jeszcze procedury obsugi prze rwania zajdzie ponowny warunek zgoszenia przerwania. W wikszoci takich przypadkw procesor po prostu zwariuje a cay program albo si zawiesi, albo pjdzie w przysowiowe maliny. Unikajmy wic takich przypadkw, i piszmy procedury obsugi prze rwa w taki sposb aby nie powodowa krytycznych bdw czaso wych, a przynajmniej zabezpieczajmy si przed nimi. Oczywicie nie w kadym przypadku obowizuje zasada pisania krt kich procedur obsugi przerwa. Bywaj przypadki (z dowiadczenia po wiem Wam e naley do nich kompleksowa procedura obsugi sygnau DCF77 i dekodowanie aktualnych danych o dacie i czasie), kiedy proce dura jest na pierwszy rzut oka do duga. Lecz sposb jej dziaania oraz maksymalny czas niezalenie od cyklu, jest przemylany w taki sposb, aby pozostawi bezpieczny margines czasowy i co najwaniejsze da czas procesorowi take na wykonywanie procedur obsugi innych prze rwa, a co najwaniejsze, na wykonanie instrukcji czci gwnej pro gramu. Wszystko to w warunkach kiedy mamy do czynienia z maymi wartociami czstotliwoci pracy procesora przy do czsto zachodz cy przerwaniach tak zewntrznych jak i wewntrznych. Na koniec omawiania systemu przerwa warto wspomnie o przewi dzianym w zasadzie do obsugi podprogramw przerwa systemie blo kw rejestrw roboczych : R0, R1, R2...R7. I tak w przestrzeni adreso wej wewntrznej RAM procesora (adresy 0...127) w pierwszych 32 re jestrach (adresy: 0...31) przewidziano cztery banki rejestrw R0...R7. Dostp do nich za pomoc operowania instrukcjami wykorzystujcymi nazwy rejestrw roboczych R0...R7, jest moliwy za pomoc odpo wiedniego ustawienia dwch bitw w omawianym ju w naszym cyklu sowie PSW (ang. Program Status Word, SFR adres: D0h). S to bity RS0 (adres: D3h) i RS1 (adres: D4h). I tak w zalenoci od kombinacji tych bitw uzyskujemy dostp poprzez nazwy robocze R0...R7 do na stpujcych rejestrw w wewn. RAM procesora:

Ukady czasowolicznikowe
W procesorze 8051/C51 mamy do dyspozycji 2 takie ukady (T0 i T1), a w koci 8052/C52 dodatkowo trzeci (T2). To, czym dokadnie s uka dy czasowolicznikowe, dowiedzielicie si drodzy Czytelnicy z jednego z wczeniejszych odcinkw klasy mikroprocesorowej. Zamieszczone tam informacje byy jednak (przy braku znajomoci jzyka asemblera 8051) do teoretyczne. Warto jest jednak je sobie odwiey przed lektur niniejszego paragrafu. Teraz kiedy opanowalimy (cho moe nie wszyscy w takim samym stopniu) sztuk bodaj prostego programowania procesora, bdzie mi atwiej zilustrowa podane wczeniej wiadomoci i sprowadzi je do czystej praktyki, wspartej jednak krtkimi, lecz niezbdnymi informacja mi na temat ukadw czasowo licznikowych. Z ukadami czasowo licznikowymi procesora 8051 zwizane s nie rozcznie dwa rejestry specjalne: TCON i TMOD Rejestr TMOD okrela tryby pracy ukadu czasowo licznikowego za rwno dla T0 jak i T1. Rejestr ten nie jest adresowany bitowo. Wszyst kie bity rejestru TMOD moga by zmieniane wycznie programowo czyli przez uytkownika.

Poowa rejestru (modsze 4 bity) okrela parametry ukadu licznika T0, natomiast 4 starsze bity okrelaj to samo lecz dla ukadu licznikowego T1. Z tego wzgldu przy opisie bd kierowa si tylko jednym z liczni kw. GATE bit uaktywnienia zewntrznego bramkowania licznika Tx (x=0,1). Kiedy GATE=0 to licznik pracuje wtedy kiedy bit TRx w sowie TCON jest ustawiony. Kiedy GATE=1 to licznik pracuje gdy TRx = 1 oraz wejcie INTx (x:1 to INT1, x:0, to INT0) jest w stanie wysokim (INTx=1). C/T bit okrelajcy funkcj jaka peni podczas pracy dany ukad liczni kowy, i tak gdy bit =0 to ukad pracuje jako czasomierz taktowany we wntrznym sygnaem zegarowym o czstotliwoci Fxtal / 12. Gdy za bit = 1, to ukad pracuje jako licznika impulsw zewntrznych z wejcia Tx (T1 lub T0). Temat maksymalnej czstotliwoci zliczanych impulsw zewntrznych poruszany by w czci 5 szkoy mikroprocesorowej. M1, M0 bity okrelajce wybr trybu pracy ukadu czasowoliczniko wego, i tak:

Zajmiemy si teraz rejestrem TCON, w ktrym 4 najstarsze bity s bezporednio powizane z ukadami czasowo licznikowymi procesora. Oto on.

W przypadku korzystania z tej cechy adresowania rejestrw robo czych procesora, naley pamita o odpowiednim przesuniciu wska nika stosu (ktry na pocztku po resecie procesora zawsze wskazuje na adres 07h) w zalenoci od iloci wykorzystywanych bankw rejestrw R0...R7, ktra to ilo czsto wie si z iloci uywanych przerwa

TF1 (bit TCON.7, adres: 8Fh) znacznik przepenienia licznika T1, jest sygnaem zgoszenia przerwania. Ustawiany jest automatycznie sprztowo, zerowany take automatycznie przy przyjciu przerwania.

ELEKTRONIKA DLA WSZYSTKICH 5/98

41

Te to potrafisz
TR1 (bit TCON.6, adres: 8Eh) bit sterujcy zliczaniem licznika T1. Gdy wyzerujemy go (TR1=0) to licznik si zatrzyma. Ustawienie (TR1=1) uruchamia licznik. TF0 (bit TCON.5, adres: 8Dh) znacznik przepenienia licznika T0, jest sygnaem zgoszenia przerwania. Ustawiany jest automatycznie sprztowo, zerowany take automatycznie przy przyjciu przerwania. TR0 (bit TCON.4, adres: 8Ch) bit sterujcy zliczaniem licznika T0. Gdy wyzerujemy go (TR0=0) to licznik si zatrzyma. Ustawienie (TR0=1) uruchamia licznik. Tak oto za pomoc dwch rejestrw TOMD i TCON mona sterowa trybami i zachowaniem si licznikw T0 jak i T1. Jak w praktyce wykorzystuje si liczniki? Ot podam kilka wskaz wek i podpowiedzi ktre wynikaj z codziennego uytkowania proce sorw 8051 oraz rnorodnoci ich zastosowa. Dla uatwienia bd operowa symbolik zwizan z licznikiem T0, pamitajc o tym e licz nik T1 mona traktowa tak samo. Na wstpie jedna wana uwaga: oba liczniki T0 i T1 zliczaj tylko w gr! Tryb 16bitowy licznika (tryb nr 1) wykorzystuje si czsto np. przy ge nerowaniu przerwa zwizanych z odmierzaniem czasu. Jak wykorzysta licznik do generowania opnie w systemie lub do zmusi go do odmierzania staych duszych odcinkw czasu? Ano na ley wraz z licznikiem, wykorzysta zwizane z nim przerwanie poja wiajce si w momencie przepenienia licznika. W jaki sposb i dlaczego? Popatrzmy. Skoro licznik ustawiony do pracy np. w trybie 16bitowym (zliczanie impulsw wewntrznych Fxtal / 12) to od jednego przepenie nia licznika do drugiego przepenienia licznika minie czas okrelony za lenoci: T = (10000h warto pocztkowa TH0.TL0 ) x 12 / Fxtal gdzie Fxtal to czstotliwo rezonatora kwarcowego procesora. Tote przed uruchomieniem do rejestrw licznika T0 wpisujemy np. za pomoc instrukcji MOV TH0, #.... MOV TH1, #.... warto pocztkow. Dziki temu np. przy kwarcu 12MHz warto 12 / Fxtal bdzie rwna 1 us (mikrosekundzie), co przy 16bitowym liczniku da moliwo gene rowania opnie czasowych z przedziau od kilku mikrosekund do 65535 us, czyli prawie 65,5 milisekundy, z rastrem 1 us. A co w przypadku chci generowania wikszy ni 65 ms odstpw czasowych? Mona oczywicie zmniejszy czstotliwo procesora, ale w praktyce robi si to zupenie inaczej. Ot w procedurze obsugi przerwania z danego licznika, ktry przecie co pewien, ustalony przez programist czas, przepenia si, naley umieci instrukcje rozszerza jce zakres danego licznika o np. dodatkowe 8 bitw (jeden bajt). Wte dy uzyskamy licznik 24bitowy, a to ju daje spore moliwoci. Jak to si robi praktycznie, przeczytacie w lekcji nr 8 w tym numerze. Do generowania nadaje si take doskonale tryb z 8bitowym liczni kiem taktowanym za porednictwem 5bitowego preskalera tryb nr 0. W trybach 0, 1 i 3 liczniki zarwno T0 jak i T1 po przepenieniu nale y ponownie zaadowa wartoci pocztkow, w przeciwnym przypad ku bd zliczay o zera. Wyjtkiem jest tryb nr 2 z automatycznym adowaniem wartoci po cztkowej z rejestru TH0 do 8bitowego licznika TL0 (to samo dotyczy licznika T1). Tryb ten oprcz odmierzania bardzo krtkich odcinkw czasu (w try bie pracy licznika jako czasomierza) ma dodatkowe zastosowanie do taktowania portu szeregowego w trybach: 1 i 3 (> patrz artyku w po przednim numerze EdW). Oto przykady programowania wstpnego rejestrw ukadw czaso wolicznikowych dla rnych trybw pracy licznikw. Wszystkie ozna czenia odnosz si do licznika T0 ale mona je take stosowa dla licz nika T1 w ten sam sposb. a) licznik MOV MOV MOV SETB T0 16bitowy pracujcy jako czasomierz (T1, nie uywany) TMOD, #0001b ;ustawienie trybu licznika TH0, #wartoH ;wpisanie wartoci TL0, #wartoL ;pocztkowych TR0 ;i start licznika Zatem do rejestrw: TH0.TL0 naley wpisa warto FC18h, np. za pomoc instrukcji: MOV TH0, #FCh MOV TL0, #18h w przykadzie a) byy to sowa wartoH i wartoL. Sprawdmy w teorii jak zadziaaj instrukcje i kiedy licznik si przepe ni, zapiszmy zatem: MOV TMOD, #0001b ;ustawienie trybu MOV TH0, #FCh ;wpisanie wartoci MOV TL0, #18h ;pocztkowej SETB TR0 ;i start licznika Kiedy licznik startuje jego warto wynosi FC18h, czyli dziesitnie 64536. Teraz licznik z kad mikrosekund bdzie zwiksza zawarto a do przepenienia, czyli przekroczenia FFFFh. Stanie si to po dokad nie 3E8h (1000 dziesitnie) cyklach zliczania czyli mikrosekundach. A przecie 1000 mikrosekund to 1 milisekunda, czyli wszystko jest w porzdku. Nie naley tylko w przypadku chci cyklicznego powtarza nia odmierzania takich samych odstpw czasu, zapomnie o koniecz noci ponownego wpisywania warto pocztkowej do licznikw TH0 i TL0, zaraz po wejciu do procedury obsugi przerwania. Licznik bo wiem po przepenieniu nadal pracuje (zaley to tylko od stanu bitu TR0 w rejestrze TCON). Wspomniana procedura moe wyglda nastpujco: intT0: MOV TH0, #FCh ;wpisanie wartoci MOV TL0, #18h ;pocztkowej PUSH ...... ;dalsze instrukcje .............. ;procedury obsugi przerwania .............. .............. POP ...... reti I tu powstaje pewna nieciso, ot zauwamy, e od czasu prze penienia licznika do rozpoczcia procedury obsugi przerwania oraz przeadowania zawartoci TH0 i TL0 licznika, upywa zawsze troch cza su procesora, a licznik bezustannie zlicza, tym razem od zera. Zatem aby uzyskane interway czasowe pokryway si z naszymi zaoeniami, naley uwzgldni zliczone do czasu przeadowania rejestrw TH0 i TL0, impulsy, korzystajc z instrukcji ORL i przeadowywa rejestry licznika w sposb nastpujcy: intT0: ORL TL0, #18h ;dodanie logiczne kilku ;impulsw pocztkowych MOV TH0, #FCh ;wpisanie wartoci starszego ;bajtu licznika PUSH .............. .............. .............. POP reti ...... ;dalsze instrukcje ;procedury obsugi przerwania

......

Jak obliczy wartoci pocztkowe? Posu si przykadem. Ot za my e pracujemy z kwarcem 12MHz, czyli licznik zwiksza swoja za warto co 1 s. Jeeli zatem chcemy odmierza np. 1 ms odstpy czasu (od jednego przepenienia do drugiego przepenienia ma upyn dokadnie 1 ms), to obliczamy warto pocztkowa licznika w sposb: warto pocztkowa = 65536 (1 ms / 1 us) = 65536 1000 = 64536 = FC18h (szesnastkowo)

Jednak i w tym przypadku bd bdzie wyeliminowany w przypadku, jeeli od czasu przepenienia do zgoszenia przerwania nie upynie wi cej ni 7 cykli maszynowych procesora. Zauwamy, bowiem e instruk cja ORL (dodawania logicznego) sumuje poszczeglne bity, a nie doda je arytmetycznie dwie liczby. Zatem w przypadku liczby 18h, ktra mo e by zapisana binarnie jako: 00011000b trzy najmodsze bity s rne zero i dlatego zsumowanie bdzie popra wne tylko z liczb z zakresu 1...7. Dlatego przy programowaniu naley o tym pamita i ewentualnie tak definiowa warto pocztkow, aby wyeliminowa bd tzw. pierwszych impulsw. Kto powie, no dob rze, ale przecie mona by doda te liczby arytmetycznie uywajc in strukcji dodawania np. ADD, no tak ale po pierwsze angaujemy w to akumulator Acc, po drugie operacja dodawania ADD te trwa przed okrelon liczb cykli zegarowych, tote niewiele to zmieni. W kadym razie dusza praktyka i testowania generowanych przez was procedur pozwoli na dokadne zgbienie problemu i znalezienie na niego niejednego rozwizania. Przykady takich rozwiza podam przy najbliszej okazji w jednym z kolejnych odcinkw szkoy mikroproceso rowej. b) licznik zlicza impulsy okrelon przez nas liczb impulsw zewn trznych z zakresu 1...255 a nastpnie sygnalizuje koniec zliczania wyge nerowaniem przerwania. Wykorzystamy tryb 2 licznika gdzie TL0 pra

42

ELEKTRONIKA DLA WSZYSTKICH 5/98

Te to potrafisz
nerowaniem przerwania. Wykorzystamy tryb 2 licznika gdzie TL0 pra cuje z automatycznym wpisywaniem wartoci pocztkowej z TH0. MOV TMOD, #0110b ;ustawienie trybu licznika MOV TH0, #liczba ;wpisanie wart. pocztkowej MOV TL0, TH0 ;konieczne ! SETB TR0 ;rozpoczcie zliczania przy czym warto liczba jest rwna: liczba = 256 liczba impulsw zewntrznych do zliczenia c) Tak na marginesie w podobny sposb mona przystosowa licznik T1 do taktowania portu szeregowego, oto sposb MOV TMOD, #00100000b ;ustawienie trybu licznika T1 ;(T0 stoi) MOV TH1, #baud ;wpisanie prdkoci transmisji MOV TL1, TH1 ;tu nie jest konieczne SETB TR1 ;i start taktowania W miejsce baud naley wpisa liczb okrelajca szybko trans misji portu szeregowego. Wartoci przykadowe oraz sposb obliczania znajduje si w poprzednim odcinku klasy mikroprocesorowej. W kadym z przypadkw zapisywalimy bezporednio rejestr TMOD okrelajc sposb pracy ukadu czasosolicznikowego T0 i T1. Jednak w pewnych przypadkach, w programie moe zaj potrzeba modyfika cji trybu jednego licznika przy niezmienionym i niezakconej pracy dru giego licznika. Wtedy uycie komendy MOV TMOD, #warto moe okaza si do ryzykowne. Prostym rozwizaniem jest maskowanie tej czci bajtu TMOD ktra odpowiada za danych licznika, a ktrego nie chcemy zmienia. I tak elegancki zapis modyfikacji np. z przykadu c) bdzie wyglda nastpujco: ANL TMOD, #0Fh ;licznika T0 nie ruszamy ORL TMOD, #00100000b ;ustawienie trybu licznika T1, ;T0 bez zmian MOV TH1, #baud ;wpisanie prdkoci transmisji MOV TL1, TH1 ;tu nie jest konieczne SETB TR1 ;i start taktowania W pierwszej komendzie listingu po prostu wyczycilimy najpierw 4 bardziej znaczce bajty rejestru TMOD (pamitajmy e nie mona ad resowa go bitowo), a nastpnie zapisalimy do nich odpowiedni tryb pracy licznika T1. W taki sam sposb naley postpowa z licznikiem T0, maskujc wtedy bity licznika T1. Pozostaa nam jeszcze ukad czasowolicznikowy T2, ktry ze wzgl du na wiele ciekawych funckji dodatkowych (w porwnaniu z T0 lub T12) omwi w kolejnym odcinku szkoy mikroprocesorowej. Na razie zapraszam do lektury kolejnej lekcji nr 8. Dzisiaj poczymy wiedz z zakresu przerwa sprztowych i liczni kw i przeanalizujemy procedur realizujca funkcje zegara czyli od mierzania czasu rzeczywistego: sekundy, minuty, godziny, dni, miesi ce a nawet lata. Sawomir Surowiski Od redakcji. Ze wzgldu na ograniczona objto rubryki, a jedno czenie ch zamieszczenia caego artykuu serii Mikrokontrolery, to takie proste..., kcik pocztowy w podwjnej objtoci znajdzie si w nastpnym numerze EdW.

Lekcja

8
czyli w komrce wew. RAM procesora o adresie 62h bd zliczane sekundy czasu rzeczywistego z wykorzystaniem instrukcji korekty dziesitnej akumulatora: DA A czyli np. jeeli licznik sekund bdzie zawiera np. 09 (heksadecymalnie) to po inkrementacji zwikszeniu o jeden powinien wskazywa (zgodnie z zapisem BCD) 10 (heksadecymalnie) Wtedy przy uyciu procedury Bios a komputerka A2HEX (patrz opis z poprzednich lekcji klasy mikroprocesorowej) bdzie mona atwo wywietli w czytelnej postaci aktualn warto sekund. Podobnie postpimy z minutami i godzinami. Wystarczy bowiem wyda ko mendy, np.: mov A, SEK mov B, #7 lcall A2HEX aby na DL7 i DL8 pojawia si aktualna warto sekund aktualna za warto licznika sekund SEK. A co (lub kto) zajmie si inkrementacj sekund, minut i godzin? Wanie procedura obsugi przerwania od jednego ukadu czasowo licznikowego. W ptli gwnej programu my bdziemy troszczy si jedynie o wywietlanie na displeju komputerka wartoci godzin mi nut i sekund. W prosty sposb take wywietlimy tzw. migajcy dwukropek w postaci kresek (mylnikw) pomidzy pozycjami go dzin i minut oraz minut i sekund w postaci: DL 1 2 3 4 5 6 7 8 G G M M S S gdzie: GG pozycje godzin MM pozycje minut SS pozycje sekund Np. godzina 12:34 i 57 sekund bdzie wywietlana jako: 123457

W dzisiejszej lekcji zbierzemy nasze wiadomoci dotyczce ukadu przerwa mikroprocesora oraz informacje przedstawione w dzi siejszym numerze EdW o ukadach czasowo licznikowych. Tematem lekcji bdzie napisanie i wsplne przeanalizowanie pro cedury zliczania czasu rzeczywistego (sekund, minut i godzin) wy korzystujc przerwanie pochodzce od jednego z dwch uka dw czasowolicznikowych procesora 8051. Poczenie waciwoci zliczania wewntrznych impulsw zegaro wych przez ukad licznikowy wraz z odpowiednim generowaniem przepenienia tego licznika czyli generowania przerwania pozwoli na dokadne odmierzanie sekund, a co za tym idzie minut oraz godzin.
Oprcz wspomnianej procedury, pracujcej w przerwaniu (czyli okresowo) utworzymy take prociutki fragment programu pozwalajcy na wprowadzenie przez uytkownika czasu : godzin, minut i sekund, po czym po wciniciu dowolnego klawisza, uruchomienie zegara i rozpo czcie zliczania czasu wraz z jego wywietlaniem. Tak powstay program mona bdzie zaadowa do komputerka i uru chomi. Poniewa problem odmierzania czasu spotykany jest bardzo czsto przy okazji ukadw mikroprocesorowych, niniejsza lekcj nale y przestudiowa bardzo uwanie, analizujc wszystkie zawarte w niej komentarze oraz zamieszczony listing programu zegara. Zrozumienie problemu implementacji zegara czasu rzeczywistego oraz waciwego generowania przerwa systemowych jest bowiem podstaw do dalszych, czsto przeprowadzanych samodzielnie ekspe rymentw. A oto zaoenia do programu: 1. W programie rezerwujemy 3 komrki w wew. pamici RAM proce sora,jedna bdzie zlicza sekundy, druga minuty, trzecia godziny. 2. Zliczanie bdzie odbywa si w kodzie BCD, czyli kadej pozycji licz by np. sekund bd odpowiada 4 bity danej komrki pamici, oto wyjanienie: niech bajt zliczajcy sekundy nazywa si SEK, zdefiniujemy go ja ko np. SEK equ 62h

ELEKTRONIKA DLA WSZYSTKICH 5/98

43

Te to potrafisz
z migajcymi znakami (mylnika). Zauwacie e 8 pozycji wy wietlacza komputerka akurat wystarcza na wywietlenie czasu w takiej wanie formie (ktr oczywicie naley traktowa jako przy kadow. Korekta dziesitna akumulatora po inkrementacji danej jednostki czasu (sekund, minut lub godzin) jest niezbdna, bowiem w przeciw nym przypadku po sekundach rwnych 09 nastpio by wywiet lenie wartoci 0A, a tego bymy nie chcieli. 3. Do wygenerowania okresowo powtarzajcej si procedury obsugi przerwania, w ktrej bd odpowiednio inkrementowane komrki sekund, minut i godzin wykorzystamy ukad czasowo licznikowy T1 komputerka. Uycie licznika T0 jest niemoliwe, a przynajmniej nie na tym etapie nauki, ze wzgldu na to e jest on ju zajty multiplek sowym wywietlaniem informacji na wywietlaczu DL1...8 kompu terka, dajmy wic mu spokj. 4. Dodatkowo w ptli gwnej programu przed uruchomieniem zegara, do damy kilka instrukcji dziki ktrym bdzie mona wpisa aktualny czas czyli po prostu nastawi nasz zegarek, a nastpnie go uruchomi. Wstpne obliczenia wariant 1 W komputerku AVT2250 procesor 8051 pracuje z czstotliwoci re zonatora kwarcowego o wartoci 11,0592 MHz, czyli Fxtal = 11059200 Hz. Zatem 1 cykl maszynowy procesora bdzie trwa dokadnie: Tm = 12 / Fxtal = 12 / 11059200 = 1,085069444 s (mikrosekundy) Jak ju wiesz, kady z licznikw procesora (T0, lub T1) pracujc w try bie czasomierza zlicza wewntrzne impulsy zegarowe w czstotliwoci Fxtal / 12 = 11059200 / 12 = 921600 Hz co jest dokadnie odwrotnoci obliczonego wczeniej okresu cyklu ma szynowego procesora Tm. Zatem mona powiedzie eby np. przepenia licznik T1 co 1 sekun d i generowa przez to przerwanie, trzeba by licznik ten zliczy: n = 1 / Tm = Fxtal / 12 = 921600 impulsw Niestety, nawet w trybie 1, kiedy licznik pracuje jako 16bitowy (tryb 1), jest w stanie zliczy jedynie 2161 impulsw, czyli 65535. Mo na zatem powiedzie e licznik moe si przepenia najrzadziej co: t = 65536 x Tm = 71,111(1) ms (milisekund) a to stanowczo za mao. C wic w tej sytuacji naley zrobi? Odpowied na to pytanie jest prosta. Naley przepenia licznik cz ciej ni co sekund np. 256 razy na sekund (z czstotl. 256 Hz), a w procedurze obsugi przerwania licznika wprowadzi dodatkow zmienn licznik (bajt w wew. RAM procesora), ktry bdzie inkremen towany (ju bez korekcji dziesitnej) za kadym razem kiedy, nastpi przepenienie licznika. W ten sposb, w przypadku kiedy licznik ten b dzie osiga np. warto maksymaln 255 bdzie to sygnaem e mi no wanie 256 okresw po 1/256 sekundy, co w efekcie oznacza e mina dokadnie 1 sekunda i czas wobec tego zwikszy licznik sekund (a co za tym idzie w razie potrzeby licznik minut i godzin). Prawda e lo giczne, i tak te zrobimy! Dlaczego wybraem warto 256 Hz do zliczania nazwijmy to pod sekund, a nie np. 100 (to by byo super zlicza take setne sekundy!). Tak to logiczne pytanie, tylko e w przypadku wartoci rezonatora kwar cowego 11059200 Hz zliczanie 1/100 sekundy byo by do kopotliwe, ze wzgldu e ta warto Fxtal nie dzieli si przez 12 i przez liczb ca kowit aby da wanie 100. Za to dzieli si przez 12 i przez 256 co w efekcie daje war 3600 (dziesitnie) co w efekcie wyznaczy nam z podanej to: T1imp=3 niej zalenoci warto pocztkowa licznika T1, ktra spowoduje e przepenienie licznika nastpi dokadnie po 1/256 sekundy. TH1.TL1 = T1max T1imp + 1 = 65535 3600 + 1 = 61936 = F1F0h (hexadec.) Zatem wartoci pocztkowa licznika przy rezonatorze 11059200 Hz i przy zaoonym okresie przepeniania rwnym 1/ 256 sek. jest liczba F1F0h, ktr mona zapisa do rejestrw SFR licznika za pomoc in strukcji np. mov TH1, #0F1h mov TL1, #0F0h Wszystko byo by dobrze, ale nie moemy zapomnie o drobnym, aczkolwiek istotnym fakcie, a mianowicie, e od przyjcia przerwania do kadorazowego przeadowania licznika w procedurze przyjcia prze rwania mija bliej nieokrelona liczba cykli maszynowych, w ktrych licznik cigle zlicza impulsy po przepenieniu czyli od wartoci 0000h. Wprawdzie mona policzy ile cykli maszynowych przez ten czas, ale trzeba zna wszystkie rozkazy ktre znajduj si po drodze, czyli: a) cykle od przepenienia licznika do przyjcia przerwania w praktyce jest ich 2 (w przypadku kiedy przerwanie ma najwyszy priorytet, lub nie trwa obsuga przerwania o wyszym priorytecie); b) cykle potrzebne na skok do tablicy wektorw przerwa w przypad ku licznika T1 procesor automatycznie wykona skok pod adres poda ny w artykule: 001Bh Pod tym adresem powinien znajdowa si skok do waciwej proce dury obsugi przerwania w postaci instrukcji np. : ljmp intT1 no tak ale gdzie fizycznie jest ta etykieta ten adres? Przecie nie mone znajdowa si w obszarze zewntrznej pamici RAM procesora, w ktrym znajduje si zawarty w EPROMie monitor komputerka AVT2250. Nie mona bowiem w miejsce w ktrym zna jduje si Bios zawarty w EPROM ie wpisa instrukcji naszego progra mu obsugi zegara. Co zatem zrobi, czyby nie dao si nijako ujarzmi przerwania i przekaza jego wektora w obszar zewntrznej pamici operacyjnej komputerka czyli w miejsce gdzie adowany jest kod pro gramu uytkownika pami SRAM? Mona. Konstruktor komputerka, czyli Ja przewidziaem taka moliwo i po stanowiem w prosty sposb wyprowadzi wszystkie wektory prze rwa z pamici Biosa komputerka w obszar pamici SRAM, w miejsce ustalone dodatkowo przez uytkownika, a to ci dopiero gratka! Aby wyjani to przypomn e tabela wektorw przerwa dla 8051 przedstawia si nastpujco: Adres Opis 03h 000 przerwanie z wejcia /INT0 0Bh 000 przerwanie z licznika T0 13h 001 przerwanie z wejcia /INT1 1Bh 001 przerwanie z licznika T1 23h 002 przerwanie z portu szeregowego W programie Bios a komputerka w miejscu kadego wektora znajdu je si skok typu LJMP do tzw. procedury inicjujcej przerwanie z kt rej to dopiero nastpuje skok do waciwego miejsca w zewntrznej pamici SRAM operacyjnej. Wspomniana procedura inicjujca (nie dotyczy to licznika T0) jest tak zbudowana, e powoduje ona skok pod adres w zewn. SRAM kompu terka pod adres, ktrego: modszy bajt (pogrubione w tabeli) nie zmienia si starszy bajt jest brany z komrki w wew. RAM procesora o adre sie 72h (patrz opis Biosa komputerka) Komputerowcy mog w tym miejscu zajrze do zbioru CONST.INC na dyskietce AVT2250/D i sprawdzi deklaracj intvec equ 72h ktra potwierdza te zaoenie. Zatem reasumujc jeeli na pocztku naszego przykadowego progra mu przed uruchomieniem ukadu przerwania od licznika T1 wpiszemy do tej komrki (wew. RAM!) liczb np. 80h, to tabel wektorw prze rwa procesora 8051 zostanie niejako wyprowadzona do obszaru o adresach jak poniej: Adres Opis 8003h przerwanie z wejcia /INT0 800Bh przerwanie z licznika T0 8013h przerwanie z wejcia /INT1 801Bh przerwanie z licznika T1 8023h przerwanie z portu szeregowego Bardziej zaawansowani i wnikliwi czytelnicy zauwa w tym miejscu ciekawy fakt, mianowicie, e takie postpowanie Bios a komputerka umoliwia kontrolowanie wszystkich rde przerwa a nawet zabloko wanie wywietlacza (ktry pracuje na przerwaniu od licznika T0) i wyko rzystanie go do wasnych celw, czego na razie stanowczo odradzam. Podaem liczb 80h nie przypadkowo, bowiem od tego adresu 8000h na pytce komputerka (przy zaoeniu e zwora JP3 jest w pozycji 8000h) zaczyna si pami operacyjna gdzie adowany bdzie program. Podsumowujc przeledmy co fizycznie si stanie w przypadku przepenienia licznika T1: zgoszone zostaje przerwanie procesor skacze do pierwotnej tablicy wektorw przerwa, czyli pod adres 001Bh; jest to jednake obszar pamici EPROM Biosu, gdzie zawarta jest instrukcja: LJMP intT1 czyli skoku do etykiety intT1, ktra to znowu etykieta znajduje si tak e w obszarze Bios a komputerka a za ni znajduj si instrukcje servT1: push Acc push DPH push DPL clr A mov DPH,intvec ;pobranie zewn. wektora T1 mov DPL,#1Bh jmp @A+DPTR

44

ELEKTRONIKA DLA WSZYSTKICH 5/98

Te to potrafisz
Zadaniem tych instrukcji jest zapamitanie modyfikowanych w proce durze przerwania rejestrw s to Akumulator i rejestr DPTR (DPH i DPL), a nastpnie wykonanie skoku bezwarunkowego (ostatnia instruk cja) pod adres bdcy sum zawartoci akumulatora (rwny 0) oraz wskanika DPTR. Zanim to jednak nastpuje, wskanika DPTR jest ado wany wspomnianym wczeniej adresem bdcym zoeniem starsze go bajtu (DPH) rwnego zmiennej intvec (adres 72h), ktr modyfiku je uytkownik w naszym przypadku bdzie to 80h, oraz modszego baj tu bdcego odpowiednikiem pierwotnej tabeli wektorw przerwa, czyli 1Bh. W sumie procesor wykona skok pod adres: 801Bh, gdzie po winna znajdowa si napisana przez nas procedura obsugi przerwania od licznika T1, a obsugujca zliczanie czasu rzeczywistego. Uff, troch to skomplikowane, ale niestety niezbdne, bowiem w przypadku korzystania z zestaww edukacyjnych czsto z zawartym w nich mniej lub bardziej skomplikowanym Biosem (a do takich naley AVT2250) tak procedura jest konieczna. W przyszoci w autonomicz nych ukadach opartych o 8051 i podobne, a nie wykorzystujcych na szego Biosa komputerka, przedstawione kroki s do pominicia. Pro cesora po prostu skoczy do pierwotnej tabeli wektorw przerwa a na stpnie wykona skok do waciwego miejsca w Twoim programie, tam gdzie znajduje si procedura obsugi danego przerwania. Wracajc do tematu zauwamy jednak, e procesor na tych kilku eta pach od przepenienia licznika do skoku wreszcie do waciwej proce dury obsugi przerwania potrzebowa bdzie prawdopodobnie kilkunas tu cykli procesora, podczas (jeszcze raz powtarzam) pracuje licznik T1! I to wanie moe sta si powodem bdu w dokadnym okresowym (co 1/256 sek) generowaniu przepenienia licznika T1 i co za tym idzie powstania przerwania. Z grubsza mona policzy, (na podstawie tabeli instrukcji z wkadki EdW) e zanim procesor przeaduje licznik w procedurze przerwania, to licznik zdy ju zliczy od 0000h mniej wicej 17 impulsw mona to intT1. policzy analizujc instrukcje z ostatniego listingu od etykiety i Mog nie pomc instrukcje uwzgldniajcy ten fakt, o ktrych wspo minaem w artykule przed niniejsz lekcj typu: orlTL1, #... orlTL1, #.... mov TH1, #.... pomc jedynie moe i to z doskonaym skutkiem inny tryb pracy liczn ka T1 a mianowicie tryb 0. Jak pamitasz w trybie tym licznik pracuje jako 8bitowy (liczy TH1), a sygna zegarowy (Fxtal / 12) jest dzielony dodatkowo przez 5bi towy preskaler (czyli w praktyce przez 32) czyli rejestr TL1. Dla nas i naszych kopotw oznacza to tylko jedno wybawienie, bo wiem fakt, e do licznika TH1 trafia co trzydziesty drugi impuls (przez preskaler dzielnik TL1) pozwoli nam na uniknicie wspomnianego b du kilkunastu cykli zegarowych od zgoszenia przerwania do jego przy jcia i przeadowania licznika T1. Po prostu w czasie kiedy bd wykonywane te wszystkie skoki z jednej tablicy wektorw do drugiej a potem do waciwej procedury obsugi przerwania (o ktrych mwiem wczeniej) licznik nie zdy zli czy ani jednego impulsu i oto chodzi. I cho w teorii wydaje si to niepotrzebn komplikacj, to w prakty ce tryb 0 licznika jest najbardziej wygodnym i pewnym, jeeli chodzi o generowanie opnie niezbdnych do odmierzania czasu szczegl nie rzeczywistego. Niestety musimy w tym celu zmieni nieco nasze obliczenia. Wstpne obliczenia wariant 2 Korzystamy z trybu 0 licznika T1. W tym trybie pracuje poowa liczni ka a mianowicie TH1, ktry moe zliczy maksymalnie 255 impulsw. Jednak czstotliwo tych impulsw bdzie mniejsza ni w wariancie 1, bowiem przed licznikiem TH1 znajduje si 5bitowy preskaler czyli nic innego jak dzielnik przez 32. Wobec tego czstotliwo impulsw zli czanych przez nasz licznik TH1 bdzie wynosia: fz = Fxtal / 12 / 32 = 28000 Hz Poniewa podobnie jak w wariancie 1, liczba ta przekracza aktualn pojemno licznika tym razem 8bitowego TH1, naley zastosowa licznik poredni na zasadach takich jak poprzednio. Zamy e stopie podziau bdzie taki sam czyli 256, ale wtedy fz nie podzieli si przez 256, bowiem : fz / 256 = 28800 / 256 = 112,5 czyli nie jest liczb cakowit, a to jest niedopuszczalne. Przyjmijmy za tem podzia poredni jako mniejszy o rzd (w kodzie dwjkowym o 2), bdzie to zatem 128. Wtedy : fz / 128 = 28800 / 256 = 225 ( = TH1imp ) Podsumowujc, mona powiedzie, e jeeli licznik TH1 zliczy za ka dym razem 225 impulsw o czstotliwoci fz (28800 Hz) to zajmie mu to dokadnie 1/128 sekundy. Jeeli do tego dodatkowy poredni licz nik zliczy te 128 uamkw sekundy to w sumie bdziemy mieli od mierzon pen sekund! I o to wanie chodzi. Pozostaje jeszcze jeden drobiazg, mianowicie obliczenie wartoci po cztkowej licznika T1 na podstawie obliczonej liczby impulsw ktre po winien zliczy do przepenienia, bdzie to zatem: TH1pocz = TH1max TH1imp + 1 = 256 225 + 1 = 31 I tak wanie warto naley wpisywa do licznika TH1 za kadym razem po jego przepenieniu. Wnikliwy czytelnik moe szybko przeana lizowa obliczenia z odwrotnej strony na podstawie formuy: (256 TH1pocz) x 128 x 32 x (12 / Fxtal) = 1 sekunda nie mniej nie wicej! (pamitaj: Fxtal = 11059200 Hz) Na podstawie tych rozwaa, mona zabra si do pisania programu. Listing poniej przedstawia cay program wraz z procedur obsugi prze rwania. Kada linia, znana ju zarwno komputerowcom jak i rcznia kom, jest poprzedzona numerem linii, dziki czemu bdzie mi atwiej tumaczy po krtce kad z nich. Uwaga, linie komentarzy bd pomi ja, a wic zaczynamy (rczniacy mog zacz rwnoczenie wklepy wa kod programu umieszczony w kolumnie trzeciej). Linie 18...20 : na pocztku definiuj adresy komrek zliczajcych se kundy, minuty i godziny, ot tak sobie zajem wolne komrki od adresu 60h do 62h. Dodatkowo z linii 22 definiuj wspomniany poredni licznik, ktrego zadaniem bdzie zliczanie przepenie licznika TH1. W linii 26 definiuj warto pocztkow licznika TH1 jako wyraenie Czest. Program zaczyna si w linii 30 deklaracj ORG 8000h, czyli e pro gram jak zwykle umieszczamy od adresu podanego po tej deklaracji. Aby omin wystpujc za kilka adresw zewntrzn tabel wek torw przerwa, w linii 31 umieszczam skok bezwzgldny do etykiety START, gdzie rozpoczyna si waciwy program. No i wreszcie dyrektywa ORG 801Bh w linii 35 definiuje mi adres od ktrego spokojnie bd pisa procedur obsugi przerwania od liczni ka T1. W linii 36 zaczyna si procedur obsugi przerwania intT1. Pierwsze co naley koniecznie zrobi, to (w linii 37) przeadowa zawarto liczni ka T1 TH1, co czyni. Dalej jak wida brak postulowanych instrukcji odkadania na stos mo dyfikowanych rejestrw, bowiem zostay one ju zapamitane na stosie podczas przyjcia przerwania w procedurze poredniej w obszarze Biosa komputerka (listing wczeniej) > Dla przypomnienia powiem e odoono w kolejnoci rejestry: push Acc push DPH push DPL W liniach 39...42 inkrementuj komrk zliczajc ilo przepenie licznika TH1, a nastpnie porwnuj jej zawarto z zerem (w kocu obojtne czy jest to zero, czy 255, bo i tak kada z wartoci pojawia si raz na 128). Jeeli warunek jest speniony, to znaczy e mino 128 przepenie licznika TH1, czyli w praktyce mina 1 sekunda. Jeeli tak si stanie to dziki instrukcji w linii 42 program procesor skoczy do linii 44, w przeciwnym przypadku do na koniec procedury obsugi przerwa nia linia 65, etykieta koniecT1. Zamy wic e mina sekunda, program kontynuowany jest od li nii 44, gdzie do akumulatora adowana jest zawarto licznika sekund. Nastpnie w linii 45 jest ona inkrementowana, a w linii 456 zgodnie z naszym zaoeniem zliczania z kodzie BCD nastpuje korekta dziesit na akumulatora (uwaga, w tym miejscu linia 45 nie mona zastoso wa instrukcji INC bowiem nie wsppracuje ona z instrukcj ko rekty dziesitnej DA A). W linii 47 powikszona zawarto sekund zostaje przepisana z Acc do SEK, a nastpnie w linii 48 nastpuje porwnanie, czy aby licznik se kund nie przekroczy wartoci 59h (59 sekund?). Jeeli tak nie jest pro cedura koczy si i nastpuje skok na jej koniec do etykiety koniecT1. W przeciwnym przypadku w linii 49 licznik sekund jest zerowany, a dalej w liniach 51...54 nastpuje korekta licznika minut w sposb iden tyczny jak w przypadku sekund. W linii 55 licznik minut jest sprawdzany i w przypadku przekroczenia wartoci 59 minut, nastpuje w linii 56 jego wyzerowanie i zostaje wy konana korekta licznika godzin linie 58...61. Podobnie dzieje si z licznikiem godzin, z tym e w linii 62 porwnu je si jego zawarto z liczb 24h. Jeeli godzina 23cia zosta przekro czona, to licznik godzin zeruje si w linii 63, i zaczyna si nowa doba. W tym miejscy za lini 63 mona by dopisa zliczanie dni tygodnia, dni, miesicy a nawet lat. To ciekawy temat na zadanie dla Was drodzy Czytelnicy. Przypominam tylko o fakcie istnienia nieregularnej iloci dni w kolejnych miesicach roku, oraz istnieniu lat przestpnych. Procedura obsugi przerwania ma si ku kocowi w lini i 65, gdzie dalej w liniach 66...68 nastpuje odtworzenie zmodyfikowa nych wczeniej rejestrw Acc i DPTR w odwrotnej kolejnoci ni przy od kadaniu na stos (zgodnie z zasad przechowywania danych na stosie!). Na koniec w linii 69 wystpuje instrukcja RETI, ktra jest konieczna do prawidowego zakoczenia przyjcia przerwania.

ELEKTRONIKA DLA WSZYSTKICH 5/98

45

Te to potrafisz
Od linii 71 zaczyna si cz gwna programu. Analiz tej, do prostej, czci programu, pozostawiam Wam jako prace domow.

Zadanie 3
Bardziej zaawansowanym i cierpliwym polecam uzupenienie proce dury obsugi przerwania (zegara) o obliczanie daty : dzie miesic rok (bez uwzgldniania lat przestpnych) oraz umoliwienie wywietlania tej daty na wywietlaczu z moliwoci przeczenia na czas i odwrot nie za pomoc klawisza. Rozwizania zada 1 i 2 w kolejnej lekcji szkoy mikroprocesorowej. Najciekawsze a co najwaniejsze poprawne propozycje rozwizania za dania 3 przedstawi na amach EdW w ramach Skrzynki porad 8051. Sawomir Surowiski

Zadanie 1
Przeanalizowa teoretycznej przebieg czci gwnej programu na podstawie linii 72...125, a nastpnie sprawdzi to w praktyce aduj program do komputerka i uruchamiajc go.

Zadanie 2
Zmodyfikowa wywietlanie czasu do postaci np. dla godziny 12:34 i 58 sekund 1 2 3 4.5 8

Listing
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 CPU 8052.DEF ;**************************************************** ;Klasa mikroprocesorowa LEKCJA 8 ;Program obslugi zegara czasu rzeczywistego ;na komputerek edukacyjny AVT-2250 ;**************************************************** ;procedura korzysta z przerwania licznika T1 (tryb 0) ;wykorzystywane sa 3 komorki wewn.RAM procesora ;zegar liczy: godziny, minuty i sekundy ;w trybie 24-godzinnym ;**************************************************** include const.inc include bios.inc ;Definicje komorek w wewn.RAM procesora ;zajmowane przez dane zegara 0060 0061 0062 0063 GODZ MIN SEK licz128 equ equ equ equ 60h 61h 62h 63h ;licznik godzin ;licznik minut ;licznik sekund ;licznik 1/128 sek 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 806C 757840 806F 757940 8072 75F001 8075 1203A7 8078 F560 807A 757B40 807D 757C40 8080 75F004 8083 1203A7 8086 F561 8088 757E40 808B 757F40 808E 75F007 8091 1203A7 mov mov mov lcall mov mov mov mov lcall mov mov mov mov lcall mov mov mov mov lcall lcall setb pokaz: mov jnb mov mov sjmp mov mov czas: mov mov lcall mov mov lcall mov mov lcall sjmp A,GODZ B,#1 A2HEX A,MIN B,#4 A2HEX A,SEK B,#7 A2HEX pokaz ;na DL1.DL2 ;wypisz godziny ;na DL4.DL5 ;wypisz minuty ;na DL6.DL7 ;wypisz sekundy ;i od poczatku A,licz128 Acc.6,pelne DL3,#0 DL6,#0 czas DL3,#_minus DL6,#_minus ;co 1/2 sekundy ;pokazuj na zmiane ;puste DL3 i DL6 ;i kreski na DL3 ;i DL6 DL1,#_minus DL2,#_minus B,#1 GETACC GODZ,A DL4,#_minus DL5,#_minus B,#4 GETACC MIN,A DL7,#_minus DL8,#_minus B,#7 GETACC SEK,A DL3,#_minus DL6,#_minus A,#250 DELAY CONIN TR1 ;zapalenie kresek ;w postaci ;GG-MM-SS ;(godzina ;wprowadzona !) ;odczekanie ;ok. 0,5 sekundy ;czekanie na start ;zegara (klawisz) ;start licznika ;(zegara) 68 69 70 71 72 73 8051 D0E0 8053 32 8054 8054 C28E 8056 53890F pop Acc reti ;*********************************************** START: clr TR1 ;licznik T1 stop anl TMOD,#0Fh ;wyczyszczenie ;bitow T1 orl TMOD,#00h ;T1 jako 16-bitowy ;(tryb 1) mov TH1,#Czest ;zaladowanie ;licznika mov licz128,#0 ;wyzerowanie ;licznika 1/256 sek. mov intvec,#80h ;zaladowanie MSB ;wektora przerwan setb ET1 ;odblokowanie ;przerwania od T1 setb PT1 ;priorytet na to ;przerwanie lcall CLS ;wyczyszczenie ;displeja

74 8059 438900 75 805C 758D1F 76 805F 756300 77 8062 757280 78 8065 D2AB 79 8067 D2BB 80 81 8069 120274

;Definicje stalych wykorzystywanych w programie 001F Czest equ 31 ;watosc pocz. ;licznika TH1

27 28 29 30 8000 31 8000 028054 32 33 34 35 801B 36 801B 37 801B 758D1F 38 801E 39 801E 0563 40 41 42 43 44 45 8020 E563 8022 C2E7 8024 7027 8026 E562 8028 2401

;pobranie ;poczatkowej ;godziny

;*********************************************** ;Poczatek kodu programu org 8000h ljmp START ;petla glowna od ;etyk. START ;*********************************************** ;Wektor przerwania od licznika T1 org 801Bh intT1: ;poczatek proc.przer.T1 mov TH1,#Czest ;przeladowanie ;licznika T1 inc mov clr jnz mov add da mov cjne mov mov add da mov cjne mov mov add da mov cjne mov koniecT1: pop pop DPL DPH ;odtworzenie ;rejestrow ;ze stosu licz128 A,licz128 Acc.7 koniecT1 A,SEK A,#1 A SEK,A A,#60h,koniecT1 SEK,#0 A,MIN A,#1 A MIN,A A,#60h,koniecT1 MIN,#0 A,GODZ A,#1 A GODZ,A A,#24h,koniecT1 GODZ,#0 ;zwiekszenie ;licznika sekund ;z korekcja ;dziesietna ;czy SEK > 59?, ;nie to skocz ;tak to wyzeruj ;sekundy ;i koryguj minuty ;zwiekszenie ;licznika minut ;z korekcja ;dziesietna ;czy MIN > 59?, ;nie to skocz ;tak to zeruj minuty ;i koryguj godziny ;zwiekszenie ;licznika minut ;z korekcja ;dziesietna ;czy GODZ > 23 ?, ;nie to skocz ;tak to zeruj ;godziny ;zwiekszenie ;licznika 1/128sek.

;pobranie ;poczatkowej ;minuty

;pobranie ;poczatkowej ;sekundy

98 8094 F562 99 8096 100 8096 757A40 101 8099 757D40 102 809C 74FA 103 809E 120295 104 80A1 1202C5 105 80A4 D28E 106 107 80A6 108 80A6 E563 109 80A8 30E608 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 80AB 757A00 80AE 757D00 80B1 8006 80B3 757A40 80B6 757D40 80B9 80B9 E560 80BB 75F001 80BE 12024E 80C1 E561 80C3 75F004 80C6 12024E 80C9 E562 80CB 75F007 80CE 12024E 80D1 80D3 80D3 END

46 802A D4 47 802B F562 48 802D B4601D 49 8030 756200 50 8033 51 8033 E561 52 8035 2401 53 8037 D4 54 8038 F561 55 803A B46010 56 57 58 59 803D 756100 8040 8040 E560 8042 2401

pelne:

60 8044 D4 61 8045 F560 62 8047 B42403 63 804A 756000 64 65 804D 66 804D D082 67 804F D083

46

ELEKTRONIKA DLA WSZYSTKICH 5/98

Te to potrafisz

W kolejnym odcinku naszego cyklu zapoznamy si z prac dodatkowe go ukadu czasowo licznikowego, ktry wystpuje w mikrokontrole rach 8052/C. W drugiej czci arty kuu przedstawi specjalne tryby pracy procesorw, dziki ktrym moliwe jest konstruowanie energo oszczdnych autonomicznych uka dw bateryjnych. I cho na tym eta pie nauki panowania nad mikrokont rolerem 8051 i jemu podobnymi, za wczenie na podawanie przykado wych rozwiza konstrukcyjnych, to t cz teorii warto pozna, zanim zabierzemy si do budowania inteligentnych urzdze elektro nicznych... a raczej mikroelektro nicznych.

Mikrokontrolery? To takie proste...


Cz 14
Licznik T2 oraz specjalne tryby pracy
Z ukadem czasowolicznikowym T2 zwizane s dwa dodatkowe 8 bitowe rejestry, (tworzce 16bitowy rejestr RLD) a mianowicie: 0CBh: RLDH starsze 8 bitw rejestru RLD 0CAh: RLDL modsze 8 bitw rejestru RLD Rejestry dodatkowe licznika T2:

Poprzedni odcinek szkoy mikroprocesorowej powiciem omwie niu strony praktycznej ukadw czasowolicznikowych T0 i T1 procesora 8051/52. Podaem te praktyczne wskazwki na powizanie pracy liczni kw z ukadem przerwa procesora. Dziki takiemu poczeniu udao nam si wsplnie stworzy i przeanalizowa przykadowy programik od mierzajcy czas. To podstawa do zrozumienia prawidowego programo wania mikrokontrolerw, bowiem prawie 100% programw pisanych na procesory wykorzystuje procedury (podprogramy) obsugi przerwa do kontroli pewnych funkcji samego procesora jak i ukadw peryferyjnych. Umiejtne zaprogramowanie ukadu licznikowego oraz ukadu prze rwa gwarantuje sukces w dziaaniu programu a dodanie funkcji zabez pieczajcych tzw. programowych haczykw (ktrych omwieniem zajm si przy okazji nastpnego odcinka klasy mikroprocesorowej) gwarantuje poprawn prac mikrokontrolera nawet w sytuacjach z g ry nieprzewidzianych, jak np. przypadkowe przeadowanie licznikw, czy automatyczne rozpoznawanie prdkoci transmisji szeregowej z urzdzenia zewntrznego. Wrmy jednak do tematu i zajmijmy si ukadem czasowolicznikowym (potocznie nazywanym licznikiem) T2.

TIMER T2 w 8052/C
Jak powiedziaem wczeniej, ukad ten nie wystpuje w procesorach 8051/C51, jest natomiast integraln czci struktury procesorw 8052/C. Z pewnych wzgldw przy niektrych aplikacjach dwa ukady czasowolicz nikowe (T0 i T1) to za mao, wtedy warto sign wanie po kostk 52. Licznik T2 podobnie jak poprzednie T0 i T1 jest 16bitowy, a zliczanie odbywa si przy pomocy dwch 8bitowych rejestrw z grupy SFR o adresach: 0CDh: TH2 starsze 8 bitw licznika T2 0CCh: TL2 modsze 8 bitw licznika T2 Rejestry operacyjne licznika T2:

Tak jak poprzednio rejestry te mona odczytywa jak i modyfiko wa, przeadowujc (zmieniajc) ich zawarto np. za pomoc instrukcji: mov TH2, #wartH mov TL2, #wartL

Rejestr RLD (RLDH.RLDL) peni dwojak rol w zalenoci od trybu pracy licznika T2. Po pierwsze moe by rejestrem wartoci pocztko wej licznika T2 (TH2.TL2). Wtedy to w trybie pracy, ktry za chwil omwi, po przepenieniu licznika, warto pocztkowa tego licznika zostaje automatycznie (bez programowego przeadowywania) przepisa na z RLDH do TH2 oraz z RLDL do TL2. W innym przypadku rejestr RLD moe peni rol rejestru zatrzasko wego, w ktrym zapamitywana jest zawarto licznika T2 (TH2.TL2) w pewnych szczeglnych momentach, o tym take za chwil. Podobnie jak omawiane w poprzednim odcinku ukady T0 i T1, licznik T2 moe peni dwie rne funkcje: moe pracowa jako czasomierz, czyli zlicza impulsy wewntrzne o czstotliwoci rwnej czstotliwoci oscylatora Fxtal podzielonej przez 12 (zastosowanie takiego trybu pracy ju poznalicie na przyka dzie z lekcji nr 8) moe take zlicza impulsy zewntrzne z specjalnego wejcia T2, ktrym jest pin 1 procesora (alternatywna funkcja bitu 0 portu P1). Zwikszenie zawartoci licznika T2 nastpuje w tym przypadku w momencie wykrycia zbocza opadajcego na wejciu T2 (P1.0). Z licznikiem T2 zwizane jest take dodatkowe wejcie T2EX ko cwka procesora P1.1 (pin 2). Kocwka ta moe peni rol syg nau strobujcego zatrzanicie zawarto licznika T2 (TH2.TL2) w rejestrach RLD (RLDH.RLDL), w innym przypadku umoliwia zdalne zaadowanie wartoci pocztkowej z rejestrw RLD do rejes trw licznika T2. We wszystkich trybach pracy licznika T2 zasada jego pracy jest podob na jak dla ukadw T0 i T1. A wic obowizuj zasady dotyczce np. wy krywania stanw niskich i wysokich (na przemian) w przypadku zliczania impulsw zewntrznych, ich czstotliwoci maksymalnej, w zalenoci

38

ELEKTRONIKA DLA WSZYSTKICH 6/98

Te to potrafisz
od czstotliwoci oscylatora procesora. Wszystkie omwiem w poprzed niej czci klasy mikroprocesorowej, warto wic je sobie przypomnie. Warto take wspomnie o moliwoci pracy licznika T2 w trybie tak towania portu szeregowego. Wtedy licznik T1 moe by uyty do in nych celw, natomiast T2 ze wzgldu na swoj 16bitow natur po zwala na generowanie bardzo niskich czstotliwoci taktowania portu, a dlaczego, o szczegach powiem za chwil. Gwny rejestrem sterujcym trybami oraz prac licznika T2 jest re jestr T2CON (SFR adres 0C8h). Z pewnoci pamitasz drogi Czytelni ku, e w przypadku licznikw T0 i T1 by to rejestr TMOD (oraz czcio wo TCON), natomiast w przypadku ukadu czasowolicznikowego T2 wszystkimi funkcjami licznika T2 steruje tylko jeden rejestr T2CON. wewntrznego ukadu licznikowego T2 z zewntrznym sygnaem ze garowym (doczonym do wejcia T2EX). 3) W kadym trybie pracy ustawienie znacznika TF2 moe by sygnaem zgoszenia przerwania. W tym przypadku ustawiane znaczniki w sowie T2CON nie s automatycznie zerowane po przyjciu przerwania, tote naley o tym pamita w procedurze obsugi przerwania. Z drugiej strony niezerowanie znacznikw umoliwia programicie ich analiz w procedurze obsugi przerwania, a dopiero po tym ich wyzerowanie. 4) Jak wspomniaem wczeniej, licznik T2 moe taktowa port szerego wy. W tym celu naley ustawi bity TCLK i RCLK. Taktowany w ten sposb port szeregowy bdzie mg pracowa w trybie 1 (znaki 8bito we, prdko okrelana programowo) oraz w trybie 3 (znaki 9bitowe, prdko okrelana programowo). Fizycznie w trybie taktowania portu licznika T2 pracuje zliczajc impulsy z automatycznym adowaniem wartoci pocztkowej z rejestrw RLD (RLDH.RLDL). Zliczane mog by impulsy wewntrzne (czasomierz) o czstotliwoci Fxtal/2, lub im pulsy zewntrzne z wejcia T2 (P1.0). Po podzieleniu impulsw taktu jcych (Fxtal/2 lub zewntrznych z wejcia T2) dodatkowo przez 16 traktuj one odbiornik (RCLK=1) lub nadajnik (TCLK=1) portu szerego wego. W tym trybie pracy licznika, jego przepenienie nie ustawia znacznika jego przepenienia TF2. Dziki temu w przypadku gdy usta wimy bit EXEN2 (w sowie T2CON), to pod wpywem opadajcego zbocza sygnau na wejciu T2EX (kocwka P1.1 procesora) ustawio ny zostaje znacznik EXF2, co moe by sygnaem zgoszenia przerwa nia. Jak wida moliwe jest zatem wykorzystanie wejcia T2EX jako dodatkowego (obok INT0 i INT1) wejcia przerywajcego procesora. W przypadku taktowania portu szeregowego (T2 taktowany sygnaem wewntrznym Fxtal / 2) prdko transmisji (n) mona okreli wzorem: Fxtal n = (65536 RLD) x 2 x 16 std atwo po przeksztaceniu wzoru wyznaczy warto pocztkow rejestrw RLD przy zadanej prdkoci transmisji: Fxtal Fxtal RLD = 65536 = 65536 2 x 16 x n 32 x n gdzie RLD to oczywicie warto pocztkowa wpisana do rejestrw RLDH.RLDL. Poniej podaj przykadowe prdkoci transmisji dla rezo natora kwarcowego 11,0592 MHz. Fxtal (MHz) 11,0592 11,0592 11,0592 11,0592 11,0592 11,0592 11,0592 11,0592 11,0592 11,0592 11,0592 11,0592 11,0592 11,0592 11,0592 RLD FFFFh FFFDh FFFCh FFFAh FFF7h FFF4h FFEEh FFDCh FFB8h FF70h FEE0h FDC0h FB80h F700h EE00h n (bodw) 345600 115200 86400 57600 38400 28800 19200 9600 4800 2400 1200 600 300 150 75

Rejestr jest adresowany bitowo (w odrnieniu od TMOD w przypad ku T0 i T1), co znacznie uatwia operacje modyfikacji poszczeglnych je go bitw. Oto ich znaczenie: TF2 (bit T2CON.7, adres: CFh) bit ustawiany w momencie przepenie nia licznika T2, jest znacznikiem zgoszenia przerwania przez T2 EXF2 (bit T2CON.6, adres CEh) bit ustawiany w momencie wykrycia opadajcego zbocza na wejciu T2EX (pin 2 procesora), aktywny gdy bit EXEN2 = 1, jest sygnaem zgoszenia przerwania RCLK (bit T2CON.5, adres CDh) ustawienie tego bitu powoduje przy czenie licznika T2 jako taktujcego (przepenieniem) odbiornika portu szeregowego procesora TCLK (bit T2CON.4, adres CCh) ustawienie tego bitu powoduje przy czenie licznika T2 jako taktujcego (przepenieniem) nadajnika portu szeregowego procesora EXEN2 (bit T2CON.3, adres CBh) bit uaktywniajcy wejcie T2EX (pin 2 procesora), ustawienie uaktywnienie, wyzerowanie dezaktywacja TR2 (bit T2CON.2, adres CAh) bit sterujcy zliczaniem licznika T2, ustawienie (TR2=1) powoduje prac licznika, wyzerowanie (TR2=0) za trzymanie zliczania C/T2 (bit T2CON.1, adres C9h) bit okrelajcy funkcj pracy T2, i tak : ustawienie (C/T2=1) przecza T2 w tryb zliczania impulsw zewn trznych wyzerowanie (C/T2=0) wcza funkcj czasomierza (zliczanie impul sw wewntrznych Fxtal/12) CP/RL2 (bit T2CON.0, adres C8h) bit okrelajcy tryb pracy licznika, i tak: ustawienie (CP/RL2=1) powoduje aktywacj trybu z zatrzaskiwaniem zawartoci licznika (rejestrw T2 TH2.TL2 w rejestrach RLD RLDH.RLDL) wyzerowanie (CP/RL2=0) powoduje prace z automatycznym wpisy waniem wartoci pocztkowej (z rejestrw RLD do rejestrw T2) W zalenoci od kombinacji niektrych bitw z rejestru T2CON mo liwe s rne stany pracy ukadu czasowolicznikowego T2, oto kilka wskazwek: 1) W przypadku gdy ustawimy bit CP/RL2, licznik T2 bdzie zlicza mo dulo 216, po kadym przepenieniu bdzie ustawiany znacznik zgo szenia przerwania TF2. Jeeli ustawimy dodatkowo bit EXEN2, co spowoduje aktywacj wejcia T2EX procesora (P1.1), to moemy zatrzasn podajc na to wejcie opadajce zbocze, zawarto licznika T2 w rejestrach RLD (RLDH.RLDL). 2) Jeeli bit CP/RL2 jest wyzerowany, licznik T2 bdzie pracowa w try bie z automatycznym wpisywaniem wartoci pocztkowej z rejest rw RLD w momencie przepenienia. W tym miejscu nasuwa si po dobiestwo pracy licznikw T0 lub T1 w trybie 1, z tym, e przeado wanie licznika nastpuje w przypadku T2 automatycznie, co zwalnia nas od programowego wpisywania wartoci pocztkowej do rejest rw TH2 i TL2. W momencie przepenienia ustawiany jest znacznik TF2, co moe by take sygnaem zgoszenia przerwania. Dodatkowo przeadowanie zawartoci rejestrw roboczych licznika (TH2.TL2) moe nastpi pod wpywem zewntrznego zbocza opadajcego, podanego na wejcie T2EX, trzeba tylko dodatkowo ustawi bit EXEN2 (EXEN2=1). Takie wymuszenie powoduje take ustawienie znacznika EXF2. Dziki temu moliwe jest zsynchronizowanie pracy

Jak wida, zakres moliwych do uzyskania prdkoci transmisji jest o wiele szerszy, ni w przypadku taktowania portu licznikiem T1. Naj mniejsza szybko w przypadku rezonatora kwarcowego jak w tabeli czyli 11,0592 MHz przy uyciu licznika T2, to 5 bitw na sekund, a wic prawdziwy w! Sprawdmy: 5 (bitw/sek.) nmin=11059200/(32(655360))=11059200/(3265536)=5 Wtedy oczywicie wartoci pocztkowa bdzie zero (RLDH.RLDL=0). W tabeli pogrubion czcionk zaznaczono typowe, spotykane w kompute rach PC wartoci transmisji szeregowej, realizowanej poprzez port RS232c. A oto przykad programowania rejestru sterujcego T2CON oraz ro boczych i dodatkowych w celu uzyskania kilku trybw i funkcji pracy licznika T2. Zaoymy, e nasz licznik T2 bdzie pracowa jako czasomierz z auto matycznym adowaniem wartoci pocztkowej z RLD po przepenieniu. Zaoymy, e przepenienie ma nastpowa dokadnie co 1ms, a do procesora doczony jest rezonator kwarcowy o czstotliwoci 6 MHz. Obliczenia: przy fxtal= 6 MHz licznik pracujc jako czasomierz bdzie inkremen towany co 2s

ELEKTRONIKA DLA WSZYSTKICH 6/98

39

Te to potrafisz
w czasie 1 ms (milisekundy) zawiera si 1000 s (mikrosekund), czy li 500 okresw zegara procesora wobec tego warto pocztkowa licznika mona obliczy jako: wart.pocztkowa = warto maksymalna 500 = 65536 500 = 65036 = FE0Ch (heksadecymalnie) mona wic zapisa komendy inicjujce licznik T2: mov T2CON, #0 ;czasomierz z automat. ;adowaniem wart. pocztkowej z RLD mov RLDH, #0FEh mov RLDL, #0Ch ;zaadowanie wartoci FE0Ch ;(pocztkowej) mov TH2, RLDH mov TL2, RLDL ;aby prawidowo zainicjowa ;pierwsze przepenienie setb TR2 ;start licznika T2 ....... ....... ;dalsze instrukcje Analizujc linie polece warto szczegln uwag zwrci na pierwsz komend, ktra ustawia bity w sowie T2CON. Zauwamy, e wszyst kie bity tego sowa zostay ustawione na zero, co zgadza si z opisem rejestru T2CON, ktry omwiem przed chwil. Jeeli kto teraz zechce dopisa procedur obsugi przerwania, moe to zrobi analogicznie jak w przypadku opisanej wczenie procedury ob sugi przerwania od przepenienia licznika T0 (T1), pamitajc jednak o adresie wektora przerwania, ktry w tym przypadku wynosi: 002Bh a w przypadku naszego komputerka edukacyjnego (AVT2250) procedu ra powinna zaczyna si od adresu 802Bh zgodnie z zasadami pisania takich podprogramw, ktre omwiem w poprzednim numerze EdW. Program na nasz komputerek mgby wic zaczyna si nastpujco: org 8000h ljmp START org 802Bh intT2: ......... ......... ......... pop DPL pop DPH pop Acc reti ;******************************************************* START: mov T2CON, #0 ;czasomierz z automat. ;adowaniem wart. pocztkowej z RLD mov RLDH, #0FEh mov RLDL, #0Ch ;zaadowanie wartoci FE0Ch ;(pocztkowej) mov TH2, RLDH mov TL2, RLDL ;aby prawidowo zainicjowa ;pierwsze przepenienie setb TR2 ;start licznika T2 ....... ....... ;dalsze instrukcje ....... END Nie naley jednak zapomina e w licznik T2 wyposaony jest proce sor 8052/C, tote jeeli masz w komputerku AVT2250 procesor 8051/C51, to musisz go po prostu wymieni na waciwa kostk. W sklepie nie powinna ona kosztowa wicej jak 5z. Z grubsza rzecz ujmujc tryby te rni si od siebie stopniem pobo ru mocy przez procesor, oraz funkcji, jakie pozostaj aktywne w tych trybach pracy w odrnieniu od normalnego trybu pracy procesora. Przejdmy zatem do omwienia rejestru PCON, bo o nim jest mowa. Po niej przedstawione jest znaczenie poszczeglnych bitw tego rejestru. Warto przy tym zauway, e rejestr nie moe by adresowany bitowo, to te nie da si sterowa jego poszczeglnymi bitami poprzez instrukcje typu: SETB bit lub CLR bit

Rejestr PCON jest umieszczony pod adresem 87h w obszarze SFR procesora. Zawiera 5 istotnych dla uytkownika bitw. SMOD (bit .7) bit podwojenia szybkoci transmisji poprzez port sze regowy w trybach 1,2 lub 3 pracy. Ustawienie tego bitu (SMOD=1) po woduje dwukrotne zwikszenie czstotliwoci taktowania portu szere gowego poprzez licznik T1, kiedy ten pracuje w trybie taktowania tego portu. W odcinku, w ktrym omawiaem port szeregowy, w zamiesz czonej tam tabeli podaem przykady wartoci pocztkowych dla stan dardowych prdkoci transmisji asynchronicznej. Wszystkie odnosiy si wanie do podwojonego trybu prdkoci transmisji, kiedy bit ten jest ustawiony. Jeeli nie chcemy pracowa w trybie podwojonej prd koci, bit ten powinien by wyzerowany (PCON=0). Ustawienie bitu SMOD w rejestrze PCON mona wykona za pomo c instrukcji, np.: ORL PCON, #80h wyzerowanie za za pomoc instrukcji: ANL PCON, #7Fh (bity: 6...4) nie wykorzystane GF1 (bit .3) bit programowy do dowolnego wykorzystania przez pro gramist GF0 (bit .2) bit programowy do dowolnego wykorzystania przez pro gramist PD (bit .1) bit wczajcy tryb obnionego poboru mocy upienia. Ustawienie tego bitu powoduje wprowadzenie procesora w tryb upie nia, kiedy to pobr prdu spada o okoo 500 razy, a napicie zasilajce Vcc moe by obnione do 2,0V. Wykonanie instrukcji ustawiajcej ten bit jest ostatnim poleceniem wykonanym przez procesor w programie. IDL (bit .0) bit wczajcy tryb jaowy procesora. Poniej nieco dokadniej omwi oba tryby pracy.

Tryb jaowy
Instrukcja, ktra ustawia bit PCON.0 powoduje wprowadzenie proce sora w ten tryb. Jest ona ostatni wykonywan przez procesor instruk cj. Wewntrzny sygna zegarowy zostaje odczony od jednostki cent ralnej (CPU), ale ukad przerwa, port szeregowy i licznikowy pracuj dalej, jeeli wczeniej byy odpowiednio skonfigurowane i ustawione. Stan caego procesora, a wic stan: rejestrw specjalnych SFR, pamici wewntrznej RAM uytkownika pinw portw P0...P3 pozostaje bez zmian i jest taki sam jak by tu przed wejciem proceso ra w tryb jaowy. Kocwki ALE i /PSEN procesora ustawiaj si w stan wysoki. Istniej dwa sposoby na wyjcie z tego stanu: 1) Nadejcie dowolnego przerwania oczywicie jeeli byo ono wcze niej uaktywnione w rejestrze IE. Pojawienie si przerwania zeruje au tomatycznie (bez udziau programu uytkownika) flag PCON.0 i procesor powraca do normalnej pracy, z tym, e nastpn instruk cj po wyjciu ze stanu jaowego pod wpywem przerwania bdzie pierwsza znajdujca si w procedurze obsugi danego przerwania, a do instrukcji RETI, kiedy to procesor automatycznie powraca do in strukcji nastpnej po tej, ktra wprowadzia procesor w stan jaowy, czyli tej, ktra ustawia bit IDL w rejestrze PCON. 2) Drugim sposobem na wyjcie z tego stanu jest zerowanie procesora. Ze wzgldu na fakt, e podczas trybu jaowego procesora pracuje nadal zegar systemowy, do prawidowego zresetowania potrzebny jest impuls zerujcy o dugoci co najmniej 24 okresw oscylatora.

Specjalne tryby pracy


W tej czci artykuu omwi tryby pracy procesora, dziki ktrym moliwe jest realizowanie ciekawych rozwiza ukadowych, np. urz dze zasilanych z baterii czyli takich, w ktrych kwestia poboru ener gii jest elementem krytycznym. W obszarze rejestrw SFR procesora (przypominam jest to we wntrzna pami danych RAM adresowana bezporednio, o adresach 80h...FFh) znajduje si jeszcze jeden ciekawy rejestr specjalnego prze znaczenia. Jego funkcj jest kontrola specjalnych trybw pracy proce sora, a mianowicie: trybu tzw. jaowego, trybu tzw. upienia.

Tryb upienia obnionego poboru mocy


W tym trybie, obecnie stosowanym przez producentw tylko w kostkach typu CMOS, czyli np. 80C51 lub 80C, cay mikrokontroler pobiera znacznie mniej energii, oraz dodatkowo napicie zasilajce ukad moe zosta zmniej szone od standardowych 5V do 2,0V. Instrukcja ustawiajca bit PD (PCON.1) jest ostatni wykonywan przez procesor. W trybie tym oscylator procesor

40

ELEKTRONIKA DLA WSZYSTKICH 6/98

Te to potrafisz
zostaje wyczony (po prostu staje). Zostaj odczone wszystkie ukady fun kcjonalne procesora, takie jak ukady licznikowe, port szeregowy, ukad prze rwa. Pozostaje jedynie niezmieniona zawarto wewntrznej pamici RAM, w tym pamici uytkownika oraz rejestrw specjalnych SFR. Piny por tw pozostaj zgodne ze stanami odpowiadajcych im bitw w rejestrach P0...P3 w obszarze SFR. Kocwki ALE i PSEN znajduj si w stanie niskim. W tym trybie pracy procesora, a raczej nie trybie pracy, co upienia, proce sor pobiera okoo 500 razy mniej prdu ni w stanie normalnej pracy. Dla przykadu podam, e dla kostki 80C51 (czyli w wersji CMOS) : w trybie pracy normalnej pobr prdu wynosi ok. 20mA (przy fxtal=12MHz) w trybie jaowym pobr prdu spada do okoo 3,0 mA (przy fxtal=12MHz) w trybie upienia pobr prdu przez ukad wynosi ok. 50A (mikro amper!), przy obnieniu zasilania do 2,0V. Jedyn metod na opuszczenie trybu upienia i powrt do normalnej pracy jest wyzerowanie mikroprocesora poprzez podanie impulsu rese tujcego na wejcie RST (pin 9) o czasie trwania ok. 10ms. DPTR 0000h P0...P3 FFh IP xxx00000b IE 0xx00000b TMOD 00h TCON 00h TH0 00h TL0 00h TH1 00h TL1 00h SCON 00h SBUF zmienny PCON (MOS) 0xxxxxxx PCON (CMOS) 0xxx0000b wskanik danych porty rejestr priorytetu przerwa rejestr masek przerwa rej. licznikw T0 i T1 rej. ster. licznikw i przerwa

rejestr portu szeregowego bufor portu szeregowego dla ukadw NMOS (8051/2) dla uk. CMOS (80C51/52)

Reset procesora
Popularne zresetowanie odbywa si poprzez podanie impulsu dodat niego na wejcie RST kostki (pin 9) zgodnie z zasadami, ktre omwi em przed chwil. Najprostsze i bardziej rozbudowane ukady resetowa nia mikrokontrolerw serii MCS51 podaem w jednym z pierwszych odcinkw klasy mikroprocesorowej. W wyniku zresetowania rejestru ukady specjalne procesora (SFR) zo staj automatycznie zainicjowane wartociami, jak podaj w tabeli poniej: Rejestr PC ACC B PSW SP Warto po RESET 0000h 00h 00h 00h 07h Uwagi licznik rozkazw akumulator rejestr B sowo stanu programu wskanik stosu

Uwaga: litera x oznacza, e dany bit przyjmuje warto przypadko w lub nie jest implementowany w danym rejestrze. Warto po RESECIE przedstawiono w formacie szesnastkowym lub binarnym (z b na kocu) celem uatwienia analizy i porwnania z opisem rejest rw SFR na wkadce z numeru Edw 11/97. Programujc mikrokontrolery 8051/52, trzeba pamita o tym fakcie, tote szczeglnie w przypadku wykorzystania specjalnych trybw pracy naley mie na wzgldzie fakt, e rejestry specjalne zostaj utracone po resecie procesora, a wic konieczne jest ich odtworzenie, oczywicie tylko w razie takiej koniecznoci. Jeeli kto interesuje si szczegami, dotyczcymi architektury we wntrznej mikrokontrolera 80C51 lub podobnych, ktre nie za czsto s wykorzystywane w projektach, przynajmniej przez pocztkujcych pro gramistw, moe sign do literatury [1] i [2]. Obie pozycje wymagaj jednak znajomoci podstaw terminologii technicznej jz. angielskiego. Chtnych zapraszam do lektury, pozostaym proponuj poczeka na ko lejny odcinek naszego cyklu. Sawomir Surowiski
Literatura: [1] 80C51based 8bit Microcontrollers, Data Handbook, Philips 1995 [2] Microcontroller Data Book, Atmel 1995,6,7

Lekcja
Rozwizanie zadania nr 1

9
Dziki badaniu bitu nr 6 w zmiennej licz128, ktry przecie zmienia swj stan co 0,5 sekundy (linia 109), moliwe jest naprzemienne gasze nie kresek (linie 110,111) oraz ich zapalanie linie (113) i (114). Dalej od etykiety czas: rozpoczyna si wypisanie czasu, czyli wy wietlane s godziny linie (116...118), minuty linie (119...121) oraz sekundy linie (122...124). W linii (125) nastpuje skok do pocztku, gdzie nastpuje kolejne uaktualnienie wywietlanego czasu.

Na pocztku lekcji zajmijmy si rozwizaniem zada z poprzedniego numeru EdW i odcinka klasy mikroprocesorowej.

Oto krtka analiza gwnej czci listingu od etykiety START. W linii (72) profilaktycznie zatrzymujemy licznik T1. W dwch kolej nych liniach ustawiamy tryb pracy licznika T1, jako czasomierza zliczaj cego wewntrzne impulsy zegarowe (tryb pracy 0). W linii (75) wpisu jemy obliczon warto pocztkow, przy ktrej licznik bdzie przepe niany okadnie co 1/128 sekundy. W linii (76) wyzerowany zostaje licznik zliczajcy 1/128 czci sekun dy, a w kolejnej linii (77) zaadowany zostaje do zmiennej systemowej komputerka starszy bajt 16bitowego adresu tabeli wektorw przerwa w zewntrznej pamici programu. Naley jeszcze w linii (78) odblokowa przerwanie od licznika T1 (przepenienie licznika) oraz ustawi priorytet na to przerwanie (linia 79) inaczej bowiem odmierzanie czasu moe by zakcone pracujcym przecie stale licznikiem T0 i wywoywan przez jego przepenienia pro cedur obsugi przerwania, ktra zajmuje si obsug wywietlacza i kla wiatury komputerka edukacyjnego AVT2250. Po zainicjowaniu ukadu licznikowego T1 oraz przerwania od tego licz nika, w linii 81 profilaktycznie czycimy wywietlacz, aby potem w li niach (82)...(85) pobra z klawiatury godzin pocztkow i w linii 86 za pamita j w komrce GODZ. Podobnie dzieje si dla minut linie (88)...(91) i sekund linie (94)...(98). Po wprowadzeniu (ustawieniu czasu) zapalone zostaj poziome kres ki oddzielajce godziny od minut (linia 100) i minuty od sekund (linia 101), a nastpnie po koniecznym ze wzgldu na drgania stykw klawia tury opnieniu (ok. 0,5 s.) linie (102),(103), komputerek oczekuje na nacinicie klawisza przez uytkownika celem uruchomienia zegara. Uruchomienie nastpuje w kolejnej linii (105), a dalej znajduje si cz programu, ktrej zadaniem jest wywietlanie upywajcego czasu na wywietlaczu od etykiety pokaz: w linii (107).

Rozwizanie zadania nr 2
Aby wywietli aktualny czas w trybie jak pokazano w zadaniu, czyli:

1 2 3 4 .5 8
wystarczy zmodyfikowa podane linie na posta jak poniej: linia adres kod instrukcja 101 8099 757D80 mov DL6,#_kropka 111 80AE 757D80 mov DL6,#_kropka 114 80B6 757D80 mov DL6,#_kropka lub w zalenoci od swoich upodoba posuy si zmienn systemo w: blinks, ktrej kady z bitw okrela atrybut wywietlanego zna ku, czy ma miga, czy by normalnie wywietlanym. Poniewa nie dotary do mnie jeszcze listy z rozwizaniami zadania nr 3, pozwol sobie zamieci najciekawsze propozycje w kciku pocz towym 8051 w kolejnym numerze EdW.

Uwaga!
W poprzedniej lekcji nr 8 do listingu wkrady si drobne bdy, a mianowicie, komentarze w liniach o podanych numerach powinny wyglda nastpujco: (74) ............ ;T1 jako 8bitowy z preskalerem 5bitowym (76) ............ ;wyzerowanie licznika 1/128 s. Sawomir Surowiski

ELEKTRONIKA DLA WSZYSTKICH 6/98

41

Te to potrafisz

Kcik pocztowy 8051


Zasypany wieloma listami, dotyczcymi cyklu artykuw powiconych programowaniu mi krokontrolerw 8051, postanowiem uruchomi kcik pyta i odpowiedzi, ktre kierujecie do mnie w swoich listach. Na wstpie chciaem bardzo podzikowa za kady list, zarwno te pochwalne jak i krytycz ne. Przyznam e, cieszy mnie bardzo fakt, i tak wielu z Was zdecydowao si sign po mikroprocesory, a co najwaniejsze odnosi ju mae, ale jak wane w nauce sukcesy.

Dzi kolejna porcja listw od Czytelnikw i odpowiedzi na niektre pytania.

List 1
Zenon Rakoczy z Chropaczowa ma wtpliwoci co do instrukcji MOV adres1, adres2 a poniewa, jak pisze, jest rczniakiem problem pojawi si w transkryp cji na jzyka maszynowy bez korzystania z komputera i asemblera 8051. Jak pisaem wczeniej w artykuach instrukcje typu MOV X, Y kopiuj zawarto po stronie Y do literau X, czyli nastpuje przeniesie nie typu X < Y i wszystko si zgadza. Zenon ma wtpliwoci, jak naley przetumaczy np. instrukcj: MOV DPH, B Jak wynika z wczeniejszych analiz instrukcji tego typu, najpierw na ley zapisa bajt okrelajcy instrukcj MOV tego typu, czyli zgodnie z tabel we wkadce bdzie to: 85 kod instrukcji MOV adres1, adres2 83 adres rejestru DPH F0 adres rejestru B, czyli instrukcj t mona zapisa jako cig bajtw: 85 83 F0. Niestety, jak podawaem wczeniej, podczas opisu instrukcji proce sora ten typ instrukcji jest wyjtkiem i kolejno rejestrw po przetu maczeniu bdzie odwrotna, czyli: 85 F0 83. Oczywicie nie zmienia to dziaania tej instrukcji, po prostu tak tuma czy si j na jzyk maszynowy. Przy okazji podczas omawiania tej instrukcji w EdW w opisie wkrad si bd, byo zatem: MOV adres1, adres2 przepisanie zawartoci komrki o adresie adres1 do komrki o ad adres2 resie a a powinno by: MOV adres1, adres2 adres2 do komrki o ad przepisanie zawartoci komrki o adresie a adres1 resie a dalsza cz opisu jest bez bdu, czyli: (adres1) < (adres2) kod: 1 0 0 0 0 1 0 1 cykle: 2 bajty: 3 (kod instrukcji + adres2 + adres1) przykad: MOV 7Fh, 7Eh ;przepisanie zawartoci dwch ;ssiadujcych komrek w ;wew. RAM procesora

Parzysto: brak Bity stopu: 1 Sterowanie przepywem: Brak oraz dodatkowo w opcji Zaawansowane... koniecznie wyczy (odhaczy) opcj buforowania poprzez FIFO. b) inn przyczyn moe by fakt, e prbuje wysya zbiory binarne, a nasz komputerek akceptuje tylko zbiory w formacie IntelHEX, ra dz sprawdzi. Czytelnik ma take wtpliwoci co do rysunku kabla poczeniowego PC z komputerkiem AVT2250 w wersji 9 na 25 pinw. Informuj, e ry sunek jest prawidowy, a skrzyowanie 2 z 3 wystpuje tylko w kablu 9 na 9. We wtyku DB25 znaczenie kocwek 2 i 3 jest dokadnie od wrotne ni na kocwce DB9, stad brak krzyowych pocze.

List 3
yka miodu od Czytelnikw: Wiesaw Kusek z Mielca pisze: ...Otrzymaem niedawno obiecany bezpatnie zestaw AVT2250. Od razu chc bardzo podzikowa za ten zestaw. I w zwizku z tym mam kilka uwag i spostrzee, oraz co nie udao mi si unikn pyta. ... Kit AVT2250 bardzo dobra ocena. Rzecz droga, ale wiadomo pewnych rzeczy nie da si przeskoczy. Ukad przemylany i dopracowany do koca, co wiadczy o duej fachowoci autora opracowania i co dla mnie pocztkujcego w tym temacie najwaniejsze w do jasny i czytelny sposb opisany. Chocia kilku zda nie rozumiem. Brawo za wysok jako pytek drukowanych. Ukad zosta przeze mnie zmonto wany i po wczeniu zasilania ruszy bez adnego problemu. Adam Szendzielorz z Wodzisawia lskiego napisa do nas: .. Niedawno otrzymaem od Was w/w ukad mikrokomputerka edu kacyjnego.... Po odebraniu go na poczcie, czym prdzej wziem si do montowania go. W jakie 3 godziny ukad sta na stole gotowy trzeba byo tylko jeszcze sprawdzi czy dziaa... Po podczeniu zasilania na wywietlaczach ukaza si napis HELLO !!! Sam nie mogem uwie rzy po raz pierwszy w mojej karierze ju po pierwszym uruchomieniu (w sumie do skomplikowanego ukadu) dziaa on poprawnie!!! to chyba dziki bardzo starannie wykonanych pytek drukowanych i spraw nych elementw, cho moja staranno przy jego wykonywaniu te na pewno temu sprzyjaa. (Ale oczywicie! przyp. red.) Po pierwszych emocjach zaczem przerabia wszystkie lekcje EdW dotyczce proce sorw nie jest to atwe, ale myl, e w drodze praktyki bdzie to prostsze i lepiej to zrozumiem. Poniewa posiadam komputer PC, wykonaem kabel czcy go z ukadem. I tu maa uwaga i jednoczenie proba... Rczne wklepywa nie to chyba strata czasu (ktry mona by wykorzysta do innych ce lw), pisanie na komputerze to ju co mona to zapisa, ponownie odtworzy i przesa do komputerka, atwiej co zmieni, a przede wszystkim wykonuje si to duuuuo szybciej. Takich listw otrzymuj bardzo due. Cieszymy si z tego, e wik szo z Was nie ma problemw z uruchamianiem ukadu komputerka edukacyjnego AVT2250. Jednak do redakcyjnego serwisu trafiaj cza sem z reklamacj zestawy nie dziaajce. Powodem takiego stanu rzeczy i czsto zaenowania nabywcy jest niestaranny, czsto budzcy zgroz sposb montau. Apeluj wic, nie starajcie si lutowa ele mentw byle czym i mierzcie swoje siy na zamiary, a kady ukad elektroniczny odpali bez problemw. Jeeli nie czujecie si na siach w samodzielnym zmontowaniu, proponuje zamwienie w AVT zmonto wanego komputerka kit AVT2250/C. P.S. Adamie z Wodzisawia, brakujc dyskietk AVT2250/D otrzy ma jak tylko pojawi si one w magazynie AVT. W razie kopotw pro sz o kontakt z Dziaem Handlowym AVT i potwierdzenie swego za mwienia.

List 2
Marcin Jurzak nadesa wiadomo przez Internet, e ma kopoty z przesyaniem programw z komputera do komputerka. Za kadym ra zem, kiedy transmisja zaczyna si na wywietlaczu kompterka eduka Err czyli komunikat bdu. cyjnego, pojawia si napis E Jeeli taki komunikat pojawia si oznacza to, e kabel wykona popra wnie, i dane przesyane s z PCta do komputerka AVT2250, z tym, e nie s zrozumiae dla BIOSa, std komunikat o bdzie. Powodw ta kiego stanu rzeczy moe by kilka: a) nie ustawione parametry portu szeregowego w PCcie powinien wy da komend ustawiajc je, jak opisywaem przy okazji opisu Biosa komputerka, a mianowicie z poziomu DOSa wywoa komend: MODE COM2: 4800, n, 8, 1 {Enter} Jeeli korzysta z Windows 95, naley parametry portu ustawi w Panelu sterowania w opcji System Meneder Urzdze, usta wiaj parametry: Bitw na sekund : 4800 Bity danych: 8

42

ELEKTRONIKA DLA WSZYSTKICH 6/98

Te to potrafisz
List 4
Tomasz Jabonowski z Moniek pisze: e, po pierwsze, nie moe znale we wkadce (zapewne EdW) np. CLS, A2HEX itp. po drugie, inne kompilatory nie rozumiej argumentw niektrych publikowanych w cyklu komend, np. DL1,#_minus Szanowny kolego, wyraenia typu CLS, A2HEX, DPTR4HEX, to nie s komendy procesora 8051, ale zaproponowane przez autora cyklu szkoy mikroprocesorowej nazwy procedur (podprogramw) umiesz czonych w pamici EPROM komputerka. Pisaem o tym wiele razy. Pod nazwami tymi kryj si konkretne adresy, prosz zajrze do zbiorw BIOS.INC, ktre znajduj si na dyskietce AVT2250/D. To samo dotyczy niektrych zdefiniowanych konkretnie dla naszego komputerka edukacyjnego staych i zmiennych, a wic: DL1 pod t nazw kryje si adres komrki w wewn. RAM procesora, ktra przechowuje znak do wywietlenia na pozycji nr 1 (pierwszy wywietlacz). _minus pod t nazw kryje si staa (liczba), ktra okrela kolejno za palonych segmentw wywietlacza podczas wywietlania znaku . Tote jeeli zechcesz uywa innego kompilatora, powiniene zade klarowa na pocztku programu przed instrukcjami nastpujce przypi sania: DL1 equ 78h _minus equ 01000000b To samo dotyczy wszelkich innych nazw, ktrymi operujemy w na szych artykuach, a ktre mona znale w zbiorach CONST.INC i BIOS.INC na dyskietce do systemu AVT2250. Aby jednak zaspokoi ciekawo Czytelnika mona powiedzie, e w przypadku mikrokontrolerw zamiana liczby z kodu szesnastkowego na binarny fizycznie odbywa si w momencie: w przypadku pobierania rozkazw z pamici EPROM komputerka w momencie programowania pamici EPROM w urzdzeniu ze wntrznym zwanym programatorem pamici EPROM, ktry wczy tuje zbiory np. IntelHEX (takie jakie tworzy nasz kompilator) a na stpnie zapisuje dane o programie w pamici EPROM korzystajc z linii adresowych kostki pamici oraz z linii (np. 8) danych D0...D7, ktrych przecie jest 8 tak jak jest 8 bitw w jednym bajcie informa cji. w przypadku przesyania danych z komputera PC do komputerka ju w momencie transmitowania danych z komputera, ktry zamie nia informacj na szeregow, czyli cig bitw z odpowiednimi sygna ami sterujcymi. Zreszt najlepsz odpowiedzi na to pytanie moe by fakt, e sam mikrokontroler 8051 i wszystkie pozostae ukady tego typu pobieraj i wysyaj informacj ju w postaci binarnej poprzez swoje kocwki w obudowie, ktrych moe by wicej lub mniej. W przypadku 8051 i podobnych mu s to 48bitowe porty P0...P3. Tak wic informacja trafia do procesora wychodzi z niego zawsze w postaci binanej, to tylko peryferyjne ukady zewntrzne transformuj j na posta bardziej czyteln dla uytkownika czy programisty i o to przecie chodzi, tak dziaa postp. Dlatego w komputerze PC uywamy monitora czy klawiatury, ktre przecie te za pomoc dodatkowych urzdze (takich jak karta graficz na) zamieniaj informacj bitowa na posta bardziej czyteln np. szes nastkow i wywietlaj j na ekranie, czy zamieniaj wcinity klawisz na sekwencj bitw odpowiadajc kodowi danego klawisza. Ad.2 Jeszcze raz wyjaniam. a) Istniej dwa rodzaje pamici danych wewntrzna i zewntrzna b) wewntrzna zawarta jest fizycznie w strukturze procesora 8051 (w kostce). Procesor ten zawiera dokadnie: 128 komrek (bajtw) pamici uyt kownika o adresach: 00h....7Fh oraz 128 komrek (nie wszystkie ak tywne) o adresach 80h...FFh, pod ktrymi to znajduj si rejestry spe cjalne SFR procesora. To wszystko zawarte jest w strukturze procesora, pamitajmy! Adresowanie tej pamici RAM (wewntrznej) odbywa si za pomoc wszystkich rozkazw procesora typu MOV oraz rozkazw wykonuj cych operacje arytmetyczne lub logiczne na komrkach tej pamici, czyli : ANL, ORL, XRL, ADD, SUBB, INC, DEC, itd. c) zewntrzna pami RAM to pami, jak sama nazwa wskazuje, do czana z zewntrz w postaci kostek SRAM o rozmiarze maksymalnie 64kB (65536 bajtw). Adresowanie tej pamici odbywa si za pomo c tylko 2 rozkazw, a mianowicie: MOVX A, @DPTR odczyt danej z komrki w zewntrznej pamici danych o adresie zawartym w DPTR (czyli pokrywajcym cae 64kB, 0...FFFFh) i umieszczenie jej w akumulatorze (Acc), czyli rejestrze w wewntrznej RAM procesora o adresie bezporednim E0h. MOVX @DPTR, A zapis danej z komrki z akumulatora do ze wntrznej pamici danych pod adres wskazany w rejestrze DPTR (uwa gi jw.). Ad.3 Po odpowiedzi na pyt. poprzednie odpowied na to pytanie jest oczywista w PSW znajduje si w wewntrznej pamici RAM proce sora (w kostce) pod adresem D0h. Ad.4 To nieprawda, e adresy odwoa do wywietlacza znajduj si w EPROMie. Piszc program wykorzystujcy procedury BIOSa komputerka edukacyjnego AVT2250 programista moe dla uatwienia skorzysta z usug prowadzonych przez monitor. I tak, fizycznie monitor komputerka w procedurze obsugi przerwania (pojawiajcej si okresowo dokadnie 512 razy na sekund) pobiera cyklicznie zawarto kolejnych rejestrw DL1...DL8, czyli o adresach 78h...7Fh w wewntrznej RAM procesora, a nastpnie przepisuje je do zatrzasku (74574) na pytce wywietlacza, ktry to steruje ukadem ULN2803A patrz schemat komputerka edukacyjnego. Sekwencj t mona zilustrowa nastpujco: MOV A, DL1 ;zaadowanie do akumulatora ;zawartoci rejestru DL1 MOV DPTR, #4000h ;zaadowanie do DPTR adresu rejestru 74574 MOVX @DPTR, A ;wreszcie przesanie zawartoci akumulatora ;do rejestru celem wywietlenia Ad.5 Po przeczytaniu odpowiedzi na pytanie 2, wiesz ju, drogi Czy telniku, e nie da si zaadresowa zewntrznej pamici RAM

List 5
Bardzo ciekawy list od Czytelnika z Katowic Marek Joniec pyta mia nowicie: 1) ... dlaczego wszelkie napisy adresw i danych dokonuj w kodzie heksadecymalnym, skoro procesor i ukady zewntrzne operuj da nymi binarnymi, w ktrym momencie i gdzie np. dana D9h jest transkodowana na liczb dwjkow 11011001. 2) Czy jeeli system dziaa tylko z zewntrzn pamici RAM, ktra w naszym przypadku posiada przestrze adresow 8000h...FFFFh, to gdzie mam w niej szuka obszaru rejestrw specjalnych SFR? Czy obszar ten jest automatycznie gdzie umiejscowiony, czy te odpo wiedzialny jest za to monitor systemowy? 3) Jeeli w specyfikacji rejestrw podane jest, e rejestr PSW posiada adres D0h, to gdzie si on znajduje w moim RAMie ? 4) Dlaczego chcc wpisa jak liczb na dany wywietlacz odwouj si do adresw 78h...7Fh (przecie s to adresy pamici programu EPROM, a nie pamici RAM). 5) Wikszo rozkazw asemblerowych wymaga podania adresu bez poredniego xx, co to znaczy i jak mam adresowa obszar 8000h..FFFFh za pomoc dwch pozycji? 6) W jaki sposb mam wprowadza dane z klawiatury do pamici nie uywajc gotowego polecenia GETACC zawartego w monitorze? 7) Na czym polega w praktyce adresowanie bitowe rejestrw specjal nych ? Oto odpowiedzi Ad.1 Zapisywanie wszelkich wartoci liczbowych oraz kodu maszy nowego procesora w zapisie szesnastkowym (heksadecymalnym) jest najbardziej naturalnym i czytelnym, jak si wkrtce przekonasz, sposo bem. Szesnastkowy zapis, szczeglnie w ujciu techniki cyfrowej, mik roelektroniki, mikrokontrolerw i wreszcie komputerw jest tym, czym jzyk narodowy danego kraju. Prawd jest, e ukady komputerowe przetwarzaj wszystko w ko dzie binarnym, ale nam ludziom trudno byoby czyta i analizowa kod programu w takiej postaci, aczkolwiek jeszcze przed kilkudziesi cioma laty taki sposb programowania by jedynym lecz byy to lata 50. i pocztki techniki komputerowej. Prosty przykad, atwiej odnale (wzrokowo) i rozrni dwie liczby, np.: 1234h i ABCDh ni te same zapisane w postaci binarnej, a wic: 0001001000110100b i 1010101111001101b Jeeli chodzi o drug, do oryginaln cz pytania, to mog mie pewien problem z odpowiedzi, bowiem fakt zamiany, o ktrej Czytel nik mwi, mona by porwna z czym tak oczywistym, a jednocze nie trudnym do opisania jak np. suchanie czyjej mowy i wyciganie z niej wnioskw.

ELEKTRONIKA DLA WSZYSTKICH 6/98

43

Te to potrafisz
(0000...FFFFh) za pomoc rozkazw z argumentami adresu jako xx, a jedynie rozkazami typu MOVX. Ad.6 Wprowadzanie danych do pamici komputerka bez uycia procedury GETACC jest oczywicie wykonalne. Trzeba tylko napisa krtki programik, ktry bdzie realizowa t funkcj, poniej podaj kod rdowy polecenia, ktry odpowiada temu zawartemu w BIOSie komputerka. ;******************************************************* GETACC: push B acall GETDIGIT;pobiera Acc z klawiatury z poz w B swap A push Acc inc B acall GETDIGIT pop B add A,B pop B ret ;******************************************************* ;Procedura pomocnicza pobierajca znak z klawiatury z wywietleniem GETDIGIT: ;pobiera cyfr z pozycji w B push DPH push DPL push B mov A,#DL1 add A,B dec A mov R0,A ;adres pozycji displeja czek1: acall CONIN cjne A,#klaw_OK,nieok sjmp czek1 nieok: clr C subb A,#30h mov DPTR,#kodyk movc A,@A+DPTR ;pobranie wartoci pobajtu (0...15) mov B,A mov DPTR,#cyfry movc A,@A+DPTR ;pobranie znaku na displej mov @R0,A ;i wywietlenie go mov A,#nullkey acall DELAY mov A,B pop B pop DPL pop DPH ret Zapis danej w pamici komputerka pod wskazanym adresem mona zrealizowa take za pomoc takiego prostego listingu: ;******************************************************* EXRAM_ZAPIS: mov DPTR,#adres ;w miejsce adres poda adres mov A, #dana ;w miejsce dana wpisa dan movx@DPTR, A ;zapis do zewn. RAM ret Problem tylko w tym, e aby zapisa np. 100 komrek pamici, trze ba za kadym razem podawa inny adres i dan. I po to s takie proce dury standardowe jak GETACC, CONIN, aby to robi bezbolenie i bez potrzeby kompilowania programiku EXRAM_ZAPIS np. 100 razy. Ad.7 Na koniec bardzo suszne pytanie na temat mao poruszany w naszym cyklu a mianowicie adresowania bitowego rejestrw. Adresowanie bitowe rejestrw polega na odczycie lub modyfikowa niu (zapisie) poszczeglnych bitw niektrych rejestrw z obszaru we wntrznej pamici danych procesora. Naley wiedzie, e nie wszystkie z 256 rejestrw RAM procesora (128 uytkownika + 128 SFR) daj si w ten sposb zapisywa lub odczytywa. Spord rejestrw specjalnych SFR do takich, ktre mona modyfi kowa bit po bicie nale : rejestr B akumulator Acc sowo stanu PSW rejestr sterujcy licznika T2: T2CON rejestr priorytetu przerwa: IP rejestr maski przerwa: IE rejestr sterujcy portem szeregowym: SCON rejestr sterujcy licznikami T0, T1 oraz INT0 i INT1: TCON oczywicie rejestry portw I/O procesora: P0, P1, P2, P3

Kady bit rejestru adresowalnego bitowo posiada swj adres, tak jak ponumerowane s rejestry w wewn. RAM procesora. W jaki sposb mona wic rozrni adresowanie rejestrw od adresowania bitw. To proste, w licie instrukcji procesora 8051 istniej po prostu instrukcje specjalne operujce na bitach, przedstawiem je kilka numerw temu, kiedy to omawialimy instrukcje procesora zapraszam do powtrki. Oprcz niektrych rejestrw SFR, take cz rejestrw z obszaru wewntrznej pamici uytkownika, tj. o adresach 00...7Fh take daje si adresowa. S to rejestry o adresach: 20h...2Fh. Rejestrw jest wic 16, czyli bitw do adresowania jest 16 x 8 = 128. Rozkad adresw poszczeglnych bitw tych rejestrw jest bardzo prosty, oto on:

Jeeli chodzi o adresy bitw rejestrw SFR procesora 8051, to przedstawiam je poniej.

Jak wida z obu tabel, adres rejestrw uytkownika i SFR nie pokry waj si, co umoliwia jednoznaczne rozrnienie ich podczas adreso wania bitowego. I tak np. wydanie polecenia: SETB 0AFh spowoduje ustawienie bitu 7 (najstarszego) w rejestrze IE, czyli bitu o nazwie EA odblokowujcego przerwania. Operacje t mona przeprowadzi take za pomoc modyfikacji cae go rejestru, ale nie bdzie to ju adresowanie bitowe: ANL IE, #7Fh Inny przykad, wydanie polecenia: MOV 0Eh, C spowoduje w efekcie skopiowanie bitu C, czyli bitu 7 w sowie PSW (adres bitu: D7h) do bitu 6 w rejestrze o adresie 21h w wewntrznej RAM obszar rejestrw uytkownika. Kwestie adresowania bitowego porusz w nastpnym odcinku klasy mikroprocesorowej. Na razie radz przypomnie sobie zasady dotyczce adresowania i operacji na bitach z odcinkw kursu powieconych licie rozkazw procesora 8051. Sawomir Surowiski

44

ELEKTRONIKA DLA WSZYSTKICH 6/98

Te to potrafisz
W dzisiejszym odcinku traktujcym o mikrokontrolerach 8051/52 zapoz namy si z moliwociami i sposo bami obsugi i programowania tych wersji kostek ktre posiadaj we wntrzn pami programu typu EPROM. Ze wzgldu na to, e w ostatnich latach, cena ukadw w takich wersjach bardzo spada, nawet kilkanacie razy, oraz pojawi o si wiele mutacji procesorw C51/52 z pamici reprogramowal n typu Flash EEPROM, stay si one dostpne dla wikszoci hob bystw amatorw techniki mikro procesorowej. Jeeli nawet nie za mierzasz wkrtce korzysta z dobro dziejstw procesora w wersji z we wntrzn, reprogramowaln pami ci programu, to przedstawiona w artykule gar informacji z pew noci, przyczyni si do wikszego oswojenia si z popularn 51k.

Mikrokontrolery? To takie proste...


Cz 15
Procesor 8051/2 obsuga i praca z wewntrzn pamici programu

Pamitam jeszcze czasy, a byo to prawie dekad temu, kie dy to cena procesora 87C51 bya tak dua, e aby go zdoby, musiaem sporo odkada ze studenckiego stypendium. Kiedy wreszcie udao mi si kupi wymarzon kostk, rodkw ost ronoci nie byo nigdy za wiele. A to nosio si ukad w folii alu miniowej, a przed wyjciem wyrwnywao si swj ludzki po tencja dotykajc kaloryfera lub rury wodocigowej, a to spraw dzao si zmontowan pytk drukowan przed woeniem dro gocennego ukadu kilka razy. Wszystko po to aby przypadkiem
Tabela 1

nie uszkodzi delikatnej struktury mikroprocesora. Dla przyka du podam, e wwczas przy cenie procesora 87C51 rwnej okoo 500 tys. zotych (50, nowych zotych), wersja bez pami ci EPROM lub wersje z pamici sta ROM, kosztoway okoo 20...30 tys. (2...3 nowe zote), czyli okoo 20 razy mniej. Nie wspominam tutaj o procesora takich jak np. 87C52 z wewntr zn pamici EEPROM, ktrych zdobycie byo nie lada trudno ci, a jeeli ju byy to trzeba byo za nie zapaci ponad milion starych zotych, czyli prawie 1/3 wczesnej przecitnej pensji! Teraz, kiedy na rynku a roi si od mik roprocesorw w rnych wersjach, ceny ukadw znacznie spady. Obecnie za kwot 15 z mona kupi popularn 51k z pamici EEPROM Flash, a kostki tzw. ROM less, czyli bez wewntrznej pamici programu lub z fabrycznym ROMem, spotka si za kilka zotych. I wanie ze wzgldu na to, e rnica po midzy cenami ukadw jest taka maa, warto zainteresowa si takim wanie wersjami tych jake popularnych kostek. W jednym z pierwszych odcinkw szkoy mikroprocesorowej, opisywaem kilka najpopularniejszych obecnie wersji procesorw oraz ich przyblione ceny. Poniewa byo to ponad rok temu, obec ne ceny tych ukadw s jeszcze nisze. Dla przypomnienia zamieszczam infor macje dotyczce najpopularniejszych obecnie mikrokontrolerw serii MCS51 (patrz tabela 1).

ELEKTRONIKA DLA WSZYSTKICH 7/98

33

Te to potrafisz
Zanim przejd do omwienia sposobw programowania i weryfikacji pamici wewntrznej programu mikrokontrolerw 51, powinienem Ci uzmysowi drogi Czytelniku, e do wyko nania tej operacji bdzie potrzebny, oprcz dobrej woli, take programator, w dodatku nie byle jaki, bo potraficy progra mowa procesory rodziny MCS51. Na rodzimym rynku mona znale sporo urzdze tego typu, kosztujcych od kilkuset zotych do kilkudziesiciu! Nie oznacza to e aby zaprogramowa procesor trzeba wybra urzdzenie najdrosze, chodzi o to aby znale te tasze, potrafice jednak bez adnych przystawek, fachowo nazywanych adaptera mi, programowa chocia podstawowe procesowy z rodziny MCS51, a wic: 87C51, 87C52, 98C51, 98C52. Na szczcie wikszo amatorskich programatorw oferowanych przez drobnych rodzimych wytwrcw, spenia te wymagania, a ich cena nie zwala z ng przecitnego zjadacza chleba ktry in teresuje si technik mikroprocesorow i chce doksztaci si w tej jake interesujcej dziedzinie wiedzy. Niestety ch ujarzmienia kostek z wewntrzna pamici programu, oprcz posiadania programatora, wymaga take posiadania komputera PC. Tak wic rczniakom nale si w tym miejscu przeprosiny, lecz musicie zdawa sobie spra w drodzy koledzy, e aby posi stosown wiedz, kady z nas jest zdolny do wielu wyrzecze. Tak te byo w moim przypadku, aczkolwiek jeszcze kilka adnych lat temu, kiedy krloway komputery PC typu XT oraz AT, kupno jednego z nich byo nie lada wysikiem dla caej mojej rodziny. W chwi li obecnej komputer PC wystarczajcy do obsugi programato ra procesorw nawet w najmniejszej konfiguracji powinien mie procesor co najmniej 80286, 1MB pamici RAM, oraz ja kikolwiek twardy dysk z wolnymi ok. 2,5MB przestrzeni. Takiej konfiguracji praktycznie nie spotka my ju na rynku, z pomoc przyj musza wic giedy, gdzie proponowany zestaw w nie co lepszej (z procesorem 80386) konfiguracji mona naby na 200..300 z. Do tego naley dokupi jeszcze uywany monitor mono za okoo 50 z i mona zabra si do programowania. Wane jest aby przy takiej konfiguracji komputera program ob sugi wybranego przez Ciebie programatora potrafi pracowa w trybie tekstowym, bowiem zainstalowanie systemu Win dows tylko dla celw programowania 51ek na tym etapie wiedzy nie ma za bardzo sensu. Na szczcie wikszo oprogramowania na dostpne na na szym rynku programatory pracuje w rodowisku tekstowym MSDOS, i posiada bardzo ograniczone wymagania sprztowe co do komputera, tote z instalacj nabytego urzdzenia nie po winno by wikszych problemw. Na pocieszenie pragn poinformowa, e w ofercie handlo wej AVT znajduje si idealny do naszych potrzeb programator przeznaczony specjalnie dla rodziny procesorw MCS51. Urz dzenie posiada kod handlowy AVT320 i sprzedawane jest w po staci zestawu do samodzielnego montau (wersja /B) lub jako zmontowane (wersja /C). Bardziej zaawansowani i wytrwali elektronicy mog te naby sam pytk drukowan wraz z kil koma ukadami scalonymi opracowanymi specjalnie dla potrzeb tego urzdzenia (zestaw /A). Doczona do zestawu dyskietka zawiera prosty ale funkcjonalny program obsugi programatora. Urzdzenie wsppracuje z komputerem typu PC (poczwszy od poczciwego XT na szybkich Pentiumach skoczywszy) po przez port szeregowy RS232C. Wszystkich zainteresowanych zachcam do lektury artykuu na ten temat, ktry ukaza si z naszym bratnim pimie Elektronice Praktycznej w numerach 9,10 i 11/97, a jest au torstwa niej podpisanego.

Obsuga pamici programu


W tym miejscu powinienem wyjani e w tytule tej czci artykuu chodzio mi o wspominan wczeniej spraw progra mowania pamici wewntrznej procesora. Ale na samym pro gramowaniu si nie koczy, bowiem po tej operacji trzeba zapi san pami sprawdzi czyli fachowo mwic zwery fikowa. Istnieje jeszcze kilka dodatkowych operacji, ktre jed nak omwi w dalszej czci artykuu. Zanim przejd do omwienia sposobw programowania pa mici programu, poinformowa niektrych z Was, drodzy Czy telnicy, e w zasadzie podane niej informacje nie s niezbdne do posugiwania si kontrolerami z wbudowan pamici pro gramu i korzystania z programatorw tych kostek. Jednak aby w peni zrozumie zasad dziaania i dodatkowe funkcje proce sora, warto zna te wiadomoci, a praktyka przyniesie z pew noci mniej niemiych niespodzianek. Oto kilka informacji, ktre pozwol zrozumie Ci wstpnie w jaki sposb mona zaprogramowa wewntrzn pami pro gramu procesora. 1. Wiesz, ju w jaki sposb procesor wykonuje swj program, i e do tego z jakiej pamici (zewntrznej czy wewntrznej) odczytywany jest program, suy kocwka /EA (pin 31). W przypadku kiedy wyprowadzeni to jest zwarte do masy procesor pobiera rozkazy z zewntrznej pamici programu o adresach 0000h...FFFFh, czyli maksymalnie z 64kB (65536 bajtw). W przypadku kiedy zewrzemy to wyprowadzenie do plusa zasilania (+5V) uaktywniona zostanie wewntrzna pami programu (w kostkach 87C51, 89C51 lub podob nych) i kolejne rozkazy bd pobierane wanie z niej. 2. Fizycznie wewntrzn pami programu mona wyobrazi sobie jako wbudowany w procesor ukad reprogramowalnej pamici EPROM (87C51) lub EEPROM (np. 89C51), ktry za porednictwem zewntrznych kocwek procesora mo e by zaprogramowany przez urzdzenie zewntrzne programator. 3. Poniewa procesor posiada te same i niezmienne wyprowa dzenia (40 dla omawianych kostek 8051/C51,87C51, 89C51/C52) programowanie i weryfikacja wewntrznej pa mici programu odbywa si z wykorzystaniem tych samych wyprowadze, tylko e w tzw. trybie programowania. W trybie tym procesor znajduje si poza ukadem macierzys tym (tym w ktrym ma pracowa) a umieszczony jest w pro
Rys. 1. Oglny sposb na programowanie procesora

34

ELEKTRONIKA DLA WSZYSTKICH 7/98

Te to potrafisz
gramatorze, ktry w odpowiedni sposb sterujc pewnymi wyprowadzeniami kostki wprowadza j w ten wanie tryb. 4. Skoro powiedziaem o tym e wewntrzn pami programu mona wyobrazi sobie jako wbudowany chip pamici EP ROM/EEPROM, to oznacza to e do dobrania si do niej musz suy: linie adresowe, ktrych liczba zaley od wielkoci pamici programu linie danych : w procesorach takich jak MCS51 bdzie ich oczywicie 8 dodatkowe linie konfiguracyjne sterujce zapisem i od czytem tej pamici. Obrazowo pokazano to na rysunku 1 5. Wrd tych ostatnich linii sterujcych znajduje si take tzw. linia Vpp czyli linia napicia programujcego. Z regu y napicie to jest wysze od napicia zasilania procesora i wynosi: 12,75 V dla wikszoci ukadw z pamici EPROM, np. 87C51/2 12V dla wikszoci ukadw z pamiciami EEPROM (Flash EEPROM), np. 89C51/2. Istniej take wersje programo wane napiciem 5V (np. procesory Atmela o oznaczeniach 89C51XX5, gdzie XX oznacza maksymaln czstotliwo pracy ukadu w MHz). W zamierzchych czasach istniay take wersje procesorw 8751 ktre programowano napiciem 21V, podobnie jak pa mici EPROM wykonywane kiedy w technologii MOS (obecnie CMOS), ale to przeszo i takich wersji ukadw na rynku si nie spotyka. 6. Dziki stosownemu wysterowaniu wspomnianych koc wek procesora w trybie programowania, a nastpnie po przez podanie napicia programujcego Vpp stosowna zaad resowana przez programator komrka w wewntrznej pa mici programu zostaje zaprogramowana. Po obnieniu na pici Vpp do wartoci napicia zasilajcego Vcc (+5V) pro gramator moe zweryfikowa zapisany bajt. Tak z grubsza odbywa si kady cykl zapisu i sprawdzenia poprawnoci za programowanej komrki. 7. Do prawidowego programowania procesora potrzebny jest take doczony do kocwek XTAL1 i XTAL2 rezonator kwarcowy, tak aby procesor mg oddycha podczas pro gramowania. Ju wiesz przecie e bez sygnau zegarowego procesor jest martwy jak czowiek bez krwi. Warto czstotliwoci rezonansowej kwarcu nie jest w tym przy padku istotna, wane jest aby zawieraa si ona w nastpu jcych granicach: 4...6 MHz dla ukadw z pamici EPROM (87C51/C52) 4...20 MHz dla ukadw z pamici EEPROM/ Flash (89C51/C52) 8. Kto moe w tym momencie zapyta: ...No dobrze, proce sor pracujc w trybie z zewntrzn pamici programu mo e czyta rozkazy spod adresw 0000h...FFFFh, a ile jest tej pamici wewntrznej programu?..., a no tyle ile podaem w tabeli 1. I tak dla poszczeglnych kostek : 87C51, 89C51 jest to 4kB (4096 bajtw), adresy 0000h...0FFFh 87C52, 89C52 jest to 8kB (8192 bajty), adresy 0000h...1FFFh 9. Inne pytanie ...a co si stanie, kiedy to np. pracujc w trybie z wewntrzn pamici programu (kocwka /E A zwarta do Vcc) program dojdzie do koca obszaru we wntrznej pamici programu (np. do adresu 0FFFh dla kostki 87C51), co bdzie wtedy, skd bd pobierane dal sze rozkazy?.... Jeeli tak si stanie i procesor dojdzie do koca tej pamici to dalsze rozkazy bd pobierane z ze wntrznej pamici programu doczonej do procesora w tradycyjny (jak w naszym komputerku edukacyjnym AVT2250) sposb. Na rysunku 2 pokazano sposb doczenia sygnaw : ad resowych, danych i sterujcych w tym napicia Vpp pod czas programowania wewntrznej pamici programu kos tek. W przypadku programowania procesorw w wersji z pamici programu EEPROM Flash typu 89C51 /C52 na rysunku bd pewne rnice, a mianowicie: rezonator kwarcowy moe by z zakresu 4...20 MHz W przypadku ukadw 87C52 i 89C52 adres komrki do za programowania podawany jest na linie portw : P1 LSB adresu oraz P2.0 P2.4 : MSB adresu Przy programowaniu ukadw 87C51/52 na wejcie steruj ce /PROG (kocwka ALE) podczas programowania danej komrki pamici podaje si 25 impulsw ujemnych (od Vcc do masy) o czasie trwania min. 100s i przerwie ok. 10s. Przy programowaniu Rys. 2. Sposb doczenia sygnaw sterujcych podczas programowania i weryfikacji ukadw 87C51/52. kostek 89C51 i 89C52 na wejcie /PROG wy starczy poda 1 impuls ujemny o czasie trwania ok. 100s, to wystarczy aby zaprogramowa bajt w wewntrznej pamici programu tej kostki 10. Warto wiedzie, e zapisan, wewntrzn pami programu mo na zabezpieczy przed odczytem przez osoby niepowoane. Su te mu tzw. Security Bits, czyli bity zabezpieczaj ce, ktrych odpowied nie przepalenie unie moliwia odczytanie zawartoci pamici (nie bjcie si, nie robi si tego zapalniczk, cho Uwaga *): W przypadku kostki 87C52, wykorzystana jest dodatkowa linia adresowa kocwka P2.4, ze wzgldu na wiksz 8kB pami programu. dzi mi tu o ich zaprogra

ELEKTRONIKA DLA WSZYSTKICH 7/98

35

Te to potrafisz
mowanie). Zabezpieczenia zawartoci Tabela 2 programu moe by czsto uyteczne, kiedy np. mamy zamiar oferowa osobom drugim swj zaprogramowany mikropro cesor pracujcy w mniej lub bardziej wy mylnym urzdzeniu, sprzedajc go i nie chcc jednoczenie aby kto skopiowa nasz pomys i powieli w setkach tysicy egzemplarzy. I tu kryje si istotna zaleta procesorw z wewntrzn pamici programu. Ot zauwamy, e w przypadku umieszczenia Uwagi: programu w zewntrznej pamici EP a) 0* oznacza e naley poda 25 impulsw ujemnych o czasie trwania ok. 100s ROM, praktycznie kady ma do niej do i czasie przerwy min. 10s stp, i moe korzystajc z programatora b) Vpp = 12,75 V 0,25V pamici EPROM odczyta jej zawarto, c) Vcc = 5V 10% (dla programowania i weryfikacji) w celu pniejszego skopiowania. Takie postpowanie jest oczywicie niezgodne z prawem, ale kto jest w stanie dochodzi Tabela 3 swoich praw, szczeglnie, e program moe zosta sprytnie zmodyfikowany przez programistpirata w sposb unie moliwiajcy pniejsze udowodnienie mu jego winy. Najistotniejsze jest to e w takich sytuacjach nasz, czsto opraco wywany miesicami pomys zostanie byskawicznie skradziony i powielony! 11. I tu z pomoc przychodzi wewntrzna pa mi programu i bity j zabezpieczajce. Ot raz zapisany i zabezpieczony pro gram w procesorze jest nie do odczyta nia! Nie ma sposobu aby program taki od Uwaga: czyta jak ze zwykej pamici EPROM. Je a) 0* oznacza e naley poda 1 impuls ujemny o czasie trwania ok. 100s eli ty wanie jeste autorem tego progra b) Vpp = 12 V 0,25V lub 5V 0,25V dla wersji 89C51/C52 XX 5 (patrz tekst) c) procedura kasowania pamici wymaga podania impulsu na wejcie /PROG mu, to i tak wszystko w porzdku, bo prze o czasie trwania 10 ms. chowujesz gdzie, zapewne w kompute rze, kopi programu oraz listing rdowy. z pamici EEPROM robi si to tak jak w przypadku pami A potencjalny pirat? ten musi obej si smakiem, bo i tak ci EPROM, korzystajc z kwarcowego, przezroczystego nic nie wskra, a program bdzie zabezpieczony przed jego okienka. Procesor umieszcza si po prostu w kasowniku ul ingerencj. trafioletowym i po okoo 15 minutach jest po wszystkim, 12. Pytanie: ...No tak, ale skoro zabezpieczymy ju ten pro kostka jest czysta i gotowa do ponownego zaprogramo gram, to jak go potem usun? Zwyczajnie. W ukadach wania i uycia. Inaczej jest w przypad Rys. 3. Zalenoci czasowe podczas programowania procesew a pamici EPROM (87C51, 87C52). ku nowoczeniejszych ukadw z pamici EEPROM Flash. Tu taj nie jest potrzebne promieniowanie ultra fioletowe. Kasowanie wewntrznej pamici programu odbywa si w programatorze. Wy sterowujc kocwki sterujce, podajc na picie Vpp (patrz tabe la 3) oraz impuls ujem ny o czasie trwania ok. 10 ms, powodujemy skasowanie caej za wartoci pamici pro gramu. Po takiej opera cji ukad jest gotowy do ponownego zaprogra mowania i uycia.

36

ELEKTRONIKA DLA WSZYSTKICH 7/98

Te to potrafisz
W zalenoci od usta wienia sygnaw steruj cych oznaczonych na rysunku 2 jako CF1...CF4 oraz dodatkowych ALE i EA, RST i PSEN mona uzyska kilka funkcji pro gramowania lub weryfi kacji wewntrznej pa mici programu. Wszyst kie dozwolone kombina cje przedstawiaj: dla kostek 87C51/ C52 tabela 2 dla kostek 89C51/ C52 tabela 3 W dalszej czci artyku u dokadnie objani zna czenie poszczeglnych pozycji tabel 2 i 3 podczas operacji programowania wewntrznej pamici mikrokontrolerw.

Rys. 4. Zalenoci czasowe podczas programowania procesorw a pamici EEPROM/Flash (89C51, 89C52).

13. Wtpliwo: ... No tak ale przecie istnieje w licie rozka zw procesora instrukcja MOVC A,@A+DPTR, dziki ktrej moliwe jest odczytanie kadego bajtu z wewntrznej czy zewntrznej pamici programu, co wtedy...? Odpowiadam: i na to jest rada. Ot producenci procesorw umiecili do datkowy bit zabezpieczajcy, ktrego przepalenie (zapro gramowanie) powoduje zablokowanie tej instrukcji, w wy padku kiedy kto prbuje wykona j z obszaru zewntrznej pamici programu zastanw si dlaczego jest to dobry sposb na zabezpieczenie? 14. I na koniec jeszcze jedna informacja o zabezpieczeniach. Ot niektrzy producenci procesorw rodziny MCS51, pra wie wszyscy produkujcy ukady w wersji z pamici EP ROM stosuj dodatkowe zabezpieczenia w postaci tzw. tab licy szyfrujcej (ang. Encryption Table). Fizycznie jest to wy dzielona cz pamici EPROM, o rozmiarze przewanie rwnym 1, 2 lub 4 krotnoci 16 bajtw. Zaprogramowanie ta beli szyfrujcej sekwencj 16, 32 lub 64 bajtw (zalenie od wersji ukadu) po uprzednim zaprogramowaniu wewntrznej pamici programu, powoduje, to, e w przypadku nie zabez pieczenia procesora bitami zabezpieczajcymi, odczytywany przez potencjalnego hackera kady bajt programu bdzie wy nikiem operacji EXNOR (Exclusive NOR) faktycznego baj tu programu z kolejnym (modulo wielko tabeli szyfrujcej) bajtem tabeli szyfrujcej. Dziki temu bez znajomoci zawar toci tabeli enkrypcji (ktra po zaprogramowaniu nie jest do stpna) nie jest praktycznie moliwe roz kodowanie programu przez osob nie Tabela 4 majc dostpu do zawartoci tabeli szyfrujcej. Oczywicie autor programu posiada takow kopi i wie co trzeba zro bi z odczytanym programem aby dopro wadzi go do stanu uywalnoci. W ostatnich czasach, ze wzgldu na nie potrzebn czsto komplikacj, wik szo producentw procesorw rodziny MCS51 odesza od koncepcji stosowa nia tabeli szyfrujcej i stosuje dodatkowe bity zabezpieczajce, ktre pokrtce opi sz w dalszej czci artykuu.

Na rysunku 3 i 4 przedstawiem zalenoci czasowe pomidzy sygnaami sterujcymi podczas programowania procesorw z pamiciami EPROM (87C51/C52) i EEPROM Flash (89C51/C52).

Charakterystyka pamici EPROM/EEPROM procesorw


Ukady 87C51/C52 wyposaone s w pami EPROM wyko nan w technologii CMOS, programowana tzw. algorytmem szybkim QuickPulse Programming. Algorytm ten polega na podaniu napicia Vpp o wysokoci 12,75V ( na wejcie EA/Vpp) a nastpnie podanie na wejcie ALE procesora serii 25 impul sw ujemnych o czasie trwania 100s (stan L) i przerwie min. 10s (stan H). W wypadku procesorw 89C51/ C52 napicie Vpp moe mie jedn z dwch wartoci: 12V i 5V w zalenoci od wersji procesora (patrz tekst wyej). Mikrokontrolery posiadaj tzw. sygnatury, dziki ktrym mo liwa jest autoidentyfikacja ukadu przez obsugujcy programa tor. Fizycznie s to pojedyncze komrki ROM wbudowane w procesor z zapisanymi bajtami mwicymi o producencie ukadu, jego typie oraz wersji wykonania. S to: a) dla ukadw z pamici EPROM (adres: 030h) = 15h, oznacza producenta (w tym wypadku jest to Philips)

ELEKTRONIKA DLA WSZYSTKICH 7/98

37

Te to potrafisz
(adres: 031h) = 92h, oznacza ukad 87C51, podobnie dla 87C52 jest to 97h b) dla ukadw z pamici EEPORM / Flash (np. producenta firmy Atmel) (adres: 030h) = 1Eh, oznacza producenta w tym przypad ku Atmel) (adres: 031h) = 51h, oznacza ukad 89C51 (adres: 032h) = FFh oznacza napicie Vpp=12V, =05h oznacza Vpp=5V. Ze wzgldu na rnorodno typw ukadw jak i braku jed nolitego standardu wrd producentw, podane wartoci mog si zmienia. Naley wic je traktowa jako informacyjne. Na zakoczenie wspomn e dostp do sygnatury odbywa si po przez zaadresowanie (adres podany w nawiasie) sygnatury tak jak to si odbywa w przypadku weryfikacji pamici progra mu, z t rnic, e odmienny jest ukad sygnaw sterujcych patrz tabele 2 i 3. Do prawidowego zaprogramowania koci potrzebny jest do czony zewntrzny oscylator kwarcowy (patrz rys.2) Powodem zastosowania tego elementu jest fakt, e podczas programo wania, pracuje licznik wewntrznego adresu procesora oraz od bywa si transfer danych z rejestrw portw procesora do mat rycy pamici programu. Podczas programowania, adres danej komrki EPROM / EEP ROM podawany jest przez programator na port P1 procesora (modsza cz adresu LSB) oraz na cz pinw portu P2. Przy ukadach C51 wyposaonych w 4 kB pamici programu s to linie P2.0... P2.3, a w kostkach C52 dodatkowo sterowana jest linia P2.4. W ten sposb dziki 12 liniom adresowym (A0...A11) dla C51 oraz 13 liniom adresowym (A0...A12) dla kostek C52 moliwe jest zaadresowanie caej wewntrznej pa mici programu. Jeeli chodzi o dane to programator podaje je na port P0 pro cesora. Nastpnie ustawione zostaj (zgodnie z tabel 2 dla ukadw z EPROM oraz tabel 3 dla ukadw z EEPROM Flash) sygnay RST i PSEN oraz wybrana zostaje konfiguracja pinw CF1...CF4 okrelajcych zgodnie z tymi tabelami operacje na procesorze jaka ma by wanie wykonana. Przy programowa niu sekwencja poziomw logicznych sygnaw CF1...CF4 b dzie rwna: 0111. Nastpnie (patrz zalenoci czasowe na rys.3 i 4) programa tor podaje napicie Vpp na kocwk EA procesora, po czym po krtkiej chwili, kiedy napicie to naronie do odpowiedniej wartoci programator dla ukadw z EPROM : generuje szereg impulsw programu jcych (25) o parametrach jak podaem wczeniej w artykule dla ukadw z EEPROM jest to 1 impuls o okrelonym cza sie trwania (zazwyczaj jest to 100s) Nastpnie programator obnia do pierwotnej wartoci Vcc warto napicia programujcego Vpp, po czym wystawia po ziom niski na lini CF2, co powoduje e zapisana przed chwila dana jest wystawiana, tym razem przez procesor na linie portu P0 celem weryfikacji (odczytu) przez urzdzenie programujce. W ukadach 89C51/52 programator moe monitorowa stan programowania komrki za porednictwem dodatkowej linii P3.4 procesora. Ot po zapisaniu danej w pamici wewntr znej programu, procesor sygnalizuje to pojawieniem si stanu niskiego na tej linii, co moe odczyta programator i w ten spo sb skrci niezbdny czas impulsu programujcego, podawa nego na wejcie /PROG procesora. Programowanie tablicy szyfrujcej (Encryption Table) w procesorach z pamici EPROM odbywa si podobnie, jak w przypadku programowania pamici programu, lecz inna jest kombinacja sygnaw sterujcych CF1...CF4 (patrz tabela 2). Podobnie wyglda programowanie bitw zabezpieczajcych, z t rnic, e do przepalenia danego bitu wystarczy kombina cja sygnaw CF1..CF4 oraz jak poprzednio cykl programujcy z Vpp (jak poprzednio). Linie adresowe oraz danych nie maj w tym momencie znaczenia. W tabeli 4 przedstawione s efekty przepalania kolejnych bitw zabezpieczajcych. W przypadku ukadw 87C51/C52 mamy do czynienia tylko z dwoma bitami LB1 i LB2. Przepa lenie LB1 zabezpiecza ukad przed przyszym programowa niem, czy raczej doprogramowaniem tej czci pamici, ktra nie zostaa wczeniej podczas programowania zapisana (nie musimy przecie programowa caej pamici programu, a tylko tyle ile ma nasz program. Przepalenie bitu LB2 powo duje zablokowanie moliwoci weryfikacji zaprogramowanej pamici programu. Dlatego naley pamita, e bity zabezpieczajce programuje si w zalenoci od potrzeb, ale zawsze na kocu caego proce su programowania! W ukadach z 89C51/C52 moliwe jest elektryczne kasowa nie caej zawartoci wewntrznej pamici programu poprzez podanie 10 milisekundowego impulsu programujcego przy pozostaych sygnaach CF1...CF4 ustawionych jak podano w tabeli 3. W wypadku ukadw z EPROM kasowanie pamici moe by wykonane tylko za porednictwem promieni ultrafioletowych (podobnie jak w typowych kostkach EPROM) o dugoci fali naj lepiej okoo 4000A (400 nm). Do kasowania ukadw najlepiej jest stosowa fabryczne ka sownika EPROM lub samodzielnie wykonan lamp kasujca np. ze wietlwki pracujcej w podanym zakresie fal. W tym miejscu chce przestrzec niektrych z Was o moli woci zastosowania w roli lampy kasujcej wystpujcych na naszym rynku maych wietlwek do tzw. sprawdzania banknotw. Niestety nie nadaj si one do kasowania struktur EPROM ze wzgldu na nieodpowiednie widmo pro mieniowania. Trzeba zatem naby specjaln wietlwk, najlepiej miniatu row (o mocy 4...8W) emitujca stosowne promieniowanie. Cech charakterystyczn waciwej dla naszych celw wiet lwki jest cakowita przezroczysto rurki czyli brak lumino foru. Jeeli natraficie w sklepie na taki egzemplarz, pracujcy w zakresie ultrafioletu, to z pewnoci kasowanie ukadw za pomoc takiej lampy bdzie udane. Pamitajcie tylko aby wasnorcznie wykonany kasownik zamkn w obudowie, w przeciwnym przypadku ostre promie niowanie ultrafioletowe moe uszkodzi wzrok! Jeeli kto chciaby sprbowa samodzielnie wykona cho ciaby najprostszy programator i zaprogramowa procesor na podstawie niniejszego artykuu, zalecam signiecie do litera tury [1] i [2]. Uprzedzam jednak e ze wzgldu na rnorod no parametrw czasowych w przebiegach z rys.3 i 4 w za lenoci od producenta ukadu oraz jego wersji, nie jest to za danie atwe, a przynajmniej nie da si zrobi na kolanie. Mo na bowiem drogi czsto procesor po prostu uszkodzi. Dlate go jeszcze raz zalecam korzystanie z gotowych programato rw lub zoenie samodzielne proponowanego w artykule pro gramatora AVT. Sawomir Surowiski

Literatura: [1] 80C51 Based 8bit Microcontrollers, katalog Philips IC20 [2] Microcontrollers DataBook, Atmel 1995/97

38

ELEKTRONIKA DLA WSZYSTKICH 7/98

Te to potrafisz
Po duszej przerwie, spowodowanej po czci waka cjami, zamieszczam dalsze komen tarze dotyczce waszych listw, w ktrych poruszacie problematyk opisywan w serii artykuw o 8051. Dzi kolejna porcja listw oraz dodatkowe sprostowania b dw, ktre wkrady si do druku podczas tworzenia artykuw klasy mikroprocesorowej. Przedstawiam rwnie kilka nadesanych rozwi za zadania dotyczcego zegara cza su rzeczywistego. Na koniec zna jdziecie prawdziwy ksek dla bar dziej zaawansowanych studentw klasy mikroprocesorowej mowa b dzie mianowicie o dwch aplika cjach na komputerek edukacyjny, przysanych do redakcji przez jedne go z Czytelnikw. Jedna z nich po zwoli na programowanie pamici EEPROM, a druga na programowa nie mikrokontrolera 89C2051!

Mikrokontrolery? To takie proste...


Cz 16
Kcik pocztowy 8051
czyli bdzie o 1 mniejsza od prawidowej. Dlatego przed instrukcj ode jmowania SUBB naleao doda instrukcj kasujc przypadkowo usta wiony znacznik C. CLR CLR SUBB LCALL A C A, CRC SEND ;brakujca instrukcja ;wysanie akumulatora sumy

8051 Errare Humanum Est


LIST 1 Zenon Rakoczy z Chropaczowa susznie zwrci uwag na bd, ktry wkrad si w program monitora komputerka edu kacyjnego, zawartego w pamici EPROM. Chodzi bowiem o bdne obliczanie sumy kontrolnej w procedurze monitora SAVE, ktra dostpna jest pod klawiszem 8 klawiatury komputerka. W wyniku tego plik utworzony w formacie IntelHEX z zawartoci pamici RAM komputerka jest nieprawidowy, a w zasadzie nieprawid owa jest tylko suma, bdca ostatnim bajtem w kadej linii tego zbio ru. O formacie IntelHEX pisaem w zeszym roku na amach bratniego pisma Elektroniki Praktycznej. W wyniku braku instrukcji CLR C

Prawidow sum kontroln mona take uzyska stosujc negacj lo giczn z inkrementacj otrzymanej sumy bajtw rekordu, oto instrukcje: MOV CPL INC LCALL A, CRC C A SEND

;wysanie akumulatora sumy

w procedurze, przed obliczeniem wspomnianej sumy kontrolnej podczas odejmowania (instrukcja SUBB ...) nastpuje take niezamierzone odjcie znacznika przeniesienia C. Kiedy znacznik ten jest rwny 0, wszystko jest w porzdku, jednak kiedy rwna si 1 wtedy obliczona suma kontrol na jest mniejsza o 1 od prawidowej. Std po powtrnym zaadowaniu tak utworzonego zbioru IntelHEX, do komputerka (komenda LOAD moni tora), wystpi komunikat Err, co wiadczy o bdzie w linii zbioru. Przyjrzyjmy si temu bliej. Ot w programie monitora obliczanie su my kontrolnej odbywa si nastpujco: ..... ..... CLR SUBB A A, CRC ;w zmiennej CRC znajduje si suma (mod 100h) ;wszystkich bajtw rekordu (linii) danych ;teraz nastpi obliczenie sumy kontrolnej ;wyzerowanie akumulatora ;obliczenie sumy wg wzoru: suma = 100h CRC ;ale ze wzgldu na instrukcj SUBB tak naprawd ;wykonywane jest dziaanie: suma = 100h CRC C ;i wysanie sumy przez port szeregowy

W dalszej czci opisu bd posugiwa si t metod obliczenia su my kontrolnej rekordu danych w zbiorze IntelHEX. W zwizku z tym, e bd zosta poprawiony w oprogramowaniu mo nitora na przeomie maja i czerwca, nabywcy zestaww AVT2250 z okresu przed t dat mog mie problemy z prawidowym generowa niem zbiorw HEX przez komputerek. Zenon Rakoczy pyta jak rozwi za ten problem. Sposobw jest kilka. ROZWIZANIE NR 1 Poniej zamieszczony jest listing 1 prawidowej procedury SAVE, ktr mona skompilowa z dowolnym przesuniciem wzgldem po cztku zewntrznej pamici operacyjnej komputerka, a nastpnie uy wa, adujc j w razie potrzeby tak jak kady inny program tworzony przez siebie (uruchamiajc j poleceniem JUMP). Pogrubion czcionk zaznaczono linie programu, ktre obliczaj ostat ni bajt transmitowanego rekordu danych. W tej procedurze rejestr R6 wykorzystywany jest jako zmienna CRC, o ktrej mwiem wczeniej. W procedurze wykorzystano dwie dodatkowe podprocedury umiesz czone w ciele monitora, a mianowicie NULLKEY (adres: 02CDh) oraz procedur RSTEXT (adres 02DEh) zawarte w pamici EPROM monito ra. Zadaniem pierwszej procedury jest oczekiwanie na zwolnienie kla wisza klawiatury, druga procedura przesya cig znakw ASCII tzw. string poprzez zcze portu szeregowego komputerka, ktrego adres jest podany w rejestrze DPTR.

LCALL SEND ..... Jak z tego wida w przypadku gdy znacznik C jest rwny 1 suma kontrolna obliczona zostanie nieprawidowo wg wzoru: suma = 100h CRC 1,

ELEKTRONIKA DLA WSZYSTKICH 9/98

35

Te to potrafisz
Listing 1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 CPU 8052.def include const.inc include bios.inc ;**************************************************** ;Poprawiona procedura wysylania zawartosci RAM ;komputerka w formacie Intel-HEX ;wersja relokowalna od adresu 8000h (w ext.RAM) ;**************************************************** org 8000h ;**************************************************** SAVEDATA: mov DL1,#_5 lcall 02CDh ;adres procedury NULLKEY clr F0 ;flaga dot. koca mov B,#5 mov A,#80h ;#nullkey lcall DELAY lcall push push mov lcall inc mov mov pop pop mov qwer: cjne xnowy: mov mov lcall mov lcall mov mov mov lcall mov lcall mov add mov mov lcall mov add mov clr lcall mov mov xznow: lcall movx add mov inc niewp: mov mov xrl jnz mov xrl jnz setb dlej: mov cpl inc lcall mov lcall GETDPTR DPH DPL B,#5 GETDPTR DPTR 04,DPH 05,DPL 03 02 R6,#0 lcall CONIN A,#klaw_OK,qwer mov DPH,R2 DPL,R3 B,#5 DPTR4HEX A,#: OUTRS R7,#10h A,R7 R6,A send A,R2 send A,R6 A,R2 R6,A A,R3 send A,R6 A,R3 R6,A A send DPH,R2 DPL,R3 movx A,@DPTR send A,@DPTR A,R6 R6,A DPTR mov R3,DPL A,R2 A,R4 dlej A,R3 A,R5 dlej F0 djnz A,R6 A A send A,#0Dh OUTRS R7,xznow R2,DPH

8000 8000 8000 8003 8006 8008 800B 800D 8010 8013 8015 8017 801A 801D 801E 8021 8024 8026 8028

75786D 1202CD C2D5 75F005 7480 120295 1203B9 C083 C082 75F005 1203B9 A3 858304 858205 D003 D002 7E00

;zachowaj na stosie

;CRC=0

802A 1202C5 802D B40DFA 8030 8032 8034 8037 803A 803C 803F 8041 8042 8043 8046 8047 804A 804B 804C 804D 804E 8051 8052 8053 8054 8055 8058 805A 805C 805D 8060 8061 8062 8063 8A83 8B82 75F005 12025F 743A 1202B9 7F10 EF FE 128090 EA 128090 EE 2A FE EB 128090 EE 2B FE E4 128090 8A83 8B82 E0 128090 E0 2E FE A3

;wypisanie adresu

;16 bajtow danych ;CRC = liczba bajtow w rekordzie ;wyslanie liczby bajtw ;zaladowanie adresu MSB ;i wyslanie go

;CRC = CRC + MSB adresu ;zaladowanie adresu LSB ;i wyslanie go

;CRC = CRC + LSB adresu ;wyslanie: 00 oznacza dane

;pobranie danej z komorki pamieci RAM ;i wyslanie jej ;ponowne pobranie tej danej ;CRC = CRC + dana ;zwiekszenie adresu ;i zapamietanie w R2.R3

8064 AA83 8066 AB82 8068 8069 806A 806C 806D 806E 8070 8072 8074 8075 8076 8077 EA 6C 7006 EB 6D 7002 D2D5 DFE8 EE F4 04 128090

;porownanie MSB adresu pocz. i konca ;czy takie same ;nie to skocz dalej (do etyk.dlej) ;porownanie LSB adresu pocz. i konca ;czy takie same ;nie to skocz dalej (do etyk.dlej ;flaga ozn. koniec obszaru ;nastepny bajt danej z RAM ;zaladowanie CRC ;i obliczenie reszty wg. wzoru ;reszta = 100h CRC ;i wyslanie jej ;wyslanie... ;konca...

807A 740D 807C 1202B9

36

ELEKTRONIKA DLA WSZYSTKICH 9/98

Te to potrafisz
Listing 1, cd.
86 807F 87 8081 88 8084 89 90 8087 91 8089 92 808C RSTEXT 93 808F 94 95 8090 96 8093 97 8095 98 8098 99 809A 100 809D 101 102 809E 80A2 80A6 80AA 103 104 80AC 740A 1202B9 30D5A9 C2D5 90809E 1202DE 22 120235 C5F0 1202B9 E5F0 1202B9 22 3A303030 30303030 3146460D 0A00 mov lcall jnb clr mov lcall A,#0Ah OUTRS F0,xnowy F0 DPTR,#rs_end 02DEh ;wiersza, znaki #13#10... ;tzw. eoln ;jesli nie koniec to nowy rekord ;jesli koniec to... ;wyslanie konca pliku :00000001FF ;za pomoca dodatkowej procedury monitora ;i koniec podprogramu ;procedura dodatkowa SEND: ;wysyla bajt jako 2 znaki ASCII

ret ;-----------send: lcall HEXASCII xch A,B lcall OUTRS mov A,B lcall OUTRS ret

rs_end db :00000001FF,13,10,0 ;**************************************************** END

Kompilacja zakonczona pomyslnie! Zbior: sav8000.s03, 172 bajt(ow), 0.3 sekund(y).

ROZWIZANIE NR 2 Innym sposobem ominicia tej trudnoci jest wasnorczne zmodyfikowanie progra mu monitora umieszczonego w pamici EP ROM. W tym jednak przypadku niezbdny jest dostp do programatora pamici EP ROM lub posiadanie takiego urzdzenia. Kro ki, jakie trzeba podj w tym przypadku, po zwol na modyfikacj monitora w taki spo sb, e nacinicie klawisza 8 wywoa po tem prawidow procedur wysyania zawar toci pamici RAM poprzez cze szeregowe komputerka. Oto one. 1. Odczyta programatorem zawarto EP ROM komputerka 27C64 2. Korzystajc z opcji Edit programatora zmodyfikowa nastpujce komrki pa mici spod podanych niej adresw: Adres: 0701h 0721h Jest: 91 A9 43 71 24 Ma by: F1 21 12 09 00

Listing 2
----------------------------------------------------------------------------Adres Dane ----------------------------------------------------------------------------0900 75 78 6D0903 12 02 CD C2 D5 75 F0 05 74 80 12 02 95 12 03 B90913 C0 83 C0 82 75 F0 05 12 03 B9 A3 85 83 04 85 820923 05 D0 03 D0 02 7E 00 12 02 C5 B4 0D FA 8A 83 8B0933 82 75 F0 05 12 02 5F 74 3A 12 02 B9 7F 10 EF FE0943 12 09 90 EA 12 09 90 EE 2A FE EB 12 09 90 EE 2B 0953 FE E4 12 09 90 8A 83 8B 82 E0 12 09 90 E0 2E FE 0963 A3 AA 83 AB 82 EA 6C 70 06 EB 6D 70 02 D2 D5 DF 0973 E8 EE F4 04 12 09 90 74 0D 12 02 B9 74 0A 12 02 0983 B9 30 D5 A9 C2 D5 90 09 9E 12 02 DE 22 12 02 35 0993 C5 F0 12 02 B9 E5 F0 12 02 B9 22 3A 30 30 30 30 09A3 30 30 30 31 46 46 0D 0A 00

Podzikowania kieruj take w stron p. Marka Lewandowskiego, od ktrego otrzymaem poczt emailow informacj o przedstawionym tu bdzie. LIST 2 Zbigniew Wawry z Woowa w swoim licie susznie za uway pewn nieciso w wyjanieniach dotyczcych obsugi bufora portu szeregowego rejestru SBUF, o ktrym pisaem w kwietniowym numerze EdW na stronie 35 (grna prawa szpalta). Ot stwierdzenie, e ... rejestr SBUF mona adresowa tak e za pomoc metody poredniej (poprzez rejestr wskanikowy @Ri)... jest oczywicie bdne, bowiem instrukcje operujce na tym wskaniku z adresem powyej 7Fh bd oczywicie operoway na grnej czci pa mici RAM procesora, dostpnej tylko w kostkach 80C52 i pochodnych (87C52). Jak zapewne przypominacie sobie, w procesorach tych, w od rnieniu od 80C51, znajduje si dodatkowe 128 bajtw wewntrznej pamici RAM umieszczonych pod adresami 80h...FFh. Dostp do tych komrek jest jednak moliwy tylko za pomoc wanie adresowania bez poredniego, czyli poprzez rejestry Ro i R1 przy uyciu instrukcji np. MOV MOV R1, #90h A,@R1 ; odczytaj z komrki o adresie 90h ; dan i umie w akumulatorze

3. Od adresu 0900h zaadowa do bufora programatora ww. kod pro gramu zmodyfikowanej procedury SAVE (listing 1) skompilowany od tego adresu, za pomoc dyrektywy kompilatora ORG 0900h ;zamiast ORG 8000h pozostawiajc wczeniejszy odczytany z EPROM kod programu monitora, bez zmian. Mona take zamiast tego przepisa niej wymienione dane z adresu 0900h do bufora programatora listing 2. atwiej jest jednak skorzysta z programu kompilatora PASM51.EXE i skompilowa listing do postaci akceptowanej przez program obsugi programatora, czyli np. za pomoc instrukcji: PASM51.EXE <zbior> /h { Enter} 4. Zaprogramowa ponownie pami EPROM tak zmodyfikowanym ko dem monitora (wczeniej naley star pami skasowa promienia mi ultrafioletowymi, lub posuy si inn, czyst kostk 27C64). Mona take uy pamici EEPROM typu 28C64 (w dalszej czci ar tykuu jeden z czytelnikw przedstawi prost przystawk do kompu terka, suc do programowanie tej pamici). W ten sposb otrzymamy poprawiony program monitora, w ktrym procedura zapisu pamici RAM komputerka SAVE bdzie dziaa pra widowo, a wywoanie jej bdzie odbywa si tak jak poprzednio za pomoc klawisza 8 klawiatury komputerka.

W przypadku chci zaadresowania tej komrki za pomoc instrukcji np. MOV A, 90h

do akumulatora zostanie zaadowana zawarto rejestru 90h umieszczo nego w obszarze SFR procesora, czyli w tym wypadku rejestr portu P1, a nie komrka dodatkowej pamici RAM. Do adresowania rejestru SBUF naley oczywicie uy adresowania bezporedniego, czyli instrukcji np. MOV A, SBUF ;zaadowanie odebranego znaku do akumulatora

ELEKTRONIKA DLA WSZYSTKICH 9/98

37

Te to potrafisz
Przyznam, e nie wiem co skonio mnie do przedstawienia takiego wywodu, bo w kilkuletniej praktyce nigdy nie zastosowaem bdnego adresowania. Druga uwaga dotyczy niejasnego wywodu dotyczcego omawiania rejestrw odpowiedzialnych za przerwania, zamieszczonego w EdW nr 5/98 str. 38, prawa grna szpalta. Prawd jest, e priorytet przerwa jest ustawiony fabrycznie i tak np. najwyszy priorytet ma przerwanie od wejcia INT0. ...Niestety dalsze stwierdzenie, e przerwanie jedno zostanie przerwane przez drugie dlatego, e jest dalsze w kolejnoci fabrycznie ustalonej, jest bdne. Sztywny priorytet przerwa ma zasto sowanie jedynie do rozstrzygania kolejnoci przerwa jednoczenie nadchodzcych. Natomiast do ustalania, ktre przerwanie moe by przerwane przez inne suy tylko rejestr priorytetu IP... koniec cytatu p. Zbigniewa. Zbigniewie, przeczytawszy kilka razy ten fragment artykuu musz przyzna, e opisujc ten problem za pomoc jzyka prostego do gra nic moliwoci, by moe sam ugryzem si w jzyk i ... zamiast napi sa to co miaem na myli, przelaem t myl w sposb niewaciwy. W kadym razie, obydwu nam chodzi o to samo. Ci spord Czytelni kw, ktrzy niewaciwie, zrozumieli wyjanienia proszeni s o zweryfi kowanie swoich wiadomoci. Postaram si pewne do skomplikowa ne dla Was, a jednoczenie oczywiste dla mnie problemy 8051, opi sywa bardziej jasno, tak aby nie byo wtpliwoci. LIST 3 Pan podpisujcy si jako RY lat XX, pyta w swoim li cie, dlaczego w listingu programu z lekcji 8 str. 46 szpalta 2, linia 74 uywam instrukcji ORL TMOD, #00h na zapomnie o globalnym ich odblokowaniu, po odpowiednim usta wieniu bitw w rejestrze masek przerwa. W przeciwnym wypadku ukad bdzie przysowiowo martwy. Tak wic wspominana wczeniej instrukcja powinna znale si dla porzdku po linii 79, kiedy to ustawione zostay bity maskujce przerwa nie od licznika T1 i rejestru priorytetu przerwa. Tomaszu, dzikuj za te uwagi i ... gratuluj wnikliwej lektury naszych artykuw oraz dobrego oka. LIST 5 Marcin Wizania z Kieleckiego zauway nieciso w lekcji 8 z nr 5/98 EdW str. 44, szpalta 1, wiersz 30 (od do u). Ot stwierdzam tam, niesusznie zreszt, e ... w przy padku wartoci rezonatora 11059200 Hz zliczanie 1/100 sekundy byo by do kopotliwe ze wzgldu na to, e warto tego kwarcu nie dzie li si przez 12 i dodatkowo przez liczb cakowit, tak aby da liczb 100.... Ot dzieli si a t liczb, jak susznie zauwaa Marcin, jest przecie: 9261, bo: 11059200 / 12 = 921600, 921600 / 100 = 9216 szukana liczba cakowita Std warto pocztkow licznika T1 mona obliczy nastpujco: T1pocz = TH1.TL1 = 65535 9216 + 1 = 56320 = DC00h Przy tej wartoci pocztkowej wpisywanej do licznika za pomoc in strukcji np. MOV TH1, #0DCh ; olr TL1, #0 nie jest konieczne! licznik T1 bdzie przepeniany dokadnie 100 razy na sekund, czyli tak jak chcielimy. Pozdrawiam Pana, panie Marcinie.

ktra przecie nie zmienia zawartoci rejestru TMOD. I faktycznie in strukcja nie wpywa na zawarto rejestru, bowiem jest to logiczne do da liczb 0 do rejestru TMOD. W programie instrukcja ta jednak si pojawia, bowiem w praktyce podczas pisania innych aplikacji wykorzys tujcych np. licznik T1 (lub inny) wystpuje potrzeba modyfikacji czw rek rejestru TMOD (starszych 4 bitw dla licznika T1, modszych 4 bi tw dla licznika T0) i najpierw naley wyzerowa t czwrk, ktr chcemy zmieni instrukcj ANL, a nastpnie ustawiamy bity tej czwr ki wanie za pomoc instrukcji ORL. W przykadzie podanym w artyku le, do wymaganej pracy licznika T1 nie potrzeba ustawiania adnego z 4 starszych bitw rejestru TMOD, ale instrukcj w linii 74 wstawiem domylnie w celu ukazania, e w innym przypadku wystarczy jej uy jedynie ze zmodyfikowanym drugim jej argumentem, tak aby uzyska zamierzony efekt. Tak wic zastosowanie tej instrukcji ma tylko i wycznie znaczenie poznawcze i oczywicie nie wpywa w tym przypadku na zawarto re jestru TMOD. Aby usun swoje wtpliwoci, Pan Ry, samodzielnie napisa pro gram do testowania operacji logicznych, ktre wykonuje procesor 8051. Gratuluj wietnego pomysu. ycz powodzenia przy pisaniu ko lejnych programw. LIST 4 Tomasz Kutya ze Stalowej Woli zauway niecisoci w druku dotyczce oblicze licznikw procesora, zamiesz czonych w numerze EdW 5/98 (ach, to chyba naprawd pe chowy numer...!). I tak: a) na str. 38, szpalta 2, pod rysunkiem rejestru IP w opisie jego bitw dwukrotnie powtrzona zostaa para bitw PX1 i PT1; b) w lekcji nr 8, str. 45, szpalta 1, wiersz 17 (od dou) jest fz = Fxtal / 12 / 32 = 28000 Hz a powinno by oczywicie ... 28800 Hz! c) na tej samej stronie i kolumnie, wiersz 6 (od dou) wydrukowano: fz / 128 = 28800 / 256 = 225 (=THimp) a powinno by oczywicie: fz / 128 = 28800 / 128 = 225 ...itd. d) na stronie 45, szpalta 2, wiersz 4 (od gry) wydrukowano: TH1pocz = TH1max TH1imp + 1 = 256 225 + 1 = 31 a powinno by oczywicie napisane: TH1pocz = TH1max TH1imp + 1 = 255 225 + 1 = 31 e) na stronie 46 w listingu programu po linii 71 z etykiet START, za brako przy okazji inicjacji ukadu przerwa, instrukcji SETB EA ;uaktywnienie systemu przerwa Program bdzie oczywicie dziaa na komputerku edukacyjnym AVT 2250, bowiem sam monitor komputerka wczeniej wykonuje t in strukcj i uruchamia system przerwa. Jednak przy pisaniu programw na samodzielne systemy z procesorem 8051 lub podobnymi, nie mo

Rozwizanie zadania ZEGAR


LIST 6 To tyle uwag naszych Czytelnikw, co do treci lekcji nr 8. W dalszej czci artykuu przedstawi najciekawsze roz wizania zadania z lekcji nr 8, a mianowicie wyposaenie ze gara czasu rzeczywistego w dodatkow funkcj wywietlania daty. Na szczegln uwag zasuguj rozwizania dwch naszych czy telnikw. Pierwszy list otrzymaem od p. M a r c i n a W i z a n i z woj. listing 3 ). Jego program zegara z datownikiem oce kieleckiego (l niam na 5+, autor bowiem podj si take kontroli i prawidowego wywietlania liczby dni dla kadego miesica. Wiemy przecie, e liczba dni rni si w kadym miesicu, a lutym rnica ta wynosi nawet 3 dni! Oto fragment listu p. Marcina: ... Problem iloci dni w kadym miesicu rozwizaem za pomo c tabeli staych z wartociami dni w kadym miesicu. Jest to roz wizanie bardzo proste, ale nie uwzgldniajce lat przestpnych i nie mona go zastosowa kiedy ograniczona jest ilo pamici pro gramu... (to akurat nie jest problemem przyp. redakcji). ...Po uruchomieniu programu naley najpierw wprowadzi dat w nast pujcej kolejnoci dzie :miesic : rok, a nastpnie godzi n... (godzin, minuty i sekundy przyp. redakcji). Przeczenia na wywietlanie daty dokonuje si za pomoc klawisza 1, natomiast z powrotem na godzin, za pomoc klawisza OK. Klawisz sterujcy moemy bardzo atwo zmieni wprowadzajc warto innego klawi sza. Do odczytu klawisza wykorzystaem zmienn klawisz. Po wprowadzeniu daty, program zgodnie z wprowadzonym miesicem odczytuje z tabeli staych ilo dni, a nastpnie umieszcza je w zmiennej mies. Zmienna mies okrela w procedurze prze rwania ilo dni w danym miesicu. Prbowaem take, aby data i godzina zmieniaa si na przemian po naciniciu za kadym razem tego samego przycisku. Lecz nie udao mi si tego osign nawet po wprowadzeniu maego opnienia. Zbyt due powodowao, e ukad wczeniej wchodzi do obsugi przerwania, przez co traciem warto akumulatora, natomiast zbyt maa warto powodowaa mi ganie wywietlacza. Specjalnie zamieciem listing programu, a nie jego tre rdow, bowiem dziki temu poytek maj z niego zarwno komputerowcy jak i rczniacy. Program p. Marcina dziaa bezbdnie. Radz zatem sprbowa prze testowa go na swoim sprzcie w domowym zaciszu!

38

ELEKTRONIKA DLA WSZYSTKICH 9/98

Te to potrafisz
Listing 3
1 CPU 8052.def 2 ;********************************************************* 3 ;Klasa mikroprocesorowa LEKCJA 8 4 ;Program obslugi zegara czasu rzeczywistego 5 ;na komputerek edukacyjny AVT-2250 6 ;********************************************************* 7 ;procedura korzysta z przerwania licznika T1 (tryb 0) 8 ;wykorzystywane sa 3 komorki wewn. RAM procesora 9 ;zegar liczy: godziny, minuty, sekundy, dni, miesiace i lata 10 ;w trybie 24-godzinnym 11 ;********************************************************* 12 13 include const.inc 14 include bios.inc 15 16 ;Definicje komorek w wewn. RAM procesora 17 ;zajmowane przez dane zegara 18 19 0060 GODZ equ 60h ;licznik godzin 20 0061 MIN equ 61h ;licznik minut 21 0062 SEK equ 62h ;licznik sekund 22 0064 DDequ 64h ;licznik dni 23 0065 MMequ 65h ;licznik miesiecy 24 0066 RRequ 66h ;licznik lat 25 0067 MIES equ 67h ;zmienna ilosci dni w miesiacu 26 0063 licz128 equ 63h ;licznik 1/128 sek 27 28 ;Definicje stalych wykorzystywanych w programie 29 30 001F Czest equ 31 ;wartosc pocz. licznika TH1 31 32 ;********************************************************* 33 ;Poczatek kodu programu 34 8000 org 8000h 35 8000 02807F ljmp START ;petla glowna od etyk. START 36 ;********************************************************* 37 ;Wektor przerwania od licznika T1 38 801B org 801Bh 39 801B intT1: ;poczatek proc. przer. T1 40 801B 758D1F mov TH1,#Czest ;przeladowanie licznika T1 41 801E 0563 inc licz128 ;zwiekszenie licznika 1/128sek. 42 8020 E563 mov A,licz128 43 8022 C2E7 clr Acc.7 44 8024 7052 jnz koniecT1 45 8026 E562 mov A,SEK 46 8028 2401 add A,#1 ;zwiekszanie licznika sekund 47 802A D4 da A ;z korekcja dziesietna 48 802B F562 mov SEK,A 49 802D B46048 cjne A,#60h,koniecT1 ;czy SEK > 59?, nie to skocz 50 8030 756200 mov SEK,#0 ;tak to wyzeruj sekundy i koryguj minuty 51 8033 E561 mov A,MIN 52 8035 2401 add A,#1 ;zwiekszenie licznika minut 53 8037 D4 da A ;z korekcja dziesietna 54 8038 F561 mov MIN,A 55 803A B4603B cjne A,#60h,koniecT1 ;czy MIN > 59?, nie to skocz 56 803D 756100 mov MIN,#0 ;tak to zeruj minuty i koryguj godziny 57 8040 E560 mov A,GODZ 58 8042 2401 add A,#1 ;zwiekszenie licznika minut 59 8044 D4 da A ;z korekcja dziesietna 60 8045 F560 mov GODZ,A 61 8047 B4242E cjne A,#24h,koniecT1 ;czy GODZ > 23?, nie to skoc 62 804A 756000 mov GODZ,#0 ;tak to zeruj godziny 63 804D E564 mov A,DD 64 804F 2401 add A,#1 ;zwiekszenie licznika dni 65 8051 D4 da A ;z korekcja dziesietna 66 8052 F564 mov DD,A 67 8054 B56721 cjne A,MIES,koniecT1 ;czy mies.>ilosc dni, nie to skocz 68 8057 756401 mov DD,#1 ;tak to koryguj dni 69 805A E565 mov A,MM 70 805C 2401 add A,#1 ;zwiekszenie licznika miesiecy 71 805E C0E0 push A 72 8060 90815F mov DPTR,#tab_mies ;pobranie adresu tabeli ilosci dni w mies. 73 8063 93 movc A,@A+DPTR ;wpisanie do A ilosci dni w danym miesiacu 74 8064 F567 mov MIES,A ;a nestepnie przepisanie do zmiennej MIES 75 8066 D0E0 pop A 76 8068 D4 da A ;korekcja dziesietna miesiecy 77 8069 F565 mov MM,A 78 806B B4130A cjne A,#13h,koniecT1 ;czy mies.>12, nie to skocz 79 806E 756501 mov MM,#1 ;tak to koryguj miesiace i rok 80 8071 E566 mov A,RR 81 8073 2401 add A,#1 82 8075 D4 da A ;korekcja dziesietna roku 83 8076 F566 mov RR,A 84 8078 koniecT1: 85 8078 D082 pop DPL ;odtworzenie rejestrow

ELEKTRONIKA DLA WSZYSTKICH 9/98

39

Te to potrafisz
Listing 3, cd.
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 807A D083 807C D0E0 807E 32 807F 807F 8081 8084 8087 808A 808D 8090 8092 8094 8094 8097 809A 809D 80A0 80A3 80A5 80A8 80AB 80AE 80B1 80B4 80B6 80B9 80BC 80BD 80BF 80C2 80C5 80C8 80CB 80CD 80D0 80D3 80D6 80D9 80DC 80DE 80E1 80E4 80E7 80EA 80EC 80EF 80F2 80F5 80F8 80FA 80FD 8100 8102 8105 8108 810A 810A 810C 810F 8111 8113 8116 8119 811C 811E 8121 8124 8124 8126 8129 812C 812E 8131 8134 8136 8139 813C 813E 813E 8140 8143 8145 8147 pop DPH ;ze stosu pop Acc reti ;*********************************************************************** START: clr TR1 ;licznik T1 stop anl TMOD,#0Fh ;wyczyszczenie bitow T1 orl TMOD,#00h ;T1 jako 16-bitowy (tryb 1) mov TH1,#Czest ;zaladowanie licznika mov licz128,#0 ;wyzerowanie licznika 1/256sek. mov intvec,#80h ;zaladowanie MSB wektora przerwan setb ET1 ;odblokowanie przerwania od T1 setb PT1 ;priorytet na to przerwanie lcall mov mov mov lcall mov mov mov mov mov lcall mov mov mov movc mov mov mov mov lcall mov lcall mov mov mov lcall mov mov mov mov lcall mov mov mov mov lcall mov mov mov mov lcall lcall setb pokaz: mov cjne sjmp zegar: jnb mov mov sjmp pelne: mov czas: mov mov lcall mov mov lcall mov mov lcall sjmp data: mov cjne sjmp wypisz: mov CLS DL1,#_minus DL2,#_minus B,#1 GETACC DD,A DL3,#_minus DL4,#_minus DL5,#_minus B,#4 GETACC MM,A DL6,#_minus DPTR,#tab_mies A,@A+DPTR MIES,A DL7,#_minus DL8,#_minus B,#7 GETACC RR,A CLS DL1,#_minus DL2,#_minus B,#1 GETACC GODZ,A DL4,#_minus DL5,#_minus B,#4 GETACC MIN,A DL7,#_minus DL8,#_minus B,#7 GETACC SEK,A DL3,#_minus DL6,#_minus A,#250 DELAY CONIN TR1 ;wyczyszczenie displeja

C28E 53890F 438900 758D1F 756300 757280 D2AB D2BB 120274 757840 757940 75F001 1203A7 F564 757A40 757B40 757C40 75F004 1203A7 F565 757D40 90815F 93 F567 757E40 757F40 75F007 1203A7 F566 120274 757840 757940 75F001 1203A7 F560 757B40 757C40 75F004 1203A7 F561 757E40 757F40 75F007 1203A7 F562 757A40 757D40 74FA 120295 1202C5 D28E E576 B43102 802D E563 30E608 757A00 757D00 8006 757A40 757D40 E560 75F001 12024E E561 75F004 12024E E562 75F007 12024E 80CC E576 B40D02 80C5 E564 75F001

;pobranie poczatkowych dni

;pobranie poczatkowych miesiecy

;pobranie z tabeli ilosci dni zaleznej ;od wpisanego miesiaca

;pobranie poczatkowego roku ;wyczyszczenie displeja

;pobranie poczatkowej godziny

;pobranie poczatkowej minuty

;pobranie poczatkowej sekundy ;zapalenie kresek w postaci ;GG-MM-SS (godzina wprowadzona!) ;odczekanie ok. 0,5 sekundy ;czekanie na start zegara (klawisz) ;start licznika (zegara)

A,klawisz ;wpisanie zawartosci bufora klawisz do A A,#1,zegar ;jezeli A rozne od 1 to skocz data ;a jezeli rowne, to kolejny rozkaz mov A,licz128 Acc.6,pelne ;co 1/2 sekundy pokazuj na zmiane DL3,#0 ;puste DL3 i DL4 DL6,#0 czas mov DL3,#_minus ;i kreski na DL3 i DL6 DL6,#_minus A,GODZ B,#1 A2HEX A,MIN B,#4 A2HEX A,SEK B,#7 A2HEX pokaz

;na DL1.DL2 ;wypisz godziny ;na DL4.DL5 ;wypisz minuty ;na DL7.DL8 ;wypisz na wyswietlacz ; i od poczatku

A,klawisz ;przepisanie bufora klawisz do A A,#klaw_OK,wypisz;jezeli A rozne od klaw_OK to skocz pokaz ;jezeli rowne, to wykon. kolejny rozkaz mov A,DD B,#1 ;na DL1.DL2

40

ELEKTRONIKA DLA WSZYSTKICH 9/98

Te to potrafisz
171 172 173 174 175 176 177 178 179 180 181 182 183 814A 814D 814F 8152 8155 8157 815A 815D 815F 8163 8166 816A 816D 8171 8172 12024E E565 75F004 12024E E566 75F007 12024E 80DF 00322932 313231 32323100 000000 00003231 32 lcall mov mov lcall mov mov lcall sjmp A2HEX A,MM B,#4 A2HEX A,RR B,#7 A2HEX data ;wypisz dni ;na DL4.DL5 ;wypisz miesiace ;na DL7.DL8 ;wypisz na wyswietlacz rok ; i od poczatku

tab_mies db db

00h,32h,29h,32h,31h,32h,31h 32h,32h,31h,00h,00h,00h,00h db 00h,00h,32h,31h,32h

;tablica dni w

;kolejnych miesiacach

END

Kompilacja zakonczona pomyslnie! Zbior: lekcja8a.s03, 346 bajt(ow), 0.4 sekund(y).

LIST 7 Na zakoczenie list od Piotra Konopko z om y, ktry take przesya rozwizanie problemu zadania z lekcji 8 oraz dodatkowy listing wersji zega ra wywietlajcego setne czci sekundy. Piotr pisze... ... mam 19 lat i skoczyem wanie technikum elektro niczne i szykuj si na studia. Chciabym serdecznie Panu podzikowa za prowadzony na amach EdW kurs progra mowania 8051. Do niedawna byem, jak to si mwi, zielo ny na temat mikrokontrolerw, ale dziki Panu i EdW szybko przyswoiem podstawy 8051. Z lekcji na lekcj odnosz co raz wiksze sukcesy. Musz Panu take powiedzie, e wie dza, jak zdobyem na kursie, szybko przyniosa mi sukces w szkole. Na zajciach z programowania sterownikw mik roprocesorowych nie miaem adnych problemw. Mimo nieco innych rozkazw i budowy sterownikw zaoenia s takie same... (ciekaw jestem jakiego rodzaju sterowniki Pan programuje w szkole? przypis redakcji). Dziki temu, e poznaem zasady dziaania 8051, czuem tzw. bluesa. Wielka uniwersalno mikrokontrolerw, o jakiej pisa Pan na pocztku klasy mikroprocesorowej, w moim przypadku daa o sobie zna bardzo szybko. (...) Na zakoczenie chciabym stwierdzi, e klasa prowadzo na jest perfekcyjnie. aden belfer w dotychczasowej mojej edukacji nie uczy mnie tak szybko i sprawnie jak Pan. Jesz cze raz Panu i caej redakcji EdW serdecznie dzikuj.... Bardzo dzikuj za te ciepe sowa, szczeglnie po lektu rze pechowego odcinka klasy mikroprocesorowej z nr 5/98. Jestem rad, e tak wielu z Was odnosi pierwsze sukcesy w programowaniu kontrolerw 8051 i to dziki cyklowi moich artykuw w EdW. W nawizaniu do listu p. Piotra zamieszczam listing jego programu zegara z wywietlaniem setnych czci sekun dy, zgodnie z zasadami opisanymi przy okazji omawiania lis tu 5. I chocia program Piotra pracuj znakomicie, to zwra cam uwag Panu i wszystkim pocztkujcym programistom na dobr zasad umieszczania jak najwikszej liczby komen tarzy w programach rdowych. Jak sami si bowiem prze konacie, ich brak czsto utrudnia, lub wrcz uniemoliwia analiz programu (a nawet jego rozpoznanie) po pewnym czasie. Oto listing programu zegara ze zliczaniem setnych czci sekundy z kwarcem 11059200 Hz (listing 4). Postarajcie si, Drodzy Czytelnicy, przeanalizowa nie ko mentowany program p. Piotra i uzupeni go o komentarze. Z pewnoci zrozumienie obcego kodu rdowego, w do datku bez komentarzy, bdzie pouczajc lekcj dla kadego zapaleca procesorw 8051 i nie tylko. Na zakoczenie korespondencji od p. Piotra Konopko przytaczam dodatkowy listing programu zamka szyfrowego listing 5), ktry to p. Piotr wykona samodzielnie jako swj (l pierwszy program na 8051. Pomimo braku komentarzy i z troch zagmatwanej obsugi, program ten zasuguje na wy rnienie i pochwa, ze wzgldu na swoj prostot i funk cjonalno, a przede wszystkim za to, e program dziaa i potrafi sterowa doczonym do portu P1.0 ukadem za czania rygla. Zanim przejd do prezentacji listingu programu zamka szyfrowego, posuchajmy opisu sposobu uytkowa nia i dziaania programu. P. Piotr pisze w swoim licie:

Listing 4
1 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 CPU 8052.def 2 include include bios.inc 0060 0061 0062 0063 00DC 8000 8000 801B 801B 801B 801E 8020 8022 8023 8025 8028 802A 802C 802D 802F 8032 8035 8037 8039 803A 803C 803F 8042 8044 8046 8047 8049 804C 804F 804F 8051 8053 8055 8056 8056 8058 805B 805E 8061 8064 8067 8069 806B 806E 8071 8074 8077 807A 807C 807F godz min sek licz128 czest equ equ equ 63h DCh 8000h start 801Bh TH1,#czest A,licz128 A,#1 a licz128,a A,#0h,koniec A,sek A,#1 a sek,a A,#60h,koniec sek,#0 A,min A,#1 a min,a A,#60h,koniec min,#0 A,godz A,#1 a godz,a A,#24h,koniec godz,#0 dpl dph acc const.inc

60h 61h 62h

equ equ org ljmp org

028056 intt1: 758DDC E563 2401 D4 F563 B40027 E562 2401 D4 F562 B4601D 756200 E561 2401 D4 F561 B46010 756100 E560 2401 D4 F560 B42403 756000 koniec: D082 D083 D0E0 32 start: C28E 53890F 438910 758DDC 756300 757280 D2AB D2BB 120274 757840 757940 75F001 1203A7 F560 757A40 757B40

mov mov add da mov cjne mov add da mov cjne mov mov add da mov cjne mov mov add da mov cjne mov pop pop pop reti

clr anl orl mov mov mov setb setb lcall mov mov mov lcall mov mov mov

TR1 TMOD,#0fh TMOD,#10h TH1,#czest licz128,#0 intvec,#80h ET1 PT1 CLS DL1,#_minus DL2,#_minus B,#1 GETACC godz,a DL3,#_minus DL4,#_minus

ELEKTRONIKA DLA WSZYSTKICH 9/98

41

Te to potrafisz
...Po zaadowaniu programu pojawi si napis HASLO. Na poczt ku brak jest wprowadzonego hasa, dlatego naley wcisn klawisz OK., potwierdzajcy. Pojawi si wtedy napis YES, wiadczcy o pra widowym hale. Nastpnie ponownie wciskamy klawisz OK. w celu wprowadzenia nowego hasa. Zostanie wywietlony napis NEU (no wy) po ktrym to moemy wprowadzi nowy szyfr (liczba cyfr zaley od wielkoci wolnych komrek w wewntrznej RAM powyej adresu 22h). Haso potwierdzamy klawiszem OK. Teraz ukad jest zaszyfrowany, a na wywietlaczu widnieje napis HASLO. Aby teraz mc sterowa wy jciem zamka (w moim przypadku jest to P1.0), naley poda prawido wy szyfr. Piciokrotne wprowadzenie bdnego hasa blokuje zamek, uniemoliwiajc dalsze manipulacje. le wprowadzony kod sygnalizo wany jest napisem Error. Po wprowadzeniu waciwego hasa za twierdzamy je klawiszem OK. Wwczas mamy 2 moliwoci: albo mo emy odblokowa wyjcie (P1.0) naciskajc dowolny klawisz oprcz OK. i M, lub moemy wprowadzi nowe haso wciskajc klawisz OK. Przez cay czas odblokowania zamka wywietlany jest napis YES. W celu ponownej aktywacji zamka wystarczy wcisn klawisz OK. Blokada automatycznie zostanie uaktywniona, a na wywietlaczu po nownie zawieci si napis HASLO... Brawo Piotrze!, ycz dalszych sukcesw i wielu ciekawych pomys w na programy na 8051. Na zakoczenie naszej rubryki prezentuj prawdziwy hit tego nu meru, mianowicie projekty: programatora pamici EEPROM typu 28C64 (kompatybilna z 27C64, z tym e programowana i kasowana elektrycznie) oraz programatora mikroprocesora 89C2051 (ktry jest ograniczon wersj procesora 87C51) w postaci przystawki do kompu terka edukacyjnego AVT2250. Projekt ten wykona p. Tadeusz Kaua z Poda (woj. krakowskie). Brawo panie Tadeuszu!. Oto list: ...Jestem 40letnim rczniakiem, zajmujcym si amatorsko elektro nik. Analizujc budow komputerka edukacyjnego oraz uczestniczc w prowadzonym przez Pana kursie programowania mikrokontrolerw jednoukadowych, doszedem do wniosku, e funkcja edukacyjna dla komputerka to mao i wykonaem dwie proste przystawki, ktre jak uwaam zdecydowanie zwikszaj jego atrakcyjno. Pierwsza przy stawka jest bardzo prosta i suy do programowania pamici typu EEP ROM np. 28C64. Przystawka ta skada si z zaciskowej podstawki pod czonej do cza systemowego komputerka w sposb uwidoczniony rysunek 1). na schemacie (r
Rys. 1. Schemat przystawki programujcej pami EEPROM 28C64

Listing 4, cd.
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 8082 8085 8088 808A 808D 8090 8093 8096 8098 809A 809D 80A0 80A2 80A2 80A4 80A7 80AA 80AC 80AF 80B2 80B4 80B7 80BA 80BC 80BF 80C2 80C4 75F003 1203A7 F561 757C40 757D40 75F005 1203A7 F562 74FA 120295 1202C5 D28E czas: E560 75F001 12024E E561 75F003 12024E E562 75F005 12024E E563 75F007 12024E 80DE mov mov lcall mov mov lcall mov mov lcall mov mov lcall sjmp END A,godz B,#1 A2HEX A,min B,#3 A2HEX A,sek B,#5 A2HEX A,licz128 B,#7 A2HEX czas mov lcall mov mov mov mov lcall mov mov lcall lcall setb B,#3 GETACC min,a DL5,#_minus DL6,#_minus B,#5 GETACC sek,a A,#250 DELAY CONIN TR1

Kompilacja zakonczona pomyslnie! Zbior: zegar_2.s03, 172 bajt(ow), 0.3 sekund(y).

Kod programu wpisany do komputerka wyglda nastpujco:

START: 90 C0 00 E0 C0 83 53 83 9F F0 D0 83 A3 74 02 12 02 95 75 F0 03 12 02 5F 74 E0 B5 83 E6 02 00 00 KONIEC Po podczeniu przystawki w komputerku JUMPER JP3 naley usta wi na poz. C000h, a program wpisa w wolnym obszarze pamici pro gramu U3 lub w kocowym fragmencie aktywnego obszaru pamici U4. Proces programowania rozpoczyna si wywoaniem wpisanego programu funkcj JUMP i powoduje przekopiowanie danych z obsza ru adresowego C000h DFFFh do programowanej pamici, jednocze nie wywietlajc aktualny stan rejestru DPTR (czyli adresu aktualnie programowanej komrki przyp. redakcji). Nastpna przystawka jest bardziej zoona i suy do programowania mikrokontrolerw typu AT89C2051 firmy Atmel. Przy jej wykonaniu wzorowaem si na paskich projektach AVT320 i AVT2250. Schemat rysunek 2). tej przystawki przedstawia rysunek (r Program uruchamiajcy przystawk najlepiej wpisa w wolny obszar pamici U3 komputerka (ostatecznie moe by zapisany w pamici U4 w obszarze adresowym D000h DFFFh). Jumper JP3 naley ustawi w pozycji C000h. Wywoanie programu funkcj JUMP powoduje ustawienie wszystkich istotnych w programowaniu wyprowadze pod stawki w stan niski, a nastpnie oczekuje na nacinicie odpowiednie go klawisza w celu wywoania podanej procedury. W tym te czasie naley woy w podstawk procesor 89C2051. Kod programu przed stawia listing 6. Wywoanie programu powoduje wywietlanie sekwencji P1. 02. C3. i oczekuje na nacinicie nastpujcych klawiszy : klawisz (1) programowanie odczyt, powoduje wpisanie do pami ci programowanego mikroprocesora danych umieszczonych w pamici

42

ELEKTRONIKA DLA WSZYSTKICH 9/98

Te to potrafisz

Rys. 2. Schemat przystawki programujcej procesor 89C2051 (89C1051)

Listing 5
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 CPU 8052.def include include org mov mov mov poczatek: 120274 75F002 9080E1 120285 7878 7922 skok10: 1280DB 1202C5 E576 B40D37 E520 6521 704F 120274 757B6E 757C79 757D6D 7878 7922 1280DB 1202C5 E576 lcall lcall mov cjne mov xrl jnz lcall mov mov mov mov mov lcall lcall mov wait conin A,76h A,#13,skokpom2 A,20h A,21h skok2 cls dl4,#_Y dl5,#_E dl6,#_5 R0,#78h R1,#22h wait conin A,76h lcall mov mov lcall mov mov cls B,#2 dptr,#tablica text R0,#78h R1,#22h CONST.INC BIOS.INC 8000h R2,#00h 20h,#00h 21h,#00h

8000 8000 7A00 8002 752000 8005 752100 8008 8008 800B 800E 8011 8014 8016 8018 8018 801B 801E 8020 8023 8025 8027 8029 802C 802F 8032 8035 8037 8039 803C 803F

34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68

8041 8044 8047 804A 804D 804D 8050 8053 8055 8058 805A 805A 805D 805D 805E 8060 8062 8065 8068 8068 806A 806B 806D 8070 8072 8072 8074 8075 8076 8078 8078 807B 807E 8081 8084

B40D55 757B54 757C79 757D3E skok5: 1280DB 1202C5 E576 B40D05 80AE skokpom2: 0280B0 skok4: F7 C000 E578 B40003 120274 skok6: D000 09 0520 B88002 80DB skok9: 7440 F6 08 80D5 skok2: 120274 757979 757A50 757B50 757C3F

cjne mov mov mov lcall lcall mov cjne sjmp ljmp mov push mov cjne lcall pop inc inc cjne sjmp mov mov inc sjmp lcall mov mov mov mov

A,#13,skok3 dl4,#_n dl5,#_E dl6,#_U wait conin A,76h A,#13,skok4 poczatek skok1 @R1,A 00h A,dl1 A,#0,skok6 cls 0h R1 20h R0,#80h,skok9 skok5 A,#_minus @R0,A R0 skok5 cls dl2,#_E dl3,#_r dl4,#_r dl5,#_0

ELEKTRONIKA DLA WSZYSTKICH 9/98

43

Te to potrafisz
Listing 5, cd.
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 8087 808A 808D 8090 8091 8094 8094 8097 8099 8099 809B 809E 80A1 80A3 80A6 80A8 80AB 80AD 80B0 80B0 80B1 80B3 80B5 80B6 80B9 80BC 80BC 757D50 1280DB 1202C5 0A 752100 skok7: BA0550 80FB skok3: C290 1280DB 1202C5 E576 B40DF3 7A00 752100 D290 028008 skok1: 67 701C 0521 09 B88003 028018 skok11: C000 push 00h xrl jnz inc inc cjne ljmp A,@R1 skok8 21h R1 R0,#80h,skok11 skok10 clr lcall lcall mov cjne mov mov setb ljmp 90h ;clr P1 wait conin A,76h A,#13,skok3 R2,#00h 21h,#00h 90h poczatek cjne sjmp R2,#5,skokpom skok7 mov lcall lcall inc mov dl6,#_r wait conin R2 21h,#00 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 80BE 80C0 80C3 80C6 80C6 80C8 80CA 80CB 80CC 80CF 80CF 80D1 80D3 80D5 80D8 80DB 80DB 80DD 80E0 E578 B40003 120274 skok12: D000 7440 F6 08 028018 skok8: 740D 2521 F521 B880E4 028018 wait: 74FF 120295 22 mov lcall ret A,#255 delay mov add mov cjne ljmp A,#13 A,21h 21h,A R0,#80h,skok11 skok10 pop mov mov inc ljmp 0h A,#_minus @R0,a R0 skok10 mov cjne lcall A,dl1 A,#0,skok12 cls

80E1 76776D38 80E5 3F00 80E7 80E7 028008 80EA

tablica db _H,_A,_5,_L,_0,0 skokpom: ljmp poczatek END

Kompilacja zakonczona pomyslnie! Zbior: szyfr.s03, 234 bajt(ow), 0.3 sekund(y).

U4 w obszarze adresowym C000h ... C7FFh oraz kontrolny odczyt do obszaru adresowego C800h ... CFFFh; klawisz (2) odczyt kopiowanie pamici programu mikroprocesora do obszaru adresowego C800h ... CFFFh w pamici U4; klawisz (3) kasowanie pamici programu mikroprocesora; zakoczenie kadej procedury m sygnalizowane jest na wywietlaczu komputerka i wtedy mona wyj z podstawki mikroprocesor lub klawi szem (0) powrci do miejsca wywoania procedur. Opisane programy umieciem w prosty sposb w pamici U3 moje go komputerka, wykorzystujc przystawk do programowania pamici 28C64 oraz prosty programik odczytu monitora. Jeszcze raz dzikuj za wspania zabaw, serdecznie pozdrawiam Pana i cay zesp redakcyjny EdW .... Tym z Czytelnikw, ktrzy maj wtpliwoci skd wzi te dane do programowania, wyjaniam, e mona je oczywicie zaadowa przed uruchomieniem programu przystawki programatora z komputera za po

moc instrukcji monitora LOAD, lub wpisa rcznie (rczniacy) za po moc polecenia EDIT programu monitora. Jeszcze raz brawa dla Pana, panie Tadeuszu, nie tylko za pomys, ale i za wytrwao w stworzeniu do dugiego, jak na rczniaka, progra mu. Szkoda, e nie przysa nam Pan komentarzy dotyczcych swoich listingw. Proponuj Czytelnikom uzupenienie tego samodzielnie i przeanalizowanie programu na poziomie mnemonikw procesora 8051. Przekonajcie si, e proces tumaczenia kodu maszynowego na rdowy nie jest taki trudny. Tak a propos, to tumaczenie nazywa si fachowo disasemblacj (operacja odwrotna do asemblacji, czyli tuma czenia kodu rdowego na maszynowy). Wszystkim Autorom listw serdecznie dzikuj za wspaniae pomys y i uwagi dotyczce moich artykuw, za pozostaym Czytelnikom y cz wielu ciekawych pomysw. Piszcie do mnie! Sawomir Surowiski

Listing 6
START: Adres Dane x8B0 75 90 x8B3 C2 B2 x8B5 C2 B3 x8B7 C2 B4 x8B9 90 80 x8BC 74 80 x8BE F0 x8BF 12 02 x8C2 75 78 x8C5 75 79 x8C8 75 7B x8CB 75 7C x8CE 75 7E x8D1 75 7F x8D4 12 02 x8D7 B4 31 x8DA 02 x8 x8DD B4 32 x8E0 02 x9 x8E3 B4 33 x8E6 02 x9 PROGRAMOWANIE: x8E9 12 02 x8EC 75 78 x8EF 12 x9 x8F2 D2 B4 x8F4 74 47 x8F6 F0 00 (*)

00

74 F3 06 BF 5B B9 4F C5 03 E9 03 62 EE 70 74 F5 AD

(*) (*) (*)

(*)

x8F7 x8FA x8FC x8FD x900 x903 x905 x907 x909 x90A x90D x910 x912 x915 x917 x919 x91B x91E x921 x923 x924 x927 x92A x92C x92E x930 x932 x933 x936 x939 x93B x93D

75 74 F0 90 F5 C2 00 D2 A3 75 12 74 12 D2 C2 74 B5 90 74 F0 75 90 C2 00 E5 D2 F0 75 12 D2 C2 A3

90 FF 27 C0 00 90 B3 00 B3 F0 02 02 02 B2 B2 C8 83 80 47 05 5F 95

x93E x940 x943 x946 x948 x949 x94B x94D x950 x952 x953 x956 x959 x95C x95F

74 B5 90 74 E0 C2 C2 75 74 F0 75 75 12 B4 02

D0 83 07 80 00 87 B3 B4 90 00 80 79 7A 02 30 x8 3F DC C5 FA B0

(*) cyfra

E2 00

(*) x pierwsza ustalonego adresu ODCZYT: x962 x965 x968 x96B x96D KASOWANIE: x970 x973 x976 x979 x97B x97C

90 FF C8 00 B4 00 90 B4 F0 05 02 5F B2 B2

12 75 12 D2 02 12 75 12 74 F0 75

02 79 x9 B4 x9

74 3F AD 21

(*) (*)

02 74 78 B9 x9 AD 49 90 FF

(*)

x97F x981 x982 x985 x987 x989 x98C x98E x990 x993 x995 x996 x998 x99A x99B x99E x9A0 x9A1 x9A4 x9A7 x9AA x9AD x9AF x9B0 x9B2 x9B5 x9B7 x9B8 x9BA KONIEC

74 F0 00 C2 74 12 D2 74 12 74 F0 C2 74 F0 75 74 F0 75 12 B4 02 74 F0 74 12 74 F0 D2 22

29 00 00 B3 0A 02 95 B3 0A 02 95 49 B3 81 90 00 80 79 02 30 x8 81 DC C5 FA B0

(*)

0A 02 95 41 B3

44

ELEKTRONIKA DLA WSZYSTKICH 9/98

Te to potrafisz
Dzisiejszy odcinek cyklu o mikrokon trolerach rodziny 8051 powicimy ukadom peryferyjnym I/O, czyli tzw. wejciawyjcia (ang. "Input/Output). Omwione zostan typy ukadw, najciekawsze rozwizania konstruk cyjne, od tych najprostszych do nieco bardziej skomplikowanych. Aby jednak zachowa zwizek z cyklem o mikroprocesorach , wszyskie przedstawione w artykule ukady bd w 100% kompatybilne z komputerkiem edukacyjnym AVT 2250, z ktrym wielu z Was, drodzy Czytelnicy pracuje ju od kilku miesicy. Zapoznamy si z kilkoma rozwizaniami praktycznymi, a ana liza przykadowych procedur obsugi tych ukadw pozwoli na zrozumie nie zasady ich dziaania oraz nauczy kadego elastycznie docza dodatkowe urzdzenia wejciawyj cia do dowolnego ukadu mikropro cesorowego, opartego o procesory serii '51, a take podobne.

Mikrokontrolery? To takie proste...


Cz 17
Peryferyjne ukady wejciawyjcia
PROSTE UKADY WYJCIOWE
Na rys.1 pokazano przykadowe doczenie 8miu niskonapiciowych arwek do jedynego, wolnego portu procesora 8051, pracujcego z zewntrzn pamici programu tak jak nasz komputerek edukacyjny. Jak wida w naszym przykadzie zastosowano, jako bufor mocy popu larny ukad ULN2803, ktry jest omiokrotnym buforem mocy, dodatkowo zabezpieczony diodami zwrotnymi przed przepiciami. Zamiast takiego ukadu, mona np. posuy si bramkami TTL z otwartym kolektorem i wyjciami wysokonapiciowymi. Do takich ukadw nale np.: 7406 6krotny inwerter z wysokonapiciowym wyjciem (do +30V) typu otwarty kolektor. Ocialno kadej bramki wynosi dodatkowo 10 wej TTL. 7407 6krotny wzmacniacz, bufor, z wysokonapiciowym wyjciem (do +30V) typu otwarty kolektor. Obcialno kadej bramki wynosi 25 wejc TTL. 7438 4 dwuwejciowe braki NAND typu otwarty kolektor ze zwikszon obcialnoci do 30 wej TTL. Nie bd tu przytacza schematw wewntrznych tych ukadw, wszystkie one mniej lub bardziej dokadnie zostay omwione w cyklu artykuw "Pierwsze kroki w cyfrwce" w EdW. Na rys.2 przedstawiono sposb na zwikszenie obcialnoci wyj procesora za pomoc jednego z w/w ukadw do sterowania sekcj 6ciu przekanikw. Do tego celu zaprzgnito 1 ukad 7407. Dodatkowo kad cewk przekanika zbocznikowano diod maosygnaow w celu tumienia przepi tworzcych si w cewce podczas zdejmowania napicia z jej zaciskw.

Co to s waciwie te ukady wejcia/wyjcia i do czego su?. Najprostsz odpowiedzi na to pytanie niech bdzie przykad, kiedy to za pomoc mikroprocesora (pracujcego np. w ukadzie komputerka edukacyjnego z zewntrzn magistral danych) chcemy wysterowa wiele (np. 20) arwek, zapalajc je na przemian, tak jak to si dzieje w przypadku popularnych wy wietlnych. Kady w tym miejscu powie, e do tego potrzebne bd ukady poredniczce (tzw. mocy), bowiem jak wiemy obcialno prdowa wyj portw procesora jest niewiel ka, zreszt arwki pracuj w wikszym zakresie napi, tote docze nie ich bezporednio do mikrokontrolera z pewnoci przyczynio by si do jego uszkodzenia. Jest to prawd, ale czy do koca? Odpowied z pewnoci znajdziecie w niniejszym artykule.
Rys. 1 Doczenie sekcji arwek do procesora 8051

ELEKTRONIKA DLA WSZYSTKICH 10/98

37

Te to potrafisz
impedancji, co dla bramek TTL jest po pros tu jedynk. Dlatego w takiej sytuacji przekaniki pozostan wyczone. Dlatego w tak prostych ukadach sterowania, np. przekanikami nie zaleca si stosowania bramek np. 7406. Wspominaem o tym ju w pierwszych dwch numerach klasy mikroprocesorowej ponad rok temu. Przedstawione powyej przypadki to najprostsze z moliwych przykady urzdze wyjcia (ang. "Output") w ukadach mikro procesorowych. I nie s to bynajmniej wspominane arwki, czy przekaniki oraz towarzyszce im elementy, ale "to co nimi steruje". W tym przypadku jest to port P1 procesora to on by wanie ukadem wyj cia, wyposaone dodatkowo w bufory zwikszajce jego obcialno.

PROSTE UKADY WEJCIOWE


Rys.2 Sterowanie przekanikami za pomoc portu P1 procesora.

Aby zilustrowa sterowanie tak sekcj przekanikw posumy si przykadem. Ot aby zaczy np. tylko wyjcia OUT1, OUT2 i OUT5, naley wykona instrukcj: MOV P1, #101100b ;wyzerowanie bitw 0, 1 i 4 portu P1 kocwek

Wyzerowanie odpowiednich kocwek portu P1 spowoduje "otwar cie" wyjcia odpowiedniej bramki i zaczenie przekanika. Te przekani ki, ktre maj pozosta wyczone, powinny mie ustawione odpowied nie bity rejestru portu P1. W naszym przykadzie s to bity 2, 3 i 5 (bity numeruje si od zera), co odpowiada przekanikom OUT3, OUT4 i OUT6. Mona take wczy lub wyczy dowolny przekanik oddzielnie, jak instrukcj, to zapewne ju wiecie, ano chociaby wczenie przekanika OUT4 realizowane jest za pomoc polecenia: CLR P1.3 a wyczenie SETB P1.3 ;wyczenie przekanika OUT4 ;wczenie przekanika OUT4

Zauwamy e takie sterowanie przekanikami "od plusa" zasilania (kiedy cewka znajduje si po stronie dodatniego napicia a nie masy) w ukadach procesorowych dodatkowo zabezpiecza przekaniki, przed przypadkowym, krtkotrwaym wczeniem w przypadku, kiedy uruchamiamy cay ukad. Jak bowiem wiecie z poprzednich odcinkw klasy mikroprocesorowej, procesor po wczeniu zasilania "zeruje si" i na wszystkich jego portach wstpnie ustawiaj si stany wysokiej

Czsto zachodzi potrzeba monitorowania stanw logicznych na kilku liniach jed noczenie i podejmowania w zwizku z tym okrelonych dziaa. Najprostszym przykadem jest "obserwacja" przez procesor linii dozorowych w systemie alarmowym. Na rys.3 pokazano uzbrojone wejcia portu P1, jako najprostszy ukad wejciowy procesora. Rol buforw wejciowych peni bramki zabez pieczone dodatkowo na wejciach przez przepiciami diodami maosygnaowymi lub transilami. Te ostatnie to nowoczesne elementy potrafice "gasi" przepicia sigajce kilkuset woltw i trwajce mikrosekundy a wic bardzo krtko, wystarczajco jednak dugo aby zniszczy bramk, a co za tym idzie cay ukad scalony. Oczywicie nie musz w tym miejscu przestrzega przez bezporednim doczaniem wysokonapiciowych linii zewntrznych do wej procesora, moe mie to bowiem ze skutki i spowodowa awari caego systemu. W ukadzie w celu wyeliminowania stanw przejciowych zas tosowano bramki Schmitta zawarte w popularnym ukadzie 74132. Taki system pozwala na monitorowanie sygnaw cyfrowych nadchodzcych np. ze znacznej (jak na ukady cyfrowe) odlegoci, czyli ju od 50 cm w gr nawet do kilku metrw. Ukady wejciowe dos tosowane do wikszych napi przedstawimy przy innej okazji, ju teraz mona jednak stosowa chociaby np. proste dzielniki napicia dodatkowo transilami lub diodami. Odczyyt stanu na danym wejciu moliwy jest podobnie jak w przy padku wyj. Mona wic odczyta cay port na raz np. za pomoc instrukcji: MOV A, P1

a potem analizowa poszczeglne bity akumulatora, lub monitorowa kady pin portu oddzielnie. Nie naley jednak zapomnie, aby przedtem zainicjowa kocwk portu jako wejcie wpisujc do rejestru tego portu logiczn jedynk, za pomoc instrukcji: SETB P1.x

Rys.3 Najprostszy sposb na bezpieczny monitorowanie sygnaw niskonapiciowych z zakresu 0 0,5... +5,5V.

gdzie x oznacza numer kocwki portu P1. Sytuacja taka jest konieczna tylko wtedy, kiedy od momentu uru chomienia (zasilenia) procesora, port P1 (lub niektre jego piny) byy wyko rzystywane jako wyjcia pracujce w stanie logicznego "0". Tote jeeli polecenia np. CLR P1.5 przedtem uye

;ustawienie stanu logicznego "0" na kocwce 6 procesora

zerowae jakie piny portu P1 poleceniem MOV P1, xx

38

ELEKTRONIKA DLA WSZYSTKICH 10/98

Te to potrafisz
podanie wysokiego poziomu logicznego na wejcie C (pin 11) ukadu 74LS573 powoduje przeniesienie stanw log icznych panujcych na wejci ach D1...D8 tego ukadu odpowiednio na wyjcia Q1...Q8. Wejcie OC steruje trjstanowymi wyjciami Q1...Q8. Podanie stanu niskiego na t kocwk powoduje odblokowanie wyj Q1...Q8, dziki czemu zatrza nite z wej D1...D8 stany logiczne pojawi si na wyjci ach ukadu U1. Utrzymywanie tej kocwki w stanie logicznej "1" powodu je ustawienie wszystkich wyj w stan wysokiej imped ancji. W tabeli 1 przypominam zasad dziaania ukadu 74573. Znaczenie symboli jest nastpujce: Z stan wysokiej impedancji H stan wysoki (logiczny) L stan niski (logiczny) x stan nieistotny (dowolny)
Tabela 1

Rys.4 Doczenie zewntrznego portu wyjciowego

gdzie xx to albo staa albo rejestr zawierajcy liczb z wyzerowanymi bitami powiniene, przed uyciem tego pinu jako wejcia, ustawi w rejestrze portu P1 jego bit, np. poleceniem: SETB P1.5

tylko raz, a potem odczytywa stan kocwki, gdy zajdzie potrzeba przy pomocy instrukcji np. MOV C, P1.5

wejcia OC H L L C x L H H D x x L H

wyjcia Q Z bez zmian L H

lub testowa kocwk portu wprost za pomoc instrukcji np. skokw warunkowych JB ...... P1.5, ustawiony ; instrukcje, gdy stan na pinie 5 portu P1 jest niski

ustawiony: ...... ; instrukcje, gdy stan na tej kocwce jest wysoki

... ZA MAO..., ODWIECZNY PROBLEM


W praktyce, kiedy mamy do czynienia z procesorami 8051 pracujcymi z zewntrzn pamici programu, do wykorzystania pozostaje jedynie port P1 oraz niektre kocwki portu P3. Porty P0 i P2 s zajte generowaniem sygnaw na szynie adresowej w celu odczytu kolejnych instrukcji z pamici programu EPROM, lub odczytem / zapisem danych do zewntrznej pamici danych (SRAM). Wtedy w najlepszej sytuacji mamy do wykorzystania wolne piny: P1.0... P1.7 8 kocwek

Poniewa w naszym przykadzie ukad U1 pracuje jako wyjciowy, kocwk OC doczylimy do masy, tak aby na wyjciach panowa stan zatrzanity z wej D1...D8 podczas opadajcego zbocza sygnau na wejciu "C" (pin 11). Nie wchodzc na pocztku w szczegy powiem, e ukad z rys.4 pozwala na zapamitanie stanw cyfrowych na omiu wyjciach (Q1...Q8) ukadu U1 za pomoc instrukcji: MOV MOV DPTR, #IO4 A, #10101010b

MOVX @DPTR, A P3.2 (INT0), P3.3 (INT1), P3.4 (T0), P3.5 (T1), P3.0 (RXD), P3.1 (TXD) 4 kocwki P3.6 (WR) i P3.7 (RD) dodatkowo 2 kocwki, jeeli nie korzystamy z zewntrznej pamici danych W sumie wic mamy do dyspozycji 16 uniwersalnych kocwek wejcia/wyjcia (I/O). Niestety czsto okazuje si e to stanowczo za mao. Wtedy z pomoc moe nam przyj rozbudowanie ukadw wej cia/wyjcia za pomoc dodatkowych ukadw cyfrowych (np. serii TTL), doczonych do magistrali procesora. Dziki takim ukadom oraz za pomoc instrukcji odwoujcych si do zewntrznej pamici danych (MOVX.....) moliwe jest "ustawianie" lub odczytywanie wikszej praktycznie dowolnej iloci kocwek cyfrowych. Na rys.4 przedstawiony jest dobudowany do magistrali komputerka edukacyjnego prosty ukady wyjciowy. BUS_2250 to zcze magis trala komputerka znajdujca si na pytce bazowej w postaci 2rz dowego 40pinowego zcza, na jej krawdzi. Zastosowano ukad scalony, 74LS573, ktry jest 8bitowym latch'em, znanym z konstrukcji komputerka AVT2250, gdzie peni rol zatrzasku modszej czci 16bitowego adresu. Dla przypomnienia powiem, e W przykadzie tym wykonanie instrukcji spowoduje ustawienie na przemian stanw logicznych wysokich i niskich na kocwkach Q1...Q8 portu U1. Stanie si tak za spraw zapisania liczby 10101010b pod adres w zewntrznej przestrzeni adresowej od adresu IO4 (A000h). Przeanalizujmy zapis do ukadu U1. Procesor wykonujc instrukcj MOVX,... powoduje pojawienie si stanu niskiego na kocwce IO4 zcza komputerka w przypadku kiedy w rejestrze DPTR znajdzie si dowolny adres z zakresu A000h...BFFFh. Rwnoczenie w momencie zapisu do rejestru procesor podaje stan niski na lini /WR, co w efekcie powoduje powstanie stanu wysokiego na wyjciu braki 74LS02 (rys.4), ktra realizuje negacj sumy logicznej sygnaw /WR i /IO4. Wysoki stan na wyjciu tej bramki powoduje zapisanie danych D0...D7 z szyny danych procesora 8051 do rejestru U1, a dziki temu, e wejcie /OC U1 jest zwarte do masy, dane te pojawi si natychmiast na wyjciach Q1...Q8 zatrzasku U1. W ten sposb za pomoc jednej bramki logicznej, jednego ukadu scalonego (U1) oraz trzech instrukcji zrealizowalimy prosty ukad portu wyjciowego o omiu wyjciach. Wyjcia tse, podobnie jak opisy wanego wczeniej portu P1, mona teraz wykorzysta do dowolnych celw, np.. do sterowania ukadami wykonawczymi dowolnych urzdze, np. 8kanaowego wa wietlnego.

ELEKTRONIKA DLA WSZYSTKICH 10/98

39

Te to potrafisz
MOV A, # 11001100b MOVX @DPTR, A wczeniej naley jednak umieci deklaracj opisujc zapis: IO4_U3, tzn. IO4_U3 equ A002h ;bo IO4=A000h +2 (ofset U3) Mona take zapisa adres od razu do rejestru DPTR, instrukcj: MOV DPTR, #A002h

Rys.5 Jeden ze sposobw na rozbudowanie iloci ukadw I/O procesora.

a efekt bdzie ten sam. W ukadzie z rys.5 sygnay /IO4 i /WR zostay doczone do dwch wej zezwalajcych dekodera U9, dziki czemu w momencie gdy jeden i drugi przyjmuje stan "0" dekoder zostaje odblokowany i uaktywnione zostaje (stanem niskim) jedno z 8miu wyj ukadu U9, zalenie od stanu linii adresowych A2...A0. Stan niski z wyjcia dekodera U9 zostaje zane gowany przez doczon do niego bramk negacji (NOT) a nastpnie w postaci dodatniego impulsu (zapisu) powoduje zatrzanicie danych D0...D7 z magistrali komputerka w jednym z rejestrw 74LS573. Reasumujc aby "wys terowa" poszczeglne rejestry, i kade z ich 8 miu wyj, naley do DPTR wpisa ich odpowiednie adresy, i tak: dla U1 MOV DPTR, #0A000h

Zapisujc dowolne, zalene od sytuacji wartoci za pomoc instrukcji podanych w ostatnim przykadzie (w miejsce #10101010b) moemy wpywa na stany 8miu wyj portu U1, a dziki temu sterowa maksymalnie 8moma urzdzeniami zewntrznymi. Na rys.5 przedstawiem sposb na powikszenie iloci ukadw wyj ciowych. Jak wida do tego celu wykorzystano dodatkowy ukad dekodera 74LS138 (U9). Dziki takiemu rozwizaniu, za pomoc 1 dekodera '138 moliwe jest zaadresowanie maksymalnie 8miu rejestrw typu 74LS573. Aby zrozumie schemat ideowy najlepiej jest znale podobiestwa z rys.4. W tym przypadku dekoder U9 dekoduje 3 najmodsze linie adresowe magistrali procesora: A2,A1 i A0. Dziki temu kady z rejestrw 74LS573 moe by zapisany oddzielnie, za pomoc sekwencji instrukcji podanych w poprzednim przykadzie, z tym e inne bd wartoci wpisywane do rejestru DPTR. I tak aby np. zaadresowa (zapisa) rejestr U3 naley posuy si instrukcjami:

dla U2 dla U3

MOV DPTR, #0A001h MOV DPTR, #0A002h

dla U8 MOV DPTR, #0A007h a nastpnie wykona zapis do akumulatora stanu 8miu wyj danego rejestru, np. : MOV A, 11111110b i wykona zapis MOVX @DPTR, A ;tylko wyjcie Q8 w stanie "0", reszta "1"

i to wszystko, prawda e proste! Na rys.5 nie pokazano, ze wzgldu na oszczdno miejsca doczenia pozostaych 5ciu rejestrw U4...U8, ale sposb sterowania MOV DPTR, #IO4_U3 i podczenia do dekodera jest identyczny jak w przypadku U1...U3, czyli do wyj dekodera U9 poprzez bramki negacji. We wszystkich pokazanych przykadach mona uywa ukadw w wersjach CMOS, np. 74HCT138, 74HCT04, 74HCT573, itp., naley jed nak pamita aby uwzgldni mniejsz obcialno wyj tych ostatnich przy doczaniu dodatkowych ukadw wyj ciowych. Uwaga ta bdzie dotyczy take pozostaych przedstawionych w artykule przykadw. No dobrze, ukady wyjciowe, umoliwiajce sterowanie zewntrzny mi urzdzeniami mamy w zasadzie omwione, no przynajmniej te najprost sze rozwizania. Pora przej do ukadw, ktre umoliwi odczyt zewntrznych stanw logicznych przez procesor, krtko mwic "badanie" cyfrowych sygnaw dochodzcych z zewntrz do ukadu komputerka. Rysunek 6 przedstawia prosty sposb na sterowanie zapisem i odczytem 8miu zewntrznych linii cyfrowych. Spjrzmy przez chwil jedynie na zastosowanych tu nowy ukad scalony U2 74LS541. Jest to 8mio bitowa "brama", dziki Rys.6 Sposb na wykorzystanie tego samego adresu do sterowania zapisem (U1) i odczytem (U2) ktre moliwy jest transfer danych z jej
sygnaw cyfrowych.

40

ELEKTRONIKA DLA WSZYSTKICH 10/98

Te to potrafisz
wej (A1...A8) na wyjcia (Y1...Y8) w momencie, kiedy oba sygnay sterujce G1, G2 znajduj si w stanie niskim. Innymi sowy, kiedy podamy na wejcia G1, G2 stan niski, to "to" co pojawi si na wejciu (np. A1) pojawi si take na wyjciu Y1. W przeciwnym przypadku, gdy jedno (lub oba) wejcia znajduj si w stanie wysokim, wszystkie wyjcia Y1...Y8, znajduj si z stanie wysokiej impedancji. Dziki temu m.in. moliwe jest zas tosowanie tych ukadw w systemach mikropro cesorowych, takich jak komputerek edukacyjny. Tabela 2 opisuje dziaanie ukadu.
Tabela 2

wejcia G1 H x L L G2 x H L L A x x L H

wyjcia Y Z
Rys.7 Zastosowanie ukadu demultipleksera jako dekodera adresw

Z L H W tym miejscu bardziej wnikliwi czytelnicy mog dostrzec problem, ktry moe pojawi si jeeli w obszarze adresowym dekodowanym przez sygna IO4 pojawi si inny ukad, np. pami (lub jej cz) staty czna SRAM. Wtedy odczytujc port U2 (adres 0A000h) odczytana moe zosta komrka w pamici SRAM. W przypadku gdy obie dane pochodzce z portu i pamici nie bd zgodne nastpi efekt iloczynu montaowego, ktry w najbardziej niekorzystnym przypadku (przy uyciu ukadw serii LS) moe spowodowa uszkodzenie pamici lub portu U2. Dlatego w przykadach omawianych w niniejszym artykule, naley sprawdzi, aby pami SRAM w komputerku miaa pojemno 8kB (typ 6264). W przypadku gdy posiadasz pami 62256 (32kB), naley przeczy zwor JP3 na pytce bazowej komputerka na adres C000h a programy testujce porty I/O opisane w artykule, kompilowa oczywicie z dyrektyw: ORG C000h

Popatrzmy na t cz schematu, ktra odnosi si do ukadu U2, bowiem sposb podczenia U1 i bramki NOR zosta ju omwiony. Podobnie jak w przypadku ukadu wyjciowego (U1) podczony zosta bufor wejciowy U2. W tym przypadku obyo si jednak bez korzysta nia z dodatkowej bramki sumy logicznej, bowiem, wykorzystano dwa wejcia zezwalajce G1 i G2 ukadu 74LS541. Jedno z tych wej doczono do sygnau /RD procesora, a drugie do sygnau /IO4, ktry jak wiemy przyjmuje stan niski w momencie adresowania obszaru A000h...BFFFh procesora. W ten prosty sposb, kiedy np. chcemy odczyta stany wej A1...A8 ukadu U2, moemy to zrobi za pomoc instrukcji: MOV DPTR, #IO4

MOVX A, @DPTR i to wszystko. W akumulatorze znajdzie si liczba, ktrej poszczeglne bity odpowiadaj stanom na wejciach A1...A8 w momencie odczytu (tzn. kiedy sygna /RD przyjmuje stan niski) przez mikroprocesor portu U2.

Na rys.7 przedstawiono sposb na zwikszenie liczby sygnaw wyboru I/O do 16tu za pomoc zwykego ukadu demultipleksera 74LS154. Dziki takiemu doczeniu linii adresowych oraz sygnau /IO4 komputerka do ukadu U1, w prosty sposb uzyskujemy dodatkowe linie sterujce dowolnymi urzdzeniami np. I/O, takimi jakie opisaem wczeniej. W ukadzie z rys.7 poszczeglne wyjcia IO5...IO20 odpowiadaj nastpujcym adresom: IO5, adres A000h IO6, adres A001h IO7, adres A002h IO8, adres A003h IO9, adres A004h IO10, adres A005h IO11, adres A006h IO12, adres A007h IO13, adres A008h IO14, adres A009h IO15, adres A00Ah IO16, adres A00Bh IO17, adres A00Ch IO18, adres A00Dh IO19, adres A00Eh IO20, adres A00Fh Na kolejnym rysunku 8 pokazany jest sposb na generowanie wielu sygnaw wyboru I/O za pomoc kaskadowo poczonych dekoderw 74138. Jak wida, dziki ukadowi U1 moliwe jest wys terowanie kolejnych dekoderw U2...U9 i w efekcie uzyskanie 64 sygnaw wyboru. Analizujc powyszy schemat naley zwr ci uwag na sposb doczania poszczegl nych linii adresowych do wej A,B i C dekoderw 74138. Zrozumienie zasady czenia wej adresowych pozwoli na samodzielne, dowolne organizowanie przestrzeni adresowej procesora. Kolejne przykady przybli Ci to, drogi Czytelniku.

Rys.8 Sposb na kaskadowe czenie dekoderw 74138

ELEKTRONIKA DLA WSZYSTKICH 10/98

41

Te to potrafisz
W ukadzie przykadowym z rys.9 sterowanie kierunkiem przepywu informacji nastpuje pod wpywem sygnau /RD procesora, doczonego do wejcia DIR ukadu bramy U1. W takiej kon figuracji ukad wykorzystywany jest dziaa podobnie jak 74LS541, przekazuje dane z wej B1...B8 na wyjcia A1...A8 a dalej na szyn danych procesora (komputerka) D0...D7. Kiedy procesor adresuje bufor poprzez sygna zapisu (/WR) uaktywniony zostaje sygna IO4, ktry powoduje przekazanie stanw z szyny danych komputerka D0...D7 na kocwki B1...B8 bramy U1. Kto moe zauway, e taki sposb obsugi ukadu w trybie zapisu moe by "nieel egancki", bowiem w procesie aktywacji ukadu U1 nie jest wykorzystywany sygna zapisu /WR. I cho na pierwszy rzut oka jest to prawd, to w praktyce takie sterowanie wystarcza. Ja jednak proponuj Ci, drogi Czytelniku, jako wiczenie narysowanie penego dekodera dla przykadu z rys.9. Na rys.10 przedstawiem ciekawy ukad dwukierunkowego portu I/O z moliwoci zapamitania wartoci w trybie zapisu. Dziaanie portu jest identyczne z funkcjami portw mikroprocesora (np. omaw ianego wczeniej P1), jednak w tym przypadku moliwe jest uywanie wszystkich 8miu bitw portu jednoczenie jako wyjcia lub wejcia. Nie ma wic moliwoci ustawiania pojedynczych kocwek portu (jak to ma miejsce w przypadku procesora) jako wejcie a innych jako wyj cia w tym samym momencie. Jednak czsto taka funkcja nie jest nam potrzebna, tote powyszy ukad czsto znajduje swoje zastosowanie w praktyce i przyznam spisuje si w niej znakomicie. Mona zatem porwna ten ukad do portu procesora, np. P1 i powiedzie, e instrukcja zapisu typu: MOV DPTR, #IO4 MOV A, #11110000b H H L L H L H L A=B=Z MOVX @DPTR, A A=B=Z A > B A < B dziaa podobnie jak instrukcja MOV P1, #11110000b oczywicie w odniesieniu do dwch rnych ukadw wejciawyj cia. Podobnie instrukcje: MOV DPTR, #IO4 MOVX A, @DPTR powoduj odczytanie stanw kocwek portu z rys.10, co dla portu procesora mona byo wykona instrukcj: MOV A, P1 Zamiast znanego ju ukadu 74LS573 zastosowano podobnie dziaajcy ukad 74LS574. Rnica w dziaaniu obu ukadw polega na tym, e pierwszy ukad "przepuszcza dane" przez cay czas, kiedy na wyjcie C podany jest stan wysoki, a zapamituje je podczas opadajcego zbocza sygnau na tym wej ciu. Drugi ukad jest typowym zatrzask iem wyzwalanym zboczem, std w sym bolu graficznym zamiast oznaczenia C na kocwce 1 znajduje si symbol zegara CLK. Tak wic dane s zapamitywane w ukadzie w momencie narastajcego zbocza sygnau na tym wejciu. Dziaanie ukadu ilustruje take tabela 4. W prak tyce w wikszoci zastosowa moliwe jest zastosowanie obu ukadw zamien nie zgodna jest zreszt topologia pozos taych wyprowadze obu kostek.

Rys.9 Zastosowanie dwukierunkowej bramy logicznej

Rysunek 9 przedstawia zastosowanie trzeciego ciekawego ukadu scalonego z popularnej serii TTL, mianowicie dwukierunkowej 8mio bitowej bramy logicznej. Podobnie jak poprzednio wyjaniam, e ukad 74LS245 potrafi przekazywa dane z wej A1...A8 na wyjcia B1...B8 i odwrotnie, tzn. z B1...B8 (ktre wtedy s wejciami) na A1...A8 (ktre peni rol wyj), w zalenoci od poziomu na kocwce DIR (pin 1). Tabela 3 przedstawia zalenoci logiczne ukadu.
Tabela 3

wejcia G DIR

funkcja

Jak wida z tabeli podanie stanu wysokiego na wejcie DIR ukadu powoduje przekazanie danych z A1...A8 odpowiednio na wyjcia B1...B8, i odwrotnie podanie stanu niskiego powoduje przekazanie stanw z B1...B8 na A1...A8. Sygna G suy do uaktywniania ukadu. Podanie na ten pin stanu wysokiego powoduje ustawienie kocwek A1...A8 i B1...B8 w stan wysokiej impedancji. Naley zwrci uwag, e ukad 74LS245 nie jest zatrzaskiem, tzn. e nie zapamituje danych z wej, lecz je tylko "przekazuje" na wyjcia.

Rys.10 Dwukierunkowy port I/O okrojona wersja portu mikroprocesora

42

ELEKTRONIKA DLA WSZYSTKICH 10/98

Te to potrafisz
czynienia z pojedynczym ukadem wyj ciowym, czyli fizycznie zajmujcym tylko jeden adres w przestrzeni adresowej proce sora, a tymczasem, sposb podczenia go do komputerka pozwala na uycie a 8192 adresw (A000h...BFFFh). Dzieje si tak dlat ego, bo wykorzystany do selekcji ukadu U1 (rys.4) sygna /IO4 jest aktywny dla tego wanie zakresu adresw. Tote zaadresowanie MOV DPTR, #A000h MOVX, @DPTR, A czy MOV DPTR, #BFFFh MOVX, @DPTR, A
Rys.11 Przykad penego dekodowania pojedynczego ukadu I/O Tabela 4

czy moe MOV DPTR, #B260h

wejcia OC H L L L CLK x L L>H L>H D x x L H

wyjcia Q Z bez zmian L H

MOVX @DPTR, A w praktyce da ten sam efekt. Mona wic z ca odpowiedzialnoci stwierdzi e jest to czyste "marnotrastwo" adresw! I tak z pewnoci jest. Aby temu zaradzi stosuje si peniejsze lub cakiem pene dekodowanie danego adresu (lub kilku) tak aby np. port U1 z rys.4 by dekodowany tylko i wycznie dla danego jednego adresu np. BFFFh i adnego wicej. W ten sposb w pozostaym obszarze A000h...BFFEh mona by umieci pozostae 8191 ukadw I/O, co nie zawsze w praktyce jednak jest potrzebne. Na rys.11 pokazano zmody fikowany ukad dekodowania pojedynczego portu wyjciowego (z rys.4). Jak wida ukad U1 zostanie zmodyfikowany tylko jeeli procesor zaadresuje go pod adresem: BFFFh. Dzieje si tak dlatego, e dodatkowa bramka U2 real izuje negacj iloczynu logicznego modszych 13tu linii adresowych: A12...A0. Dziki temu tylko wtedy, kiedy na liniach tych pojawi si logiczna jedynka oraz dodatkowo uaktywniony zostanie sygna IO4, port U1 zostanie zapisany oczywicie jeeli procesor wykona instrukcj MOVX @DPTR, A kiedy to take sygna /WR przyjmie stan niski. Wtedy na wyjciu bramki U2 pojawi si niski stan logiczny, ktry wraz z niskim stanem sygnau /IO4 oraz niskim stanem /WR spowoduje pojawienie si wysokiego poziomu na wyjciu trzywejciowej bramki NOR. W przykadzie zastosowano nietypow, ale spotykan w handlu 13 wejciow bramk logiczn NAND typu 74LS133. W razie trudnoci z nabyciem, mona w zastpstwie uy poczonych kaskadowo wielu bramek NAND o mniejszej liczbie wej. Mona take sprbowa zawzi obszar dekodowania ukadu I/O w inny sposb, moliwoci jest wiele, tote inne rozwizania pozostawiam wam jako prac domow, drodzy Czytelnicy. W dzisiejszym odcinku to tyle na temat prostych ukadw wejcia wyjcia. Nastpnym razem zajmiemy si bardziej zoonymi pro gramowalnymi ukadami I/O, dziki ktrym moliwy jest nie tylko odczyt i zapis ale take generowanie przerwa. Poka wam take jak w prosty sposb wyposay nasz komputerek edukacyjny w port drukarkowy zgodny ze standardem Centronics w dodatku pracujcy w dwch kierunkach! Przedstawi schemat ideowy takiego rozwizania oraz procedury w jzyku 8051 realizujce poyteczne funkcje drukowania wprost z kom puterka edukacyjnego oraz dodatkowo emulujce zcze drukarki w komputerku, dziki czemu moliwy bdzie transfer danych np. z kom putera PC do komputerka AVT2250 tym razem nie przez zcze RS 232c ale przez zcze rwnolege Centronics i to z o wiele wiksz prdkoci! Na razie to tyle, zapraszam wic do kilku dodatkowych zada, ktre przygotowaem na powakacyjne jesienne ju wieczory.

Popatrzmy na rys.10. W stanie spoczynku, sygnay /RD, /WR i /IO4 s w stanie wysokim. Dziki temu na wejciu zapisu ukadu U1 (pin 11) panuje stan niski, dziki bramce NOR negujcej sum logiczn sygnaw /WR i /IO4 (ktra dokonywana jest za pomoc bramki OR). Dodatkowo wejcie kasujce przerzutnika /RS zbudowanego z 2 bramek NAND jest w stanie wysokim. Podobnie sygna /RD jest w stanie wysokim a po zsumowaniu z sygnaem /IO4 ustawia w stanie wysokim wejcia zezwalajce G1, G2 ukadu U2, czyli blokuje dziaanie bramy U2. Jeeli teraz procesor wykona cykl zapisu do portu, to w wyniku tego nastpi zapis do ukadu U1 oraz dodatkowo zostanie ustawiony przerzutnik /RS, dziki czemu na wejciu zezwalajcym U1 (OC) powstanie stan niski, co uaktywni wyjcia tego ukadu i w efekcie pojawienie si danych z szyny danych komputerka D0...D7 na wyj ciach I/O 1....I/O 8 caego ukadu. Cykl zapisu nie wpynie przy tym na dziaanie ukadu wejciowego U2, ktry pozostanie nadal nieaktywny. Jeeli procesor dokona cyklu odczytu, to stan niski z wyjcia bramki OR sumujcej sygnay /RD i /IO4 spowoduje skasowanie przerzutnika /RS i pojawienie si stanu wysokiego na wejciu zezwolenia /OC U1 co zablokuje ukad U1 (wyjcia w stanie wysok iej impedancji). Dziki temu moliwy bdzie odczyt stanw linii I/O 1...I/O 8. Ze wzgldu na pewne niedoskonaoci przedstawionego ukadu z rys.10, polegajce na nieuwzgldnieniu niektrych zalenoci czasowych, konieczne okaza si moe dwukrotne odczytanie portu IO4 w momencie, gdy ostatnio by on uywany jako wyjcie. Dzieje si tak dlatego, e moe nastpi sytuacja, kiedy przerzutnik /RS nie zdy przerzuci swego stanu i zablokowa wyjcia ukadu U1, zanim proce sor odczyta stan linii wyjciowych portu. W takim przypadku odczytana zostanie ostania warto wpisana do portu U1. Dlatego jeeli ostatni operacj na ukadzie z rys.10 byo np. MOV DPTR, #IO4 MOVX @DPTR, A ; zapis do portu U1

to przy pierwszy odczyt warto przeznaczy "na straty" MOVX A, @DPTR a dopiero drugi MOVX A, @DPTR potraktowa jako prawidowy i dokona po tym analizy akumulatora.

Sawomir Surowiski

LEKCJA 10
Proponuj trzy zadania. Oto one: 1. Zmodyfikowa ukad z rys. 9 tak aby uwzgldnia przy sterowaniu sygna /WR zapisu, bez zmiany funkcjonalnej ukadu patrz tekst. 2. Narysowa zmodyfikowany ukad dekodera z rys.7 ktry zamiast ukadu 74LS154 wykorzystuje ukady 74LS138. 3. Do ukadu z rys. 10 dobudowa dekoder, dziki ktremu ukad U1 bdzie zapisywany pod adresem A000h a odczytywany spod adresu A001h. Rozwizania zada w kolejnym numerze EdW. Wesoej zabawy !

ACH, TE ADRESOWANIE...
Z pewnoci niektrzy z Was, drodzy Czytelnicy, zauwayli, analizujc powysze przykady, fakt tzw. "niepenego dekodowania adresw". Chodzi o to, e adresujc zapisujc ukad, np. z rys.4, mamy do

ELEKTRONIKA DLA WSZYSTKICH 10/98

43

Te to potrafisz

Mikrokontrolery?
W poprzednim odcinku zapoznalicie si drodzy Czytelnicy z prostymi ukadami I/O, dziki ktrym moliwe jest sterowanie zewntrznymi urzdzeniami za pomoc mikrokomputerka edukacyjnego. W przykadach wykorzystaem najpopularniejsze ukady serii TTL (HCTTTL), tote zastosowanie ich w praktycznych ukadach nie powinno nastrcza problemw. Tym razem mam zamiar przedstawi bardziej rozbudowane ukady , umoliwiajce np. drukowanie na typowej drukarce komputerowej, bd wykorzystanie szybkiej transmisji rwnolegej z urzdzenia zewntrznego do komputerka edukacyjnego.

To takie proste...

Cz 18
Programowane ukady wejciawyjcia
8255 Duo funkcji niewielkim kosztem
Bohater naszego dzisiejszego odcinka to jegomo umieszczony w 40nkowej typowej obudowie DIL. Dziki temu zastosowania i monta tego ukadu na pytce drukowanej, podobnie jak procesorw 8051/2 nie nastrcza trudnoci. Ma to szczeglnie znaczenie bo w dzisiejszej erze miniaturyzacji, na rynku rozpanoszyy si wszelkiego rodzaju zminiaturyzowane obudowy, ktre niejednego amatora elek tronika mog przyprawi o zawrt gowy. W czasach, kiedy technika komputerowa PC wkraczaa pod strzechy, kiedy to IBM wyprodukowa pierwszy komputer osobisty, a w chwil pniej pojawio si na rynku wielu innych producentw sprztu, w ukadach elektronicznych komputerw PC stosowano ukady 8255 bardzo czsto. Pierwszym zastosowaniem bya obsuga cza rwno legego standardu Centronics, przeznaczonego pier wotnie dla potrzeb drukowania. W chwili obecnej kiedy wszysktie ukady I/O komputera PC znalazy si na pycie gwnej, ukad 8255 wraz z ca rodzin wczeniej produkowanych scalakw z mikroprocesorowej rodziny Intela znalaz swoje miejsce z raczej zosta wcielony do tzw. ukadw chip setu pyty komputera. Pomimo tego, e w dzisiejszych komputerach PC do sterowania portem rwnolegych kostki 8255 nie s ju wykorzystywane, to jednak mona je spotka w przemysowych wersjach komputerw sterujcych take PC. Stary, ale sprawdzony stan dard przyj si tak dobrze jak poczciwa ju pidziesitkajedynka i na razie nic nie zapowiada jej upadku. Ukad 8255 jest nadal produkowany i mona go naby prawie w kadym sklepie ze spec jalistycznymi artykuami elektronicznymi. Koszt kost ki mieszczcy si na poziomie okoo 5..10 z nie jest kwot wygrowan, a pamitajc e ukad za tak nisk cen oferuje wiele moliwoci, dostajemy go praktycznie za darmo. Najprociej rzecz mwic, ukad 8255 zawiera trzy uniwersalne 8bitowe porty (PA, PB i PC), z ktrych kady moe by skonfigurowany jako wejcie, wyj cie a w pewnych trybach spenia rol mieszan, nawet z moliwoci generowania przerwa do pro cesora. Dodatkowo, oprcz wspomnianych

kad ktry mam zamiar dzisiaj przedstawi jest tak stary jak caa technika komputerowa, oczywicie ta z prawdziwego zdarzenia, czyli z przeomu lat 70tych i 80tych. Mowa bdzie o scalaku oznaczanym przez producentw jako 8255 programowany ukad wejcia/wyjcia z czem rwnolegym. Zanim jednak przejd do czci praktycznej i przedstawi konkretne schematy oraz listingi pro cedur obsugi ukadu 8255 wypada mi krtko przedstawi sam ukad, tak aby nikt nie czu niedosytu wiedzy w tym zakresie. Jeeli za ktry z Was drodzy Czytelnicy jest na tyle niecierpliwy, e nie moe si pow strzyma od skonfrontowania wiedzy praktycznej w rzeczywistoci, moe przej od razu do akapitu Drukowanie z komputerka.
Rys.1 Topografia wyprowadze ukadu 8255 i jego schemat funkcjonalny

ELEKTRONIKA DLA WSZYSTKICH 11/98

33

Te to potrafisz

Rys.2 Sposb doczenia kostki 8255 do komputerka edukacyjnego.

rejestrw portw PA, PB i PC ukad 8255 zawiera tzw. czwarty rejestr konfiguracyjny, dziki ktremu moliwe jest ustalenie, jak ma pra cowa cay ukad, czy np. port PA ma by ustawiony jako wejciowy, czy wyjciowy itp. Doczenie ukadu do komputerka edukacyjnego (generalnie do pro cesorw 8051/2) jest bardzo proste, bowiem 8255 sterowany jest sygnaami kompatybilnymi z tymi generowanymi przez mikrokontrolery serii MCS51. Sposb doczenia kostki do komputerka edukacyjnego omwi za chwil. Tymczasem na rys.1 przedstawiam rozkad wyprowadze kostki 8255. Jak wida do poczenia ukadu 8255 z urzdzeniami zewntrznymi su linie PA0...PA7, PB0...PB7 i PC0...PC7. To w jaki sposb usta wione s te linie oraz ich funkcje, determinuje specjalne sowo (bajt) konfiguracyjne (wspomniany czwarty rejestr) zaszyte wewntrz ukadu 8255. Jak te sowo zapisywa, innymi sowy jak konfigurowa cay ukad powiem za chwil. Na razie wyjanijmy sobie znaczenie poszczeglnych wyprowadze ukadu. Co prawda jest ich a 40ci ale jak si za chwil przekonasz, drogi Czytelniku, nie jest to wcale duo. D0...D7 linie doczane do szyny danych systemu mikroproce sorowego. Dziki nim, moliwa jest transmisja danych z procesora nad zorujcego do i z ukadu 8255. W przypadku komputerka edukacyjnego AVT2250 linie te powinno doczy si do szyny adresowej D0...D7 komputerka wyprowadzenia: 22,24,26,27,25,23,21,19 zcza BUS AVT2250 /CS sygna wejciowy wyboru selekcji ukadu przez procesor. Podanie logicznego zera na to wejcie umoliwia transmisj danych poprzez linie D0...D7. W ukadzie komputerka edukacyjnego sygna ten moe by doczony do jednego z wyj dekodera adresowego IO3 lub IO4, tak jak w przykadach z poprzedniego odcinka klasy mikroproce sorowej. /WR sygna zapisu danych do ukadu 8255 przez procesor zewntrzny. Podanie stanu niskiego na te wejcie powoduje zapisanie danych z szyny D0...D7 do wewntrznych rejestrw ukadu 8255. W ukadzie komputerka edukacyjnego sygna ten czy si bezporednio z kocwk /WR procesora (lub pinem 17 zcza BUS na pytce gwnej AVT2250). /RD sygna odczytu danych z ukadu 8255. Podanie stanu niskiego na te wejcie spowoduje odczytanie informacji z wewntrznych rejestrw ukadu 8255. Podobnie jak w przypadku sygnau zapisu, wej cie to powinno si doczy do wyjcia /RD procesora 8051 (lub do pinu 34 zcza BUS komputerka AVT2250). A1, A0 linie sterujce wyborem jednego z czterech rejestrw wewntrznych ukadu 8255. W zalenoci od poziomw na tych liniach podczas cyklu odczytu/zapisu przez procesor wybrany zostaje jeden z trzech rejestrw wyjciowych PA, PB, PC bd rejestr konfiguracyjny. RESET wejcie zerowania ukadu 8255. Podanie stanu wysokiego na to wejcie spowoduje wyzerowanie rejestrw wewntrznych

(rejestru sterujcego) ukadu 8255 i ustawienie portw PA, PB, PC jako wejciowych. Taki sam stan ukadu 8255 ustawiany jest automatycznie po kadorazowym wczeniu zasilania. PA0...PA7 linie 8bitowego uniwersalnego portu PA (pierwszego portu) PB0...PB7 j/w lecz portu PB (drugiego portu) PC0...PC7 j/w lecz portu PC (trzeciego portu) Na rys.2 przedstawiony jest najprostszy sposb doczenia ukadu 8255 do komputerka AVT2250. Jeeli ledzisz uwanie cykl klasy mikroprocesorowej, w szczeglnoci jeli zapoznae si z poprzednim odcinkiem o prostych ukadach wejcia/wyjcia, z pewnoci stwierdzisz, e sposb poczenia jest oczywisty i analogiczny z ukadami z poprzedniego odcinka klasy. I tak linie danych D0...D7 doczamy do szyny danych komputerka BUS D0...D7. Linie sterujce zapisem /WR i odczytem /RD do odpowiednich linii zcza BUS (/WR i /RD). Sygna wyboru ukadu /CS doczamy bezporednio do wyjcia dekodera adresowego w ukadzie komputerka np. IO4, natomiast linie wyboru rejestru do analogicznych linii adresowych szyny adresowej komputerka A0 i A1. Prawda e proste! I to ju wszystko, moi drodzy, mona zaj si pro gramowaniem ukadu. Aha byby zapomnia o koniecznoci doczenia zasilania, ktre przycza si troch nietypowo (uwaga dla tych ktrzy w tym momencie jedn rk i jednym okiem chc natychmiast zabra si za wykonanie pytki drukowanej), mianowicie +5V docza si do kocwki 26 ( a nie jak typowo w obudowach DIL do pinu 40) a mas do kocwki 7. Projektujc pytk lub umieszczajc ukad na uniwersalce warto zblokowa lini zasilajc tu przy ukadzie 8255 kondensatorem 100nF. W ten sposb po doczeniu ukadu do komputerka mamy do dys pozycji trzy 8mio bitowe porty PA, PB i PC, do ktrych moemy doczy dowolne urzdzenia. Wnikliwy czytelnik z pewnoci zauway konsekwencj z zas tosowania dwch linii adresowych A0 i A1 w ukadzie 8255 ze wzgldu na sterowanie 4roma rejestrami wewntrznymi ukadu 8255. Tabela 1
Tabela 1

A1 0 0 1 1

A0 0 1 0 1

wybrany rejestr 8255 rejestr portu PA rejestr portu PB rejestr portu PC rejestr kontrolny (CTRL) konfiguracji ukadu

34

ELEKTRONIKA DLA WSZYSTKICH 11/98

Te to potrafisz
przedstawia znaczenie sygnaw A0 i A1 w odniesieniu do wyboru jed nego z czterech rejestrw wewntrznych kostki 8255. W poczeniu ze sterowaniem sygnaem wyboru /CS poprzez lini np. IO4 poszczeglne rejestry 8255 bd widziane przez procesor kom puterka jako adresy: PA adres A000h (A1,A0 = 0,0) PB adres A001h (A1,A0 = 0,1) PC adres A002h (A1,A0 = 1,0) CTRL adres A003h (A1,A0 = 1,1) Analogicznie, jeli podczylibymy lini wyboru /CS np. do sygnau IO3 komputerka to wtedy jak si zapewne domylasz, adresy wygldayby odpowiednio tak: 8000h, 8001h, 8002h, 8003h. Tote, jeeli po wczeniu zasilania komputerka z doczonym do niego ukadem 8255, procesor (51ka) wykona instrukcj: MOV DPTR, #A000h ; adres rejestru portu PA MOVX A, @DPTR ; odczyt rejestru PA z 8255 to w efekcie w akumulatorze znajdzie si liczba ktrej poszczeglne bity bd zgodne z poziomami sygnaw na liniach PA0...PA7 ukadu 8255. Podobnie mona bdzie odczyta linie PB0...PB7 w nastpujcy sposb: MOV DPTR, #A001h MOV A, @DPTR i rejestru C
Rys.3 Ukad 8255 w trybie pracy 0

MOV DPTR, #A002h MOV A, @DPTR O ile rejestr PA (a take PB) moe peni rol wej lub wyj cyfrowych (nie jest moliwe aby niektre bity tych rejestrw byy wej ciami a inne wejciami jednoczenie w tej samej chwili), o tyle rejestr PC ma szczeglne dodatkowe waciwoci. Ot moe on by tak skonfigurowany (za pomoc rejestru kontrolnego CTRL), e w jed noczenie z portu PC mona odczytywa dane lub je zapisywa. Oczywicie w takim przypadku wybrane linie PC bd pracoway wycznie jako wejcia, pozostae za jako wyjcia. Fizycznie w ukadzie 8255 w odrnieniu do rejestrw PA i PB, ktre widziane s jako cae 8mio bitowe rejestry, rejestr PC moe by modyfikowany w dwch powkach. I tak starsze cztery bity rejestru PC7...PC4 bd oznaczane jako PCa modsze PC3...PC0 jako PCb. Obrazowo wszystkie 3 rejestry portw przedstawiam poniej.
Rejestr PA kocwki 14 4 i 374 40 ukadu 8255

W trybie programowania ukadu najstarszy bit (7) rejestru powinien by zawsze ustawiony (1). Znaczenie pozostaych bitw jest nastpujce: bit 7 w trybie programowania ukadu 8255 zawsze 1. bity D6 i D5 okrelaj wybr trybu pracy ukadu i rejestrw PA oraz PCa, i tak: 00 = tryb 0 01 = tryb 1 10 lub 11 = tryb 2. Znaczenie poszczeglnych trybw omwi za chwil. bit D4 okrela kierunek pracy linii portu PA i tak 1 = PA jako wejcie 0 = PA jako wyjcie cyfrowe W trybie 2 pracy ukadu 8255, bit ten nie ma znaczenia. bit D3 okrela kierunek pracy linii portu PCa (PC7...PC4) i tak 1 = PCa jako wejcie 1 0 0 = PCa jako wyjcie cyfrowe bit D2 okrela wybr trybu pracy rejestru PA PA1 PA0 PB, i tak: 0 = tryb 0 1 = tryb 1 bit D1 okrela kierunek pracy linii portu PB, i tak: 1 0 1 = PB jako wejcie 0 = PB jako wyjcie cyfrowe PB PB1 PB0 bit D0 okrela kierunek pracy linii portu PCb (linie PC3...PC0) i tak 1 = PCb jako wejcie 0 = PCb jako wyjcie 1 0

nr bitu: bity

7 PA7

6 PA6

5 PA5

4 PA4

3 PA3

2 PA2

Rejestr PB kocwki 182 25 ukadu 8255

nr bitu: bity

7 PB7

6 PB6

5 PB5

4 PB4

3 PB3

2 PB2

Rejestr PC kocwki 101 17 ukadu 8255

Jak wida regu jest, e ustawienie bitw D0, D1, D3, D4 powoduje ustawienie odpowiadajcych im portw jako wejcia, PC bity PC7 PC6 PC5 PC4 PC3 PC2 PC1 PC0 natomiast wyzerowanie tych bitw powodu je ustawienie tych portw jako wyjcia rejestr PCa rejestr PCb cyfrowe. W najprostszym trybie pracy mamy zatem a 16 kombinacji ustawie portw PA, PB i dwch powek portu PC. Wan informacj jest to e odczyt rejestru kontrolnego CTRL (pod adresem A003h) jest, uwaga, zabroniony! Rejestr ten mona tylko TRYB 0 zapisywa. A czym go zapisywa? Ot zapoznamy si teraz z budow Wspomniane tryby pracy (0, 1 lub 2) umoliwiaj wybr sposobu tego rejestru i jego bitami oraz ich znaczeniem dla pracy kostki 8255. dziaania caego ukadu. Dla uproszczenia zajmijmy si na razie najprost szym trybem 0. W trybie tym jak Rejestr kontrolny 8255 (CTRL) w trybie konfigurowania powiedziaem wczeniej kady z rejestrw PA, PB oraz dwch powek PC (PCa i PCb) moe pracowa jako wejcie nr bitu: 7 6 5 4 3 2 1 0 lub wyjcie cyfrowe. Dane przesyane sa z szyny danych D0...D7 systemu mikropro CTRL bity 1 D6 D5 D4 D3 D2 D1 D0 cesorowego do rejestrw portu (ustaw nr bitu: 7 6 5 4 3 2

ELEKTRONIKA DLA WSZYSTKICH 11/98

35

Te to potrafisz
bajt sterujcy CTRL (binarnie) zapis hex port PA port PB port PC linie PC7...PC4 100 1 1 0 1 1 100 0 1 0 1 1 100 1 1 0 0 1 100 0 1 0 0 1 100 1 0 0 1 1 100 0 0 0 1 1 100 1 0 0 0 1 100 0 0 0 0 1 100 1 1 0 1 0 100 0 1 0 1 0 100 1 1 0 0 0 100 0 1 0 0 0 100 1 0 0 1 0 100 0 0 0 1 0 100 1 0 0 0 0 100 0 0 0 0 0
Tabela 2

linie PC3...PC0 WE WE WE WE WE WE WE WE WY WY WY WY WY WY WY WY

9Dh 8Dh 99h 89h 93h 83h 91h 81h 9Ah 8Ah 98h 88h 92h 82h 90h 80h

WE WY WE WY WE WY WE WY WE WY WE WY WE WY WE WY

WE WE WY WY WE WE WY WY WE WE WY WY WE WE WY WY

WE WE WE WE WY WY WY WY WE WE WE WE WY WY WY WY

Aby uatwi konfigurowanie ukadu w trybie pracy 0 w praktycznych zastosowaniach, poniej zamieszczam tabel 2, w ktrej zapisane sa wszystkie wartoci rejestru kontrolnego CRTL, ktre daj jeden z 16 sposb ustawie portw PA, PB i PC. W tabeli dla zwikszenia czytelnoci zapisaem warto wpisywan do rejestru kontrolnego CTRL w postaci binarnej oraz szesnastkowej. Dodatkowo rozdzieliem spacjami niektre bity w zapisie binarnym, tak aby mg atwiej przeanalizowa sposb ustaw ienia lub zerowania poszczeglnych bitw zgodnie z wczeniejszym opisem. Teraz jeeli chcemy ustawi porty PA, PB i PC jako wyjcia (np. do sterowania 24oma diodami LED) wystarczy sign do tabeli i odczyta liczb 80h jako stosown do zapisu do rejestru konfiguracyjnego ukadu 8255. Potem wystarczy wykona cig instrukcji: MOV A, #80h MOV DPTR, #A003h MOVX @DPTR, A figurowany

;i ukad 8255 skon

Teraz jeeli chcemy np. zapali linie portu PA, to wystarczy wyda polecenie MOV A, #255 MOV DPTR, #A000h MOVX @DPTR, A W praktyce przy pisaniu programu rdowego (kom puterowcy) warto posuy si deklaracj EQU dla zdefiniowania poszczeglnych portw ukadu 8255. Wtedy nie trzeba bdzie za kadym razie pamita, co jakie adresy maj porty PA, PB czy PC. W naszym przykadzie mona to zrobi w sposb nastpujcy: IO_PA EQU A000h ja adresu portu PA IO_PB EQU A001h portu PB IO_PC EQU A002h` IO_CTRL EQU A003h rejestru kontrolnego 8255 ;deklarac ;j/w lecz ;j/w lecz portu PC ;wreszcie

ionych jako wyjcia) lub odczytywane poprzez t szyn do procesora w sposb niezsynchronizowany. Rys.3 obrazuje ide pracy ukadu 8255 w trybie 0. W przypadku kiedy procesor ustawi np. rejestr PA jako wyjcie cyfrowe, to zapisujc potem ten rejestr za pomoc instrukcji: MOVX @DPTR,A powoduje e dane z szyny danych D0...D7 pojawi si na liniach portu PA7...PA0, zgodnie z dan umieszczon w akumulatorze Acc). W przypadku za odwrotnym, kiedy np. rejestr PA pracuje jako wejciowy, odczyt rejestru za pomoc instrukcji MOVX A,@DPTR spowoduje pojawienie si na liniach D0...D7 szyny danych (a potem w akumulatorze Acc) stanw linii portu PA7...PA0). I tak dla przykadu zapiszmy sowo sterujce CTRL ukadu 8255 w taki sposb eby np. port PA i PC pracoway jako WYJCIA port PB jako WEJCIE, patrzc na opis bitw rejestru (wyej) zapiszemy: D6, D5 i D2 bd = 0 (tryb 0) D4 = 0 to PA bdzie wyjciem D3 = 0 to PCa wyjcie D1 = 1 to PB wejcie wreszcie D0 = 0 to PCb jako wyjcie (podobnie jak PCa) zatem aby tak skonfigurowa ukad 8255 naley wykona sekwencj instrukcji: MOV A, #10000010b ;bity D7, D1 = 1, reszta 0 MOV DPTR, #A003h ;zakadam, e /CS jest dopity do /IO4 komputerka MOVX @DPTR, A ;i zapisanie konfiguracji do ukadu 8255

Teraz wystarczy odpowiednio i elegancko ich uywa, np. tak: MOV A, #91h jako WY MOV DPTR, #IO_CTRL MOVX @DPTR, A MOV DPTR, #IO_PA MOVX A, @DPTR MOV DPTR, #IO_PB MOV A, #55h jako 01010101 MOVX @DPTR, A ...... ;ustawiam: PA i PCb jako WE, PB i PCa ;adres rejestru kontrolnego ;i skonfigurowanie ukadu ;adres rejestru PA ;i odczyt linii PA7...PA0 ;adres rejestru PB ;ustaw naprzemiennie linie PB7...PB0 ;i zapis do rejestru PB ;itd.

Na szczegln uwag zasuguje rejestr PC ukadu 8255. Ot moliwe jest selektywne ustawianie bd zerowanie poszczeglnych bitw tego rejestru. Do tego celu suy zapis do rejestru kontrolnego sowa z wyzerowanym najstarszym bitem D7. Poniej przedstawiam struktur sowa rejestru CTRL dla takiego przypadku sterowania. W trybie tym najstarszy bit (7) rejestru powinien by wyzerowany. Znaczenie pozostaych bitw jest nastpujce: bit 7 zawsze 0. bity D6, D5, D4 nie uywane (dowolna warto, zazwyczaj 0)

Rejestr kontrolny 8255 (CTRL) w trybie modyfikacji rejestru PC

nr bitu: bity

7 1

6 D6

5 D5

4 D4

3 D3

2 D2

1 D1

0 D0 CTRL

36

ELEKTRONIKA DLA WSZYSTKICH 11/98

Te to potrafisz
zewntrznego, pozwol na zilustrowanie tego zagad nienia w sposb wystarczajcy do naszych zas tosowa w przyszych wsplnie omawianych ukadach.

TRYB 1
W tym trybie pracy dane mog by przesyane do i z innych urzdze poprzez porty PA lub PB. W tym try bie transmisja jest jednokierunkowa, tzn. dane mog by odczytywane przez cay czas do kolejnej rekonfig uracji ukadu 8255 lub wycznie zapisywane. Niektre z linii portu PC s w tym trybie przyporzdkowane reje strowi PA lub PB, a su do przesyania sygnaw syn chronizujcych transmisj, midzy rejestrami PA lub PB a urzdzeniem zewntrznym. Rejestr PA z odpowiednimi wybranymi liniami portu PC (PCa), ktre synchronizuj transmisj nazywa si grup A, natomi ast rejestr PB z pozostaymi liniami portu PC (PCb) grup B. Tryby pracy linii grupy A i grupy B jest pro gramowany niezalenie. Tote gdy jeden z rejestrw PA lub PB wraz z odpowiednimi liniami portu PC moe pracowa w trybie 1 to tryb pracy drugiego i linii PC nalecymi wraz z nimi do grupy moe pracowa w trybie 1 lub 0. Rys.4 pokazuje jak ukad 8255 pracuje w trybie 1. Jak wspomniaem port PC generuje na liniach dodatkowe sygnay synchronizujce transmisj danych pomidzy 8255 a urzdzeniem zewntrznym. znaczenie sygnaw tych jest nastpujce: a) przy transmisji z ukadu 8255 do urzdzenia zewntrznego /OBF (ang. output buffer full) sygna ten przyj muje poziom niski podczas caego cyklu przyjcia danej z procesora (od narastajcego zbocza sygnau /WR) do odebrania danej przez ukad zewntrzny (ktry sygnalizuje potwierdzenie odebrania znaku na linii /ACK) /ACK (ang. acknowledge) urzdzenie zewntrzne po odebraniu znaku z portu (np. PA) potwierdza zakoczenie odczytu wystawiajc poziom niski na tej linii, co 8255 odbiera jako zakoczenie transmisji.
Rys.5 Zalenoci czasowe sygnaw synchronizacji transmisji podczas odczytu danej (a) przez urzdzenie zewntrzne oraz zapisu (b) danej do ukadu 8255 przez te urzdzenie

Rys.4 Znaczenie linii portw PA,PB i PC w trybie pracy 1.

bity D3, D2, D1 okrelaj numer ustawianego lub zerowanego bitu rejestru PC, i tak: kolejno 000 oznacza wybr bitu D0 (linia PC0) kolejno 001 oznacza wybr bitu D1 (linia PC1) kolejno 010 oznacza wybr bitu D2 (linia PC2) kolejno 011 oznacza wybr bitu D3 (linia PC3) kolejno 100 oznacza wybr bitu D4 (linia PC4) kolejno 101 oznacza wybr bitu D5 (linia PC5) kolejno 110 oznacza wybr bitu D6 (linia PC6) kolejno 111 oznacza wybr bitu D7 (linia PC7) bit D0 powinien zawiera 1 jeeli chcemy wybrany bit (lini portu) rejestru PC ustawi lub 0 jeeli wyzerowa Przykad: zapisalimy wczeniej w rejestrze PC nastpujce stany: 10101010, teraz chcemy wyzerowa take lini PC7. naley wic wyda instrukcj: MOV MOV MOX DPTR, #IO_CTRL A, #00001110b @DPTR, A ;zeruj lini PC7 ;zapis do rejestru CTRL 8255

i gotowe! Selektywna modyfikacja bitw rejestru C moliwa jest tylko w trybie 0 pracy rejestrw PA lub PB. Jeeli np. rejestr PA pracu je w trybie 1 lub 2, a rejestr PB w trybie 0 to mona modyfikowa jedynie bity rejestru PCb (z grupy B) i odwrotnie, dla PB pracujcego w trybie 1, a PA w trybie 0, modyfikowalne s tylko bity PCa. Tryby 1 i 2 pracy ukadu 8255 nie s tak proste jak tryb 0. Dziki nim jednak moliwa jest synchronizacja transmisji pomidzy ukadem 8255 a urzdzeniem zewntrznym. Mona powiedzie, ze w praktyce trybu 0 uywa si kiedy po prostu chcemy sterowa zewntrznymi urzdzenia mi doczonymi (poprzez ukady poredniczce) do linii portw PA, PC czy PC, lub take odczytywa stany tych linii w dowolnym momencie. Istotn informacj jest to e w trybie 0 informacja zapisana do kadego z rejestrw portw PA, PB, PC jest zapamitywana do kolejnej mody fikacji wybranego rejestru. Natomiast w przypadku odczytu, rejestr danego portu jest przezroczysty dla danych przesyanych z urzdzenia zewntrznego i nie zapamituje ich. Natomiast tryby 1 i 2 uywane s do bardziej zoonych zastosowa, takich wanie jak transmisja pomidzy inteligentnymi ukadami pery feryjnymi, takimi jak np. drukarka, komputer, inny ukad oparty o 8255 lub podobny. Zagadnienie jest bardzo rozbudowane, dlatego poniej skupi si do skrconego omwienia sposobu dziaania ukadu 8255 w tych trybach. Przedstawione za w dalszej czci artykuu przykady praktycznego zastosowania kostki 8255 w celach wsppracy ze zwyk drukark komputerow oraz do transmisji danych z innego urzdzenia

ELEKTRONIKA DLA WSZYSTKICH 11/98

37

Te to potrafisz
/INTR A,B ( ang. interrupt) sygnay wyjciowy 8255 zgoszenia przerwania. Przejcie tego sygnau do stanu aktywnego oznacza e urzdzenie zewntrzne odczytao przesan dan i jest gotowe do przyjcia kolejnej danej. Powrt do stanu nieaktywnego nastpuje wtedy kiedy procesor dokona ponownie zapisu tego sowa. b) przy transmisji danej z urzdzenia zewntrznego do 8255 IBF (ang. input buffer full) sygna wyjciowy ktry przyjmuje stan aktywny w momencie kiedy dana zostaje zapisana przez urzdzenie zewntrzne w 8255, skasowanie tego sygna nastpuje kiedy procesor odczyta z 8255 tak odebran dan. /STR (ang. strobe) sygna wejciowy, dziki ktremu urzdzenie zewntrzne moe zgosi gotowo do odebrania przez 8255 danej, wystawionej przez nie INTR A,B ( ang. interrupt) sygnay wyjciowy 8255 zgoszenia przerwania. przejcie tego sygnau do stanu aktywnego oznacza e urzdzenie zewntrzne zakoczyo zapis danej w rejestrze wejciowym 8255. Powrt do stanu nieaktywnego nastpuje wtedy kiedy procesor dokona odczytu tej danej. Na rys.5 a i b przedstawiono zalenoci czasowe odpowiednich sygnaw podczas transmisji w trybie 1. Analiza przebiegw szczegl nie sygnaw sterujcych nie jest trudna, naley jedynie skupi si nieco nad ide pracy portu PC. I tak w trybie przesyania danej z 8255 do urzdzenia zewntrznego, procesor sterujcy (u nas 8051) musi zapisa dan do ukad 8255. Sygna /WR przyjmie podczas zapisu stan niski. Rwnoczenie z momentem rozpoczcie zapisu uaktywniony zostaje sygna zgoszenia przerwania INTR (poziom niski). Po zakoczeniu zapisu danej przez pro cesor sygna OBF przyjmuje stan niski, ukad 8255 czeka na odebranie informacji przez urzdzenie zewntrzne. W tym czasie gotowa do ode brania dana znajduje si na wyprowadzeniach portu PA (lub PB w zalenoci z ktrej grupy A, czy B rejestrw korzystamy). Kiedy urzdze nie zewntrzne odczyta dan z portu PA (PB) zasygnalizuje ten fakt ustawieniem poziomu niskiego na linii /ACK co ukad 8255 odbierze jako znak o zakoczeniu odczytu daje przez te urzdzenie. Sygna /INTR zgoszenia przerwania przyjmie stan nieaktywny (wysoki). Cykl trans misji zosta zakoczony. Podobnie sytuacja przedstawia si podczas transmisji znaku z urzdzenia zewntrznego do ukadu 8255. W tym przypadku urzdzenie zewntrzne po wystawieniu danej na port PA (PB) informuje ukad 8255 o tym fakcie wystawiajc poziom niski na linii /STR strobowania. W tym momencie dana ta zostaje zatrzanita z rejestrze PA (PB) a procesor dowiaduje si o tym otrzymujc np. zgoszenie przerwania poprzez wystpienie stanu wysokiego na wyjciu INTR 8255. Nastpnie proce sor odczytuje dan z portu PA (PB) poprzez zaadresowania portu i podanie stanu niskiego na linii /RD. Po odczycie transmisja zostaje zakoczona, sygna IBF przyjmuje stan nieaktywny, skasowane zostaje take przerwanie INTR. wane s linie PC3...PC7. Pozostae linie PC0...PC2 oraz rejestr PB mog pracowa niezalenie w trybie 0 lub 1. Rys.6 ilustruje znaczenie linii portw PA i PC3...PC7 w trybie pracy 2. Znaczenie sygnaw sterujcych jest takie jak w przypadku trybu 1.

PRZERWANIA Z 8255
Jak wspomniaem wczeniej ukad 8255 ma moliwo generowania przerwa dla potrzeb wsppracujcego z nim procesora. Wiesz ju e sygnay te generowane s na okrelonych linia portu PC. Dodatkowo trzeba wiedzie, e w trybie 1 kademu z portw PA i PB przyporzdkowany jest tzw. przerzutnik zezwolenia przerwania, dziki ktremu moliwe jest w ogle wygenerowanie przerwania przez 8255. Mwic prociej jeeli w swojej aplikacji masz zamiar wykorzysta sygnay INTR, to musisz odpowiednio ustawi dany przerzutnik, a robi si to bardzo prosto, bowiem poprzez zapis odpowiedniego bajtu do rejestru kontrolnego 8255. I tak dla rejestru PA jest to przerzutnik INTRA, a dla rejestru PB INTRB. Ot aby ustawi dane przerzutnik i tym samym zezwoli na ge nerowanie sygnau przerwania na linii INTR naley podobnie jak w przy padku (opisanym wczeniej) posuy si funkcj selektywnego usta wiania bitw rejestru PC. W trybie 1 odpowiednie przerzutniki s przyporzdkowane nastpujcym bitom rejestru PC, i tak: INTRB bit D2 rejestru PC INTRA (gdy port PA jest wejciem) bit D4 rejestru PC INTRA (gdy port PA jest wyjciem) bit D6 rejestru PC Dla przykadu podam e aby np. ustawi sygna zezwolenia przerwa nia INTRB naley wykona instrukcje: MOV A, #0101b MOV DPTR, #IO_PC MOVX @DPTR, A ; ustawienie przerzutnika INTRB ; wybr rejestru PC ; i zapis do niego

oczywicie nie mona zapomnie wczeniej skonfigurowa ukadu 8255 do pracy rejestru PB w trybie 1, mona to zrobi np. poleceniem: MOV A, #10011111b MOV DPTR, #IO_CTRL MOVX @DPTR, A W przykadzie ustawiem bit D2 akumulatora ktry odpowiada za tryb pracy rejestru portu PB (1 tryb 1). Pozostae porty ustawiem domyl nie jako pracujce jako wejcia, a PA w trybie pracy 0. W praktyce w ukadach czsto rezygnuje si bezporedniego poczenia linii INTR z wejciem przerwania procesora (w 8051 jest to INT0 lub INT1), ze wzgldu na cenno wej przerywajcych i moliwo monitorowania transmisji przez procesor poprzez tzw. pulling. Wtedy to wyjcie INTR mona podczy do jednej z linii wol nego portu 8255 pracujcego w trybie 0. Cykliczny odczyt tej linii poz woli na stwierdzenie czy transmisja zostaa zakoczona. Oczywicie mona stosowa przerwania procesora, lecz jak wykazu je praktyka, operacje drukowania z maych systemw automatyki nie musz by wykonywane w tle, chocia nic nie stoi na przeszkodzie aby tak byo. No dobrze do ju teorii, zajmijmy si praktycznymi zastosowaniami. Poza oczywistym prostym zastosowaniem ukadu 8255 (tryb pracy 0) przedstawi poniej dwa ciekawe zastosowania portu, pierwsze do obsugi drukarki, drugie do emulowania drukarki przez komputerek, dziki czemu moliwe jest transmitowania danych z komputera wyposaonego w gniazdo zgodne ze standardem Centronics wprost do AVT2250.

TRYB 2
W trybie tym ukad 8255 potrafi transmitowa dane w dwch kierunkach jednoczenie wraz z potwierdzeniem transmisji. Rejestr PA wykorzystywany jest wtedy do transmisji danych midzy 8255 a urzdzeniem zewntrznym. Jako sygnay synchronizujce wykorzysty

Rys.6 Znaczenie sygnaw w trybie 2 pracy

DRUKOWANIE Z KOMPUTERKA AVT2250


Nasz komputerek potrafi komunikowa si za pomoc wywietlacza LED oraz klawiatury lokalnej. Ciekawym uzupenieniem, z pewnoci take bardzo atrakcyjnym take dla zazdrosnych o twj pierwszy sys tem mikroprocesorowy, kolegw bdzie moliwo obsugi drukarki. Bdziesz mg drukowa co tylko przyjdzie Ci do gowy. Ja w przykadzie poka jak mona uzupeni program monitora komputerka AVT2250 o polecenie drukowania zawartoci pamici operacyjnej w postaci szesnastkowej i znakowej. Funkcja ta moe mie niebanalne znaczenie szczeglnie dla rczniakw, ktrzy bd mogli rzuci okiem na swj cay program wydrukowany na kartce papieru. Oczywicie musicie moi drodzy posiada choby najstarsz zdezelowan drukark. Ja posuyem si leciw drukark STAR LC10, ach ezka krci si w oku, kiedy wspominam tamte czasy starych wol nych ale poczciwych pierwszych PCtw.

38

ELEKTRONIKA DLA WSZYSTKICH 11/98

Te to potrafisz
Rys.7 Sposb podczenia gniazda DB2 25/F do ukadu 8255

Gotowe! Teraz naley jeszcze doczy drukark za pomoc typowego kabla drukarkowego z gniaz dem DB25/F, ktre przed chwil skrosowalimy z wyjciami portw PA,PB i PC ukadu 8255. Zapiszmy teraz sowo konfiguracyjne rejestru CTRL ukadu 8255 dla trybu pracy z drukark czyli transmisji synchronicznej gdzie dane s wysyane z 8255 do drukarki. I tak: bit 7 = 1 (zawsze jedynka) bit 6 i 5 = 00 (tryb pracy PA jako tryb 0) bit 4 = 1 (linie PA jako wejciowe bd odczyty wa stany linii drukarki) bit 3 = 0 (linie PC5...PC7 bd steroway sygnaami AUTOFD, SELIN i /RESET) bit 2 = 1 (tryb pracy rejestru PB 1) bit 1 = 0 ( PB jako wyjcie ) bit 0 = 1 (aby wolna linia PC3 na wszelki wypadek bya wejciem, bo pozostae linie PC0..PC2 generuj sygnay synchronizacji trans misji a wic /ACK, /OBF i INTR) Wobec tego liczba wpisana do rejestru CTRL przy inicjacji ukadu 8255 to bdzie: 10010101 binarnie, czyli 95h szesnastkowo. Wykonujemy wic instrukcje:

Drukark tak mona naby na giedach w cenach przyprawiajcych o zawrt gowy, a mianowicie 50, z (tak, pidziesit zotych), mniej ni kosztuje sam komputerek. Przejdmy zatem do ukadu. Aby doczy drukark do naszego komputerka naley zaopatrzy si w dodatkowe zcze typu DB25/F (eskie) Nastpnie zgodnie z rys. 7 wykonujemy poczenia pomidzy wyprowadzeniami ukadu 8255 (z rys.2) zgodnie z odpowiadajcymi oznaczeniami na obu rysunkach. Do pracy ukadu 8255 w charakterze sterownika drukarki wykorzys tamy nastpujce ustawienia konfiguracyjne kostki 8255: 1. port PB ustawimy jako wyjciowy w trybie 1 2. port PA i PCa (PC4...PC7) ustawiamy w trybie 0, PA jako wejcie, PCa wyjcie 2. wtedy sygna na linii PC1 (/OBF) uyjemy jako strobujcy dane do drukarki 3. stan na linii PC2 (/ACK) bdzie sygnalizowa ukadowi 8255 zakoczenie odbioru znaku przez drukark 4. nie bdziemy korzysta z ukadu przerwa procesora (przyda si by moe do czego innego), dlatego wyjcie zgoszenia przerwania INTRB doczymy zwrotnie do linii PA7 portu PA (bdziemy bada stan tej linii aby wiedzie kiedy transmisja jest zakoczona) dodatkowe linie informacyjne z sygnaami wysyanymi przez drukark doczymy do wolnych linii portu PA i PC, tak: PA0 do linii /ERROR: sygna na tej linii przyjmuje stan niski kiedy drukarka nie ma papieru, bd jest w trybie offline lub te po prostu jest wyczona PA1 do linii BUSY: wysoki poziom logiczny na tej linii sygnalizuje jedno ze zdarze: a) drukarka jest w stanie offline, b) lub odczona od komputerka, c) wewntrzny bufor drukarki jest peny, d) drukarka odbiera wanie znak, e) trwa inicjalizacja drukarki f) wystpi inny bd w pracy drukarki PA2 do linii PAPEMPTY: wysoki poziom logiczny na tej linii oznacza wyczerpanie si papieru PA3 do linii SELOUT: wysoki poziom logiczny na tej linii oznacza, e drukarka jest fizycznie poczona z komputerkiem jest w stanie online linie PA4...PA6 portu pozostaj niewykorzystane. Pozostao nam podczenie trzech sygnaw sterujcych drukark PC4 do linii AUTOFD: niski poziom podany przez 8255 na to wej cie powoduje automatyczne dodawanie znakw w trybie tekstowym przez drukark po zakoczeniu kadej linii PC5 do linii /RESET: niski poziom logiczny uruchamia w pewnych drukarkach procedur inicjujc PC6 do linii SELIN: niski poziom logiczny na tej linii informuje drukark e jest ona wybrana i bdzie uywana. Zwykle linia ta jest poczona z mas, my jednak trzymajc si zasady edukacyjnej naszego kursu umoliwimy sobie sterowanie tym sygnaem.

MOV A, #95h MOV DPTR, #IO_CTRL MOVX @DPTR, A I gotowe, teraz naley jeszcze odblokowa przerzutnik zezwalajcy na generowanie sygnau przerwania INTRB na linii PC0. Zgodnie z tym co opisaem wczeniej naley wpisa do rejestru CTRL ukadu 8255 bajt tak jak si ustawia pojedyncze bity rejestru PC. Jak wiemy przerzutnik INTRB znajduje si pod bitem D2 rejestru CTRL, dodatkowo poniewa mamy zamiar ustawi ten bit aby odblokowa dziaanie linii INTRB ustawiamy take bit 0, wobec tego otrzymamy warto: 00000101 binarnie, czyli 05h szesnastkowo, zapisujemy j do rejestru CTRL podobnie jak poprzednio: MOV A, #05h MOV DPTR, #IO_CTRL MOVX @DPTR, A Dodatkowo naley zainicjowa sygnay sterujce drukark, czyli linie PC5...PC7 w sposb nastpujcy: MOV A, #01010000b ;SELIN=1, RESET=0 (inicjacja), AUTOFD=1 MOV DPTR, #IO_PC MOVX @DPTR, A a po chwili powinnimy wykona instrukcje ustawiajce lini /RESET drukarki w stanie nieaktywnym, czyli: MOV A, #01110000b ;SELIN=1, RESET=1 (praca), AUTOFD=1 MOV DPTR, #IO_PC MOVX @DPTR, A i to ju naprawd wszystko, drukarka jest gotowa do przyjmowania i drukowania znakw. Teraz trzeba wysa znak a nastpnie czeka a drukarka go wydruku je i zgosi ten fakt. Poniej przedstawiam procedur drukowania znaku na drukarce doczonej do komputerka edukacyjnego. Drukowany jest znak z akumulatora Acc. patrz tabela na nastpnej stronie Najpierw utworzyem zbir deklaracji adresw ukadu 8255 doczonego do komputerka zgodnie z rys.2. Zbir nazwaem port8255.inc i deklaracj wczenia go do kompilacji umieciem w zbiorze w procedur PRNACC, ktra wysya znak do drukarki. Jeeli transmisja nie powioda si to procedura wypisuje na displeju napis o bdzie Err oraz przed zakoczeniem dodatkowo ustawia znacznik C, jeeli wszystko przebiego pomylnie, to procedura koczy si z wyze rowanym znacznikiem C. Uwga, procedura ta sprawdza jedynie stan linii INTRB, nie sprawdza stanw linii informacyjnych drukarki /BUSY, PAPEMPTY i SELOUT. Proponuj jako zadanie domowe uzupeni t procedur o detekcj

ELEKTRONIKA DLA WSZYSTKICH 11/98

39

Te to potrafisz
Listing 1 1 2 CPU 8052.DEF

Zbior: const.inc Zbior: bios.inc Zbior: port8255.inc 1 ;********************************************** 2 ;Deklaracja adresow portow ukladu 8255 3 ;klasa mikroprocesorowa odcinek 18, EdW 11/98 4 ;********************************************** 5 6 A000 IO_PA equ A000h 7 A001 IO_PB equ A001h 8 A002 IO_PC equ A002h 9 A003 IO_CTRL equ A003h 10 Zbior: prnacc.s03 5 6 0A00 org 0A00h ;offset w obrebie pamieci EPROM komputerka 7 8 ;********** 9 ;* PRNACC * Wysyla znak z akumulatora na drukarke 10 ;********** 11 0A00 C083 prnAcc: push DPH 12 0A02 C082 push DPL 13 0A04 C0E0 push Acc 14 0A06 90A000 chkprn: mov DPTR,#IO_PA ;odczyta stanu drukarki 15 0A09 E0 movx A, DPTR 16 0A0A 540F anl A,#0Fh 17 0A0C 6409 xrl A,#1001b ;czy drukarka gotowa ? 18 0A0E 6017 jz prnok ;tak to drukuj 19 0A10 prnerror: 20 0A10 120274 lcall CLS 21 0A13 757879 mov DL1,#_E 22 0A16 757950 mov DL2,#_r 23 0A19 757A50 mov DL3,#_r 24 0A1C 1202C5 lcall CONIN ;czekanie na dowolny klawisz 25 0A1F D3 setb C ;ustawienie znacznika bledu (C=1) 26 0A20 D0E0 pop Acc 27 0A22 D082 exit: pop DPL ;i zakonczenie drukowania 28 0A24 D083 pop DPH 29 0A26 22 ret 30 0A27 D0E0 prnok: pop Acc ;od tej instrukcji gdy OK ! 31 0A29 90A001 mov DPTR,#IO_PB 32 0A2C F0 movx DPTR,A ;wyslanie znaku do drukarki 33 0A2D 90A000 mov DPTR,#IO_PA ;odczyt stanu drukarki 34 0A30 E0 wait: movx A, DPTR 35 0A31 5480 anl A,#80h ;czy mozna wyslac nastepny znak ? 36 0A33 60FB jz wait ;nie to czekaj 37 0A35 C3 clr C ;zakoczenie drukowania OK. ! 38 0A36 80EA sjmp exit 39 40 0A38 END Kompilacja zakonczona pomyslnie ! Zbior: prnacc.s03 , 56 bajt(ow), 0.1 sekund(y).

tych sygnaw i sprbowa w domowym zaciszu pobawi si z tymi Na deser proponuj krtk procedur dodatkow, ktra korzysta z sygnaami. procedury PRNACC i drukuje tekst (cig bajtw) zakoczony znakiem Procedura zostaa skompilowania z offsetem 0A00h, czyli w obrbie #0 (zero) zaczynajcy si od adresu podanego w DPTR. Oto ona: pamici programu komputerka. Jeeli kto chce, to moe zmody Teraz moesz np. w swoim programie testujcym sprbowa fikowa pami monitora dodajc na stae procedur PRNACC do wydrukowa zdanie: pamici programu EPROM. Sposb modyfikacji przed stawiem we wrzeniowym numerze EdW. W kadym razie Listing 2 trzeba dysponowa programatorem pamici EPROM. Jeeli nie posiadasz programatora to procedur PRNACC CPU 8052.def powiniene wykorzystywa w aplikacjach pisanych przez PRNACC equ 0A00h siebie, tzn. umieszcza listing podany powyej w pliku rdowym twego programu (oczywicie pomijajc ;********** dodatkowe oznaczenia i informacje wygenerowane przez ;* PRNTXT * Wysyla tekst ASCIIZ na drukarke (dane: mov DPTR,#tekst) kompilator PASM51.EXE). ;********** PRNTXT: Uycie przedstawionej procedury jest bardzo proste i movx A, DPTR ;pobranie znaku z bufora wyglda moe wanie tak: MOV A, #A ;wydrukuj liter A LCALL PRNACC JNC nastepny _znak blad_drukarki: ..... .....;instrukcje w wypadku bdu drukowania
ok1: ok2: cjne ret lcall jnc ret inc sjmp ret A,#0,ok1 PRNACC ok2 DPTR prntxt ;czy znak konca tekstu ? ;tak to koniec procedury ;nie to wydrukuj znak ;czy blad drukowania ? ;tak to zakoncz procedure ;nie to nastepny znak

40

ELEKTRONIKA DLA WSZYSTKICH 11/98

Te to potrafisz
std wic otrzymamy sowo: 10010110 binarnie, czyli 96h szesnastkowo. Podobnie jak poprzednio trzeba wysa jest do portu 8255, wanie tak: MOV A, #96h MOV DPTR, #IO_CTRL MOVX @DPTR, A Pozosta jeszcze do odblokowania przerzutnik zgoszenia przerwania INTRB tak wic do portu ukadu 8255 wysyamy tak sam warto jak w przypadku obsugi drukarki, czyli: MOV A, #05h MOV DPTR, #IO_CTRL MOVX @DPTR, A
Rys.8 Schemat kabla do poczenia komputera PC z AVT2 2250

Hello z systemu AVT2250! za pomoc sekwensji instrukcji: MOV DPTR, #zdanie LCALL PRNTXT ..... ..... zdanie db Hello z systemu AVT2250!, 0 Pamitaj aby na kocu zawsze postawi znak #0, w przeciwnym przypadku procedura pjdzie w przysowiowe maliny.

Nastpnie naley wykona specjalny kabel do poczenia z urzdzeniem zewntrznym, w naszym przy padku bdzie to komputer PC z rwnolegym zczem typu Centronics (drukarkowym). Rys.8 przedstawia schemat pocze kabla do transmisji z komputerem PC. Oba wtyki po dwch stronach kabla bd typu mskiego DB25/M, lecz ze wzgldu na wykonane poczenia naley zaznaczy (flamastrem) t stron ktr wtykamy do komputera PC a drug, jako doczan do portu 8255 komputerka AVT 2250. Podczas wykonywania kabla radz Ci zastanowi si na przy porzdkowaniu poszczeglnych linii sygnaom portu Centronics kom putera PC. Dla uatwienia powiem tylko e dziki skrzyowaniom sygnaw moliwe jest poczenia nastpujcych kompatybilnych par sygnaw: AVT2250 < > PC STROBE z ACK BUSY z RESET ERROR z AUTOFD Jeeli kabel zosta wykonany to mona zabra si do zainicjowania stanw na odpowiednich liniach cza, tak aby komputer PC zacz widzie nasz komputerek i aby mona byo wysa do niego jakie znaki. W tym celu do portu PC naley wysa bajt: 00100000b, a to dla tego, e wtedy ustawimy sygnay: PAPER EMPTY (OK.), BUSY i ERROR, tak e komputerek bdzie widziany przez PCta jak potencjalna gotowa do pracy drukarka. Wykonujemy wic instrukcje: MOV A, #00100000b MOV DPTR, #IO_PC MOVX @DPTR, A ;PAPER OK, BUSY, not ERROR

SYMULOWANIE DRUKARKI, CZYLI JAK ODBIERA ZNAKI Z ZEWNTRZ


Uff, wiesz ju drogi czytelniku w jaki sposb wysya znaki na drukark za pomoc ukadu 8255. Czy nie warto byoby take mc ich odbiera, ale skd?, no np. z zewntrznego urzdzenia wyposaonego w port rwnolegy kompatybilny z naszym, chociaby z poczciwego PCta lub innego komputera, jaki posiadasz. W tej czci artykuu poka w jaki sposb komputerek edukacyjny AVT2250 moe bez adnych przerbek zmontowanego ju ukadu 8255 (zgodnie z rys.2) udawa drukark i przyjmowa znaki z zewntrz. Jak si pewnie domylasz do zrealizowania tego celu wykorzystam ten sam tryb pracy portu jak poprzednio (tryb 1) lecz port PB bdzie pracowa jako wejcie danych. Sytuacj t moesz zobaczy na rys. 4 w tej jego czci gdzie pokazany jest port PB w trybie 1 oraz towarzyszce mu sygnay synchronizujce transmisj, czyli /STR, INB i INTRB. Pierwszym krokiem jest ustalenie skadni sowa konfiguracyjnego portu CTRL ukadu 8255. Wszystkie bitu tego sowa bd takie same jak poprzednio za wyjtkiem dwch najmodszych, oto one: bit 1 = 1 ( PB jako wejcie ) bit 0 = 0 ( PCb jako wyjcie)
Listing 3 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 0B00 org 0B00h

;********** ;* INPACC * Czeka na znak z portu rownoleglego i do Acc ;********** 0B00 C083 INPACC: push DPH 0B02 C082 push DPL 0B04 90A000 mov DPTR,#IO_PA 0B07 E0 waitp: movx A, DPTR 0B08 5480 anl A,#80h 0B0A 60FB jz waitp 0B0C 90A001 mov DPTR,#IO_PB 0B0F E0 movx A, DPTR 0B10 D082 pop DPL 0B12 D083 pop DPH 0B14 22 ret 0B15 END

i ukad jest gotowy do odbierania znakw z urzdzenia zewntrznego. Poniej zamieszczam uproszczon proce dur oczekiwania na znak z cza rwno legego i umieszczenie go w akumula torze. Jako prac domow proponuje uzupenienie tej procedury funkcj przeter minowania, tak aby komputerek eduka cyjny przy braku transmisji po prostu nie zawiesi si. patrz tabela na nastpnej stronie
;czy uklad 8255 zajety ? ;tak to poczekaj ;nie to odczytaj dana ;dana w Acc

Procedura zostaa skompilowana z off setem 0B00h, tak aby znale si w obszarze pamici programu monitora kom puterka, a jednoczenie nie kolidowa z wczeniejsz procedur obsugi drukarki. Tak ja poprzednio procedury tej mona take uywa w swoich aplikacjach wstawiajc j do zbioru rdowego. Korzystanie z procedury INPACC jest proste i sprowadza si do jej wywoania: LCALL INPACC ..... ;a co dalej zrobisz z tym znakiem to twoja sprawa

Kompilacja zakonczona pomyslnie ! Zbior: inpacc.s03 , 21 bajt(ow), 0.1 sekund(y).

ELEKTRONIKA DLA WSZYSTKICH 11/98

41

Te to potrafisz
Przykadowy wydruk powinien wyglda jak ten na dole strony Wydruk przedstawia zawarto pamici o podanych adresach z zakresu: 2600h... 26FFh. Wesoej zabawy i do zobaczenia w nastpnym numerze EdW, gdzie znajdzie si rozwizanie powyszego zadania.

Sawomir Surowiski

Rys.2 Rozwizanie zadania nr 2 Rys.1 Rozwizanie zadania nr 1

To na razie wszystko, co przygotowaem na dzisiejszy odcinek klasy mikroprocesorowej. Myl e spora ilo informacji do przemyle nia a take sprawdzenia w praktyce umili Ci, drogi Czytelniku jesienne chodne wieczory. Powodzenia.

Sawomir Surowiski

LEKCJA 11
Rozwizania zada z poprzedniej lekcji przedstawione s na rysunkach poniej. I tak rysunek 1 przedstawia zmodyfikowany z rys.9 w poprzednim numerze ukad uwzgldniajcy sygna /WR procesora. Na rys.2 pokazaem jak poczy dwa ukady 74LS138 tak aby zastpi jeden demultiplekser 74LS154. Wreszcie na rys.3 znajduje si zmodyfikowany ukad dekodera z rys.10 (z poprzedniego numeru EdW), dziki ktremu ukad U1 zapisywany jest pod adresem A000h a odczytywany pod adresem A001h Sdz e analiza powyszych schematw nie nastrczy nikomu trudnoci. Jako zadanie na kolejny raz proponuj zapisanie procedury drukowania zawartoci zewntrznej pamici danych komputerka AVT 2250, w zadany z klawiatury zakresie np. od adresu 8000h do 80FFh w postaci szesnastkowej i znakowej wedug przykadowego szablonu: Adres 16 bajtw kolejnych danych w HEX te same bajty jako znaki
Rys.3 Rozwizanie zadania nr 3
Address Data Character (2600h) 0E 57 31 C0 50 9A E2 36 7D 0E 9A DF 35 7D 0E 80 .W1.P..6}...5}.. (2610h) 3E CA 8A 00 74 06 C6 46 FB 01 EB 04 C6 46 FB 02 >...t..F.....F.. (2620h) 8A 46 FB 50 B0 0F 50 9A AA 10 CF 0C 8D 7E FB 16 .F.P..P......~.. (2630h) 57 B0 02 50 E8 05 F8 8D 7E FC 16 57 9A 1F 0C CF W..P....~..W.... (2640h) 0C 80 3E 7E 89 00 74 07 C6 06 7E 89 00 EB 17 8A ..>~..t...~..... (2650h) 46 FB 3C 01 75 07 C6 06 CA 8A 01 EB 09 3C 02 75 F.<.u........<.u (2660h) 05 C6 06 CA 8A 00 89 EC 5D C3 55 89 E5 31 C0 9A ........].U..1.. (2670h) 30 05 7D 0E BF 98 89 1E 57 B8 B7 00 50 9A E3 37 0.}.....W...P..7 (2680h) 7D 0E BF 98 89 1E 57 BF 18 8A 1E 57 9A 96 38 7D }.....W....W..8} (2690h) 0E 83 C4 04 BF 98 89 1E 57 9A 5B 38 7D 0E 9A 47 ........W.[8}..G (26A0h) 0C CF 0C B0 07 50 E8 8F FA 31 C0 9A 16 01 7D 0E .....P...1....}. (26B0h) 5D C3 00 55 89 E5 31 C0 9A 30 05 7D 0E 80 3E C8 ]..U..1..0.}..>. (26C0h) 8A 00 B0 00 75 01 40 A2 C8 8A BF 94 89 1E 57 9A ....u. .......W. (26D0h) 1F 0C CF 0C C6 06 7B 89 00 C6 06 7E 89 01 C6 06 ......{....~.... (26E0h) 52 90 FF B0 00 50 BF 32 0C 0E 57 E8 7C FB 5D C3 R....P.2..W.|.]. (26F0h) 55 89 E5 31 C0 9A 30 05 7D 0E A0 CB 8A 30 E4 48 U..1..0.}....0.H

42

ELEKTRONIKA DLA WSZYSTKICH 11/98

Te to potrafisz

W tym odcinku koczymy omawianie ukadw I/O cieka wym przykadem wykorzystania dostpnego ostatnio na rynku polskim ukadu scalonego SA9203. Kostka moe sta si otyle atrakcyjna gdy jest ostatnio dostpna w sieci handlowej AVT, tote kady z Was kto zainteresuje si niniejszym ukadem , bdzie mg sprbowa wykorzysta go dla swoich potrzeb a jak si za chwil przekonacie zastosowa moe by wiele. Dzi take rozwizanie zadania z poprzedniej lekcji czyli drukowanie z komputerka AVT2250 na zwykej drukarce komputerowej wyposaonej w rwnolege zcze standardu Centronics.

Mikrokontrolery? To takie proste...

Cz 19
Programowane ukady wejciawyjcia cz III
wntrznym ukadem sterujcym, rejestrw konfiguracyjnych oraz reje strw 6ciu portw A...F. Znaczenie zewntrznych sygnaw ste rujcych podaj w tabeli 1. W tabeli 2 przedstawiam parametry elektryczne ukadu SA9203. Jak wida parametry odpowiadaj warunkom zasilania TTL, czyli 5V. Ukad SA9203 moe z powodzeniem pracowa z ukadami wykonany mi w technologii CMOS, a take TTLLS, lub nawet TTL przy zachowa niu odpowiednich dopuszczalnych obcie. Na rys.3 przedstawiono ukad i adresy wewntrznych rejestrw uka du. Ukad podobnie jak mikroprocesor 8051 posiada 8bitow multiplek sowan szyn adresow danych AD0...AD7, co dla zewntrznego u kadu sterujcego kostk SA9203 zajmuje obszar 256 bajtw w jego (8051) przestrzeni adresowej. Wybrane obszary ukadu zajte s przez

Dzi chciabym zapozna Ci drogi czytelniku z ciekawym ukadem I/O, ktrego moliwoci odpowiadaj mniej wicej dwm, omawianym wczeniej ukadom 8255. Chodzi o ukad do egzotycznej bo poudnio woafrykaskiej firmy produkujcej szeroka gam ukadw dla potrzeb nowoczesnej telekomunikacji SAMES. Mowa bdzie o ukadzie SA9203. Poniewa od niedawna ukad ten jest dostpny w ofercie han dlowej AVT, a jego cena jest przystpna jak na moliwoci kostki, posta nowiem zakoczy cykl o ukadach I/O omwieniem wanie jego mo liwoci. Drugim powodem dla ktrego chc zwrci szczegln uwag na kostk SA9203 to idealna wprost kompatybilno z rodzin mikro procesorw 8051 jeeli chodzi o poczenie obu tych ukadw. Dziki zastosowaniu SA9203 system mikroprocesorowy moe zosta wzbo gacony o 6 dodatkowych uniwersalnych portw wejciawyjcia, kady o szerokoci 8miu bitw. W sumie daje to a 48! dodatkowych koc wek do dowolnego wykorzystania.

UKAD SA9203 TROCH TEORII


Kostka zostaa wykonana w technologii CMOS. Jak wczeniej powie dziaem, ukad wietnie nadaje si do podczenia z mikrokontrolerem 8051 a to ze wzgldu na fakt posiadania multipleksowanej szyny da nych i adresu. Ukad dostarczany jest przez producenta w typowej obu dowie PLCC68. Nie powinno to jednak odstraszy od zastosowania na wet amatora elek troniki, bowiem do ukadu mona za stosowa odpowie dni podstawk ktra posiada typo wy calowy rozstaw (2,54 mm). Na rys.1 przedstawiono opis wyprowadze uka du a na rys.2 sche mat wewntrzny u kadu SA9203. Ukad skada si z: interfejsu wej ciowego, czce go multiplekso wan szyn danych / adresu z ze Rys.1 Rozkad wyprowadze ukadu SA9203.

Rys.2 Schemat wewntrzny ukadu SA9203.

ELEKTRONIKA DLA WSZYSTKICH 12/98

37

Te to potrafisz
Tabela 1 Pin 18,52 1,35 61...68 Typ Symbol VDD VSS AD0...AD7 Opis zasilanie ukadu +5V; masa zasilania 0V 3stanowa multipleksowana szyna danych/adresu. 8bitowy adres zatrzaskiwany jest we wntrzu ukadu SA9203 podczas opadajcego zbocza sygnau ALE. Dane zapisywane s lub odczytywane po podaniu odpowiednio sygnaw /WR (zapisu) lub /RD (odczytu); nie uywany w ukadzie SA9203, powinien by poczony z mas (Vss), znaczenie tego pinu opisz w dalszej czci artykuu; aktywny niski sygna na tym wejciu powoduje wybr ukadu; pin kontrolujcy zatrzanicie adresu na szynie AD0...AD7 podczas zapisu przez urzdzenie zewntrzne, nastpuje to podczas opadajcego zbocza tego sygnau; poziom niski na tym wejciu pozwala na odczyt wewntrznych rejestru ukadu poziom niski na tym wejciu powoduje zapis danej do wewntrznego rejestru ukadu programowane wyjcie zgoszenia przerwania do ukadu zewntrznego, moliwo ustalenia polaryzacji oraz uaktywnienia tego pinu wysoki poziom podany na to wejcie powoduje zresetowanie ukadu wejcie zatrzaskiwania danej w porcie A, gdy port ten pracuje jako wejcie, uniwersalny 8bitowy port I/O. Moliwo indywidualnego zdefiniowania kadego pinu portu jako zatrzaskiwanego wyjcia lub wejcia. W try bie pracy jako wejcie port moe pracowa w try bie zatrzaskiwania (sygnaem STB) lub jako przezroczysty (transparent) 8bitowy uniwersalny port I/O. Wszystkie piny mog by ustawione jako zatrzaskiwane wyjcia lub jako wejcia typu transparent. identyczny jak port B identyczny jak port B identyczny jak port B identyczny jak port B

we/wy

we

A8

3 4

we we

/CS ALE

5 6 7

we we wy

/RD /WR INT

Rys.3 Rejestry wewntrzne ukadu SA9203

8 9 10...17

we we we/wy

RST STB PA0...PA7

19...26

we/wy

PB0...PB7

27...34 36...43 44...51 53...60

we/wy we/wy we/wy we/wy

PC0...PC7 PD0...PD7 PE0...PE7 PF0...PF7

Rys.4 Mapa portw przy adresowaniu bitowym.

Poniej zapoznam ci ze znaczeniem poszczegl nych portw kontrolnych ukadu SA9203. PACR rejestr kontrolny portu A. Na rys.5 pokaza no znaczenie poszczeglnych bitw rejestru. Odpo

porty konfiguracyjne oraz porty PA...PF jak pokazano na rysunku. Ukad pozwala na dwojakie adresowanie kadego z rejestrw portw PA...PF. Pierwszy polega na jednoczesnym adresowaniu caego portu, drugi po zwala na zaadresowanie pojedynczego pinu kadego z portw. W tym drugim przypadku przy odczycie danej w postaci bajtu, siedem najstar szych bitw nie ma znaczenia, jedynie najmodszy D0 wskazuje na stan pinu lub wymusza go w przypadku pracy portu jako cyfrowego wyjcia. Dodatkowe rejestry sterujce prac caego ukadu zawsze adresowa ne s bajtowo. Do uyteczn funkcj w przypadku tych rejestrw jest moliwo odczytu ich zawartoci. Dziki temu programista nie musi zapamitywa ich stanu po zapisie w dodatkowych zmiennych wyko rzystywanych w programie. Na rys.4 przedstawiona jest mapa adresowa poszczeglnych portw w trybie adresowania bitowego. Tabela 2 Parametr zasilanie pobr prdu (statyczny) pobr prdu (dynamiczny) napicie wej. w stanie wysokim napicie wej. w stanie niskim napicie wyj. w stanie wysokim napicie wyj. w stanie niskim

Rys.5 Rejestr specjalny PACR

Symbol Vdd Idds Iddd Vih Vil Voh Vol

Min Typ 4,75 5,0 15 2,0

Max 5,25 50 20 1,0

4,5

4,7 0,25 0,5

Jednostka V uA mA V V V V

Warunek pomiaru Vdd = 5,0V Vdd = 5,0V Vdd = 5V Vdd = 5V Vdd = 5V Ioh = 5mA Vdd = 5V Ioh = 7mA

wiednie ustawienie lub wyzerowanie po zycji pozwala na indywidualne ustalenie pinu portu A jako wejcia lub wyjcia cyf rowego. PAICR rejestr konfiguracyjny portu A w trybie wejcia. Rys.6 przedstawia zna czenie bitw rejestru. W przypadku usta wienia pinu jako zatrzaskiwane wejcie (latched input) dane zostaj zapami tane po nadejciu sygnau na wejciu STB. W przypadku ustawienia dowolne go pinu portu A jako wyjcie, odpowia dajcy mu bit w rejestrze PAICR nie ma wpywu na dziaanie tej linii portu. IOCR rejestr konfiguracyjny wejcia wyjcia. Rejestr pozwala na konfiguracj

38

ELEKTRONIKA DLA WSZYSTKICH 12/98

Te to potrafisz

Rys.6 Rejestr specjalny PAICR

Rys.8 Rejestr adresowania PAMR.

PRAKTYCZNE UKADY Z SA9203


Nie przeduajc teoretycznych wywodw na temat ukadu SA9203 na rys.9 przedstawiam najprostszy sposb na poczenie z mikroproce sorem serii 51 w wersji z wewntrzn pamici programu. Jak wida z rysunku, do dziaania nie s potrzebne adne dodatkowe ukady sterujce czy dekoder adresw. Dziki wspomnianej wczeniej kompatybilnej z 8051, magistrali adresowejdanych ukad SA9203 widziany jest przez procesor jako 256 komrek w zewntrznej pa mici danych, do ktrej procesor odwouje si za porednictwem roz kazw:
Rys.7 Rejestr konfiguracyjny IOCR.

portw PB...PF, zaczanie wewntrznych rezystorw podcigajcych w trybie wejcia, oraz okrela polaryzacj sygnau STB (patrz rys.7). Jak wspomniaem wczeniej wszystkie wyprowadzenia portw ukadu SA9203 posiadaj wbudowane rezystory podcigajce pin portu kiedy ten pracuje jako wejcie. Zwalnia to uytkownika od stosowania dodatkowych elementw rezystancyjnych w niektrych aplikacjach. Rezystory te mog by uaktywnione lub wyczone oddzielnie dla kadego z portw PA...PF Bit IOCR.2 definiuje polaryzacj sygnau STB (strobe) ktry zatrzas kuje dan w porcie A (lub wybranych jego pinach) kiedy ten pracuje ja ko wejcie. W przypadku ustawienia bitu na 0, dane zatrzaskiwane s podczas opadajcego zbocza sygnau STB, gdy bit = 1, podczas nara stajcego zbocza sygnau. PAMR rejestr trybu adresowania. Zgodnie z rys.8 ustawienie lub wy zerowanie odpowiedniego bitu w tym rejestrze pozwala na zmian try bu adresowania poszczeglnych portw A...F, aktywacj oraz polary zacj sygnau zgoszenia przerwania INT. INT wyjcie zgoszenia przerwania w przypadku za trzanicia danej w porcie A po nadejciu sygnau STB. Aktywacja pinu nastpuje po odpowiednim ustawie niu bitu PAMR.1. Polaryza cja zgoszenia przerwania u stalana jest poprzez bit PAMR.0. RST podanie wysokiego poziomu na to wejcie rese tuje cay ukad. Zawarto wszystkich rejestrw zosta je wyzerowana. Na stpstwem tego jest: wszystkie piny portw PA...PF ustawione zostaj jako wejcia wejcia portu A pracuj jako transparentne rezystory podcigajce s uaktywnione we wszy stkich portach wyjcie przerwania jest nieaktywne adresowanie portw u stalone zostaje jako bajtowe Aktywny (wysoki) stan sygnau RST powinien trwa minimum 100ns.

MOVX @DPTR, A oraz MOVX A, @DPTR

podczas zapisu do portu przy odczycie z portu

Tak naprawd, to moliwe jest zaadresowanie (zgodnie z rys.3) tylko do adresu 73h, pod ktrym znajduje si rejestr PAMR. Pozostae komr ki s niewykorzystane. Kto moe zapyta, po co w ukadzie SA9203 potrzebna jest linia adresowa A8 ? Ot istnieje wersja ukadu SA9202, kompatybilna z omawianym SA9203, lecz posiadajca dodatkowo w swojej strukturze 256 bajtw statycznej pamici RAM. Tak wic zaad resowanie ukadu SA9202 w zakresie 100h...1FFh (linia A8=1) powodu je dostp do tej wanie pamici. Jeeli kto z czytelnikw bdzie mia okazj naby t wersj ukadu, zachcam do zakupu i eksperymentw. Dodatkowa pami RAM idealnie moe nadawa si do przechowywa nia danych podczas wykonywania jakiego programu. Zintegrowanie jej w ukadzie portu SA9202 zwalnia od stosowania dodatkowej kostki SRAM, co ma wpyw na wielko i skomplikowanie obwodu drukowa nego.

Rys.9 Wsppraca ukadu SA9203 z kontrolerem 87C51/89C51

ELEKTRONIKA DLA WSZYSTKICH 12/98

39

Te to potrafisz
i tak dalej a do portu PF gdzie deklaracje bd wyglday jak nastpuje: BITPF0 EQU BITPF7 EQU BC28h BC2Fh

Teraz mona zabra si do programowania ukadu. W na szym pierwszym przykadzie zaprogramujemy ukad SA9203 do pracy w trybie wy jcia wszystkie porty PA...PF ustawimy jako wyjcia. Najpierw zajmiemy si reje strem PACR konfiguracji por tu PA. Poniewa port PA ma pracowa jako wyjcie zgodnie z rys.5 naley ustawi wszy stkie bity tego rejestru, tak wic piszemy instrukcje: MOV A, #0FFh MOV DPTR, #PACR MOVX @DPTR, A Poniewa port PA ma praco wa jako wyjcie programowa nie rejestru PAICR jest zbdne. Pora teraz na rejestr IOCR, gdzie naley ustawi bity 7...3 tak aby porty PB...PF pracowa y jako wyjcia. Pozostae bity rejestru s w trybie wyjcia nieuywane. Tak wic zapiszemy: MOV A, #11111000b MOV DPTR, #IOCR MOVX @DPTR, A Jako ostatni zostaje rejestr PAMR. Ustawmy adresowanie portw PA...PF jako bitowe, co pozwoli na oddzielne sterowanie kady pinem ukadu. Dodatkowo, w przypadku, kiedy wyjcie przerwania INT ukadu SA9203 poczone bdzie z jednym z wej procesora INT0 lub INT1 (poprzez jumper JP1) dobrze jest profilaktycznie ustawi polaryzacj sygnau zgoszenia przerwania, mimo i w naszym przykadzie ta fun kcja nie bdzie wykorzystywana. Mona to zrobi ustawiajc bit 0 w re jestrze PAMR. Bit 1 rejestru powinien by wyzerowany funkcja prze rwania jest nieaktywna. Instrukcja konfigurujca rejestr bdzie nastpujca: MOV A, #11111101b MOV DPTR, #PAMR MOVX @DPTR, A I to ju wszystko. Teraz aby np. ustawi poziom wysoki na kocw ce 3 portu PC naley wykona instrukcje: MOV DPTR, #BITPC3 MOV A, #1 MOVX @DPTR, A ;adres pinu PC3 ;wpisanie jedynki do bitu portu

Rys.10 Sposb na doczenie SA9203 do komputerka edukacyjnego.

W przypadku chci doczenia ukadu SA9203 do komputerka AVT 2250 najlepiej posuy si schematem z rys.10. W ukadzie oprcz SA9203 zastosowano dodatkowe dekodowanie adresw dziki wykorzystaniu dekodera 1 z 8miu typu 74HCT138 (74LS138). Uycie tego ukadu wydao mi si uzasadnione, a to ze wzgldu na poprzednio prezentowane przykady. Jak zapewne pami tasz wszystkie one korzystay z sygnau magistrali komputerka IO4. Po niewa moesz zastosowa ich kilka za jednym razem, naleao zasto sowa dodatkowe dekodowanie adresw, tak aby podzieli obszar ad resowy dekodowany przez sygna IO4 na kilka mniejszych (w tym przy padku na osiem 1kbajtowych). W naszym przykadzie z rys.10 ukad SA9203 dekodowany jest przez sygna Y7 kostki U3, co odpowiada ad resom BC00h...BFFFh. Poniewa na zcze BUS_2250 komputerka nie wyprowadzono sygnaw ALE oraz RESET (polaryzacja dodatnia), nale y te dwa poczenia wykona bezporednio czc te kocwki kawa kiem drutu. Aby teraz dobra si do ukadu SA9203 naley w programie jego obsugi zadeklarowa nastpujco: SA9203 EQU BC00h

Ze wzgldu na to e ukad zawiera kilka rejestrw wewntrznych, ktre opisaem wczeniej w programie warto od razu zapisa kolejne deklaracje: PORTA PORTB PORTC PORTD PORTE PORTF PACR PAICR IOCR PAMR EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU BC00h BC08h BC10h BC18h BC20h BC28h BC70h BC71h BC72h BC73h ;adres portu PA ;adres portu PB ;adres portu PC ;adres portu PD ;adres portu PE ;adres portu PF ;adres rejestru kontrolnego portu PA ;adres rej. konfiguracji portu PA ;adres rej. konfiguracji wejwyj ;adres rejestru wyboru trybu adresowania

Mona od razu zadeklarowa adresy poszczeglnych bitw portw, ktre przydadz si w trybie adresowania bitowego, np. tak: BITPA0 EQU BITPA1 EQU BITPA2 EQU BITPA3 EQU BITPA4 EQU BITPA5 EQU BITPA6 EQU BITPA7 EQU BITPB0 EQU BITPB7 EQU BC00h BC01h BC02h BC03h BC04h BC05h BC06h BC07h BC08h BC0Fh ;adres pinu 10 ukadu (PA0)

Podobnie mona postpi z kadym innym portem. W drugim przykadzie wykorzystamy generowanie sygnau przerwa nia przez ukad SA9203 przy odbiorze danej z portu PA, kiedy to ze wntrzne urzdzenie chce przesa dan do tego portu. Sytuacj t ilu struje rys.11 Sytuacja na rysunku przypomina przykad przedstawiony w poprze dnim odcinku klasy mikroprocesorowej, kiedy to omawiaem ukad 8255 i jego wspprac z drukark. Wracajmy jednak do naszego przy kadu. Do prawidowej transmisji danych z potwierdzeniem wykorzysta my: port PA do transmisji danych lini STB do potwierdzania zapisu danych do PA przez urzdzenie ze wntrzne lini PB0 do potwierdzenie odbioru danych przez procesor z SA9203 lini INT ukadu SA9203 do zgoszenia przerwania Przyjrzyjmy si przebiegom z rys.11. Urzdzenie zewntrzne wysta wia na linie portu PA dan. Potwierdza to przez podanie stanu niskiego na lini STROBE ukadu SA9203. Ukad ten zapamituje dan w we wntrznym rejestrze PA. Nastpnie SA9203 zgasza przerwanie do pro

;adres pinu 17 ukadu (PA7)

40

ELEKTRONIKA DLA WSZYSTKICH 12/98

Te to potrafisz
POP Acc ;odtworzenie rejestrw DPTR i Acc Biosa RETI ;patrz odcinek klasy o przerwaniach Sekwencja inicjujca procesor powinna mie posta: init_proc: MOV SETB SETB CLR MOV CLR MOVX RET vectors, #80h ;ustawienie offsetu tabeli przerwa w ext. RAM EX1 ;zezwolenie na INT1 EA ;odblokowanie przerwa F0 ;wyzerowanie znacznika zgoszenia DPTR, #BITPB0 A @DPTR, A;ustawienie pinu PB0 w stan niski

Nastpnie moemy zdefiniowa procedur, ktra czeka na znak a po odbiorze aduje go do akumulatora: odbierz_znak: jnb znaku MOV MOVX PUSH MOV MOV MOVX NOP NOP
Rys.11 Transmisja danych z urzdzenia zewntrznego do SA9203 z po twierdzeniem.

F0, odbierz_znak

;czekanie na pojawienie si

DPTR, #PORTA A, @DPTR ;odczyt znaku z portu PA SA9203 A ;przechowanie znaku na stosie DPTR, #BITPB0 A, #1 @DPTR, A ;ACK = 1, potwierdzenie odbioru ;instrukcje NOP w celu opnienia ;sygnau ACK = 0, ilo zalena od ;tego jak dugo ma mie ACK, aby by ;prawidowo odczytanym przez nadajnik A @DPTR, A ; ACK = 0, zakoczenie odbioru A ;odtworzenie akumulatora F0 ;i jeszcze wyzerowanie znacznika ;zakoczenie procedury i powrt

cesor wystawiajc poziom niski na lini INT. Procesor w procedurze ob sugi przerwania odczytuje dan z portu PA adresujc ukad SA9203 w sposb pokazany wczeniej. Po odbiorze danej procesor powinien poin formowa urzdzenie zewntrzne nadajnik o gotowoci na odbir ko lejnej danej. W tym celu korzystajc z linii portu PB0 procesor wysta wiajc na stan wysoki potwierdza odbir (ACK) znaku i gotowo na nastpny. Zaprogramujmy wic ukad do pracy w tym trybie. 1. Najpierw konfigurujemy rejestr PACR: CLR A ;PA jako wejcia MOV DPTR, #PACR MOVX @DPTR, A 2. Teraz rejestr PAICR: MOV A, #0FFh MOV DPTR, #PAICR MOVX @DPTR, A ;dana zatrzaskiwana sygnaem STB

NOP NOP CLR MOVX POP CLR RET

Teraz tak stworzone procedury mona uy w programie: CPU 8052.def include const.inc include bios.inc ORG LJMP ORG INT1_proc: SETB POP POP POP RETI init_proc: RET odbierz_znak: ....... RET START: LCALL LCALL ..... END Wnikliwy Czytelnik z pewnoci zauway, e procedur odbioru zna ku z portu SA9203 mona umieci w ciele procedury obsugi przerwa nia, tak, aby po zgoszeniu przerwania nowy znak by odczytany prawid owo. Wtedy procedura ta moe wyglda nastpujco: INT1_proc: MOV MOVX MOV MOV MOV MOVX NOP DPTR, #PORTA A, @DPTR BUFOR, A DPTR, #BITPB0 A, #1 @DPTR, A 8000h START 8013h F0 DPL DPH Acc ;ustawienie znacznika o zgoszeniu ;odtworzenie rejestrw DPTR i Acc Biosa

3. Nastpnie rejestr IOCR: MOV A, #10000010b ;port PB wyj., PC...PF wej. ;polaryzacja STB ujemna ;rezystory podcigajce PA nieaktywne MOV DPTR, #IOCR MOVX @DPTR, A 4. Pozosta jeszcze rejestr PAMR MOV A, #10000011b ;port PB adresowany bitowo ;port PA adresowany bajtowo ;zezwolenie na INT ;polaryzacja INT ujemna MOV DPTR, #PAMR MOVX @DPTR, A I gotowe, ukad SA9203 jest gotowy do odbioru danych z potwierdze niem. Pozostaje jeszcze tylko ustawi odpowiednio procesor tak aby, u aktywni wybrane jumperem JP1 (rys.10) przerwanie INT0/1. Poniej przedstawi przykad kiedy do zgoszenia przerwania wykorzystano lini INT1. W listingu dodatkowo bdziemy wykorzystywa flag F0 rejestru PSW procesora do detekcji nadejcia znaku w przerwaniu. Bit F0 bdzie po prostu ustawiany przez procedur obsugi przerwania jeeli zostanie ono zgoszone. A zerowany po odbiorze znaku. Przed sek wencj inicjujca zapiszmy wic procedur obsugi przerwania INT1: INT1_proc: SETB POP POP F0 DPL DPH ;ustawienie znacznika o zgoszeniu

;tu wstawi ciao procedury j/w ;tu wstawi procedur j/w

init_proc ;inicjacja portw i ukadu przerwa odbierz_znak ;wywoanie procedury odbioru znaku ;dalsze instrukcje dziajce na odebranym znaku

;odczyt znaku z portu PA SA9203 ;zapisanie znaku w buforze ;ACK = odbioru 1, potwierdzenie

ELEKTRONIKA DLA WSZYSTKICH 12/98

41

Te to potrafisz
NOP CLR MOVX SETB POP A @DPTR, A F0 DPH Acc ;instrukcje opnienia NOP w celu ; ACK = 0, zakoczenie odbioru ;ustawienie znacznika o odbiorze znaku ;odtworzenie reje Najciekawsze przedstawi w kolejnym odcinku klasy mikroprocesoro wej. W jednym z najbliszych odcinkw naszego kursu zapoznam Was z moliwociami jakie odkrywaj procesory serii 51 z wbudowan pami ci programu, o sposobach ich uywania, programowania. Poka jak w do prosty i wygodny sposb, korzystajc z kilku dodatkowych u rzdze peryferyjnych, szybko tworzy programy, testowa je a na stpnie zapisywa w strukturze procesorw np. 87C51, czy 89C51. Wszystko to z wykorzystaniem i do zastosowania w komputerku e dukacyjnym AVT2250. Tak wic do zobaczenia.

DPL POP POP strw DPTR i Acc Biosa RETI

Sawomir Surowiski

W tym przypadku pojawia si tajemnicza zmienna BUFOR ktra jest niczym innym jak zdefiniowanym wczeniej adresem w wewntrznej pamici RAM procesora np. BUFOR EQU 7Fh ;adres komrki przecho wujcej bajt z SA9203

LEKCJA 12
Ostatnim razem pozostawiem Was z problemem wydrukowania za wartoci pamici ext. RAM z komputerka w posaci jak pokazano poniej. Wydruk mia przedstawia zawarto pamici o podanym wczeniej z klawiatury komputerka zakresie adresw. Poniej przedstawiam li sting gotowej procedury sucej realizacji tego zamierzenia. (patrz Listing 1)

Naley zwrci jednak uwag na pewne niedogodnoci przedstawio nej wyej procedury. Po pierwsze nie jest wskazana umieszczanie zbyt wielu instrukcji NOP ze wzgldu na to e wydua to procedur prze rwania, i moe spowodowa zakcenia w pra cy innych przerwa, np. od wywietlacza, kt Adres Dana Hex Dana ASCII ry moe zacz migota. Po drugie ze wzgldu (2600h) 0E 57 31 C0 50 9A E2 36 7D 0E 9A DF 35 7D 0E 80 .W1.P..6}...5}.. na to e potwierdzenie odbioru (ACK) jest ge (2610h) 3E CA 8A 00 74 06 C6 46 FB 01 EB 04 C6 46 FB 02 >...t..F.....F.. nerowane w procedurze przerwania take, (2620h) 8A 46 FB 50 B0 0F 50 9A AA 10 CF 0C 8D 7E FB 16 .F.P..P......~.. moe si zdarzy, e nie zdymy odebra zna (2630h) 57 B0 02 50 E8 05 F8 8D 7E FC 16 57 9A 1F 0C CF W..P....~..W.... ku z komrki BUFOR, zanim nadejdzie kolejny (2640h) 0C 80 3E 7E 89 00 74 07 C6 06 7E 89 00 EB 17 8A ..>~..t...~..... bajt informacji z urzdzenia zewntrznego, kt (2650h) 46 FB 3C 01 75 07 C6 06 CA 8A 01 EB 09 3C 02 75 F.<.u........<.u re po potwierdzeniu zapisze now dan w (2660h) 05 C6 06 CA 8A 00 89 EC 5D C3 55 89 E5 31 C0 9A ........].U..1.. SA9203. W tym celu warto stworzy w progra (2670h) 30 05 7D 0E BF 98 89 1E 57 B8 B7 00 50 9A E3 37 0.}.....W...P..7 mie struktur tablic w RAM ktrej zada (2680h) 7D 0E BF 98 89 1E 57 BF 18 8A 1E 57 9A 96 38 7D }.....W....W..8} (2690h) 0E 83 C4 04 BF 98 89 1E 57 9A 5B 38 7D 0E 9A 47 ........W.[8}..G niem byoby przechowywanie danych odbiera (26A0h) 0C CF 0C B0 07 50 E8 8F FA 31 C0 9A 16 01 7D 0E .....P...1....}. nych z ukadu SA9203. Trzeba by jednak dodat (26B0h) 5D C3 00 55 89 E5 31 C0 9A 30 05 7D 0E 80 3E C8 ]..U..1..0.}..>. kowo uy take wskanika tej tablicy, ktry o (26C0h) 8A 00 B0 00 75 01 40 A2 C8 8A BF 94 89 1E 57 9A ....u. .......W. krelaby miejsce zapisu nowego odebranego (26D0h) 1F 0C CF 0C C6 06 7B 89 00 C6 06 7E 89 01 C6 06 ......{....~.... znaku i odczyt ostatnio odebranego. Proponuj (26E0h) 52 90 FF B0 00 50 BF 32 0C 0E 57 E8 7C FB 5D C3 R....P.2..W.|.]. powysze zadanie jako prac domow. Z pe (26F0h) 55 89 E5 31 C0 9A 30 05 7D 0E A0 CB 8A 30 E4 48 U..1..0.}....0.H wnoci temat jest ciekawy a rozwiza kilka.

Listing 1 1 2 CPU 8052.def

Zbior: const.inc Zbior: bios.inc Zbior: port8255.inc 1 ;********************************************** 2 ;Deklaracja adresow portow ukladu 8255 3 ;********************************************** 4 5 A000 IO_PA equ A000h 6 A001 IO_PB equ A001h 7 A002 IO_PC equ A002h 8 A003 IO_CTRL equ A003h 9 Zbior: dump.s03 5 6 ;Zdefiniowane znaki sterujace drukarka 7 000D CR equ 13 ;Carriage Return znak powrotu glowicy 8 000A LF equ 10 ;Line Feed znak przesuwu linii na nastepna 9 000C FF equ 12 ;Form Feed wysuniecie strony z drukarki 10 11 8000 org 8000h 12 8000 028200 ljmp START 13 14 Zbior: printer.inc 1 ;************************** 2 ;Procedury obslugi drukarki 3 ;************************** 4 5 ;********** 6 ;* PRNACC * Wysyla znak z akumulatora na drukarke 7 ;**********

42

ELEKTRONIKA DLA WSZYSTKICH 12/98

Te to potrafisz
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 8003 C083 prnAcc: 8005 C082 8007 C0E0 8009 90A000 chkprn: 800C E0 800D 540F 800F 6409 8011 6017 8013 prnerror: 8013 120274 8016 757879 8019 757950 801C 757A50 801F 1202C5 8022 D3 8023 D0E0 8025 D082 exit: 8027 D083 8029 22 802A D0E0 prnok: 802C 90A001 802F F0 8030 90A000 8033 E0 wait: 8034 5480 8036 60FB 8038 C3 8039 80EA push push push mov movx anl xrl jz lcall mov mov mov lcall setb pop pop pop ret pop mov movx mov movx anl jz clr sjmp DPH DPL Acc DPTR,#IO_PA A, DPTR A,#0Fh A,#1001b prnok CLS DL1,#_E DL2,#_r DL3,#_r CONIN C Acc DPL DPH Acc DPTR,#IO_PB DPTR,A DPTR,#IO_PA A, DPTR A,#80h wait C exit

;odczyta stanu drukarki ;czy drukarka gotowa ? ;tak to drukuj

;czekanie na dowolny klawisz ;ustawienie znacznika bledu (C=1) ;i zakonczenie drukowania ;od tej instrukcji gdy OK ! ;wyslanie znaku do drukarki ;odczyt stanu drukarki ;czy mozna wyslac nastepny znak ? ;nie to czekaj ;zakoczenie drukowania z info OK !

;********** ;* PRNTXT * Wysyla tekst ASCIIZ na drukarke (dane: mov DPTR,#tekst) ;********** 803B RNTXT: 803B E0 movx A, DPTR ;pobranie znaku z bufora 803C B40001 cjne A,#0,ok1 ;czy znak konca tekstu ? 803F 22 ret ;tak to koniec procedury 8040 128003 k1: lcall PRNACC ;nie to wydrukuj znak 8043 5001 jnc ok2 ;czy blad drukowania ? 8045 22 ret ;tak to zakoncz procedure 8046 A3 k2: inc DPTR ;nie to nastepny znak 8047 80F2 sjmp prntxt 8049 22 ret ;*********** ;* PRNINIT * Inicjuje port 8255 na potrzeby drukowania ;*********** 804A PRNINIT: 804A 90A003 mov DPTR,#IO_CTRL 804D 7495 mov A,#95h ;inicjacja rejeswtru kontrolnego 8255 804F F0 movx DPTR,A 8050 7405 mov A,#05h ;inicjacja przerzutnika INTRB 8255 8052 F0 movx DPTR,A 8053 90A002 mov DPTR,#IO_PC 8056 7450 mov A,#01010000b ;SELIN=1, RESET=0 (inicjacja), AUTOFD=1 8058 F0 movx DPTR,A 8059 7470 mov A,#01110000b ;SELIN=1, RESET=1 (praca), AUTOFD=1 805B F0 movx DPTR,A 805C 22 ret

Zbior: dump.s03 16 17 ;******************************************************** 18 ;Procedura drukowania zawarto pamici w hexa PRNDUMP * 19 ;******************************************************** 20 805D PRNDUMP: 21 805D 120274 lcall CLS ;wyczysz wyswietlacz 22 8060 75785E mov DL1, #_d ;literka d na DL1 23 8063 75F005 mov B,#5 ;parametr procedury GETDPTR 24 8066 1203B9 lcall GETDPTR ;wczytaj poczatek obszaru do drukowania 25 8069 A983 mov R1,DPH ;i zapamietaj w R1.R2 26 806B AA82 mov R2,DPL 27 806D 75F005 mov B,#5 28 8070 1203B9 lcall GETDPTR ;wczytaj koniec obszaru 29 8073 AB83 mov R3,DPH ;i zapamietaj w R3.R4 30 8075 AC82 mov R4,DPL 31 32 8077 740D mov A,#CR 33 8079 128003 lcall PRNACC ;powrot glowicy do lewego marginesu 34 807C 908130 mov DPTR,#nagl 35 807F 12803B lcall PRNTXT ;wydrukowanie naglowka 36 37 8082 8983 mov DPH,R1 ;poczatek obszaru do DPTR 38 8084 8A82 mov DPL,R2 39 8086 astrek: ;kolejny rekord 16 bajtow

ELEKTRONIKA DLA WSZYSTKICH 12/98

43

Te to potrafisz
40 8086 7428 41 8088 128003 42 808B E583 43 808D 120235 44 8090 128003 45 8093 E5F0 46 8095 128003 47 8098 E582 48 809A 120235 49 809D 128003 50 80A0 E5F0 51 80A2 128003 52 80A5 7468 53 80A7 128003 54 80AA 7429 55 80AC 128003 56 80AF 12811D 57 58 80B2 7D10 59 80B4 E0 nastb: 60 80B5 120235 ;DC BA 61 80B8 128003 62 80BB E5F0 63 80BD 128003 64 80C0 7420 65 80C2 128003 66 80C5 A3 67 80C6 E583 68 80C8 8BF0 69 80CA B5F009 70 80CD E582 71 80CF 8CF0 72 80D1 B5F002 73 80D4 8002 74 80D6 DDDC ok3: 75 76 80D8 12811D asciz: 77 80DB 8983 78 80DD 8A82 79 80DF 7D10 80 80E1 E0 nastc: 81 80E2 24E0 82 80E4 4004 83 80E6 742E 84 80E8 8001 85 80EA E0 znakok: 86 80EB 128003 druk: mov lcall mov lcall lcall mov lcall mov lcall lcall mov lcall mov lcall mov lcall lcall mov movx lcall lcall mov lcall mov lcall inc mov mov cjne mov mov cjne sjmp djnz lcall mov mov mov movx add jc mov sjmp movx lcall A,#( PRNACC A,DPH HEXASCII PRNACC A,B PRNACC A,DPL HEXASCII PRNACC A,B PRNACC A,#h PRNACC A,#) PRNACC prnspc

;wydrukowanie znaku |

R5,#16 ;16 bajtow do wydrukowania A, DPTR ;w postaci np.: HEXASCII ;12 45 3A 5B 74 09 BC 5A 4F 1E 12 42 54 76 PRNACC A,B PRNACC ;dana w postaci XX A,#20h ;spacja PRNACC DPTR A,DPH ;sprawdzenie czy B,R3 ;aby nie koniec adresu A,B,ok3 ;do drukowania A,DPL B,R4 A,B,ok3 asciz ;to gdy koniec rekordu 16 bajtow R5,nastb ;to gdy nie skok na nastepny bajt prnspc DPH,R1 DPL,R2 R5,#16 A, DPTR A,#0E0h znakok A,#. druk A, DPTR PRNACC ; ..*...%....3.a. ;16 bajtow do wydrukowania ;sprawdzenie czy znak jest drukowalny ;tzn. czy jego kod jest > 13 ;jezeli nie to drukuj kropke zamiast znaku ;jezeli tak to drukuj znak

44

ELEKTRONIKA DLA WSZYSTKICH 12/98

Te to potrafisz
87 80EE A3 inc DPTR 88 80EF E583 mov A,DPH 89 80F1 8BF0 mov B,R3 90 80F3 B5F009 cjne A,B,ok4 ;sprawdzenie czy aby nie koniec adresu 91 80F6 E582 mov A,DPL 92 80F8 8CF0 mov B,R4 93 80FA B5F002 cjne A,B,ok4 94 80FD 8013 sjmp finix 95 80FF DDE0 ok4: djnz R5,nastc 96 8101 740D mov A,#CR 97 8103 128003 lcall PRNACC 98 8106 740A mov A,#LF 99 8108 128003 lcall PRNACC ;wydrukowanie konca linii 100 810B A983 mov R1,DPH 101 810D AA82 mov R2,DPL 102 810F 028086 ljmp nastrek 103 8112 740D finix: mov A,#CR 104 8114 128003 lcall PRNACC 105 8117 740A mov A,#LF 106 8119 128003 lcall PRNACC ;koniec linii 107 811C 22 ret 108 811D C083 prnspc: push DPH 109 811F C082 push DPL 110 8121 90812C mov DPTR,#space 111 8124 12803B lcall PRNTXT 112 8127 D082 pop DPL 113 8129 D083 pop DPH 114 812B 22 ret 115 812C 207C2000 space db 20h,|,20h,0 116 8130 20416472 8134 65732020 8138 20202020 813C 20202020 8140 20202020 8144 20202020 8148 20204461 814C 6E652048 8150 6578 nagl db Adres Dane Hex 117 8152 20202020 8156 20202020 815A 20202020 815E 20202020 8162 20202020 8166 20202020 816A 20202020 816E 2044616E 8172 65204153 8176 4349490D 817A 0A db Dane ASCII,13,10 118 817B 2D2D2D2D 817F 2D2D2D2D 8183 2D2D2D2D 8187 2D2D2D2D 818B 2D2D2D2D 818F 2D2D2D2D 8193 2D2D2D2D 8197 2D2D2D2D 819B 2D2D2D2D 819F 2D2D db 119 81A1 2D2D2D2D 81A5 2D2D2D2D 81A9 2D2D2D2D 81AD 2D2D2D2D 81B1 2D2D2D2D 81B5 2D2D2D2D 81B9 2D2D2D2D 81BD 2D2D2D2D 81C1 2D2D2D2D 81C5 2D2D2D0D 81C9 0A00 db ,13,10,0 120 121 ;******************************************************** 122 8200 org 8200h ;tak dla czytelnosci 123 ;******************************************************** 124 8200 START: 125 8200 12804A lcall PRNINIT ;zainicjuj 8255 na potrzeby drukowania 126 8203 12805D lcall PRNDUMP ;wywolanie procedury 127 8206 80FE stop: sjmp stop ;wcisnij klawisz M(onitor) 128 129 8208 END Kompilacja zakonczona pomyslnie ! Zbior: dump.s03 , 467 bajt(ow), 0.2 sekund(y).

ELEKTRONIKA DLA WSZYSTKICH 12/98

45

Te to potrafisz
Wikszo komentarzy zawarem po redniku w listingu programu. Po wczeniu do kompilacji zbioru PORT8255.INC zawierajcego de klaracje portw ukadu 8255 rozpoczyna si waciwy kod programu. Deklaracja ORG 8000h i 82 sprawdzany jest kod znaku. Jeeli kod jest < 14 to znak naley do tzw. znakw sterujcych drukarki i nie powinien by drukowany, a za miast niego wstawiana jest w linii 83 kropka. Reszta znakw o kodach 14...255 jest drukowana normalnie. W tym miejscu jeeli kto chce za wzi bardziej zbir drukowanych znakw moe w linii 81 wstawi za miast wartoci 0E0h wiksz np. 20h, wtedy bd drukowane znaki ASCII od spacji w gr. Reszta programu to po prostu inicjacja drukarki (linia 125) oraz spraw dzenie dziaania procedury drukowania obszaru (linia 126). Na kolejne popoudniowe zimowe wieczory proponuj nastpujce zadania: Dokona poprawek w programie przedstawionym w dzisiejszym ar tykule, a dotyczcym odbioru danych z SA9203 i umieszczania ich w bu forze o dugoci np. 128 bajtw, umieszczonym w wewn. RAM proce sora 80C52 (adresy: 80h...FFh). Wykorzysta rejestr R1 jako wskanik pocztku bufora (podpowied @R1) Zapisa sekwencj instrukcji programujcej ukad SA9203 w postaci: PA jako wejcie z potwierdzeniem PB jako wyjcie adresowany bitowo PC jako wyjcie adresowany bajtowo PD...PF jako wejcia adresowane bitowo z aktywnymi rezystorami podcigajcymi Rozwizania zada w kolejnym numerze EdW. Z okazji zbliajcych si wit, wszystkim entuzjastom techniki mikro procesorowej autor cyklu skada najserdeczniejsze yczenia dalszych sukcesw, korzyci a przede wszystkim satysfakcji z ujarzmiania tych arcyciekawych elementw elektronicznych, do ktrych z pewnoci na ley przyszo wspczesnej elektroniki. Do zobaczenia w Nowym Ro ku 1999!

powinna by w razie potrzeby zmieniona jeeli przewidujesz umie szczenie kodu programu w innym obszarze RAM komputerka. Po tej deklaracji doczam zbir PRINTER.INC zawierajcy procedury zdefiniowane i omwione w poprzednim odcinku klasy mikroproceso rowej czyli PRNINIT procedura inicjacji ukadu 8255 na potrzeby drukowania PRNACC procedura wysania znaku z akumulatora na drukark PRNTXT procedura wysania na drukark tekstu zakoczonego zna kiem 0 (zero) Kolejne linie to ju procedura drukowania danych z RAMu w postaci przedstawionej wczeniej czyli PRNDUMP. Rozpoczyna si ona zapa leniem na DL1 literki d w celu zaproszenia do wpisania z klawiatury komputerka adresu pocztkowego i kocowego obszaru ktry ma by wydrukowany. Dane te s zapamitywane w rejestrach R1.R2 i R3.R4 odpowiednio start i koniec obszaru. Dalej w liniach 34 i 35 drukowany jest nagwek czyli tekst spod ety kiety nagl: Potem to ju kolejne linie zawierajce adres pocztkowy (linie 40...56) rekordu 16 bajtw danych, nastpnie 16 bajtw z RAM w po staci HEX oddzielonych spacjami (linie 58...74), wreszcie te same dane wydrukowane zostaj w postaci znakw ASCII (linie: 76...95) i zako czone znakiem koca linii CRLF (linie: 96...99). Dodatkowo w liniach 81 Adres Dana Hex Dana ASCII

Sawomir Surowiski

46

ELEKTRONIKA DLA WSZYSTKICH 12/98

You might also like