EEPROM
eeprom {location,} [constant{, constant...}]
Smešta konstante u EEPROM koji je ugradjen u sam PIC. Ako je vrednost
za 'location' izostavljena, smeštanje počinje od adrese 0, a ako je navedena,
smeštanje počinje od te adrese.
'Constant' može da bude numerička konstanta ili string konstanta. Samo se
bajt najniže vrednosti konstante smešta u EEPROM, a stringovi se smeštaju
kao ASCII vrednosti svakog znaka.
Ova naredba radi samo kod mikrokontrolera koji imaju ugradjeni EEPROM smešten
na sam čip, kao što su PIC16F84 i PIC16C84; naredba ne radi na mikrokontrolerima
kod kojih ugradjeni EEPROM ima I2C interfejs, kao što su 12CE67X ili 16CE62X.
S obzirom da je u pitanju EEPROM memorija, podaci se ne gube čak i kada se
isključi napajanje.
Podaci se smeštaju u EEPROM samo kada se PIC programira, ne kada se program
startuje; za to se koristi naredba WRITE.
eeprom 5, [10, 20, 30] 'smešta vrednosti 10, 20 i 30 u EEPROM počev od adrese 5
[nazad]
ENABLE
enable
Ova naredba omogućava dibagovanje i izvršavanje interapt programa koji
su prethodno zabranjeni naredbom DISABLE. ENABLE je, u stvari, pseudo naredba,
jer daje uputstva kompajleru, a ne proizvodi nikakav kod. Za više informacija
pogledajte naredbe ON DEBUG i ON INTERRUPT.
[nazad]
ENABLE DEBUG
enable debug
Posle ove naredbe omogućeno je dibagovanje. Ovo je, u stvari, pseudo
naredba. Za više informacija pogledajte naredbu ON DEBUG.
[nazad]
ENABLE INTERRUPT
enable interrupt
Ova naredba omogućava izvršenje interapt programa koji su prethodno
zabranjeni. Ovo je, u stvari, pseudo naredba. Za više informacija pogledajte
naredbu ON INTERRUPT.
[nazad]
END
end
Zaustavlja izvršavanje programa i prelazi u režim male potrošnje; svi
pinovi ostaju u svom trenutnom stanju. END radi tako što izvršava asemblersku
SLEEP naredbu u beskonačnoj petlji.
Dobro je da se na sam kraj programa stavi END, STOP ili GOTO naredba da bi
se sprečio izlazak programa iz memorije i ponovno pokretanje.
[nazad]
FOR ... NEXT
for count = start to end {step {-} inc}
{body}
next {count}
Petlja FOR...NEXT dozvoljava izvršavanje dela programam ('body') odredjeni
broj puta koristeći promenljivu kao brojač. S obzirom na kompleksnost naredbe,
najbolje je objasniti je korak po korak:
1) Vrednost promenljive 'start' dodeljuje se indeksnoj promenljivoj 'count'
koja može da bude bilo kog tipa.
2) Izvršava se deo programa izmedju FOR i NEXT ('body') koji može i da se
izostavi, npr. za vremensku zadršku.
3) Vrednost promenljive 'inc' se sabira (ili oduzima ako je upotrebljen znak
"-") sa vrednosću promenljive 'count'. Ako nije navedena
vrednost za 'step', korak je 1
4) Ako vrednost za 'count' nije premašila vrednost za 'end' ili maksimalnu
vrednost za upotrebljeni tip promenljive, program se
vraća na tačku 2).
Ako je potrebno da se petlja izvršava više od 255 puta, mora da se upotrebi word tip promenljive.
-primer 1:
for i=1 to 10 'izvrsavanje petlje 10 puta
serout 0, n2400, [#i, " "] 'salje vrednost promenljive 'i' serijski na pin0
next i 'vracanje nazad i uzimanje nove vrednosti za 'i'
serout 0, n2400, [10] 'salje komandu "novi red"
-primer 2:
for b2=20 to 10 step -2 'broji od 20 do 10 sa umanjenjem za dva
serout 0, n2400, [#b2, " "] 'salje vrednost promenljive 'b2' serijski na pin0
next b2 'vracanje nazad i uzimanje nove vrednosti za 'b2'
serout 0, n2400, [10] 'salje komandu "novi red"
[nazad]
FREQOUT
freqout pin, onms, frequency1, {frequency 2}
Proizvodi jednu ili dve frekvencije i šalje na 'pin' u trajanju
od 'onms' milisekundi. 'Pin' 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). Vrednost za 'frequency1' i 'frequency2' se kreće
od 0 do 32767 herca (Hz).
Ova naredba generiše tonove 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
FREQOUT 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.
freqout portb.1, 2000, 1000 'šalje ton frekvencije 1 kHz na portb.1 koji traje 2 sekunde
[nazad]
GOSUB
gosub label
Skače na potprogram koji je obeležen labelom 'label' i čuva adresu
povratka na steku. Kada program naidje na RETURN naredbu, vraća se nazad i
izvršava se naredba odmah iza naredbe GOSUB.
U programu može da bude neograničen broj GOSUB naredbi. Potprogrami mogu da
budu ugnježdeni, što znači da iz jednog potprograma može da se pozove drugi,
ali takvih ugnježdenih potprograma može da bude maksimalno 4.
gosub beep 'pozovi potprogram 'beep'
...
...
beep:
high 0 'uključi LED spojenu na pin0
sound 1, [80, 10] 'aktiviraj zvučnik spojen na pin1
low 0 'isključi LED
return 'vrati se u glavni program
[nazad]
GOTO
goto label
Program nastavlja izvršavanje od labele 'label'.
goto send 'skoci na labelu 'send'
...
...
send:
serout 0, n2400, ["Hi"] 'posalji "Hi" serijski na pin0
[nazad]
HIGH
high pin
Postavlja logičko "1" na navedeni 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).
high 0 'šalje na pin0 logicko "1" (priblizno naponu napajanja)
high porta.0 'šalje na porta.0 logicko "1"
led var portb.0 'definiše pin za LED
high led 'šalje na LED logičko "1"
Ako je pin već postavljen kao izlaz, brži i kraći način (sa stanovišta generisanog koda) da se postavi na log. "1" je:
portb.0=1 'postavi logičko "1" na portb.0
[nazad]
HSERIN
hserin {paritylabel, }{timeout, label, }[item{,...}]
Prima jedan ili više 'item'-a sa hardverskog serijskog porta na
kontroleru koji hardverski podržava serijsku komunikaciju. HSERIN je jedna
od nekoliko ugradjenih asinhronih serijskih funkcija i može da se koristi
jedino sa kontrolerima koji imaju hardverski USART (univerzalni sinhrono-asinhroni
prijemnik- predajnik). Pogledajte podatke za tačne informacije o serijskom
ulazu i ostalim parametrima za željeni uredjaj. Parametri za serijsku komunikaciju
odredjuju se sa DEFINE:
DEFINE HSER_RCSTA 90h 'postavlja prijemni registar na "prijem omogućen"
DEFINE HSER_TXSTA 20h 'postavlja predajni registar na "predaja omogućena"
DEFINE HSER_BAUD 2400 'definiše brzinu
DEFINE HSER_SPBRG 25 'definiše direktno SPBRG (normalno se definiše pomoću HSER_BAUD)
HSERIN pretpostavlja da je upotrebljen oscilator od 4 MHz pri računanju
brzine. Ako koristite drugu frekvencu za oscilator, upotrebite DEFINE OSC
da kažete PBP-u koju frekvencu koristite.
Opciono mogu da se upotrebe 'timeout' i 'label' da bi se omogućilo programu
da nastavi dalje u slučaju da karakter nije primljen za odredjeno vreme. 'Timeout'
je izražen u milisekundama. Unapred definisani format podatka je 8N1 (8 bitova
podatka, bez bita parnosti, 1 stop bit). Moguće je koristiti i formate 7E1
i 7O1 koristeći respektivno sledeće DEFINE naredbe:
DEFINE HSER_EVEN 1 'koristiti ako je potrebna parna provera parnosti
DEFINE HSER_ODD 1 'koristiti ako je potrebna neparna provera parnosti
Podešavanje parnosti, zajedno sa ostalim DEFINE naredbama, utiče i na HSERIN
i na HSEROUT. Opciono u naredbi može da se navede 'paritylabel'; program će
da predje na izvršavanje od te labele u slučaju da je došlo do greške pri
proveri parnosti. Ovo može da se koristi samo u slučaju da je sa jednom od
gornje dve DEFINE naredbe upotrebljena provera parnosti. S obzirom da se serijski
prijem vrši hardverski, nije moguće invertovati stanje da bi se eliminisao
RS232 drajver. Zbog toga treba koristiti odgovarajući drajver.
HSERIN koristi iste modifikatore kao i SERIN2:

