evo i jedne ciklusne naredbe
FOR Index=Start TO End {STEP {-} Inc}
{naredbe}
NEXT {Index}
indeks je promenljiva tipa byte ili word
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 povecava ili smanjuje promenljiva Index. Ako nije navedenao {STEP {-} Inc} podrazumeva se da je 1.
npr jedan primer
Code: Select all
i VAR BYTE
SIMBOL LED=PORTB.1
OUTPUT LED
FOR i=1 TO 10 'broj prolaza 10
TOGGLE LED
NEXT i
ovo je zgodno kada nesto treba da se ponovi odredjeni broj puta...
e sada da pogledamo jednu naredbu koja je jako korisna kod 7 segmetnog displeja.
npr kada bi hteli da napravimo program koji bi broio od 0 do 9 koristeci for.
to bi izgledalo
FOR i=0 TO 9
if i=0 then portb= 192
.
.
.
.
if i=9 then portb= 152
NEXT i
mao naporno zar ne...
ajde sad da pogledamo drugi nacin
koristeci select case
prvo nesto da kazemo o toj naredbi
SELECT CASE promenljiva
CASE izraz1,izraz..
naredba
CASE izraz2 ,izraz
naredba
{CASE ELSE naredba}
END SELECT
promenljiva moze biti bilo kog tipa, mada ako je promenljiva bit onda ova naredba bas i nema smisla.
izraz je ono sa cime se uporedjuje promenljiva, i ako je tacna onda se izvrsava naredba ispod.
CASE ELSE naredba - ovaj red je opcioni.
znaci moze da se stavi a i nemora.
a naredba koja stoji iza case else ce se izvrsiti ukoliko promenljiva nije bila jednaka sa bilo kojim izrazom navedenom posle case.
evo jedan primer iz help fajla.
SELECT CASE x
CASE 1
y = 10
CASE 2, 3
y = 20
CASE IS > 5
y = 100
CASE ELSE
y = 0
END SELECT
mislim da ga nema potrebe nesto posebno objasnjavati.
i ovo smo mogli iskoristiti za ispis brojeva na displeju ali nista puno nam ne skracuje posao u odnosu na naredbu if...
sto se mene tice case slobodno zaboravite. najcesce se koristi if i sledeca naredba.
a to je LOOKUP
sintaksa:
LOOKUP Indeks,[Konstanta,Konstanta...],Promenljiva
indeks predstavlja broj od nule, pa se moze menjati do onog broja koliko imamo konstanti u zagradi
promenljiva je mesto gde se smesta konstanta.
Ova naredbe koristi se za čitanje vrednosti iz tabele konstani na osnovu zadatog Indeksa. Kada je 0 to je indeks prvog člana tabele. Vrednost člana sa datim Indeksom se smešta u promenljivu. kada je indeks 1 onda se uzima vrednost druge konstante i smesta se u promenljivu.
U slučaju ako je vrednost Indeksa veća ili jednaka broju članova tabele promenljiva Var zadržava prethodnu vrednost.
ista je stvar i sa lookup2 samo sto kod te naredbe konstante mogu biti velicine word
evo primera:
Lookup i, [192,249, 164,176,153, 146, 130, 248, 128, 152], portb
u ovom slucaju ce poslati odgovarajuci broj na portb.
ako obratite paznu videcete da su to brojevi iz tabele za 7 seg. displej.
pa program za brojenje bi izgledao ovako
Code: Select all
i VAR BYTE
OUTPUT PORTB
FOR i=0 TO 9
Lookup i, [192,249, 164,176,153, 146, 130, 248, 128, 152], portb
PAUSE 500
NEXT i
sto se tice 7 seg displeja ostale su jos 2 stvari da objasnim. a to je multipleksiranje displeja, i koriscenje dekodera.
sto se tice multipleksiranja mozda bi bilo najbolje da svi instalirate proteus da nemorate plocice praviti. samo jedna napomena kod proteusa ne rade sve naredbe. npr kada se napise output portb, proteus nece prepozndati da je portb izlazni. nego se mora koristi trisb registar. to sam tek sada primetio.
posle toga dolazi lcd displej, za koji se isto moze koristiti proteus. ali ja bi vam preporucio da nabavite displej da bi mogli videti prenos podataka sa racunara na pic. i time bi se polako priveli kraju...
pa ako imate pitanja u vezi ovoga pitajte
a evo malo domaceg
voleo bi sad da neko napravi program koji ce brojati pritiske tastera, i kada izbroji do 9, pa se ponovo taster stisne treba da se vrati na 0 i da sve ide ispocetka
ne bi trebalo da vam predstavlja problem
EDIT:
Evo jos jednog nacina za koriscenje sedmosegmentnog displeja
Code: Select all
Cifra var byte[10]
i var byte
Cifra[0] = %11000000
Cifra[1] = %1111 1001
Cifra[2] = %1010 0100
Cifra[3] = %1011 0000
Cifra[4] = %1001 1001
Cifra[5] = %1001 0010
Cifra[6] = %1000 0010
Cifra[7] = %1111 1000
Cifra[8] = %1000 0000
Cifra[9] = %1001 1000
i=0' U i stavimo cifru koju hocemo na displeju.
portb=cifra[i]