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