@
@ asemblerska naredba
Kada se upotrebi na početku linije, znak "@" omogućuje ubacivanje
jedne asemblerske naredbe u PBP program. Pomoću nje možete slobodno da mešate
asembler i PBP naredbe.
i var byte rollme var byte for i=1 to 4 @ rlf _rollme, f next i
Znak "@" može da se upotrebi i za uključivanje asemblerskog programa koji se nalazi u nekom fajlu. Primer:
@ include "fp.asm"
Upotreba "@" resetuje registar memorijske strane na 0 pre izvršenja asemblerske naredbe; registar strane ne treba menjati upotrebom "@".
[nazad]
ADCIN
adcin kanal, var
Čita ugradjeni AD konvertor 'kanal' i smešta rezultat u 'var'. Iako
ADC registrima može da se pristupi direktno, naredba ADCIN čini ovaj proces
lakšim. Pre upotrebe ADCIN, odgovarajući TRIS registar mora biti podešen da
bi željeni pinovi bili ulazni. Takodje i ADCON1 mora biti podešen tako da
odredjene pinove spoji sa analognim ulazima i, u nekim slučajevima, da podesi
izlazni format i izvor takta. Mogu da se upotrebe nekoliko DEFINE naredbi:
DEFINE ADC_BITS 8 'podešavanje broja bitova za rezultat DEFINE ADC_CLOCK 3 'podešavanje izvora za takt (rc = 3) DEFINE ADC_SAMPLEUS 50 'poedešavanje vremena za uzorkovanje u µs (mikrosekundama)
Primer:
trisa = 255 'port A, svi ulaz ADCON1 = 2 'port A je analogni ADCIN 0, B0 'procitaj kanal 0 u B0
[nazad]
ASM ... ENDASM
asm
endasm
ASM i ENDASM naredbe kažu PBP-u da je program izmedju te
dve naredbe asemblerski kod. Maksimalna veličina za asemblerski tekst je 8
Kb i u to ulazi listing zajedno sa komentarima, a ne generisani kod. Ako je
blok teksta veći od 8K, jednostavno ga podelite u više ASM ... ENDASM delova
ili ga jednostavno stavite u poseban fajl i upotrebite INCLUDE. ASM resetuje
registar strane na 0. Ako ste u asemblerskom programu menjali registar strane,
morate da ga postavite na 0 pre ENDASM naredbe.
asm bsf porta, 0 bcf portb, 0 endasm
[nazad]
BRANCH
BRANCH index, [labela{, labela}]
BRANCH omogućava da program skoči na neku labelu u zavisnosti od sadržaja
promenljive koja služi kao indeks. To je slično kao ON ... GOTO naredba iz
drugih BASIC-a. Ako je 'index' nula, program skače na prvu labelu navedenu
u listi; ako je 'index' = 1, program skače na drugu labelu iz liste, itd.
Ako je 'index' jednak ili veći od broja labela u listi, naredba se ignoriše
i prelazi se na izvršenje sledeće. Može da bude maskimalno 255 (256 za 18Cxxx)
labela u listi. 'Labela' mora da bude na istoj stranici koda kao i BRANCH.
Ako niste sigurni da će biti, upotrebite BRANCHL.
branch b4, [dog, cat, fish] 'ovo je isto kao ' if b4=0 then goto dog ' if b4=1 then goto cat ' if b4=2 then goto fish
[nazad]
BRANCHL
BRANCHL index, [labela{, labela}]
BRANCHL (BRANCH Long) je veoma slična sa BRANCH; glavne razlike
su da sa ovom naredbom program može da skoči na labelu koja se nalazi na drugoj
stranici koda, i da je kod otprilike dva puta duži nego ako se upotrebi BRANCH.
Ako ste sigurni da su labele na istoj stranici koda ili da mikrokontroler
nema više od jedne stranice koda (ako ima 2K ili manje programske memorije),
onda upotrebite BRANCH, jer ćete uštedeti memoriju. U listi može da bude maksimalno
127 labela (256 za 18Cxxx).
[nazad]
BUTTON
BUTTON pin, down, delay, rate, bvar, action, label
Ova naredba čita 'pin' i opciono izvodi debounce i autorepeat,
a pin se automatski postavlja kao ulaz. 'Pin' može da bude konstanta, od 0
do 15, ili promenljiva koja sadrži broj od 0 do 15, ili naziv pina (npr. PORTA.0).
'down' stanje pina kada je taster pritisnut. 'delay' broj ciklusa pre početka autorepeat funkcije (0 - 255). Ako je 0, ne izvodi se ni autorepeat ni debounce. Ako je 255, izvodi se debounce, ali ne autorepeat. 'rate' autorepeat (0 do 255). 'bvar' bajt promenljiva koja se interno koristi za delay/repeat odbrojavanje. Mora da se postavi na 0 pre početka i ne sme se nigde drugde koristiti u programu. 'action' stanje pina koje prouzrokuje delovanje (0 za "nepritisnuto", 1 za "pritisnuto"). 'label' labela na koju program skače ako je 'action' istinito.
button portb.2, 0, 100, 10, b2, 0, nijepritisnuto 'skok na labelu "nijepritisnuto" ako 'taster na portb.2 nije pritisnut
Naredba BUTTON mora da se upotrebi u petlji da bi autorepeat radio kako treba. Ova naredba izvršava debounce sa malim kašnjenjem izvršenja od par milisekundi da bi sačekala da prestane treperenje kontakata. Predefinisano vreme je 10 ms, ali može da se promeni upotrebom DEFINE:
DEFINE BUTTON_PAUSE 50 'kašnjenje od 50 ms
BUTTON_PAUSE mora da bude napisano velikim slovima. Generalno, lakše je jednostavno očitati stanje pina u IF ... THEN naredbi:
if portb.2=1 then nijepritisnuto
[nazad]
CALL
call labela
Izvršava asemblerski potprogram sa nazivom 'labela'
[nazad]
CLEAR
clear
Postavlja na nulu sve RAM lokacije u svim bankama. Ovo se ne vrši automatski
kod PBP-a, kao što se to vrši kod Basic Stamp-a.
[nazad]
CLEARWDT
clearwdt
Resetuje WDT tajmer. Watchdog tajmer se koristi u saradnji sa SLEEP
i NAP instrukcijama da probudi PIC nakon odredjenog vremena. Asemblerska instrukcija
(clrwdt) se automatski ubacuje na odgovarajuća mesta u programu da spreči
WDT da prekorači vreme pod normalnim okolnostima. Naredba CLEARWDT dozvoljava
postavljanje dodatne 'clrwdt' instrukcije u programu.
[nazad]
COUNT
count pin, period, var
Ova naredba broji impulse koji se pojave na pinu 'pin' za vreme definisano
sa 'period' i rezultat smešta u 'var'. 'Pin' se automatski postavlja kao ulaz;
'pin' može da bude konstanta, od 0 do 15, ili promenljiva koja sadrži broj
od 0 do 15, ili ime pina (npr. porta.0). Rezolucija za 'period' je u milisekundama,
a u zavisnosti je sa frekvencijom definisanom sa DEFINE OSC. COUNT proverava
stanje pina i broji promene sa niskog na visoko stanje. Sa oscilatorom od
4 MHz stanje pina se proverava svakih 20 µs, a sa oscilatorom od 20 MHz stanje
se proverava svake 4 µs. Iz ovoga se vidi da najveća frekvenca koja može da
se meri sa oscilatorom od 4 MHZ iznosi 25KHz, odnosno 125 KHz sa oscilatorom
od 20 MHz ako je dužina imuplsa jednaka dužini pauze signala koji se meri.
count portb.1, 100, w1 'broji impulse na portb.1 u trajanju od 100ms i rezultat 'smešta u promenljivu w1
count porta.2, 1000, w1 'meri frekvencu na porta.2 (jer meri tačno jednu sekundu)
[nazad]
DATA
data {@location,} constant {, constant...}
Smešta konstante u EEPROM koji se nalazi u PIC-u samo kada se
programira. Ako je opcini argument 'location' izostavljen, prva DATA naredba
će početi da smešta konstante od adrese 0. Ako je vrednost za 'location' navedena,
smeštanje će da počne od te adrese. 'Constant' može da bude numerička ili
string konstanta. Samo će bajt niže vrednosti za numerike biti smešten, čak
iako je definisana promenljiva tipa WORD. Stringovi se smeštaju kao ASCII
vrednosti za svaki znak. Naredba DATA radi samo sa mikrokontrolerima koji
imaju "direktni" EEPROM na sebi, kao što su PIC16F84 ili PIC16C84; ova naredba
ne radi sa mikrokontrolerima kod kojih ugradjeni EEPROM ima I2C interfejs,
kao što su 12CE67X ili 16CE62X. Podaci se smeštaju u EEPROM samo kada se PIC
programira, ne kada se program startuje; za to se koristi naredba WRITE.
data @5, 10, 20, 30 'smešta vrednosti 10, 20 i 30 počev od lokacije 5 dlabel data word $1234 'dodeljuje labelu reči na sledećoj lokaciji i smešta '$34, a zatim $12 data (4), 0(10) 'preskače 4 lokacije, zatim u narednih 10 smešta nule
[nazad]
DEBUG
debug item {, item...}
Šalje jedan ili više 'item'-a na unapred definisani pin sa unapred
definisanom brzinom u standardnom asinhronom formatu, 8 bitova podataka, bez
bita parnosti, i jedan stop bit (8N1). Pin se automatski postavlja kao izlaz.
Ako se ispred 'item'-a stavi znak #, šalje se ASCII izgled za svaku cifru.
DEBUG podržava iste modifikatore kao i SEROUT2 naredba (za više informacija
pogledajte deo o SEROUT2 naredbi)
DEBUG je jedna od nekoliko ugradjenih asinhronih serijskih funkcija. To je najmanja softverski generisana serijska rutina. Može da se koristi za slanje raznih informacija prilikom testiranja programa (sadržaj promenljivih, markeri pozicije programa i sl.) nekom terminal progamu kao što je HYPERTERM. Može takodje da se koristi svaki put kada želimo da pošaljemo nešto serijski sa odredjenog pina i odredjenom brzinom. Pin i brzina odredjuju se sa nekoliko DEFINE naredbi:
DEFINE DEBUG_REG PORTB 'definise port za DEBUG DEFINE DEBUG_BIT 0 'definise bit za DEBUG DEFINE DEBUG_BAUD 2400 'definise brzinu DEFINE DEBUG_MODE 1 'definise mod, 0=neinvertovan, 1=invertovan
DEBUG podrazumeva korišćenje oscilatora od 4 MHz za generisanje odredjenje brzine. Ako koristite drugu frekvencu za oscilator, upotrebite DEFINE OSC da kažete PBP koju frekvencu koristite. U nekim slučajevima slanje karaktera može da bude prebrzo za prijemni uredjaj. Sa DEFINE se može dodati pauza izmedju slanja dva uzastopna karaktera i to od 1 do 65535 µs. Na primer, za razmak izmedju slanja dva karaktera od 1 ms, napišite sledeće:
DEFINE DEBUG_PACING 1000
Iako su RS-232 konvertori niova uobičajeni i jeftini, zahvaljujući odličnim I/O karakteristikama PIC mikrokontrolera, većina aplikacija ne zahteva konvertore nivoa. Zbog toga se radije koristi invertovani TTL mod (DEBUG_MODE=1). Preporučuje se otpornik za ograničenje struje (mada bi RS-232 trebalo da bude otporan na kratak spoj).
DB9 DB25 pin 2 pin 3 pin 5 pin 7
primer:
debug "b0=", dec b0, 10 'salje tekst "b0=", a zatim decimalnu vrednost b0 i 'na kraju karakter "nova linija"
[nazad]
DEBUGIN
debugin {timeout, label,} [item{, item ...}]
Prima jedan ili više 'item'-a na unapred definisani pin sa unapred
definisanom brzinom u standardnom asinhronom formatu, 8 bitova podataka, bez
bita parnosti, i jedan stop bit (8N1). Pin se automatski postavlja kao ulaz.
Opcioni 'timeout' i 'label' mogu biti navedeni da dozvole programu da nastavi
ako se ne primi karakter za željeno vreme. 'Timeout' je u milisekundama. DEBUG
podržava iste modifikatore kao i SERIN2 naredba (za više informacije pogledajte
deo o SERIN2 naredbi):
DEBUGIN je jedna od nekoliko ugradjenih asinhronih serijskih funkcija. To je najmanja softverski generisana serijska rutina. Može da se koristi za prijem raznih informacija od nekog terminal progama kao što je HYPERTERM. Može takodje da se koristi svaki put kada želimo da primimo nešto serijski na odredjeni pin sa odredjenom brzinom. Pin i brzina odredjuju se sa nekoliko DEFINE naredbi:
DEFINE DEBUG_REG PORTB 'definise port za DEBUG DEFINE DEBUG_BIT 0 'definise bit za DEBUG DEFINE DEBUG_MODE 1 'definise mod, 0=neinvertovan, 1=invertovan
Ako neka od ovih DEFINE naredbi nije ubačena u program, port, pin i mod će
biti postavljeni na iste vrednosti kao za DEBUG. Brzina za DEBUGIN je uvek
ista kao za DEBUG i ne može se drugačije definisati. DEBUGIN podrazumeva korišćenje
oscilatora od 4 MHz za generisanje odredjenje brzine. Ako koristite drugu
frekvencu za oscilator, upotrebite DEFINE OSC da kažete PBP koju frekvencu
koristite.
Iako su RS-232 konvertori niova uobičajeni i jeftini, zahvaljujući odličnim
I/O karakteristikama PIC mikrokontrolera, većina aplikacija ne zahteva konvertore
nivoa. Zbog toga se radije koristi invertovani TTL mod (DEBUG_MODE=1). Preporučuje
se otpornik za ograničenje struje (mada bi RS-232 trebalo da bude otporan
na kratak spoj).
DB9 DB25 pin 3 pin 2 pin 5 pin 7
[nazad]
DISABLE
disable
Ova naredba onemogućava kako dibagovanje tako i interapte. Interapti
mogu i dalje da nastaju, ali PBP neće da ih izvršava, niti će da se odvija
dibagovanje sve dok se ne izvrši ENABLE naredba.
DISABLE i ENABLE su, u stvari, pseudo naredbe, jer one daju uputstva kompajleru,
a ne proizvode nikakav kod. Za više informacija pogledajte naredbe ON DEBUG
i ON INTERRUPT
disable 'onemogućava interapte u interapt rutini myint: led=1 'uključi LED kada nastupi interapt resume 'vrati se u glavni program enable 'omogući interapte na kraju interapt rutine
[nazad]
DISABLE DEBUG
disable debug
Nakon izvršenja ove naredbe neće biti pozivan dibag monitor izmedju
naredbi, sve dok se ne izvrši ENABLE DEBUG naredba. DISABLE DEBUG i ENABLE
DEBUG su, u stvari, pseudo naredbe. Za više informacija pogledajte naredbu
ON DEBUG.
[nazad]
DISABLE INTERRUPT
disable interrupt
Nakon izvršenja ove naredbe neće biti izvršavan interapt program, iako
interapti mogu i dalje da nastaju. Interapti mogu da se izvršavaju tek nakon
izvršenja ENABLE ili ENABLE INTERRUPT.
DISABLE INTERRUPT i ENABLE INTERRUPT su, u stvari, pseudo naredbe. Za više
informacija pogledajte naredbu ON INTERRUPT.
[nazad]
DTMFOUT
dtmfout pin, {onms, offms,} [tone{, tone...}]
Proizvodi DTMF tonsku sekvencu i šalje je na 'pin' koji se automatski
postavlja kao izlaz. 'Pin' može da bude konstanta, od 0 do 15, ili promenljiva
koja sadrži broj od 0 do 15, ili ime pina (npr. porta.0).
'Onms' je trajanje svakog tona u milisekundama, a 'offms' je pauza izmedju
tonova, takodje u milisekundama. Ako te vrednosti nisu navedene, za 'onms'
se podrazumeva 200 ms, a za 'offms' se podrazumeva 50 ms.
'Tone' je broj od 0 do 15; vrednosti od 0 do 9 proizvode isti ton kao i na
telefonu, vrednost 10 je ista kao "*" taster, vrednost 11 je "#" taster, a
vrednosti od 12 do 15 su kao dodatni tasteri od A do D.
DTMFOUT koristi FREQOUT za generisanje dvostrukih tonova, a generiše ih impulsno-širinskom
modulacijom (PWM). Čist ton koji izlazi iz pina nije dobar za korišćenje,
pa je potreban filter koji će da eliminiše neke harmonike i signal približi
sinuosoidi:
PIC na pojačalo
DTMF radi najbolje sa oscilatorom od 20MHz. Može da radi sa 10 MHz, pa čak i sa 4 MHz, ali će biti vrlo teško isfiltrirati signal, a i amplituda će biti manja. Korišćenje bilo koje druge vrednosti oscilatora će proizvesti ton koji je odnos upotrebljene frekvence i 20 MHz, i neće biti koristan za generisanje DTMF tonova.
dtmfout portb.1, [2, 1, 2] 'šalje na PORTB.1 DTMF sekvencu 2, 1 i 2
[nazad]
Modifikator
|
Operacija
|
{I}{S}BIN{1...16}
|
šalje binarne cifre
|
{I}{S}DEC{1...5}
|
šalje decimalne cifre
|
{I}{S}HEX{1...4}
|
šalje heksadecimalne cifre
|
REP c\n
|
ponavlja slanje karaktera c n puta
|
STR ArrayVar{\n}
|
šalje string od n karaktera
|
Modifikator
|
Operacija
|
BIN{1...16}
|
prima binarne cifre
|
DEC{1...5}
|
prima decimalne cifre
|
HEX{1...4}
|
prima heksadecimalne cifre
|
SKIP n
|
preskace n primljenih karaktera
|
STR ArrayVar\n{\c}
|
prima string od n karaktera, opcino se zavrsava c
karakterom
|
WAIT ( )
|
ceka odredjenu sekvencu karaktera
|