PICBASIC


 

*           NAREDBE A - H

 

@ asemblerska instrukcija

Kada se koristi na početku instrukcije omogućuje ubacivanje instrukcije u asembleru a takođe pomoću nje moguću je naredbom include ubaciti fajl sa asemblerskim kodom.

@    INCLUDE "NADJI.ASM" 'ubaci asemblerski kod 

I  VAR BYTE     'promenljiva i na nivou bajta

         POMERI  VAR BYTE     'promenljiva pomeri na nivou bajta

         FOR I:= 1 TO 4  'for ciklus

         @    RLF _POMERI,F  'pomeri za jedno mesto u levo

        NEXT I

Promenljivim koje su definisane u Basic-u pristupa se upotrebom donje crte(_) u asembleru.

 

ADCIN kanal, promenljiva

Ovu instukciju koriste samo mikrokontroleri koji imaju ugrađene A/D ulaze. Vrednost koja se dobije konverzijom smešta u promenljivu. Pre upotrebe ove komande u ADCON1 registru je neophodne podesiti ulazne pinove kao analogne, format rezultata kao i takt A/D konvertora.

DEFINE ADC_BITS 8    'postavi broj bita rezulata(8, 10 ili 12)

DEFINE ADC_CLOCK 3   'postavi ulaynio klok(rc=3)

DEFINE ADC_SAMPLEUS 50 'postavi vreme uzorkovanja

 

         TRISA = 255          'Postavi PORTA kao ulazni

         ADCON1 = 0           'PORTA je analogni

         ADCIN B0, 0          'Procitaj kanal 0 i stavi u B0

ADC_SAMPLEUS je broj mikrosekundi koje program čeka između postavljanja kanala i početka A/D konverzije.

 

ASM ..ENDASM

Instrukcija ASM daje informaciju Basic-u da je sledeći deo koda napisan u asembleru, a instrukcija ENDASM da je završen asemblerski deo koda.

 

BRANCH indeks, [labela(labela..)]

Pomoću ove instrukcije vrši se programski skok u zavisnosti od vrednost promenljive indeks. Indeks mora biti manji ili jednak broju labela u instrukciji. Ako je veći ova instrukcija neće imati nikakvo dejstvo. Maksimalno 255 labela je moguće koristiti.

BRANCH B4, [IVAN, MILAN, PERA]

' ima znacenje:

' Ako je B4 = 0 skoci na lebalu IVAN

' Ako je B4 = 1 skoci na lebalu MILAN

' Ako je B4 = 2 skoci na lebalu PERA

 

BRANCHL indeks, [labela(labela..)]

Vrlo je slična BRANCH instrukciji sa tom razlikom što se preko nje može skočiti na labelu koja se nalazi u drugom kodnom segmentu. Kodni segmenat zauzima 2K programske memorije.

 

BUTTON Pin, Stanje, Kašnjenje, Brzina, Promenljiva, Akcija, Labela

Pomoću ove naredbe skače se na labelu u slučaju pritiska tastera na definisanom pinu, eliminišući uticaj treperenja kontakata tastera. Takođe obezbeđuje i funkciju ponavljanje (auto repeat). Vreme između dva uzastopna izvršenja ove instrukcije određuje parametar Brzina.

 

Pin - je broj pina na kojem se nalazi taster

 

Stanje - je stanje pina kada je taster pritisnu 0 ili 1

 

Kašnjenje - odbrojano vreme pre automatskog ponavljanja(0..255). U slučaju kada je 0 nema automatskog ponavljanja.

 

Brzina - vreme automatskog ponavljanja(0..255).

 

Promenljiva - je promenljiva tipa bajta i definiše se na početku programa čija je uloga kašnjenja i ponavljanja odbrojavanja. Postavlja se na 0 pre svake naredbe BUTTON.

 

Akcija - jeste stanje koje uzrokuje skok na datu labelu tj. ako je 0 skoči ako taster nije pritisnut, a 1 skoči ako je taster pritisnut.  

 

Labela - skače se na datu labelu u programu u slučaju ako je definisana akcija tačna.

BUTTON PORTB.2, 0,120,10,B0,1,LAB1

U ovom primeru izvršiće se skok ako je pritisnut taster na pinu RB2 na labelu LAB1. Taster je pritisnut ako je na tom pinu prisutna logička nula.

BUTTON PORTB.2, 0,120,10,B0,0,LAB1

U ovom primeru izvršiće se skok ako je nije pritisnut taster na pinu RB2 na labelu LAB1.

 

CALL labela

