Mikrokontrolery To takie proste calosc


Też to potrafisz
Też to potrafisz
Też to potrafisz
Też to potrafisz
Też to potrafisz
W€kilku poprzednich numerach EdW
miałeś okazję dowiedzieć się wielu cie-
kawych informacji na temat układów
mikroprocesorowych, czyli w€skrócie
 mikroprocesorów . Wiesz już że te,
dość zÅ‚ożone w€budowie, elementy elek-
Mikrokontrolery?
troniczne stosowane sÄ… powszechnie
w€komputerach klasy PC. W€nie tak od-
ległej przeszłości wielu użytkowników
sędziwego dziś Spektrusia, Commodora
czy Atari często nie zdawało sobie spra-
wy, że jest posiadaczem mniej czy bar-
dziej skomplikowanego układu mikropro-
cesorowego. Jednak mikroprocesory nie To takie proste...
zostały wynalezione jedynie po to, aby
zadowalać coraz bardziej wymagającego
użytkownika, żądnego maszyn -€coraz
szybciej obrabiajÄ…cych dane, chcÄ…cego
mieć dostęp do multimedialnych gier zaj-
mujących niebotyczne ilości miejsca na
dysku twardym komputera domowego.
Od samego poczÄ…tku inteligentnych
układów cyfrowych na rynku elektronicz-
nym istniała grupa dość prostych, na
pierwszy rzut oka, mikroprocesorów,
których ewolucja nie potraktowała tak
ostro, jak to miaÅ‚o miejsce w€wypadku
rodziny 8086. Jeżeli nie wiesz, co kryje
się pod tą nazwą, przypomnę ci, że ukła-
dy 8086 to prawdziwi  pradziadowie
procesorów Pentium obecnie masowo
stosowanych w€komputerach PC.
Wspomniane układy, będące niejako
potrafił przetwarzać komendy wydawa- Widać, że wszystkie urządzenia pery-
oddzielnÄ… gaÅ‚Ä™ziÄ… w€rodzinie ukÅ‚adów
ne przez programistÄ™; pamięć -€w€której feryjne znajdujÄ…ce siÄ™  na zewnÄ…trz
cyfrowych wielkiej skali integracji (po- mógÅ‚ przechowywać wyniki obliczeÅ„ mikroprocesora, w€przypadku mikro-
dobnie jak  maÅ‚py w€teorii Darwina),
oraz ukÅ‚ady do komunikacji ze Å›wiatem komputera zostaÅ‚y umieszczone w€jed-
przetrwaÅ‚y w€niezmiennej postaci od kil- zewnÄ™trznym -€czyli tzw. porty .€Tak fun- nym ukÅ‚adzie scalonym. I€w€tym tkwi
kunastu lat. Co mogło być powodem te- kcjonalna budowa oraz, co miało nie ma- potęga naszych prostych mikrokompute-
go stanu rzeczy? Otóż dziÄ™ki architektu- Å‚e znaczenie,€niska cena mikrokontrole- rów.
rze, czyli budowie wewnętrznej tych
ra, utorowaÅ‚a mu drogÄ™ do zastosowaÅ„ W€naszych dalszych rozważaniach,
ukÅ‚adów, okazaÅ‚o siÄ™ możliwe zastoso- praktycznie wszÄ™dzie. pomimo że mowa bÄ™dzie o€mikrokompu-
wanie ich nie tylko w€specjalizowanym
Rysunek 1
Rysunek 1
Rysunek 1€obrazuje różnicÄ™ miÄ™dzy terach jednoukÅ‚adowych ,€bÄ™dziemy za-
Rysunek 1
Rysunek 1
sprzęcie komputerowym. Głównym ryn-  mikroprocesorem a  mikrokompute- miennie używać określeń  mikrokontro-
kiem zbytu okazali się producenci różne- rem (mikrokontrolerem, jak kto woli). ler lub nawet  mikroprocesor . Zapa-
go rodzaju sprzętu gospodarstwa domo-
wego, od ekspresów do kawy począw-
szy, poprzez sprzęt radiowo-telewizyjny,
AGD, na motoryzacji skończywszy.
Przy okazji lektury artykułów w€EdW
na temat mikroprocesora dowiedziałeś
się, że sam mikroprocesor to nie wszys-
tko. Nasz na pozór inteligentny układ cyf-
rowy bez dołączenia kilku dodatkowych
elementów zewnętrznych: zegara, pa-
mięci, układów wejścia/wyjścia (I/O) po-
trafi niewiele.
I€wtedy ktoÅ› wpadÅ‚ na pomysÅ‚
umieszczenia samego mikroprocesora
z€wymienionymi ukÅ‚adami peryferyjnymi
z€jednym ukÅ‚adzie scalonym. Tak po-
wstaÅ‚ pierwszy  mikrokontroler a€wÅ‚aÅ›-
ciwie  mikrokomputer jednoukładowy .
SÅ‚owo  mikrokomputer nie jest by-
najmniej na wyrost, bowiem stworzony
scalak byÅ‚ w€istocie kompletnym kompu- Rys.1. Mikroprocesor do pracy potrzebuje wielu dodatkowych ukÅ‚adów
terem tylko że w€maÅ‚ym formacie.
peryferyjnych, a typowy "mikrokontroler jednoukładowy" ma je wbudowane
W€wnÄ™trzu posiadaÅ‚ jakby rdzeÅ„, który
w strukturÄ™.
ELEKTRONIKA DLA WSZYSTKICH 4/97 43
Też to potrafisz
Też to potrafisz
Też to potrafisz
Też to potrafisz
Też to potrafisz
lonych czynnoÅ›ci w€zbudowanym przez Tak zamieniÅ‚em pÅ‚ytkÄ™ drukowanÄ… ze-
ciebie ukÅ‚adzie. gara o€wymiarach 20x30 cm z€kilkuna-
Będziesz mógł zrobić sobie swój stoma układami scalonymi (całość pobie-
wÅ‚asny MC1206, lecz np. z€25 alarmami, raÅ‚a ponad 0,5A prÄ…du) na zgrabny ukÅ‚ad
ze sterowaniem 4€przekaznikami, stope- mieszczÄ…cy siÄ™ w€niewielkiej i€estetycz-
rem.€W€przypÅ‚ywie nudy wykorzystasz nej obudowie wielkoÅ›ci dużego pudeÅ‚ka
ten sam ukÅ‚ad scalony -€mikrokontroler po zapaÅ‚kach. Rodzina i€ja byli dumni i€za-
i€zbudujesz z€pomocÄ… kilku dodatkowych dowoleni z€urzÄ…dzenia, które funkcjonal-
elementów dyskretnych miernik czÄ™s- noÅ›ciÄ… a€zarazem wielkoÅ›ciÄ… wyÅ›wietla-
totliwoÅ›ci lub licznik obrotów silnika do czy konkurowaÅ‚o z€tymi oferowanymi
twego samochodu. Wreszcie dajÄ…c w€Ã³wczesnych czasach na rynku.
upust narastajÄ…cej górze pomysłów wy- A€potem sprawy potoczyÅ‚y siÄ™ szy-
korzystasz mikrokontroler do budowy bko, po kolei na warsztat poszedł mój
przemyÅ›lnego systemu alarmowego ze pierwszy amplituner z€RADMORu,
zdalnym sterowaniem wszystkich funk- potem wymieniłem wnętrzności
cji w€twoim mieszkaniu: od gaszenia w€zegarze akwariowym, także nieod-
światła począwszy, na sygnalizacji prze- wracalnej modyfikacji uległa moja,
cieku wody lub gazu skoÅ„czywszy. z€trudem kupiona,  szuflada z€DIO-
Za trudne? Nic podobnego, znam to RY. I€wszystko spisuje siÄ™ do dziÅ›
z€autopsji. W€czasach szkoÅ‚y Å›redniej (la- dzieÅ„ znakomicie!
ta 80), nie miaÅ‚em zielonego pojÄ™cia Jeżeli w€tym momencie, drogi Czytel-
o€mikroprocesorach, nie mówiÄ…c o€tym, niku, pomyÅ›lisz: No tak, tylko mikropro-
że kupienie odpowiedniej kostki byÅ‚o nie cesor, a€co zrobić z€szufladÄ… niepotrzeb-
miÄ™taj to, żebyÅ› siÄ™ nie pomyliÅ‚. Ze tylko lada trudnoÅ›ciÄ… ale i... gÅ‚upotÄ… ze nych TTLi i€CMOSów?. Odpowiem ci:
względów stylistycznych będziemy uży- względu na kompletny brak jakiejkolwiek zatrzymaj je wszystkie. Układy mikropro-
wać nawet określenia  mikroprocesor , literatury na temat projektowania ukła- cesorowe nie kończą się na... mikropro-
choć nie jest to do koÅ„ca Å›cisÅ‚e. Ale dów z€wykorzystaniem mikroproceso- cesorach! Twoje zapasy z€pewnoÅ›ciÄ… zo-
przecież już wiesz, drogi Czytelniku, rów. MojÄ… pasjÄ… byÅ‚a technika cyfrowa stanÄ… z€pożytkiem wykorzystane, bar-
o€czym bÄ™dzie mowa. czyli najczęściej sklecanie z€wielu kostek dziej racjonalnie i€ekonomicznie zara-
I€tak niektóre z€mikrokontrolerów TTL czy CMOS jakiegoÅ› sensownie dzia- zem, w€wielu ukÅ‚adach elektronicznych
wyspecjalizowaÅ‚y siÄ™ w€konkretnych Å‚ajÄ…cego ukÅ‚adu, który czÄ™sto po dÅ‚uż- jako peryferia samego mikrokontrolera.
dziedzinach tak bardzo, że nie potrafiły szym lub krótszym okresie czasu odcho- Po tych kilku westchnięciach za mi-
znalezć miejsca gdzie indziej. Najprost- dził do lamusa, czyli krótko mówiąc koń- nioną epoką wróćmy jednak do konkre-
szym przykÅ‚adem niech bÄ™dzie zapo- czyÅ‚ w€kartonie z€innymi elektronicznymi tów na temat mikrokomputerów jedno-
mniany już układ zegara MC1206. Któż śmieciami, czekając, że może któraś układowych. Jak powiedziałem wcześ-
z€was nie próbowaÅ‚, a€przynajmniej nie z€kostek przyda siÄ™ w€przyszÅ‚oÅ›ci. niej, ukÅ‚ady te istniejÄ… do dziÅ›, a€ich róż-
sÅ‚yszaÅ‚ o€tym jakże popularnym, szcze- I€wtedy pojawiÅ‚ siÄ™ ON -€mikrokompu- norodność i€możliwoÅ›ci zastosowaÅ„ sÄ…
gólnie na giełdach elektronicznych, ukła- ter jednoukładowy. Oczarował mnie bar- nieograniczone.
dzie cyfrowym. Ten  zegarek był prze- dziej niż poczciwy PC XT, ze względu na Obecnie istnieje kilka rodzin tych ukła-
cież mikrokontrolerem, tylko potrafiÄ…- swojÄ… prostotÄ™ i€możliwość wielu zasto- dów, których producentami sÄ… najwiÄ™k-
cym wykonywać określone czynności sowań. sze koncerny elektroniczne na świecie.
zwiÄ…zane z€pomiarem czasu. UkÅ‚ad oscy-
latora miał, prawda? Pamięć wewnętrz-
ną (np. alarmu) też, wyjścia do sterowa-
nia wyświetlaczami LED (porty I/O) tak-
że, więc teraz mi chyba nie zarzucisz,
drogi Czytelniku, że ta kostka to nie
był prosty ale funkcjonalny mikrokontro-
ler.
Pomyśl teraz, czy mając te wszystkie
elementy składowe, zamiast np. wy-
świetlaczy LED nasza kostka MC12...
mogÅ‚aby pracować w€roli programatora
do pralki automatycznej. Niestety,
w€czasach PRLu nikt o€o€tym nie pomyÅ›-
laÅ‚, a€w€każdym razie nie doczekano siÄ™
wdrożenia takiego układu. Powstał nato-
miast prymitywny, elektromechaniczny
programator, którego kolejny, regenero-
wany egzemplarz pracuje w€20-letniej
pralce autora (używanej raczej ze wzglę-
dów sentymentalnych).
Przykładów może być wiele, my jed-
nak zajmiemy się jednoukładowcami
bardziej uniwersalnymi z€twego punktu
widzenia -€takimi ,€które bÄ™dziesz sam
mógł  zmusić do wykonywania okreś-
44 ELEKTRONIKA DLA WSZYSTKICH 4/97
Też to potrafisz
Też to potrafisz
Też to potrafisz
Też to potrafisz
Też to potrafisz
wiać podrÄ™czniki podejmujÄ…ce temat €czyli program. W€tym ostatnim przypad-
mikrokontrolerów 8051 i€pochodnych. ku czÄ™sto wewnÄ™trzna pamięć ROM jest
Wreszcie dostÄ™pność w€miarÄ™ tanich na- wtedy nieaktywna, lub nie ma jej wcale,
rzÄ™dzi do wspomagania projektowania ale o€tym pózniej.
przeważyła na ich korzyść. Tylko nie Na rynku istnieje kilka podstawowych
myÅ›l od razu, że w€cyklu poÅ›wiÄ™conym wersji procesora 8051. Wszystkie one
8051 będziemy cię zmuszać do kupowa- maja takie same wewnętrzne bloki funk-
nia komputera, programów czy nawet cjonalne, różnica polega na rodzaju pa-
książek. Nie! Do zaznajomienia siÄ™ miÄ™ci programu -€czyli pamiÄ™ci staÅ‚ej
z€możliwoÅ›ciami tych procesorów nie z€której mikrokontroler pobiera rozkazy.
będzie ci nawet potrzebny komputer! Jak wiesz, wśród pamięci stałych
Tak, to jest możliwe. ROM najbardziej popularne są pamięci
W€mikroprocesorowym Å›wiatku najbar- Przyjrzyjmy siÄ™ teraz, co zawiera typo- EPROM (programowane elektrycznie,
dziej znani producenci to: wy przedstawiciel rodziny MCS-51 -€mik- kasowane promieniami UV) głównie ze
- Microchip, ze swoją rodziną  jednouk- rokomputer jednoukładowy 8051 (rys. względu na ich cenę. Rzadziej stosowa-
Å‚adowców PIC... 2). Jak widać, w€jednej kostce zawarto ne sÄ… pamiÄ™ci ROM progamowane przez
- Motorola, lansujÄ…ca ukÅ‚ady 8,16 i€32- wszystkie niezbÄ™dne do pracy ukÅ‚ady, producenta lub pamiÄ™ci EPROM/OTP
bitowych mikrontrolerów jednoukÅ‚ado- toteż wystarczy dosÅ‚ownie kilka biernych (OTP - One Time Programmable) -€czyli
wych elementów zewnętrznych aby ruszyć do jednokrotnie programowane pamięci EP-
- Intel, produkujÄ…cy bodaj najbardziej pracy. Ale jakiej? O€tym dowiesz siÄ™ ROM (jednokrotnie -€bo nie ma możli-
popularne procesory serii 8051... w€kolejnej części naszego cyklu o€51-ce. woÅ›ci ich kasowania promieniami UV, co
- Zilog, producent nowoczesnych kont- W€jednym ukÅ‚adzie scalonym zawar- jest wynikiem braku okienka kwarcowe-
rolerów jednoukÅ‚adowych - nastÄ™pców to: go w€obudowie pamiÄ™ci).
poczciwego Z80 (wykorzystywanego - rdzeÅ„ mikroprocesora CPU z€8-bitowÄ… Ostatnio coraz wiÄ™kszÄ… popularność
w€produkcji sÄ™dziwych ZX81, ZX Spec- jednostkÄ… arytmetyczno-logicznÄ… (ALU), zdobywajÄ… pamiÄ™ci EEPROM, czyli pa-
trum) zdolna do wykonywania obliczeÅ„ na miÄ™ci które można programować jak i€ka-
- SGS-Thompson z rodziną ST62. liczbach 8-bitowych; sować elektrycznie. Przy stosowaniu
Istnieje także kilka innych firm, które - uniwersalne dwukierunkowe porty pamięci EEPROM odpada konieczność
na bazie licencji opracowaÅ‚y mutacje wejÅ›cia/wyjÅ›cia, do komunikowania stosowania kÅ‚opotliwych i€czÄ™sto dro-
tych procesorów, wyposażajÄ…c je w€wie- siÄ™ ze Å›wiatem zewnÄ™trznym po po- gich kasowników pamiÄ™ci EPROM (z
le dodatkowych bloków funkcjonalnych, przez zapisywanie do nich jak i€odczyt lampÄ… ultrafioletowÄ…, a€pamięć można
zachowując przy tym pełną kompatybil- przez nie danych cyfrowych (w niektó- programować wielokrotnie, nawet 100
ność ze swymi pierwowzorami. Do nich rych odmianach 8051 z wbudowanymi tysięcy razy.
z€pewnoÅ›ciÄ… należy zaliczyć Philipsa, Sie- przetwornikami A/C i C/A, także wiel- W€różnych wersjach procesorów
mesa oraz dwie amerykańskie firmy: kości analogowych; 8051 stosuje się różne, wymienione
Dallas oraz Atmel, które w€ostatnich la- - programowany szeregowy port trans- wczeÅ›niej typy pamiÄ™ci programu. Tak
tach zaskoczyÅ‚y projektantów kilkoma misji dwukierunkowej, który może np. wiÄ™c mamy mikrokontrolery w€wersji
udanymi wersjami najbardziej popular- sÅ‚użyć do komunikowania siÄ™ z€dowol- ROM, OTP, EPROM, wreszcie EEPROM
nych mikrokontrolerów jednoukłado- nym komputerem wyposażonym oraz wersje pozbawione pamięci progra-
wych. w€zÅ‚Ä…cze RS232C; mu w€ogóle, przystosowane do pracy
Do zastosowaÅ„ amatorskich (a nawet - dwa (w innych wersjach 3) uniwersal- z€doÅ‚Ä…czonÄ… z€zewnÄ…trz dowolnÄ… pamiÄ™-
w€peÅ‚ni profesjonalnych) najbardziej pra- ne liczniki/timery, do dowolnego wy- ciÄ… programu.
ktyczne sÄ… mikroprocesory 8-bitowe. korzystania; I€tak. w€zależnoÅ›ci od wbudowanej
Wersje 16 i€32 bitowe sÄ… po prostu za - ukÅ‚ad generowania przerwaÅ„ systemo- w€ukÅ‚ad mikrokontrolera 8051 pamiÄ™ci
dobre, a€także za drogie jak na potrzeby wych, zawierajÄ…cy także możliwość
domowego czy szkolnego laboratorium. generowania przerwań zewnętrznych;
Wśród popularnych  8-bitowców do - układ wewnętrznego oscylatora, który
niedawna prym wiodły Z80, niestety ze ogranicza do minimum konieczność
względu na ograniczone możliwości ob- stosowania zewnętrznych elementów
sługi urządzeń peryferyjnych (wejścia/ do pojedynczego rezonatora kwarco-
wyjścia) bez konieczności stosowania wego oraz dwóch dodatkowych kon-
dodatkowych układów scalonych rodzi- densatorów ceramicznych;
ny Z80 sÅ‚uch praktycznie o€nich zaginÄ…Å‚. - wreszcie pamięć do przechowywania
Obecnie najbardziej popularne mikrokon- danych i€wyników obliczeÅ„: RAM;
trolery to kostki PIC (Microchip) oraz ro- - oraz wewnętrzna pamięć typu ROM,
dzina MCS-51, czyli procesory oparte w€której zawarty jest program dziaÅ‚a-
o€ukÅ‚ad 8051. nia mikrokontrolera.
I€wÅ‚aÅ›nie te ostatnie, drogi Czytelni- Program dziaÅ‚ania jest tworzony przez
ku, zostanÄ… opisane w€kolejnych nume- konstruktora w€procesie tworzenia apli-
rach EdW. kacji, a€nastÄ™pnie jest zapisywany za po-
Dlaczego akurat te? Odpowiedz jest mocÄ… programatora w€strukturÄ™ mikro-
prosta. Po pierwsze: są to najłatwiej do- kontrolera. Ponadto mikroprocesor 8051
stÄ™pne i€najtaÅ„sze (w stosunku ceny do posiada możliwość doÅ‚Ä…czenia z€ze-
możliwości) układy mikroprocesorowe wnątrz dodatkowych układów pamięci
na rynku. Po drugie, wszędzie roi się od statycznych RAM (do przechowywania
shareware owych programów na ich te- danych) oraz pamięci EPROM/ROM
Rys. 2. Mikrokomputer 8051.
mat, a€na naszym rynku zaczęły siÄ™ poja- z€której może odczytywać polecenia -
ELEKTRONIKA DLA WSZYSTKICH 4/97 45
Też to potrafisz
Też to potrafisz
Też to potrafisz
Też to potrafisz
Też to potrafisz
programu, producenci ustalili w€miarÄ™
Tabela 1
jednolite i€przejrzyste symbole, których
znajomość (na razie teoretyczna) z€pew-
Symbol handlowy Opis
Symbol handlowy Opis
Symbol handlowy Opis
Symbol handlowy Opis
Symbol handlowy Opis
noÅ›ciÄ… przyda siÄ™ w€pózniejszych zaku-
80C51 wersja z€wewnÄ™trznÄ… pamiÄ™ciÄ… programu typu ROM, której
pach tych kostek.
zawartość jest nieznana z€naszego punktu widzenia, toteż ukÅ‚ad
tabeli 1
W tabeli 1 zestawiono oznaczenia
tabeli 1
tabeli 1
tabeli 1
możemy wykorzystać do pracy tylko z€doÅ‚Ä…czona zewnÄ™trznÄ…
mutacji procesora 8051, oraz krótką cha-
pamięcią np. EPROM do której zapiszemy nasz program (wtedy
rakterystykę zastosowanej pamięci pro-
pamięć ROM jest wyÅ‚Ä…czona -€nieaktywna)
gramu. Literka  C w€nazwie każdego
80C31 wersja procesora bez wewnętrznej pamięci programu.
z€nich oznacza, że każdy ukÅ‚ad wykonany
Mikrokontroler w€tej wersji może pracować tylko z€doÅ‚Ä…czonÄ…
jest w€wersji CMOS. NiegdyÅ› dość po-
zewnętrzną pamięcią jak dla 80C51.
pularne były wersje HMOS (bez literki C,
87C51 wersja z€wbudowanÄ… pamiÄ™ciÄ… EPROM. Obudowa
np. 8031), lecz jest to przeszłość, toteż
mikroprocesora posiada okienko kwarcowe, dzięki któremu
nie będziemy się nimi zajmować.
możliwe jest kasowanie zawartoÅ›ci tej pamiÄ™ci ,€co umożliwia
Jeżeli przez przypadek natrafisz, np.
wielokrotne programowanie całego układu.
w€BOMISie, na ukÅ‚ad w€wersji HMOS
89C51 najnowsza wersja procesora z€kasowanÄ… elektrycznie pamiÄ™ciÄ…
i€możesz go nabyć za grosze, skorzystaj
EEPROM. Ponieważ w€tej wersji caÅ‚a pamięć programu
i€kup go. Taki ukÅ‚ad jest identyczny jak
EEPROM może być kasowana bardzo szybko -€za pomocÄ… tylko
w€wersji CMOS, lecz bÄ™dzie pobieraÅ‚
1€impulsu, procesory w€tej wersji nazywa siÄ™ typu  Flash (czyt.
więcej prądu podczas pracy, co często
 flesz )
nie jest problemem.
80C52 jest to procesor identyczny z€8051 tyle że posiada dodatkowy
Ze względu na rzadkość takich sytua-
trzeci programowalny licznik/timer (nazywany jako  T2 ) i dwa
cji, w€swoich rozważaniach bÄ™dziemy
razy wiÄ™cej pamiÄ™ci RAM (256B) .€Reszta jak dla 80C51 - patrz
podawać dane i€parametry techniczne
wyżej.
dotyczące układów 8051, wykonanych
80C32 jak dla 80C31 z€uwzglÄ™dnieniem  T2 i RAM
w€wersji CMOS.
Podane w€tabeli wersje procesorów
87C52 jak dla 87C51 z€uwzglÄ™dnieniem  T2 i RAM
80C51 i€80C52 to typowe  odpady pro-
89C52 jak dla 89C51 z€uwzglÄ™dnieniem  T2 - RAM
dukcyjne wielkich koncernów produkują-
cych sprzęt elektroniczny.  Odpady to
nie znaczy bezwartoÅ›ciowe lub wybrako- można fizycznie odÅ‚Ä…czyć -€poprzez zwar- po niższej cenie? Otóż pamięć pobiera
wane. W pamięci wewnętrznej układu cie do masy odpowiedniego wyprowa- prąd - różnica polega na poborze prądu
8051 producent zapisaÅ‚ jakiÅ› program dla dzenia mikrokontrolera 8051. W€takiej przez te ukÅ‚ady. Jednak różnica ta wyno-
konkretnego odbiorcy (np. wytwórcy aplikacji można zatem użyć wersji 80C31 si zaledwie kilka mA, toteż w€naszych za-
pralek automatycznych). Kostki te nie -€bez wewnÄ™trznej pamiÄ™ci programu, stosowaniach nie ma to żadnego znacze-
zostały jednak sprzedane temu odbiorcy. lub bardzo taniej (nazwanej wcześniej nia.
Dla ciebie wpisany program jest bezuży-  odpadowÄ… ) wersji 80C51. W€obu przy- W€nastÄ™pnym odcinku przyjrzymy siÄ™
teczny. Ale, jak wspomniaÅ‚em wczeÅ›- padkach dziaÅ‚anie ukÅ‚adu bÄ™dzie takie sa- temu, co  €wystaje z€mikroprocesora -
niej, mikrokontrolery rodziny 8051 majÄ… me. Ze wzglÄ™du na ogromnÄ… różnicÄ™ €czyli wyprowadzeniom i€ich znaczeniu
możliwość pracy z€wbudowanÄ… lub ze- w€cenie tych dwóch wersji, powinieneÅ› dla ukÅ‚adu samego mikrokontrolera.
wnętrzną pamięcią programu. Jeżeli de- używać tańszej kostki 80C51. Zapytasz
Sławomir Surowiński
Sławomir Surowiński
Sławomir Surowiński
Sławomir Surowiński
Sławomir Surowiński
cydujemy siÄ™ na wykorzystanie tej dru- pewnie: To po co w€ogóle na rynku sÄ…
giej możliwości, pamięć wewnętrzną wersje 80C31, skoro można użyć 80C51
46 ELEKTRONIKA DLA WSZYSTKICH 4/97
Też to potrafisz
Też to potrafisz
Też to potrafisz
Też to potrafisz
Też to potrafisz
W€poprzednim numerze  Elektroniki
dla Wszystkich zaznajomiliśmy
Czytelników z€pojÄ™ciem
mikroprocesora i€mikrokontrolera.
Przedstawiliśmy ogólne założenia Mikrokontrolery?
dotyczące budowy układów
scalonych tego typu oraz przybliżony
sposób współpracy z€innymi
układami peryferyjnymi.
W tym odcinku przedstawimy ogólny
opis wyprowadzeń mikroprocesora.
To takie proste...
Jest to drugi z odcinków wstępnych
z cyklu obejmujÄ…cego naukÄ™
programowania procesora 8051.
Przypominamy, że wkrótce
zamkniemy listę kandydatów na
uczniów w  klasie
mikroprocesorowej . Na zgłoszenia
chętnych czekamy do końca maja.
 Klasa mikroprocesorowa to grupa
20-30 osób, które orztymają
bezpłatnie od firmy AVT zestaw
edukacyjny (składający się z dwóch
Część 2
płytek z procesorem, klawiaturą,
Charakterystyka mikrokontrolera 8051
wyświetlaczami itp.). Osoby te
zobowiązane będą do
konanych w€standardowej technice cyf-
przeprowadzania wszystkich
Dlaczego 8051?
rowej (TTL czy CMOS). Dzięki temu każ-
prostych ćwiczeń z zakresu nauki
Ponieważ elektronika oparta na ukła-
dy zainteresowany tematem czytelnik,
dach mikroprocesorowych wkracza pod
programowania oraz do zgłaszania
zorientowany choć w€podstawach cyf-
strzechy coraz silniej, warto by przyjrzeć
autorowi cyklu wszelkich wynikłych
rówki, bÄ™dzie w€stanie strawić pewna
się bliżej jednemu, bodaj najpopularniej-
porcjÄ™ wiedzy, oswajajÄ…c siÄ™ jednoczeÅ›-
niejasności czy problemów. Ma to na
szemu ukÅ‚adowi tego typu, a€mianowicie
celu praktyczne sprawdzenie stopnia
mikrokontrolerowi 8051.
Zapewne wielu Czytelników EdW
opanowania przedstawionego
spotyka siÄ™ z€oznaczeniem 8051. Niektó-
materiału, a także niewątpliwie
rych z€pewnoÅ›ciÄ… ogarnia zimny dreszcz,
zapewni skuteczność nauki. Do
inni jak wynika z€listów, sÄ… zaciekawieni
skorzystania z tej możliwości
tematem i€możliwoÅ›ciami programowa-
nia mikroprocesorów. Postaram się
zapraszamy osoby w różnym wieku,
w€sposób przystÄ™pny, tak merytorycznie
od 12 do 80 lat.
jak i€finansowo, (niestety z€naukÄ… wiąże
się część praktyczna, która wymaga mi-
nimum sprzętu do nauki programowa-
nia) pokazać i€przekonać Was o€tym że
projektowanie układów przy wykorzysta-
niu mikrokontrolera 8051 nie jest trudne.
Wymagane sÄ… jedynie podstawowe wia-
domoÅ›ci z€techniki cyfrowej, mówiÄ…c
konkretnie każdy, kto zna podstawowe
bramki logiczne oraz najprostsze typy
przerzutników, a€jeżeli dodatkowo wyko-
naÅ‚ sam jakiÅ› ukÅ‚ad lub opisany w€litera-
turze, z€pewnoÅ›ciÄ… nie bÄ™dzie miaÅ‚ prob-
lemów z€opanowaniem sztuki korzysta-
nia z€mikroprocesora 8051.
Przy opisie samego procesora,
a€w€pózniejszych numerach EdW, także
podczas krótkich lekcji na temat progra-
mowania, będę za każdym razem odwo- Rys. 3. Opis wyprowadzeń mikrokont-
ływał się do analogicznych układów wy- rolera 8051.
ELEKTRONIKA DLA WSZYSTKICH 5/97 41
Też to potrafisz
Też to potrafisz
Też to potrafisz
Też to potrafisz
Też to potrafisz
nictwem działu obsługi czytelników. jest do końca jasne, posłużę się porów-
Koszt zakupu 8051 w€chwili obecnej wa- naniem (choć maÅ‚o dokÅ‚adnym) do ukÅ‚a-
ha siÄ™ w€granicach 2,00...4,00 nowych du typu rejestrowego o€8-miu wyprowa-
zÅ‚otych, nie jest to wiÄ™c dużo jak na kie- dzeniach (8-bitach -€stÄ…d nazwa 8-bito-
szeń nawet nie zarabiającego amatora. wy). Czy pamiętamy układ serii TTL -
W€chwili obecnej na rynku znajduje siÄ™ €74198?. Jest to coÅ› w€tym stylu, tylko
wersja mikroprocesora wykonana w€tech- że bardziej uniwersalne. Dla tych, którzy
nologii CMOS oznaczona jako 80C51. nie wiedzÄ…, co to 74198, inne proste po-
Wszystkie parametry charakterys- równanie. Port, jak każdy port, pomaga
tyczne (prÄ…dowe i€napiÄ™ciowe) podane w przyjmowaniu i wysyÅ‚aniu, tyle że nie
w€artykule bÄ™dÄ… odnosić siÄ™ do tej wers- towarów, lecz informacji.
Rys. 4. Zapis przykładowej liczby do
ji, aczkolwiek dla uproszczenia będziemy Port może pełnić rolę wyjścia informa-
portu P1.
posługiwać się określeniem bez litery cji binarnej (czyli że procesor może usta-
 C mówiÄ…c o€typ ukÅ‚adzie. wiać stany logiczne na koÅ„cówkach tego
nie z€na pozór skomplikowanym ukÅ‚a- Mikrokontroler 8051 umieszczony portu). Tak wiÄ™c, jeżeli zachodzi potrze-
dem cyfrowym, jakim jest 8051 ka. jest w€40-nóżkowej obudowie (przeważ- ba, procesor może np. wpisać do portu
Dla sceptyków, którzy sądzą, że pro- nie plastikowej) typu DIL (skrót od  Dual P1 dowolną liczbę binarną z zakresu
gramowanie procesora 8051, nawet na In-Line Package , co po angielsku zna- 0...255, np. 48. Binarnie liczba 48 =
etapie  przedszkola , wymaga posiada- czy  obudowa dwurzÄ™dowa ). Sama 00110000 .€Oznaczenia poszczegól-
B
nia drogiego komputera klasy PC, mam ilość końcówek nie jest przerażająca, nych końcówek portu P1 wskazują na
miłą wiadomość. Otóż skonstruowałem wszakże znamy inne układy np. kolejną pozycję bitu (cyfry liczby binar-
podstawowy układ aplikacyjny na proce- ICL7106, które także umieszczone są nej), co pokazuje rysunek 4.
sor 8051 (nieduża pÅ‚ytka drukowana w€takiej obudowie. Tak wiÄ™c koÅ„cówka P1.7 (najstarsza)
+€kilka podzespołów), dziÄ™ki któremu W€tym miejscu ktoÅ› może powie- przyjmie poziom logiczny 0, koÅ„cówka
każda teoretyczna lekcja na Å‚amach na- dzieć:  No tak, ale opis typowej ICL ki P1.6 poziom 0, P1.5 poziom 1€itd.
szego pisma, bÄ™dzie mogÅ‚a być natych- (7106) można znalezć prawie w€każdym Ale co daje  zapisanie jakiejÅ› liczby do
miast powtórzona w€praktyce na stole czasopiÅ›mie lub podrÄ™czniku, znaczenie portu P1 ? Otóż zastosowaÅ„ może być
rysu-
każdego z€Was, drodzy Czytelnicy. By- 40-tu wyprowadzeÅ„ też, a€tu mam taki wiele. Najprostsze z€nich obrazuje rysu-
rysu-
rysu-
rysu-
nek 5
najmniej nie będzie potrzebny także ża- mikroprocesor, każdy mi mówi że to nek 5
nek 5. Do każdego wyprowadzenia portu
nek 5
nek 5
den programator pamiÄ™ci EPROM lub in- ukÅ‚ad uniwersalny, a€ja i€tak nie wiem co P1 doÅ‚Ä…czono ukÅ‚ad z€przekaznikiem, któ-
ne, czÄ™sto kosztowne wyposażenie. Wy- mam z€nim zro- rego styki zaÅ‚Ä…cza-
starczÄ… dobre chÄ™ci i€trochÄ™ wolnego bić... . jÄ… dowolne urzÄ…-
Końcówki dowolnego portu
czasu, a€z€pewnoÅ›ciÄ… każdy z€Was bÄ™- Zapoznanie siÄ™ dzenie elektryczne
procesora mogą pełnić zarówno
dzie zachwycony efektami swojej pracy, z€mikrokontrole- np. w€mieszkaniu.
rolę wejść, jak wyjść.
czyniÄ…c pierwsze kroki w€technice mik- rem rozpoczniemy W€sumie na rysun-
roprocesorowej. od ogólnego poz- ku jest ich osiem,
nania jego 40 wyprowadzeÅ„, w€koÅ„cu lecz w€praktyce nie musimy korzystać ze
TrochÄ™ o€samym
tylko to  wystaje z€obudowy i€jest wi- wszystkich wyprowadzeÅ„ portu. Przy ta-
doczne. kim wykorzystaniu portu program zawar-
bohaterze
ty w mikroprocesorze może na przykład
1. KoÅ„cówki o€numerach 1...8
Na poczÄ…tek przyjrzyjmy siÄ™ samemu
włączać i wyłączać oświetlenie w miesz-
(port P1)
mikroprocesorowi 8051. Warto w€tym
kaniu. Uzyskamy świetny symulator
miejscu wyjÄ…c z€szuflady biurka takÄ… kos- SÄ… to wyprowadzenia 8-bitowego,
obecności domowników.
tkÄ™, a€jeżeli ktoÅ› jej nie posiada, może jÄ… uniwersalnego portu mikroprocesora
Projektując układ wykonawczy należy
nabyć prawie w€każdym sklepie z€podze- oznaczanego w€literaturze jako P1 (port
mięć na uwadze maksymalną obciążal-
spoÅ‚ami elektronicznymi, lub za poÅ›red- nr 1€jak kto woli). Jeżeli sÅ‚owo  port nie
ność każdego z€wyprowadzeÅ„ portu P1,
z€reguÅ‚y wynosi ona 10mA (w obecnie
oferowanych wersjach procesora) na
każdy pin. Można zatem wysterować za
pomocÄ… portu maksymalnie do czterech
wejść TTL serii standard.
Istotną zaletą portów uniwersalnych
procesora (w tym także P1) jest możli-
wość indywidualnego ustawiania pozio-
mu logicznego na każdym wyprowadze-
niu niezależnie. Nie trzeba zatem zapisy-
wać całej 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
nastÄ…pi poprzez wydanie polecenia: CLR
P1.5 ( clr -€clear, ang. zeruj,wyczyść).
NiechcÄ…cy zahaczyliÅ›my o€programowa-
nie, ale o€tym bÄ™dziemy mówić szczegó-
Å‚owo przy innej okazji.
Rys. 5. Najprostsze wykorzystanie portu portu P1.
42 ELEKTRONIKA DLA WSZYSTKICH 5/97
Też to potrafisz
Też to potrafisz
Też to potrafisz
Też to potrafisz
Też to potrafisz
elementem układu  resetu jest kon-
densator elektrolityczny C. Z€reguÅ‚y jego
wartość powinna wynosić 10...22µF.
Jest on niezbędny do prawidłowej gene-
racji impulsu resetu przez układy we-
wnętrzne mikrokontrolera.
W€starszych wersjach 8051 wykona-
nych w€technologii HMOS, niezbÄ™dny
okazał się dodatkowy rezystor blokujący
wejście RST do masy, co zapewniało
wymuszenie stanu niskiego na tym pinie
podczas normalnej pracy ukÅ‚adu. W€no-
wych katalogach opisujących układy
w€wersji CMOS, rezystor jest ten pomi-
jany, aczkolwiek w€praktycznych ukÅ‚a-
dach powinniśmy przewidzieć miejsce
Rys. 6. Podstawowy (użytkowy) układ Rys. 7. Inne rozwiązania układów
na płytce drukowanej, ze względu na
resetowania 8051. RESET.
różnorodność procesorów serii 8051.
Niech za przykład posłuży fakt, że pro-
Port (caÅ‚y lub niektóre z€jego pinów), pracuje mikroprocesor. WyjaÅ›niÄ™ to do- ducent najnowszych procesorów z€rodzi-
podobnie jak przy zapisie, można usta- kÅ‚adnie w€dalszej części artykuÅ‚u. Z€regu- ny 8051 w€kartach katalogowych naj-
wić także jako wejÅ›cie informacji logicz- Å‚y w€typowych zastosowaniach czas nowszych wersji z€wewnÄ™trzna pamiÄ™-
nej. Każde z€wyprowadzeÅ„ staje siÄ™ wte- 1ms w€zupeÅ‚noÅ›ci wystarcza. ciÄ… EEPROM typu  Flash zaleca stoso-
dy wyjÅ›ciem o wysokiej impedancji, W€ukÅ‚adach praktycznych do koÅ„ców- wanie tego rezystora pomimo iż produ-
dziÄ™ki temu dowolny poziom logiczny ki RST doÅ‚Ä…cza siÄ™ mniej lub bardziej kowane ukÅ‚ady sÄ… wykonane w€wersji
podany z€wyjÅ›cia jakiegoÅ› ukÅ‚adu cyfro- skomplikowany ukÅ‚ad który generuje wy- CMOS. My możemy stosować rezystor
wego (np. z€wyjÅ›cia bramki ukÅ‚adu TTL magany impuls zerujÄ…cy najczęściej o€wartoÅ›ci 8,2...10kW.
lub CMOS) może być odczytany poprzez w€trzech przypadkach: Widoczny na rysunku 6€klawisz sÅ‚uży
piny portu a€informacja czy tym stanem - po wÅ‚Ä…czeniu zasilania ukÅ‚adu do resetowania procesora bez koniecz-
byÅ‚a logiczna  1 czy  0 , zostaje wyko- - na nasze żądanie -€poprzez np. przyciÅ›- noÅ›ci wyÅ‚Ä…czania napiÄ™cia zasilajÄ…cego.
rzystana przez procesor dla dalszego je- niÄ™cie klawisza (umieszczonego z€re- Toteż w€każdej chwili użytkownik może
go dziaÅ‚ania w€zależnoÅ›ci od speÅ‚nianej guÅ‚y na pÅ‚ytce drukowanej tuż obok przerwać wykonywanie programu przez
akurat funkcji. Krótko mówiąc, procesor procesora). procesor.
rysunku 7
może odczytać stany logiczne, jakie - w€sytuacjach awaryjnych, kiedy np. Na rysunku 7
rysunku 7
rysunku 7
rysunku 7€pokazano inne, bardziej
z zewnątrz podano na końcówki portu. poprzez zakłócenie najczęściej na li- złożone wersje układów pełniących funk-
OczywiÅ›cie poziomy logiczne napięć niach zasilajÄ…cych nastÄ…pi bÅ‚Ä™dne dzia- cje resetu, lecz w€naszym przypadku
wejÅ›ciowych portu P1 (oraz każdego in- Å‚anie ukÅ‚adu mikroprocesora, w€Å¼argo- w€zupeÅ‚noÅ›ci wystarczy wersja z€rysun-
nego) muszÄ… zawierać siÄ™ w€przedziale nie czÄ™sto okreÅ›la siÄ™ to mianem ku 6.
napięć zasilania mikrokontrolera, czyli  zawieszenia lub  niekontrolowanej
3. KoÅ„cówki o€numerach 10...17
w€zakresie 0...5V. Detekcja poziomów pracy ukÅ‚adu.
(port P3)
logicznych odbywa się jak dla bramek Trzeci przypadek dotyczy bardziej zło-
CMOS, stÄ…d wartoÅ›ci progowe napięć żonych ukÅ‚adów stosowanych szczegól- Podobnie jak w€przypadku portu P1,
tych stanów sÄ… zbliżone do poÅ‚owy na- nie w€automatyce i€elektronice przemys- port P3 może peÅ‚nić wszystkie opisane
wcześniej funkcje - może być wyjściem
pięcia zasilającego. Istotną informacją łowej. My najczęściej spotkamy się
jest fakt że w€trybie  odczytu z€portu z€dwiema pierwszymi sytuacjami. Przy- lub wejÅ›ciem. Dodatkowe symbole na
rysunku 3€tuż obok wyprowadzeÅ„ portu
P1 końcówki są wewnętrznie podczepia- kładowy układ zapewniający prawidłowy
P3 sugerują że port może też spełniać in-
ne (podciÄ…gane) do plusa zasilania po- skasowanie i€ponowny start procesora
ne dodatkowe funkcje. I€tak też jest.
rysunek 6
przez wbudowane w€80C51 rezystory, 80C51 przedstawia rysunek 6
rysunek 6. Głównym
rysunek 6
rysunek 6
co wymusza odczyt wysoki z€portu
w€wypadku niepodÅ‚Ä…czenia koÅ„cówki
portu.
2. KoÅ„cówka 9€(RST)
Z€tematem mikroprocesorów czy mik-
rokontrolerów nierozłącznie wiąże się
pojęcie  resetowania , czy jak kto woli
 kasowania układu. Czynność ta wyko-
nywana poprzez podanie logicznej  1
na te wyprowadzenie na pewien okres
czasu (jaki - o€tym pózniej) powoduje
skasowanie układu, a więc natychmias-
towe przerwanie wykonywanych czyn-
noÅ›ci i€rozpoczÄ™cie cyklu dziaÅ‚ania proce-
sora od samego początku (tak jakbyśmy
włączyli zasilanie układu).
Czas trwania dodatniego impulsu ka- Rys. 8. Najprostszy przykład wykorzystania
transmisji synchronicznej.
sujÄ…cego zależy od czÄ™stotliwoÅ›ci z€jakÄ…
ELEKTRONIKA DLA WSZYSTKICH 5/97 43
Też to potrafisz
Też to potrafisz
Też to potrafisz
Też to potrafisz
Też to potrafisz
Piny P3.0 (RXD) i€P3.1 (TXD) mogÄ… peÅ‚nić gwizdek czajnika, wiÄ™c oczywiÅ›cie prze-
rolÄ™ portu transmisji szeregowej. W€prak- rywamy wykonywanie -€tu użyjÄ™ sformu-
tyce poprzez te dwa wyprowadzenia moż- łowania:  pętli głównej programu , którą
na przesyÅ‚ać informacjÄ™ (bajty i€bity) z€i€do jest sprzÄ…tanie pokoju -€i€szybko biegnie-
procesora z€innych ukÅ‚adów cyfrowych my wyÅ‚Ä…czyć gaz. WykonaliÅ›my dwie do-
w€sposób szeregowy, tzn. bit po bicie. datkowe czynnoÅ›ci: biegliÅ›my do kuchni
CiekawostkÄ… niech bÄ™dzie też fakt, że i€wyÅ‚Ä…czyliÅ›my czajnik, czyli można po-
przesyłanie to może odbywać się na kil- wiedzieć, że wykonaliśmy  procedurę
ka sposobów: obsługi przerwania (wyłączenia czajni-
- synchronicznie -€wtedy pin P3.0 peÅ‚ni ka, jak kto woli). Wykrycie zmiany stanu
role dwukierunkowej magistrali szere- logicznego na końcówkach przerwań ze-
gowej, po której przesyÅ‚ane sÄ… dane, wnÄ™trznych INT0 i€INT1 wiąże siÄ™ ze
zaÅ› pin P3.1 generuje sygnaÅ‚ taktujÄ…cy, speÅ‚nieniem jednego warunku, a€miano-
pełniąc rolę zegara (podobnie jak wicie, aby czas od wspomnianego ujem-
w€szeregowych rejestrach przesuw- nego zbocza sygnaÅ‚u zgÅ‚oszenia prze-
Rysunek 8
nych np. 74164, 74165). Rysunek 8 rwania do ponownego przejÅ›cia w€stan
Rysunek 8
Rysunek 8
Rysunek 8
obrazuje sposób transmisji synchro- wysoki był odpowiednio długi. Podobnie
nicznej do zewnÄ™trznego 8-bitowego jak w€przypadku warunku sygnaÅ‚u RST,
rejestru TTL typu 74164. czas ten zależy od częstotliwości zegara
- asynchronicznie -€kiedy z€góry zadaje- mikroprocesora.
my prędkość transmisji pomiędzy na- Dokładnie sposób działania systemu
szym procesorem 8051 a€innym, ze- przerwaÅ„ procesora 8051 przedstawiÄ™
wnÄ™trznym ukÅ‚adem np. Å‚Ä…czem w€kolejnych odcinkach.
RS232c komputera PC. W€takim przy- KoÅ„cówki (P3.4 i€P3.5) oznaczone na
padku koÅ„cówka P3.0 -€RXD peÅ‚ni rolÄ™ diagramie z€rysunku 3€jako T0 i€T1 peÅ‚niÄ…
odbiornika przesyłanych szeregowo dodatkową funkcję wejść uniwersal-
danych (pierwsza litera symbolu  R nych, programowalnych liczników, wbu-
oznacza receive -€ang. odbiór), zaÅ› dowanych w€strukturÄ™ 8051. Procesor
koÅ„cówka P3.1 -€TXD nadajnika ( T - 80C51 zawiera dwa blizniacze liczniki T0
Rys. 9. Typowe układy zewnętrznego
€transmitt -€ang. nadawanie). i€T1 (oznaczenie takie same jak koÅ„ców- oscylatora kwarcowego.
Ponadto rozróżnia się kilka trybów ki). Maksymalnie mogą one zliczać do
pracy asynchronicznej. 216 =€65536, po czym zostajÄ… wyzerowa- WÅ‚aÅ›nie pin WR\ jest sygnaÅ‚em zapisu
Tych, którzy nie zrozumieli dokÅ‚adnie ne. Liczniki te oprócz zliczania impulsów do zewnÄ™trznej pamiÄ™ci danych, a€koÅ„-
dodatkowych funkcji wyprowadzeÅ„ RXD z€wejść T0 i€T1 mogÄ… także zliczać impul- cówka RD\ wysyÅ‚a sygnaÅ‚ do odczytu.
i TXD pocieszam, że temat ten wyjaÅ›niÄ™ sy wewnÄ™trzne, pochodzÄ…ce z€generato- W€praktycznych zastosowaniach jako
dokÅ‚adnie w rozdziale na temat sposo- ra mikrokontrolera. W€praktyce wyko- elementy pamiÄ™ci wykorzystuje siÄ™ ukÅ‚a-
bów komunikacji szeregowej w jednym rzystywane jest to np. do odmierzania du statycznych RAM -€czyli w€skrócie
z kolejnych odcinków cyklu. określonych odcinków czasu np. przy SRAM.
Alternatywna funkcją końcówek P3.2 funkcji zegarka. Jak wspomniałem Procesor 8051 potrafi zaadresować
(INT0\) oraz P3.3 (INT1\) jest funkcja de- wczeÅ›niej, liczniki mogÄ… być programo- maksymalnie 65536 (216)€komórek pa-
tekcji przerwaÅ„ zewnÄ™trznych. Dla tych wane przez użytkownika, a€wiÄ™c można miÄ™ci (bajtów), ale o€tym pózniej.
czytelników, którzy nie wiedzÄ…, co to np. zmniejszyć ich pojemność (do 28 lub I€to tyle na temat alternatywnych fun-
oznacza, wyjaÅ›niam, że pojÄ™cie przerwa- 213), można także zapisać w€nich war- kcji portu P3, nie zapominajmy jednak że
nia w€tym przypadku odnosi siÄ™ do zmia- tość poczÄ…tkowÄ…, zatrzymać je w€dowol- port P3 (lub niektóre z€jego pinów) może
ny stanu logicznego (na omawianym wy- nym momencie lub uruchomić. Szczegó- pełnić rolę zwykłego, uniwersalnego por-
prowadzeniu P3.2 lub P3.3) z€ 1 na Å‚y w€rozdziale na temat ukÅ‚adów liczniko- tu wejÅ›cia- wyjÅ›cia, podobnie jak P1.
 0 . W€efekcie  we wnÄ™trzu procesora wych procesora 8051.
4. KoÅ„cówki 18 i€19
8051 zostaje ustawiona tak zwana flaga Pozostały do omówienia wyprowa-
(XTAL1 i€XTAL2)
(nazywana także jako  znacznik zgÅ‚osze- dzenia P3.6 i€P3.7, oznaczone jako WR\
nia przerwania , co w€odniesieniu do i€RD\. KoÅ„cówki te sÅ‚użą do doÅ‚Ä…czenia ze-
techniki cyfrowej można wyobrazić so- Jak pisaliśmy we wcześniejszych nu- wnętrznego rezonatora kwarcowego
bie jako przerzutnik). KonsekwencjÄ… tego merach EdW, prawie każdy mikrokontro- o€czÄ™stotliwoÅ›ci zależnej od potrzeb
jest automatyczne przerwanie wykony- ler posiada możliwość współpracy z pa- użytkownika, ale także od wersji układu
wania przez procesor programu i€natych- miÄ™ciÄ… zewnÄ™trznÄ…, którÄ… przecież trzeba 8051.
miastowe przejÅ›cie do wykonania czyn- zaadresować. W pamiÄ™ci tej można prze- W€praktyce czÄ™stotliwość ta może
noÅ›ci Å›ciÅ›le okreÅ›lonych przez progra- chowywać istotne z€punktu widzenia wynosić od 1,2MHz do 12...16MHz, na
mistę. Ciąg takich czynności nazywany użytkownika dane, np. poziom tempera- rynku spotyka się także wersje proceso-
jest w€technice mikroprocesorowej: tury z€ostatnich dni półrocza (jeżeli pro- rów pracujÄ…ce przy wyższych czÄ™stotli-
 procedurÄ… obsÅ‚ugi przerwania . Naj- cesor pracuje w€ukÅ‚adzie stacji meteoro- woÅ›ciach nawet do 40MHz, a€także przy
prostszÄ… analogiÄ… do zasady dziaÅ‚ania do- logicznej), lub inne w€zależnoÅ›ci od po- niskich -€nawet do pojedynczych herców
wolnego przerwania (także zewnÄ™trzne- trzeb. w€wypadku procesorów 80C51 w€wersji
go typu INT0 lub INT1) jest np. sytuacja, Aby zapisać takie informacje w€ze- statycznej (np. 89C51 firmy Atmel).
kiedy sprzątamy mieszkanie, czyli wyko- wnętrznej pamięci danych potrzebne są Dołączony do tych pinów rezonator
nujemy okreÅ›lone czynnoÅ›ci, powiedz- oprócz podania adresu komórki pamiÄ™ci kwarcowy po uzupeÅ‚nieniu o€dodatkowe
my odkurzanie. Po tym mamy za zadanie do której ma nastÄ…pić zapis, także sygna- kondensatory o€wartoÅ›ci z€reguÅ‚y z€prze-
sprzÄ…tnąć kurz z€półek, a€nastÄ™pnie Å‚y sterujÄ…ce zapisem lub w€przypadku dziaÅ‚u 22...40pF (w zależnoÅ›ci od wartoÅ›-
umyć okna. W€pewnej chwili rozlega siÄ™ odczytywania -€odczytem z€pamiÄ™ci. ci rezonatora), umożliwiajÄ… pracÄ™ wbudo-
44 ELEKTRONIKA DLA WSZYSTKICH 5/97
Też to potrafisz
Też to potrafisz
Też to potrafisz
Też to potrafisz
Też to potrafisz
wanemu w€8051 generatorowi, który oznacza biegun ujemny napiÄ™cia zasilajÄ…- pkt.7), lub do plusa zasilania (+5V) jeżeli
 napÄ™dza caÅ‚y mikroprocesor. Oczy- cego. W€naszych zastosowaniach bÄ™- z€wewnÄ™trznej.
wiÅ›cie od czÄ™stotliwoÅ›ci rezonatora Å›ciÅ›- dziemy doÅ‚Ä…czać ten pin do masy przy- W€pewnych ukÅ‚adach procesor pomi-
le zależy szybkość działania naszego szłego układu elektronicznego. mo że posiada wewnętrzna pamięć pro-
mikrokontrolera. Typowy układ zewnęt- gramu, ze względu na zbyt małą je po-
6. KoÅ„cówki o€numerach 21...28
rysunek
rznego oscylatora przedstawia rysunek jemność, musi sięgać do zewnętrznej
rysunek
rysunek
rysunek
(port P2)
9a pamiÄ™ci. W€takim przypadku pin EA\ po-
9a
9a.
9a
9a
SÄ… to wyprowadzenia drugiego 8-bito-
CzÄ™stotliwość, z€jakÄ… pracujÄ… we- winien być doÅ‚Ä…czony do plusa zasilania,
wego portu procesora. Port P2 spełnia
wnętrzne układy mikroprocesora, jest tak aby procesor po jego  resecie mógł
wszystkie funkcje podobnie jak P1. Do-
określona wzorem: rozpocząć pracę pobierając rozkazy
datkowo poprzez końcówki portu P2 po-
F€=€f /12, z€wbudowanej pamiÄ™ci programu. Nale-
xtal
dawana jest w€razie potrzeby starsza
gdzie fxtal jest częstotliwością rezonatora ży także pamiętać że dołączenie EA\ do
część adresu (A8...A15) przy dostępie do
kwarcowego. masy blokuje wewnętrzną pamięć pro-
zewnętrznej pamięci danych (SRAM)
Powodem takiego podziału częstotli- gramu jeżeli ona istnieje.
a€także programu (np. EPROM). Sposób
woÅ›ci rezonatora jest wewnÄ™trzna archi- W€praktyce jest to czÄ™sto stosowany
w€jaki to siÄ™ odbywa opiszemy przy
tektura wszystkich procesorów serii chwyt, kiedy kupujemy w€sklepie na
okazji  dołączania pamięci zewnętrznej
8051. Wiąże siÄ™ z€tym pojÄ™cie  cykli ma- ogół kilkakrotnie taÅ„szÄ… wersjÄ™ proceso-
do mikrokontrolera 8051 .
szynowych procesora o€których zna- ra z€pamiÄ™ciÄ… wewnÄ™trznÄ… typu ROM.
czeniu napiszÄ™ w€rozdziale na temat os- 7. KoÅ„cówka 29 (PSEN\) W€pamiÄ™ci takiej najczęściej zapisany
cylatora 8051. jest pewien program lecz, z€naszego
W€przypadku pracy procesora z€ze-
W€każdym razie z€praktycznego punk- punktu widzenia jest on zupeÅ‚nie bezuży-
wnętrzna pamięcią programu (np. EP-
tu widzenia, przedstawiony na rysunku teczny. Toteż aby w€peÅ‚ni wykorzystać
ROM) końcówka ta wysyła sygnał odczy-
9€ukÅ‚ad, podobnie jak ukÅ‚ad resetu z€rys. walory mikroprocesora (oczywiÅ›cie przy
tu z€tej pamiÄ™ci. W€praktyce jest ona do-
6€jest niejako obowiÄ…zkowym (przynaj- pracy z€zewnÄ™trznÄ… pamiÄ™ciÄ… programu)
łączona do wejścia OE\ współpracującej
mniej na etapie nauki programowania). bez uruchamiania nieznanego nam pro-
pamięci EPROM. Procesor chcąc odczy-
KoÅ„cówka XTAL1 (pin 19) w€ukÅ‚adach gramu, blokujemy pamięć ROM poprzez
tać kolejny rozkaz (polecenie do wykona-
w€wersji CMOS może także peÅ‚nić rolÄ™ zwarcie EA\ do masy.
nia) z€zewnÄ™trznej pamiÄ™ci programu po-
wejścia zewnętrznego sygnału zegaro-
daje poziom niski na końcówkę  PSEN
10. KoÅ„cówki o€numerach 32...39
wego o€czÄ™stotliwoÅ›ci w€zakresie, jak
a€nastÄ™pnie dokonuje odczytu.
(port P0)
opisano w€przypadku stosowania rezo-
Dzieje siÄ™ tak w€Å›ciÅ›le okreÅ›lonych
natora kwarcowego. Wtedy rezonator
Trzecim i€ostatnim uniwersalnym por-
warunkach, synchronicznie z€czÄ™stotli-
i€dodatkowe kondensatory sÄ… zbÄ™dne. tem procesora 8051 jest P0. Podstawo-
wością zegara procesora. Jeżeli posiada-
W€przypadku gdy mamy do czynienia we funkcje portu jako dwukierunkowej
my wersjÄ™ procesora z€wewnÄ™trznÄ… pa-
z€wersjÄ… w€technologii HMOS wejÅ›ciem
bramy do wymiany danych sÄ… takie sa-
mięcią (typu EPROM lub EEPROM),
takiego sygnaÅ‚u jest XTAL2 (pin 18). me jak w€przypadku portów P1 i€P2. Za-
i€wykorzystujemy prace z€tÄ… wewnÄ™trznÄ…
W€obu przypadkach pozostaÅ‚y pin powi- sadniczÄ… różnicÄ… jest jednak zwiÄ™kszona
pamięcią, końcówka 29 powinna pozo-
nien być nie podłączony. Dokładnie sytu-
obciążalność (do 8€wejść TTL) tego por-
stać niepodłączona.
rys. 9b c
ację tę wyjaśnia rys. 9b c tu oraz fakt nie posiadania wbudowa-
rys. 9b i€c
rys. 9b c.
rys. 9b c
8. Końcówka 30 (ALE)
nych rezystorów podciągających koń-
5. Końcówka 20 (Vss)
O€koÅ„cówce 30 powiemy przy okazji
cówki portu do plusa zasilania w€wypad-
Podobnie jak w€wiÄ™kszoÅ›ci ukÅ‚adów
omawiania portu P0.
ku odczytu.
cyfrowych ostatnie wyprowadzenie
Dlatego przy projektowaniu dowol-
9. Końcówka 31 (EA\)
w€ dolnym rzÄ™dzie obudowy jest koÅ„-
nych układów wyjściowych dołączanych
cówką ujemnego napięcia zasilającego - Powinna być dołączona do masy, je-
do tego portu należy uwzględnić wspo-
€masy (GND). W€przypadku ukÅ‚adów żeli mikroprocesor pobiera rozkazy w€ze-
mniane właściwości tak, aby np. odpo-
CMOS podaje się oznaczenie Vss co wnętrznej pamięci programu (patrz
wiednio spolaryzować bazy tranzysto-
rów z€rys. 5.
Drugą bardzo ważną rolą, jaką pełni
P0, jest funkcja multipleksowanej magis-
trali danych (8-bitów: D7...D0) i€mÅ‚odszej
części adresu (A7...A0). Multipleksowa-
nej w€praktyce znaczy  przeÅ‚Ä…czalnej ,
czyli raz na końcówkach portu P0 proce-
sor może wystawić bajt danych (np. do
zapisu do zewnętrznej pamięci da-
nych), w€innym przypadku adres,
w€celu wybrania potrzebnej komórki
z€pamiÄ™ci SRAM, do której ma być za-
pisana.
Bardziej wnikliwy czytelnik zauważy,
że przecież do zapisu danej w€zewnÄ™trz-
nej pamiÄ™ci SRAM potrzeba w€sumie 16
sygnałów adresu (A0...A15) oraz 8-bitów
(sygnałów) danej. Potrzebne są zatem
3€oÅ›miobitowe porty (2 na adres i€jeden
na danÄ…), a€my mamy do dyspozycji tylko
Rys. 10. Dołączanie zatrzasku do procesora.
dwa P2 i€P0.
ELEKTRONIKA DLA WSZYSTKICH 5/97 45
Też to potrafisz
Też to potrafisz
Też to potrafisz
Też to potrafisz
Też to potrafisz
Tabela 2.
Parametr Symbol Wartość Wartość Uwagi
Parametr Symbol Wartość Wartość Uwagi
Parametr Symbol Wartość Wartość Uwagi
Parametr Symbol Wartość Wartość Uwagi
Parametr Symbol Wartość Wartość Uwagi
dopuszczalna zalecana
dopuszczalna zalecana
dopuszczalna zalecana
dopuszczalna zalecana
dopuszczalna zalecana
napiÄ™cie zasilania Ucc-Uss 6,6V 5V Ä…€20%
napięcie wzgl. masy
na dolnej koÅ„cówce ukÅ‚adu -1,0...7,0V w€zakresie napiÄ™cia zasilania
moc rozpraszana Ptot 1W nie dotyczy
temperatura pracy 0oC...70oC 0oC...70oC dla wersji specjalnych układu zakres
pracy może być większy
temp. przechowywania -65oC...+150oC nie dotyczy
11. Końcówka 40 (Vcc)
Tabela 3.
Oczywiście jest to końcówka zasilania
Oznaczenie Wbudowana pamięć Uwagi
Oznaczenie Wbudowana pamięć Uwagi
Oznaczenie Wbudowana pamięć Uwagi
Oznaczenie Wbudowana pamięć Uwagi
Oznaczenie Wbudowana pamięć Uwagi
mikroprocesora 8051. Napięcie wzglę-
programu
programu
programu
programu
programu
dem koÅ„cówki Vss (czyli masy) z€reguÅ‚y
80C31 bez pamięci układ nadaje się do pracy po dołączeniu
nie może przekroczyć 6,5V. Dlatego
zewnętrznej pamięci EPROM wraz
układ mikrokontrolera należy zasilać na-
z€niezbÄ™dnym zatrzaskiem (np.
pięciem 5V ą0,25V używając do tego ce-
74373/573)
lu dowolnego zasilacza stabilizowanego
80C51 4kB ROM wersja, która wymaga zablokowania
najlepiej przy pomocy znanego układu
pamiÄ™ci, patrz opis pkt. 9€(reszta jak dla
7805.
80C31)
Zasadą przy projektowaniu układów
z€8051 jest blokowanie tego wyprowa-
87C51 4kB ERPOM procesor z€wbudowanÄ… pamiÄ™ciÄ… typu
dzenia kondensatorem o€wartoÅ›ci 100nF
lub EPROM OTP* EPROM i€możliwoÅ›ciÄ… kasowania jej
do masy układu cyfrowego. Praktycznie
promieniami UV poprzez okienko
na płytce drukowanej należy zawsze
kwarcowe
przewidzieć miejsce na taki kondensator
89C51 4kB EEPROM (Flash) podobnie jak 87C51 z€tym że pamięć
umieszczając go jak najbliżej samego
programu można skasować drogą
układu procesora lub po prostu przyluto-
elektrycznÄ… przez podanie impulsu -
wając go od strony wyprowadzeń na
€dlatego mówi siÄ™ o€pamiÄ™ci typu
płytce drukowanej.
 Flash (ang.€bÅ‚ysk).
tabeli 2
W€tabeli 2
tabeli 2€przedstawiono parametry
tabeli 2
tabeli 2
dopuszczalne oraz zalecane przez produ-
* OTP (One Time Programable) - pamięć EPROM zapisywalna jednokrotnie (kostka nie ma okienka kwar-
centów procesora 80C51 oraz pochod-
cowego umożliwiającego skasowanie zawartości pamięci na pomocą promieniowania ultrafioletowego.
nych produkowanych w€wersjach
CMOS.
Na koniec pozostaje jeszcze krótkie
I€tu wÅ‚aÅ›nie leży zasada multiplekso- ALE, dana (adres) z€portu P0 zostaje za-
wyjaśnienie oznaczenia samego kontro-
wania (naprzemiennego wystawiania ad- pisana w€zatrzasku 74373 (573). Teraz
lera i€kryjÄ…cych siÄ™ w€nim dodatkowych
resu lub danej) procesora 8051. Otóż na ośmiu jego wyjściach adres będzie
istotnych dla nas informacji. Problem ten
sygnaÅ‚ -€informacja o tym, co aktualnie utrzymywany niezależnie od zmieniajÄ…-
tabela 3
tabela 3
dokładniej przedstawia tabela 3.
tabela 3
tabela 3
znajduje siÄ™ na szynie portu P0, pojawia cych siÄ™ stanów w€porcie P0 aż do nade-
Sławomir Surowiński
Sławomir Surowiński
Sławomir Surowiński
Sławomir Surowiński
Sławomir Surowiński
siÄ™ na wyprowadzeniu 30 oznaczonym jÅ›cia nastÄ™pnego sygnaÅ‚u z€koÅ„cówki
jako ALE. Sygnał ten można nazwać ALE. Skoro procesor posługując się do-
 sygnałem zapisu adresu do dodatko- datkowym układem  zapisał na ze-
wego zewnętrznego układu cyfrowego. wnątrz adres, może teraz śmiało wysta-
Układ ten jest 8-krotnym zatrzaskiem wić na port P0 daną, która ma być zapi-
aktywowanym wysokim poziomem sana w€zewnÄ™trznej pamiÄ™ci danych.
logicznym. W€serii TTL znajdujÄ… siÄ™ OczywiÅ›cie można też odczytać dane
dwie kostki spełniające rolę układu z pamięci.
zatrzaskiwania młodszej części adre- Tak więc podsumowując, przeanalizo-
su przez 8051, sÄ… to 74373 lub waliÅ›my sposób w€jaki za pomocÄ… jedne-
74573. go sygnału ALE procesor 8051 może
Różnica między nimi polega jedynie niejako rozszerzyć liczbę linii adreso-
na innym wyprowadzeniu końcówek, wych z 8 do 16.
Rysunek 10
reszta dziaÅ‚a tak samo. Rysunek 10 W€przypadku niekorzystania z€możli-
Rysunek 10
Rysunek 10
Rysunek 10€po-
kazuje sposób dołączenia zatrzasku do wości obsługi zewnętrznej pamięci tak
procesora 8051. W€momencie kiedy programu (EPROM) lub danych (SRAM)
8051 wystawi na port P0 młodszą część końcówka ALE (30) jest nieodłączona.
adresu (A7...A0), daje temu sygnaÅ‚, W€odcinku poÅ›wiÄ™conym rozbudowie
zmieniajÄ…c stan na koÅ„cówce ALE z€nis- systemu opartego na  51-ce powrócimy
kiego na wysoki. W€efekcie po nadejÅ›ciu do tego tematu, na razie istotne sÄ… infor-
tym razem opadającego zbocza sygnału macje ogólne.
46 ELEKTRONIKA DLA WSZYSTKICH 5/97
Też to potrafisz
W poprzednim odcinku zapoznałeś
siÄ™, drogi Czytelniku ze znaczeniem po-
szczególnych wyprowadzeń mikrokont-
rolera 8051. Ze względu na chęć czysto
praktycznej nauki  użytkowania tego
układu, nie opisywałem dokładnie wszys-
Mikrokontrolery?
tkich funkcji każdej z  nóżek , a jedynie
krótko zaznajomiłem Cię z przedstawio-
nym w EdW 5/97 tematem. Być może
nie wszystkie pojęcia są dla Ciebie od ra-
zu oczywiste, lecz nie powinieneÅ› siÄ™
tym przejmować, na tym etapie pozna-
wania mikroprocesora wszystko co Ci po-
trzeba to  osłuchanie się z typowymi To takie proste...
hasłami na temat naszego bohatera. Na
pózniejszym etapie  praktycznej nauki
z wykorzystaniem układu elektroniczne-
go, wiedza ta przyda Ci się z pewnością,
szczególnie że wtedy zaczniemy wspól-
nie wchodzić w temat 8051 coraz głębiej.
W tym odcinku kolejna porcja podsta-
wowych informacji które pozwolą Ci na
oswojenie siÄ™ z naszym 8051!
Pamięć mikroprocesowa
Jak zapewne pamiętasz, w pierw-
szym odcinku naszego cyklu mówiąc
Część 2
o budowie  rasowego mikrokontrolera
jednoukładowego, wspominaliśmy
Mikrokontroler 8051  opis układu
o drugim ważnym elemencie jego archi-
tektury, a mianowicie  pamięci. Ten od-
cinek naszego cyklu zostanie poświęco-  wszystkie interesujące nas pamięci bę- włączeniu zasilania układu. W drugiej pa-
ny właśnie jej. dą miały architekturę 8 bitową  czyli mięci znajdują się zmienne (tak jak
Prawdopodobnie spotkałeś się bajtową bowiem nasz bohater  8051 w równaniach matematycznych) prze-
wcześniej z pojęciami pamięci RAM, jest mikrokomputerem 8 bitowym. chowujące określone dane i wyniki obli-
ROM, EPROM, EEPROM itd. Wszystkie  podczas omawiania mikroprocesora, czeń. W 8051 dodatkowo w wydzielonej
one odnoszą się do cyfrowych układów często przy okazji pamięci zamiast sło- części tej drugiej pamięci znajdują się tak-
scalonych w strukturze których możliwe wa  komórka pamięci będziemy uży- że specjalne komórki zwane rejestrami.
jest zapisanie i przechowanie informacji. wać zamiennie słowa  rejestr . Prak- W słownictwie związanym z 8051 używa
Od wielu lat na rynku elektronicznym tycznie każdy rejestr w 8051 możemy się pojęcia SFR  z angielskiego  Special
znajduje się wiele takich układów, różnią- traktować jako oddzielną, posiadająca Function Registers  rejestry specjalne-
cych się typem, pojemnością pamięci, swoje miejsce (adres) komórkę go przeznaczenia ( funkcji specjalnych ,
technologią wykonania, wszystko to bar- w przestrzeni jego pamięci danych. jak kto woli). Tego zwrotu będziemy
dzo często narzuca sposób ich wykorzys-  każdy rejestr w 8051 jest 8 bitowy, w przyszłości używać bardzo często, war-
tywania w konkretnych rozwiązaniach niektóre z nich tworzą pary , dlatego to więc abyś sobie go zapamiętał.
układowych. czasami będziemy mówić o 16 bito- Rysunek 1 przedstawia poglądową
Zacznijmy od krótkiej powtórki doty- wych rejestrach (2x8bitów = 16bi- mapę pamięci zawartą w mikroproceso-
czącej samych pamięci i sposobu prze- tów = 2 bajty); rze 87C51 (8751). Już wiesz że ten typ
chowywania w nich informacji, i tak:  powinieneś wiedzieć że w prawie każ-  51 ki charakteryzuje się 4 kB (kilobajta-
 podstawową jednostką przechowania dym wskazanym (zaadresowanym) re- mi) wewnętrznej pamięci stałej do prze-
informacji w cyfrowych pamięciach jestrze (jak w komórce pamięci) mo- chowywania programu typu EPROM. Do-
jest bit; żesz zapisać dowolną liczbę 8 bitową,
 bit może przyjmować jedna z dwóch lub odczytać wskazany (zaadresowa-
wartości: logiczne 0 lub 1; ny) rejestr;
 podobnie jak np. w układzie metrycz-  traktuj więc rejestr jako miejsce zapisu
nym, gdzie w celu uproszczenia pomia- lub odczytu 8 bitów (bajtu) informacji,
rów wprowadzono jednostki pochodne tak jak to ma miejsce w komórce 8 bi-
odległości (metr = 100cm = 1000mm), towej pamięci (dla maniaków cyfrówki
tak w przypadku jednostek informacji z serii TTL rada  możesz sobie wyob-
wprowadzono bajt, który jest równy razić rejestr fizycznie jako trochę zmo-
8 bitom. dyfikowany np. 74198 lub 74373).
 w odróżnieniu do typowych dziesięt- Wracajmy jednak do tematu.
nych systemów liczenia, przy omawia- Z pierwszego odcinka wiesz już że
niu rozmiarów jak i odwoływania się 8051 posiada 2 rodzaje pamięci. Pierw-
Rys. 1. Organizacja pamięci
do pamięci  stosuje się szesnastkowy sza służy do przechowywania instrukcji
wewnętrznej w mikrokontrolerze 8751.
(heksadecymalny) zapis liczb; programu, który ma być wykonany po
ELEKTRONIKA DLA WSZYSTKICH 6/97 41
Też to potrafisz
datkowo układ ten (podobnie jak wszyst- powiednią dla niego procedurę obsługi
kie inne  51 ki) zawiera w swojej struktu- (przyjęcia) przerwania.
rze 128 B (bajtów) pamięci danych RAM. W celu ujednolicenia systemu prze-
Tak więc masz do dyspozycji rwań procesora w pamięci programu
4kB = 4096 bajtów pamięci stałej EPROM określono odpowiednie miejsca  adresy
 wszystkie komórki są zawsze numero- od których rozpoczyna się wykonywanie
wane (adresowane) jak wspomniano określonych procedur obsługi przerwań.
wcześniej w kodzie heksadecymalnym W podstawowej rodzinie  51 są to adre-
 tworzącej przestrzeń adresową o adre- sy: 3, 11, 19, 27, 35 i 43 (03h, 0Bh, 13h,
sach: 0  4095 (dziesiętnie) lub 0000h 1Bh, 23h, 2Bh szesnastkowo). Każdy
 1FFFh (heksadecymalnie). Dalej będzie- z tych adresów określa początek wykona-
my posługiwać się tylko tym drugim spo- nia innej procedury obsługi przerwania,
sobem zapisu. dla 8051 są one następujące:
Wewnętrzna pamięć danych zajmuje 0003h  przerwanie zewnętrzne z we-
adresy: 00h  7Fh (0  127 dziesiętnie). jścia (końcówki) INT0 (pin 12)
Musisz w tym miejscy wiedzieć że pomi- 000Bh  przerw. wynikłe z przepełnienia
mo, że adresy komórek pamięci RAM po- pierwszego wewnętrznego licz-
Rys. 2. Rozmieszczenie adresów
krywają się z częścią adresów pamięci nika T0 procesora
zgłoszeń przerwań w 8051.
programu, fizycznie w układzie nie wy- 0013h  przerwanie zewnętrzne z we-
stępuje żaden konflikt, bowiem dostęp jścia (końcówki) INT1 (pin 13)
do omawianych obydwu rodzaj pamięci lać jego początkowa wartość wynosi 001Bh  przerw. wynikłe z przepełnienia
jest zupełnie inny. Mikroprocesor korzys- 0 (zero), toteż pierwszym rozkazem po- drugiego wewnętrznego liczni-
ta z innych poleceń w przypadku czytania branym z tej pamięci będzie ten umiesz- ka T1 procesora
lub zapisu do wewnętrznych 128 bajtów czony pod adresem 0000h. 0023h  przerwanie wynikłe z odebrania
pamięci RAM, inne rozkazy służą do ob- Licznik rozkazów oznaczany jest lub zakończenia wysyłania da-
sługi pamięci programu. w skrócie jako PC z angielskiego nej poprzez wewnętrzny port
Poniżej pokrótce opiszę oba rodzaje  Program Counter  licznik programu szeregowy mikroprocesora
pamięci i ich znaczenie w pracy mikro- (rozkazów)  warto o tym pamiętać. Licz- Dodatkowo w układach 8052, 8032
kontrolera. nik PC ma długość 16 bitów, czyli maksy- (8752) występuje:
malnie może liczyć do 65535 włącznie, 002Bh  przerw. wynikłe z przepełnienia
Wewnętrzna pamięć
po czym zostaje wyzerowany. Stąd wyni- trzeciego wewnętrznego liczni-
programu
ka m.in. maksymalna wielkość pamięci ka T2.
Program napisany przez użytkownika, programu z jakiej procesor może korzys- Na rysunku 2 zilustrowano rozmiesz-
dedykowany konkretnemu zastosowaniu tać a mianowicie 64kB (65536 bajtów). czenie w/w adresów zgłoszenia przerwań.
8051 ki powinien zostać umieszczony Tak dużą pamięć posiadają niektóre Praktycznie wygląda to tak, że w mo-
wewnątrz mikrokontrolera  czyli w we- mutacje  51-ki, ale prawie każdy z mikro- mencie zgłoszenia któregoś z wymienio-
wnętrznej pamięci programu. Jak powie- procesorów może współracować z tak nych przerwań, automatycznie zachowa-
działem wcześniej pamięć ta służy mikro- dużą pamięcią zewnętrzną. na zostaje aktualna wartość licznika PC,
kontrolerowi wyłącznie do odczytu rozka- W trakcie pobierania i wykonywania a następnie zostaje wpisana do niego
zów programu. W pamięci tej mogą być przez mikrokontroler kolejnych instrukcji wartość odpowiednia do rodzaju prze-
umieszczone także argumenty bezpo- licznik PC zmienia swoja wartość zawsze rwania jak opisano wyżej. Czyli np. jeżeli
średnie rozkazów oraz tablice ze stałymi wskazując na aktualny adres kolejnego wewnętrzny licznik procesora T1 został
potrzebnymi do pewnych działań progra- rozkazu w pamięci programu. Nasuwa przepełniony, do PC zostaje wpisana war-
mu, np. tablica sinusów, tablica czasów się prosty wniosek, że maksymalną war- tość 001Bh, po czym mikroprocesor roz-
zachodu słońca, lub cokolwiek innego. tość jaką może osiągnąć licznik w na- poczyna wykonywanie programu od tego
Mikroprocesor 8051 ma możliwość póz- szym przypadku będzie 4095  bowiem adresu w pamięci programu. Po zakoń-
niejszego pobrania ze swojej pamięci pro- w naszym przykładzie z kostką 87C51 czeniu wykonywania czynności związa-
gramu takiej stałej i wykorzystania jej np. mamy do dyspozycji 4kB pamięci progra- nych z przepełnieniem T1, licznik rozka-
w obliczeniach. Stała i tablice wprowadza- mu. O tym co się stanie po przekroczeniu zów PC przyjmie ponownie wartość jak
ne są przez programistę na etapie tworze- tej wartości powiem pózniej. z przed nadejścia przerwania i program
nia programu, ale o tym innym razem. Na początek warto tez wiedzieć, że  potoczy się dalej.
Jeżeli program został przez nas utwo- oprócz wspomnianego miejsca  star- Dokładne objaśnienie działania syste-
rzony a następnie zapisany w pamięci towego programu  czyli adresu 0000h mu przerwań omówię przy innej okazji,
programu (o tym jak to się robi będzie (zero), w przestrzeni adresowej pamięci na razie istotne jest abyś wiedział o ist-
mowa dalej), mikrokontroler jest gotowy programu istnieje kilka innych istotnych nieniu adresów specjalnych w pamięci
do działania. Otóż po włączeniu zasilania dla programisty miejsc. Czy pamiętasz programu procesora 8051.
dzięki obwodowi  Reset (cz. I artykułu), potoczne objaśnienie pojęcia  przer-
Wewnętrzna pamięć danych
wyzerowane zostają prawie wszystkie wanie , pisaliśmy o tym w EdW 4/97?,
wewnętrzne układy mikroprocesora jeśli nie to radzę sobie to przypomnieć. W mikrokontrolerze pamięć ta prze-
w tym także uwaga:  licznik rozkazów . Otóż wyobraz sobie, że nasz mikroproce- znaczona jest dla użytkownika do prze-
Ten ostatni służy mikroprocesorowi do sor wykonuje określony program pobiera- chowywania argumentów wartości
kolejnego pobierania rozkazów z pamięci jąc kolejne instrukcji z pamięci programu, zmiennych oraz wyników obliczeń aryt-
programu, a dokładnie do adresowania która to jest adresowana poprzez licznik metyczno  logicznych.
(czyli wskazywania) gdzie w przestrzeni rozkazów PC. Wtem nadchodzi  przer- W zależności od typu mikrokontrolera
adresowej pamięci programu znajduje się wanie  mikroprocesor w zależności co pamięć ta ma pojemność 128 lub 256
kolejna komenda. Jak się możesz domyś- było jego zródłem powinien wykonać od- bajtów.
42 ELEKTRONIKA DLA WSZYSTKICH 6/97
Też to potrafisz
Rys. 3. Wewnętrzna pamięć danych
w mikrokontrolerze 8051. Rys. 4.
Dla 8051 wynosi ona 128 B (8052  256 B). nie obszaru, to użytkownik może adreso- tu czyli fizycznie do jego wyprowadzeń.
Na rysunku 3 przedstawiono organizację wać ją poprzez proste adresowanie. Zapis do odpowiedniego rejestru portu
wewnętrznej pamięci danych. W pamięci użytkowej komórki o adre- spowoduje pojawienie się kombinacji na
W przestrzeni tej pamięci można wy- sach 0...7, 8...15, 16...23 i 24...31 tworzą końcówkach mikrokontrolera, odczyt re-
różnić kilka obszarów. Dwa główne, cztery zbiory uniwersalnych rejestrów jestru pozwoli użytkownikowi na zbada-
wspomniane wcześniej to obszar pamię- roboczych. Każdy z rejestrów oznacza nie poziomu logicznego na wybranej linii
ci użytkowej, oraz obszar rejestrów spe- się symbolami R0...R7. W danej chwili portu.
cjalnych SFR. Pamięć użytkowa zajmuje użytkownik ma możliwość dostępu (po- Jak widać z tabeli nie wszystkie 128
128 komórek, adresy: 0  127 przez nazwy R0...R7) tylko do jednego adresów z przestrzeni SFR jest wykorzys-
(00h  7Fh), natomiast obszar SFR obe-  banku (zbioru) rejestrów roboczych. tanych.  Puste adresy nie nadają się do
jmuje adresy 128  255 (80h  FFh), z tym Przełączanie zbiorów odbywa się po- wykorzystania przez użytkownika. Nie
że nie wszystkie są wykorzystane przez przez odpowiednie ustawienie dwubito- jest to bynajmniej marnotrawienie cen-
rejestry specjalne. wego wskaznika zwanego jako RS nych bajtów pamięci, lecz czysta przezor-
I chociaż pamięć użytkownika podzie-  z angielskiego  Register bank Swich . ność projektantów rodziny 8051, którzy
lona jest na obszary, do których dostęp O szczegółach powiemy przy okazji oma- konstruując rozszerzone wersje poczci-
może odbywać się przez tzw. indeksowa- wiania znaczenia poszczególnych rejest- wej  51 ki wyposażają je w nowe dodat-
rów specjalnych SFR. kowo bloki funkcjonalne, a w wolnych
Tabela 1. Rejestry specjalne
Rejestry R0 i R1 z aktywnego banku miejscach przestrzeni SFR umieszczane
mikrokontrolera 8051.
pełnią rolę wskazników danych do po- są dodatkowe rejestry sterujące ich pracą
średniego adresowania wewnętrznej pa- (wspomniane  pomosty ).
Adres Symbol Nazwa
mięci danych jak i zewnętrznej. W przy- I tak np. w mikrokontrolerze 8052
E0h ACC Akumulator
F0h B Rejestr B padku adresowania pamięci wewnętr- umieszczono dodatkowy licznik T2, do
D0h PSW SÅ‚owo stanu programu
znej można adresować cały obszar 8051 sterowania którego niezbędne stało się
81h SP 8 bitowy wskaznik stosu
czyli adresy 0...7Fh. Sposoby adresowa- zaimplementowanie w strukturze SFR re-
83h DPH bity 8  15 wskaznik danych
nia pamięci przedstawimy przy okazji jestrów T2CON, TH2, TL2, RLDH
82h DPL bity 0  7 DPTR
80h P0 Port 0
 pierwszych kroków w asemblerze . i RLDL  patrz tabela 1.
90h P1 Port 1
Na rys. 3 górna część przestrzeni adre- W tym miejscy widoczny jest geniusz
A0h P2 Port 2
sowej: 80h...FFh zajmują SFR. W tabe- architektury jednoukładowców z rodziny
B0h P3 Port 3
B8h IP Rejestr sterujÄ…cy
li 1 opisano symbole oraz nazwę każdego  51. Otóż producenci wytwarzając nowe
priorytetem przerwań
z nich. W tym miejscu warto zapamiętać mutacje tych procesorów, nie musza się
A8h IE Rejestr kontrolny sterujÄ…cy
iż rejestry specjalne stanowią niejako martwić o kompatybilność programo-
pracą systemu przerwań.
88h TCON Rejestr kontrolny pracy sprzętowy  pomost komunikacyjny po- wą, czy architekturę dostępu do poszcze-
liczników T0 i T1 oraz
między programistą a wszystkimi bloka- gólnych bloków układu. W każdym przy-
przerwań INT0 i INT1
mi funkcjonalnymi mikrokontrolera. Dla padku dodatkowe rejestry specjalne ste-
89h TMOD Rejestr sterujÄ…cy trybem
przykładu, aby  dobrać się i odpowied- rujące ich pracą umieszczane są w tej sa-
pracy liczników T0 i T1
8Ch TH0 bity 8  15 16 bitowy
nio ustawić wewnętrzny licznik T1, nale- mej przestrzeni SFR, w taki sam sposób
8Ah TL0 bity 0  7 licznik T0
ży odpowiednio zmodyfikować zawar- dostępnej dla użytkownika. Czyli jeżeli
8Dh TH1 bity 8  15 16 bitowy
tość rejestru TMOD  (rejestr trybu liczni- np. któryś z producentów zechce umieś-
8Bh TL1 bity 0  7 licznik T1
C8h T2CON rejestr sterujący licznikiem T2 ków T0 i T1) oraz TCON (rejestr sterujący cić w strukturze 8051 8 bitowy przetwor-
(w 8052)
licznikami oraz zgłaszaniem przerwań ze- nik analogowo  cyfrowy, to prawdopo-
CDh TH2 bity 8  15 16 bitowy
wnętrznych INT0 i 1). dobnie w wolnych miejscach obszaru
CCh TL2 bity 0  7 licznik T2
CBh RLDH bity 8  15 Słowo ładowane W przestrzeni adresowej SFR znajdu- SFR umieści dodatkowe rejestry: a) re-
CAh RLDL bity 0  7 do licznika T2
ją się także rejestry będące jednocześnie jestr sterujący pracą przetwornika, oraz b)
98h SCON Rejestr sterujÄ…cy portem
portami wejścia wyjścia, tymi o których rejestr danych z przetwornika, prawda że
szeregowym
mówiliśmy w poprzednim odcinku arty- proste, no przynajmniej z naszego punktu
99h SBUF Bufor portu szeregowego
87h PCON Rejestr sterujÄ…cy zasilania
kułu. Dzięki temu możliwy jest łatwy widzenia.
i szybki dostęp do dowolnych bitów por- Cd. na str. 46
ELEKTRONIKA DLA WSZYSTKICH 6/97 43
Też to potrafisz
Kontynuujemy opis układów we-
wnętrznych mikrokontrolera 8051.
W tym odcinku wyjaśnimy pojęcie
i znaczenie  stosu i jednostki aryt-
metyczno-logicznej
Mikrokontrolery?
Przy okazji wszystkim  niecierpli-
wym lub  wÄ…tpiÄ…cym w swoje
możliwości dotyczące programowa-
nia 8051 jeszcze raz przypominam,
że w tej części cyklu nie opisujemy
szczegółowo wszystkich komponen-
To takie proste...
tów procesora, jedynie w sposób
przystępny staramy się wspólnie
zrozumieć fakt istnienia tych ele-
mentów oraz ich znaczenie dla całe-
go procesora. Autor robi to celowo,
tak abyś mógł drogi Czytelniku
 oswoić się z naszym bohaterem.
Wszystkie omówione elementy ar-
chitektury 8051 będziemy sukce-
sywnie  przywoływać z pamięci
i sprawdzać ich działanie w praktyce
Część 3
podczas  nauki programowania
8051 . Wtedy to zdobyta i  oswo- Mikrokontroler 8051  opis układu
jona wiedza okaże się kluczem do
sukcesu którym będzie z pewnością
pierwszy napisany przez Ciebie pro- Na początek krótkie przypomnienie: try wskaznikowe R0 i R1) lub bezpośred-
w poprzednim odcinku zajmowaliśmy się ni odwołując się niejako  wprost do da-
gram na 8051.
wewnętrzną pamięcią programu mikro- nej komórki pamięci. Pozostałe 128 baj-
procesora oraz wewnętrzną pamięcią da- tów pamięci o adresach 80h...FFh to ob-
nych. W jej obrębie pobieżnie omówiliś- szar omawianych w skrócie  rejestrów
my istnienie  rejestrów specjalnych specjalnych  SFR .
 SFR oraz poznaliśmy funkcję licznika Obok na rysunku 1b pokazałem struk-
rozkazów PC. Szczegółowy opis SFR oraz turę wewnętrznej pamięci danych w mik-
 sprzętowe działanie licznika rozkazów rokontrolerze 8052. Jak widać w prze-
opiszemy przy okazji omawiania cyklu strzeni tej istnieje dodatkowa, niejako
rozkazowego procesora oraz wstępu do zdublowana pamięć danych o adresach
asemblera. Na tym etapie jednak naszym 80h...FFh. Przeznaczenie jej jest takie jak
celem będzie poznanie pozostałych blo- pamięci użytkownika o adresach
ków funkcjonalnych 8051-ki. 00h...7Fh, czyli w całości (128 bajtów)
można ja wykorzystać do swoich potrzeb
Wewnętrzna pamięć
umieszczając w niej te wyniki obliczeń
danych w 8052 oraz pozostałe zmienne programowe,
Wbrew pozorom tytuł tego akapitu nie które po prostu  nie mieszczą się w ob-
wykracza poza ramy naszego minikursu rębie pamięci danych użytkownika o ad-
na temat 8051. Jak już wiesz (z części I) resach 00h...7Fh. Ze względu jednak że
mikrokontroler 8052 to rozszerzona wer- ta dodatkowa, nazywana często  nakład-
sja  51 ki, posiadająca: kową , pamięć danych pokrywa się adre-
 dodatkowy 16 bitowy uniwersalny sowo (adresy 80h...FFh) z obszarem re-
układ licznikowy jestrów specjalnych SFR, należało ją w ja-
 dodatkowe 128 bajtów wewnętrznej kiś sposób rozróżnić, tak aby np. podczas
pamięci danych RAM.
odczytu lub zapisu którejś z komórek tej
I właśnie tym drugim elementem za- pamięci nie zmodyfikować przypadkiem
jmiemy się teraz. Na rysunku 1a przed- któregoś z rejestrów specjalnych SFR.
stawiłem znaną Ci już strukturę wewnęt- Otóż konstruktorzy kontrolera 8052 roz-
rznej pamięci danych w 8051. Jak mówi- wiązali ten problem w prosty sposób
liśmy poprzednio obszar o adresach: umożliwiając dostęp do tej dodatkowej
00h...7Fh (128 bajtów) zajmuje pamięć  nakładkowej części pamięci , jedynie za
danych użytkownika, którą można adre- pośrednictwem adresowania pośrednie-
sować w sposób pośredni (poprzez rejes- go. Toteż jeżeli np. w przyszłości, drogi
ELEKTRONIKA DLA WSZYSTKICH 7/97 43
Też to potrafisz
W przypadku mówiąc  wskaznik stosu . Fizycznie jest
korzystania ze sto- on po prostu 8 bitowym rejestrem w ob-
su adresowanie szarze SFR, położonym pod adresem 81h
jest niekonieczne. (patrz tabela 1 w poprzedniej części).
Przy takim sposo- W mnemonice (nazewnictwie) proceso-
bie obsługi ko- rów MCS 51 posiada on symbol SP z an-
nieczne jest jednak gielskiego  stack pointer  wskaznik
zachowanie odpo- stosu.
wiedniej kolejności Jego zadaniem jest automatyczne
w zapisie i odczy- wskazywanie miejsca aktualnego wierz-
cie tak aby nasze chołka stosu. Tak więc w przypadku odło-
cenne dane nie żenia bajtu na stos, wskaznik SP jest au-
 pomieszały się . tomatycznie (bez ingerencji programisty)
Otóż taki upo- zwiększany o 1, w przypadku zdjęcia da-
Rys. 1. Pamięć w procesorach 8051 oraz 8052
rzÄ…dkowany spo- nej ze stosu jest on zmniejszany. Sytua-
sób przechowywa- cję te wyjaśnia rysunek 3.
Czytelniku, odwołasz się (zaadresujesz) do nia danych charakteryzuje właśnie stos. Podsumujmy więc: stos jest hierar-
dowolnej komórki wewnętrznej pamięci Rysunek 2 wyjaśnia fizyczną budowę sto- chiczną strukturą do przechowywania da-
danych w sposób bezpośredni a wskazy- su. Jak widać wszystkie dane (bajty) przy nych (bajtów) z obszaru wewnętrznej pa-
wanym przez Ciebie adresem komórki bę- zapisie odkładane są  na stos jedna na mięci RAM procesora (włączając SFR)
dzie np. F0h (240 dziesiętnie) to z pewnoś- drugą. Na wierzchołku stosu znajduje się a położenie jego wierzchołka jednoznacz-
cią  dobierzesz się do .... rejestru spe- zawsze ostatnio odłożona dana (w naszym nie określa jego wskaznik  SP. Przy ko-
cjalnego o symbolu B (patrz tabela 1 w po- przykładzie oznaczona jako X), toteż aby rzystaniu ze stosu obowiązuje zasada,
przednim odcinku), natomiast jeżeli wyko-  dobrać się do danej leżącej pod nią (Y)  ile bajtów odłożyłeś na stos, tyle potem
nasz to samo tym razem jednak adresując należy najpierw  zdjąć ze stosu daną X, musisz zdjąć , tak aby struktura stosu nie
komórkę w sposób pośredni poprzez re- a potem dopiero odczytać Y. Można to została zakłócona. W praktyce ma to
jestry wskaznikowe R0 lub R1, to doko- porównać do stosu talerzy ustawionych szczególne znaczenie, bowiem stos wy-
nasz zapisu (lub odczytu) komórki położo- jeden nad drugim. Odkładamy talerze na korzystywany jest nie tylko poprzez świa-
nej w obszarze nakładkowym  czyli częś- stos i zdejmujemy ze stosu. Nie możemy dome działanie użytkownika lecz także
ci dodatkowej pamięci danych. wyjąć talerza  z głębi stosu  dostajemy przechowywane są na nim ważne dla
Oczywiście jeżeli wykonasz tą ostat- się do niego dopiero po zdjęciu wszystkich działania całego mikrokontrolera adresy
nią operację programując kostkę 8051, to stojących na nim. powrotów z podprocedur oraz procedur
w efekcie zaadresowania pośredniego  Po co jednak jest ten  stos , czy nie obsługi przerwań, czyli innymi słowy mó-
komórki o adresie z zakresu 80h...FFh jest to tylko niepotrzebna komplikacja wiąc, aktualne zawartości 16 bitowego
trafisz przysłowiową  kulą w płot , czyli ..... , z pewnością wielu z Was w tej licznika rozkazów PC.
nie uzyskasz oczekiwanego efektu , bo chwili zadaje sobie to pytanie. Otóż jak No tak ale przecież stos składa się
po prostu w tym obszarze 8051 adreso- się okaże pózniej a szczególnie podczas z 8 bitowych komórek pamięci, a licznik
wanym pośrednio po prostu nie ma nic. nauki programowania, struktura ta speł- rozkazów (programu PC) jest 16 bitowy.
Warto o tym pamiętać, bowiem zgodnie nia niezmiernie ważna rolę podczas wy- W takim przypadku procesor na stos od-
z zasadą kompatybilności w dół, program konywania programu przez mikroproce- kłada najpierw młodszy bajt rejestru PC,
napisany na procesor o mniejszych moż- sor. Na tym etapie powinieneś wiedzieć a następnie starszy bajt, wskaznik stosu
liwościach (np. 8051) z pewnością będzie tylko dwie podstawowe rzeczy: stos słu- SP zostaje wiec zwiększony automatycz-
pracował poprawnie na 8052, ale nie od- ży do przechowywania zmiennych lub re- nie o 2. Tak więc w prosty sposób można
wrotnie. To samo dotyczy każdego człon- jestrów SFR i druga sprawa: dostęp do przechowywać inne rejestry podwójne
ka rodziny MCS 51. nich odbywa się w sposób uporządkowa- np. wskaznik adresu zewnętrznej pamię-
ny  w odpowiedniej kolejności, jak opi- ci  DPTR (tabela.1), składający się
Stos i wskaznik stosu sałem wcześniej. z dwóch 8 bitowych rejestrów DPH (ad-
Z pojęciem  stosu miałeś okaz-  No tak ale gdzie jest ten stos ?.... , już res 83h) oraz DPL (adres 82h).
ję, drogi Czytelniku, spotkać się w artyku- odpowiadam. W przypadku procesorów W przypadku rejestru DPTR jak i innych
le omawiającym ogólne założenia doty- rodziny MCS 51 stos umieszczony jest... SFR przechowywanie na stosie odbywa
czące mikroprocesorów, pisaliśmy o tym uwaga !, w wewnętrznej pamięci danych się  na żądanie użytkownika  w potrze-
w EdW. Jeżeli nie do końca rozumiesz is- użytkownika, czyli w obszarze o adresach bnym dla niego momencie. O tym jak
totÄ™ stosu postaram siÄ™ Ci jÄ… jeszcze raz 00h...7Fh.
przedstawić. Otóż najprościej można Jak wynika z ry-
stos określić jako bardzo prostą w działa- sunku 2 ilość tej pa-
niu strukturę przechowującą bajty. Pod mięci zajętej przez
pojęciem  przechowania rozumiemy stos będzie się zmie-
oczywiście operacje zapisu z następnie niać i zależeć od te-
odczytu dowolnej zmiennej lub rejestru go ile bajtów odłoży-
SFR. liśmy na ten stos.
Wiesz już że w przypadku takich ope- Aby ściśle okre-
racji tylko z udziałem np. wewnętrznej ślić miejsce położe-
pamięci danych użytkownika, aby doko- nia stosu, w archi-
nać zapisu (odczytu) musisz daną komór- tekturze  51 ki zna-
kę pamięci najpierw zaadresować  czyli jduje się tzw. licznik
Rys. 2. Zasada działania stosu
po prostu podąć jej fizyczny adres. stosu a fachowo
44 ELEKTRONIKA DLA WSZYSTKICH 7/97
Też to potrafisz
f) po odłożeniu na stos licznika PC (2 baj-
ty), procesor wykonuje procedurÄ™ ob-
sługi przerwania
g) w tej procedurze użytkownik świado-
mie używa stosu do przechowywania
tymczasowo pewnych wartości, zapi-
sujÄ…c na stos np. 3 bajty (te 3 bajty zna-
jdą się w sąsiedztwie bezpośrednio
 nad bajtami z licznika rozkazów PC)
h) z powodu błędu w programie  popeł-
nionego przez użytkownika  pod ko-
Rys. 3. Stos a wskaznik stosu
niec procedury zostają zdjęte ze stosu
dwa (a nie trzy) bajty, które przechowy-
w praktyce i dlaczego przechowuje się re- potrzeb (a nie na stos) , musisz na począt- wały dane użytkownika
jestry na stosie dowiesz się drogi Czytelni- ku swego programu zmodyfikować i) następuje zakończenie procedury ob-
ku przy okazji nauki programowania 8051. wskaznik SP wpisując do niego wartość sługi przerwania, procesor zdejmuje ze
Na rysunku 4 przedstawiono dwie sy- np. 20h, co jest jednoznaczne z powie- wierzchołka stosu adres powrotu do
tuacje w których używany jest stos. Pier- dzeniem mikroprocesorowi:  ... uważaj pętli głównej programu (2 bajty, które
wsza dotyczy przechowania rejestru licz- mikroprocesorze, twój stos będzie rozpo- wpisuje do licznika rozkazów PC) i tu
nika rozkazów (programu) podczas obsłu- czynał się od adresu 21h, (a nie od 08h), następuje ......  kompletny klops
gi procedury po nadejściu przerwania, adresy 08h...20h są przeznaczone dla  program prawdopodobnie  zawiesi
druga obrazuje jak świadomie można wy- moich potrzeb... . się lub po prostu  zwariuje .
korzystać stos do przekazywania danych Na koniec jeszcze jedna istotna uwa- Powód tego jest oczywisty, do liczni-
pomiędzy rejestrami. W praktyce ten ga. Otóż jak widać ze sposobu działania ka rozkazów PC nie zostały wpisane
ostatni przypadek jest niezmiernie rzadko stosu, poprzez nieumiejętne korzystanie wcześniej przechowane 2 bajty będące
wykorzystywany, lecz w tym przykładzie z niego bardzo łatwo jest go  zamazać pierwotną zawartością PC, a za to wpisa-
chodzi nam o zrozumienie samego spo- lub mówiąc inaczej zniszczyć. Przykła- ny zostaje bajt pozostawiony przez użyt-
sobu działania struktury stosu. dem niech będzie sytuacja w której: kownika (zawierający najpewniej inną
Na koniec dwie pozostałe ważne infor- a) mikroprocesor wykonuje swój rutyno- wartość liczbową) w procedurze obsługi
macje dotyczące stosu. Otóż po włącze- wy program przerwania, oraz starszy bajt licznika roz-
niu zasilania procesora (lub jego resecie b) nagle nadchodzi przerwanie z wejścia INT0 kazów PC.
oczywiście) wskaznik stosu SP przyjmuje c) procesor przerywa działanie pętli głów- W tej sytuacji procesor powróci w zu-
domyślnie wartość 07h  czyli po prostu nej programu pełnie inne miejsce programu, niż w te
7, wskazując tym samym że wierzchołek d) następuje skok do wykonania procedu- w którym się znajdował w momencie na-
stosu  adres umieszczenia następnej da- ry obsługi przerwania dejścia przerwania, czego skutki dla działa-
nej  po odłożeniu jej na stos położony e) zanim jednak to nastąpi procesor auto- nia procesora okazać się mogą opłakane.
będzie w wewnętrznej pamięci danych matycznie zapisuje na stos aktualną za- Pamiętajmy zatem o stosie jako
pod adresem 08h (07h +1 zgodnie z opi- wartość licznika rozkazów PC (tak aby o ważnej strukturze w architekturze
saną wcześniej zasadą). potem wiedzieć gdzie ma wrócić do 8051, oraz o tym że tylko umiejętne
Jeżeli więc odłożymy jakiś bajt na pętli głównej programu) iświadome, oczywiście, z niego korzysta-
stos, najpierw licznik SP zostanie auto-
matycznie zwiększony o 1 (wskazując te-
a)
raz 08h) , a następnie do komórki pamię-
ci o tym adresie 08h, zostanie wpisany
ten bajt. Przy zdjęciu ze stosu kolejność
będzie odwrotna, najpierw zdjęty zosta-
nie nasz bajt, a następnie zmniejszony
zostanie wskaznik SP o 1.
Wskaznik stosu SP tak jak każdy rejestr
SFR może być dowolnie modyfikowany
przez programistÄ™ poprzez zapisanie w nim
dowolnej 8 bitowej wartości (0...255)
W praktyce jednak sytuacja taka wy-
stępuje tylko wtedy, jeżeli chcemy zmie-
nić położenie stosu (czyli go przesunąć)
b)
na poczÄ…tku wykonywania programu.
Operacja ta z oczywistych względów ma
sens jeżeli stos w danej chwili jest
 pusty , w przeciwnym razie przy lekko-
myślnej modyfikacji wskaznika SP wszys-
tkie dane odłożone wcześniej na stos sta-
ną się niedostępne (przynajmniej z punktu
widzenia działania samego stosu).
I tak jeżeli np. zechcesz drogi Czytelni-
ku wykorzystywać wewnętrzną pamięć
Rys. 4. Przykłady wykorzystania stosu
danych o adresach 08h...20h dla swoich
ELEKTRONIKA DLA WSZYSTKICH 7/97 45
Też to potrafisz
nie przynosi często efekty w postaci  w przypadku dzielenia: reszta z dziele- Znając pobieżnie główne 3 rejestry
znacznego przyśpieszenia działania pro- nia dwóch liczb 8 bitowych. związane z ALU zapoznajmy się wstępnie
gramu oraz zmniejszenia jego rozmiarów. Oczywiście zarówno rejestr B jak z operacjami jakie można wykonywać przy
O tym jak w praktyce korzystać z dobro- i akumulator A mogą być wykorzystywa- jej pomocy na liczbach 8 bitowych, są to
dziejstw stosu powiemy dowiemy siÄ™ ne dowolnie jako rejestry uniwersalne. a) operacje arytmetyczne
podczas nauki programowania. Trzecim ważnym rejestrem związa-  dodawanie argumentów
nym z ALU jest  słowo stanu programu  dodawanie z przeniesieniem
Jednostka arytmetyczno-
nazywane w skrócie jako PSW (od ang.  odejmowanie z pożyczką
-logiczna  program status word )  patrz rysu- W tych trzech przypadkach pierwszy
Pod tym pojęciem kryje się jeden nek 5. Z tabeli 1 możemy odczytać że re- z argumentów operacji (składnik lub od-
z elementów architektury 8051 odpowie- jestr ten wchodzi w skład SFR a jego ad- jemna) umieszczana jest w akumulato-
dzialny za wykonywanie operacji arytme- res to D0h (208 dziesiętnie). W skład te- rze, drugi składnik lub odjemnik umiesz-
tyczno  logicznych. Blok ten nazywany go rejestru wchodzi 8 bitów nazywanych czony jest w wewnętrznej pamięci da-
w skrócie jako ALU, potrafi wykonywać znacznikami z których cztery informują nych, lub jest argumentem bezpośred-
operacje na liczbach (składnikach) 8 bito- o przebiegu wykonania operacji arytme- nim rozkazu. Wynik działania umieszcza-
wych. Z matematyki wiemy że do wyko- tyczno  logicznych. I tak: ny jest w akumulatorze. Dodatkowo
nania najprostszego działania dwuskład- w słowie PSW ustawiane są odpowied-
nikowego potrzebne sÄ…: po pierwsze nio znaczniki: przeniesienia C i nadmiaru
składniki, po drugie w wyniku działania OV, co jest sygnałem przekroczenia za-
powstaje wynik, który też należy gdzieś kresu liczb 8 bitowych odpowiednio bez
przechować (umieścić). lub ze znakiem.
Do wprowadzenia (np. przez progra- Pozostałe operacje arytmetyczne to:
mistę) składników działania służą zaró-  mnożenie dwóch 8 bitowych liczb bez
Rys. 5. Zawartość rejestru stanu
wno niektóre rejestry specjalne z grupy znaku, gdzie jeden składnik wpisywa-
SFR jak i dowolna komórka wewnętrznej ny jest do akumulatora drugi do rejest-
pamięci danych. Dla różnych działań wy- PSW.0 (bit 0)  oznaczany jako P, to ru B, 16 bitowy wynik umieszczany
stępują jednak pewne ograniczenia znacznik parzystości, ustawiany automa- jest w rejestrach B.A odpowiednio
w swobodzie umiejscawiania składni- tycznie w każdym cyklu maszynowym starszy bajt w B , młodszy w A;
ków, lecz to temat na oddzielny artykuł. wskazuje na to czy liczba jedynek (na po-  dzielenie dwóch liczb 8 bitowych,
Jednym z najważniejszych rejestrów szczególnych) pozycjach bitowych w aku- gdzie dzielna umieszczana jest w aku-
z grupy SFR jest akumulator oznaczany mulatorze A jest parzysta (P=1) lczy nie- mulatorze A, a dzielnik w B, 8 bitowy
dużą literą A (ang.  accumulator ). parzysta (P=0). wynik dzielenia znajduje się po tej ope-
W tabeli 1 z poprzedniej części widać PSW.2 (bit2)  oznaczany jako OV, to racji w A, natomiast B przechowuje
że akumulator umieszczony jest pod adre- znacznik przepełnienia (nadmiaru), usta- resztę z dzielenia.
sem E0h (224 dziesiętnie). Rejestr ten słu- wiany w wyniku wykonania dodawania  inkrementacja (zwiększanie o 1) lub
ży jednostce ALU za miejsce pobrania ar- lub odejmowania, a przy operacji dziele- dekrementacja (zmniejszenie o 1) aku-
gumentu oraz umieszczenia wyniku więk- nia ustawienie go wskazuje na dzielenie mulatora lub dowolnej komórki w we-
szości operacji arytmetyczno logicznych. przez zero. wnętrznej pamięci danych
Rejestr ten może być adresowany bito- PSW.6 (bit 6)  oznaczany jako AC, to  korekcja dziesiętna wyniku zapisanego
wo (podobnie jak bajty spod adresów znacznik przeniesienia pomocniczego, do w akumulatorze
20h...2Fh  patrz poprzedni odcinek), dzię- którego wpisywane jest przeniesienie lub b) operacje logiczne
ki czemu możliwe jest testowanie dowol- pożyczka z bitu 3, wykorzystywany jest  logiczna suma (OR)
nych jego bitów bez potrzeby wykonywa- przy korekcji dziesiętnej liczb.  iloczyn logiczny (AND)
nia dodatkowych operacji logicznych. Mu- PSW.7 (bit 7)  znacznik przeniesienia  różnica symetryczna (EXOR)
szę w tym miejscu zasygnalizować że do- oznaczany jako C, do którego następuje  negacja (NOT) zawartości akumulatora A
datkowo rejestr A poza funkcjami zwiÄ…za- przeniesienie z najbardziej znaczÄ…cego bi-  przesuwanie cykliczne akumulatora
nymi z jednostką ALU służy do pobierania tu w wyniku wykonania operacji logicz- w lewo lub prawo, z lub bez przenie-
i umieszczania bajtów w zewnętrznej pa- nych przesunięć liczb 8 bitowych lub sienia (znacznika C  > PSW.7).
mięci danych, dokładnie o tym powiemy w wypadku przekroczenia wyniku poza Ze wszystkimi operacjami tak logicz-
w kolejnych odcinkach kursu. zakres liczb zapisanych w naturalnym ko- nymi jak i arytmetycznymi zapoznasz siÄ™
Przy przesyłaniu tego rejestru na stos dzie dwójkowym (>255). drogi Czytelniku podczas omawiania po-
(umieszczenie lub pobranie ze stosu) wyko- Pozostałe znaczniki nie mają związku szczególnych instrukcji, na razie ważne
rzystuje się adresowanie bezpośrednie tego z ALU, toteż ich omówieniem zajmiemy jest abyś zapamiętał omówione tu pod-
rejestru. Wtedy opisujemy go symbolem siÄ™ przy innej okazji. stawowe zagadnienia zwiÄ…zane z ALU
ACC (lub Acc). Dokładnie takie przypadki W praktyce najczęściej nie jest koniecz- procesora 8051 i pochodnych.
poznasz przy okazji programowania 8051. ne pamiętanie o wszystkich wymienio- Nie załamuj się, jeśli coś nie jest dla
Drugim po akumulatorze ważnym re- nych znacznikach, no może poza znaczni- Ciebie do końca jasne. Spróbuj rozjaśnić
jestrem współpracującym z ALU jest, tak- kiem C (PSW.7). Jak się okaże podczas na- obraz materiałem z poprzednich odcin-
że 8 bitowy, rejestr B. Służy on do uki programowania, znaczniki te działają ków. Jeśli to nie pomoże, zrozumiesz te
umieszczenia jednego ze składników jak gdyby automatycznie, to znaczy istnie- szczególy przy omawianiu praktycznych
mnożenia lub dzielenia, a po wykonaniu ją instrukcje programowania 8051, które przykładów.
jednej z tych operacji w rejestrze tym uwzględniają wspomniane znaczniki, toteż Sławomir Surowiński
umieszczany jest nie jest koniecznym badanie samego bitu c.d. w EdW 8/97
 w przypadku mnożenia starszy bajt 16- słowa PSW, a jedynie wykonanie odpo-
Uwaga! W części 2 (EdW 6/97, s. 41) zamiast:
 bitowego wyniku mnożenia dwóch wiedniej instrukcji która uwzględni odpo-
 Pamięć mikroprocesowa powinno być  Pamięć
liczb 8 bitowych wiedni stan danego znacznika.
mikroprocesora .
46 ELEKTRONIKA DLA WSZYSTKICH 7/97
Też to potrafisz
Mikrokontrolery?
Kontynuujemy opis mikrokontrole-
ra 8051. W tym odcinku powiemy
w jaki sposób można dołączyć ze-
To takie proste...
wnętrzną pamięć pogramu oraz
danych. Podane konkretne rozwiÄ…-
zania sprzętowe poparte schema-
tami elektrycznymi, z pewnością
dadzą Ci pojęcie na temat kontruo-
wania podstawowych bloków fun-
kcjonalnych małego systemu mik-
roprocesorowego. Opis takiego
układu będącego jednocześnie ba-
zą do naszej przyszłej nauki pro-
gramowania 8051 prezentujemy
Część 4
w niniejszym numerze EdW, warto
jednak abyś najpierw zapoznał się
Mikrokontroler 8051  opis układu
z niniejszym artykułem.
Zewnętrzna pamięć programu Kostka 87C51 (89C51) ma  tylko 4kB w przypadku mikroprocesora nie warto
Jak się dowiedziałeś z wcześniejszych (8x52 8kB pamięci programu), najczęściej na początku ryzykować uszkodzeniem
części naszego cyklu, procesor 8051 i mu te  tylko w zupełności wystarcza, lecz kostki z zapisanym w niej programem, le-
podobne mają możliwość dołączenia do- zdarza się że jest to za mało, wtedy ko- piej jest kod programu umieścić w ze-
datkowej zewnętrznej pamięci programu, nieczne jest dołączenie dodatkowej ze- wnętrznej pamięci EPROM.
np. typu EPROM. W pamięci tej podobnie wnętrznej pamięci programu w postaci A propos  pierwszego systemu
jak w wewnętrznej pamięci programu za- kostki EPROM. W tym przypadku (jak z 8051  w bieżącym numerze EdW
szytej w kostce 8751 (8752) programista wspomniałem w poprzednim odcinku) znajdziesz opis kitu zawierającego wszys-
umieszcza poszczególne rozkazy progra- maksymalna długość programu równa tkie niezbędne elementy do zbudowania
mu , używając do tego celu np. programa- wielkości obu pamięci zewnętrznej jak małego lecz w pełni funkcjonalnego sys-
tora pamięci EPROM lub programatora do i wewnętrznej nie może przekroczyć temiku do nauki programowania i obsługi
programowania mikroprocesorów z rodzi- 64kB  czyli 65536 8-bitowych słów. procesorów rodziny MCS-51. Publikacja
ny MCS-51. Wiesz już że procesor może Czyli że np. do kostki 87C52 (zawiera- tego systemu jest celowa i wyprzedza
pracować w następujących konfiguracjach: jącej 8 kB wewnętrznej EPROM) można nieco rozpoczęcie nauki programowania.
a) tylko z wewnętrzną pamięcią progra- dołączyć maksymalnie 56kB EPROM Wszystko po to abyś drogi Czytelniku
mu (dla kostek 8751, 8752) z zewnątrz. miał trochę czasu na nabycie tego zesta-
b) z wewnętrzna i zewnętrzną pamięcią Trzeci tryb pracy tylko z zewnętrzną pa- wu, zapoznanie się z nim, zmontowanie
programu jednocześnie, w tym przy- mięcią programu jak pamiętasz z pierw- oraz wstępne sprawdzenie poprawnego
padku zewnętrzna pamięć programu szej części cyklu wymaga zwarcia wypro- działania. Wtedy wraz z pierwszym arty-
stanowi jak gdyby  przedłużenie pa- wadzenia /EA (pin 31 procesora 8051/52) kułem dotyczącym programowania 8051
mięci wewnętrznej. do masy. Parę lat temu, kiedy procesory będziesz mógł rozpocząć praktyczne lek-
c) oraz tylko z zewnętrzną pamięcią pro-  51 z wbudowaną wewnętrzną pamięcią cje z mikrokontrolerem. Początek kursu
gramu np. typu EPROM. programu kosztowały niemało, natomiast planowany jest w pazdzierniku.
Pierwszy tryb jest bardzo wygodny, po- kostki bez niej można było nabyć za kilka- Wracajmy jednak do naszego artykułu.
zwala na  pełne wykorzystanie wszyst- dziesiąt tysięcy (starych złotych) nazywa- Pozostając wiernym zasadzie przekazy-
kich zalet mikrokontrolera jednoukłado- łem ten tryb pracy  oszczędnościowym wania Tobie, tylko niezbędnych, praktycz-
wego w całym tego słowa znaczeniu. Pro- (chyba tylko dla własnej kieszeni). Jak się nych informacji na temat  51-ki nie będę
gramista wykorzystując procesor w wers- wkrótce przekonasz drogi Czytelniku pier- się rozwodził nad teorią obsługi zewnę-
ji z wbudowaną pamięcią programu wsze praktyczne kroki z wykorzystaniem trznej pamięci programu przez sam pro-
(8751,8951, xx52) cały kod swego progra- twego pierwszego systemu mikroproce- cesor, a jedynie przedstawię Ci nieza-
mu umieszcza wewnątrz kości, dzięki sorowego warto będzie poczynić korzys- wodny sposób dołączenia jej do układu
czemu ma do dyspozycji wszystkie porty tając właśnie z tego trybu. mikrokontrolera.
mikrokontrolera  w tym także P0 i P2. Tak jak przy nauce jazdy samochodem Rysunek 5 przedstawia schemat elekt-
(patrz poprzednie odcinki naszego cyklu). istnieje większe ryzyko stłuczki, tak ryczny takiego połączenia. W układzie tym
40 ELEKTRONIKA DLA WSZYSTKICH 8/97
Też to potrafisz
Rys. 5. Sposób dołączenia zewnętrznej pamięci programu do procesora
zrezygnowano z użycia wewnętrznej pa-  zapamiętana w U2, a procesor może wte-  przestawiony sposób dołączenia ze-
mięci programu  wykorzystano więc kos- dy z portu P0 odczytać kolejny bajt z pamię- wnętrznej pamięci programu jest typo-
tkÄ™ w wersji bez ROM (8051/52), pin /EA ci EPROM podajÄ…c stan niski na wyprowa- wym dla tej konfiguracji pracy procesora
zwarto do masy, w jako zewnętrzną pa- dzenie /PSEN, które jak widać ze schematu  odczyt kolejnych bajtów (rozkazów) z ze-
mięć programu wykorzystano kostkę EP- jest dołączone do wejścia /OE pamięci. wnętrznej EPROM odbywa się za pośred-
ROM o pojemności 64kB typu 27C512. Wejście wyboru pamięci U3 /CE jest nictwem sygnału /PSEN, o którym pisa-
Oczywiście w praktyce nie jest konieczne na stałe zwarte do masy, co oznacza że łem w I części naszego cyklu przy okazji
używanie tak pojemnej pamięci. Do na- pamięć EPROM jest ciągle aktywna a do omawiania wyprowadzeń procesora
szych celów i eksperymentów wystarczy jej odczytu wystarczy niski poziom poda-  dodatkowo w układzie z zewnętrzną
pamięć 27C64 o pojemności 8kB. W ta- ny na wejście /OE. pamięcią programu (jak się zaraz oka-
kim przypadku linie adresowe A15, A14, Czasem w różnych aplikacjach szczegól- że także i danych) niezbędny jest do-
A13 (piny 28, 27 i 26 portu P2) pozostaną nie w urządzeniach zasilanych bateryjnie datkowy układ scalony w postaci 8-
niedołączone, lecz niestety i tak będą nie wejście /OC układu U2 oraz wejście wybo- krotnego rejestru równoległego
do wykorzystania, bowiem w trybie adre- ru pamięci EPROM /CE są razem dołączone 74HCT573. Można użyć wersji LS.
sowania zewnętrznej pamięci programu do wyjścia sygnału ALE. Nie jest to błędem, Natomiast kostki 74HCT373 (LS373),
(jak i danych) cały port P2 przekazuje star- bowiem podczas cyklu odczytu z zewnętr- które maja taka samą strukturę we-
szy bajt 16-bitowego adresu. znej pamięci tak programu jak i danych wnętrzną, różnią się od układu 573
Zgodnie z opisem z I części artykułu, wszystkie operacje tak odczytu jak i zapisu rozmieszczeniem wyprowadzeń
w układzie wykorzystano dodatkowy re- do tych pamięci odbywają się podczas sta- D1...D8 i Q1...Q8.
jestr w postaci układu 74HCT573, które- nu niskiego na wyjściu ALE procesora. Zainteresowanych w/w układami od-
go zadaniem jest zatrzaśnięcie młodszej Cykl odczytu z zewnętrznej pamięci syłam do katalogów serii TTL. My w na-
części 16-bitowego adresu, czyli sygna- programu możesz dodatkowo prześle- szych rozwiązaniach będziemy nagmin-
łów A0...A7. W czasie trwania dodatniego dzić na rysunku 6. nie korzystać z układów  573 ze względu
poziomu sygnału na wyjściu ALE, mikro- Podsumowując te akapit powinieneś na bardziej korzystny rozkład jego wypro-
procesor wystawia: na piny portu P2 star- zapamiętać, że wadzeń wprost dostosowany do użycia
sza część 16-bitowego adresu A8...A15,
natomiast na port P0 wystawiona zostaje
młodsza część adresu A0...A7, która zo-
staje od razu przekazana poprzez
74HCT573 na wejścia adresowe A0...A7
pamięci EPROM. Dzieje się tak dlatego że
układ  573 aktywowany jest poziomem,
toteż w przypadku gdy na jego wejściu
C (połączonym z ALE) panuje stan wyso-
ki, rejestr ten jest  przezroczysty tzn. że
dane pojawiające się na jego wejściach
D1...D8 natychmiast pojawiajÄ… siÄ™ na wy-
jściach Q1...Q8. Dołączenie wejścia /OC
układu U2 do masy powoduje odblokowa-
nie na stałe wyjść Q1...Q8
(gdy /OC=1 to wyjścia te przechodzą
w stan wysokiej impedancji  lecz w na-
szym przypadku nie ma to praktycznego
zastosowania).
Następnie podczas opadającego zbocza
Rys. 6. Cykl odczytu z zewnętrznej pamięci programu
sygnału ALE młodsza cześć adresu zostaje
ELEKTRONIKA DLA WSZYSTKICH 8/97 41
Też to potrafisz
Rys. 7. Sposób dołączenia zewnętrznej pamięci danych 32kB do procesora 8051
wraz z poczciwym 8051 oraz pochodny-  8 kostek 6264 (8x 8kB = 64kB) lub /RD (końcówka 17  U1) od skrótu  Read
mi w obudowach DIL-40. w ostateczności  przypomnij sobie część I naszego cyklu).
 32 kostki 6116 (32x 2kB = 64kB). Podanie odpowiednich stanów logicznych
Zewnętrzna pamięć danych Oczywiście dwie ostatnie sytuacje na końcówki adresowe pamięci (U3) odpo-
W podobny sposób jak w przypadku w przypadku wymaganej maksymalnej po- wiadające adresowi komórki pamięci we-
zewnętrznej pamięci programu, do więk- jemności zewnętrznej SRAM są nieprak- wnątrz układu, a następnie podanie stanu
szości procesorów serii MCS-51 (w tym tyczne, po pierwsze ze względu na ilość niskiego na końcówkę /RD spowoduje po-
8051/52) dołącza się zewnętrzną pamięć układów scalonych co prowadzi do zwięk- jawienie się danej (z pamięci) na wyprowa-
danych. Do tego celu używa się zazwy- szenia płytki drukowanej, po drugie pojawia dzeniach magistrali AD0...AD7 i w konsek-
czaj (a prawie zawsze) kostek pamięci się konieczność stosowania dodatkowego wencji odczyt jej przez mikroprocesor, za
statycznych nazywanych często SRAM dekodera adresu w postaci np. układu serii pośrednictwem portu P0.
od skrótu:  Static RAM , czyli pamięć TTL-LS typ 74LS138  dekoder 1 z 8. Sytuację te w postaci przebiegów
statyczna. Pamięć taka powinna charak- Rysunek 7 pokazuje podstawowy układ przedstawia rysunek 8. Nie podaję tu cza-
teryzować się 8-bitową organizacją da- dołączenia zewnętrznej kostki SRAM sów poszczególnych cykli, po pierwsze
nych oraz równoległym adresowaniem, o pojemności 32kB do mikrokontrolera z czysto prakt]ycznego powodu, po dru-
tak jak w przypadku zwykłych EPROM 8051. Jak widać układ połączeń jest bar- gie ze względu że zależą one od częstot-
ów. Najpopularniejsze i spotykane w han- dzo zbliżony do schematu z rysunku 5, liwości zegara (rezonatora kwarcowego
dlu, a przy tym najlepiej nadające się do gdzie omawialiśmy praktyczny sposób do- dołączonego do procesora).
naszych potrzeb kości pamięci SRAM to: łączenia zewnętrznej pamięci programu Skoro wiemy jak praktycznie (sprzęto-
a) 6116  pamięć SRAM o pojemności typu EPROM. Dla zwiększenia czytelności wo) realizowany jest odczyt z zewnętrznej
2kB (6116  16kbitów, czyli 16384 bi- rysunku rezygnujemy z rysowania każ-
tów / 8 = 2kB = 2048 B ). dego z połączeń magistrali adresowej
b) 6264  j/w lecz o pojemności 8kB (6264  (A0...A15) oraz danych (AD0...AD7) od-
64kbity, czyli 65536 / 8 = 8kB = 8192 B) dzielnie, w zamian zastąpimy je wspól-
c) 62256  j/w lecz o pojemności 32kB nym  fachowym symbolem  szyny
(62256  256 kbitów, czyli 262144  w postaci pogrubionej kreski. Każde
/ 8 = 32kB...) połączenie  odchodzące od takiej
Cena układów wymienionych pamięci magistrali ma swoją nazwę (etykietę),
jest obecnie znikoma, nie znaczy to jednak czyli że końcówki układów scalonych
że warto stosować pamięci z zapasem (w tym przypadku: procesora U1, pa-
(np. największe 32kB), zawsze warto prze- mięci U3 oraz zatrzasku U2) przy któ-
widzieć wielkość praktycznie wykorzysty- rych znajduje się taka sama etykieta li-
wanej ilości komórek pamięci i odpowied- terowa, są ze sobą elektrycznie połą-
nio dobrać wymagany typ pamięci. czone. Prawda, że prostsze?!
Pierwszy wymienionych układ SRAM Przyzwyczajmy się zatem do takie-
6116 spotykany jest w handlu w typowej go sposobu czytania i rysowania sche-
obudowie 24-końcówkowej o rozstawie matów, szczególnie jeżeli przedsta-
600 mils, dwa ostatnie natomiast w obu- wiony schemat zawiera wielokońców-
dowach 28-pinowych (600 mils, spotyka- kowe układy scalone takie jak mikro-
ne tez sÄ… wersje w  wÄ…skich obudo- procesor. Wracajmy jednak do tematu.
wach o rozstawie 300 mils). Do adresowania pamięci wykorzys-
Do kontrolerów serii  51 można dołą- tuje się, podobnie jak do pamięci pro-
czyć maksymalnie 64kB zewnętrznej pa- gramu, te same linie adresowe:
mięci danych. Można więc w takim A0...A15, oraz danych: AD0...AD7.
Rys. 8. Cykl odczytu i zapisu
(skrajnym) przypadku zastosować: Jednak sterowanie odczytem zewnętr-
z zewnętrznej pamięci danych
 2 kostki 62256 (2x 32kB = 64kB) lub znej pamięci danych zajmuje się sygnał
42 ELEKTRONIKA DLA WSZYSTKICH 8/97
Też to potrafisz
pamięci danych, to warto powiedzieć jak odczyt jak w poprzednim przypadku z peł- dzone przez programistę na etapie
dokonywany jest zapis. Otóż do tego ce- nym adresem A0...A15. tworzenia programu, stałe np. w posta-
lu służy kolejny sygnał procesora nazywa- Przy  stonicowanym  sposobie ob- ci tablic (sinusów, logarytmów nie-
ny /WR (od skrótu  write - zapis), a wy- sługi zewn. pamięci danych, procesor zbędnych do obliczeń) lub cokolwiek
stawiany przez procesor na końcówkę 16 wystawia tylko młodszą część 16-bitowe- innego, nie będącego typową
(U1) w czasie tej operacji. Podobnie ja go adresu (linie AD0...AD7), zaÅ› port P2  instrukcjÄ… programu lub jej argumen-
w przypadku odczytu, najpierw procesor pozostaje  nietknięty . Wnikliwy czytel- tem. Aż się prosi żeby te dane umiesz-
ustala adres na końcówkach A0...A15 nik zauważy że w konsekwencji takiego czane były w zewnętrznej pamięci da-
(port P2 oraz wyjścia zatrzasku U2), na- sposobu obsługi możliwe będzie zaadre- nych (w wewnętrznej RAM prawdopo-
stępnie podaje daną na port P0, po czym sowanie tylko 256 bajtów (2 do potęgi dobnie zabrakłoby na nie miejsca), czy-
wystawia stan niski na pin /WR, co po- 8 = 256) tej pamięci, a nie jak w naszym li w układach SRAM. Nie ma sprawy,
woduje zapis danej w pamięci SRAM. przykładzie aż 2kB. No tak, chyba że można przecież je przenieść (progra-
Jak już wcześniej wspomniałem, za- przed odczytem przez procesor, sami, za mowo) z EPROM do SRAM w czasie
stosowanie zewnętrznej pamięci tak pro- pomocą sygnałów A8...A10 (wystawia- inicjacji mikroprocesora, tylko po co !.
gramu jak i danych wiąże się ze zuboże- nych poprzez 3 piny portu P0) ustawimy Czy nie lepiej  jakoś połączyć obszar
niem typowej  jednoukładowości mik- niejako  fizyczny adres 256 bajtowej pamięci programu i danych, zachowu-
rokontrolera, bowiem zajęte zostają portu strony adresowanej pamięci. jąc oczywiście odrębne obszary adre-
P0 i P2 procesora. O ile w przypadku pra- Zauważmy przecież że za pomocą tych sowe, pozostawiając tylko jednolity
cy z zewnętrzną pamięcią programu dzie- trzech końcówek można  zaadresować sposób odczytu tych danych?!
je się tak zawsze: port P0 pracuje jako 8 stron po 256 bajtów każda co w sumie I druga sytuacja, bardziej praktyczna
multipleksowana (na zmianę) szyna da- da nam do dyspozycji pełne 2048 bajtów, w fazie nauki sytuacja.
nych lub młodszej części adresu, a port czyli 2kB. Zauważmy też że, co najważ- b) Zbudowałem uniwersalny mikroste-
P2 wystawia starsze 8 bitów 16-bitowe- niejsze, pozostałe końcówki portu P2 po- rownik z 8051...., chciałbym mieć moż-
go adresu, o tyle w przypadku pracy z ze- zostają wolne i możemy je dowolnie wy- liwość wpisywania na bieżąco (np. za
wnętrzną pamięcią danych (bez zewnętr- korzystać jako wejścia lub wyjścia cyfro- pomocą komputera) moich programów
znej pamięci programu) istnieje możli- we... Prawda, że genialne?! i testowania ich w tym układzie bez po-
wość oszczędniejszego gospodarowania No tak, ale kiedy ten procesor adresuje trzeby każdorazowego programowania
portami procesora. pamięć za pomocą pełnego adresu, a kie- pamięci EPROM za pomocą drogiego
W przykładzie opisanym powyżej mó- dy za pomocą stronicowania .....!. Otóż programatora, na który mnie zresztą nie
wiliśmy , że procesor przy odczycie lub w celu rozróżnienia przedstawionych stać ..... . Czy nie dało by się wykorzys-
zapisie  ....wystawia 16-bitowy adres dwóch typów adresowania wprowadzone tać dołączoną pamięć danych SRAM ja-
(A0...A15) ... . Do tego potrzebne są są dwie różne instrukcje procesora, któ- ko część obszaru adresowego pamięci
2 porty, które w takim przypadku nie na- rych używa programista (w przyszłości Ty programu (i odwrotnie) i wpisywać do
dajÄ… siÄ™ do dodatkowego wykorzystania, ! drogi Czytelniku) podczas projektowania niej nowe programy bez wyjmowania
jako np. wyjścia sterowania przekaznika- układu i pisania programu, w zależności od układu scalonego z podstawki ?... .
mi, lub czymkolwiek innym. potrzeb, ale o tym powiemy dokładnie W przedstawionych dwóch przypad-
Istnieje jednak możliwość innego odczy- przy okazji nauki programowania 8051. kach, rozwiązaniem problemu jest wyko-
tu zewnętrznej pamięci danych, nazywana rzystanie do odczytu danych tak z pamięci
 Miksowanie przestrzeni
 stronicowaniem . Ma ona zastosowanie programu jak i danych, iloczynu sygnałów:
szczególnie wtedy, kiedy zewn. pamięć da- adresowych programu
 odczytu z zewnętrznej pamięci danych /RD
nych mam mniejszy rozmiar od maksymal- i danych oraz
nej przestrzeni adresowej procesora np. Często w praktyce podczas konstruo-  odczytu z zewnętrznej pamięci progra-
2kB. Jak widać z rysunku 9 pamięć taka wania i oprogramowywania układów wy- mu /PSEN
(U3) ma tylko 11 linii adresowych (A0...A10), korzystujących zewnętrzne pamięci tak Iloczyn taki w praktyce najłatwiej jest
co pozwala na zaadresowanie 2048 komó- programu jak i danych zdarzają się nastę- wykonać za pomocą pojedynczej 2-we-
rek pamięci (bajtów). Tak więc pozostałe li- pujące dwie sytuacje: jściowej bramki AND, jak pokazano na
nie adresowe procesora A11...A15 pozosta- a) w zewnętrznej pamięci programu (EP- rysunku 10. Przedstawiono nieco rozbudo-
łyby niewykorzystane gdyby zastosować ROM  stałej) znajdują się, wprowa- waną konfigurację procesora pracującego
Rys. 9. Przykład adresowania zewnętrznej pamięci danych 2kB poprzez stronicowanie
ELEKTRONIKA DLA WSZYSTKICH 8/97 43
Też to potrafisz
Rys. 10. Sposób zmiksowania zewnętrznych pamięci danych i programu
z zewnętrzną pamięcią programu U3 (EP- naszego układu mikroprocesorowego,  niepotrzebne jest oczywiście kasowa-
ROM 8kB) oraz pamięci danych U4 chociażby tego z rys.10. Program ten nie SRAM przed zapisem nowej wers-
(SRAM 8kB). Zauważmy jednak że odczyt często zwany  monitorem lub  biosem ji tworzonego programu
z obu pamięci może odbywać się  tak wykonywany zostaje zaraz po włączeniu Nie brakuje i wad:
samo . Dzięki wymnożeniu sygnałów /RD zasilania procesora, bowiem pamięć EP-  po wyłączeniu zasilania program umiesz-
i /PSEN, procesor ma możliwość odczytu ROM z rys.10  układ U3 zaczyna się od czony w SRAM zostaje wymazany (ale
kolejnej instrukcji programu (za pomocÄ… adresu poczÄ…tkowego 0000h. dalej znajduje siÄ™ np. w komputerze);
/PSEN) tak z pamięci U3 jak i U4, bowiem Nie jest na razie istotne w jaki sposób  konieczne jest  posiadanie EPROM
sygnał RD&PS (będący iloczynem /RD wspomniane dane zostają przesłane z kom- ze wspomnianym  biosem (moni-
i /PSEN) steruje wejściami /OE odczytu putera, (może być w tym celu użyty port torem).
obu pamięci (U3 i U4). Oczywiście sprawa szeregowy lub np. równoległy komputera). Jak się wkrótce przekonasz, drogi Czy-
zapisu nadal dotyczy tylko pamięci SRAM Ważne jest że po przesłaniu mogą one telniku, na etapie nauki programowania
U4 (dołączony sygnał /WR procesora U1 być zapisane w zewnętrznej pamięci i obsługi procesorów 8051 pierwsza  wa-
do końcówki /WE pamięci U4). SRAM  U4, która przecież daje się zapi- da w praktyce wcale nie jest wadą.
W celu rozdzielenia obszarów adreso- sywać jak zwykłą pamięć danych dzięki O drugi drobiazg (zaprogramowany EP-
wych obu pamięci (tak aby nie następo- sygnałowi /WR. ROM) nie musisz się martwić, będziesz
wał konflikt przy odczycie na magistrali Kiedy już te dane, będące np. kawał- mógł go otrzymać wraz zestawem dla po-
AD0...AD7, co może mieć miejsce kiem jakiegoś nowego, utworzonego czątkujących programistów, który znaj-
w przypadku jednoczesnego pojawienia przez Ciebie programu (powiedzmy ze- dziesz w tym numerze EdW.
się danej na wyjściach 11...19 układu U3 garka z 256 alarmami i tyloma timerami) Bardziej ambitnych muszę w tym
i U4), wykorzystano linię adresową A15. zostana wpisane do pamięci U4, możesz miejscu uspokoić. Jestem pewien, że
Dzięki niej pamięć EPROM (U3) będzie teraz rozkazać procesorowi (wydając od- każdy kto ukończy nasz kurs projektowa-
aktywna kiedy sygnał A15 będzie miał powiednią instrukcję),  skoczyć do ad- nia będziecie w stanie sam napisać swój
stan niski, co jest adekwatne do obszaru resu 8000h i stamtąd rozpocząć dalsze własny program monitora. Na razie na
adresowania równemu: 0000h.....7FFFh wykonywanie programu. Co będzie etapie wstępnej nauki programowa-
(oczywiście wtedy pamięć U4 jest nieak- w efekcie ...?, w efekcie dzięki bramce nia, do której niebawem przejdziemy, nie-
tywna, bo sygnał wyboru CS2  U4 ma AND (rys.10) jak powiedziałem wcześ- zbędna będzie wersja  gotowa bio-
stan linii A15 = niski). niej, dalej wykonywanym programem bÄ™- su, wierzcie mi drodzy Czytelnicy, za-
Pamięć SRAM U4 będzie natomiast dzie ten przesłany wcześniej z kompute- oszczędzi to wam wielu stron teorii, któ-
obsługiwana w obszarze adresowym dla ra i umieszczony w SRAM, czyli np. twój ra na początku mogłaby niejednego
A15 równego logicznemu  1 , czyli w za- super-zegarek (lub cokolwiek co w przy- z Was przerazić swoimi rozmiarami,
kresie: 8000h...FFFFh. szłości stworzysz). a którą sami nabędziecie z czasem, ucząc
Na zakończenie, krótki przykład w jaki Zaletami takiego rozwiązania są: się pisać pierwsze swoje programy.
sposób w takim układzie (z rys.10) reali-  brak konieczności stosowania drogich W następnym odcinku omówię po-
zowany jest przypadek b) omawiany programatorów EPROM krótce (praktyczne rady) ważniejsze te-
wcześniej.  bardzo szybkie ładowanie nowych pro- maty dotyczące  czasowego sposobu
Otóż w pamięci EPROM U3 na stałe gramów do pamięci SRAM, co pozwo- wykonywania przez mikrokontroler 8051
znajduje się program umożliwiający np. li uczącemu się programiście (takiemu programu, po czym przejdziemy do pier-
przesłanie danych (którymi mogą być tak- jak Ty) na szybkie obserwowanie efek- wszych kroków w programowaniu.
że instrukcje programu) z komputera do tów swojej pracy Sławomir Surowiński
44 ELEKTRONIKA DLA WSZYSTKICH 8/97
Też to potrafisz
Mn?
it
kr
ro
ol
kr
oy
e
W kolejnym odcinku opisujÄ…cym
procesor 8051 przedstawiÄ™ kilka
praktycznych wiadomości na temat
pracy mikrokontrolera, jej szybkości
w zależności od częstotliwości tak-
tującej zegara. Następnie pokrótce
Tp.
or
to
as
kt
ie
e.
.
zapoznamy się z niemniej ważnym
blokiem funkcjonalnym, czyli: ukła-
dem czasowo  licznikowym. Tak
jak w poprzednich odcinkach nie bÄ™-
dę wgłębiał się w teorię dotyczącą
tych zagadnień, przekazując jedynie
wiadomości potrzebne do osłucha-
nia a raczej oswojenia siÄ™ z proceso-
rem. Szczegółowy opis wszystkich
rejestrów sterujących praca 8051
opiszÄ™ w jednym z kolejnych odcin-
Część 5
ków, który będzie niejako podstawo-
wą  ściągawką w stawianiu pierw- Mikrokontroler 8051  to takie proste!
szych kroków w programowaniu.
Zegar systemowy Nie oznacza to, że w każdym przypadku b) sześć cykli sygnału Fs składa się na tzw.
O zegarze wspominałem na początku  uganiać się będziemy za możliwie naj- cykl maszynowy procesora, czyli okres
naszego cyklu, kiedy to poznawaliśmy szybsza wersją układu, nie zawsze przecież wykonywania elementarnej czynności
wyprowadzenia mikrokontrolera. Czy pa- taka będzie potrzebna. Wiedzieć wszakże (jakiej ?... za chwilę) przez nasza kostkę.
miętasz funkcje jaka pełnią wyprowadze- trzeba że tak jak w przypadku wszystkich Z prostych obliczeń wyniknie Ci że, cykl
nia 18 i 19 procesora (w obudowie DIL- układów wykonanych w technologii MOS maszynowy zajmuje: Fs x 6 = 2 x Fxtal
40)? Jeśli nie to radzę przeczytać stoso- (CMOS, HMOS) wraz ze wzrostem częs- x 6 = 12 cykli oscylatora, czyli dla np.
wny akapit w EdW 5/97 str. 41. totliwości pracy układu wzrasta wydzielana Fxtal=12MHz będzie to 1MHz.
Powiedziałem, że do poprawnej pracy, w nim moc, czyli wzrasta pobierany przez Cykl maszynowy jest bardzo ważnym
a w zasadzie w ogóle do pracy, czyli do procesor prąd ze zródła zasilania. pojęciem, z jego częstotliwością (Fxtal/12)
 poruszenia całego procesora potrzeb- Praktyczny wniosek nasuwa się sam  je- zachodzą podstawowe czynności proce-
ny jest zewnętrzny obwód oscylatora. żeli masz zamiar zastosować procesor sora takie jak:
W praktyce taki obwód realizuje się dołą- w układzie przenośnym zasilanym np. z nie-  pobieranie kodu rozkazów (czy to z we-
czając zewnętrzny rezonator kwarcowy wielkiej baterii, z pewnością nie użyjesz pro- wnętrznej pamięci programu, czy z ze-
o częstotliwości z zakresu od mniej wię- cesora 8051 w wersji 20MHz! Poborem mo- wnętrznej)
cej 1MHz do 16MHz. W handlu spotyka cy oraz zagadnieniami z tym zwiÄ…zanymi zaj-  wykonywanie instrukcji programu
się także wersje 8051 mogące pracować miemy się w dalszej części naszego cyklu.  pobieranie danych z zewnętrznej pa-
w szerszym zakresie: od pojedynczych Przejdzmy jednak do informacji prak- mięci (jak i z wewnętrznej)
 Hz (wersje całkowicie statyczne tycznych.  zwiększanie wartości wbudowanych
CMOS) do nawet: 33...40MHz. W każ- Musisz wiedzieć, że częstotliwość (na- liczników: T0, T1 także T2 dla 8052
dym przypadku producent konkretnego zwijmy ją jako Fxtal) uzyskiwana z rezona-  próbkowanie wejść zewnętrznych
modelu procesora umieszcza na jego tora kwarcowego (dołączonego do pinów przerwań: INT0 i INT1
obudowie oprócz nazwy układu także 18 i 19) jest we wnętrzu procesora kilka-  wystawianie sygnału ALE  pin 30 (opi-
symbol liczbowy określający maksymal- krotnie dzielona. I tak w praktyce spo- sywanego wcześniej) niezbędnego do
ną częstotliwość zewnętrznego sygnału tkasz się w literaturze i katalogach na te- zapisu młodszej części adresu multiplek-
taktującego (która w praktyce jest także mat 8051 i podobnych z pojęciami jak: sowanej szyny adresowej  portu P0,
równa dołączanemu rezonatorowi kwar- a) dwufazowy sygnał taktujący procesor przypomnij sobie wcześniejszy odcinek.
cowemu). Nie będziemy jednak się za- (Fs)  sygnał powstały z podzielenia Z częstotliwością tą taktowany jest
jmować tutaj sposobami oznaczania po- przez 2 częstotliwości oscylatora (np. także wbudowany port szeregowy
szczególnych wersji 8051, nie to jest przy kwarcu = 12 MHz, Fs = 6MHz). w specjalnym trybie ustawionym przez
w tej chwili najważniejsze, ważne jest to Sygnał ten używany jest bezpośrednio użytkownika programowo.
że im większa częstotliwość graniczna do taktowania układów wewnętrznych Warto wiedzieć że cykl maszynowy
procesora, tym oczywiście układ będzie procesora i nie jest dostępny na żadnym dzieli się także na fazy (po 6 na każdy cykl),
mógł pracować szybciej. z zewnętrznych jego wyprowadzeń. jednak ich opis i znaczenie w praktyce przy
ELEKTRONIKA DLA WSZYSTKICH 9/97 39
Też to potrafisz
konstruowaniu większości urządzeń jest wany oraz z zależności od potrzeb jest Przy projektowaniu układów dla bez-
niepotrzebne, dlatego nie będziemy się generowane odpowiednie przerwanie); pieczeństwa warto jednak granicę tę nieco
tym w bieżącym odcinku zajmować.  licznik można w dowolnym momencie obniżać (np. do 480 kHz przy Fxtal=12MHz).
Rysunek 1 ilustruje zależności czaso- uruchomić (zezwolić na zliczanie) lub Podane możliwości wykorzystania licz-
we pomiędzy omówionymi podstawowy- zatrzymać wydając w programie odpo- ników jako np. wejść mierzących częstot-
mi pojęciami spotykanymi podczas oma- wiednią komendę; liwość nie są zbyt imponujące. Jednak
wiania zegara i cyklu maszynowego.  do licznika można w każdej chwili wpisać jak się sam przekonasz w przyszłości ta-
Warto o tym pamiętać. dowolna wartość (16-bitowa liczbę), co kie wykorzystanie liczników procesora
spowoduje że licznik będzie zliczał impul- np. do bezpośredniego mierzenia częs-
Układy czasowo-licznikowe sy od tej wartości aż do przepełnienia; totliwości wejściowej jest niepraktyczne.
Pod pojęciem tym kryją się wielokrot- wpisu takiego najlepiej jest dokonywać Dlaczego, w odpowiedzi podaję przykład.
nie wspominane dwa 16-bitowe liczniki w czasie gdy licznik jest zatrzymany; Wyobraz sobie że chcesz zmierzyć
T0 i T1 oraz dodatkowy licznik T2 który  dodatkowo licznika można  bram- częstotliwość rzędu kilku (kilkunastu MHz)
występuje w procesorze 8052. kować czyli uzależnić jego pracę lub a więc znacznie przekraczającą możliwoś-
Najogólniej mówiąc każdy z tych liczni- zatrzymanie w zależności od stanu pa- ci liczników procesora. Do mierzenia każ-
ków a właściwie układów czasowo-liczni- nującego na wejściach: INT0 dla liczni- dej częstotliwości w zwykłych miernikach
kowych jest tak uniwersalnym blokiem że ka T0 oraz INT1 dla licznika T1; wykorzystuje się dwa sygnały: mierzony
z wykorzystaniem jego można dokonać  oprócz tego licznik T1 (jak i T2 w 8052) i oczywiście bramkujący. Ten drugi pocho-
następujące dwie podstawowe operacje: może  taktować wbudowany port dzi zazwyczaj z wbudowanego w przyrząd
a) za pomocą T0 (T1 lub T2) można zliczać szeregowy w specjalnym trybie który generatora wzorcowego i powstaje przez
impulsy z zewnętrznego wejścia liczni- opiszemy przy okazji omawiania tego wielokrotne podzielenie częstotliwości ge-
kowego; pin 14 dla T0 i pin 15 dla T1 bloku procesora. nerowanej najczęściej za pomocą rezona-
(tryb licznika) W przypadku używania liczników do zli- tora lub generatora kwarcowego.
oraz czania impulsów zewnętrznych należy Nasuwa Ci się pewnie w tej chwili
b) można zliczać wewnętrzne impulsy po- wiedzieć, że maksymalna częstotliwość myśl: ... No dobrze wykorzystam gene-
chodzące z układu taktującego proce- (Fmax) zliczanych impulsów jest ściśle za- rator procesora a właściwie jeden z jego
sor, w każdym przypadku będzie to leżna od częstotliwości oscylatora kwar- liczników do odmierzania czasu bramko-
sygnał o częstotliwości = Fxtal / 12. cowego Fxtal i określona jest zależnością: wania a drugim licznikiem mierzę impulsy
Czyli jeżeli  dopieliśmy do mikrokont- wejściowe i będę miał szukaną częstotli-
Fxtal
Fmax =
rolera kwarc o częstotliwości 6 MHz to wość, tylko że kilka  MHz to stanowczo
24
częstotliwość sygnału taktującego licz- zbyt wiele na mój procesor ...
nik T0 lub T1 (T2) będzie równa Czyli w przypadku zastosowania kwarcu A gdyby tak odwrócić role i zliczać impul-
6 MHz/12 = 500 kHz. W tym trybie o częstotliwości 12 MHz maksymalna częs- sy wewnętrzne o częstotliwości przecież
zwanym czasomierzem, liczniki wyko- totliwość impulsów na wejściu licznika mo- znanej i równej Fxtal / 12, a sygnał wejścio-
rzystuje się do odmierzania pewnych że wynieść 500kHz dodatkowo przy założe- wy wielokrotnie podzielić i wykorzystać do
określonych programowo przez użyt- niu że przebieg ma wypełnienie 1:2. Ograni- bramkowania licznika. Wtedy w zasadzie
kownika odcinków czasu (opóznień) czeni wynika z faktu, że liczniki T0 i T1 (tak- otrzymamy nie częstotliwość ale okres
i generowania przerwań po przepełnie- że T2) fizycznie nie wyglądają jak np. 7493, przebiegu wejściowego, ale od czego ma-
niu któregoś z liczników. lecz zliczają na zasadzie  próbkowania we- my mikroprocesor, który potrafi wykonywać
W dalszej części artykułu przedstawię jścia impulsów w celu stwierdzenia czy jest obliczenia arytmetyczno  logiczne. Potrafi
przykład takiego zastosowania. logiczne  0 a następnie  1 . Operacja ta on także dokonać odwrócenia wyniku okre-
W przypadku wykorzystania układu odbywa się na synchronicznie z cyklem ma- su w efekcie czego otrzymamy liczbowa
licznikowego w obu przypadkach należy szynowym o którym mówiliśmy wcześniej. wartość mierzonej częstotliwości. Tak więc
wiedzieć że: W każdym cyklu maszynowym procesor w prosty sposób można dokonać pomiaru
 maksymalna liczba zliczonych impulsów próbkuje wspomniane wejścia liczników, to- dowolnej częstotliwości wejściowej a przy
jest określona pojemnością 16-bitowe- też stwierdzenie, że na jednym z wejść syg- okazji wyświetlić ciekawskiemu użytkowni-
go licznika, czyli 2 do potęgi 16 = 65536 nał zmienił wartość z  0 na  1 lub od- kowi także okres badanego przebiegu.
(licznik zlicza od 0 do 65535 po czym po wrotnie zajmuje 2 cykle maszynowe  stąd Rysunek 2 ilustruje zasadę pomiaru częstot-
nadejściu kolejnego impulsu jest zero- bierze się Fmax. liwości, którą najczęściej wykorzystuje się
w układach z mikroprocesorem. Wbrew po-
zorom metoda ta daje świetne wyniki oraz
pozwala uzyskać dużą dokładność pomiaru
przy krótkich czasach bramkowania.
Należy tylko częstotliwość wejściową
podzielić przez taką wartość która da wy-
nik zbliżony do wymaganego okresu
bramkowania. Dodatkowy sprzętowy pro-
gramowany dzielnik najprościej jest wyko-
nać chociażby za pomocą kaskadowo po-
łączonych 4-bitowych liczników binarnych
7493 lub podwójny 74393 wraz z multi-
plekserem np. 74151 (sprawdzić w katalo-
gu). Wejścia multipleksera decydujące
o stopniu podziału sterowane będą oczy-
wiście z wolnych końcówek dowolnego
Rys. 1. Zegar, faza, a cykl maszynowy procesora 8051
portu mikroprocesora 8051 (np. z P1).
40 ELEKTRONIKA DLA WSZYSTKICH 9/97
Też to potrafisz
Rys. 2. Zasada pomiaru częstotliwości z wykorzystaniem mikroprocesora
Uzyskany na wyjściu multipleksera Dla przykładu załóżmy że zewnętrzny mo pozornie trudniejszego sposobu mie-
przebieg doprowadzony zostanie do we- programowany dzielnik dzieli częstotli- rzenia tej wielkości.
jścia bramkującego licznik INT0  dla licz- wość mierzoną przez 64 tak, że na wyj- Po tym małym przykładzie wracajmy
nika T0 lub INT1 kiedy zlicza licznik T1. ściu multipleksera otrzymujemy przebieg do tematu naszego odcinka.
W tym przykładzie oczywiście licznik bę- którego okres, a więc czas od jednego Fizycznie 16-bitowe liczniki T0, T1 i T2
dzie zliczał impulsy wewnętrzne, tak np. ujemnego zbocza do drugiego ujem- są zbudowane z dwóch 8-bitowych
więc poszukiwana częstotliwość można nego zbocza, wynosi tyle, że wewnętrzny  połówek , do których programista ma
będzie obliczyć z proporcji licznik procesora bramkowany tymi zbo- dostęp na poziomie programu. W czasie
czami zliczy w czasie jednego okresu zliczania impulsów przeniesie z młodsze-
Fx Lx
=
54532 impulsy (których częstotliwość go bajtu licznika nazywanego jako TL po-
Fwew Lwew
przy zastosowaniu kwarcu 12MHz wyno- woduje automatycznÄ… inkrementacjÄ™ baj-
gdzie: si 1MHz). Skomplikowane? Przeczytaj to tu starszego TH, przy jednoczesnym wy-
Fx  częstotliwość szukana zdanie jeszcze raz i postaraj się zrozu- zerowaniu bajtu TL. Taka sytuacja przed-
Fwew  częstotliwość imp. wewnę- mieć. No i jak z tego policzyć częstotli- stawia jeden z kilku trybów w którym
trznych = Fxtal / 12 wość? Z naszego wzoru! Tak więc: dwie połówki stanowią całość  16-bito-
Lx  liczba zliczonych impulsów wy licznik. W mnemonice (nazewnictwie)
64(dzielnik)"1000000
z zewnątrz Fx = = 1173Hz 8051 wspomniane dwie połówki liczni-
54532
Lwew  liczba impulsów zliczonych ków maja swoje oznaczenia, i tak: dla
przez licznik wewnętrzny Sprawdzmy na  chłopski rozum czy licznika T0 są to TH0 i TL0 (starsza i młod-
aby wynik jest w porządku: sza część), dla licznika T1  TH1 i TL1. Po-
W przypadku kiedy sygnał mierzony  licznik procesora w przeciągu jednego dobnie jest w przypadku licznika T2
wykorzystujemy jak w naszym przykła- okresu podzielonego przebiegu wej- w procesorze T2, gdzie mamy: TH2 i TL2.
dzie do bramkowania to Lx = 1 toteż po ściowego zliczył 54532 impulsy każdy W praktyce użytkownik ma możliwość
przekształceniu otrzymamy: po 1us (mikrosekundzie) przy zegarze zaprogramowania liczników w kilku in-
12MHz nych trybach pracy, nie mniej użytecz-
1
Fx =  tak więc okres podzielonego przebiegu nych. W sumie jest ich 4, nazywane po-
Lwew"Fwew
z wejÅ›cia wynosi: 54532 µs (mikrose- tocznej : trybem 0, 1, 2 i 3. Poniżej opi-
ale Lx = 1 to kundy), czyli 54,532 ms (milisekundy). szemy je po krótce. Ze względu na to że
Fwew
 odwracamy tę wartość i uzyskujemy liczniki T0 i T1 są blizniaczo podobne bę-
Fx =
Lwew
liczbę: 18,3378 dziemy odwoływać się przy opisie tylko
Wynik należy jeszcze pomnożyć przez  pamiętając o dzielniku wstępnym mno- do licznika T0. Ze względu na rozbudowa-
wartość dzielnika sprzętowego, czyli żymy otrzymaną liczbę przez niego czy- ne funkcje licznik T2 zostanie opisany
wzór przyjmie postać: li przez 64 w dalszej części artykułu osobno.
 otrzymujemy wynik:
Fwew
Fx = Dz" [Hz]
Tryb 0
Lwew
Fx = 18.3378"64 = 1173 Hz
W tym trybie licznik pracuje w konfigu-
gdzie Dz to dzielnik tak więc się zgadza. racji 13-bitowej. Starszy bajt TH0 zawiera
pamiętając że Uff, jeżeli masz dość obliczeń, odpocz- 8 bardziej znaczących bitów licznika (bity
nij chwilę, w każdym razie musisz pamię- 7...0 TH0), natomiast 5 pozostałych bitów
Fxtel
Fwew =
tać że z wykorzystaniem procesora moż- to najstarsze bity z TL0 (bity 7...3). Trzy
12
liwości obliczeniowe oraz atrakcyjność najmłodsze bity bajtu TL0 są nieistotne
gdzie Fxtal  częstotliwość oscylatora. przyrządu pomiarowego wzrasta, pomi- i ignorowane przez procesor. Rysunek 3
ELEKTRONIKA DLA WSZYSTKICH 9/97 41
Też to potrafisz
przedstawia konfigurację licznika T0 (T1) Tryb 1 a właściwie do określenia szybkości
w tym trybie. Tryb ten jest bardzo podobny do trybu 0, transmisji danych przez ten port. Wtedy
Do licznika (do bajtów TH0 i TL0) moż- z tym że do zliczania wykorzystywane są jednak licznik nie może spełniać innych
na wpisać dowolna wartość pamiętając, wszystkie 16-bitów licznika. Stąd nasuwa funkcji, np. generować przerwań przy
że 3 najmłodsze bity słowa TL0 będą ig- się wniosek że maksymalną pojemność przepełnieniu.
norowane. Licznik po uruchomieniu bÄ™- licznika w tym trybie wynosi 65535, po
dzie zliczał od wartości wpisanej na po- czym następuje przepełnienie czyli wyze- Tryb 3
czątku (może to także być wartość  0 ) rowanie z ustawieniem znacznika zgłosze- Tryb ten dotyczy obu liczników T0 i T1
do wartości maksymalnej czyli 213-1=8191 nia przerwania (jeżeli jest taka potrzeba). procesora na raz. Otóż w trybie tym licz-
po czym się wyzeruje, dodatkowo zgła- Tryb ten najczęściej wykorzystuje się nik T1 jest zatrzymany i nie pracuje. Dwa
szając jeżeli potrzeba przerwanie infor- do generowania przerwań mających na bajty licznika T0: TH0 i TL0 pracują jako
mujące program o tym fakcie. Jeżeli nie- celu odmierzanie czasu np. przy zegarze dwa niezależne 8-bitowe liczniki, przy
których z Was denerwuje te  przer- czasu rzeczywistego. Przykład zastoso- czym istnieją pewne ograniczenia co do
wanie to nie będę trzymał w niepew- wania może być taki jak poprzednio ich funkcji, a mianowicie:
ności i wyjaśnię na czym polega istota zwiększa się tylko zakres mierzonych od-  TL0 może liczyć impulsy z wejścia T0
zgłoszenia przerwania w momencie prze- stępów czasu. lub pracować jako czasomierz zliczając
pełnienia licznika. impulsy wewnętrzne (Fxtal / 12)
Wyobraz sobie że chcesz odmierzać Tryb 2  TH0 może pracować tylko jako czaso-
równomierne odstępy czasu o długości Nieco ciekawszy jest tryb 2, w którym mierz, czyli zliczać impulsy wewnętrzne
np. 2,45 ms (milisekund). Co robisz? Ma- pracuje tylko młodsza połówka 16-bito- Tryb ten został zaimplementowany
jąc do dyspozycji procesor z kwarcem np. wego licznika a więc TL0 (TL1 dla licznika przez twórców 8051 po to, aby w wypad-
12 MHz wpisujesz do licznika T0 wartość T1). Ośmiobitowy licznik TL0 zlicza w gó- kach kiedy licznik T1 używany jest do
początkową równą: rę aż do wartości maksymalnej czyli 255, określania szybkości transmisji poprzez
wartość_maksymalna_licznika_T0 po czym ... tu uwaga! Automatycznie zo- port szeregowy, a programiście niezbęd-
+ 1  2450 staje przepisana do niego wartość po- ne są dwa dodatkowe liczniki, których ro-
Dlaczego 2450? czątkowa ze starszej połówki TH0. Tak le spełniają wtedy wspomniane TL0
Bo jest to 2450 x 1µs = 2,45 ms wiÄ™c raz wpisujÄ…c do TH0 jakÄ…Å› wartość, i TH0.
A skÄ…d 1 µs? nie musimy siÄ™ martwić aby zrobić to W obecnych czasach, jeżeli zachodzi
Bo przecież jest to częstotliwość zliczania programowo powtórnie przy przepełnie- taka potrzeba, czasem lepiej jest zastoso-
wewnętrznych impulsów = Fxtal / 12). niu pracującego licznika  TL0. wać procesor w wersji 80C52 z wbudo-
Tak więc po odjęciu otrzymasz liczbę: Tryb ten ma wiele zastosowań, szcze- wanym trzecim licznikiem T2. Niemniej
8191 + 1  2450 = 5742, którą zanim wpi- gólnie przydaje się tam gdzie potrzebne jednak warto wiedzieć o tym nietypo-
szesz do licznika T0 musisz pomnożyć jest generowanie przerwań w równych wym trybie liczników T0 i T1.
dodatkowo przez 8 (1000 binarnie) bo pa- odstępach czasu, np. przy generacji syg-
miętaj przecież że trzy najmłodsze bity nału prostokątnego o zadanej częstotli- Licznik T2 w kostce 80C52
2..0 TL0 są ignorowane. wości i wypełnieniu. O tym jak to się reali- W mikrokontrolerze 80C52 występuje
Teraz po wpisaniu uruchamiasz licznik, zuje dowiesz siÄ™ Czytelniku podczas nauki dodatkowy licznik nazywany T2. Podob-
który liczy w górę od wartości wpisanej: programowania 8051. Na razie proponuję nie jak licznik T0 i T1 jest on 16-bitowy.
5742 aż do przepełnienia  8191 czyli 2450 Ci się nad tym zastanowić samemu. Po- Posiada jednak kilka dodatkowych funkcji
impulsów, zajmie mu to więc dokładnie mocny będzie rysunek 4 na którym poka- które rozszerzają jego możliwości. Zacz-
2450 us  czyli 2,45 ms, po czym zgłoszo- zana jest struktura licznika w trybie 2. nijmy jednak po kolei.
ne zostanie przerwanie, w którym Ty  Warto także wiedzieć, że tryb ten Podobnie jak w licznikach opisanych
przyszły programisto określisz co akurat w liczniku T1 wykorzystuje się do takto- wcześniej licznik T2 składa się z dwóch
ma się wydarzyć po upłynięciu 2,45 ms. wania portu szeregowego procesora, bajtów TH2 (starszy) i TL2 (młodszy). Po-
Rys. 3. Struktura liczników T0 i T1 w trybie 0 (a także w trybie 1)
42 ELEKTRONIKA DLA WSZYSTKICH 9/97
Też to potrafisz
Rys. 4. Struktura liczników T0 i T1 w trybie 2
dobnie jak T0 i T1 licznik T2 może pełnić Z licznikiem T2 w kostce 80C52 związa- Jeżeli zaś licznik T2 pracuje w roli cza-
rolę czasomierza, czyli zliczać impulsy ny jest dodatkowy także alternatywnie wy- somierza, to wejście T2EX można wyko-
wewnętrzne pochodzące z zegara proce- korzystywany pin portu P1 (zwany T2EX) rzystać do automatycznego przepisania
sora, może także zliczać impulsy zewnęt- a mianowicie P1.1  nóżka 2. Otóż jeżeli za- aktualnej wartości rejestrów TH2.TL2 do
rzne dzięki alternatywnej funkcji jednego chodzi potrzeba, programista może wyko- rejestrów RLDH.RLDL. Można powie-
z pinów portu P1 a mianowicie P1.0  rzystać tę końcówkę do zewnętrznego dzieć że działanie w tym trybie (czaso-
nóżka 1 procesora 8052. bramkowania licznika T2, co bardzo często mierza) jest jakby odwrotne do sposobu
Licznik ten posiada także możliwość przydaje się podobnie jak przy bramkowa- w trybie licznika. Wartość zostaje przepi-
automatycznego załadowania wartości niu liczników T0 i T1 sygnałami INT0 i INT1. sana do rejestrów RLDH.RLDL a nie od-
początkowej określonej przez użytkowni- I tak w przypadku gdy T2 pracuje jako wrotnie jak to miało miejsce w przypadku
ka a zapisanej w dwóch oddzielnych re- licznik liczący zewnętrzne impulsy, opada- pracy T2 w trybie licznika impulsów ze-
jestrach 8-bitowych (które w sumie dają jące zbocze na końcówce T2EX spowodu- wnętrznych.
16-bitową wartość początkową) zwanych je automatyczne natychmiastowe załado- W praktyce takie działanie umożliwia
RLDH i RLDL (patrz odcinek w EdW nr wanie licznika T2  TH2 i TL2 wartością np. na bardzo dokładny pomiar przebie-
6/97 tabela rejestrów specjalnych SFR). zdefiniowaną w rejestrach RLDH.RLDL. gów wolnozmiennych bez konieczności
Funkcja ta działa podobnie jak w liczni- Do czego to wykorzystać? Jest wiele stosowania dodatkowych układów scalo-
ku T0 (T1) ustawionym w trybie 2. Za- praktycznych zastosowań ot chociażby nych. Odpowiedz na pytanie  A jak to się
uważmy jednak że w przypadku T2 pra- funkcja autoładowania pod wpływem ze- robi...? otrzymasz drogi Czytelniku przy
cuje całe 16-bitów licznika i całe 16-bitów wnętrznego sygnału może być przydatna okazji kursu programowania 8051.
z RLDH.RLDL może być automatycznie do synchronizowania pracy wewnętrzne- Na koniec istotna dodatkowa informa-
załadowane, kiedy licznik zostanie prze- go licznika z zewnętrznym sygnałem ze- cja dotycząca licznika T2. Podobnie jak
pełniony. garowym o niższej częstotliwości. licznik T1, T2 może w zależności od po-
Rys. 5. Struktura liczników 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- wienia układ transmisji szeregowej oraz gramowaniu 8051. A propos,... czy za-
wej. W takim przypadku możliwe jest roz- układ przerwań. Te pozostałe dwa bloki poznałeś się już z układem  Komputerka
szerzenie zakresów prędkości transmisji funkcjonalne zakończą część zaznajamia- edukacyjnego z 8051 opisanym w po-
o dodatkowe wartości niedostępne przy jącą Ciebie drogi Czytelniku z procesora- przednim i tym numerze EdW? Będzie
tradycyjnym taktowaniu portu poprzez mi 8051 i 8052. on niezbędnym narzędziem podczas lek-
licznik T1, jak to opisano wcześniej. Wkrótce rozpoczniemy omówienie cji, toteż warto pomyśleć o jego zmonto-
Po tej porcji wiadomości, w następ- wszystkich rejestrów specjalnych, ale to waniu.
nym odcinku pozostanie nam do omó- już przy okazji pierwszych kroków w pro- Sławomir Surowiński
44 ELEKTRONIKA DLA WSZYSTKICH 9/97
Też to potrafisz
W kolejnym odcinku naszego cyklu,
którego celem jest poznanie i naucze-
nie siÄ™ programowania mikrokontrole-
rów serii MCS-51, postanowiłem od-
łożyć na bok pozostałe do omówienia
Mn?
it
kr
ro
ol
kr
oy
e
bloki funkcjonalne procesora 8051
(port szeregowy, system przerwań,
specjalne tryby pracy), a  wrzucić Ci,
drogi Czytelniku garść informacji po-
chodzÄ…cej trochÄ™ z  innej beczki .
Chodzi mianowicie o krótkie, aczkol-
wiek wystarczajÄ…ce zapoznanie siÄ™
Tp.
or
to
as
kt
ie
e.
.
z podstawowymi pojęciami dotyczący-
mi obsługi tych  wszystkich mądroś-
ci , o których od kilku miesięcy uważ-
nie czytasz  czyli o sposób progra-
mowania, czyli:  czym?, jak?, i dlacze-
go?... siÄ™ ten procesor programuje .
Decyzja moja jest po części Waszą,
prawdopodobnie przecież większość
z Was ma już swój  Komputerek edu-
kacyjny , którego konstrukcja została
opisywana w dwóch poprzednich nu-
merach EdW. A skoro wydałeś na to
swoje oszczędności, to dobrze by by-
Część 6
ło, nie patrzeć tylko na te  cudeńko
Asembler  język maszynowy procesora
ale je w końcu wypróbować!
Do wspólnego zrealizowania tego za- trzebny jest język porozumiewania się  wyższego poziomu , słyszałeś zapew-
dania niezbędnych jest kilka informacji z mikroprocesorem. Ten język najczęściej ne o takich jak Pascal, C, Basic oraz inne.
oraz zrozumienie pojęcia  programowa- nazywa się językiem maszyno- Tak naprawdę to są to translatory bardziej
nia układu scalonego  w naszym przy- wym. Brzmi bardzo poważnie, praw- złożonych poleceń danego języka  wyż-
padku mikroprocesora. da? Tak na prawdę język ten jest prostym szego poziomu na kod maszynowy pro-
Zanim przejdę do wyjaśnienia tych po- zbiorem poleceń, dzięki którym możliwa cesora. Zawsze na samym końcu obrób-
jęć, pragnę uspokoić wszystkich drobiaz- jest nie tylko ingerencja we wszystkie ki programu użytkownika, czy powstał on
gowych Czytelników, że wspomniane po- wspominanie bloki funkcjonalne proceso- w takim czy innym języku powstaje i za-
zostałe bloki funkcjonalne procesora ra, ale także wykonywanie określonych wsze kod maszynowy, który akceptuje
omówię w następnych odcinkach nasze- logicznych czynności: sprawdzanie wa- dedykowany mikroprocesor.
go cyklu, ale tym razem... uwaga: na go- runków czy operacje arytmetyczno-lo- W przypadku pisania większości pro-
rąco, czyli z wykorzystaniem naszego giczne. Sam język maszynowy to na po- gramów na kontrolery 8051 (lub każde
edukacyjnego układu. zór nieczytelny dla człowieka ciąg liczb. inne  jednoukładowce ), szczególnie
Tym wszystkim, którzy nie zaopatrzyli Aby sprawę uprościć stworzono postać podczas nauki, każdy początkujący musi
się w dedykowany temu kursowi, kom- jawną języka maszynowego  asemb- poznać jego język maszynowy, czyli
puterek, radzę o jak najszybsze zmonto- ler. W języku tym kolejne polecenia opi- asembler. Dzięki temu pózniej, kiedy
wanie go, dzięki czemu będziecie, moi sywane są za pomocą słownych instruk- nauczy się nim biegle posługiwać, bę-
drodzy, na bieżąco praktycznie wykony- cji uzupełnionych odpowiednimi do danej dzie mieć duża swobodę i możliwość
wać wszystkie zadania. sytuacji argumentami. Tak postać jest ak- obiektywnej oceny w wyborze dowolne-
A więc zacznijmy od najważniejszego ceptowalna przez programistę, dzięki te- go innego narzędzia wspomagającego
stwierdzenia:  Mikrokontroler bez pro- mu program pisze siÄ™ po prostu w dowol- programowanie tego procesora, ale to
gramu jest jak żołnierz bez.... wiesz bez nym edytorze tekstowym (np. na kompu- zupełnie inna historia.
czego. I jest to święta racja. Jak sam zdą- terze), następnie dokonuje się zamiany Ogólnie można powiedzieć, że pisanie
żyłeś się zorientować śledząc poprzednie (translacji) tak napisanego programu na programu na procesor to po prostu two-
odcinki kursu, że kostka 8051 zawiera wspomniany ciąg liczb  czyli język ma- rzenie kolejnych poleceń, z których
w swojej strukturze całe mnóstwo uży- szynowy procesora. w efekcie powstaje cały program.
tecznych elementów takich jak np. pa- Tak jak istnieje na świecie wiele języ-  Tworzenie to np. pisanie w dowolnym
mięć programu, danych, programowane ków porozumiewania się między ludzmi, edytorze tekstowym ASCII w przypadku
układy licznikowe, stos, itd. Wszystko faj- tak samo w rodzinach różnych mikroproce- posiadaczy komputerów. Pozostałe oso-
nie...  tylko jak nad tym wszystkim zapa- sorów, często pochodzących od różnych by nie mające dostępu, mogą taki pro-
nować?... . Otóż aby odpowiednio wyko- producentów, istnieje wiele języków, gram napisać chociażby na kartce papie-
rzystać zasoby kontrolera i zmusić je do wszystkie jednak to języki maszynowe. ru (aczkolwiek w przypadku większych
pracy zgodnie z naszym zamysłem i prze- Producenci oprogramowania tworzą programów jest to bardzo trudne, czy
znaczeniem konstruowanego układu, po- bardziej zaawansowane tzw. języki wręcz niemożliwe).
44 ELEKTRONIKA DLA WSZYSTKICH 10/97
Też to potrafisz
Polecenie zwykle zawiera się w jednej gdzieś. Czego i gdzie to zależy od kontek- cji i ponumerowali je od 0 do 255 (FFh
linii programu. Jego składnia jest zasadni- stu, czyli od rodzaju argumentów, ale szesnastkowo).
czo określona, z reguły można ją przed- o tym za chwilę. Linia (3) oznacza do- Tak powstało 255 instrukcji procesora
stawić jako: słownie w tłumaczeniu na jęz. polski: (nie 256 bo jeden numer nie jest wyko-
instrukcja , .....(1)  wpisz do akumulatora liczbÄ™ 25 , linia rzystany).
Czasami przed instrukcją występuje (4)  wpisz do rejestru B liczbę 43, linia (5) I jak się pewnie niedługo przekonasz
także etykieta zakończona znakiem  :  dodaj do akumulatora zawartość rejest- z punktu widzenia programisty  użyt-
(dwukropka), np.  etyk01: , której zada- ru B. W efekcie wykonania tych 3 pole- kownika liczba ta jest mniejsza, to jednak
niem jest po prostu nazwanie danej linii ceń w akumulatorze będzie wynik doda- należy zapamiętać ten fakt.
polecenia. Ilość argumentów w linii pole- wania, czyli liczba 68 (binarnie będzie to Jeżeli zatem cały zbiór instrukcji pro-
cenia może być różna w zależności od ro- 01000100). Jeżeli teraz każesz proceso- cesora daje się przedstawić jako liczba
dzaju instrukcji. W przypadku asemblera rowi wykonać np. polecenie wraz z towarzyszącymi jej ewentualnie
procesora 8051 i pochodnych liczba ta MOV P1, A (6) argumentami, z których każdy także daje
waha się od zera w przypadku instrukcji spowoduje to że liczba 68 pojawi się na się przetłumaczyć na liczbę, w efekcie
bezargumentowych do trzech. Zasadą końcówkach portu P1 procesora, oczy- można wywnioskować, że cały program
jest że poszczególne argumenty oddziela wiście w postaci binarnej. Aby to spraw- pisany przez użytkownika w postaci
się zawsze znakiem  , : (przecinka), na- dzić naocznie wystarczy dołączyć do każ- zródłowej (literowej) można przetłuma-
tomiast instrukcja oddzielona jest od pier- dej z 8-miu jego końcówek (piny 1...8 czyć na ciąg liczb. Mało tego, wszystkie
wszego argumentu spacją (odstępem)  8051/2) diodę świecącą z rezystorem, te liczby mogą zawierać się jedynie
lub znakiem tabulacji (to informacja dla z pewnością zapalone zostaną diody dołą- w 8 bitach, co idealnie pasuje architektu-
komputerowców). czone do końcówek: 3 i 7 (na tych pozy- ry naszego procesora  jest on przecież
Podajmy przykład polecenia dla proce- cjach liczby 68 w postaci binarnej jest prawdziwym ośmiobitowcem. Zamienio-
sora 8051 w którym procesor wykonuje  1 . Procesor po prostu w wyniku poda- ny do takiej postaci Twój program wy-
dodawanie zawartości dwóch jego rejes- nia polecenia (6) wpisał zawartość aku- starczy teraz śmiało wpisać do poszcze-
trów: mulatora do rejestru portu P1. gólnych komórek pamięci EPROM bądz
ADD A, B (2) No ale na razie wystarczy przykładów, samego procesora (gdy ten pracuje
W poleceniu tym wystąpiły: wyjaśnimy sobie teraz, jak fizycznie pro- w trybie z wewnętrzną pamięcią progra-
 instrukcja:  ADD cesor akceptuje instrukcje, no bo prze- mu  np.87C51) lub do kostki EPROM
 argumenty: A  rejestr A (akumulator) cież  nie zje od razu ciągu liter układają- z której pózniej procesor będzie pobierał
oraz rejestr B cych się w napis chociażby z przykładu instrukcje.
W nazewnictwie asemblerowym pier- (6). Otóż asembler procesora 8051 posia- Operację programowania pamięci EP-
wszą część polecenia, czyli instrukcję da określoną liczbę mnemoników oraz ROM przyprowadza się oczywiście za
(np. ADD ) nazywa się  mnemonikiem , określone rodzaje argumentów. pomocą specjalizowanych narzędzi do
toteż od tego momentu będziemy posłu- Jeżeli jesteś ciekawy to powiem Ci że programowania procesorów  tzw. pro-
giwać się tym zwrotem. Aby otrzymać mnemoników jest nie tak wiele bo gramatorów. Na pocieszenie powiem Ci
wynik dodawania należy dodać do siebie 42. W przyszłości będziesz musiał je poz- że w ofercie handlowej AVT pod nazwą
dwa argumenty. Pierwszy argument (ja- nać i zapamiętać, ale nie przejmuj się, nie AVT-320 znajduje się taki programator
kaś liczba) znajduje się w akumulatorze jest to dużo, przy okazji praktycznego pro- idealnie nadający się do programowania
procesora 8051, druga zaś w tym przy- gramowania same wpadną ci do głowy  wszystkich dostępnych na rynku kostek
padku w rejestrze B. W wyniku wykona- i już zostaną...na zawsze. serii MCS-51. W przyszłości, kiedy nabę-
nia przytoczonego polecenia procesor do- Jeżeli chodzi o argumenty to wyróżnia dziesz już umiejętności swobodnego
da do zawartości rejestru A wartość z re- się kilka ich rodzajów, nie będę teraz  surfowania (to ostatnio bardzo popu-
jestru B, a wynik umieści w rej. A (aku- szczegółowo wyliczał ich wszystkich, larne słowo) wśród rodziny  51-nek,
mulatorze). Powiedzmy że chcemy do- pierwszy ich rodzaj  argument bezpo- z pewnością takie narzędzie Ci się przy-
dać dwie liczby: 25 + 43. W tym celu mu- średni, poznałeś w przykładzie dodawa- da. To przyszłość, na razie do tego etapu
simy wpisać te wartość (składniki doda- nia dwóch rejestrów  liczby: #25 i #43. jeszcze wspólnie nie doszliśmy.
wania) do rejestrów procesora a potem W zależności od rodzaju argumentów Całą drogę od pomysłu na program po-
jej dodać poleceniem (2). Można to zrobić jakie występują po mnemoniku, różne przez jego napisanie i zamianę do postaci
w sposób następujący: jest działanie całego polecenia  instruk- akceptowanej przez procesor i jedno-
MOV A, #25 (3) cji. W architekturze procesorów 8051 cześnie dającej wpisać się do pamięci
MOV B, #43 (4) konstruktorzy wyróżnili 255 takich sytua- programu procesora obrazuje rysunek 1.
ADD A, B (5)
W liniach 3 i 4 rozkazaliśmy procesoro-
wi wpisanie składników odpowiednio do
rejestrów A i B, działanie polecenia w linii
(5) jest Ci już znane.
Osoby znające asembler i możliwości
8051 pewnie się trochę zaśmieją
z przykładu (3)...(5), bowiem dodawanie 2
stałych da się zapisać krócej w dwóch
liniach, lecz nie o to nam chodzi, przynaj-
mniej na tym etapie kursu.
Mnemonik  MOV ma wiele zastoso-
wań w języku procesorów  51, na język
polski można ją przetłumaczyć jako
Rys. 1. Od pomysłu na program do jego realizacji
 przemieszczenie (przesunięcie) czegoś
ELEKTRONIKA DLA WSZYSTKICH 10/97 45
Też to potrafisz
Wróćmy na chwilę do naszego proste- dzia (programy) zwane kompilatora- w przyszłym numerze EdW. Będziesz ją
go przykładu dodawania dwóch liczb. Za- mi. Dzięki nim proces zamiany  zwany mógł wyciąć i w razie potrzeby zafolio-
piszmy instrukcje (3)...(5) z argumentami dalej kompilacją  kodu zródłowego na wać, chroniąc ją tym samym przez znisz-
dodawania w postaci szesnastkowej: maszynowy trwa często bardzo krótko, czeniem.
MOV A, #19h (7) a tłumaczenie nawet kilku tysięcy linii nie I choć wszystkie przykłady w czasie
MOV B, #2Bh (8) trwa dłużej niż kilkanaście sekund. programowania będą dość proste i dają-
ADD A, B (9) W efekcie działania kompilatora powsta- ce się zrealizować  na papierze , to po-
Liczba 25 dziesiętnie można zapisać je zbiór z programem zapisany w postaci winieneś już teraz pomyśleć o wyposaże-
w postaci heksadecymalnej jako maszynowej, czyli ciÄ…gu liczb jak zilustro- niu swego domowego kÄ…cika, nawet
 19 , a liczba 43 jako  2B , dodając na wałem na przykładzie dodawania liczb. w przestarzały komputer klasy AT-286 lub
końcu każdej z nich małą literkę  h co Plik taki najczęściej jest gotowy do uży- w muzealną wersję XT.
oznacza zapis że zapisaliśmy liczbę w ta- cia przez programatory pamięci EPROM Użytkownicy komputerów innych ro-
kiej właśnie postaci. Spróbujmy teraz za- (lub programatory procesorów). Taki dzajów, np. Amiga, Commodore, Atari,
mienić te trzy linie na postać liczbową zbiór świetnie nadaje się też do zapisania posiadający interfejs szeregowy zgodny
(bajtową) akceptowaną przez procesor. w pamięci operacyjnej twojego kompu- z RS232c będą mogli także ich używać,
W liście rozkazów 8051 instrukcja: terka edukacyjnego opisywanego do przesyłania kodu maszynowego pisa-
MOV A,  jakaś_liczba_8_bitowa w trzech ostatnich numerach EdW. Jeże- nych przez siebie programów z kompu-
ma numer (odtąd będziemy ten numer li posiadasz dowolny komputer klasy PC, tera do naszego systemiku edukacyjne-
nazywać kodem rozkazu):  74h . Ale będziesz mógł nabyć dyskietkę z takim go. Musicie jednak kochani poszperać
w linii (7) występuje jeszcze argument  kompilatorem, dzięki któremu efekty wśród swoich kolegów i namierzyć kom-
liczba stała  19h , dlatego ostatecznie li- twojej pracy będą natychmiastowe. pilator na procesory 8051 działający na
nię tę w kodzie maszynowym (liczbowo) Szczegółowe informacje zawarte są waszym komputerze, bowiem na dys-
można zapisać jako: 74h, 19h . Podob- w 3 części opisującej komputerek eduka- kietce oferowanej do naszego kursu zna-
nie tłumaczymy linię (8). Odwołując się cyjny na 8051 w tym numerze EdW. jduje się zestaw programów na kompu-
do listy instrukcji (którą całą niebawem Jeżeli nie masz dostępu do kompute- tery klasy PC.
poznasz), sekwencję: ra, będziesz zmuszony do tłumaczenia W tym odcinku dość nietypowo,
MOV B, jakaś_liczba_8_bitowa przykładów z naszego kursu, ręcznie na umieszczamy pierwsze 5 ćwiczeń
tłumaczymy jako:  75h, F0h, 2Bh . Trze- kartce papieru, korzystając ze w części III opisu zestawu AVT-2250. Za-
cia linia zaś będzie miała postać:  25h,  ściągawki , którą będzie lista instrukcji praszam do lektury w tym numerze EdW.
F0h . Skąd to wszystko wiem? Ano ze procesora 8051. Lista taka ukaże się Sławomir Surowiński
wspomnianej listy instrukcji. Nie martw
siÄ™ w tej chwili nie jest Ci ona potrzebna,
ważne jest abyś uzmysłowił sobie w jaki
sposób pisze się program w języku
asemblera i jak go potem tłumaczy się na
język maszynowy procesora  czyli po-
stać liczbową.
W efekcie po przetłumaczeniu nasze-
go przykładu otrzymamy sekwencję liczb:
 74h, 19h, 75h, F0h, 2Bh, 25h, F0h  (10)
Jeżeli teraz poszczególne liczby wpi-
szesz do kolejnych komórek pamięci
programu (czy to zewnętrznej czy to we-
wnętrznej) to po uruchomieniu układu
procesor wykona dokładnie to czego do
niego oczekujesz, czyli załaduje dwa
składniki do dwóch rejestrów procesora
a następnie dokona operacji dodania ich.
Uff, wyglądało to dość mozolnie, bo
trzeba było napisać instrukcje w posta-
ci asemblerowej czyli jawnej (linie
7,8,9), potem na podstawie bliżej Ci nie
znanej (na razie) tabeli instrukcji zamie-
nić program do postaci maszynowej,
wreszcie umieścić sekwencję w pa-
mięci programu.
W praktyce dzięki zastosowaniu do-
wolnego komputera proces ten da siÄ™
przyśpieszyć.
O ile każdy program w postaci asem-
blera trzeba wstukać z klawiatury i zapi-
sać na dysku w postać pliku tekstowego
(np. korzystajÄ…c z edytora popularnego
Norton Commandera), to do przetłuma-
czenia postaci zródłowej za wykonywal-
ną (maszynowej) służą specjalne narzę-
46 ELEKTRONIKA DLA WSZYSTKICH 10/97
Też to potrafisz
Mikrokontrolery?
To takie proste...
W kolejnym odcinku poświęconym
naszym wspólnym staraniom mają-
cym na celu ujarzmienie mikrokont-
rolera 8051 postaram się zapoznać
Was drodzy Czytelnicy w przystęp-
ny sposób z listą instrukcji tego pro-
cesora. Na końcu tego odcinka cze-
ka na Was druga już lekcja  czyli
kolejny praktyczny krok w nauce
z wykorzystaniem naszego kompu-
terka edukacyjnego z 8051.
Część 7
Dziś wspólnie napiszemy i przeanali-
zujemy krótki ale już prawdziwie Asembler  język maszynowy procesora
asemblerowy program
W poprzednim odcinku poznałeś już znajduje się plik tekstowy z rozszerzeniem sora, oraz dodatkowo zbierzemy  w ca-
ideę tworzenia programów na mikrokont- .DOC, w którym zawarte są informacje łość wiadomości dotyczące wszystkich
rolery 8051. Wiesz że do tego celu nie- o kompilatorze i jego możliwościach nie- rejestrów specjalnych SFR  także tych
zbędny jest zestaw instrukcji danego pro- zbędne do prawidłowego posługiwania nie omawianych (na razie). Wszystko to
cesora (u nas jest to rodzina MCS-51, któ- się nim. Dlatego nie zbędę opisywał jest umieszczone dodatkowo we wkładce
ra ma wspólny język programowania) oraz szczegółowo tych spraw, ponieważ wśród wewnątrz numeru w postaci kartki A4
znajomość kodów numerycznych po- naszych czytelników są osoby nie mające z nadrukowanymi dwustronnie skrótowo
szczególnych instrukcji w przypadku kiedy komputera PC a poza tym każdy zaintere- wszysktimi informacjami niezbędnymi do
nie masz dostępu do komputera i wszyst- sowany PC-towiec będzie miał sam okaz- rozpoczęcie pisania własnych programów
kie czynności musisz wykonać ręcznie. ję na zapoznanie się z instrukcją użytkowa- oraz ich tłumaczenia (asemblacji) w przy-
W przypadku kiedy do dyspozycji progra- nia programu. padku osób które musza to zrobić ręcznie.
misty jest komputer, procedurę tłumacze- Ze względu na mocno ograniczone Taka  ściąga powinna być przez Ciebie
nia instrukcji zapisanych jawnie  w języku możliwości  ręcznej kompilacji tworzo- drogi Czytelniku wycięta a następnie zafo-
asemblera  automatycznie wykonuje nych przez Ciebie programów do postaci liowana, by mogła ci służyć przez cały
komputer korzystający z programu zwane- maszynowej, powinieneś już teraz zasta- czas zabawy z procesorem 8051. Zawie-
go kompilatorem. Autor cyklu zadbał, aby nowić się nad możliwością nabycia lub szenie jej na ścianie nad twoim biurkiem
każdy z Was drodzy Czytelnicy, niskim przynajmniej korzystania z komputera PC, z pewnością ułatwi Ci poznanie i zapamię-
kosztem mógł stać się posiadaczem takie- nawet poczciwej AT czy XT. Efektywne, tanie wszystkich instrukcji procesora, tak
go kompilatora. Jest on dostępny na dys- pozbawione niepotrzebnych pomyłek, abyś w przyszłości mógł władać asemble-
kietkach 3,5 w ofercie handlowej AVT tworzenie nawet mało skomplikowanych rem tak ja własnym ojczystym językiem 
pod nazwą AVT-2250/D. Ważną informacją programów jest możliwe tylko przy wyko- gwarantuję Ci  jest to możliwe!
jest to że zamieszczono tam dwie wersje rzystaniu komputera oraz kompilatora, Przejdzmy zatem do zapoznania się
kompilatora: wersję angielską oraz pols- który jest dostępny dla wszystkich zainte- i wyjaśnienia działania wszystkich pole-
ką!. Jest to chyba pierwszy program tego resowanych po przystępnej cenie. ceń kontrolerów 8051.
typu komunikujący się w naszym ojczys- W tym miejscy chcę uspokoić wszyst- Lista instrukcji
tym języku z programistą. Dzięki temu kich antykomputerowców. Wszystkie Informacje zawarte w tej części artyku-
osoby nie znające angielskiego będą mog- przedstawiane w cyklu przykładowe pro- łu są rozszerzeniem listy przedstawionej
ły bez problemów korzystać z takiej wers- gramy będą drukowane w postaci czytel- we wkładce wewnątrz numeru. Dlatego
ji kompilatora. Funkcjonalnie obie wersje nej i jasnej także dla tego grona czytelni- analizują opisy poszczególnych instrukcji
są takie same, to znaczy że wykonują ków. Ułatwi to analizę i pokaże jak powinieneś mieć także przed oczyma
wszystkie czynności identycznie, jedynie w praktyce tłumaczy się komendy asem- wspomnianą  ściągę . Kiedy w przy-
komunikaty zgłaszane przez program wy- blera na język maszynowy. szłości nabierzesz nieco wprawy w posłu-
stępują w dwóch rożnych językach, jak W tym odcinku szkoły mikroprocesoro- giwaniu się poleceniami asemblera, po-
wspomniałem wcześniej. Na dyskietce wej zapoznamy się z listą instrukcji proce- trzebna będzie Ci tylko strona z wkładki,
36 ELEKTRONIKA DLA WSZYSTKICH 11/97
Też to potrafisz
a do niniejszego opisu będzie mógł za- b) Do wartości przechowywanej w akumulato- A <- A  (Ri)  C
rze dodawany jest wskazany argument oraz kod: 1 0 0 1 0 1 1 i gdzie i wskazuje na R0
wsze wrócić w przypadku niejasności,
zawartość znacznika przeniesienia C, a wy- (i=0) lub R1 (i=1) stąd: 96h, 97h
szczególnie wtedy jeżeli będziesz chciał
nik zostaje wpisany do akumulatora. cykle: 1 bajty: 1
tworzyć programy nie mając dostępu do
przykład: SUBB A , @R1 (odjęcie od A za-
c) znaczniki: C, AC i OV
wartości komórki o adresie w R1oraz C)
komputera PC. Tak więc zaczynamy. d) rodzaje instrukcji:
 SUBB A , #dana
Opis każdej instrukcji składa się zasad-  ADDC A , Rn
od akumulatora odejmowany jest argu-
do akumulatora dodawana jest zawartość
niczo z następujących elementów:
ment stały (8-bitowa liczba) oraz C
rejestru Rn oraz C
 nazwy angielskiej i polskiej instrukcji: pkt. a)
A <- A  dana  C
A <- A + Rn + C gdzie Rn = R0...R7 (jeden
 krótkiego opisu działania instrukcji: pkt. b)
kod: 1 0 0 1 0 1 0 0 94h
z rejestrów roboczych)
 wyszczególnienia znaczników na które
kod: 0 0 1 1 1 n2 n1 n0 gdzie n2...n0  cykle: 1
bajty: 2 (kod instrukcji + dana)
wskazujÄ… na R0...7 stÄ…d: 38h-3Fh
działa instrukcja: pkt. c)
przykład: ADDC A , #86h (odjęcie od A licz-
cykle: 1 bajty: 1
 opisu szczegółowego instrukcji lub jej
by 86h i znacznika C)
przykład: ADDC A , R4
rodzajów: pkt. d), wraz z podaniem for-
 ADDC A , adres
matu i kodów maszynowych instrukcji,
 INC
do akumulatora dodawana jest zawartość
w zapisanych binarnie i heksadecymal- a) ang.  increment  zwiększenie o 1
komórki w wewn. RAM
b) do wskazanego argumentu jest dodawana
nie, z podaniem ilości cykli i bajtów ko- o adresie  adres oraz znacznik C
jedynka
A <- A + (adres) + C
du oraz ewentualnie poparte przykła-
c) znaczniki: bez zmian
kod: 0 0 1 1 0 1 0 1 35h
dem lub uwagami dotyczÄ…cymi efek-
d) rodzaje instrukcji:
cykle: 1
tów użycia danej instrukcji.
bajty: 2 (kod instrukcji 35h + adres)  INC A
Większość z tych informacji znajduje przykład: ADDC A , 7Eh (dodanie do A za- do akumulatora dodawana jest jedynka
wartości komórki o adresie 7Eh)
A <- A + 1
się także w tabeli zestawieniowej instruk-
kod: 0 0 0 0 0 1 0 0 04h
 ADDC A , @Ri
cji we wkładce wewnątrz numeru.
cykle: 1 bajty: 1
do akumulatora dodawana jest zawartość
komórki w wewn. RAM  INC Rn
Operacje arytmetyczne
o adresie wskazywanym przez rejestr Ri. do zawartości rejestru Rn dodawana jest
(R0 lub R1) oraz C jedynka
 ADD
A <- A + (Ri) + C Rn <- Rn + 1 gdzie Rn = R0...R7 (jeden
a) ang.  add to acummulator  dodaj do aku-
kod: 0 0 1 1 0 1 1 i gdzie i wskazuje na z rejestrów roboczych)
mulatora
R0 (i=0) lub R1 (i=1) stÄ…d: 36h, 37h kod: 0 0 0 0 1 n2 n1 n0 gdzie n2...n0 
b) Do wartości przechowywanej w akumulato-
cykle: 1 bajty: 1 wskazujÄ… na R0...7 stÄ…d: 08h-0Fh
rze dodawany jest wskazany argument,
przykład: ADDC A , @R1 (dodanie do A za- cykle: 1 bajty: 1
a wynik zostaje wpisany do akumulatora.
wartości komórki o adresie w R1) przykład: INC R3
c) znaczniki: C, AC i OV
 ADDC A , #dana
d) rodzaje instrukcji:  INC adres
do akumulatora dodawany jest argument do zawartości komórki o adresie  adres
 ADD A , Rn
stały (8-bitowa liczba) i C dodawana jest jedynka
do akumulatora dodawana jest zawartość
A <- A + dana + C (adres) <- (adres) + 1
rejestru Rn
kod: 0 0 1 1 0 1 0 0 kod: 0 0 0 0 0 1 0 1 05h
A <- A + Rn gdzie Rn = R0...R7 (jeden
cykle: 1 cykle: 1
z rejestrów roboczych)
bajty: 2 (kod instrukcji + dana) bajty: 2 (kod instrukcji 05h + adres)
kod: 0 0 1 0 1 n2 n1 n0, gdzie n2...n0 
przykład: ADDC A , #120 (dodanie do przykład: INC 12h (inkrementacja zawartoś-
wskazujÄ… na R0...7 stÄ…d: 28h-2Fh
A liczby 120) ci komórki o adresie 12h)
cykle: 1 bajty: 1
 INC @Ri
przykład: ADD A , R2
 SUBB do zawartości komórki o adresie wskazy-
 ADD A , adres
a) ang.  substract from acummulator with bor- wanym przez Ri dodawana jest jedynka
do akumulatora dodawana jest zawartość
row  odejmij od akumulatora z pożyczką (Ri) <- (Ri) + 1
komórki w wewn. RAM
b) Od wartości przechowywanej w akumulato- kod: 0 0 0 0 0 1 1 i gdzie i wskazuje na
o adresie  adres
R0 (i=0) lub R1 (i=1) stÄ…d: 06h, 07h
rze odejmowany jest wskazany argument
A <- A + (adres)
cykle: 1 bajty: 1
oraz zawartość znacznika przeniesienia C,
kod: 0 0 1 0 0 1 0 1 25h
przykład: INC @R1
a wynik zostaje wpisany do akumulatora.
cykle: 1
c) znaczniki: C, AC i OV  INC DPTR
bajty: 2 (kod instrukcji 25h + adres)
d) rodzaje instrukcji:
przykład: ADD A , 2Fh (dodanie do do 16-bitowego wskaznika danych DPTR
złożonego z rejestrów SFR: DPH (bardziej
A zawartości komórki o adresie 2Fh)  SUBB A , Rn
 ADD A , @Ri od akumulatora odejmowana jest zawar- znaczÄ…cy bajt) i DPL (mniej znaczÄ…cy bajt)
dodawana jest jedynka.
tość rejestru Rn oraz C
do akumulatora dodawana jest zawartość
Znaczniki nie ulegajÄ… zmianie.
A <- A  Rn  C gdzie Rn = R0...R7 (jeden
komórki w wewn. RAM
DPTR <- DPTR + 1
z rejestrów roboczych)
o adresie wskazywanym przez rejestr Ri
kod: 1 0 1 0 0 0 1 1 A3h
kod: 1 0 0 1 1 n2 n1 n0 gdzie n2...n0 
(R0 lub R1)
cykle: 2 bajty: 1
wskazujÄ… na R0...7 stÄ…d: 98h-9Fh
A <- A + (Ri).
kod: 0 0 1 0 0 1 1 i gdzie i wskazuje na cykle: 1 bajty: 1
R0 (i=0) lub R1 (i=1) stąd: 26h, 27h przykład: SUBB A , R6  DEC
cykle: 1 bajty: 1 a) ang.  decrement  zmniejszenie o 1
 SUBB A , adres
przykład: ADD A , @R0 (dodanie do b) od wskazanego argumentu odejmowana
od akumulatora odejmowana jest zawar-
A zawartości komórki o adresie w R0) jest jedynka
tość komórki w wewn. RAM
c) znaczniki: bez zmian
 ADD A , #dana o adresie  adres oraz znacznik C
d) rodzaje instrukcji:
do akumulatora dodawany jest argument A <- A  (adres)  C
stały (8-bitowa liczba) kod: 1 0 0 1 0 1 0 1 95h  DEC A
A <- A + dana cykle: 1 od akumulatora odejmowana jest jedynka
kod: 0 0 1 0 0 1 0 0 bajty: 2 (kod instrukcji 95h + adres) A <- A  1
cykle: 1 przykład: SUBB A , 45h (odjęcie od A zawartości kod: 0 0 0 1 0 1 0 0 14h
bajty: 2 (kod instrukcji + dana) komórki o adresie 45h i znacznika C) cykle: 1 bajty: 1
przykład: ADD A , #120 (dodanie do A licz-  SUBB A , @Ri  DEC Rn
by 120)
od akumulatora odejmowana jest zawar- od zawartości rejestru Rn odejmowana jest
 ADDC tość komórki w wewn. RAM jedynka
a) ang.  add to acummulator with carry  do- o adresie wskazywanym przez rejestr Ri. Rn <- Rn  1 gdzie Rn = R0...R7 (jeden
daj do akumulatora z przeniesieniem (R0 lub R1) oraz C z rejestrów roboczych)
ELEKTRONIKA DLA WSZYSTKICH 11/97 37
Też to potrafisz
kod: 0 0 0 1 1 n2 n1 n0 gdzie n2...n0  cykle: 1 bajty: 1  ANL adres , #dana
wskazują na R0...7 stąd: 18h-1Fh Przykład: jeżeli w wyniku dodawania
wymnożona logicznie zostaje zawartość
cykle: 1 bajty: 1 w akumulatorze jest liczba 6Ah, to po ko- komórki o adresie  adres przez argument
przykład: DEC R5 rekcji dziesiętnej akumulator będzie zawie- stały (8-bitowa liczba)
rał liczbę 70h, patrz listing:
 DEC adres (adres) <- (adres) )" dana
MOV A,#69h ;wpisanie liczby 69h
kod: 0 1 0 1 0 0 1 1 53h
od zawartości komórki o adresie  adres
do akumulatora (1)
cykle: 2 bajty: 3 (kod instrukcji
odejmowana jest jedynka
ADD A,#1 ;inkrementacja
54h + adres + dana)
(adres) <- (adres)  1
akumulatora poprzez
przykład: ANL 45h , #23 (mnożenie logicz-
kod: 0 0 0 1 0 1 0 1 15h
dodawanie (2)
ne zawartości komórki 45h i liczby 23)
cykle: 1
;w wyniku tego
bajty: 2 (kod instrukcji 15h + adres)
w A będzie liczba 6Ah
przykład: DEC 3Fh (inkrementacja zawar-
 ORL
da A ;korekcja dziesiętna A,
tości komórki o adresie 3Fh)
a) ang.  logical OR  zsumuj logicznie
w A będzie po tym
 DEC @Ri b) wykonywana jest suma logiczna OR (doda-
70h (3).
od zawartości komórki o adresie wskazy- wanie bitów  bit po bicie ) wskazanych
wanym przez Ri odejmowana jest jedynka w instrukcji dwóch argumentów. Wynik
Uwaga: jeżeli w przykładzie w linii (2) użyje-
(Ri) <- (Ri)  1 operacji jest wpisywany do argumentu pier-
my instrukcji INC A zamiast dodania jedyni,
kod: 0 0 0 1 0 1 1 i gdzie i wskazuje na
wszego instrukcji
to korekcja dziesiętna będzie nieprawidłowa.
R0 (i=0) lub R1 (i=1) stÄ…d: 16h, 17h
c) znaczniki: nie zmieniajÄ… siÄ™
cykle: 1 bajty: 1
d) rodzaje instrukcji:
Operacje logiczne
przykład: DEC @R0
 ORL A , Rn
dodana logicznie zostaje zawartość akumu-
 ANL
 MUL AB
latora i rejestru Rn, wynik w A
a) ang.  logical AND  pomnóż logicznie
a) ang.  multiply  pomnóż
A <- A *" Rn gdzie Rn = R0...R7 (jeden
b) wykonywany jest iloczyn logiczny AND
b) 8-bitowa liczba bez znaku znajdujÄ…ca siÄ™ w aku-
z rejestrów roboczych)
(mnożenie bitów  bit po bicie ) wskaza-
mulatorze jest mnożona przez 8-bitową liczbę
kod: 0 1 0 0 1 n2 n1 n0 gdzie n2...n0 
nych w instrukcji dwóch argumentów. Wy-
bez znaku z rejestru B. 16-bitowy wynik wpisy-
wskazujÄ… na R0...7 stÄ…d: 48h-4Fh
nik operacji jest wpisywany do argumentu
wany jest do rejestrów B i A (bardziej znaczący
cykle: 1 bajty: 1
pierwszego instrukcji
bajt do B, mniej znaczÄ…cy bajt do A)
przykład: ORL A , R7
c) znaczniki: nie zmieniajÄ… siÄ™
c) znaczniki: jeśli wynik mnożenia jest > 255 to
 ORL A , adres
d) rodzaje instrukcji:
ustawiany jest znacznik OV, w przeciwnym razie
dodana logicznie zostaje zawartość akumu-
 ANL A , Rn
OV jest zerowany. znacznik C jest zerowany.
latora i komórki o podanym adresie
wymnożona logicznie zostaje zawartość
d) B.A <- A x B
 adres , wynik zostaje umieszczony w A
akumulatora i rejestru Rn, wynik w A
kod: 1 0 1 0 0 1 0 0 A4h
A <- A *" (adres)
A <- A )" Rn gdzie Rn = R0...R7 (jeden
cykle: 4 bajty: 1
kod: 0 1 0 0 0 1 0 1 45h
z rejestrów roboczych)
cykle: 1 bajty: 2 (kod instrukcji
kod: 0 1 0 1 1 n2 n1 n0 gdzie n2...n0 
 DIV AB
45h + adres)
wskazujÄ… na R0...7 stÄ…d: 58h-5Fh
a) ang.  divide  podziel
przykład: ORL A , 19h (dodanie logiczne
cykle: 1 bajty: 1
b) 8-bitowa liczba bez znaku, znajdujÄ…ca siÄ™
A i zawartości komórki pod adresem 19h)
przykład: ANL A , R3
w akumulatorze jest dzielona przez 8-bito-
 ORL A , @Ri
 ANL A , adres
wą liczbę z rejestru B. Cześć całkowita ilora-
dodana logicznie zostaje zawartość akumu-
wymnożona logicznie zostaje zawartość
zu wpisywana jest do akumulatora, a reszta
latora komórki w wewn. RAM o adresie
akumulatora i komórki o podanym adresie
z dzielenia do rejestru B. W przypadku gdy
wskazywanym przez rejestr Ri. (R0 lub R1)
 adres , wynik zostaje umieszczony w A
dzielnik jest równy 0 (B=0) to po wykonaniu
A <- A *" (Ri)
A <- A )" (adres)
operacji zawartość akumulatorze i rejestru
kod: 0 1 0 0 0 1 1 i gdzie i wskazu-
kod: 0 1 0 1 0 1 0 1 55h
B jest nieokreślona oraz dodatkowo usta-
je na R0 (i=0) lub R1 (i=1) stÄ…d: 46h, 47h
cykle: 1
wiony zostaje znacznik OV.
cykle: 1 bajty: 1
bajty: 2 (kod instrukcji 55h + adres)
c) znaczniki: C = 0, OV =0 (zerowane)
przykład: ORL A , @R0 (dodanie logiczne
przykład: ANL A , 45h (mnożenie logicznie
d) A <- A : B B <- reszta (A : B)
A i zawartości komórki o adresie w R0)
A i zawartości komórki pod adresem 45h)
kod: 1 0 0 0 0 1 0 0 84h
 ORL A , #dana
 ANL A , @Ri
cykle: 4 bajty: 1
dodana logicznie zostaje zawartość akumu-
wymnożona logicznie zostaje zawartość aku-
latora przez argument stały (8-bitowa liczba)
mulatora komórki w wewn. RAM o adresie
 DA A
A <- A *" dana
wskazywanym przez rejestr Ri. (R0 lub R1)
a) ang.  decimal adjust  korekcja dziesiętna
kod: 0 1 0 0 0 1 0 0 44h
A <- A )" (Ri)
b) wykonywana jest korekcja dziesiętna wyni-
cykle: 1 bajty: 2 (kod instrukcji
kod: 0 1 0 1 0 1 1 i gdzie i wskazuje na R0
ku dodawania. Operacja ta sprowadza wynik
44h + dana)
(i=0) lub R1 (i=1) stÄ…d: 56h, 57h
do postaci dwóch cyfr dziesiętnych w kodzie
przykład: ORL A , #23 (dodanie logiczne
cykle: 1 bajty: 1
BCD, jeżeli argumenty były w kodzie BCD.
A i liczby 23)
przykład: ANL A , @R1 (wymnożenie. logicz-
Rozkaz ten powinien być używany jedynie
ne A i zawartości komórki o adresie w R1)  ORL adres , A
w połączeniu z rozkazem dodawania (ADD,
dodana logicznie zostaje zawartość akumu-
ADDC). Także inkrementacja powinna odby-  ANL A , #dana
latora i komórki o podanym adresie
wymnożona logicznie zostaje zawartość aku-
wać się poprzez instrukcję ADD A, #1, a nie
 adres , wynik zostaje umieszczony w ko-
mulatora przez argument stały (8-bitowa liczba)
INC A, bowiem w tym drugim przypadku nie
mórce pamięci o adresie  adres
A <- A )" dana
są ustawianie znaczniki C i AC, tak więc nie
(adres) <- (adres) *" A
kod: 0 1 0 1 0 1 0 0 54h
może być wykonana korekcja dziesiętna.
kod: 0 1 0 0 0 0 1 1 42h
cykle: 1
Korekcja polega na tym że w przypadku kiedy
cykle: 1 bajty: 2 (kod instrukcji
po wykonanej na akumulatorze operacji doda- bajty: 2 (kod instrukcji 54h + dana)
42h + adres)
przykład: ANL A , #23 (mnożenie logiczne
wania (ADD, ADDC) zawartość jego bitów
przykład: ORL A , 20h (dodanie logicznie
A i liczby 23)
3...0 jest większa od 9 lub jest ustawiony
A i zawartości komórki pod adresem 20h)
znacznik AC, to do wartości akumulatora doda-  ANL adres , A
 ORL adres , #dana
wana jest liczba 6. Po tym jeżeli okaże się że
wymnożona logicznie zostaje zawartość
zawartość bitów 7...4 jest większa od 9 lub jest akumulatora i komórki o podanym adre- dodana logicznie zostaje zawartość komór-
ustawiony znacznik C to do tych bitów doda- sie  adres , wynik zostaje umieszczony ki o adresie  adres oraz argument stały
wana jest także liczba 6. Jeżeli podczas tej w komórce pamięci o adresie  adres (8-bitowa liczba)
ostatniej operacji wystąpiło przeniesienie to do (adres) <- (adres) )" A (adres) <- (adres) *" dana
znacznika wpisywana jest 1, w przeciwnym kod: 0 1 0 1 0 0 1 1 52h kod: 0 1 0 0 0 0 1 1 43h
wypadku stan znacznika C nie zmienia siÄ™. cykle: 1 bajty: 2 (kod instrukcji cykle: 2 bajty: 3 (kod instrukcji
c) znaczniki: C, OV (patrz pkt.a) 55h + adres) 43h + adres + dana)
d) A <- korekcja dziesiętna (A) przykład: ANL A , 45h (mnożenie logicznie przykład: ORL 12h , #99 (dodanie logiczne
kod: 1 1 0 1 0 1 0 0 D4h A i zawartości komórki pod adresem 45h) zawartości komórki 12h i liczby 99)
38 ELEKTRONIKA DLA WSZYSTKICH 11/97
Też to potrafisz
d) A <- 0 bit 1 przyjmuje wartość bitu 2
 XRL
kod: 1 1 1 0 0 1 0 0 E4h itd......
a) ang.  logical XOR  zsumuj mod 2 (różnica
cykle: 1 bajty: 1 bit 6 przyjmuje wartość bitu 7
symetryczna)
b) wykonywana jest suma mod 2 XOR wska- Przykład: efekt wyzerowania akumulatora a
można uzyskać stosując instrukcję: bit 7 przyjmuje wartość bitu 0
zanych w instrukcji dwóch argumentów.
MOV A , #0 c) znaczniki: bez zmian
Wynik operacji jest wpisywany do argu-
lecz w tym przypadku instrukcja ma dłu- d) A <- rotacja w prawo (A)
mentu pierwszego instrukcji
gość 2 bajtów (a CLR A tylko 1), co
kod: 0 0 0 0 0 0 1 1 03h
c) znaczniki: nie zmieniajÄ… siÄ™
w efekcie skraca długość kodu programu
cykle: 1 bajty: 1
d) rodzaje instrukcji:
i oszczędza pamięć.
Przykład: jeżeli w A jest liczba 43h
 XRL A , Rn
(01000011 binarnie) to po wykonaniu
zsumowana (mod 2) zostaje zawartość
instrukcji
 CPL A
akumulatora i rejestru Rn, wynik w A
RR A
a) ang.  complement accumulator  zaneguj
A <- A •" Rn gdzie Rn = R0...R7 (jeden
akumulator będzie zawierał liczbę: A1h
akumulator
z rejestrów roboczych)
b) wartość akumulatora zostaje zanegowa- (10100001 binarnie).
kod: 0 1 1 0 1 n2 n1 n0 gdzie n2...n0 
na, wynik wpisany zostaje do akumulatora
wskazujÄ… na R0...7 stÄ…d: 68h-6Fh
c) znaczniki: bez zmian
 RRC A
cykle: 1 bajty: 1
d) A <- / A
przykład: XRL A , R7 a) ang.  rotate right through carry  przesuń
kod: 1 1 1 1 0 1 0 0 F4h
cyklicznie w prawo ze znacznikiem C
 XRL A , adres
cykle: 1 bajty: 1
b) zawartość akumulatora zostaje przesunięta
zsumowana (mod 2) logicznie zostaje za-
Przykład: aby np. zmienić znak liczby zapi-
w prawo o 1 pozycję (o 1 bit) z uwzględnie-
wartość akumulatora i komórki o podanym
sanej w akumulatorze w kodzie U2 należy
niem znacznika C, to znaczy że: znacznik
adresie  adres , wynik zostaje umieszczo-
wykonać sekwencję instrukcji:
C przyjmuje wartość bitu 0 (akumulatora
ny w A
CPL A ;negacja akumulatora
oczywiście)
A <- A •" (adres)
INC A ;inkrementacja akumulatora
bit 0 przyjmuje wartość bitu 1
kod: 0 1 1 0 0 1 0 1 65h
.....
bit 1 przyjmuje wartość bitu 2
cykle: 1 bajty: 2 (kod instrukcji
 RL A
itd......
65h + adres)
a) ang.  rotate left  przesuń w lewo
bit 6 przyjmuje wartość bitu 7
przykład: XRL A , 19h (dodanie logiczne
b) zawartość akumulatora zostaje przesunięta
a
A i zawartości komórki pod adresem 19h)
w lewo o 1 pozycję (o 1 bit), to znaczy że:
bit 7 przyjmuje wartość znacznika C
 XRL A , @Ri
bit 1 przyjmuje wartość bitu 0
c) znaczniki: C jest ustawiany zgodnie z wyni-
zsumowana (mod 2) logicznie zostaje za-
bit 2 przyjmuje wartość bitu 1
kiem operacji
wartość akumulatora komórki w
itd......
d) A <- rotacja w prawo (A) z C
wewn. RAM o adresie wskazywanym
bit 7 przyjmuje wartość bitu 6
kod: 0 0 0 1 0 0 1 1 13h
przez rejestr Ri. (R0 lub R1)
a
cykle: 1 bajty: 1
A <- A •" (Ri)
bit 0 przyjmuje wartość bitu 7
Przykład: jeżeli w A jest liczba 54h
kod: 0 1 1 0 0 1 1 i gdzie i wskazuje na
c) znaczniki: bez zmian
(01010100 binarnie) to wykonanie instruk-
R0 (i=0) lub R1 (i=1) stÄ…d: 66h, 67h
d) A <- rotacja w lewo (A)
cji:
cykle: 1 bajty: 1
kod: 0 0 1 0 0 0 1 1 23h
CLR C ;wyzeruje znacznik C
przykład: XRL A , @R0 (zsumowanie (mod 2)
cykle: 1 bajty: 1
RLC A ;przesuń w lewo
logiczne A i zawartości komórki o adresie
Przykład: jeżeli w A jest liczba 43h (01000011
z C akumulator
w R0)
binarnie) to po wykonaniu instrukcji:
....
 XRL A , #dana
RL A
spowoduje podzielenie przez 2 liczby zapi-
zsumowana (mod 2) logicznie zostaje za-
akumulator będzie zawierał liczbę: 86h
sanej w naturalnym kodzie binarnym
wartość akumulatora przez argument stały
(10000110 binarnie).
w akumulatorze.
(8-bitowa liczba)
A <- A •" dana
 RLC A
 SWAP A
kod: 0 1 1 0 0 1 0 0 64h
a) ang.  rotate left through carry  przesuń
a) ang.  swap nibbles within accumulator 
cykle: 1 bajty: 2 (kod instrukcji
cyklicznie w lewo ze znacznikiem C
wymień półbajty w akumulatorze
64h + dana)
b) zawartość akumulatora zostaje przesunięta
b) w wyniku tej instrukcji wymieniona zostaje
przykład: XRL A , #23 (zsumowanie (mod
w lewo o 1 pozycję (o 1 bit) z uwzględnie-
zawartość bitów 3...0 (mniej znaczący pół-
2) logiczne A i liczby 23)
niem znacznika C, to znaczy że: znacznik
bajt) i bitów 7...4 (bardziej znaczący półbajt)
 XRL adres , A
C przyjmuje wartość bitu 7 (akumulatora
akumulatora. Operacja ta jest równoważna
zsumowana (mod 2) logicznie zostaje za-
oczywiście)
4-krotnemu przesunięciu zawartości aku-
wartość akumulatora i komórki o poda-
bit 1 przyjmuje wartość bitu 0
mulatora.
nym adresie  adres , wynik zostaje
bit 2 przyjmuje wartość bitu 1
c) znaczniki: bez zmian
umieszczony w komórce pamięci o adresie
itd......
d) A3-0 <-> A7-4
 adres
bit 7 przyjmuje wartość bitu 6
kod: 1 1 0 0 0 1 0 0 C4h
(adres) <- (adres) •" A
a
cykle: 1 bajty: 1
kod: 0 1 1 0 0 0 1 1 62h
bit 0 przyjmuje wartość znacznika C
Przykład: sekwencja podana poniżej powo-
cykle: 1 bajty: 2 (kod instrukcji
c) znaczniki: C jest ustawiany zgodnie z wyni-
duje zamianę półbajtów akumulatora
62h + adres)
kiem operacji
MOV A , #52h ;wpisanie do akumulatora
przykład: XRL A , 20h (zsumowanie (mod
d) A <- rotacja w lewo (A) z C
liczby 52h
2) logicznie A i zawartości komórki pod ad-
kod: 0 0 1 1 0 0 1 1 33h
SWAP A ;wykonanie polecenia
resem 20h)
cykle: 1 bajty: 1
zamiany
 XRL adres , #dana
Przykład: jeżeli w A jest liczba 54h
..... ;w akumulatorze
zsumowana (mod 2) logicznie zostaje za- (01010100 binarnie) to wykonanie instrukcji:
znajduje siÄ™ teraz
wartość komórki o adresie  adres oraz ar- CLR C ;wyzeruje znacznik C
liczba 25h
gument stały (8-bitowa liczba) RLC A ;przesuń w lewo z C
(adres) <- (adres) •" dana ;akumulator
Uff! Na razie to tyle w następnym od-
kod: 0 1 1 0 0 0 1 1 63h ....
cykle: 2 bajty: 3 (kod instrukcji spowoduje wymnożenie przez 2 liczby za- cinku dokończenie listy instrukcji, a więc
63h + adres + dana) pisanej w naturalnym kodzie binarnym
pozostałe komendy dotyczące:
przykład: XRL 12h , #99 (dodanie logiczne w akumulatorze.
- operacji przemieszczania danych
zawartości komórki 12h i liczby 99)
- operacji na bitach (znacznikach)
 RR A
- skoki i pozostałe
 CLR A a) ang.  rotate right  przesuń w prawo
oraz krótki opis asemblera ASM51 przezna-
a) ang.  clear accumulator  zeruj akumulator b) zawartość akumulatora zostaje przesunięta
b) do akumulatora zostaje wpisana wartość 0. w prawo o 1 pozycję (o 1 bit), to znaczy że: czony szczególnie dla komputerowców.
c) znaczniki: bez zmian bit 0 przyjmuje wartość bitu 1 Sławomir Surowiński
ELEKTRONIKA DLA WSZYSTKICH 11/97 39
Też to potrafisz
Lekcja 2
2
W dzisiejszej lekcji sprawdzimy działa- czyli z zakresu 0...FFh (0...255 dziesięt- żesz sprawdzić ręcznie (na papierze) lub
nie niektórych spośród omówionych nie). Pierwsza liczba wyświetlana jest korzystając z kalkulatora wyposażonego
wcześniej instrukcji arytmetycznych i lo- na wyświetlaczach DL1 i DL2, druga w konwerter liczb zapisanych dziesiętnie
gicznych procesora na podstawie przykła- na DL4 i DL5 i szesnastkowo (np. taki z MS-Windows).
dowego programu. Działanie programu b) następnie wykonywana jest wybrana Program w postaci listingu  czyli
jest bardzo proste, otóż: przez Ciebie operacja arytmetyczna lub w zapisie zródłowym z dodatkowymi in-
a) najpierw program prosi o wprowadze- logiczna (o tym jak ją wybrać  za chwilę formacjami istotnymi szczególnie dla
nie dwóch liczb 8-bitowych w postaci c) w efekcie na wyświetlaczach DL7 i DL8 tych którzy nie mają komputera jest na-
heksadecymalnej, wypisywany jest wynik operacji, który mo- stępujący:
;Program do lekcji nr 2
;testowanie komend: ADD, SUBB, ANL, ORL, XRL, SWAP
;z wykorzystaniem instrukcji BIOS a
;********************************
8000 org 8000h ;pocztek zewn. pamieci programu
;********************************
8000 120274 znowu: lcall CLS ;wyczyszczenie wyswietlacza
8003 75F001 mov B,#1 ;pozycja 1 na displeju
8006 757840 mov DL1,#_minus ;znak    na pozycji wprowadzenia
8009 757940 mov DL2,#_minus ;pierwszego skladnika
800C 1203A7 lcall GETACC ;pobranie skladnika 1 dodawania
800F 128036 lcall wait1 ;odczekaj sekunde
8012 C0E0 push Acc ;i przechowanie go na stosie
8014 75F004 mov B,#4 ;pozycja 4 na displeju
8017 757B40 mov DL4,#_minus ;znak    na pozycji wprowadzeniaa
801A 757C40 mov DL5,#_minus ;drugiego skladnika
801D 1203A7 lcall GETACC ;pobranie skladnika 2 dodawania
8020 128036 lcall wait1 ;odczekaj sekunde
8023 D0F0 pop B ;sciagniecie skladnika 1 ze stosu do rej.B
8025 C3 clr C ;potrzebne do testowania instrukcji SUBB
8026 25F0 add A,B ;komenda dodania skladnikow - tu wstaw inne komendy
8028 75F007 mov B,#7 ;pozycja 7 na displeju
802B 12024E lcall A2HEX ;wypisanie wyniku dodawania
802E 128036 lcall wait1 ;odczekaj sekunde
8031 128036 lcall wait1 ;odczekaj sekunde
8034 80CA sjmp znowu ;i nastepne skladniki
;********************************
8036 C0E0 wait1: push Acc ;przechowanie A na stosie
8038 74FF mov A,#255
803A 120295 lcall DELAY ;odczekanie 0,5 sek
803D 74FF mov A,#255
803F 120295 lcall DELAY ;odczekanie 0,5 sek (w sumie 1 sek.)
8042 D0E0 pop Acc ;odtworzenie A (ze stosu)
8044 22 ret ;powrot do programu glownego
;********************************
8045 END
Szczegółowy opis listingu nie jest te- a) w pierwszej kolumnie podany jest ad- wym instrukcji zapisanej w dalszej
matem niniejszej lekcji (a przyszłego res początkowy danej linii programu części linii w sposób jawny. Dzięki te-
odcinka szkoły mikroprocesorowej), to- z zawartą w niej instrukcją. U nas adres mu  niekomputerowcy będą mogli
też przedstawię tylko istotne informa- początkowy to 8000h  początek pa- po prostu wklepać te dane  ciurkiem
cje potrzebne do wykonania zadania mięci SRAM w komputerku. Zauważ- od adresu 8000h bez mozolnego tłu-
z naszej dzisiejszej lekcji. Informacje my że cały program zajmuje 45 bajtów, maczenia z postaci zródłowej znajdują-
podzielÄ™ na te istotne dla komputerow- bo ostatnim adresem jest 8045h  cej siÄ™ w trzeciej kolumnie listingu).
ców oraz dla  ręczniaków (o ile mogę ostatnia linia listingu. Warto jednak przy tym chociaż chwilę
posłużyć się takim skrótem), tak więc, b) w każdej zawierającej instrukcję lini- zastanowić się i przetłumaczyć już te-
patrzymy na listing powyżej i wyjaśnia- i tuż za adresem znajduje się ciąg baj- raz (korzystając z tabeli we wkładce)
my sobie: tów będący odpowiednikiem maszyno- znane i nieznane instrukcje w kolej-
40 ELEKTRONIKA DLA WSZYSTKICH 11/97
Też to potrafisz
nych liniach a następnie porównać je Wytrwałym proponuję analizę i prze-  uruchom program (komenda  Jump )
z danymi z kolumny drugiej. tłumaczenie (tabela instrukcji we wkład- najpierw z instrukcją arytmetyczną
c) w listingu występują odwołania do pro- ce) kilku pierwszych lub całego listingu ADD (domyślnie znajduje się w pliku
cedur umieszczonych w programie programu a następnie porównanie efek- LEKCJA2.S03)
monitora są to: tów swojej pracy z kodami podanymi  wykonaj kilka działań na przykładowych
GETACC, A2HEX i DELAY. Nie wdając w naszym przykładzie. liczbach
się w szczegóły (na razie) wyjaśniam że f) `w naszym listingu w linii o adresie  zmodyfikuj plik zródłowy (klawisz F4
nazwom tym przypisane są adresy 8026h znajduje się właściwa instrukcja w Nortonie) czyli linię z instrukcją
w przestrzeni programu monitora (EP- testująca działanie danej funkcji aryt- ADD zamień na inne instrukcje poda-
ROM) od których zaczynają się kody tych metyczno-logicznej (zaciemniona linia). ne wcześniej w ćwiczeniu: SUBB,
procedur. Ich działanie jest następujące: W przykładzie naszym znajduje się in- ANL, ORL, XRL, wpisując je w miejs-
 GETACC : procedura pobrania, z kla- strukcja ADD  dodawania. ce ADD (uwaga: wielkość liter nie ma
wiatury, 8-bitowej liczby zapisanej W przypadku chęci zastosowanie in- znaczenia)
w postaci szesnastkowej i umieszcze- nej funkcji należy w miejsce kodu  25  skompiluj ponownie program i załaduj
nie jej w akumulatorze z jednoczesnym F0 (pod adresem 801A) wpisać odpo- do komputerka
wyświetleniem wpisywanej przez wiednie dla poszczególnych instrukcji,  uruchom ponownie program i wykonaj
użytkownika wartości na wyświetla- ciągi bajtów: kilka działań sprawdzając na kartce pa-
czu. Pozycja na której wypisywana jest dla SUBB wpisać: 95 F0 pieru lub kalkulatorze poprawność dzia-
wartość na displeju powinna być dla ANL wpisać: 55 F0 łania poszczególnych instrukcji.
określona przed jej wywołaniem w re- dla ORL wpisać: 45 F0 Przy okazji zajrzyj do powstałych
dla XRL wpisać: 65 F0
jestrze B. W naszym przykładzie dzięki w wyniku kompilacji zbiorów:
tej procedurze możesz wprowadzić korzystając z funkcji  Edit monitora.  listingu : LEKCJA2.LST
składniki testowanego działania. Uwaga, w przypadku testowania instruk-  zbioru : LEKCJA2.HEX zapisanego
 A2HEX : procedura wyświetlenia na cji SWAP A należy wpisać liczby: C4 00. w formacie Intel HEX. Więcej na temat
displeju w postaci szesnastkowej (na Zauważmy wszakże że poprzednie in- tego formatu danych możesz dowie-
2 wyświetlaczach) aktualnej zawartoś- strukcje były dwubajtowe, ta ostatnia zaś dzieć się z artykułu w naszym bratnim
ci akumulatora. Podobnie jak poprzed- jest 1-bajtowa. dlatego na pozycji drugiego piśmie  Elektronika Praktyczna nr
nio pozycja od której ma być wypisana bajtu wpisałem 00 co jest kodem maszy- 10/97 na stronie 75. Na łamach nasze-
liczba musi być określona w rejestrze nowym instrukcji  NOP   nie rób nic . go kursu wrócimy przy innej okazji do
B. W naszym przykładzie dzięki tej pro- Instrukcję NOP poznasz dokładnie w kolej- tego tematu.
cedurze wyświetlany jest wynik opera- nym numerze EdW. Na razie powiem Ci Postaraj się zapoznać ze zbiorem typu
cji na wyświetlaczach DL7 i DL8. tylko że podczas wykonywania instrukcji listing. Przekształć  ręcznie dowolne li-
 DELAY : procedura opóznienia, czas NOP procesor nie robi nic  czyli de facto nie programu (korzystając z tabeli we
opóznienia jest podawany w akumulato- leniuchuje przez jeden cykl maszynowy wkładce w tym numerze EdW) i porów-
rze przed wywołaniem procedury (12 cykli zegara). Zastosowanie tej instruk- naj otrzymane kody poszczególnych lini-
a mnożnik wynosi około 1,95 ms. Jeżeli cji przy modyfikacji kodu z poziomu moni- i z tymi w zbiorze LEKCJA2.LST .
zatem wpiszemy do akumulatora war- tora (funkcja Edit) jest uzasadnione, bo- Jako przykłady proponuję wykonać na-
tość 255 to po wywołanie procedury wiem jest ona niejako  wypełniaczem stępujące operacje:
DELAY będzie trwało ok. 255 x 1,95 ms brakującego bajtu kodu o adresie: 8027h. a) test funkcji ADD:
= 497 ms czyli około 0,5 sekundy. Zasto- Przy wprowadzaniu danych podczas testu argumenty: 12h, 67h wynik: 79h
sowanie tej procedury w naszym przy- instrukcji SWAP pierwszy składnik nie jest argumenty: FEh, 02h wynik: 00h
kładzie ma umożliwić Ci obserwację wy- brany pod uwagę (bo instrukcja SWAP jest b) test funkcji SUBB: (uwaga: tu 1 szy ar-
konywania programu  krok po kroku . 1-argumentowa) , toteż można wpisać do- gument jest odejmowany od 2 go !)
d) dowolny tekst znajdujący się za zna- wolną wartość najlepiej 00. argumenty: 12h, 67h wynik: 55h
kiem średnika  ; jest traktowany jako Po modyfikacjach należy opuścić funk- argumenty: F0h, 05h wynik: 15h
komentarz i nie jest brany pod uwagę cję  Edit i uruchomić ponownie pro- c) test funkcji ANL:
podczas kompilacji programu w przy- gram  komenda monitora  Jump , a na- argumenty: 1Fh, EEh wynik: 0Eh
padku korzystania z kompilatora na stępnie sprawdzić działanie nowo wpro- argumenty: F0h, 0Fh wynik: 00h
komputer PC. Uwagi zawarte w ko- wadzonej instrukcji. d) test funkcji ORL:
mentarzu sÄ… bardzo przydatne podczas argumenty: 7Eh, 80h wynik: FEh
analizy programu. Dla komputerowców: argumenty: 70h, 09h wynik: 79h
e) w przykładowym listingu większość in- Uwaga: przy przeglądaniu i modyfikacjach e) test funkcji XRL:
strukcji jest Ci jeszcze nie znana, są naszego przykładu korzystaj z DOSowego argumenty: 25h, 6Bh wynik: 4Eh
one jednak niezbędne do wykonania Nortona Commandera! Zanim zaczniesz argumenty: 55h, AAh wynik: FFh
tej lekcji, toteż proszę traktuj je jako do- zabawę przeczytaj uważnie plik informa- f) test funkcji SWAP:
myślne, więcej informacji na ich temat cyjny ASM51.DOC. argumenty: pierwszy nie istotny , 78h
w kolejnym numerze EdW. Na dyskietce z kompilatorem ASM51 wynik: 87h
znajduje się zbiór zródłowy z naszym przy- argumenty: pierwszy nie istotny , 39h
Dla  niekomputerowców : kładem pod nazwą  LEKCJA2.S03 . Po- wynik: 93h
Korzystając z funkcji monitora  Edit  winieneś wykonać następujące czynności: Zauważ że wszystkie instrukcje działają
należy wklepać kod programu, korzysta-  skompilować przykład do postaci ma- na liczbach 8 bitowych, toteż w przypad-
jąc z listingu powyżej, od adresu 8000h. szynowej , skorzystaj z programu wsa- ku przekroczenia zakresu tych liczb infor-
Dla ułatwienia podaję że pierwsze bajty dowego  DO.BAT , wydaj komendę: macja o wyniku jest częściowo tracona.
kodu to: > DO LEKCJA2 {Enter} Życzę wesołej zabawy i dużo wytrwa-
12, 02, 74, 75, F0, 01, 75, 78, 40, 75, 79,  załaduj program do komputerka (ko- łości !
40, 12, 03, A7, 12, 80, 36, C0, E0 itd.... . menda  Load monitora) Sławomir Surowiński
ELEKTRONIKA DLA WSZYSTKICH 11/97 41
Też to potrafisz
Mn?
it
kr
ro
ol
kr
oy
e
W kolejnym odcinku naszego cyklu
o mikrokontrolerach 8051 kontynuu-
jemy szczegółowy opis instrukcji
Tp.
or
to
as
kt
ie
e.
.
procesora ze zwróceniem uwagi na
składnię instrukcji oraz skrótowe
przykłady zastosowania. Podczas
analizy z pewnością przyda się za-
mieszczona we wkładce poprzed-
niego numeru EdW, tabela ze spi-
sem wszystkich instrukcji. I choć
dzisiejszy odcinek może wydać się
nieco monotonny, to trzeba pamiÄ™-
tać, że nauka każdego języka, tak
porozumiewania siÄ™ jak i programo-
Część 8
wania inteligentnych układów elekt-
ronicznych jest niezbędna każdemu Asembler  język maszynowy procesora
elektronikowi - hobbyście.
Kontynuując opis instrukcji przedsta- . We wszystkich przypadkach (oprócz  kod: 1 1 1 0 0 1 1 i stąd: E6h, E7h
 cykle: 1 bajty: 1
wimy kolejno grupę najważniejszych in- jednego) argumentami instrukcji MOV są
 przykład:
strukcji dotyczących przemieszczania da- wyrażenia 8 bitowe: rejestry, dane adre-
;przed wywołaniem
nych w strukturze rejestrów procesora. sy pośrednie itp. Jedynie załadowanie
instrukcji R1 zawiera
Dodatkowe instrukcje umożliwiające sko- 16 bitowego wskaznika adresu DPTR
wartość 34h
ki warunkowe oraz wywoływanie pod- wymaga odpowiedniego 16 bitowego
MOV A, @R1 ;załadowanie zawartości
programów, przedstawimy w ostatniej, (stałej) argumentu. komórki o adresie 34h do
;akumulatora
trzeciej części opisu asemblera. Poniżej opiszemy wszystkie możliwe
przypadki użycia instrukcji MOV.
MOV A, #dana
Operacje przemieszczenia
 instrukcja załadowania 8 bitowej liczby
MOV A, Rn
danych
 dana do akumulatora
 do akumulatora zostaje załadowana zawar-
1. Instrukcja MOV
A < dana
tość rejestru Rn
Instrukcją służącą do przekazywania
kod: 0 1 1 1 0 1 0 0 74h
A < Rn
danych pomiędzy rejestrami procesora
 cykle: 1 bajty: 2 (kod instrukcji:
 kod: 1 1 1 0 1 n2 n1 n0 gdzie n2...n0
74h + dana)
pamięcią wewnętrzną jest:  MOV (ang. wskazują na R0...7 stąd: E8h EFh
 przykład:
 cykle: 1 bajty: 1
 move  przesuń, przenieś)
 przykład: MOV A,#100 ;załadowanie do
W zależności od tego co i gdzie
MOV R7,#0 akumulatora liczby 100
 przenosimy , polecenie to może mieć
MOV A, R7 ;wyzerowanie akumulatora
kilkanaście różnych postaci w zależności
......
MOV Rn, A
od zastosowanych argumentów. Jedno-
 do rejestru Rn (R0...R7) zostaje załadowana
MOV A, adres
cześnie warto wiedzieć, że polecenie to
zawartość akumulatora
 do akumulatora zostaje załadowana zawar-
Rn < A
w praktyce nie powoduje dosłownego
tość komórki wewnętrznej pamięci RAM
 kod: 1 1 1 1 1 n2 n1 n0 gdzie n2...n0
 przemieszczenia danej, lub zawartości
o adresie:  adres
wskazujÄ… na R0...7 stÄ…d: F8h FFh
rejestru, ale jej skopiowanie ze zródła do
A < (adres)
 cykle: 1 bajty: 1
miejsca przeznaczenia.  kod: 1 1 1 0 0 1 0 1 E5h
 przykład:
Ogólne instrukcję MOV można zapi-  cykle: 1 bajty: 2 (kod instrukcji E5h
MOV R3, A ;przepisanie zawartości
+ 8 bitowy adres)
sać jako:
akumulatora do rejestru R3
 przykład:
MOV
MOV A, 20h ;załadowanie do A
MOV Rn, adres
gdzie: jest miejscem przeznaczenia
zawartości komórki
 do rejestru Rn (R0...R7) zostaje załadowana
 tam dokąd ma być skopiowana dana ze o adresie 20h
zawartość komórki o adresie  adres
zródła (ang.  destination ) , a zród-
Rn < (adres) gdzie n = 0...7
MOV A, @Ri
Å‚em pobrania danej (ang.  source ).
 do akumulatora zostaje załadowana zawartość ko-  kod: 1 0 1 0 1 n2 n1 n0 gdzie n2...n0
W wyniku wykonania instrukcji MOV za-
mórki wewn. RAM, której adres znajduje się w re- wskazują na R0...7 stąd: A8h AFh
wartość zródła zostaje umieszczona
jestrze R0 (i=0), lub R1 (i=1)  cykle: 1 bajty: 2 (kod instrukcji + adres)
(skopiowana) w obiekcie przeznaczenia A < (Ri) gdzie i = 0 lub 1  przykład:
ELEKTRONIKA DLA WSZYSTKICH 12/97 37
Też to potrafisz
MOV R4, 65h ;załadowanie do rejestru MOV 45h, #100;komórce o adresie 45h
o konkretnym zdarzeniu. Ponieważ takie
R4 zawartości komórki zostaje nadana wartość 100
komunikaty są z reguły niezmienne,
o adresie 65h
w praktyce programista umieszcza je
MOV @Ri, A
w kodzie programu (pamięci stałej).
MOV Rn, #dana  do komórki o adresie znajdującym się w re-
Dzięki takiemu działaniu instrukcja
 do rejestru Rn (R0...R7) zostaje wpisana jestrze R0 (i=0) lub R1 (i=1) zostaje wpisana
8 bitowa liczba zawartość akumulatora MOVC umożliwia odczytanie całego kodu
Rn < dana gdzie n = 0...7 (Ri) < A
programu użytkownika, co często w prakty-
 kod: 0 1 1 1 1 n2 n1 n0 gdzie n2...n0  kod: 1 1 1 1 0 1 1 i gdzie i = 0 lub 1
ce nie jest pożądane, bo pozwala na np.
wskazujÄ… na R0...7 stÄ…d: 78h 7Fh stÄ…d: F6h, F7h
 nielegalny odczyt i skopiowanie przez
 cykle: 1 bajty: 2 (kod instrukcji + dana)  cykle: 1 bajty: 1
osobę niepowołaną ( hackera ) programu
 przykład: jeżeli chcemy np. wpisać do rejes-  przykład:
CLR A ;wyzerowanie akumulatora
tru R6 liczbę 16 można wydać komendę utworzonego przez programistę. Jest to
MOV @R1, A ;wyzerowanie komórki
MOV R6, #10h ;10h szesnastkowo to 16
oczywiście naruszeniem praw autorskich
o adresie w R1
dziesiętnie
danego projektu, ale Å‚amiÄ…cemu prawo pi-
ratowi pozwala np. na powielenie ciekawe-
MOV @Ri, adres
MOV adres, A
 do komórki o adresie  adres zostaje wpi-  do komórki o adresie znajdującym się w re- go urządzenia (np. sterownika) bez zgody
jestrze R0 (i=0) lub R1 (i=1) zostaje wpisana
sana zawartość akumulatora jego autora. Na szczęście procesor 8051
zawartość komórki o adresie  adres
(adres) < A
i wszystkie z jego rodziny majÄ… wbudowa-
(Ri) < (adres)
 kod: 1 1 1 1 0 1 0 1 F5h
ne mechanizmy sprzętowego zabezpiecze-
 cykle: 1 bajty: 2 (kod instrukcji + adres)  kod: 1 0 1 0 0 1 1 i gdzie i = 0 lub 1
nia przed takÄ… sytuacjÄ…. Istnieje bowiem
stÄ…d: A6h, A7h
 przykład:
możliwość permanentnego zablokowania
MOV 00h, A ;wpisanie zawartości  cykle: 2 bajty: 2 (kod instrukcji + adres)
akumulatora do komórki  przykład: instrukcji MOVC wywoływanej z zewnę-
MOV R0, #11h
o adresie 0
trznej pamięci programu (napisanego np.
MOV @R0,10h ;przepisanie zawartości
;instrukcja równoznaczna
przez hackera). Sytuacja ta dotyczy oczy-
komórki o adresie 10h do
zapisowi MOV R0, A w
wiście aplikacji wykorzystujących proceso-
komórki
;przypadku gdy
ry z wewnętrzną pamięcią programu (87xx,
;sÄ…siedniej o adresie 11h
aktywnym zbiorem rej.
roboczych jest 0. 89xx) gdzie przezorny programista umieścił
MOV @Ri, #dana
kod programu w wewnętrznej pamięci pro-
MOV adres, Rn  do komórki o adresie znajdującym się w re-
gramu, uniemożliwiając tym skopiowanie
 do komórki o adresie  adres zostaje wpi- jestrze R0 (i=0) lub R1 (i=1) zostaje wpisana
go przez osoby niepowołane. W przypadku
wartość stała (liczba)
sana zawartość rejestru Rn (R0...R7)
aplikacji z kodem programu umieszczone-
(Ri) < dana
(adres) < Rn gdzie n = 0...7
 kod: 1 0 0 0 1 n2 n1 n0 gdzie n2...n0  kod: 0 1 1 1 0 1 1 i gdzie i = 0 lub 1 go w zewnętrznej pamięci programu (np.
stÄ…d: 76h, 77h
 wskazujÄ… na R0...7 stÄ…d: 88h 8Fh
EPROM) nie istnieje możliwość zabezpie-
 cykle: 2 bajty: 2 (kod instrukcji + adres)  cykle: 1 bajty: 2 (kod instrukcji + dana)
czenia programu  hacker może w po pros-
 przykład:
 przykład:
tu wyjąć z układu pamięć EPORM (ROM)
MOV @R0, #255 ;jeżeli wcześniej
MOV 30h, R5 ;wpisanie do komórki
i odczytać ją na dowolnym programatorze
rejestr R0 miał
w wew. RAM zawartości
wartość np. 30h, to w (bez stosowania instrukcji MOVC) .
rejestru ;R5.
;efekcie tej operacji
do komórki o adresie
MOV adres1, adres2
MOVC A, @A+DPTR
30h zostanie
 przepisanie zawartości komórki o adresie
 do akumulatora zostaje załadowana dana z pa-
; wpisana liczba 255
 adres2 do komórki o adresie  adres1
mięci programu spod adresu będącego sumą
(adres1) < (adres2)
bieżącej wartości wskaznika danych DPTR i za-
MOV DPTR, #dana16
 kod: 1 0 0 0 0 1 0 1
wartości akumulatora. Najpierw procesor two-
 cykle: 2 bajty: 3 (kod instrukcji + adres2  instrukcja załadowania 16 bitowego, bez-
rzy 16 bitowy adres poprzez dodanie DPTR
względnego adresu do wskaznika danych
+ adres1)
i A potem pobiera spod tego adresu danÄ… (bajt
DPTR
 przykład:
kodu programu) i umieszcza jÄ… z akumulatorze.
DPTR < dana16 gdzie  dana16 jest
MOV 7Fh, 7Eh ;przepisanie zawartości
A < (A + DPTR)
liczbÄ… 16 bitowÄ… (zakres: 0...FFFFh)
dwóch sąsiadujących
 kod: 1 0 0 1 0 0 1 1 93h
 kod: 1 0 0 1 0 0 0 0 90h
komórek w
 cykle: 2 bajty: 1
;wew. RAM procesora  cykle: 2 bajty: 3 (kod instrukcji + starszy
 przykład:
bajt + młodszy bajt liczby  dana16 )
MOV DPTR, #tablica ;załadowanie
 przykład:
MOV adres, @Ri
adresu tablicy
 do komórki o adresie  adres zostaje wpi- MOV DPTR,#0 ;wyzerowanie wskaznika
do wskaznika
danych
sana zawartość komórki której adres
DPTR
znajduje siÄ™ w rejestrze R0 (i=0) lub R1 (i=1)
MOV A,#3 ;pobierz czwarty
(adres) < (Ri)
2. Instrukcja MOVC element tablicy
 kod: 1 0 0 0 0 1 1 i gdzie i = 0 lub 1
(nie trzeci, bo od
PodobnÄ… do instrukcji MOV jest
stÄ…d: 86h, 87h
;elementy sÄ…
MOVC. Służy ona także do przemieszcza-
 cykle: 2 bajty: 2 (kod instrukcji + adres)
numerowane
nia danych z tym że przemieszczanie do-
 przykład:
od zera)
tyczy tylko pobierania danych (bajtów)
MOV R1, #32 MOVC A, @A+DPTR ;pobranie
MOV 32h, @R1 ;przepisanie zawartości znajdujących się w kodzie programu, czy- elementu 
komórki o adresie 32h na nia litera  A
li w wewn. lub zewnętrznej pamieci pro-
;samÄ… (fizycznie operacja ....... ;gdzie tablica
gramu procesora. W praktyce instrukcjÄ™
ta nie ma efektu) może być
tÄ™ wykorzystuje siÄ™ do pobierania danych
zdefiniowana
stałych (np. tablic przy konwersji arytme-
MOV adres, #dana w programie
 do komórki o adresie  adres zostaje wpi- tycznej lub logicznej. Innym często spoty- jako np.:
sana wartość stałą (8 bitowa liczba) tablica DB  WITAJ KOLEGO!
kanym przypadkiem jest generowanie
(adres) < stała
standardowych komunikatów (teksto-
 kod: 0 1 1 1 0 1 0 1 75h MOVC A, @A+PC
wych) np. na wyświetlaczach LCD
 cykle: 2 bajty: 3 (kod instrukcji + adres  do akumulatora zostaje załadowana dana
w określonych sytuacjach pracy proceso-
+ dana) z pamięci programu spod adresu będącego
 przykład: ra w celu poinformowania użytkownika sumą wartości: licznika rozkazów PC (na-
38 ELEKTRONIKA DLA WSZYSTKICH 12/97
Też to potrafisz
stępnej po tej instrukcji) i zawartości aku- A < (DPTR) tu P2 procesora, co w wielu przypadkach
mulatora. W praktyce przy wykonaniu tej in-  kod: 1 1 1 0 0 0 0 0 E0h jest wręcz niezbędne. Można by oczywiście
strukcji, adres pobrania jest równy sumie  cykle: 2 bajty: 1 zaadresować tę pamięć za pomocą instrukcji
zawartości akumulatora oraz wartości liczni-  przykład: MOVX A, @DPTR (podając wtedy adres
ka rozkazów  będzie to adres następnej po aby odczytać zawartość komórki z zewn. MOV DPTR, #0124h), ale wtedy zniszczeniu
MOVC instrukcji. RAM o adresie np. 1240h nalezy wykonać uległy by stany pozostałych, nie dołączonych
A < (A + PC) instrukcje: do pamięci, końcówek portu P2.
 kod: 1 0 0 0 0 0 1 1 83h MOV DPTR, #1240h ;załadowanie
 cykle: 2 bajty: 1 adresu (16 bit) do MOVX @Ri, A
 przykład: wskaznika DPTR  do obszaru zewnętrznej pamięci danych
CLR A ;wyzerowanie akumulatora MOVX A, @A+DPTR ;i odczyt danej spod o adresie znajdujÄ…cym siÄ™ w rejestrze Ri (R0
MOVC A, @A+PC ;pobranie do tego adresu gdy i=0 lub R1 gdy i=1) zostaje przesłana za-
...... ;dana znajduje siÄ™
akumulatora kodu wartość akumulatora. Innymi słowy jest to
w akumulatorze
rozkazu NOP (00h) zapis do zewnętrznej pamięci danych.
NOP (Ri) < A gdzie Ri = R0, lub R1
MOVX @DPTR, A
......  kod: 1 1 1 1 0 0 1 i gdzie i = 0,1
 do komórki zewnętrznej pamięci danych
stÄ…d: F2, F3
o podanym w DPTR adresie zostaje przesła-  cykle: 2 bajty: 1
3. Instrukcja MOVX
na zawartość akumulatora  innymi słowy  przykład:
Instrukcja MOVX służy do przesyłania
jest to operacja zapisu do zewnętrznej pa- wezmy sytuacje z poprzedniego przykładu,
danej pomiędzy akumulatorem a zewnęt-
mięci danych.
ale tym razem chcemy zapisać daną znajdu-
rzną pamięcią danych. Wykonanie tej in- (DPTR) < A
jącą się w akumulatorze do komórki o adre-
 kod: 1 1 1 1 0 0 0 0 F0h
strukcji uaktywnia sygnały /RD (przy od- sie 00h na stronie 7 (innymi słowy fizyczny
 cykle: 2 bajty: 1
adres komórki będzie równy: 0700h), w tym
czycie z zewnętrznej pamięci) lub /WR
 przykład:
celu należy wykonać ciąg instrukcji:
(przy zapisie) procesora  piny P3.7 i P3.6.
aby zapisać daną w obszarze zewnętrznej
SETB P2.2 ;ustawienie linii
Dodatkowo porty P0 i P2 pełnią wtedy ro-
pamięci danych pod adresem np. 8000h na-
adresowej A10
lę magistrali systemowej dzięki której wy- leży wykonać instrukcje:
SETB P2.1 ;ustawienie linii
MOV A, ...... ;w miejsce kropek należy
stawiany jest adres oraz przekazywana adresowej A9
wpisać zródło danej
SETB P2.0 ;ustawienie linii
dana do zewnętrznej pamięci danych.
MOV DPTR, #8000h ;podajemy też
adresowej A8 (strona: 7)
Jak już zapewne wiesz z poprzednich
adres zapisu
MOV R1, #00h ;załadowanie
odcinków naszego cyklu zewnętrzna pa-
MOVX @DPTR,A ;i zapisujemy
adresu komórki
mięć danych można zaadresować w dwo-
danÄ… w zewn.
do wskaznika
pamięci
jaki sposób. MOVX @R1, A ;i zapisane danej
z akumulatora
Pierwszą metodą jest użycie pełnego
w zewn. RAM
16 bitowego adresu. W takim przypadku
......
Tryb stronicowania
procesor odczytujÄ…c lub zapisujÄ…c danÄ…
(niepełnego adresu)
w tej pamięci (właśnie dzięki instrukcji
MOVX) młodszą część adresu zatrzaskuje
4. Instrukcje przesyłania wymiany danych
MOVX A, @Ri
w zewnętrznym latch u (np. 74573), star-
 do akumulatora zostaje przesłana zawartość
ze stosem
szą wystawia na port P2. komórki w obszarze zewn. pamięci danych
PUSH adres
Często jednak używana kostka pamię- spod adresu znajdującego się w rejestrze  ang.  push onto stack , prześlij na stos
R0 (i=0) lub R1 (i=1): adres 8 bitowy  w wyniku tej operacji zawartość wskaznika
ci SRAM jest mniejszej pojemności
A < (Ri) gdzie Ri = R0, lub R1
stosu SP jest zwiększana o 1, po czym na
i większość linii adresowych starszego
 kod: 1 1 1 0 0 0 1 i gdzie i = 0,1
wierzchołek stosu (adresie w wew. RAM
bajta (adresu) nie jest wykorzystana do
stÄ…d: E2, E3
wskazywanym przez SP) zostaje zapisana
sterowania pamięcią. W takim przypadku  cykle: 2 bajty: 1
zawartość komórki z wew. RAM o podanym
adresie bezpośrednim  adres . Innymi sło-
możliwe jest adresowanie pamięci za po-  przykład:
niech w układzie z procesorem 8951 pracu- wy wykonywana jest operacja  przesłania
mocą tzw.  stronicowania . Ten sposób
jącym z wewn. pamięcią programu znajduje
na stos .
omówiliśmy już w poprzednich odcin-
się zewnętrzna pamięć danych w postaci
SP < SP + 1, (SP) < (adres)
kach szkoły mikroprocesorowej. Jak za-
kostki SRAM 2kB  typ 6116.
 kod: 1 1 0 0 0 0 0 0 C0h
pewne pamiętasz w takim trybie adreso- Linie adresowe A0...A7 tej pamięci są dołą-  cykle: 2 bajty: 2 (kod instrukcji
C0h + adres)
wania procesor przy obsłudze zewnętr- czone do zatrzasku młodszej części adresu
szyny procesora (patrz poprzednie odcinku  przykłady:
znej pamięci danych wystawia tylko
cyklu). Trzy starsze linie A8...A10 są dołą- PUSH ACC ;przesłanie akumulatora
młodszą część adresu (A0...A7), nato-
czone np. do pinów P2.0, P2.1 i P2.2 proce-
na stos
miast port P2 nie jest modyfikowany, co
sora, pozostałe końcówki portu P2 PUSH B ;przesłanie rejestru B
pozwala użytkownikowi na pełna kontro- (P2.2...P2.7) są wykorzystywane np. do ste- na stos
rowania przekaznikami jakiegoÅ› urzÄ…dzenia
lę sposobu i kierunku ustawienia jego PUSH 20h ;przesłanie zawartości
zewnętrznego. Aby odczytać daną z tej pa- komórki o adresie 20h
końcówek  a więc jest metodą na mak-
mięci np. spod adresu 24h na stronie pierw- na stos
symalne wykorzystanie cechy  jed-
szej (strony liczone od 0 do 7, bo 2kB / 256 PUSH DPH ;przesłanie 16 bitowego
noukładowości procesora.
= 8 stron) należy wykonać instrukcje: wskaznika danych na stos
I tak dwa wspomniane dwa tryby ad- CLR P2.2 ;wyzerowanie linii PUSH DPL ;w dwóch instrukcjach,
adresowej A10
resowania zewnętrznej RAM maja swoje starsza i młodsza część
CLR P2.1 ;wyzerowanie linii DPTR
odzwierciedlenie w liście instrukcji z wy-
adresowej A9 .....
korzystaniem rozkazu MOVX, oto one.
SETB P2.0 ;ustawienie linii
adresowej A8 (strona: 1) POP adres
Tryb pełnego adresu
MOV R1, #24h ;załadowanie  ang.  pop from stack , zdejmij ze stosu
(16 bitowego) adresu komórki  w wyniku tej operacji dana znajdująca się
do wskaznika pod adresem w wewn. RAM określonym
MOVX A, @DPTR MOVX A, @R1 ;i przesłanie jej zawartości w SP zostaje wpisana do komórki o poda-
 do akumulatora zostaje załadowana dana do akumulatora nym adresie bezpośrednim  adres . Na-
(bajt) z zewnętrznej pamięci danych (odczyt ...... stępnie wskaznik stosu SP zostaje zmniej-
z zewnętrznej pamięci danych) spod adresu Zauważ że przy takim zaadresowaniu pamię- szony o 1. Innymi słowy wykonywana jest
w DPTR ci nie uległy modyfikacji piny P2.3...P2.7 por- operacja  zdjęcia ze stosu .
ELEKTRONIKA DLA WSZYSTKICH 12/97 39
Też to potrafisz
(adres) < (SP), SP < SP  1 A3 0 < > (Ri)3 0 e) przykład:
 kod: 1 1 0 1 0 0 0 0 D0h  kod: 1 1 0 1 0 1 1 i gdzie i = 0,1 SETB C
 cykle: 2 bajty: 2 (kod instrukcji stÄ…d: D6h, D7h ADDC A,#0 ;inkrementacja
D0h + adres)  cykle: 1 bajty: 1 akumulatora
 przykład: jeżeli w poprzednim przykładzie  przykład: z wykorzystaniem C
załadowaliśmy na stos rejestry w w/w kolej- MOV A, #5Ah ....
ności, to aby poprawnie je odtworzyć nale- MOV @R1, #A5h
ży zdjąć je w kolejności odwrotnej, czyli: CLR bit
XCHD A, @R1
POP DPL
.... ;teraz w akumulatorze a) ang.  clear bit , zeruj bit
POP DPH ;odtworzenie wskaznika
będzie liczba 55h, a pod b) w wyniku tej operacji wyzerowany zostaje
DPTR
;adresem @R1 liczba AAh bit którego adres podany jest bezpośrednio
POP 20h ;następnie komórki
(bit) < 0
o adresie 20h
c) kod: 1 1 0 0 0 0 1 0 C2h
Operacje na bitach
POP B ;i rejestru B
d) cykle: 1 bajty: 2 (instrukcja C2 + adres bitu)
Do tej pory omawialiśmy instrukcje
POP ACC ;wreszcie akumulatora
e) przykład:
operujÄ…ce na bajtach danych. Procesor
....
CLR AFh ;zablokowanie systemu
8051 i mu pochodne zawiera bardzo po-
przerwań (EA w słowie
mocny zestaw instrukcji do wykonywa-
IE = 0)
....
nia operacji na pojedynczych bitach.
5. Dodatkowe instrukcje przemieszczania
Przykład ten można także zapisać w postaci
Dzięki temu możliwe jest wykonanie
danych
CLR EA
XCH A, Rn
wielu często niezbędnych operacji, jed-
 ang.  exchange register with accumulator ,
na z nich było omówione wcześniej stro-
SETB bit
wymień akumulator z rejestrem
nicowanie zewnętrznej pamięci danych
a) ang.  set bit , ustaw bit
 w wyniku tej operacji zawartość akumulato-
(przykład z instrukcją MOV @Ri,A). Trze- b) w wyniku tej operacji ustawiony zostaje bit
ra zostaje wymieniona z zawartością rejest-
którego adres podany jest bezpośrednio
ba wiedzieć że większość rejestrów
ru Rn (R0...R7), wymieniona tzn. że liczba
(bit) < 1
znajdujÄ…ca siÄ™ w A znajdzie siÄ™ w Rn, i od- specjalnych SFR procesora posiada
c) kod: 1 1 0 1 0 0 1 0 D2h
wrotnie.
możliwość bezpośredniego adresowa-
d) cykle: 1 bajty: 2 (instrukcja + adres bitu)
A < > Rn
nia ich bitów. I tak np. akumulator (A)
e) przykład:
 kod: 1 1 0 0 1 n2 n1 n0 gdzie n2...n0
SETB P1.2 ;ustawienie wysokiego
składa się z 8 miu adresowanych bitów
wskazujÄ… na R0...7 stÄ…d: C8h CFh
poziomu logicznego
 cykle: 1 bajty: 1 Acc.7 ... Acc.0
;na wyprowadzeniu
 przykład:
Toteż aby np. ustawić wybrane bity te-
2 portu P1 (pin 3 procesora)
MOV A, #10 ;nadanie wartości
go rejestru nie trzeba modyfikować całoś-
akumulatorowi
ci a jedynie wyzerować lub ustawić wy- CPL C
MOV R4, #23 ;nadanie wartości
brani bit. Dla przykładu prześledzimy sytu- a) ang.  complement carry , zaneguj flagę
rejestrowi R4
przeniesienia
XCH A, R4 ;wymiana danych ację kiedy chcemy wyzerować bit 4 aku-
b) w wyniku tej operacji flaga C zostaje zane-
.... ;teraz w A jest liczba 23,
mulatora bez ingerowania w pozostałe,
gowana
a w R4 liczba 10
można wykonać te zadanie dwojako:
C < /C
 poprzez instrukcjÄ™ iloczynu logicznego:
c) kod: 1 0 1 1 0 0 1 1 B3h
XCH A, adres
d) cykle: 1 bajty: 1
 w wyniku tej operacji zawartość akumulato- ANL A, #11101111b ;wyzerowanie
e) przykład:
ra zostaje wymieniona z zawartością komór-
bitu 4
SETB C ; C=1
ki w wew. pamięci RAM o podanym adresie
akumulatora
CPL C ;teraz C=0
bezpośrednim
 lub poprzez instrukcję działającą na po-
A < > (adres)
jedynczym bicie:
CPL bit
 kod: 1 1 0 0 0 1 0 1 C5h
a) ang.  complement bit , zaneguj bit
CLR Acc.4
 cykle: 1 bajty: 2 (kod instrukcji C5 + adres)
b) w wyniku tej operacji zanegowany zostanie
 przykład:
Instrukcje operujÄ…ce na bitach nabiera-
bit, którego adres podany jest bezpośrednio
MOV A,#99
ją szczególnie praktycznego znaczenia
(bit) < /(bit)
MOV 00h, #0
przy badaniu stanu końcówek (portów)
c) kod: 1 0 1 1 0 0 1 0 B2h
XCH A, 00h ;teraz w akumulatorze
mikroprocesora lub przy ich sterowaniu d) cykle: 1 bajty: 1
będzie 0
e) przykład: wykonanie instrukcji
.... (ustawianiu na nich poziomów logicznych
neg: CPL P1.0
niskich lub wysokich oraz przy ustawianiu
SJMP neg
XCH A, @Ri
w stan wysokiej impedancji). Problemem
spowoduje nieprzerwane generowanie na
 w wyniku tej operacji zawartość akumulato-
tym zajmiemy siÄ™ przy okazji kolejnej lek-
pinie 1 procesora fali prostokÄ…tnej
ra zostaje wymieniona z zawartością komór-
cji ze szkoły mikroprocesorowej. o częstotliwości równej: ..... (jako ćwiczenie
ki w wew. RAM o adresie znajdujÄ…cym siÄ™
powinieneś sam wpisać wartość  odpo-
w rejestrze R0 (i=0) lub R1 (i=1)
CLR C wiedz w kolejnym odcinku naszego cyklu).
A < > (Ri)
a) ang.  clear carry , zeruj flagÄ™ przeniesienia
 kod: 1 1 0 0 0 1 1 i gdzie i = 0,1
b) w wyniku tej operacji wyzerowany zostaje znacz- ANL C, bit
stÄ…d: C6h, C7h
nik (bit w rejestrze PSW) przeniesienia C a) ang.  AND direct bit to carry , iloczyn lo-
 cykle: 1 bajty: 1
C < 0 giczny znacznika C i bitu o adresie podanym
 przykład: wykonanie instrukcji
c) kod: 1 1 0 0 0 0 1 1 C3h jako bezpośredni
MOV R1, #20h
d) cykle: 1 bajty: 1 b) w wyniku tej operacji zostanie wykonany
CLR A
e) przykład: iloczyn logiczny flagi przeniesienia C oraz bi-
XCH A, @R1
CLR C ;wyzerowanie przeniesienia tu o adresie  bit , a wynik zostanie umiesz-
jest równoważne
SUBB A, B ;aby odjąć A  B bez pożyczki czony w C
MOV A, 20h
....
MOV 20h, #0 C < C )" (bit)
zastanów się dlaczego ? c) kod: 1 0 0 0 0 0 1 0 82h
SETB C d) cykle: 2 bajty: 2 (kod instrukcji + adres bitu)
XCHD A, @Ri a) ang.  set carry , ustaw flagę przeniesienia e) przykład:
 w wyniku tej operacji młodszy półbajt (bity b) w wyniku tej operacji ustawiona zostaje fla- ANL C, D6h ;iloczyn flagi przeniesienia
3 0) akumulatora zostaje wymieniony ga przeniesienia C i flagi przeniesienia
z młodszym półbajtem komórki w wew. C < 1 ;pomocniczego AC
RAM o adresie zawartym w rejestrze Ro c) kod: 1 1 0 1 0 0 1 1 D3h (jej adres w słowie
(i=0) lub R1 (i=1). d) cykle: 1 bajty: 1 PSW to D6h)
40 ELEKTRONIKA DLA WSZYSTKICH 12/97
Też to potrafisz Też to potrafisz
ANL C, /bit c) kod: 1 0 1 0 0 0 0 0 A0h Załóżmy że bit1 zdefiniowaliśmy jako:
a) ang.  AND complement of direct bit to car- d) cykle: 2 bajty: 2 (kod instrukcji + adres bitu) bit1 EQU 20h ;EQU to deklaracja
ry , iloczyn logiczny znacznika C i zanego- e) przykład: równoważności
wanego bitu o adresie podanym jako bezpo- ORL C, /D7h ;równoważne ustawieniu  przypisania
średni znacznika C ;nazwie umownej
b) w wyniku tej operacji zostanie wykonany ;bo zsumowano C przed (wyrazowi) konkretnego
iloczyn logiczny flagi przeniesienia C oraz za- zanegowane C adresu
negowanego bitu o adresie  bit , a wynik ;(adres C w PSW to D7h) a bit 2 jako
zostanie umieszczony w C bit2 EQU 30h
C < C )" /(bit) MOV C, bit Chcąc teraz przenieść zawartość bitu 1 do
c) kod: 1 0 1 1 0 0 0 0 B0h a) ang.  move direct bit to carry , przenieś za- bitu 2 często początkujący wykonują błędną
d) cykle: 2 bajty: 2 (kod instrukcji + adres bitu) wartość bitu o podanym adresie bezpośred- operację:
e) przykład: nim do znacznika przeniesienia C MOV bit2, bit1
ANL C, /D7h ;równoważne b) w wyniku tej operacji zawartość bitu o po- co w efekcie nie powoduje przeniesienia bi-
wyzerowaniu znacznika C danym adresie  bit zostanie przepisana do tu 1 do 2 ale przepisanie zawartości komórki
;bo wymnożono C przed znacznika przeniesienia C wew. RAM o adresie 20h do komórki o adre-
zanegowane C C < (bit) sie 30h  wykonywana jest zatem operacja
;(adres C w PSW to D7h) c) kod: 1 0 1 0 0 0 1 0 A2h na bajtach , a nie przenoszenie bitów (patrz
d) cykle: 1 bajty: 2 (kod instrukcji A2h + adres instrukcja: MOV adres1, adres2)
ORL C, bit bitu) Prawidłową odpowiedzią na postawione za-
a) ang.  OR direct bit to carry , logiczna suma e) przykład: danie będzie wykorzystania instrukcji MOV
znacznika C i bitu o adresie podanym jako MOV C, P1.7 ;odczyt stanu końcówki działających na bitach i znaczniku przenie-
bezpośredni 7 portu P1 i wpisanie go sienia C w postaci sekwencji:
b) w wyniku tej operacji zostanie wykonana do C MOV C, bit1 ;najpierw załaduj bit1 do C
suma logiczna flagi przeniesienia C oraz bitu MOV bit2, C ;a potem C do bitu 2,
o adresie  bit , a wynik zostanie umiesz- MOV bit, C w efekcie przeniosłeś bit1
czony w C a) ang.  move carry to direct bit , przenieÅ› za- do 2
C < C (bit) wartość znacznika C do bitu o podanym ad- ....
c) kod: 0 1 1 1 0 0 1 0 72h resie bezpośrednim
W dzisiejszym odcinku to wszystkie
d) cykle: 2 bajty: 2 (kod instrukcji + adres bitu) b) w wyniku tej operacji zawartość znacznika
instrukcje, w trzeciej części  ostatniej
e) przykład: przeniesienia C zostanie przepisana do bitu
opisującej listę poleceń procesora 8051
ORL C, D6h ;suma flagi przeniesienia o podanym adresie bezpośrednim  bit
zapoznasz siÄ™ drogi Czytelniku z instruk-
C i flagi przeniesienia (bit) < C
;pomocniczego AC c) kod: 1 0 0 1 0 0 1 0 92h cjami skoków warunkowych, bezwarun-
(jej adres w słowie PSW d) cykle: 2 bajty: 2 (kod instrukcji
kowych i do podprogramów. Po zapozna-
to D6h) + adres bitu)
niu się z pozostałymi poleceniami roz-
e) przykład:  pytanie?...
poczniemy wspólne tworzenie pierw-
ORL C, /bit jak przenieść zawartość jakiegoś bitu (o podanym
szych aplikacji (programów) na procesor
a) ang.  OR complement of direct bit to car- adresie bezpośrednim do innego o innym adresie
ry , suma logiczna znacznika C i zanegowa- bezpośrednim  czyli wykonać operację : 8051 przy wykorzystaniu zmontowanego
nego bitu o adresie podanym jako bezpo- (bit2) < (bit1)
przez Ciebie komputerka edukacyjnego.
średni Otóż do wykonania tego niezbędny jest
Na razie w celu przećwiczenia omó-
b) w wyniku tej operacji zostanie wykonana znacznik C, nie można bowiem wykonać ta-
wionych dzisiaj instrukcji zapraszam do
suma logiczna flagi przeniesienia C oraz za- kiej operacji bezpośrednio jednym rozkazem.
wnikliwej lektury  Lekcji 3 szkoły mikro-
negowanego bitu o adresie  bit , a wynik Nie istnieje w 8051 instrukcja która by wyko-
zostanie umieszczony w C nywała taką operację przeniesienia zawartoś- procesorowej.
C < C *" /(bit) ci jednego bitu do drugiego bezpośrednio.
Sławomir Surowiński
Lekcja 3
3
Jako uwieńczenie analizy drugiej  w pierwszej na wyświetlaczu wypisywa- w efekcie zostaje wypisany komunikat
części listy instrukcji procesora 8051 ny adres aktualnie testowanej komórki  Err  skrót od  error  z angielskiego
proponuję abyśmy przećwiczyli przesy-  w drugiej: testowana jest komórka pa-  błąd wraz z widniejącym adresem
łanie danych pomiędzy procesorem mięci przez zapisanie w niej, odczyt wadliwej komórki.
a zewnętrzną pamięcią danych, umiesz- i weryfikację wartości testowej: czyli W przypadku przetestowania całego
czoną na płytce komputerka  układ U4. dwóch liczb: 55h i AAh. Wybrano właś- zakresu pamięci wypisany zostaje komu-
Otóż wspólnie napiszemy prostą proce- nie takie liczby, bowiem jak pewnie za- nikat o zakończeniu:  End  koniec.
durę testującą wszystkie komórki tej pa- uważyłeś są one kombinacjami zer i jedy- Zauważmy że testowany obszar za-
mięci, z dodatkowym wyświetlaniem na nej na przemian: 55h = 01010101b, a AAh czyna się od adresu 8100h, a nie np.
wyświetlaczu aktualnie testowanego = 10101010h, co pozwala na spraw- 8000h, dlaczego? Otóż pamiętajmy że
adresu i ewentualnych błędów. Wyko- dzenie wszystkich 8 miu bitów danej w obszarze 8000h....8040h znajduje się
rzystamy przy tym m.in. instrukcję komórki pamięci. kod naszego programu, toteż gdybyśmy
MOVX, a pamięć będziemy adresować  w trzeciej części inkrementowany jest wpisali jako wartość początkową adres
z wykorzystaniem pełnego 16 bitowego adres wskaznika DPTR po czym jeżeli 8000h, program zostałby zamazany
adresu. nie przekracza on założonego obszaru i komputerek zawiesiłby się.
Popatrzmy zatem i przeanalizujmy lis- pamięci (8100h...9FFFh) wykonywany Ta sama uwaga dotyczy adresu koń-
ting przykładowego programu, realizują- jest skok na początek procedury i tes- cowego, w przypadku pamięci 8kB
cego procedurę testowania pamięci. towana jest następna komórka. (6264). Posiadacze komputerków
Program zasadniczo składa się W przypadku wykrycia błędu następu- z 32kB RAM (62256) mogą zakończyć
z 3 części: je skok do etykiety  blad w której testowanie pamięci na adresie FFFFh.
ELEKTRONIKA DLA WSZYSTKICH 12/97 41
Też to potrafisz
W takim przypadku należy nieco zmody- a następnie przekompilować program DPTR (inną niż proponowana: 8100h).
fikować program, sposób w dalszej zródłowy jeszcze raz. Wtedy w momen- W tym miejscy uwaga:  pójście wyżej
części artykułu. cie gdy po inkrementacji DPTR będzie adresu 8041h spowoduje zamazanie
Uwaga, przed rozpoczeciem wpisywa- = 0000h (przekroczy FFFFh czyli ostatni części kodu programu testującego  patrz
nie programu upewnij siÄ™ czy zwora JP3 adres w RAM) warunek : listing 1.
znajduje się w pozycji  8000h . mov A, DPH Jeżeli denerwuje Cię szybkie przemia-
jnz next tanie testowanego adresu, możesz to
Dla komputerowców: i tak będzie spełniony bez skasowanej linii spowolnić wpisując w linii pod adresem
Przedstawiony program znajduje się i w efekcie nastąpi skok na koniec programu. 8006h większą wartość do akumulatora.
na dyskietce kursu (AVT 2250/D) jako Reguła: wartość wpisana do A * 2 mi-
zbiór LEKCJA3.S03. Dla nie posiadających PC ta: lisekundy = opóznienie po teście każdej
Należy go skompilować jak poprzed- Tak jak poprzednio należy wstukać kod komórki.
nie lekcje wydając komendę programu począwszy od adresu 8000h, Komputerowcy moga zmodyfikować
DO LEKCJA3 lub użyć bezpośrednio korzystając z gotowych bajtów kodu poda- tę linię w programie LEKCJA3.S03
komendy kompilatora: nych w drugiej kolumnie listingu 1, czyli: np. mov A, #99h
> PASM51 LEKCJA3.S03 /H /L  12, 02, 74, 90, 81, 00 .... itd. .....
co spowoduje utworzenie zbioru wynikowego W przypadku chęci przetestowania pa- przy takiej wartości procedura testująca
w postaci Intel HEX, gotowego do przesłania mięci 32kB (U4  62256) należy pominąć linię będzie trwała niesamowicie długo (moż-
do komputerka poprzez łącze szeregowe. z listingu pod adresem 8024h, wpisując na się zdrzemnąć).
Dodatkowy zbiór LEKCJA3.LST jest w miejsce bajtów : Pozostali moga modyfikować opóznie-
listingiem programu przedstawionym 64, A0 nie poprzez wpisanie do komórki o adre-
w artykule. bajty sie 8007h (funkcja  Edit monitora) do-
W przypadku chęci przetestowania pa- 00, 00 wolną wartość z zakresu 1...FFh (1...255)
mięci 32kB (posiadacze U4  62256) na- czyli dwie instrukcje NOP (puste). i próbowac od nowa.
leży wykasować linię : Dodatkowo można poeksperymento- Wesołej zabawy !
8024 64A0 xrl A,#A0h ;testujemy RAM wać z początkową wartością wskaznika Sławomir Surowiński
CPU 8052.DEF
;***************************************************************
; Lekcja 3: Testowanie zewnetrznej pamieci danych U4
;***************************************************************
include const.inc
include bios.inc ;deklaracje dla kompilatora
8000 org 8000h ;kod programu od adresu 8000h
8000 120274 lcall CLS ;wyczyszczenie wyswietlacza
8003 908100 mov DPTR,#8100h ;testujemy od adresu 8100h do 9FFFh
8006 next:
8006 7405 mov A,#5 ;male opoznienie (ok. 10ms)
8008 120295 lcall DELAY ;abys mogl zaobserwowac zmiane adresu
800B 75F001 mov B,#1 ;od pozycji 1 wyswietlacza
800E 12025F lcall DPTR4HEX ;wypisz aktualnie testowany adres RAM
8011 test55:
8011 7455 mov A,#55h ;zaladowanie 1 liczby testowej (01010101b)
8013 F0 movx @DPTR,A ;i zapisanie jej w zewn. RAM
8014 E0 movx A,@DPTR ;i odczyt spod tego samego adresu
8015 6455 xrl A,#55h ;sprawdzenie danej ze wzorcem
8017 701A jnz blad ;jezeli sie nie zgadza to blad komorki
8019 testAA:
8019 74AA mov A,#AAh ;zaladowanie 2 liczby testowej (10101010b)
801B F0 movx @DPTR,A ;i zapisanie jej w zewn. RAM
801C E0 movx A,@DPTR ;i odczyt spod tego samego adresu
801D 64AA xrl A,#AAh ;sprawdzenie danej ze wzorcem
801F 7012 jnz blad ;jezeli sie nie zgadza to blad komorki
8021 A3 inc DPTR ;zwiekszenie wskaznika adresu o 1
8022 E583 mov A,DPH ;spr. czy nie koniec testowanego adresu
8024 64A0 xrl A,#A0h ;testujemy RAM do adresu A000h
8026 70DE jnz next ;jezeli nie to testuj nastepna komorka
8028 koniec:
8028 757D79 mov DL6,#_E
802B 757E54 mov DL7,#_n ;na koniec milutki napis  End  koniec
802E 757F5E mov DL8,#_D ;informujacy ze koniec testu
8031 8009 sjmp stop ;i skok na koniec programu
;                                          
;ta czesc programu zadziala gdy bedzie blad jakiejs komorki RAM
8033 757D79 blad: mov DL6,#_E
8036 757E50 mov DL7,#_r ;niemmily komunikat ze pod adresem z DPTR
8039 757F50 mov DL8,#_r ;jest blad pamieci RAM  napis  Err
803C 7571E0 stop: mov blinks,#E0h ;aby napis  End lub  Err bedzie mrygal
803F 80FE stop2: sjmp stop2 ;i stop programu (klawisz M  powrot)
8041 END
42 ELEKTRONIKA DLA WSZYSTKICH 12/97
Też to potrafisz
Niniejszy, trzeci z kolei odcinek kursu
programowania poświęcony liście in-
strukcji procesora 8051, jest ostatnim
Mikrokontrolery?
 teoretycznym kawałkiem niezbęd-
nych informacji, dzięki którym wspólnie
krok po kroku utworzymy pierwszy
prawdziwy program.
Przy okazji pragnę wspomnieć że w lis-
tach napływających od Was drodzy Czy-
telnicy, często poruszacie sprawę niedo- To takie proste...
sytu wiedzy oraz informacji na temat
przytaczanych w lekcjach przykładów.
Otóż sprawa kompleksowego a jedno-
cześnie przystępnego przedstawienia
problemów związanych z programowa-
niem mikrokontrolerów nie jest taka
prosta, nawet z mego punktu widzenia.
Przekonałem się że nie da się w jednym
odcinku naszego cyklu przedstawić
wszystkich zagadnień użytych w jednej
z naszych lekcji. Zbyt wiele informacji
 zazębia się za siebie, toteż proszę
Część 9
o cierpliwość, wszystkie niejasne in-
Asembler  język maszynowy procesora
strukcje z przykładów zostaną w kolej-
nym odcinku wyjaśnione do końca.
Jak wspominałem w poprzednim odcinku, Argument taki zostaje w efekcie dodany do Jak widać z przykładu korzystając z instrukcji
przyszła pora na zapoznanie się z ostatnią gru- licznika rozkazów PC, co w efekcie powoduje JC nie podawaliśmy argumentu bezpośred-
pą instrukcji, a mianowicie skokami oraz wy- skok do innej części programu  w przód lub niego, czyli liczby, tylko określiliśmy za pomo-
wołaniami podprogramów.
w tył. ca etykiety  przenies miejsce w programie
Pierwsze z nich dzielimy na:
Na początek poznajmy więc skoki warunko- zródłowym do którego ma nastąpić skok, je-
 skoki warunkowe
żeli warunek będzie spełniony. Taki sposób
we testujÄ…ce bity znajdujÄ…ce siÄ™ w obszarze
 skoki bezwarunkowe
zapisu jest jak widać prostszy, nie musimy li-
wew. RAM procesora, oczywiście.
Dodatkowo, w przypadku skoków warun-
czyć przesunięcia sami, które to jest zresztą
kowych, warunek przy którym następuje
ilością bajtów kodu programu pomiędzy in-
JC rel
skok, może spełniać określony bajt z we-
strukcją skoku JC a miejscem skoku. Ta moż-
 ang. jump if Carry  skocz jeżeli znacznik
wnętrznej pamięci danych procesora (np. kie-
liwość dotyczy jednak tych z Was drodzy
przeniesienia C jest ustawiony
dy dany bajt `" konkretna liczba to następuje
Czytelnicy, którzy posiadają komputery i mo-
skok) lub bit. W tym ostatnim przypadku pro-  sprawdzany jest bit przeniesienia C w sło-
gą skorzystać z kompilatora zawartego na
wie PSW (adres bajtu: D0h), jeżeli jest usta-
cesor sprawdza czy bit jest ustawiony (=1)
dyskietce AVT 2250/D lub każdego innego.
czy wyzerowany (=0) i podejmuje decyzję wiony (=1) to do licznika rozkazów PC jest
W przypadku osób które  ręcznie tłuma-
o skoku lub nie. A co może w programie dodawana 8 bitowa liczba  rel (zapisana
czÄ… kod programu, sprawa siÄ™ nieco kompli-
zmienić takim czy inny bit?, a no jakaś in- w kodzie U2), zostaje wykonany skok
kuje, ale nie do tego stopnia, aby nie dać so-
strukcja która została wykonana wcześniej,
względny
bie z nią rady. W kolejnych lekcjach pokażę
a wyniku której dany bit został ustawiony lub
PC < PC + 2, jeśli C=1, to PC < PC + rel
jak prosto obliczać przesunięcia w tej in-
wyzerowany. W języku programistów bit (bi-
 kod: 0 1 0 0 0 0 0 0 40h
strukcji oraz pozostałych, tam gdzie wystę-
ty), którego znaczenie jest istotne dla działa-
 cykle: 2 bajty: 2 (kod instrukcji 40h
puje symbol  rel , pamiętajcie o nim przy
nia programu, który informują o tym czy, np.
+ przesunięcie  rel )
lekturze dalszej części artykułu!
przy dodawaniu dwóch liczb 8 bitowych na-
 przykład:
W tym miejscu istotna uwaga dla wszyst-
stąpiło przeniesienie (kiedy wynik > 255), na-
MOV A,#20h ;załadowanie do
kich. Otóż jak widać wartość przesunięcia
zywa się  flagą . Określeniem tym będziemy
akumulatora liczby 32
nie może przekroczyć liczb z zakresu U2 czy-
się dość często posługiwać, toteż warto je
ADD A,B ;dodanie do
li  128...127, innymi słowy skok względny
zapamiętać.
akumulatora bieżącej
może odbyć się tylko w pewnym  otocze-
Warto też sobie wyjaśnić co oznacza samo
wartości rej. B
niu ( w górę lub  w dół ) od instrukcji
pojęcie skoku fizycznie dla pracy procesora.
JC przenies ;czy nastąpiło
skoku. Jeżeli wartość przesunięcia jest
Otóż jeżeli procesor wykonuje kolejne instruk-
przeniesienie, tak to skocz do
ujemna, to skok nastąpi oczywiście w kie-
cje programu, to za każdym pobraniem kolej-
etykiety
runku mniejszych adresów (do PC zostaje
nej instrukcji zwiększa się automatycznie licz-
; przenies
dodana liczba ujemna), w przeciwnym przy-
nik rozkazów PC, o którym mówiliśmy już
MOV B,#0 ;nie, to wyzeruj rejestr B
padku w kierunku adresów wzrastających.
wcześniej. Jeżeli procesor napotka na instruk-
..... ;po czym wykonuj dalsze
W przypadku umieszczenia etykiety (miejs-
cjÄ™ skoku, to argumentem (tej instrukcji) w ta-
instrukcje
ca) skoku poza tym zakresem, prawidłowe
kim przypadku, jest liczba będąca:
.....
obliczenie przesunięcia będzie niemożliwe
 przesunięciem (liczba w kodzie U2, zakres
..... (dla  ręczniaków ), a w przypadku korzysta-
< 128...127>, która jest dodawana do bie-
przenies: ;tu nastapi skok jeżeli nia z kompilatora 8051 ( komputerowcy )
żącej wartości PC
znacznik C był ustawiony wystąpi komunikat o błędzie kompilacji mó-
lub
 wartością bezwzględną licznika rozkazów CLR C ;w efekcie nastąpi jego wiący o przekroczeniu zakresu skoku
PC (w przypadku skoków bezwarunkowych) wyzerowanie względnego. Programiście w takim przypad-
ELEKTRONIKA DLA WSZYSTKICH 1/98 41
Też to potrafisz
ku nie pozostaje nic innego jak poprawić można zrealizować pętlę nieskończoną ...... ;instrukcje programu
błąd modyfikując program zródłowy. ( zawiesić procesor), używając instrukcji ......
skoku warunkowego. Zauważmy przecież, ;tu zaczyna się podprogram, którego (w tym
że warunek: że bit 70h jest wyzerowany bę- przykładzie) zadaniem jest wysłanie
JNC rel
dzie spełniony zawsze, toteż za każdym ra- ;poprzez końcówki portu P1 procesora sek-
 ang. jump if not Carry  skocz jeżeli znacz-
zem nastąpi skok do etykiety  zeruj wencji kodów ASCII odpowiadających
nik przeniesienia C jest wyzerowany
w miejsce programu gdzie następuje zero- ;kolejnym literom tekstu  Hello from AVT-
 sprawdzany jest bit przeniesienia C w sło-
wanie bitu 70h, i cała pętla się powtarza.  2250 , aż do momentu napotkania kodu
wie PSW (adres bajtu: D0h), jeżeli jest wy-
;zerowego ( 0 ).
zerowany (=0) to do licznika rozkazów PC
JBC bit, rel
jest dodawana 8 bitowa liczba  rel (zapi-
PISZ: ;etykieta  nazwa
 ang. jump if Bit Set and Clear Bit   skocz
sana w kodzie U2), zostaje wykonany skok
podprogramu
jeżeli bit jest ustawiony i wyzeruj go
względny
MOV DPTR, #tekst ;załaduj do wskaz
 sprawdzany jest bit, którego adres podany jest
PC < PC + 2, jeśli C=0, to PC < PC + rel
nika DPTR
w  bit , jeżeli jest ustawiony (=1) to zostaje wy-
 kod: 0 1 0 1 0 0 0 0 50h
adres tesktu
zerowany po czym do licznika rozkazów PC jest
 cykle: 2 bajty: 2 (kod instrukcji 50h
next:
dodawana 8 bitowa liczba  rel (zapisana w ko-
+ przesunięcie  rel )
CLR A ;wyzeruj akumulator
dzie U2), zostaje wykonany skok względny
 przykład:
MOVC A,@A+DPTR ;pobierz kolejny
PC < PC + 3, jeśli (bit)=1, to (bit)< 0
MOV A,#20h ;załadowanie do
znak z tekstu
i PC < PC + rel
akumulatora liczby 32
(do akumulatora)
 kod: 0 0 0 1 0 0 0 0 10h
dodaj:
JZ koniec ;czy koniec tekstu ( znak
 cykle: 2 bajty: 3 (kod instrukcji 10h
ADD A,#1 ;dodanie do akumulatora
= Acc = 0 )?, tak to skocz
+ adres bitu + przesunięcie  rel )
liczby 1
MOV P1, A ;nie to wyślij kod na koń-
 przykład: wykonanie sekwencji instrukcji
JNC dodaj ;czy nastąpiło przeniesie
cówki portu P1
ADD A, B ;dodaj do akumulatora
nie, nie to dodaj jeszcze raz
INC DPTR ;przesuń adres na kolejną
zawartość rejestru B
..... ;w efekcie akumulator będzie
literÄ™ tekstu
JBC C, et01 ;jeżeli nastąpiło przeniesienie
inkrementowany aż do
SJMP next ;i skocz do  next aby
to wyzeruj C i skocz
..... ;czasu kiedy osiÄ…gnie
pobrać kolejną literę
..... ;jeżeli nie to wykonuj
wartość 00h, a do
koniec:
dalsze instrukcje
znacznika C
RET ;instrukcja zakończenia
.....
;zostanie wpisana  1  ka,
podprogramu i powrotu do
et01:
potem zostanÄ… wykonane
;głównej części programu
MOV P1, A ;tu nastąpi skok jeżeli było
..... ;dalsze instrukcje
;a to jest zdefiniowany przykładowy tekst,
przeniesienie
zakończony kodem (bajtem)  0
funkcjonalnie jest równoważne sekwencji:
JB bit, rel
;w celu identyfikacji końca tekstu.
ADD A, B ;dodaj do akumulatora
 ang. jump if Bit Set  skocz jeżeli bit jest
tekst DB HELLO FROM AVT 2250, 0
zawartość rejestru B
ustawiony
JC et01 ;jeżeli nastąpiło
 sprawdzany jest bit, którego adres podany
przeniesienie skocz LCALL adr16
jest w  bit , jeżeli jest ustawiony (=1) to do
..... ;jeżeli nie to wykonuj  ang.  subroutine call  skocz do podpro-
licznika rozkazów PC jest dodawana 8 bito-
dalsze instrukcje
gramu
wa liczba  rel (zapisana w kodzie U2), zo-
......
 licznik rozkazów PC zostaje zwiększony o 3,
staje wykonany skok względny
et01:
jest Å‚adowany na stos w efekcie czego
PC < PC + 3, jeśli (bit)=1, to PC < PC + rel
CLR C ;tu nastąpi skok jeżeli było
wskaznik stosu jest zwiększany o 2, a do
 kod: 0 0 1 0 0 0 0 0 20h
przeniesienie, zeruj C
licznika rozkazów PC zostaje wpisany
 cykle: 2 bajty: 3 (kod instrukcji 20h
MOV P1,A
16 bitowy adres bezpośredni, podany jako argu-
+ adres bitu +
przeanalizuj i zastanów się dlaczego?
ment przy wywołaniu instrukcji  LCALL . Dzięki
przesunięcie  rel )
tej instrukcji możliwe jest wywołanie podprogra-
 przykład:
To tyle jeżeli chodzi o skoki warunkowe
mu w dowolnym obszarze pamięci (64kB) po-
JB 7Fh, zeruj ;jeżeli bit o adresie 7Fh = 1
operujące na bitach, teraz pora na kilka in- przez podanie bezpośredniego adresu.
to skocz do etykiety  zeruj
strukcji skoków warunkowych operujących
PC < PC + 3
MOV A,B ;jeśli nie to dodaj do
na bajtach, bezwzględnych oraz wywołań
SP < SP + 1, (SP) < PC7 0,
akumulatora rejestr B
podprogramów.
SP < SP + 1, (SP) < PC15 8
..... ;i wykonuj dalsze instrukcje
PC < adr16
.....
ACALL adr11  kod: 0 0 0 1 0 0 1 0 12h
zeruj:
 ang.  subroutine call on page , skocz do  cykle: 2 bajty: 3 (kod instrukcji
CLR A ;jeżeli bit był ustawiony to
12h + bardziej znaczÄ…cy bajt  adr16
podprogramu na stronie
wyzeruj akumulator
 licznik rozkazów PC jest zwiększany o 2, na- + mniej znaczący bajt  adr16
stępnie ładowany jest na stos (najpierw  przykład: wypisanie liczby 12h na wyświet-
JNB bit, rel
laczu komputerka edukacyjnego przy pomo-
młodszy bajt, potem starszy), wskaznik stosu
 ang. jump if Bit not Set  skocz jeżeli bit
jest zwiększany o 2, a do bitów 0...10 liczni- cy instrukcji A2HEX standardowo umiesz-
jest wyzerowany
ka PC zostaje wpisany 11 bitowy adres bez- czonej w kodzie monitora systemu (w EP-
 sprawdzany jest bit, którego adres podany
ROM dołączonej do zestawu).
pośredni podany jako argument instrukcji:
jest w  bit , jeżeli jest wyzerowany (=0) to
 adr11 . Pięć najstarszych bitów licznika roz- A2HEX EQU 024Eh ;deklaracja
do licznika rozkazów PC jest dodawana adresu podpro-
kazów PC nie ulega zmianie, toteż skok zo-
8 bitowa liczba  rel (zapisana w kodzie gramu w
staje wykonany w obrębie 2 kilobajtowej
U2), zostaje wykonany skok względny monitorze
 strony pamięci programu, na której wystę-
PC < PC + 3, jeśli C=0, to PC < PC + rel MOV A, #12h ;wypisz liczbę
puje następna po  ACALL adr11 instrukcja.
 kod: 0 0 1 1 0 0 0 0 30h 12h jako 2 znaki
PC < PC + 2,
 cykle: 2 bajty: 3 (kod instrukcji 30h w HEX
SP < SP + 1, (SP) < PC7 0,
+ bajt + przesunięcie  rel ) MOV B, #3 ;na pozycji
SP < SP + 1, (SP) < PC15 8
 przykład: PC10 0 < adr11 3 wyświetlacza
CLR C ;wyzerowanie znacznika  kod: a10 a9 a8 1 0 0 0 1 LCALL A2HEX ;pod adresem
przeniesienia gdzie: a10, a9, a8 zależą od numeru strony 024Eh znajduje
zeruj: stÄ…d: 11h, 31h, 51h, 71h, 91h, B1h, D1h, F1h siÄ™ gotowy
MOV 70h, C ;wyzerowanie bitu  cykle: 2 bajty: 2 (kod instrukcji ;podprogram do wypisywania
a adresie 70h + młodszy bajt adresu  adr11  bity a7...a0) akumulatora w
JNB 70h,zeruj ;jeżeli bit 70h jest =0 to  przykład: ;postaci 2 cyfr HEX
skok do etykiety  zeruj ACALL PISZ ;wywołanie podprogramu W efekcie wykonania przykładu na wy-
Podany przykład, z praktycznego punktu wi- ...... ;po zakończeniu go świetlaczach zostanie wypisana liczba 12h.
dzenia jest nieprzydatny, lecz pokazuje jak zostajÄ… wykonane kolejne W postaci  12 .
42 ELEKTRONIKA DLA WSZYSTKICH 1/98
Też to potrafisz
RET wołania instrukcji SJMP. W tym przypadku ar- stąd: 01h, 21h, 41h, 61h, 81h, A1h,
gumentem instrukcji jest przesunięcie (tak jak
 ang.  return from subroutine , powróć C1h, E1h
wspominany wczesniej parametr  rel przy  cykle: 2 bajty: 2 (kod instrukcji
z podprogramu
okazji omawiania insturkcji skoków warunko-
 adres powrotu z podprogramu (zapamiętana + młodszy bajt adresu
wych operujących na bitach), wyrażone po-
wcześniej podczas instrukcji ACALL lub  adr11  bity a7...a0)
przez liczbę 8 bitowa zapisaną w kodzie U2.  przykład:
LCALL wartość licznika PC) jest wpisywany
do licznika rozkazów PC. Wskaznik stosu zo-  na stronie (instrukcja AJMP   absolute jump
MOV P1,A
on page ), gdzie skok może nastapić w obsza-
staje mniejszony o 2. W efekcie następuje AJMP koniec
rze 2 kilobajtowej strony. W tym przypakdu ar-
powrót z podprogramu. Instrukcją tą musi
.....
gumentem instukcji jest 11 bitowy adres bez-
kończyć się każdy podprogram (z wyjątkiem
.....
podprogramów obsługi przerwań, wywoły- pośredni, który podajemy po mnemoniku
.....
AJMP. W praktyce można ten skok określić ja-
wanych automatycznie przez procesor).
koniec:
ko  średni (w stosunku do krótkiego SJMP)
PC15 8 < (SP), SP < SP  1
 długi (instrukcja LJMP   long jump ), gdzie
PC7 0, < (SP), SP < SP  1
Po przesłaniu zawartości akumulatora do por-
skok może nastapić w dowolne miejsce
 kod: 0 0 1 0 0 0 1 0 22h
tu P1 (na końcówki tego portu) procesor omi-
w obszarze 64kB przestrzeni pamięci progra-
 cykle: 2 bajty: 1
nie instrukcje w liniach oznaczonych wielo-
 przykład: patrz procedura  PISZ przy okaz- mu procesora. W tym przypadku argumen-
kropkiem i wykona skok do miejsca (etykie-
tem skoku jest 16 bitowy adres bezpośred-
ji omawiania instrukcji ACALL. Procedura
ty) programu oznaczonej jako  koniec .
 PISZ została zakończona instrukcją po- ni podawany jako argument tej instrukcji.
wrotu z podprogramu  RET , dzięki której
SJMP rel
Ktoś może w tym miejscu zapytać,  po co
mogło nastąpić odtworzenie pierwotnego
 ang.  Shot Jump  skok bezwarunkowy
ta komplikacja, przecież wystarczyłby w za-
stanu licznika PC i dzięki temu powrót do
krótki
sadzie tylko jeden typ skoku, taki który daje
programu głównego. Tak powinien kończyć
 do zawartości licznika rozkazów PC jest do-
największe możliwości, czyli LJMP? . Tak
się każdy Twój podprogram.
dawane 8 bitowe przesunięcie (liczba ze
ale w przypadku pisania programów na pro-
znakiem w kodzie U2 z zakresu
cesory jednoukładowe istnieje potwierdzo-
RETI
< 128...127>). W efekcie wykonywany jest
na w praktyce zasada, że:  każdy bajt kodu
 ang.  return from interrupt , powróć z pod-
skok w obrębie 256 bajtów od kolejnej po
jest cenny, toteż program należy pisać tak
programu obsługi przerwania
SJMP instrukcji.
aby zajmował jak najmniej miejsca . I tu le-
 adres powrotu z podprogramu obsługi prze-
PC < PC + 2, PC < PC + rel
ży sedno sprawy, otóż trzy wymienione ro-
rwania jest wpisywany do licznika rozkazów
 kod: 1 0 0 0 0 0 0 0 80h
dzaje instrukcji skoków różnią sie objętością
PC. Wskaznik stosu zostaje mniejszony o 2.
 cykle: 2 bajty: 2 (kod instrukcji 80h
zajmowanÄ… w kodzie programu. I tak skok
Instrukcją tą musi kończyć się każdy pod-
+ przesunięcie  rel )
krótki SJMP oraz na stronie AJMP zajmuja
program, który jest wywoływany automa-
 przykład:
2 bajty kodu, natomiast skok długi LJMP za-
tycznie przez procesor w przypadku zgło-
MOV A,B ;dowolne insturkcje
jmuje 3 bajty, ktoś powie że to mała różnica,
szenia przerwania i żądania jego obsługi.
programu
otóz moi drodzy będziecie mogli się o tym
PC15 8 < (SP), SP < SP  1
CLR B ;  --------      
jeszcze przekonać że często 1 dodatkowy
PC7 0, < (SP), SP < SP  1
bajt wolny w programie to recepta na zreali- .....
 kod: 0 0 1 1 0 0 1 0 32h
zowanie i dokończenie niejednego progra- stop:
 cykle: 2 bajty: 1
mu. Przejdzmy zatem do szczegółow. SJMP stop ;i przykład pętli
 przykład: omówimy przy okazji dokładnego
nieskończonej, którą
opisu systemu przerwań oraz możliwości
powinien dla
praktycznych zastosowań. AJMP adr11
;bezpieczeństwa kończyć
 ang.  Absolute Jump , skocz bezwarunko-
się każdy program
Teraz zapoznam Was, drodzy Czytelnicy wo na stronie
END ;deklaracja końca
z trzema bardzo często używanymi instruk-  licznik rozkazów zostaje zwiększony o 2, na-
programu (to nie jest
cjami skoków bezwarunkowych. W liście in- stępnie do jego bitów 0 10 zostaje wpisany 11-
instrukcja!)
strukcji procesora 8051 istnieją trzy rodzaje  bitowy adres bezpośredni podany jako para-
instrukcji skoku bezwarunkowego. Róznica metr. Pozostałe 5 bardziej znaczących bitów nie
A oto pozostałe instrukcje skoków, jedna
między nimi polega na  odległości (o ile zmienia się. W efekcie wykonania tego polece-
bezwarunkowa oraz pozostałe warunkowe
bajtów programu dalej można skoczyć) po- nia następuje skok pod adres na stronie pamię-
sprawdzające warunek równości bajtu o po-
między instrukcją skoku a miejscem w któ- ci programu o wielkości 2 kilobajty, na której
danym adresie lub rejestru z innym bajtem
re następuje skok. I tak mamy do czynienia jest umieszczona kolejna instrukcja po AJMP.
lub argumentem bezpośrenim.
ze skokiem : PC10 0 < adr11
 krótkim (instrukcja SJMP   short jump ),  kod: a10 a9 a8 0 0 0 0 1 ,gdzie: a10, a9, Dokończenie listy instrukcji w następnym
gdzie skoczyć możemy w obrębie 256 bajtów a8 zależą od numerze.
(w góre o 127 lub w dół o 128) od miejsca wy- numeru strony Sławomir Surowiński
Lekcja 4
4
W dzisiejszej lekcji poćwiczymy sobie użycie ROM zawarty jest program monitora  o tym Oprócz zawartych w monitorze funkcji uak-
niektórych z przedstawionych instrukcji wywo- już wiecie. Dzięki niemu możliwa jest komuni- tywnianych klawiszami np.  LOAD ,  EDIT ,
łań podprogramów. Na wstępie jednak kilka kacja i ładowanie programów z komputera PC itp. istnieje kilka bardzo użytecznych procedur
wyjaśnień. Otóż jak zdążyliście się zorientować lub ręcznie. Monitor jest na tyle mądry że do- które są potrzebne no chociażby do wypisania
z poprzednich lekcji w przykładach podawałem datkowo komunikuje się z użytkownikiem za aktualnej wartości rejestru DPTR na wyświet-
listingi programów, w których występowały in- pomocą 8 mio pozycyjnego wyświetlacza i lo- laczu (tak się dzieje np., przy edycji pamięci
strukcje wywołań  dziwnych procedur np. kalnej klawiatury. No ale przecież ten  moni- RAM kiedy na 4 pierwszych wyświetlaczach
LCALL A2HEX (1) tor to w końcu też kawałek programu napisa- DPTR jest wyświetlany jako 4 znaki w kodzie
lub ny za pomocą tych samych instrukcji , które szesnastkowym.
LCALL CLS (2) poznawaliście przez ostatnie 3 odcinki nasze- A czy zastanawiałeś się drogi Czytelniku,
Otóż moi drodzy w programie monitora któ- go kursu. To właśnie dzięki niemu całe urzą- jak to się dzieje, że po naciśnięciu przez Cie-
ry macie w swoim komputerku w pamięci EP- dzenie żyje i pozwala na niezłą zabawę. bie odpowiedniego klawisza, układ reaguje
ELEKTRONIKA DLA WSZYSTKICH 1/98 43
Też to potrafisz
np. uaktywniając odpowiednią funkcję moni- zawarty jest przetłumaczony kod (tekst pogru- czyli wspomniana liczba 45h  prawda że się
tora? Do tego celu wykorzystywany jest inny biony) niezbędny dla  ręczniaków  przetłu- zgadza!
podprogram (także zawarty w monitorze) któ- maczcie sami i porównajcie wynik! L7: musimy także powiedzieć procedurze
rego zadaniem jest oczekiwanie na naciśnię- Przyjrzyjmy się listingowi dokładnie i przea- A2HEX, żeby wyświetliła liczbę od pozycji 3 na
cie klawisza a następnie podjęcie decyzji  co nalizujmy go linia po linii. Dla uproszczenia bę- displeju, toteż ładujemy jako drugi parametr
z tym fantem dalej robić... . Takie przykłady dę używał dodatkowych oznaczenia (K)  pozycję (która oznacza po prostu  3 )..
można by mnożyć. w przypadku gdy linia ma znaczenie tylko dla Uff!
Ja w każdym razie w kolejnym odcinku  komputerowców , oraz (R) gdy linia ma zna- L8: wreszcie właściwe wywołanie podpro-
przedstawię Ci pełną listę dodatkowych pro- czenie dla  ręczniaków . gdy nie występuje gramu A2HEX.  Ręczniacy będą musieli wpi-
cedur (podprogramów) które będą niezmier- żadne z oznaczeń, informacja jest istotna dla sać adres bezpośredni procedury, który poda-
nie przydatne przy tworzeniu wspólnych pro- wszystkich. A więc zaczynamy (Lx  numer li- łem wcześniej, stąd w linii po lewej stronie lis-
gramów. nii, np. L4  linia nr 4) tingu mamy sekwencję kodu: 12 02 4E, pierw-
Ci z  komputerowców , którzy już nabyli L1: (K), deklaracja zbioru który zawiera nie- sza liczba to kod instrukcji LCALL, następne
dyskietkę AVT2250/D mogą zapoznać się z ta- zbędne definicje rejestrów procesora 8052 (a dwie to adres procedury A2HEX  sprawdz!
ką listą czytając zbiór  BIOS.INC , w którym także 8051 oczywiście) W efekcie po wykonaniu tego podprogramu
są zawarte definicje adresów wszystkich po- L2: deklaracja EQU  równoważności, ozna- na wyświetlaczach DL3 i DL4 pojawi się liczba
trzebnych procedur . Dodatkowo umieszczo- cza że w dalszej części programu słowo  licz-  45 , czyli to co chcieliśmy!
no w nich opis i sposób wywołania, czyli para- ba jest równoważne (literowo) wyrażeniu L8: tu mamy omawiany przy okazji prezen-
metry wejściowe podprogramu, oraz efekt  45h , a 45h to zapisana w kodzie szesnastko- towania instrukcji skoków bezwarunkowych,
działania. wym liczba. przykład instrukcji SJMP , która została użyta
Pamiętaj, wszystkie one są częścią progra- L3: deklaracja EQU  podobnie jak poprzed- do zatrzymania programu. Instrukcja użyta
mu monitora i tak samo jak napisany przez Cie- nio, tym razem słowo  pozycja będzie ozna- w ten sposób spowoduje że procesor będzie
bie program są ciągiem określonych instrukcji, czało wyrażenie  3 , u nas jest to numer po- skakał w kółko pod adres etykiety  stop , czy-
w wyniku działania których otrzymujesz okreś- zycji na wyświetlaczu, na której ma być wy- li pod adres pod którym znajduje się instrukcja
lony efekt, np. na wyświetlaczu. świetlona 2 pozycyjna liczba z akumulatora. SJMP ...  i tak w koło Macieju... , w efekcie
Ze względu na ograniczona objętość artyku- L4: deklaracja ORG  nakazuje kompilatoro- można powiedzieć że program będzie krążył
łu, w dzisiejszej lekcji wykorzystamy tylko nie- wi (K) przetłumaczenie (kompilację) instrukcji w pętli nieskończonej, i tylko klawisz  M
które procedury (podprogramy). występujących po tej deklaracji począwszy od  powrotu do monitora może nas wybawić
Dla przykładu skorzystajmy z podprogramu adresu wskazanego w parametrze ORG, czyli z tego ślepego zaułka.
którego zadaniem jest wypisanie na wyświet- w naszym przypadku będzie to 8000h  począ- Ktoś może powiedzieć,  .... ale po co właś-
laczu na pozycji określonej w rejestrze B, licz- tek zewnętrznej pamięci w komputerku edu- ciwie ta instrukcja SJMP, przecież i tak to już
by znajdującej się w akumulatorze w postaci kacyjnym. Dla  ręczniaków jest to informacja koniec programu... .
heksadecymalnej (szesnastkowej). Procedu- aby wprowadzać kod programu (pogrubiony Koniec dla nas drodzy Czytelnicy, my o tym
ra ta znajduje się w monitorze pod adresem tekst) od adresu 8000h korzystając oczywiście doskonale wiemy, bo takie było założenie, ale
024Eh. z funkcji  EDIT komputerka. biedny procesor, kiedy wróci z podprogramu
Ciekawa jest też procedura CLS  w wyniku A2HEX, będzie  pożerał kolejne bajty kodu
wykonania jej całe pole odczytowe zostaje wy- Stąd zaczyna się prawdziwa część programu. programu, i jeżeli nie napotka na sensowne za-
czyszczone. Adres tego podprogramu w moni- L5: dobrze by było aby po rozpoczęciu wy- kończenie w pętli nieskończonej (jak w przy-
torze to 0274h. Procedura ta jest bezparamet- konywania naszego programu wyświetlacz nie kładzie) zacznie pobierać kolejne bajty progra-
rowa, wystarczy ją wywołać aby uzyskać za- był zapisany jakimiś znakami, zupełnie nam my spoza adresu 800Dh, a tam co jest?, a no
mierzony efekt. niepotrzebnymi. W tym celu profilaktyczne same  śmieci Kochani  sprawdzcie to fun-
wywołujemy podprogram CLS  czyszczący kcją EDIT monitora.
Zadanie wyświetlacz.
Wypisać dowolną 8 bitową liczbę na wy- L6: do akumulatora zostaje załadowana licz- Nie musze tłumaczyć, co się wtedy może
świetlaczu w postaci heksadecymalnej. ba do wyświetlenia, tym razem jest to liczba stać. Nielogiczna sekwencja bajtów spowodu-
Załóżmy że chcemy aby liczba pojawiła się 45h. Te polecenie można zapisać także jako: je niekontrolowane działanie procesora,
na 3 ciej i 4 tej pozycji, należy wykonać  mov A, #45h  . w efekcie czego najprawdopodobniej układ
i skompilować (komputerowo lub ręcznie prze-  Ręczniacy tak będą musieli postąpić, bo- dojdzie do końca pamięci programu FFFFh po
tłumaczyć) instrukcje: wiem nie korzystają z mądrego kompilatora, czym licznik rozkazów PC zostanie wyzerowa-
ny a w związku z tym na wyświetlaczu zoba-
czymy znajomy napis  HELLO , oznajmiajÄ…cy
CPU 8052.DEF
nam że właśnie zrestartowaliśmy nasz kompu-
terek. Dodatkowo stanie się to tak szybko że
0045 liczba equ 45h ;liczba do wyswietlenia
efekt naszej pracy zostanie nie zauważony
0003 pozycja equ 3 ;pozycja na ktorej ma byc przez nasze czujne oko.
Dlatego stosowanie na końcu programu
;wyswietlona liczba
takiego skoku jest wskazane w każdym przy-
8000 org 8000h
padku.
No dobrze skoro wiecie o co chodzi, to ra-
8000 120274 lcall CLS ;wyczyszczenie wyswietlacza
dzę poeksperymentować z innymi wartościa-
8003 7445 mov A, #liczba ;zaladowanie liczby
mi akumulatora oraz zmieniać np. pozycję wy-
8005 75F003 mov B, #pozycja ;i pozycji na displeju
świetlania, pamiętając że może ona zawierać
8008 12024E lcall A2HEX ;wyswietlenie
siÄ™ w granicach 1...7.
W kolejnej lekcji omówię wszystkie pozo-
800B 80FE stop: sjmp stop ;stop programu
stałe procedury dostępne w monitorze oraz
podam ich adresy wywołań, wtedy będziemy
800D END
modli naprawdę  poszaleć . Nabywcy dyskie-
tek AVT2250/D mogą się z nimi już teraz za-
Pamiętajmy, że jest to listing programu, czy- który wie że od momentu deklaracji w linii poznać czytając zbiory BIOS.INC i CONST.INC.
li że komputerowcy wpisują tylko deklaracje 2 (L2) słowo  liczba oznacza  45h . Popatrz-
i instrukcje wraz z ewentualnymi komentarza- cie zresztą na kod tej linii po lewej stronie (po- Wesołej zabawy!
mi (po średniku), bez pierwszej kolumny liczb grubione liczby)  7445 = 74 45, pierwsza to Sławomir Surowiński
określającej adres bieżącej instrukcji (tekst po- kod instrukcji  mov A, #dana  (patrz wkładka
chyły), oraz bez drugiej kolumny liczb w której z tabelą instrukcji 8051), druga to argument,
44 ELEKTRONIKA DLA WSZYSTKICH 1/98
Też to potrafisz Też to potrafisz
instrukcje .....
etyk02: ;właściwe miejsce skoku .....
JMP @A+DPTR
według pozycji = 1 jest_zero: ;tu nastapi skok jeżeli
 ang.  Jump Indirect relative to DPTR 
..... rej.B był równy zero
skocz pośrednio względem rejestru DPTR
etyk03: ;właściwe miejsce skoku ..... ;i zostaną wykonane te
 w wyniku tej instrukcji następuje skok pod
według pozycji = 2 instrukcje
adres będący sumą aktualnej wartości re-
..... .....
jestru DPTR (liczba 16 bitowa) i wartości
etyk04: ;właściwe miejsce skoku
akumulatora (liczba 8 bitowa). Można po-
według pozycji = 3
JNZ rel
wiedzieć że skok następuje pod adres w pa-
.....
 ang.  Jump if Accumulator is Not Zero ,
mięci programu umieszczony w DPTR
skocz jeżeli akumulator nie jest = 0 (zero)
z przesunięciem podanym w akumulatorze.
Poniżej zapoznamy się z instrukcjami sko-
 sprawdzana jest zawartość akumulatora (A),
Przesuniecie to traktowane jest jako liczba
ków warunkowych, które badają warunek
jeżeli jest różna od zera, to do licznika rozka-
bez znaku, czyli z zakresu <0...255>
zgodności zadanego bajtu w wew. RAM
zów PC dodawane jest przesunięcie  rel 
PC < A + DPTR
procesora (rejestru) z innym rejestrem lub
na zasadach takich jak opisano wczesniej
 kod: 0 1 1 1 0 0 1 1 73h
argumentem bezpośrednim (liczbą). Dwie
przy okazji omawiania poprzednich instrukcji
 cykle: 2 bajty: 1
z nich JZ i JNZ sprawdzajÄ… czy w akumula-
skoków z argumentem  rel (liczba 8 bito-
 przykład: realizacja skoków w miejsca
torze znajduje siÄ™ liczba zero czy nie i na tej
wa ze znakiem w kodzie U2).
w programie określone poprzez numer
podstawie podejmowana jest decyzja
PC < PC + 2, jeśli A <> 0, to PC < PC + rel
w zmiennej  pozycja (umieszczonej  za-
o skoku. Pozostałe instrukcje porównujące
 kod: 0 1 1 1 0 0 0 0 70h
deklarowanej z wewn. RAM procesora)
wybrane rejestry z innym lub konkretnÄ… licz-
 cykle: 2 bajty: 2 (kod instrukcji 70h
MOV A, pozycja ;załadowanie
bą znajdują zastosowanie szczególnie
+ przesuenięcie  rel )
numeru pozycji
w pętlach programowych, gdzie konieczne
 przykład:
MOV B, #2 ;2 bo instrukcje w tabeli
jest wykonanie n razy określonej opracji.
MOV A, B ;załadowanie rej. B do
skoków sa 2 bajtowe
Acc celem sprawdzenia
(AJMP)
JZ rel czy = 0
MUL A, B ;obliczenie faktycznego
ofsetu do tabeli skoków  ang.  Jump if Accumulator is Zero , skocz JNZ nie_zero ;jeżeli nie to skok do
jeżeli w akumulatorze jest liczba 0 (zero) etykiety  nie_zero
MOV DPTR, #tablica_skokow
;załadowanie adresu  sprawdzana jest zawartość akumulatora (A), jest_zero: ;jeżeli tak to wykonuj po
jeżeli jest równa zero, to do licznika rozka- zostałe instrukcje
tabeli skoków do DPTR
zów PC dodawane jest przesunięcie  rel  .....
JMP @A+DPTR;wykonanie skoku
na zasadach takich jak opisano wczesniej .....
tablica_skoków: ;tu zaczyna sie tabela
przy okazji omawiania poprzednich instrukcji nie_zero: ;tu nastapi skok jeżeli
skoków
skoków z argumentem  rel (liczba 8 bito- rej.B był różny od zera
AJMP etyk01 ;tu nastapi skok gdy
wa ze znakiem w kodzie U2). ..... ;i zostanÄ… wykonane te
 pozycja = 0
PC < PC + 2, jeśli A = 0, to PC < PC + rel instrukcje
AJMP etyk02 ;tu nastÄ…pi skok gdy
 kod: 0 1 1 0 0 0 0 0 60h .....
 pozycja = 1
AJMP etyk03 ;tu nastÄ…pi skok gdy  cykle: 2 bajty: 2 (kod instrukcji 60h A oto wspomniana wczesniej grupa instruk-
+ przesunięcie  rel ) cji używana głównie w pętlach programo-
 pozycja = 2
AJMP etyk04 ;tu nastąpi skok gdy  przykład: wych lub przy zwielokrotnionym sprawdza-
MOV A, B ;załadowanie rej. B do niu warunków zgodnosci określonych rejes-
 pozycja = 3
Acc celem sprawdzenia trów z innym lub z argumentami stałymi.
..... ;pozostałe instrukcje
czy = 0 Ogólna postać instrukcji jest następująca:
programu
JZ jest_zero ;jeżeli tak to skok do ety
.....
kiety  jest_zero
etyk01: ;właściwe miejsce skoku
CJNE , , rel
nie_zero: ;jeżeli nie to wykonuj po
według pozycji = 0
zostałe instrukcje
..... ;tu mozna umieścić
 ang.  Compare and Jump if Not Equal , po-  porównywany jest akumulator oraz komór- lator jest inkrementowany (dodawana jest
równaj i skocz jeżeli argumenty porównania ka wew. RAM o adresie podanym bezpo- do niego jedynka)  patrz etykieta  zwiek-
nie są sobie równe srednio jako argument  adres sz . Następnie operacja jest powtarzana od
W instrukcji tej porównywane sa dwa argu- PC < PC + 3, jesli A <> (adres), to PC < początku  instrukcja  SJMP check . Jeżeli
menty: arg1 i arg2. Jeżeli nie są one równe PC + rel w końcu nastąpi zgodność obu rejestrów,
(ich wartości nie sa równe), to do zawartoś- dodatkowo: C < 0 gdy A>= (adres), lub wykonywany jest skok do etykiety  ko-
ci licznika rozkazów jest dodawane przesu- C< 1 gdy A< (adres) niec , gdzie rejestr B zostaje wyzerowany.
nięcie  rel na zasadach zgodnych z omó-  kod: 1 0 1 1 0 1 0 1 B5h
wionymi wczesniej. W efekcie zostaje wy-  cykle: 2 bajty: 3 (kod instrukcji
CJNE A, #dana, rel
konany skok w programie. Tu uwaga, skok + adres + przesunięcie  rel )
 akumulator zostaje porównany z argumen-
nastepuje względem instrukcji występują-  przykład:
tem bezpośrednim (8 bitową liczbą), jeżeli
cej po instrukcji CJNE. Dodatkwo jest zmie- MOV B,#56
nie sÄ… zgodne nastepuje skok.
niany znacznik przeniesienia C. I tak, jeżeli check:
PC < PC + 3, jeśli A <> dana, to PC <
w wyniku porównania okaże sie zę argum- CJNE A, B, zwieksz
PC + rel
rent arg1 jest mniejszy od argumentu arg2 SJMP koniec
dodatkowo: C < 0 gdy A>= dana, lub C< 1
to do znacznika C wpisywana jest jedynka zwieksz:
gdy A< dana
(znacznik jest ustawiany), w przeciwnym INC A
 kod: 1 0 1 1 0 1 0 0 B4h
przypadku znacznik jest zerowany (C=0). SJMP check
 cykle: 2 bajty: 3 (kod instrukcji
W zalezności od typu argumentów instruk- koniec:
+ dana + przesunięcie  rel )
cji możliwe są cztery przypadki, oto one. CLR B
 przykład: niech w zmiennej (rejestrze)  kla-
......
wisz będzie przechowywany kod wciśnę-
W przykładzie tym do rejestru B wpisywana
CJNE A, adres, rel
tego klawisza w systemie mikroprocesoro-
jest liczba 56. Nastepnie sprawdzany jest
wym (ot choćby w naszym komputerku).
warunek zgodności akumulatora z rejest-
Jeżeli chcemy podjąć określone działanie
rem B, jeżeli nie są sobie równe, to akumu-
ELEKTRONIKA DLA WSZYSTKICH 1/98 45
Też to potrafisz
w zależności od rodzaju klawisza, należy CJNE Rn, #dana, rel W przykładzie porównywana jest zawartość
przechowywany kod klawisza porównać  rejestr Rn (R0...R7) zostaje porównany z ar- rejestru R4 z liczbą 100, jeżeli występuje
z konkretna liczbą. gumentem bezpośrednim, jeżlei nie sa zgodność, to w porcie P3 zostaje ustawiony
czekaj: zgodne zostaje wykonany skok najmłodszy bit (pin) P3.0,w przeciwnym
MOV A, klawisz ;pobranie kody PC < PC + 3, jeśli Rn <> dana, to PC przypadku jest zerowany. Jest to prosty
wcisniętego < PC + rel gdzie n = 0...7 przykład komparatora liczby 8 bitowej poda-
klawisza dodatkowo: C < 0 gdy Rn>= dana, lub wanej na port P1 z zewnątrz ze stałą liczbą
CJNE A, #65, sprB ;czy wcisnięto C< 1 gdy Rn< dana (w tym przypadku jest to liczba 100).
klawisz  A (65  kod: 1 0 1 1 0 n2 n1 n0 gdzie n2 n1 n0
 kod  A ) określają jeden
CJNE @Ri, #dana, rel
........ ;tak to wykonuj z rejestrów
 porównywana jest zawartośc komórki
te instrukcje R0...R7
w wew. RAM której adres znajduje sie w re-
sprB: stÄ…d kody: B8h....BFh
jestrze Ri (R0 gdy i=0, lub R1 gdy i=1) z ar-
CJNE A, #66, sprC ;nie to czy  cykle: 2 bajty: 3 (kod instrukcji
gumentem bezpośrednim. Jeżeli się róznią
wciśnięto + dana + przesuniecie  rel )
to następuje skok.
klawisz  B  przykład:
PC < PC + 3, jeśli (Ri) <> dana, to PC
........ ;tak to wykonuj MOV R4, P1 odczytanie
< PC + rel gdzie i = 0, 1
te instrukcje stanów z portu
dodatkowo: C < 0 gdy (Ri) >= dana, lub
sprC: P1
C< 1 gdy (Ri) < dana
CJNE A,#67, sprD ;nie to czy CJNE R4, #100, nie_100 ;porównanie
 kod: 1 0 1 1 0 1 1 i gdzie i=0,
wciśnięto ich z liczba 100
1 stÄ…d kody:
klawisz  C SETB P3.0 ;równe to
B6h, B7h
......... ;tak to wykonuj ustaw pin 0
 cykle: 2 bajty: 3 (kod instrukcji
te instrukcje portu P3
+ dana + przesuniecie  rel )
sprD: ......
 przykład: sekwencja instrukcji porównania
CJNE A, #68,czekaj ;nie to czekaj nie_100:
w postaci:
na kolejne CLR P3.0 ;nie równe to
MOV R1, #30h
naciśnięcie zeruj pin 0
CJNE @R1, #255, skocz
klawisza portu P3
.......
......... ;tak to wykonuj
......
skocz:
te instrukcje
...... .......
jest równoważna sekwencji
46 ELEKTRONIKA DLA WSZYSTKICH 1/98
MOV A, #255 się. W zalezności od typu argumentu rozróż-
CJNE A, 30h, skocz nia siÄ™ dwa typy instrukcji, oto one.
DJNZ adres, rel
.......
 zmniejszona zostaje zawartość komórki pa-
skocz:
DJNZ Rn, rel mięcie wew. RAM o podanym bezpośred-
.......
 zmniejszona zostaje zawartość podanego nio adresie o jeden, a nastepnie jeżeli nie
przeanalizuj i zastanów sie dlaczego?, pod-
rejestru Rn (R0...R7) o jeden, a nastepnie je- jest równa zero, to następuje skok.
powiem tylko że w przykładzie porównywa-
żeli nie jest równa zero, to następuje skok. PC < PC + 2, (adres) < (adres)  1, je-
na jest zawartość komórki pamięci wew.
PC < PC + 2, Rn < Rn  1, gdzie żeli (adres) <> 0, to PC < PC + rel
RAM z określoną liczbą, przy różnicy wyste-
n = 0...7  kod: 1 1 0 1 0 1 0 1 D5h
puje skok
jeżeli Rn <> 0, to PC < PC + rel  cykle: 2 bajty: 3 (kod instrukcji
Ostatnią instrukcją skoków warunkowych
 kod: 1 1 0 1 1 n2 n1 n0 gdzie n2 n1 n0 + adres + przesunięcie  rel )
jest polecnie DJNZ. Ogólna postać instruk-
określają jeden z rejestrów R0...R7 stąd ko-  przykład: sekwencja instrukcji przedstawio-
cji jest następująca:
dy: D8h...DFh na poniżej daje taki sam efekt jak w porzed-
 cykle: 2 bajty: 2 (kod instrukcji nim przykładzie.
DJNZ , rel + przesunięcie  rel ) MOV B, #26
 ang.  Decrement and Jump if Not Zero ,  przykład: sekwencja instrukcji dodaj:
zmniejsz o jeden i skocz jeżeli nie równe zero MOV R7, #26 ADD A, #1
W wyniku tej operacji od wskazanego argu- dodaj: DJNZ B, dodaj
mentu  arg jest odejmowana jedynka (jest ADD A, #1 .......
on dekrementowany). Jeżeli w wyniku odję- DJNZ R7, dodaj A teraz pora na naprawdę ostatnią instruk-
cia wartość argumentu nie jest równa zero, ...... cję z listy poleceń procesora 8051.
to zostaje wykonany skok zgodnie z zasada- jest równowazna poleceniu
mi opisanymi wcześniej w przypadku argu- ADD A,#26
NOP
mentu  rel . Stan znaczników nie zmienia co w obu przypadkach powoduje dodanie
 ang.  No OPeration , nie rób nic
do akumulatora liczby 26.
Też to potrafisz
 jest to instrukcja, w wyniku której nie zmie- Ja w każdym razie w kolejnym odcin-
nia sie stan procesora, z wyjÄ…tkiem licznika
ku przedstawię Ci pełną listę dodatko-
rozkazów którym po pobraniu tej instrukcji
wych procedur (podprogramów) które
jest zwiekszany o jeden.
beda niezmiernie przydatne przy tworze-
 kod: 0 0 0 0 0 0 0 0 00h
niu wspólnyhc programów.
 cykle: 1 bajty: 1
 przykład: sekwencja instrukcji
Ci z  komputerowców , którzy juz na-
MOV A, B
byli dyskietkÄ™ AVT2250/D mogÄ… zapoz-
NOP
nać się z taką listą czytając zbiór
MUL A, B
 BIOS.INC , w którym są zawarte defini-
będzie zajmie procesorowi 1 cykl maszyno-
cje adresów wszysktich portrzebnych
wy więcej niz sekwencja
MOV A, B
procedur . Dodatkowo umieszczono
MUL A, B
w nich opis i sposób wywołania, czyli pa-
ale efekt działania będzie taki sam w obu
rametry wejściowe porprogramu, oraz
przypadkach.
efekt działania.
Pamiętaj, wszystkie one są częścią
programu monitora i tak samo jak napisa-
LEKCJA 4
ny przez Ciebie program sÄ… ciÄ…giem
określonych instrukcji, w wyniku działa-
W dzisiejszej lekcji poćwiczymy sobie
nia których otrzymujesz określony efekt,
użycie instrukcji wywołań podprogra-
np. na wyświetlaczu.
mów do realizacji prostych układów licz-
Ze względu na ograniczona objetość
nikowych. Na wstepnie jednak kilka wy-
artykułu, w dzisiejszej lekcji wykorzysta-
jasnień. Otóż jak zdążyliście sie zoriento-
my tylko niektóre procedury (podprogra-
wac z poprzednich lekcji w przykładach
my).
podawałem listingi programów, w któ-
Dla przykładu skorzystajmy z podpro-
rych występowały instrukcje wywołań
gramu którego zadaniem jest wypisanie
 dziwnych procedur np.
na wyświetlaczu na pozycji określonej
LCALL A2HEX (1)
w rejestrze B, liczby znajdujÄ…cej siÄ™
oraz operacje przesłania  niezrozumia-
w akumulatorze w postaci heskadecy-
łych argumentów bezpośrednich np.:
malnej (szesnastkowej). Procedura ta
MOV DL1, #_minus (2)
znajduje siÄ™ w monitorze pod adresem
Otóż moi drodzy w programie monito-
024Eh.
ra który macie w swoim komputerku
w pamięci EPROM zawarty jest program
Zadanie 1
monitora  o tym juz wiecie. Dzięki nie-
Wypisać dowolną 8 bitową liczbę na
mu możliwa jest komunikacja i ładowanie
wyświetlaczu w postaci heksadecymal-
programów z komputera PC lub ręcznie.
nej.
Monitor jest na tyle mądry że dodatkowo
Załóżmy że chcemy aby liczba pojawi-
komunikuje sie z użytkownikiem za po-
ła się na 3 ciej i 4 tej pozycji, należy wy-
moca 8 mio pozycyjnego wyświetlacza
konać i skompilować (komputerowo lub
i lokalnej klawiatury. No ale przecież ten
ręcznie przetłumaczyć) instrukcje:
 monitor to w końcu też kawałek pro-
gramu napisany za pomocÄ… tych samych
MOV A, #liczba
instrukcji, które poznawaliście przez
;jako liczba wpisac dowolna wartość np.
ostatnie 3 odcinki naszego kursu. To
45h
własnie dziękiniemu całe urządzenie żyje
MOV B, #3 ;na DL3
i pozwala na niezłą zabawę.
i DL4
Oprócz zawartych w monitorze funkcji
LCALL A2HEX
uaktywnianych klawiszami np.  LOAD ,
 EDIT , itp. istnieje kilka bardzo użytecz-
nych procedur które sa potrzeben ano
chociażby do wypisania aktualnej wartoś-
ci rejestru DPTR na wyświetlaczu (tak się
dzieje np., przy edycji pamięci RAM kiedy
na 4 pierwszych wyświetlaczach DPTR
jest wyświetlany jako 4 znaki w kodzie
szesnastkowym.
A czy zastanawiałeś sie drogi Czytelni-
Sławomir Surowiński
ku, jak to sie dzieje, że po nacisnięciu
przez Ciebie odpowiedniego klawisza,
układ reaguje np. uaktywniając odpo-
wiedniÄ… funkcjÄ™ monitora? Do tego celu
wykorzystywany jest inny podprogram
(także zawarty w monitorze) którego za-
daniem jest oczekiwanie na nacisnięcie
klawisza a nastepnie podjęcie decyzji  co
z tym fantem dalej robić... . Takie przy-
kłady można by mnozyć.
48 ELEKTRONIKA DLA WSZYSTKICH 1/98
Też to potrafisz
Mikrokontrolery?
W niniejszym odcinku szkoły mikro-
procesorowej kończymy omawianie
listy instrukcji procesora 8051. Po-
zostało kilka prostych instrukcji uży-
wanych głównie w pętlach progra-
To takie proste...
mowych oraz instrukcja pusta.
W dalszej części artykułu zajmiemy
się dokładnym opisem wszystkich
podprogramów usługowych monitora
 czyli programu komputerka eduka-
cyjnego, który każdy z Was ma zapi-
sany w EPROM-ie swego zestawu.
Poznamy tez proste sposoby na wy-
korzystanie podstawowych zaso-
bów tego programu, dzięki którym
możliwa będzie kontrolowana inge-
Część 10
rencja we wszystkie mechanizmy
dostępne w Twoim systemie eduka- Asembler  język maszynowy procesora
cyjnym.
Kontynuujemy opis instrukcji z grupy skoków. Pozostała nam do etyk02: ;właściwe miejsce skoku według pozycji = 1
omówienia dość rzadko wykorzystywana przez początkujących progra- .....
mistów, instrukcja skoku względem wskaznika danych DPTR, dwie in- etyk03: ;właściwe miejsce skoku według pozycji = 2
strukcje skoków warunkowych testujących zawartość akumulatora
.....
oraz dwa typy instrukcji, które dzięki swojej konstrukcji znajdują najszer-
etyk04: ;właściwe miejsce skoku według pozycji = 3
sze zastosowanie przy porównywaniu zawartości niektórych rejestrów
.....
z wartościami stałymi (wykorzystywane np. przy odczycie kodów naciś-
niętego klawisza) lub w pętlach programowych. Oto one:
Poniżej zapoznamy się z instrukcjami skoków warunkowych, któ-
re badają warunek zgodności zadanego bajtu w wew. RAM proceso-
JMP A+DPTR
ra (rejestru) z innym rejestrem lub argumentem bezpośrednim (licz-
 ang.  Jump Indirect relative to DPTR  skocz pośrednio względem
bÄ…). Dwie z nich JZ i JNZ sprawdzajÄ… czy w akumulatorze znajduje
rejestru DPTR
siÄ™ liczba zero czy nie i na tej podstawie podejmowana jest decyzja
 w wyniku tej instrukcji następuje skok pod adres będący sumą aktu-
o skoku. Pozostałe instrukcje porównujące wybrane rejestry z innym
alnej wartości rejestru DPTR (liczba 16 bitowa) i wartości akumulato-
lub konkretną liczbą znajdują zastosowanie szczególnie w pętlach
ra (liczba 8 bitowa). Można powiedzieć że skok następuje pod adres
programowych, gdzie konieczne jest wykonanie n razy określonej
w pamięci programu umieszczony w DPTR z przesunięciem poda-
opracji.
nym w akumulatorze. Przesuniecie to traktowane jest jako liczba bez
znaku, czyli z zakresu <0...255>
JZ rel
PC < A + DPTR
 kod: 0 1 1 1 0 0 1 1 73h  ang.  Jump if Accumulator is Zero , skocz jeżeli w akumulatorze jest
 cykle: 2 bajty: 1 liczba 0 (zero)
 przykład: realizacja skoków w miejsca w programie określone po-  sprawdzana jest zawartość akumulatora (A), jeżeli jest równa zero, to
przez numer w zmiennej  pozycja (umieszczonej  zadeklarowanej
do licznika rozkazów PC dodawane jest przesunięcie  rel  na zasa-
z wewn. RAM procesora)
dach takich jak opisano wczesniej przy okazji omawiania poprzednich
MOV A, pozycja ;załadowanie numeru pozycji
instrukcji skoków z argumentem  rel (liczba 8 bitowa ze znakiem
MOV B, #2 ;2 bo instrukcje w tabeli skoków sa
w kodzie U2).
2 bajtowe (AJMP)
PC < PC + 2, jeśli A = 0, to PC < PC + rel
MUL A, B ;obliczenie faktycznego ofsetu
 kod: 0 1 1 0 0 0 0 0 60h
do tabeli skoków
 cykle: 2 bajty: 2 (kod instrukcji 60h + przesunięcie  rel )
MOV DPTR, #tablica_skokow ;załadowanie adresu
 przykład:
tabeli skoków do DPTR
MOV A, B ;załadowanie rej. B do Acc celem
JMP A+DPTR ;wykonanie skoku
;sprawdzenia czy = 0
tablica_skoków: ;tu zaczyna sie tabela skoków
JZ jest_zero ;jeżeli tak to skok do etykiety 
AJMP etyk01 ;tu nastapi skok gdy  pozycja = 0
jest_zero
AJMP etyk02 ;tu nastÄ…pi skok gdy  pozycja = 1
nie_zero: ;jeżeli nie to wykonuj pozostałe instrukcje
AJMP etyk03 ;tu nastÄ…pi skok gdy  pozycja = 2
.....
AJMP etyk04 ;tu nastÄ…pi skok gdy  pozycja = 3
.....
..... ;pozostałe instrukcje programu
jest_zero: ;tu nastąpi skok jeżeli rej.B był równy zero
.....
etyk01: ;właściwe miejsce skoku według pozycji =0 ..... ;i zostaną wykonane te instrukcje
..... ;tu mozna umieścić instrukcje .....
ELEKTRONIKA DLA WSZYSTKICH 2/98 35
Też to potrafisz
JNZ rel choćby w naszym komputerku). Jeżeli chcemy podjąć określone
 ang.  Jump if Accumulator is Not Zero , skocz jeżeli akumulator nie działanie w zależności od rodzaju klawisza, należy przechowywany
jest = 0 (zero) kod klawisza porównać z konkretna liczbą.
 sprawdzana jest zawartość akumulatora (A), jeżeli jest różna od zera,
to do licznika rozkazów PC dodawane jest przesunięcie  rel  na za- czekaj:
sadach takich jak opisano wczesniej przy okazji omawiania poprzed- MOV A, klawisz ;pobranie kodu wciśniętego klawisza
nich instrukcji skoków z argumentem  rel (liczba 8 bitowa ze zna- CJNE A, #65, sprB ;czy wcisnięto klawisz  A (65  kod  A )
kiem w kodzie U2). ........ ;tak to wykonuj te instrukcje
PC < PC + 2, jeśli A <> 0, to PC < PC + rel sprB:
 kod: 0 1 1 1 0 0 0 0 70h CJNE A, #66, sprC ;nie to czy wciśnięto klawisz  B
 cykle: 2 bajty: 2 (kod instrukcji 70h + przesuenięcie  rel ) ........ ;tak to wykonuj te instrukcje
 przykład: sprC:
MOV A, B ;załadowanie rej. B do Acc celem CJNE A,#67, sprD ;nie to czy wciśnięto klawisz  C
sprawdzenia czy = 0 ......... ;tak to wykonuj te instrukcje
JNZ nie_zero ;jeżeli nie to skok do etykiety  nie_zero sprD:
jest_zero: ;jeżeli tak to wykonuj pozostałe instrukcje CJNE A, #68,czekaj ;nie to czekaj na kolejne naciśnięcie
..... klawisza
..... ......... ;tak to wykonuj te instrukcje
nie_zero: ;tu nastapi skok jeżeli rej.B był różny od
zera
CJNE Rn, #dana, rel
..... ;i zostanÄ… wykonane te instrukcje
 rejestr Rn (R0...R7) zostaje porównany z argumentem bezpośred-
.....
nim, jeżeli nie sa zgodne zostaje wykonany skok
PC < PC + 3, jeśli Rn <> dana, to PC < PC + rel gdzie
A oto wspomniana wczesniej grupa instrukcji używana głównie
n = 0...7
w pętlach programowych lub przy zwielokrotnionym sprawdzaniu wa-
dodatkowo: C < 0 gdy Rn>= dana, lub C< 1 gdy Rn< dana
runków zgodnosci określonych rejestrów z innym lub z argumentami
 kod: 1 0 1 1 0 n2 n1 n0 gdzie n2 n1 n0 określają jeden z rejest-
stałymi. Ogólna postać instrukcji jest następująca:
rów R0...R7 stąd kody: B8h....BFh
 cykle: 2 bajty: 3 (kod instrukcji + dana + przesuniecie  rel )
CJNE , , rel  przykład:
 ang.  Compare and Jump if Not Equal , porównaj i skocz jeżeli argu- MOV R4, P1 ;odczytanie stanów z portu P1
menty porównania nie są sobie równe CJNE R4, #100, nie_100 ;porównanie ich z liczbą 100
SETB P3.0 ;równe to ustaw pin 0 portu P3
W instrukcji tej porównywane sa dwa argumenty: arg1 i arg2. Jeżeli ......
nie są one równe (ich wartości nie sa równe), to do zawartości licznika nie_100:
rozkazów jest dodawane przesunięcie  rel na zasadach zgodnych CLR P3.0 ;nie równe to zeruj pin 0 portu P3
z omówionymi wcześniej. W efekcie zostaje wykonany skok w progra- ......
mie. Tu uwaga, skok nastepuje względem instrukcji występującej po in- ......
strukcji CJNE. Dodatkowo jest zmieniany znacznik przeniesienia C.
I tak, jeżeli w wyniku porównania okaże sie zę argumrent arg1 jest W przykładzie porównywana jest zawartość rejestru R4 z liczbą 100,
mniejszy od argumentu arg2 to do znacznika C wpisywana jest jedynka jeżeli występuje zgodność, to w porcie P3 zostaje ustawiony najmłod-
(znacznik jest ustawiany), w przeciwnym przypadku znacznik jest zero- szy bit (pin) P3.0,w przeciwnym przypadku jest zerowany. Jest to pros-
wany (C=0). W zalezności od typu argumentów instrukcji możliwe są ty przykład komparatora liczby 8 bitowej podawanej na port P1 z ze-
cztery przypadki, oto one. wnątrz ze stałą liczbą (w tym przypadku jest to liczba 100).
CJNE A, adres, rel CJNE @Ri, #dana, rel
 porównywany jest akumulator oraz komórka wew. RAM o adresie  porównywana jest zawartośc komórki w wew. RAM której adres
podanym bezposrednio jako argument  adres znajduje sie w rejestrze Ri (R0 gdy i=0, lub R1 gdy i=1) z argumen-
PC < PC + 3, jesli A <> (adres), to PC < PC + rel tem bezpośrednim. Jeżeli się różnią to następuje skok.
dodatkowo: C < 0 gdy A>= (adres), lub C< 1 gdy A< (adres) PC < PC + 3, jeśli (Ri) <> dana, to PC < PC + rel gdzie
 kod: 1 0 1 1 0 1 0 1 B5h i = 0, 1
 cykle: 2 bajty: 3 (kod instrukcji + adres + przesunięcie  rel ) dodatkowo: C < 0 gdy (Ri) >= dana, lub C< 1 gdy (Ri) < dana
 przykład:  kod: 1 0 1 1 0 1 1 i gdzie i=0, 1 stąd kody: B6h, B7h
MOV B,#56  cykle: 2 bajty: 3 (kod instrukcji + dana + przesuniecie  rel )
check:  przykład: sekwencja instrukcji porównania w postaci:
CJNE A, B, zwieksz MOV R1, #30h
SJMP koniec CJNE @R1, #255, skocz
zwieksz: .......
INC A skocz:
SJMP check .......
koniec: jest równoważna sekwencji
CLR B MOV A, #255
...... CJNE A, 30h, skocz
.......
W przykładzie tym do rejestru B wpisywana jest liczba 56. Nastepnie skocz:
sprawdzany jest warunek zgodności akumulatora z rejestrem B, jeżeli .......
nie są sobie równe, to akumulator jest inkrementowany (dodawana jest
do niego jedynka)  patrz etykieta  zwieksz . Następnie operacja jest przeanalizuj i zastanów sie dlaczego. Podpowiem tylko, że w przykła-
powtarzana od początku  instrukcja  SJMP check . Jeżeli w końcu na- dzie porównywana jest zawartość komórki pamięci wew. RAM z okreś-
stąpi zgodność obu rejestrów, wykonywany jest skok do etykiety  ko- loną liczbą, przy różnicy wystepuje skok.
niec , gdzie rejestr B zostaje wyzerowany.
Ostatnią instrukcją skoków warunkowych jest polecnie DJNZ. Ogól-
na postać instrukcji jest następująca:
CJNE A, #dana, rel
 akumulator zostaje porównany z argumentem bezpośrednim (8 bito-
DJNZ , rel
wą liczbą), jeżeli nie są zgodne nastepuje skok.
PC < PC + 3, jeśli A <> dana, to PC < PC + rel  ang.  Decrement and Jump if Not Zero , zmniejsz o jeden i skocz je-
dodatkowo: C < 0 gdy A>= dana, lub C< 1 gdy A< dana żeli nie równe zero
 kod: 1 0 1 1 0 1 0 0 B4h W wyniku tej operacji od wskazanego argumentu  arg jest odejmo-
 cykle: 2 bajty: 3 (kod instrukcji + dana + przesunięcie  rel ) wana jedynka (jest on dekrementowany). Jeżeli w wyniku odjęcia war-
 przykład: niech w zmiennej (rejestrze)  klawisz będzie przechowy- tość argumentu nie jest równa zero, to zostaje wykonany skok zgodnie
wany kod wciśnętego klawisza w systemie mikroprocesorowym (ot z zasadami opisanymi wcześniej w przypadku argumentu  rel . Stan
36 ELEKTRONIKA DLA WSZYSTKICH 2/98
Też to potrafisz
znaczników nie zmienia się. W zalezności od typu argumentu rozróżnia  ręczniacy powinny tłumaczyć (rozumieć) te 3 litery  DL1 jako liczbę
się dwa typy instrukcji, oto one. 120. I tak jeżeli w dalszej części programu, juz w samym kodzie pojawi
sie np. instrukcja:
MOV DL1, A
DJNZ Rn, rel
 zmniejszona zostaje zawartość podanego rejestru Rn (R0...R7) o je- oznaczać to bedzie to samo co instrukcja
MOV 78h, A
den, a nastepnie jeżeli nie jest równa zero, to następuje skok.
PC < PC + 2, Rn < Rn  1, gdzie n = 0...7
jeżeli Rn <> 0, to PC < PC + rel Podobnie np. jeżeli zechcemy np. załadować liczbę (nie zawartość ko-
 kod: 1 1 0 1 1 n2 n1 n0 gdzie n2 n1 n0 określają jeden z rejest- mórki spod podanego adresu) 78h np. do rejestru B wykonamy operację:
rów R0...R7 stąd kody: D8h...DFh MOV B, #DL1
 cykle: 2 bajty: 2 (kod instrukcji + przesunięcie  rel ) co będzie tożsame jako
 przykład: sekwencja instrukcji MOV B, #78h
CLR A
MOV R7, CLR A #26
Znaczek  # oznacza że mamy do czynienia z argumentem bezpo-
dodaj:
średnim, czyli liczbą, a nie jak w przykładzie poprzednim z adresem ko-
ADD A, #1
mórki w wewnętrznej pamięci RAM procesora. Warto to zapamiętać.
DJNZ R7, dodaj
Dla zapamiętania jeszcze jeden przykład: niech pod adresem F005h
......
w obszarze zewnętrznej przestrzeni adresowej procesora (w jakimś
jest równoważna poleceniu
układzie skonstruowanym przez nieznanego elektronika a wykorzystu-
ADD A,#26
jÄ…cym procesor 8051) znajduje siÄ™ 8 bitowy rejestr pracujacy jako wy-
co w obu przypadkach powoduje dodanie do akumulatora liczby 26.
jście informacji, np. sterujący ośmioma przekaznikami załączającymi ża-
rówki węża świetlnego  chociażby znany wam już układ 74573. Aby
DJNZ adres, rel
zapalić co drugą żarówkę należy wykonać proste instrukcje zapisu do
 zmniejszona zostaje zawartość komórki pamięcie wew. RAM o poda- zewnętrznej pamięci danych, zakładając że rejestr jest zatrzaskiwany
nym bezpośrednio adresie o jeden, a nastepnie jeżeli nie jest równa
pod wpływem (nie bezpośrednio !!!) sygnału /WR  zapisu do ext. RAM
zero, to następuje skok.
procesora. Zadeklarujmy zatem ten specjalny adres jako nazwÄ™ pocho-
PC < PC + 2, (adres) < (adres)  1, jeżeli (adres) <> 0, to PC
dzaca od angielskiego słowa  wąż :
< PC + rel
SNAKE EQU 0F005h
 kod: 1 1 0 1 0 1 0 1 D5h
Wykonanie w dalszej części programu sekwencji:
 cykle: 2 bajty: 3 (kod instrukcji + adres + przesunięcie  rel )
MOV DPTR, #SNAKE ;załaduj adres do wskaznika
 przykład: sekwencja instrukcji przedstawiona poniżej daje taki sam
danych
efekt jak w porzednim przykładzie.
MOV A, #55h ;w liczbie 55h sÄ…siednie bity
CLR A
sa różne: 01010101
MOV B, #26
MOVX @DPTR, A ;i zapisz do rejestru pod
dodaj:
wskazany adres
ADD A, #1
spowoduje zamierzony efekt. Pierwszą linię można zapisać oczywiście
DJNZ B, dodaj
jako:
.......
MOV DPTR, #F005h
......
A teraz pora na naprawdę ostatnią instrukcję z listy poleceń proceso-
......
ra 8051.
ale jak sami widzicie pierwszy sposób jest bardziej czytelny, bowiem od
razu wiemy czytając program, że w tym miejscu nastapi zapis do rejes-
NOP
tru węża świetlnego.
 ang.  No Operation , nie rób nic
 jest to instrukcja, w wyniku której nie zmienia się stan procesora,
Drugą deklaracją ważną szczególnie a może przede wszysktim dla
z wyjątkiem licznika rozkazów którym po pobraniu tej instrukcji jest
komputerowców jest dyrektywa  INCLUDE  ang. włącz w sensie do-
zwiększany o jeden.
łącz, dopnij, wez pod uwagę kompilując program . Służy ona do włącza-
 kod: 0 0 0 0 0 0 0 0 00h
nia podczas kompilacji zbiorów dodatkowych ), oprócz tego, którym jest
 cykle: 1 bajty: 1
celem kompilacji, przy wywołaniu programi kompilatora PASM51.EXE,
 przykład: sekwencja instrukcji
w których znajdują się dodatkowe kawałki  kodu zródłowego użyt-
MOV A, B
kownika. W sensie dosłownym mogą to być zbiory tekstowe zawiera-
NOP
jące biblioteki (w postaci zródłowej) dodatkowych procedur np. mate-
MUL A, B
matycznych.
zajmie procesorowi o 1 cykl maszynowy więcej niz sekwencja
W praktyce np. kiedy zachodzi potrzeba użycia podprogramu doda-
MOV A, B
wania dwóch liczb 32 bitowych w pięciu aplikacjach (programach), nie
MUL A, B
warto umieszczać kodu tej procedury w każdym z pięciu zbiorów zród-
ale efekt działania będzie taki sam w obu przypadkach.
łowych. Lepiej i wygodniej jest raz zapisać kod zródłowy takiej procedu-
ry w odzielnym zbiorze np. pod nazwą:  ADD32.INC , po czym w każ-
I na tym kończy się lista instrukcji procesora 8051. Teraz pozostaje juz
dym z pieciu aplikacji zapisać 1 liniową deklarację dołączenia tego zbio-
tylko praktyczne ich wykorzystanie w celu tworzenia programów. Na
ru podczas kompilacji w postaci:
początku będą to aplikacje na komputerek edukacyjny, który każdy
INCLUDE ADD32.INC
z Was powinien już mieć uruchomiony, potem na dowolne układu elek-
co spowoduje dołączenie treści zbioru ADD32.INC do pliku głównego
troniczne, które już sami będziecie konstruować bazując na proceso-
w miejscu jej wywołania. Oczywiście jeżeli w zbiorze z podprogramem
rach serii 8051 I pochodnych.
wystąpi błąd w zapisie jakiejś instrukcji kompilator automatycznie prze-
rwie tłumaczenie sygnalizując komunikatem odpowiedni błąd z poda-
Pozostaje j

Wyszukiwarka

Podobne podstrony:
Mikrokontrolery To takie proste, cz 15 (układ licznikowy w 8052C & specjalne tryby pracy 8051)
Mikrokontrolery to takie proste cz 03
Mikrokontrolery To takie proste, cz 14 (opis układów licznikowych oraz układu przerwań 8051 c d )
Mikrokontrolery to takie proste cz 02a
Mikrokontrolery To takie proste, cz 11 (opis podprogramów komputerka edukacyjnego)
Mikrokontrolery To takie proste, cz 11 (opis podprogramów komputerka edukacyjnego)

więcej podobnych podstron