|
Modifikator
|
Operacija
|
|
BIN{1...16}
|
prima binarne cifre
|
|
DEC{1...5}
|
prima decimalne cifre
|
|
HEX{1...4}
|
prima heksadecimalne cifre
|
|
SKIP n
|
preskače n primljenih karaktera
|
|
STR ArrayVar\n{\c}
|
prima string od n karaktera, opcino se završava c
karakterom
|
|
WAIT ( )
|
čeka odredjenu sekvencu karaktera
|
|
WAITSTR ArrayVar{\n}
|
čeka karakter string
|
Na 17Cxxx mikrokontroleru koji ima dva serijska porta, HSERIN će da pristupi samo prvom; drugom treba pristupati direktno preko registara.
[nazad]
HSEROUT
hserout [item{, item, ...}]
Šalje jedan ili više 'item'-a na hardverski serijski port na kontroleru
koji hardverski podržava serijsku komunikaciju. HSEROUT je jedna od nekoliko
ugradjenih asinhronih serijskih funkcija i može da se koristi jedino sa kontrolerima
koji imaju hardverski USART (univerzalni serijski asinhroni prijemnik- predajnik).
Pogledajte podatke za tačne informacije o serijskom izlazu i ostalim parametrima
za željeni uredjaj. Parametri za serijsku komunikaciju odredjuju se sa DEFINE:
DEFINE HSER_RCSTA 90h 'postavlja prijemni registar na "prijem omogućen"
DEFINE HSER_TXSTA 20h 'postavlja predajni registar na "predaja omogućena"
DEFINE HSER_BAUD 2400 'definiše brzinu
DEFINE HSER_SPBRG 25 'definiše direktno SPBRG (normalno se definiše pomocu HSER_BAUD)
HSEROUT pretpostavlja da je upotrebljen oscilator od 4 MHz pri računanju
brzine. Ako koristite drugu frekvencu za oscilator, upotrebite DEFINE OSC
da kažete PBP-u koju frekvencu koristite.
Unapred definisani format podatka je 8N1 (8 bitova podatka, bez bita parnosti,
1 stop bit). Moguće je koristiti i formate 7E1 i 7O1 koristeći respektivno
sledeće DEFINE naredbe:
DEFINE HSER_EVEN 1 'koristiti ako je potrebna parna provera parnosti
DEFINE HSER_ODD 1 'koristiti ako je potrebna neparna provera parnosti
Podešavanje parnosti, zajedno sa ostalim DEFINE naredbama, utiče i na HSERIN i na HSEROUT. S obzirom da se serijsko slanje vrši hardverski, nije moguće invertovati stanje da bi se eliminisao RS232 drajver. Zbog toga treba koristiti odgovarajući drajver. HSERIN koristi iste modifikatore kao i SEROUT2:
|
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
|
Na 17Cxxx mikrokontroleru koji ima dva serijska porta, HSEROUT će da pristupi samo prvom; drugom treba pristupati direktno preko registara.
hserout [dec b0, 10] 'salje decimalnu vrednost promenljive b0, zatim kod za novi red
[nazad]
I2CREAD
i2cread datapin, clockpin, control, {address,}[var{, var...}]{, label}
Šalje 'control' i opciono 'adress' bajtove na 'clockpin' i 'datapin'
i smešta primljene bajtove u promenljivu (ili u više njih). 'Clockpin' i 'datapin'
mogu da budu konstanta, od 0 do 15, ili promenljiva koja sadrži broj od 0
do 15, ili ime pina (npr. porta.0).
I2CREAD i I2CWRITE naredbe mogu da se koriste za čitanje i upis podataka u
serijski EEPROM sa I2C interfejsom kao što je 24C01 i sl. To omogućava smeštanje
podataka u memoriju koja čuva podatke i nakon isključenja napajanja. Pomoću
ovih naredbi takodje može da se komunicira sa ostalim uredjajima koji imaju
I2C interfejs kao što su A/D konvertori, temperaturni senzori i sl.
Gornjih 7 bitova 'control' bajta sadrži kontrolni kod zajedno sa informacijom
o izboru čipa, a u zavisnosti od konkretnog uredjaja. Bit 0 odredjuje da li
je u pitanju upis ili čitanje i treba ga staviti na 0.
Na primer, kada se komunicira sa 24C01, kontrolni kod je %1010, a izbor čipa
se ne koristi, tako da je 'control' bajt %10100000 ili $A0. Evo 'control'
bajta za neke EEPROM-e:
|
EEPROM
|
Kapacitet
|
'control'
|
Veličina adrese
|
|
24LC01B
|
128 bajtova
|
%1010xxx0
|
1 bajt
|
|
24LC02B
|
256 bajtova
|
%1010xxx0
|
1 bajt
|
|
24LC04B
|
512 bajtova
|
%1010xxb0
|
1 bajt
|
|
24LC08B
|
1K bajt
|
%1010xbb0
|
1 bajt
|
|
24LC16B
|
2K bajta
|
%1010bbb0
|
1 bajt
|
|
24LC32B
|
4K bajta
|
%1010ddd0
|
2 bajta
|
|
24LC65
|
8K bajta
|
%1010ddd0
|
2 bajta
|
xxx - nije važno
bbb - izbor bloka (viši bitovi adrese)
ddd - izbor čipa
Broj bitova koji se šalju za 'address' zavise od tipa upotrebljene promenljive;
ako je BYTE, za 'address' se šalje 8 bitova, a ako je WORD, onda se šalje
16 bitova. Proverite da li ste odabrali odgovarajući tip promenljive za 'address'
u skladu sa čipom.
Ako je za 'var' upotrebljena promenljiva tipa WORD, biće pročitana dva bajta
i smeštena u 'var', prvo bajt veće težine, a zatim bajt manje težine. Ovaj
redosled je suprotan u odnosu na standardni PBP način.
Modifikator STR može da se stavi ispred imena promenljive i na taj način može
da se odjednom učita ceo niz. Ako se upotrebi STR, promenljiva koja sledi
mora da bude niz tipa BYTE ili WORD, a zatim sledi kosa crta i broj koji odredjuje
koliko se elemenata učitava.
a var byte[8]
i2cread portc.4, portc.3, $a0, 0, [str a/8]
Ako je opciono navedena labela 'label', program će da skoči na tu labelu
ako nije primljena potvrda od I2C čipa.
I2C instrukcije mogu da se koriste za pristup EEPROM-ima u samom PIC-u koji
ima ugradjen I2C interfejs, kao što su 12CExxx i 16CExxx. Jednostavno naznačite
imena pinova za odgovarajuće interne linije kao deo I2C komande i stavite
sledeću DEFINE na početku programa:
DEFINE I2C_INTERNAL 1
Za 12CE67x kontrolere, DATA linija je GPIO.6, a CLOCK je GPIO.7. Za 16CE62x,
DATA linija je EEINTF1, a CLOCK je EEINTF2.
Tajminzi su podešeni tako da se sa oscilatorom od 8 MHz dobija standardna
brzina od 100 KHz. Brži mod (400 KHz) može da se dobije sa oscilatorima do
20 MHz. Ako je potrebna standardna brzina od 100 KHz sa oscilatorom preko
8 MHz, treba dodati sledeću DEFINE naredbu:
DEFINE I2C_SLOW 1
Transfer na I2C magistrali može da se pauzira tako što prijemni uredjaj drži CLK liniju na niskom nivou. Da bi se to omogućilo, treba upotrebiti sledeću DEFINE naredbu:
DEFINE I2C_HOLD 1
Linije DATA i CLK treba preko otpornika od 4K7 vezati na Vcc s obzirom da
obe rade kao OPEN-COLLECTOR dvosmerne linije.
Da bi se CLK linija koristila u bipolarnom režimu, treba dodati sledeću DEFINE
naredbu:
DEFINE I2C_SCLOUT 1
primer:
addr var byte
cont con %10100000
addr=17 'postavi promenljivu addr na 17
i2cread porta.0, porta.1, cont, addr, [b2] 'čitaj adresu 17 i smesti u promenljivu b2
[nazad]
I2CWRITE
i2cwrite datapin, clockpin, control, {address, }[value{, value...}]{,label}
Šalje 'control' i opciono 'adress' bajtove na 'clockpin' i 'datapin',
a zatim šalje vrednosti promenljive 'value' (ili više njih). 'Clockpin' i
'datapin' mogu da budu konstanta, od 0 do 15, ili promenljiva koja sadrži
broj od 0 do 15, ili ime pina (npr. porta.0).
Broj bitova koji se šalju za 'address' zavise od tipa upotrebljene promenljive;
ako je BYTE, za 'address' se šalje 8 bitova, a ako je WORD, onda se šalje
16 bitova. Proverite da li ste odabrali odgovarajući tip promenljive za 'address'
u skladu sa čipom.
Kada se vrši upis u EEPROM, neophodno je sačekati oko 10 ms da se završi proces
upisa pre nego što se pokuša nova komunikacija sa čipom. Ako se primeni I2CREAD
ili I2CWRITE pre nego što se upis završi, naredba će biti ignorisana. Iako
sa jednom I2CWRITE naredbom može da se izvrši upis više bajtova odjednom,
to može da naruši potrebne tajminge i da se upis ne izvrši pravilno. Neki
serijski EEPROM-i omogućavaju upis više bajtova odjednom bez potrebe da se
čeka 10 ms za upis izmedju pojedinih bajtova, već je dovoljno sačekati 10
ms za upis svih bajtova. Proverite podatke za odredjeni EEPROM pre upotrebe
ove mogućnosti.
Ako je za 'value' upotrebljena promenljiva tipa WORD, šalju se 2 bajta, prvo
bajt veće težine, a zatim bajt manje težine, što je suprotno od normalnog
redosleda u PBP-u. Modifikator STR može da se stavi ispred imena promenljive
i na taj način može da se odjednom upiše ceo niz, tj. da se iskoristi PAGE
WRITE (upis stranice) mogućnost EEPROM-a. Veličina stranice zavisi od EEPROM-a.
Ako se upotrebi STR, promenljiva koja sledi mora da bude niz tipa BYTE ili
WORD, a zatim sledi kosa crta i broj koji odredjuje koliko se elemenata upisuje.
a var byte[8]
i2cwrite portc.4, portc.3, $a0, 0, [str a/8]
Ako je opciono navedena labela 'label', program će da skoči na tu labelu ako nije primljena potvrda od I2C čipa. I2C instrukcije mogu da se koriste za pristup EEPROM-ima u samom PIC-u koji ima ugradjen I2C interfejs, kao što su 12CExxx i 16CExxx. Jednostavno naznačite imena pinova za odgovarajuće interne linije kao deo I2C komande i stavite sledeću DEFINE na početku programa:
DEFINE I2C_INTERNAL 1
Za 12CE67x kontrolere, DATA linija je GPIO.6, a CLOCK je GPIO.7. Za 16CE62x,
DATA linija je EEINTF1, a CLOCK je EEINTF2.
Tajminzi su podešeni tako da se sa oscilatorom od 8 MHz dobija standardna
brzina od 100 KHz. Brzi mod (400 KHz) može da se dobije sa oscilatorima do
20 MHz. Ako je potrebna standardna brzina od 100 KHz sa oscilatorom preko
8 MHz, treba dodati sledeću DEFINE naredbu:
DEFINE I2C_SLOW 1
Transfer na I2C magistrali može da se pauzira tako što prijemni uredjaj drži CLK liniju na niskom nivou. Da bi se to omogućilo, treba upotrebiti sledeću DEFINE naredbu:
DEFINE I2C_HOLD 1
Linije DATA i CLK treba preko otpornika od 4K7 vezati na Vcc s obzirom da obe rade kao OPEN-COLLECTOR dvosmerne linije. Da bi se CLK linija koristila u bipolarnom režimu, treba dodati sledeću DEFINE naredbu:
DEFINE I2C_SCLOUT 1
primer:
addr var byte
cont con %10100000
addr = 17 'postavi adresu na 17
i2cwrite porta.0, porta.1, cont, addr, [6] 'upiši 6 na adresu 17
pause 10 'sačekaj 10 ms da se upis završi
addr = 1 'postavi adresu na 1
i2cwrite porta.0, porta.1, cont, addr, [b2] 'upiši vrednost iz b2 na adresu 1
pause 10 'sačekaj 10 ms da se upis završi
[nazad]
IF..THEN
if comp {and/or comp...} then label
if comp {and/or comp...} then
statement...
else
statement...
endif
Vrši jedno ili više poredjenja. Svaki 'comp' izraz može da se odnosi
na promenljivu i konstantu ili na promenljivu i drugu promenljivu i uključuje
jedan od izraza za poredjenje navedenih ranije u sedmom delu ovog serijala,
u odeljcima 4.18. i 4.19.
Rezultat poredjenja može biti tačan ili netačan (TRUE ili FALSE); ako je rezultat
tačan, izvršava se operacija iza THEN, a ako je netačan, operacija iza THEN
se ignoriše. Poredjenje koje za rezultat ima nulu smatra se netačnim, svaka
druga vrednost smatra se za tačnu. Poredjenje je neoznačeno, jer PBP ne radi
sa označenim brojevima. Ako je potrebno, upotrebite zagrade da bi ste odredili
redosled kojim želite da se operatori testiraju.
IF... THEN naredba može da radi na dva načina; kod prvog načina THEN se ponaša
kao GOTO i iza THEN može da se nalazi jedino labela: ako je rezultat poredjenja
tačan, program nastavlja izvršenje od labele navedene iza THEN, a ako je rezultat
netačan, program izvršava naredbu koja sledi posle IF...THEN.
if pin0=0 then pushd 'ako je stanje na pin0=0, idi na labelu pushd
if b0>=40 then old 'ako je vrednost promenljive veća ili jednaka 40, idi na old
if portb.0=1 then itson 'ako je stanje na RB0=1, idi na labelu itson
if (b0=10) and (b1=20) then loop 'ako je vrednost b0=10 i istovremeno vrednost b1=20, 'idi na lebelu loop
Kod drugog načina, IF...THEN uslovno izvršava grupu naredbi 'statement' koja se nalazi iza THEN. Iza 'statement' mora da se nadje ELSE ili ENDIF da bi se struktura kompletirala.
if b0 <>10 then 'ako je b0 različito od 10
b0=b0+1 'uvećaj b0 za 1
b1=b1-1 'i umanji b1 za 1
endif 'kraj IF...THEN strukture
if b0=20 then 'ako je b0 jednako 20
led=1 'postavi promenljivu led na 1
else 'u suprotnom
led=0 'postavi promenljivu led na 0
endif 'kraj IF...THEN strukture
[nazad]
INPUT
input pin
Postavlja odredjeni 'pin' kao ulazni. 'Pin'može da budu konstanta,
od 0 do 15, ili promenljiva koja sadrži broj od 0 do 15, ili ime pina (npr.
porta.0).
input 0 'postavlja pin0 kao ulaz
input porta.0 'postavlja RA0 kao ulaz
Alternativno, pin može na brži i kraći način (gledano sa stanovišta generisanog koda) da se postavi kao ulaz:
trisb.0=1
Svi pinovi jednog porta mogu odjednom da se postave kao ulazi ako se setuju svi bitovi odgovarajućeg TRIS registra:
trisb=%11111111 'postavi sve pinove porta b kao ulazne
[nazad]