Poziva podprogram napisan u asembleru koji počinje od date labele.

CALL pass 'poziva asemlerski podprogram koji pocinje na labeli pass 

 

CLEAR

Njenim pozivom sve lokacije u RAM memoriji biće postavljene na nulu.

 

CALL labela

Poziva podprogram napisan u asembleru koji počinje od date labele.

 

CLEARWDT

Postavlja na nulu Watch Dog Tajmer(WDT).

 

COUNT Pin, Period, Broj_impulsa

Broji impulse koji se pojave na datomu pinu u toku zadatog intervala promeljivom Period i smešta u promeljivu Broj_impulsa. Dati pin se automatski postavlja kao ulazni. Promenljiva  Period je izražena u milisekundama. Najveća frekvencija koja može da se meri sa 4 MHz oscilatorom je 25 KHz a sa 20 MHz oscilatorm je 125 KHz.

COUNT PORTB.1,100,W1 'broj impulsa u toku 100ms na pinu PORTB.1

 

{labela} DATA  P{@pocadr}, konstanta{,konstanta...}

Pomoću ove naredbe upisuju se konstante u unutrašnji EEPROM mikrokontrolera pri njegovom programiranju. U slučaju ako se ne stavi početna adresa EEPROM-a počinje se od nulte adrese. Kada se koristi konstanta od dva bajta ispred njenog naziva obavezno mora stajati reč word.  Svi podaci koje se nalaze e EEPROM memoriji su trajno zapamćeni i posle nestanka napajanja.

DATA @4,10,20,30 'upisuje podatke 10, 20 i 30 od adrese 4

DATA word, $6789 'upisuje vrednosti $67 i $34 na lokacije 0 i 1

 

DTMFOUT Pin,{Onms, Offms,}[Ton{,Ton...}]

Pomoću ove naredbe proizvodi se ton kao kod telefona sa tonski biranjem. Ovaj ton se sastoji od dva signala različith frekvencija na osnovu čega se određuje pritisnuti taster. Dati pin se automatski proglašava izlaznim. Parametar Onms je vreme trajanja tona u milisekundama, a parametar Offms je trajanje pauze između dva tona. U slučaju ako se ovi paramteri izostave tada parametar Onms je 200ms a parametar Offms 50ms.  Tonovi mogu biti od 0 do 15, pru čemu oni od 0 - 9 su isti kao kod telefona za brojeve, 10 predstavlja *, dok je 11 #. Tonovi od 12 - 15 odgovaraju tasterima A-D. Na izlaz DTM pina neophodno je dodati RC filtar da se dobije odgovarajuća sinusoida.

DTMFOUT PORTB.1,[1, 3, 5] 'posalji DTMF za broj. 1, 3 i 5 preko pina RB1

 

EEPROM P{@lokacija,}[konstanta{,konstanta}...}]

Upisuje konstante na uzastopne bajte u EEPROM memoriji počevši od adrese lokacija. Ako je izostavljena početna adresa upisuje od lokacije sa adresom 0. Za upis konstanti dužine jedne reči neophodne je ispred konstante upisati reč word. Radi samo na PIC mikrokontrolerima koji imaju EEPROM ili FLASH programsku memoriju.

EEPROM @4,[1, 3, 5] 'upisi u EEPROM 1,3 i 5 pocevsi od adrese 4

 

EEPROM {@lokacija,}[konstanta{,konstanta}...}]

Upisuje konstante na uzastopne bajte u EEPROM memoriji počevši od adrese lokacija. Ako je izostavljena početna adresa upisuje od nulte adrese.

 

END

Zaustavlja rad programa i ulazi u režim male potrošnje i treba je staviti na kraju svakog programa.

 

ERASECODE Blok

Briše blok programskog koda čija je početna adresa dati parametar. Blok se kreće u granicama 0 do 65535. Brisani blok može biti dužine 32 reči(64 bajta) ili druge dužine zavisno od mikrokontrolera i njegove organizacije. Može se koristi samo na PIC18FXXX seriji mikrokontrolera.

ERASECODE $100 'brise blok programskog koda pocevsi od adrese $100

 

FOR  Index=Start TO End {STEP {-} Inc}

{naredbe}

NEXT {Index}

Pomoću naredbe FOR izvršava se programski ciklus tj. izvršavaju se naredbe između reči FOR i NEXT zavisno od oblasti menjaja promenljive Index.

 

Start - je početna vrednost promenljive Index.

 

End - je krajnja vrednost promenljive Index sa čijim se dostizanjem završava FOR ciklus.

 

