WIRE'IT '51 - programowanie bez pisania.pdf

(163 KB) Pobierz
32039961 UNPDF
K U R S
WireIt! '51
Programowanie bez pisania
Wracamy na ³amach EP do
pakietu projektowego WireIt!,
ktÛry umoøliwia przygotowywanie
aplikacji na procesorze '51, bez
koniecznoúci pos³ugiwania siÍ
jakimkolwiek jÍzykiem
programowania.
DzieÒ z†øycia konstruktora
Pracowa³em wtedy w†jednym z†licznych
zak³adÛw elektronicznych niedaleko mojego
domu. Jak na poniedzia³ek, godzina 8.00,
czu³em siÍ doskonale - jedynie doskwiera³a
mi g³oúna k³Ûtnia w†pobliskiej sali: gabinecie
Szefa. Poniewaø z†natury jestem ciekawski,
podszed³em do drzwi. Mog³em wiÍc dowie-
dzieÊ siÍ, o†czym tak energicznie rozprawia³
Dyrektor: kolega z†pracowni konstrukcyjnej
przekroczy³ znacznie plan wydatkÛw. OtÛø
do ma³ego modelu kolejki - bo tym siÍ w³aú-
nie zajmowa³a Firma - zaplanowa³ zastoso-
wanie sterownikÛw PLC. Poniewaø - jak siÍ
okaza³o - nawet ìd³ugieî LOGO! mia³o za
ma³¹ liczbÍ wyjúÊ, uøy³ kontrolera Simatic.
Oczywiúcie, koszt jednego systemu sterowa-
nia wzrÛs³ tak, øe øaden klient nie chcia³ go
kupiÊ i†trzeba by³o sprzedaÊ 500 dotychczas
wyprodukowanych egzemplarzy po cenie niø-
szej od kosztÛw produkcji.
Kiedy wyszed³ - na szczÍúcie Szef pozwoli³
mu zostaÊ w†Firmie, obcinaj¹c jedynie pre-
mie na kilka lat - poradzi³em mu zastosowaÊ
procesory ST62. Argumentowa³em, øe prze-
cieø wspaniale siÍ ich uøywa, bo jest dla nich
stworzony nawet ST-Realizer, umoøliwiaj¹cy
wygodne programowanie. Co on na to? Zrobi³
kwaún¹ minÍ i†cierpko mi zakomunikowa³,
ile wyda³ kiedyú w³asnych pieniÍdzy na uk³a-
dy OTP (w sumie 39), na ktÛrych testowa³
oprogramowanie. A†uk³adÛw EPROM nie ku-
powa³, bo pojedynczy uk³ad by³ drogi, a†trze-
ba by by³o mieÊ ze trzy do nanoszenia ma³ych
poprawek (jeden siÍ kasuje, drugi jest w†tym
czasie programowany, a†trzeci s³uøy testom).
Nigdy nie zebra³ teø doúÊ pieniÍdzy, øeby
kupiÊ emulator sprzÍtowy - a†programowy
mu nie wystarcza³.
Takie cele, jak np. obs³uga modelu sygna-
lizacji úwietlnej czy kolejki, moøna osi¹gn¹Ê
stosuj¹c taÒsze i†mniej zaawansowane uk³ady
rodziny MCS-51, w†szczegÛlnoúci ma³e i†tanie
AT89C2051 i†podobne im kontrolery
z†pamiÍci¹ Flash. Cechuje je prostota
budowy uk³adÛw otoczenia, ³atwoúÊ
zbudowania ma³ego programatora - na-
wet na poczekaniu - i†wyj¹tkowo niska
cena. Niestety, trudno znaleüÊ dla nich
jakiú odpowiednik ST-Realizera.
ba narysowaÊ sieÊ elementÛw, wspÛ³dzia³aj¹-
cych na zasadzie bramek logicznych. W†Wi-
reIt! naleøy u³oøyÊ elementy funkcjonalne
(operacje arytmetyczne, komunikacja z†uøyt-
kownikiem, sterowanie itp.), a†nastÍpnie po-
³¹czyÊ je przewodami. CzynnoúÊ ta jest z†pew-
noúci¹ znana kaødemu elektronikowi, wiÍc
WireIt! powinien s³uøyÊ nawet tym, ktÛrzy nie
spotkali siÍ przedtem z†asemblerem 8051.
Podstawy pracy z†programem
Aby ìrozmawiaÊî z†programem, trzeba poz-
naÊ jego jÍzyk. Element funkcjonalny, odpo-
wiadaj¹cy liúcie instrukcji asemblera, nazywa
siÍ blokiem (block) - rys. 1 . Bloki mog¹ mieÊ
wejúcia i † wyjúcia , nazywane ogÛlnie portami
(ports). Porty mog¹ teø znajdowaÊ siÍ na brze-
gu obszaru projektowania (designing area),
wtedy s³uø¹ jako element komunikacji projek-
tu ze ìúwiatem zewnÍtrznymî i†umoøliwiaj¹
jego wykorzystanie jako pojedynczy blok ,
o†czym pÛüniej. Nazywamy je portami global-
nymi (global ports). Kaødy blok , podobnie jak
porty globalne, powinien mieÊ unikaln¹ na-
zwÍ. Jeúli pojawi¹ siÍ dwa bloki o†tej samej
nazwie, to asembler powinien wygenerowaÊ
pewn¹ liczbÍ komunikatÛw o†b³Ídach.
Prawie ca³a obs³uga programu odbywa siÍ
za pomoc¹ menu kontekstowego: moøna je
wywo³aÊ, klikaj¹c na obszarze projektowania
prawym przyciskiem myszki. S¹ tam operacje
wstawiania i†kasowania bloku, modyfikacji
jego w³aúciwoúci (properties), dodawania
i†usuwania globalnych portÛw , a†takøe - co
moøe siÍ przydaÊ nie tylko pocz¹tkuj¹cym -
moøliwoúÊ uzyskania pomocy dotycz¹cej wy-
branego bloku.
Aby po³¹czyÊ wejúcie i† wyjúcie przewodem,
naleøy przeci¹gn¹Ê myszkÍ od jednego portu
do drugiego (w obojÍtnej kolejnoúci). Naleøy
przy tym pamiÍtaÊ, øe przewÛd moøe ³¹czyÊ
tylko wejúcie i † wyjúcie (i to w†dodatku tego
samego koloru) oraz o†tym, øe wszystkie por-
Program: WireIt! 51
Przeznaczenie:
Projektowanie aplikacji sterowania dla
8051.
Program WireIt!
Skoro graficzne úrodowisko progra-
mistyczne dla ma³ych i†tanich uk³a-
dÛw jest niedostÍpne, naleøy stworzyÊ
je samemu. Program napisany przeze
mnie, s³uø¹cy do tego celu, nazywa siÍ
WireIt! i†obecnie dostÍpna jest jego
jedna wersja - dla 8051 (wspomagaj¹ca
takøe uk³ad ADuC812 firmy Analog
Devices). Moøna j¹ w†kaødej chwili
úci¹gn¹Ê ze strony http://
www.wireit.cjb.net jako archiwum ZIP.
RadzÍ rÛwnieø czasem przegl¹daÊ to
miejsce, bo to w³aúnie tam pojawiaÊ
siÍ bÍd¹ nowe i†ulepszone wersje pro-
gramu oraz biblioteki.
Idea programu odbiega nieco od ST-
Realizera i†jemu podobnych. Aby utwo-
rzyÊ aplikacjÍ w†tych programach, trze-
Cena:
0 zł (freeware).
Wymagania:
MS Windows 95, 16 MB RAM,
1,2 MB HDD.
Polecane:
MS Windows 95, 32 MB RAM,
1,2 MB HDD, ekran 800x600,
256 kolorów.
Uwaga:
System pomocy używa przeglądarki
HTML (zalecany Netscape 4.x).
Źródło:
http://www.wireit.cjb.net (lub CD−EP5/2000
w katalogu \Programy\WireIt!\) .
Autor:
Stanisław Skowronek.
Rys. 1. Nazewnictwo elementów projektu.
Elektronika Praktyczna 5/2000
23
32039961.012.png 32039961.013.png 32039961.014.png
K U R S
Tab. 1.
P1.0 zielone A, zielone C P1.4 czerwone C
P1.1 zielone B, zielone D P1.5 czerwone D
P1.2 czerwone A P1.6 żółte A
P1.3 czerwone B P1.7 żółte B
P3.0 tryb pracy: 0V − normalna praca,
5V − awaria (żółte migające)
Rys. 2. Wygląd przycisku “zwijającego”
fragment okna roboczego WireIt!
³¹czonych czarnymi przewodami), jeden ob-
s³uguj¹cy normalny tryb pracy, drugi - awa-
ryjny. Prze³¹czenie miÍdzy nimi moøe nast¹-
piÊ tylko na pocz¹tku cyklu, kiedy zostaje
odczytany (znanym juø nam blokiem IO.In-
Bit ) port P3.0. WartoúÊ wyjúciowa tego bloku
podawana jest na wejúcie bloku Thread.If
(podobnego do wystÍpuj¹cej w†jÍzykach wy-
sokiego poziomu konstrukcji if..then..else..).
Jeúli jest ona prawdziwa (port w†stanie wy-
sokim), sterowanie przekazywane jest do pra-
wego wyjúcia, w†przeciwnym razie - do le-
wego. Same w¹tki sk³adaj¹ siÍ z†naprzemien-
nie u³oøonych, po³¹czonych blokÛw 16-
Bit.Const i† User.Light . Wyøszy bajt podany
w†parametrach 16-Bit.Const oznacza wartoúÊ
wysy³an¹ do portu P1 mikrokontrolera, niø-
szy - czas oczekiwania po wys³aniu tej war-
toúci (w Êwiartkach sekundy). Na koÒcu w¹t-
ki siÍ ³¹cz¹ (blok Thread.Join ), a†ca³y pro-
gram zawarty jest w†niekoÒcz¹cej siÍ pÍtli,
znanej nam z†poprzedniego przyk³adu.
nie pod¹øy t¹ drog¹), a†wejúcie z†wyjúciem
bloku OutBit1 . Rezultat jest taki, øe procesor
najpierw ìprzechodziî przez blok Label1 , wy-
konuje nasz program, dochodzi do Jump1 , po
czym skacze do Label1 , zamykaj¹c cykl. Pro-
gram moøna zapisaÊ do pliku .HEX, gotowego
do zaprogramowania klikaj¹c przycisk Build
(drugi od prawej w†pasku narzÍdzi).
ty musz¹ byÊ po³¹czone.
W†pasku tytu³owym programu znajduje siÍ
- ma³a ciekawostka - przycisk RollUp ( rys.
2 ), ktÛrego klikniÍcie powoduje zwiniÍcie
okna do wysokoúci paska tytu³owego i†odkry-
cie Pulpitu.
Przyk³ady zastosowania -
traffic.wis, light.wis
ByÊ moøe poprzedni przyk³ad wyda³ siÍ
Czytelnikowi bardzo skomplikowany. D³ugoúÊ
jego opisu jest raczej pochodn¹ jego czysto
dydaktycznej funkcji. Zauwaømy, øe wszys-
tkie bloki uøyte w†projekcie odpowiadaj¹
praktycznie instrukcjom asemblera - st¹d taki
rozmiar projektu.
Teraz, aby wykazaÊ przydatnoúÊ programu
do realizacji prostych systemÛw sterowania,
zaprezentujÍ uk³ad kontroli sygnalizatora
úwietlnego z†moøliwoúci¹ prze³¹czenia na
ìúwiat³a øÛ³te migaj¹ceî. Przy okazji pokaøÍ,
jak moøna w†WireIt! tworzyÊ w³asne bloki.
Zauwaømy, øe stale powtarzaj¹cym siÍ ele-
mentem w†uk³adzie sygnalizacji úwietlnej jest
ìzmiana úwiate³ - pauzaî. Warto by by³o go
zapisaÊ jako jeden blok . Aby to uczyniÊ,
naleøy najpierw utworzyÊ nowy projekt (dru-
gi przycisk od lewej), nastÍpnie ustawiÊ opcje
kompilacji (czwarty od prawej), wybieraj¹c
format .WIO ( W ire I t! O bject format). Wtedy
moøna zacz¹Ê dodawaÊ porty globalne . Naj-
pierw dodajmy (w menu kontekstowym) port
wejúciowy 16-bitowy (o nazwie np. 'delay ).
Pojawi siÍ czerwony port globalny u†gÛry
obszaru projektowania.
Wtedy dodajmy element 8-Bit.Word2Bytes ,
³¹cz¹c jego wejúcia z†odpowiednimi portami
globalnymi. Blok ten dzieli s³owo na dwa
bajty (starszy po lewej). Potem pod³¹czmy do
lewego niebieskiego wyjúcia i†czarnego wyj-
úcia element IO.OutPort podaj¹c jako nazwÍ
portu P1. Do wyjúcia tego elementu i†prawego
wyjúcia Word2Bytes1 do³¹czmy blok Thre-
ad.SecDelay (czekaj¹cy 125000 cykli * war-
toúÊ wejúcia). Po³¹czmy wyjúcie tego elemen-
tu z†globalnym wyjúciem i†skompilujmy pro-
jekt przyciskiem Compile lub Build (odpo-
wiednio trzeci i†drugi od prawej). Podajmy,
odpowiadaj¹c na pytanie, jak¹ú nazwÍ pliku,
do ktÛrego ma byÊ wpisany utworzony kod
wynikowy.
Teraz przyszed³ czas, aby dodaÊ nowy
obiekt do zestawu blokÛw. Uøyjmy do tego
celu Bibliotekarza (Librarian), ktÛrego moøe-
my wywo³aÊ wybieraj¹c opcjÍ z†menu lub
naciskaj¹c pierwszy przycisk od prawej.
Ustawmy listÍ bibliotek na User i†naciúnijmy
Add . W†pojawiaj¹cym siÍ oknie dialogowym
zaznaczmy nasz plik WIO (wynik kompilacji)
i†wciúnijmy OtwÛrz . Zaznaczmy Design i†-
aby nadaÊ mu bardziej odpowiedni¹ nazwÍ
- naciúnijmy Rename . W†polu poniøej wpisz-
my Light i†opuúÊmy Bibliotekarza , naciskaj¹c
OK.
Jak ³atwo sprawdziÊ, mamy nowy blok:
User.Light . Wykorzystajmy go, tworz¹c pro-
gram sterowania modelem sygnalizacji úwiet-
lnej. Moja propozycja po³¹czeÒ portÛw zna-
jduje siÍ w† tab. 1 .
Projekt sk³ada siÍ z†dwÛch czÍúci. W†zwi¹z-
ku z†tym s¹ dwa ìw¹tkiî (ci¹gi blokÛw po-
Pierwszy projekt - first.wis
PrzypuúÊmy, øe chcemy napisaÊ program,
odczytuj¹cy cyklicznie wartoúci z† portÛw P1.0
i†P1.1, a†nastÍpnie ustawiaj¹cy port P1.2
w†stanie odpowiadaj¹cym ich logicznemu ilo-
czynowi.
Najpierw, korzystaj¹c z†menu kontekstowe-
go umieúÊmy blok odczytuj¹cy wartoúÊ z† por-
tu P1.0 ( rys. 3 ). Po otwarciu okienka Block
Properties wybierzmy bibliotekÍ IO, a†z†niej
blok InBit . W†skrÛcie moøemy zapisaÊ ten
wybÛr jako IO.InBit . Potem musimy ustawiÊ
parametr Bit name na P1.0 i†nacisn¹Ê OK.
Blok InBit1 znajduje siÍ juø w†naszym pro-
jekcie.
Analogicznie dodajmy kolejny blok IO.In-
Bit z†tym, øe tym razem podamy inn¹ nazwÍ
bitu: P1.1. Potem moøemy po³¹czyÊ czarne
wyjúcie bloku InBit1 z†czarnym wyjúciem blo-
ku InBit2 , co bÍdzie sygnalizowa³o kompila-
torowi nastÍpuj¹c¹ kolejnoúÊ wykonywania:
najpierw wprowadü wartoúÊ z†P1.0, potem
dopiero z†P1.1. W†ogÛlnoúci, aplikacja bÍdzie
zaczyna³a siÍ w†czarnym wyjúciu w†lewym
gÛrnym rogu obszaru projektowania, ìporu-
sza³aî siÍ wzd³uø czarnych przewodÛw i†koÒ-
czy³a w†lewym dolnym rogu.
Teraz wstawimy blok wykonuj¹cy najwaø-
niejsz¹ czÍúÊ programu: blok Boolean.AND .
Po³¹czmy przewodem czarne wejúcie tego blo-
ku z†wyjúciem InBit2 . Jednak trzeba jeszcze
wskazaÊ kompilatorowi, na jakich wartoú-
ciach ma operowaÊ dany blok. Do tego s³uø¹
kolorowe przewody: zielony przekazuje po-
jedyncze bity, niebieski - bajty, a†czerwony
- s³owa szesnastobitowe. Zatem jedno z†zie-
lonych wejúÊ bloku AND1 trzeba po³¹czyÊ
z†wyjúciem InBit1 , a†drugie - z†wyjúciem In-
Bit2 . W†momencie wykonywania bloki te
przypisuj¹ przewodom pewne wartoúci, za-
leøne od stanu bitÛw, a†blok AND1 pÛüniej
pobiera te wartoúci, wykonuje na nich ope-
racjÍ iloczynu, a†potem ustawia swoje zielone
wyjúcie zgodnie z†wynikiem operacji.
Aby uzyskaÊ ø¹dany rezultat, tzn. aby usta-
wieniu uleg³ port P1.2, musimy dodaÊ blok
IO.OutBit . Jego czarne i†zielone wejúcia ³¹-
czymy z†odpowiednimi wyjúciami AND1 , a†ja-
ko parametr Bit name podajemy P1.2.
Mamy juø zaprojektowan¹ ø¹dan¹ funkcjÍ,
ale program musi wiedzieÊ, øe powinna ona
byÊ wykonywana w†nieskoÒczonoúÊ. Wstaw-
my blok Standard.Label , nadaj¹c parametro-
wi Label wartoúÊ np. î Loop î. Wyjúcie w†le-
wym gÛrnym rogu obszaru projektowania ³¹-
czymy z†wejúciem nowo wstawionego bloku,
wyjúcie bloku z†wejúciem InBit1 . Potem, na
dole, wstawiamy blok Standard.Jump z†para-
metrem Label , takim samym jak w†bloku La-
bel1 , a†jego wyjúcie ³¹czymy z†globalnym wyj-
úciem na dole (choÊ w†istocie program nigdy
Kolejny przyk³ad zastosowania -
codelock.wis
Aby pokazaÊ, jak ³atwo tworzy siÍ silne
i†uniwersalne oprogramowanie w†WireIt!, za-
prezentujÍ przyk³ad drugi: zamek kodowy,
ktÛrego oprogramowanie zosta³o w†ca³oúci
ìnarysowaneî w†WireIt! '51. Uk³ad sk³ada siÍ
z†bardzo niewielu elementÛw, moøe byÊ wy-
konany na ma³ej jednostronnej p³ytce druko-
wanej - a†jego moøliwoúci wcale nie s¹ takie
ma³e. Ma szeúciocyfrowy kod, zapisany w†pa-
miÍci nieulotnej EEPROM. Szyfr moøe byÊ
zmieniony przez uøytkownika tylko po po-
daniu w³aúciwego kodu. Podanie z³ego kodu
powoduje blokadÍ zamka na 10 sekund, czas
otwarcia zamka po podaniu w³aúciwego kodu
wynosi 3†sekundy. Zamek sygnalizuje swÛj
Rys. 3. Pierwszy projekt (first.wis) w WireIt!
24
Elektronika Praktyczna 5/2000
32039961.015.png 32039961.001.png
K U R S
stan dwiema diodami úwiec¹cymi LED i†ma
wyjúcie steruj¹ce o†aktywnym stanie niskim.
Na rys. 4 znajduje siÍ przyk³adowy sche-
mat zamka, obrazuj¹cy, jakie naleøy wykonaÊ
po³¹czenia z†elementami zewnÍtrznymi. W
programie przyjÍto, øe czÍstotliwoúÊ oscyla-
tora kwarcowego wynosi 12MHz (jedyn¹ rÛø-
nic¹ wynik³¹ z†jej zmniejszenia bÍdzie odpo-
wiednie wyd³uøenie wszystkich okresÛw
oczekiwania), dioda D1 jest czerwona, a†D2
- zielona.
Jeúli komuú zaleøy na wiÍkszej klawiatu-
rze, moøe zastosowaÊ matrycÍ o†rozmiarze
4x4, pod³¹czaj¹c dodatkow¹ kolumnÍ do P1.3
(program nie bÍdzie wymaga³ zmiany). Pod-
kreúlam, øe w procedurze odczytuj¹cej mat-
rycÍ niektÛre kombinacje wielu klawiszy mo-
g¹ byÊ odrÛønione od innych (zatem moøna
je w³¹czyÊ do kodu oprÛcz pojedynczych
naciúniÍÊ klawiszy). £¹czna liczba kombina-
cji w†tak rozbudowanym zamku wzroúnie
z†1000000 do 225 6 , czyli ok. 130000 miliar-
dÛw. Nie ma jednak rÛøy bez kolcÛw, bo kod
sk³adaj¹cy siÍ z†szeúciu kombinacji po kilka
naciúniÍÊ jest doúÊ trudno zapamiÍtaÊ.
Teraz o†obs³udze zamka. OtÛø jest jeden
klawisz specjalny: nazwijmy go Ctrl . Jest on
tym klawiszem, ktÛry jest pod³¹czony miÍdzy
P1.0 a†P1.4. Po wprowadzeniu szeúciu cyfr
(czy kombinacji) poprawnego kodu (ktÛre mo-
g¹ zawieraÊ w†sobie dowolne klawisze, takøe
Ctrl ) naleøy nacisn¹Ê dowolny klawisz w†celu
zatwierdzenia wyboru. Jeúli to bÍdzie Ctrl ,
zamek bÍdzie oczekiwa³ wprowadzenia ko-
lejnych szeúciu cyfr w†celu zachowania ich
w†pamiÍci EEPROM jako nowego klucza, syg-
nalizuj¹c gotowoúÊ zapaleniem obu diod úwie-
c¹cych. W†przeciwnym przypadku zamek za-
pali zielon¹ diodÍ úwiec¹c¹ D2 i†otworzy na
trzy sekundy blokadÍ drzwi (lub teø cokol-
wiek innego reaguj¹cego na przejúcie portu
WY w†stan niski). Jeúli natomiast zostanie
wprowadzony nieprawid³owy kod, uk³ad za-
blokuje siÍ na dziesiÍÊ sekund (przy kwarcu
12MHz) i†nie bÍdzie odpowiada³ na zlecenia
z†klawiatury. W†tym czasie zapali siÍ czer-
wona dioda D1.
Moja propozycja rozbudowy programu to
dodanie licznika niew³aúciwych kodÛw,
umieszczonego np. w†bajtach EEPROM nu-
mer 06h i†07h (bajty 00h..05h s¹ zajmowane
przez kod). Warto wykorzystaÊ tu arytmetykÍ
16-bitow¹ (biblioteka 16-Bit ). Ponadto warto
by by³o dodaÊ sumÍ kontroln¹ kodu (myúlÍ
o†bajcie 08h). RadzÍ tworzyÊ tÍ sumÍ z†ope-
racji XOR na komÛrkach 00h..05h. Jeøeli ktoú
zbuduje tak rozszerzony uk³ad, proszÍ bardzo
o†przys³anie mi biblioteki i†programu na ad-
res zamek@wireit.cjb.net .
kolejne ìpionoweî w¹tki. Parametry bloku s¹
wstawiane w†miejsce tzw. placeholderÛw (do-
s³ownie: ìtrzymaczy miejscaî, idea odpowia-
da ìstaczomî w†kolejkach) {BP0}, {BP1},
{WP0}, {WP1}, {SP0}. Kaødy blok ma swÛj
identyfikator, sk³adaj¹cy z†jego numeru (we-
wnÍtrznie przypisywanego przez WireIt!)
i†numeru kompilacji (czterocyfrowej liczby
tworzonej z†bieø¹cego czasu). Ten identyfi-
kator odpowiada placeholderowi {MyID}, tak
jak numer kompilacji odpowiada {CompID}.
Identyfikatory s¹ konieczne przy tworzeniu
etykiet w†programie, aby nie nast¹pi³ kon-
flikt, czyli aby dwie etykiety nie mia³y tych
samych nazw, co zreszt¹ t³umaczy niemal
kompletn¹ nieczytelnoúÊ programu skompilo-
wanego przez WireIt!
Pozostaje jeszcze jeden problem: reprezen-
tacja kolorowych przewodÛw. Kaødy prze-
wÛd ma swoje komÛrki wewnÍtrznej pamiÍci
RAM kontrolera: zielone i†niebieskie - po
jednym bajcie, czerwone - dwa bajty. KomÛr-
ki s¹ zajmowane zawsze od RAMTOP-u, czyli
- dla uk³adu 8051 - od 127 bajtu w†dÛ³.
Program przypisuje numery komÛrek przewo-
dom i†moøe czyniÊ to na dwa sposoby (wybÛr
moøliwy w†oknie Compilation options ). Pier-
wszy z†nich, standardowy, to sposÛb z†opty-
malizacj¹, drugi - bez.
Optymalizacja polega na tym, øe program
przypisuje przewodom komÛrki, ktÛre na
pewno s¹ wolne podczas wykonywania frag-
mentu kodu zawieraj¹cego ten przewÛd. Al-
gorytm steruj¹cy tym procesem po prostu
ìmaszerujeî wzd³uø czarnych przewodÛw, za-
znaczaj¹c komÛrki zajÍte dotychczas przez
pozosta³e kolorowe przewody i†bloki (ktÛre
teø mog¹ mieÊ ìprywatneî komÛrki, dostÍpne
tylko podczas pracy danego bloku), a†nastÍp-
nie przegl¹da trasÍ przewodu, ktÛremu chce-
my przypisaÊ komÛrki i†nadaje mu odpo-
wiedni numer nie zajÍty przez pozosta³e.
Naleøy pamiÍtaÊ jednak, øe jeúli projekt bÍ-
dzie instalowa³ w³asne przerwania sprzÍto-
we, trzeba koniecznie wybraÊ przypisywanie
przewodÛw bez optymalizacji. Jest to tak is-
totne, bo program nie wie, kiedy zostanie
wywo³ane przerwanie sprzÍtowe i†moøe przy-
pisaÊ komÛrki wykorzystane w†procedurze ob-
s³ugi przerwania innym przewodom, co moøe
mieÊ nieprzewidywalne nastÍpstwa.
Po przypisaniu numerÛw komÛrek przy-
chodzi czas na tworzenie kodu. Program od-
czytuje z†bibliotek skrawki asemblera odpo-
wiadaj¹ce poszczegÛlnym blokom i†linijka po
linijce wpisuje je do programu wynikowego,
zamieniaj¹c placeholdery na odpowiednie
wartoúci lub numery komÛrek pamiÍci (przy
czym placeholder {nazwa portu} lub {na-
zwa†portu /} odpowiada niøszej komÛrce pa-
miÍci dla danych 16-bitowych, a†{nazwa†por-
tu†\} - wyøszej).
Ten kod sk³ada siÍ w†przewaøaj¹cej mierze
z†mnemonikÛw AJMP, zajmuj¹cych po dwa
takty zegara. Dlatego program przeprowadza
pewn¹ ìma³¹î optymalizacjÍ (ktÛr¹ takøe moø-
na wy³¹czyÊ - co radzÍ raz zrobiÊ, aby zo-
baczyÊ rÛønicÍ w†szybkoúci wykonania), po-
legaj¹c¹ na tym, øe usuwane s¹ wszystkie
skoki do nastÍpnej instrukcji.
Wtedy moøna juø zapisaÊ gotowy kod do
pliku, przy czym format pliku wyjúciowego
zaleøy od tego, czy ma byÊ to obiekt .WIO,
przeznaczony do w³¹czenia do bibliotek, czy
teø samodzielny program w†asemblerze. Pro-
gramy w†asemblerze zawsze zamykane s¹ nie-
skoÒczon¹ pÍtl¹, aby zapobiec nieprzewidy-
walnemu zachowaniu siÍ systemu mikropro-
cesorowego.
Jak wspomnia³em wczeúniej, w†programach
typu ST-Realizer projektuje siÍ program tak,
jak schemat zwyk³ego uk³adu elektroniczne-
go, a†nie tak, jak schemat blokowy (WireIt!).
Pozornie te dwa sposoby bardzo siÍ od siebie
rÛøni¹. Jednak moøna zastosowaÊ podobne
algorytmy, z†tym, øe usunie siÍ czarne prze-
wody, a†zamiast nich zostan¹ wstawione do
kaødego bloku procedury, dzia³aj¹ce wed³ug
algorytmu:
- pobierz wartoúÊ wejúÊ bloku,
- oblicz wartoúÊ wyjúÊ bloku,
- jeúli wyjúcia maj¹ inn¹ wartoúÊ niø przed-
tem, to wywo³aj procedury obs³ugi wszys-
tkich blokÛw po³¹czone z†tymi wyjúciami.
Podstawowe algorytmy, takie jak np. przy-
pisywanie komÛrek pamiÍci, mog¹ zostaÊ bez
problemu przeniesione z†WireIt!
ZakoÒczenie
Jeøeli Czytelnik uzna³ program za przydat-
ny, cieszÍ siÍ. Jeøeli chcia³by coú poprawiÊ,
moøe skorzystaÊ z†us³ug poczty elektronicz-
nej (na przyk³ad wybieraj¹c Mail suggestions/
Wyúlij komentarz z†menu Help/Pomoc )
i†przes³aÊ mi swoje uwagi na adres:
ep@wireit.cjb.net . Gor¹co zachÍcam takøe do
przysy³ania swoich bibliotek - opublikujÍ je
na stronie WireIt! Warto takøe odwiedzaÊ
w†WWW adres mojego programu, bo WireIt!
siÍ przecieø ci¹gle rozwija i†zmienia. Poja-
wiaÊ siÍ teø tam bÍd¹ nowe biblioteki (w
planach: biblioteka I 2 C†o†organizacji bajtowej,
obs³uga uk³adÛw MAXIM-a, itd.) i†nowe wer-
sje programu (np. dla uk³adÛw Atmel AVR
z†pamiÍci¹ RAM, tj. od AT90S2313 w†gÛrÍ).
Stanis³aw Skowronek
Pakiet WireIt! wraz z†przyk³adami, w†wer-
sjach polsko- i†angielskojÍzycznej s¹ dostÍp-
ne w†Internecie pod adresami:
http://www.wireit.cjb.net
http://www.ep.com.pl/ftp
oraz na p³ycie CD-EP5/2000 w†katalogu \Pro-
gramy\WireIt!\.
Kompilacja: jak to dzia³a?
Pod graficzn¹ pow³ok¹ aplikacji znajduje
siÍ ca³kiem normalny jÍzyk programowania
wysokiego poziomu. Przecieø wszystkie pli-
ki danych programu maj¹ postaÊ tekstow¹,
zarÛwno biblioteki (.WIL), jak i†plik opisu
projektu (.WIS). W³aúciwie wiÍc, jeøeli ktoú
tego potrzebuje, moøe korzystaÊ z†programu
uøywaj¹c jako edytora Notatnika Windows
czy nawet edytora Nortona Commandera (w
ten sposÛb powsta³y wszystkie biblioteki
standardowe). Powstaje wiÍc pytanie: jak
WireIt! t³umaczy rysunek i†plik wejúciowy
na gotowy kod asemblera 8051?
Bloki odpowiadaj¹ fragmentom asemblera
MCS-51, ktÛre s¹ nastÍpnie uk³adane wzd³uø
w¹tkÛw, tj. najpierw ca³y w¹tek sk³adaj¹cy
siÍ z†lewych czarnych wyjúÊ i†wejúÊ, potem
Rys. 4. Proponowane rozwiązanie układowe zamka szyfrowego.
Elektronika Praktyczna 5/2000
25
32039961.002.png 32039961.003.png 32039961.004.png 32039961.005.png 32039961.006.png 32039961.007.png 32039961.008.png 32039961.009.png 32039961.010.png 32039961.011.png
 
Zgłoś jeśli naruszono regulamin