WHILE .. WEND
while condition statement ... wend
Izvršava naredbe 'statement' izmedju WHILE i WEND sve dok je uslov
'condition' tačan; kada uslov postane netačan, izvršavanje se nastavlja od
naredbe iza WEND. Uslov 'condition' može da bude bilo koji izraz uporedjivanja.
i=1 'početna vrednost za promenljivu i
while i <= 10 'izvršavaj sve dok je i manje ili jednako 10
serout 0, n2400, ["No:", #i, 13, 10] 'pošalji serijski
i=i+1 'uvećaj i za 1
wend 'ako je uslov tačan,vrati se na naredbu iza WHILE
[nazad]
WRITE
write address, value
Upisuje vrednost 'value' u EEPROM ugradjen u čip na adresu 'address'.
Ova naredba radi samo sa PIC kontrolerima koji imaju ugradjen EEPROM na čipu
kao što su PIC16C84, 16F84 i serija PIC16F87x.
WRITE se koristi za upis podataka u toku rada programa; za upis vrednosti
u EEPROM pri programiranju, upotrebite naredbe DATA ili EEPROM.
Ova naredba traje otprilike 10 ms, jer je toliko potrebno da bi se izvršio
upis u EEPROM. Ako se u programu koriste interapti, pre izvršenja ove naredbe
moraju biti onemogućeni (maskirani, ne i isključeni DISABLE naredbom), a nakon
završenog upisa mogu biti ponovo omogućeni, ako je potrebno. Ako nastupi interapt
za vreme ove naredbe, može doći do pogrešnog upisa.
WRITE naredbe neće raditi sa kontrolerima koji imaju I2C interfejs za EEPROM,
kao što su PIC12CE67x i 16CE62x. Za njih upotrebite I2CWRITE naredbu da bi
ste izvršili upis u EEPROM.
write 5, b0 'upiši sadržaj promenljive b0 na lokaciju 5 EEPROM-a
[nazad]
WRITECODE
writecode address, value
Upisuje vrednost 'value' word tipa na adresu 'address' u prostor programske
memorije. Kod PIC16F87x serije kontrolera omogućeno je čitanje i upis u memorijski
prostor za vreme izvršavanja programa, ali treba biti vrlo pažljiv pri upotrebi
ove naredbe.
Ako se u programu koriste interapti, pre izvršenja ove naredbe moraju biti
onemogućeni (maskirani, ne i isključeni DISABLE naredbom), a nakon završenog
upisa mogu biti ponovo omogućeni, ako je potrebno. Ako nastupi interapt za
vreme ove naredbe, može doći do pogrešnog upisa.
writecode 100, w 'upiši vrednost promenljive w u lokaciju na adresi 100
[nazad]
XIN
xin datapin, zeropin, {timeout, label, }[var{, ...}]
Prima X-10 podatke i smešta "house code" i "key code" u promenljive
'var'. Ova naredba prima informacije od X-10 uredjaja koji mogu da daju takvu
informaciju. X-10 moduli mogu da se nabave na više mesta pod raznim imenima.
Za povezivanje mikrokotrolera na mrežni napon potreban je interfejs; za XIN
je potreban dvosmerni TW-523 interfejs sa X-10 protokolom. On sadrži interfejs
za povezivanje na mrežni napon i izoluje kontroler od istog.
'Datapin' se automatski postavlja kao ulaz da bi primao podatke od X-10 interfejsa.
'Zeropin' se automatski postavlja kao ulaz da bi primio informaciju iz X-10
interfejsa o prolasku mrežnog napona kroz nulu. Na oba pina treba da se postavi
pull-up otpornik od 4K7 prema +5 V.
'Datapin' i 'zeropin' mogu da budu konstante, od 0 do 15, ili promenljiva
koja sadrži broj od 0 do 15, ili ime pina (npr. porta.0).
Opciono mogu da se upotrebe 'timeout' i 'label' da bi se omogućilo programu
da nastavi dalje u slučaju da nije primljen podatak za odredjeno vreme. 'Timeout'
je izražen u poluperiodama mrežnog naizmeničnog napona (za 50 Hz to je 10
ms). XIN prikuplja podatke pri svakom prolasku kroz nulu; ako na 'zeropin'
pinu ne postoji nikakva promena, XIN ce da čeka zauvek. Ako je 'var' promenljiva
tipa "word", svaki primljeni "house code" je smešten u viši bajt, a "key code"
u niži bajt promenljive. Ako je 'var' tipa "byte", sačuvan je samo "key code".
"House code" je broj od 0 do 15 koji odgovara "house code"-u postavljenom
na X-10 modulu koji je obeležen slovima od A do P.
"Key code" može da bude
ili broj odredjenog X-10 modula, ili funkcija koju treba da uradi modul. U
standradnom režimu rada, prvo se šalje komanda koja odredjuje kom X-10 modulu
se šalje, a zatim se šalje komanda koja odredjuje željenu funkciju izabranog
modula. Neke funkcije rade na svim modulima istovremeno, tako da broj modula
nije neophodan. Kasniji primeri će ovo razjasniti. "Key code" brojevi od 0
do 15 odgovaraju modulima od 1 do 16. Uz XOUT komandu biće objašnjene funkcije
i povezivanje.
primer 1:
xin porta.2, porta.0, 1, nodata, [housekey] 'proveri ima li X-10 podatak na mreži, ako
'ne, idi na labelu nodata
primer 2:
housekey var word loop: xin porta.2, porta.0, [housekey] 'uzmi X-10 podatak
lcdout $fe,1, "House=", #housekey.byte1, "Key=", #housekey.byte0 'prikaži ga na LCD-u
goto loop 'idi ponovo
[nazad]
XOUT
xout datapin, zeropin, [housecode\keycode{\repeat}{, ...}]
Šalje "housecode", a zatim "keycode" u X-10 formatu i ponavlja slanje
'repeat' puta. Ako se opcioni parametar 'repeat' izostavi, podaci se šalju
bar dva puta. 'Repeat' se obično koristi uz komande BRIGHT i DIM.
XOUT se koristi za slanje podataka X-10 modulima. Neophodan je interfejs da
bi se kontroler povezao na mrežni napon. Može da se upotrebi PL-513 samo za
slanje, ili TW-523 za dvosmernu komunikaciju. Oni sadrže interfejs za povezivanje
na mrežni napon i izoluju kontroler od istog.
'Datapin' se automatski postavlja kao izlaz da bi slao podatke X-10 interfejsu.
'Zeropin' se automatski postavlja kao ulaz da bi primio informaciju iz X-10
interfejsa o prolasku mrežnog napona kroz nulu. Na taj pin treba da se postavi
pull-up otpornik od 4K7 prema +5 V. 'Datapin' i 'zeropin' mogu da budu konstante,
od 0 do 15, ili promenljiva koja sadrži broj od 0 do 15, ili ime pina (npr.
porta.0).
XOUT šalje podatke pri svakom prolasku kroz nulu; ako na 'zeropin' pinu ne
postoji nikakva promena, XOUT će da čeka zauvek.
"House code" je broj od 0 do 15 koji odgovara "house code"-u postavljenom
na X-10 modulu koji je obeležen slovima od A do P. Odgovarajući "housecode"
mora biti poslat kao deo svake komande.
"Key code" može da bude ili broj odredjenog X-10 modula, ili funkcija koju
treba da uradi modul. U standradnom režimu rada, prvo se šalje komanda koja
odredjuje kom X-10 modulu se šalje, a zatim se šalje komanda koja odredjuje
željenu funkciju izabranog modula. Neke funkcije rade na svim modulima istovremeno,
tako da broj modula nije neophodan. Kasniji primeri će ovo razjasniti.
"Key
code" brojevi od 0 do 15 odgovaraju modulima od 1 do 16. Nazivi za "keycode"
(npr. uniton) su definisani u fajlu "modedefs.bas". Da bi ih koristili, dodajte
sledeću liniju na početku PBP programa:
include "modedefs.bas"
Brojevi za "keycode" mogu da se koriste bez uključivanja ovog fajla u program.
|
Keycode
|
Keycode br.
|
Operacija
|
|
uniton
|
%10010
|
uključi modul
|
|
unitoff
|
%11010
|
isključi modul
|
|
unitsoff
|
%11100
|
isključi sve module
|
|
lightson
|
%10100
|
uključi sve module za svetlo
|
|
lightsoff
|
%10000
|
isključi sve module za svetlo
|
|
bright
|
%10110
|
pojačaj osvetljaj modula za svetlo
|
|
dim
|
%11110
|
smanji osvetljaj modula za svetlo
|
Za povezivanje sa X-10 modulom potrebne su 4 žice. Izlazi iz X-10 interfejsa (podatak i prolazak kroz nulu) su "open-collector" tipa i zahtevaju pull-up otpornik od 4K7 prema +5 V. Slede tabele izvoda za oba interfejsa:
Izvodi za PL-513
|
Br. žice
|
Boja žice
|
Opis pina
|
|
1
|
crna
|
izlaz prolaska kroz nulu
|
|
2
|
crvena
|
masa prolaska kroz nulu
|
|
3
|
zelena
|
X-10 izlaz
|
|
4
|
žuta
|
masa za X-10 izlaz
|
Izvodi za TW-523
|
Br. žice
|
Boja žice
|
Opis pina
|
|
1
|
crna
|
izlaz prolaska kroz nulu
|
|
2
|
crvena
|
zajednicka masa
|
|
3
|
zelena
|
X-10 izlaz
|
|
4
|
žuta
|
X-10 ulaz
|
primer 1:
house var byte
unit var byte
include "modedefs.bas"
house=0 'postavi house na 0 (A)
unit=8 'postavi unit na 8 (9)
xout porta.1, porta.0, [house\unit, house\uniton] 'uključi modul 8 u kući 0
xout porta.1, porta.0, [house\lightsoff] 'isključi sva svetla u kući 0
primer 2: uključuje i isključuje svakih 10 sekundi uredjaj 0
xout porta1., porta.0, [house\0] 'odaberi uredjaj 0
loop:
xout porta.1, porta.0, [house\uniton] 'uključi uredjaj 0
pause 10000 'pauza od 10 sekundi
xout porta.1, porta.0, [house\unitoff] 'isključi uredjaj 0
pause 10000 'pauza od 10 sekundi
goto loop
[nazad]