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
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
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
Plik z chomika:
waclaw.sz
Inne pliki z tego folderu:
WIRE'IT '51 - programowanie bez pisania.pdf
(163 KB)
wings3d_manual1.6.1.pdf
(4946 KB)
Sterownik wózka inwalidzkiego - curtisschematic.pdf
(64 KB)
STEROWNIK TEMPERATURY Z WYŚWIETLACZEM LCD.pdf
(530 KB)
Sterownik silnika DC - Wózek Inwalidzki.pdf
(332 KB)
Inne foldery tego chomika:
AutoRadio pinout (kostki tylne opisy)
Biblioteka ogólnie-samochody
DLA SZUKAJĄCYCH PRACY
Eeprom programatory
elektronika auto
Zgłoś jeśli
naruszono regulamin