PBP naredbe od @ do D

@
@ 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