Inc - je vrednost sa kojom se u svakom prolazu inkrementira ili dekrementira promenljiva Index. Ako nije navedena podrazumeva se da je 1.

FOR i=1 TO 10             'broj prolaza 10

SerOut 0,N2400,[#i," "]   'posalji serijski svaki broj na pin 0

NEXT i                    'vrati se na pocetak do se ne dostigne 10

SerOut 0,N2400,[10]       'posalji serijski svaki broj na pin 0

 

FOR B2=20 TO 10 STEP -2   'broj prolaza od 20 do 10 sa korakom od -2

SerOut 0,N2400,[#B2," "]  'posalji serijski svaki broj na pin 0

NEXT i                    'vrati se na pocetak do se ne dostigne 10

SerOut 0,N2400,[10]       'posalji serijski svaki broj na pin 0

 

FREQOUT  Pin, Frekvenc1{,Frekvenc2}

Ova naredbe generiše signal u opsegu frekvencija od 0 do 32767 KHz u PWM(Pulse With Modulation) na zadatom pinu čije je trajanje određeno parametrom Onms izraženom u milisekundama. Parametar Frekvenc1 je frekvencija generisanog signala.

FREQOUT PORTB.1,2000,1000 'posalji 1KHz ton na pin RB1 u traj.  1 sek.

FREQOUT PORTB.1,2000,350,440 'posalji Dial Tone u duzini 2 sek.

 

GOSUB Labela

Poziva se podprogram u Basic-u koji počinje od naredbe ispred koje se nalazi data labela. Na kraju pozvanog podprograma mora da se nalazi RETURN naredba. Podprogrami mogu biti ugnježdeni tj. unutar podprograma može biti pozvan drugi podprogram.

GOSUB beep       'pozovi podprogam koji pocinje od beep labele

... 

     beep: High 0    'postavi na logicko 1 pin 0

     Sound 1,[80, 10] 'generisi ton na pinu 1

     Low 0           'postavi logicku 0 na pinu 0

     RETURN          'vrati se u glavni program   

 

GOTO Labela

Naredba bezuslovnog skoka tj. program se nastavlja na naredbi ispred koje je data labela.

GOTO beep       'skoci na beep labelu

        

HIGH Pin

Postavlja zadati Pin na visok nivo(logičku jedinicu), pri čemu se taj pin automatski proglašava izlaznim.

HIGH PORTA.0     'postavlja pin RA0 na lgicku jedinicu(+5 Volti)

 

HPWM Kanal,Odnos_on_off, Frekvencija

Ova naredba koristi hardverski PWM na mikrokontrolerima koji podržavaju generisanje PWM signala. Parametar Kanal je je PWM kanal koji se koristi a koji se najčešće nalazi u granicama 1 do 3. Tako mikrokontroler PIC16F877  ima dva PWM kanala i to: Kanal 1 na pinu PORTC.2 i Kanal 2 na pinu PORTC.1. Odnos_on_off definiše odnos između on i off signala na pinu. Kada je 0 pin je u stanju off a ako je 255 onda je stalno u stanju on. Vrdnosti između 0 i 255 daju odnos ovih signala pa ako je 127 tada je je odnos 50%. Parametar Frekvencija definše frekvenciju PWM signala čija je najveća vrednost 32768 Hz i zavisi od oscilatora koji se koristi. Ako se drugačije ne navede PWM generiše tajmer 0.

DEFINE HPWM2_TIMER 1 'hpwm 2 tajmer je odabran

DEFINE HPWM3_TIMER 1 'hpwm 3 tajmer je odabran

 

HPWM 1,127, 1000     'proizvodi 50% PWM frekvencije 1 KHz

HPWM 1,64, 2000      'proizvodi 25% PWM frekvencije 2 KHz

U gornjem primeru je specificirano DEFINE direktivom koji se tajmer 1 ili 2 koristi za PWM na PWM kanalu 2 i PWM kanalu 3 za PIC17C7xx seriju mikrokontrolera.

 

HSERIN {Greska,}{Timeout, Labela,}[Modifikator{,...}]

Ovom naredbom je omogućen prijem serijskih podataka kod mikrokontrolera koji imaju ugrađenu serijsku komunikaciju odnosno poseduju USART kao što je to kod PIC16F877 mikrokontrolera. Parametri serijskog prenosa prethodno se definušu sa DEFINE direktivom kao u donjem primeru:

DEFINE HSER_RCSTA 90h 'omoguci prijemnom registru prijem

DEFINE HSER_TXSTA 20h 'omoguci predajnom registru predaju

DEFINE HSER_BAUD 2400 'brzina prenosa 2400 boda

DEFINE HSER_SPBRG 25  'direktno podesi SPBRG

HSERIN za izračunavanje brzine prenosa pretpostavlja da se koristi 4MHz osilator ako nije data DEFINE OSC direktiva. Parametar Timeout je vreme u milisekundama za koje treba da bude primljen karakter. Ako je to vreme prekoračeno skače se na zadatu labelu.

Kod serijskog prenosa podataka podrazumevani parametar linije je 8N1(8-bita dužina karaktera, bez bita pariteta i jednim stop bitom), dok se neki drugi parametar kao što je 7E1(7-bita dužina karaketera, bit parnosti i jedan stop bit) može biti definisan sa DEFINE direktivom kao u donjem primeru.

DEFINE HSER_EVEN 1   'koristi 1 bit za parni paritet prenosa

DEFINE HSER_ODD 1    'koristi 1 bit za neparni paritet prenosa

U slučaju upotrebe labele Greska  tada prilikom greške nastale zbog definisane parnosti u programu nastaje skok na instrukciju sa datom labelom. Serijski prenos se vrši po hardverskom protokolu i koristi 2 bajta za ulazni baferi i u slučaju prekoračenja primljeni karakter može biti izgubljen. Međutim USART tada stopira prijem novih karaktera prelazeći na resetovanje. Greška u prekoračenju se resetuje promenom CREN bita u RCSTA registru. To je moguće izvršit sa DEFINE direktivom koja to automatski odrađuje kao što je dato u donjem primeru.

DEFINE HSER_CLROERR

Moguće je i programski promeniti dati bit komandama:

RCSTA.4=0

RCSTA.4=1

Za prilagođenje RS-232 potreban je invertujući drajver. Modifikatori imaju sledeća značenja prema donjoj tabeli.

 

Modifikator

Značenje

BIN{1..16}

prijem binarnih cifara

DEC{1..5}

prijem decimalnih cifara

HEX{1..4}

prijem heksadecimalnih cifara sa velikim slovima

SKIP n

preskače prijem n karaktera

STR ArrayVar\n{\c}

prima niz od n elemenata koji se završava karakterom c (opcija)

WAIT()

čeka sekvencu znakova

WAITSTR ArrayVar(\n)

čeka niz znakova

 

HSERIN [B0, DEC W1] 'prijem dec. cifara sa serijske linije

 

HSEROUT [Item{,Item...}]

HSEROUT komanda šalje jedan ili više Item  serijskih podataka kod onih mikrokontrolera koji podržavaju serijsku komunikaciju odnosno poseduju interni USART. Parametri za serijski prenos se definšu sa DEFINE direktivom kao u donjem primeru.

DEFINE HSER_RCSTA 90h 'omoguci prijemnom registru prijem

DEFINE HSER_TXSTA 20h 'omoguci predajnom registru predaju

DEFINE HSER_BAUD 2400 'brzina prenosa 2400 boda

DEFINE HSER_SPBRG 25  'direktno podesi SPBRG

HSEROUT za izračunavanje brzine prenosa pretpostavlja da se koristi 4MHz osilator ako nije data DEFINE OSC direktiva. Kod serijskog prenosa podataka podrazumevani parametar linije je 8N1(8-bita dužina karaktera, bez bita pariteta i jednim stop bitom), dok se neki drugi parametar kao što je 7E1(7-bita dužina karaketera, bit parnosti i jedan stop bit) može biti definisan sa DEFINE direktivom kao u donjem primeru.

DEFINE HSER_EVEN 1   'koristi 1 bit za parni paritet prenosa

DEFINE HSER_ODD 1    'koristi 1 bit za neparni paritet prenosa

Serijski prenos vrši se hardverski tako da je za prilagođenje RS-232 standardu neophodan dodatni drajver za šta se najčešće koristi kolo MAX232. Modifikatori koje koristi HSEROUT dati su donjoj tabeli.

 

Modifikator

Značenje

{I}{S}BIN{1..16}

šalje binarne cifre

{I}{S}DEC{1..5}

šalje decimalnih cifara

{I}{S}HEX{1..4}

šalje heksadecimalne cifre

REP c\n

šalje znak c ponovljen n puta

STR ArrayVar(\n)

šalje string od n karaktera

 

HSERIN [DEC B0, 10] 'salje decimalnu vrednost od B0

                     'kao i line feed karakter

 

http://vojo.milanovic.org
© Copyright, 2004 Milanović Vojo 
All right reserved