You are on page 1of 77

UNIVERZITET U NIU

ELEKTORNSKI FAKULTET
KATEDRA ZA ELEKTRONIKU

Programiranje i iitavanje sadraja


serijskog EEPROM-a pomou
mikrokontrolera PIC16F877

Studenti:
Darko Prvulovi 10610
Ivan Truci
9264
Mentor:
Mile K. Stojev, prof. dr.

Sadraj
Uvod.................................................................................3
Serijska komunikacija RS232.......................................4
Serijski EEPROM...........................................................10
Opte karakteristike mikrokontrolera.............................15
Funkcionalne jedinice mikrokontrolera..........................16
RISK procesori i HARVARD arhitektura......................20
Mikrokontroler PIC16F877............................................22
Osnovne karakteristike mikrokontrolera........................25
Arhitektura mikrokontrolera..........................................26
Realizacija projektnog zadatka.......................................41
Program u mikroC-u.......................................................46
Program u asembleru......................................................47
Heksadecimalni kod.......................................................58
Sotver ICprog.................................................................59
Softver microC...............................................................62
UART terminal...............................................................63
Laboratorijska veba......................................................65
Zakljuak........................................................................73
Literatura........................................................................74
Krae biografije autora...................................................75
dodatak: Data sheet

Uvod
Osnovna ideja ovog projekta je praktina realizacija upisa i itanja sadraja
serijskog EEPROM-a uz pomo mikrokontrolera PIC16F877A.
U drugom poglavlju ukratko je objanjena serijska komunikacija na PC
raunarima, koja je u ovom sluaju realizovana uz pomo kola MAX232 koje
ima ulogu prilagoenja izmeu serijskog porta raunara i samog ureaja.
Tree poglavlje opisuje serijski EEPROM 24C02 uz odgovarajue slike
samog kola i karakteristike.
U etvrtom poglavlju opisane su opte karakteristike mikrokontrolera, dok
peto i esto poglavlje opisuje funkcionalne jedinice mikrokontrolera, RISK
procesore, kao i HARVARD arhitekturu. Poglavlja 7, 8, 9 i 10 vezana su
konkretno za mikrokontroler koji je iskorien za ovaj projekat (PIC16F877).
7. poglavlje opisuje pomenuti mikrokontroler, a prikazan je i njegov fiziki
izgled. U 8., 9., i 10. poglavlju, redom su opisane osnovne karakteristike
mikrokontrolera, arhitektura mikrokontrolera, kao i oranizacija njegove
memorije.
Projektni zadatak, kao i programski kod u microC-u, program u asembleru
i heksadecimalni kod, redom su opisani u poglavljima 11, 12, 13 i 14. Poglavlja
15, 16, 17 opisuju nain instalacije programa Icprog, microC i podeavanje
parametara UART terminala.
Laboratorijska veba je detaljno opisana u osamnaestom poglavlju, da bi
na kraju izveli zakljuak i dali spisak literature koriene prilikom izrade ovog
projekta. Priloene su i kratke biografije autora projekta.
Uz projekat su priloeni izvodi data sheet-ova serijskog EEPROMA 24C02
i mikrokontrolera PIC16F877.

Serijska komunikacija RS232


Komunikaciju mikrokontrolera sa raunarom, odnosno zadavanje odreenih
naredbi, vrimo preko RS232 linije. U tekstu koji sledi objasniemo serijsku
komunikaciju izmeu raunara i mikrokontrolera AT89S8253.
Telecommunication Industry Association, 1997-e godine izdala je TIA 232
Version F serijsko komunikacijski protokol poznat kao RS 232 (Recommended
Standard) protokol.
RS232 standard je iroko korien pri prenosu podataka brzinama u
granicama od 115 do 330 kb/s, a maksimalna razdaljina za komunikaciju je oko
30 metra.
RS 232 predstavlja peer-to-peer komunikacijski standard, tako da je
pogodan za aplikacije koje sadre 2 vora gde je na svakom od njih
mikrokontroler ili raunar, tako da moemo povezati jedan mikrokontroler za
jedan PC.
Pretpostavimo da brzina kojom aljemo podatke sa raunara 9600 baud-a
odnosno 9600 bita u sekundi, to je i iroko preporuljiva brzina za bezbedno
slanje podataka. U tom sluaju e za slanje jednog bajta, plus jedan start i jedan
stop bit, biti potrebno 1ms.
Na Slici 1. prikazan je jedan od nacina realizacije serijske komunikacije
MAX232 kolom.

Slika 1. Realizacija serijskog prenosa MAX232 kolom


4

Slika 2. Raspored pinova kod kola MAX232

Slika 3. Fizike dimenzije MAX232 kola

Serijski port se drugaije naziva i komunikacijski (communication COM) port i on je bidirekcioni. Bidirekciona komunikacija omoguuje ureaju
i da prima i da alje podatke. U zavisnosti od toga da li serijski ureaji koriste
razliite pinove za prijem i slanje ili samo jedan, mogue je razlikovati dva tipa
komunikacije: full-duplex (informacije se mogu istovremeno prenositi u oba
smera) i half-duplex (dok se informacije prenose u jednom smeru, prenos iz
drugog smera je zabranjen).
Serijski port se zasniva na UART kontrolerskom ipu, koji predstavlja
kljunu komponentu serijske komunikacije. Ovaj ip, s jedne strane prihvata
bajtove podataka od mikroprocesorskog sistema, transformie ih u bitski niz i
alje bit-po-bit.
Postoje dva glavna oblika serijskog prenosa: sinhroni i asinhoni. Sinhoni
prenos podrazumeva da predajnik i prijemnik dele zajedniki takt, ili da
predajnik obezbedi poseban signal kojim e obavetavati prijemnik kada
dolazi sledei podatak. Kod asinhronog prenosa ne postoji poseban signal ve se
sinhronizacija vri pomou posebnih bitova koji se umeu.

Serijski port PC raunara koristi se za serijski prenos podataka (bit po bit) i


samim tim je sporiji od paralelnog porta. Ureaji koji koriste serijsku
komunikaciju koriste dve vrste kablova i to: DCE (Data Communications
6

Equipment) i DTE (Data Terminal Equipment). DCE koriste modemi, ploteri i


sl. dok se DTE koristi za vezu izmeu PC raunara. Elektrine osobine serijskog
porta su definisane EIA (Electronics Industry Association) RS232C
standardom, iji su parametri:

Logika nula "SPACE" nalazi se u opsegu napona +3V do +25V


Logika jedinica "MARK" je u opsegu -3V do - 25V
Oblast izmeu -3 do + 3 V nije definisana
Napon na kolu ne sme da pree 25V u odnosu na masu (GND)
Struja kola ne sme prei 500 mA.

Inae, serijski port koristi dve vrste konektora: DSUB-9 (9-pinski) i


DSUB-25 (25-pinski). Oblik konektora i raspored pinova na njima kao i glavni
signali na pojedinim pinovima dati su na Slikama 4. i 5. i Tabeli 1.

Slika 4. Raspored pinova na konektoru DSUB-9

Slika 5. Raspored pinova na konektoru DSUB-25

DSUB-25
pin 2
pin 3
pin 4
pin 5
pin 6
pin 7
pin 8
pin 20
pin 22

DSUB-9

Signal

Opis signala

pin 3
pin 2
pin 7
pin 8
pin 6
pin 5
pin 1
pin 4
pin 9

TD
RD
RTS
CTS
DSR
SG
CD
DTR
RI

Transmit Data
Receive Data
Request To Send
Clear To Send
Data Set Ready
Signal Ground
Carrier Detect
Data Terminal Ready
Ring Indicator

Tabela 1. Znaenje pojedinih signala

Oblik signala kod RS232 standarda dat je slici 6.

Slika 6. Oblik signala kod RS232 standarda

Situacija kada nema slanja podatka, tj. linija je slobodna, oznaena je


MARK naponom. Prenos poinje kada linija pree u SPACE stanje, to
predstavlja START bit. Iza start bita dolaze bitovi podataka i to tako da je
jedinica predstavljena negativnim naponom, a nula pozitivnim. Ovo je najee
u suprotnosti sa ustaljenom logikom da je +5 V logika jedinica, a 0 V logika
nula. Problem reava prijemno kolo (npr. MAX232, ST232, ICL232,
MAX3232, ST3232, ICL3232 itd.) konvertujui napo-ne tako da su prilagoeni
naponima interfejsa koji se koristi. Posle bita podatka dolazi bit parnosti koji se
koristi za detekciju jednostruke greke u prenosu. Iza bita parnosti signal se
postavlja u MARK stanje to oznaava poetak STOP bita. Prema RS232
standardu broj stop bitova moe biti: 1, 1.5 ili 2. Nakon zavretka STOP bitova,
linija je spremna za slanje novog karaktera. PC raunari koriste kao DATA bite
najee 7 ili 8 bita. Izmeu slanja dva karaktera linija se nalazi u MARK
stanju, a u toku prenosa vie puta prelazi iz MARK u SPACE stanje u zavisnosti
od broja jedinica i nula. To znai da se linija moe nalaziti u SPACE stanju
najvie u sluaju kada karakter sadri sve nule. Ova osobina prenosa
upotrebljena je za uvoenje specijalnog znaka nazvanog BREAK (prekid). Ovaj
se signal ko-risti kako bi se dala prijemniku signalizacija da je dolo do
problema u slanju podataka.
Serijski prenos poinje tako da predajna strana alje prijemnoj strani signal
RTS - zahtev za slanjem, dok prijemnik ako je spreman za prijem odgovara
signalom CTS - spreman za prijem. Predajnik zatim alje podatke prijemniku.
Nakon prijema podataka, prijemnik proverava da li su podaci primljeni bez
greke i za to vreme javlja predajniku da je zauzet. Ako su podaci primljeni bez
greke, prijemnik alje predajniku signal potvrde ACK (Acknowledgment ASCII 6), a u sluaju ako se pojavila neka greka, alje signal nega tivne potvrde
NAK (ASCII 21). Zavisno od upotrebljenog protokola, odgovor predajnika na
dobijeni NAK signal moe biti ponovno slanje podataka.
Protokol za prenos moe se izvesti na dva naina i to: hardverski i
softverski. Za realizaciju hardverskog protokola neophodno je da postoje linije:
RTS, CTS i linija za prenos bitova poruke. Softverska realizacija koristi umesto
linija RTS i CTS, ASCII znakove XON i XOFF (nazivaju su i DC1 i DC3),
zbog ega je umesto tri dovoljna samo jedna linija. Kada se primenjuje ovaj
protokol prijemnici i na predaji i prijemu proveravaju svaki prispeli znak radi
utvrivanja da li je to XON, XOFF ili podatak. Strana koja ne moe da primi
karakter kao indikator tog stanja drugoj strani alje XOFF znak.
Prilikom serijskog prenosa podataka mogua je pojava sledeih vrsta
greaka:
Greka uokvirenja ili greka rama podatka (framing error). Do ove
greke dolazi u sluaju kada prijemnik oekuje STOP bit ali se on ne
pojavljuje.
9

Greka prekoraenja (overrun error). Nastaje kada se pojavljuje novi


znak u prijemniku a prethodni nije upotpunosti primljen.
Greka parnosti (parity error). Nastaje kada bit parnosti ne odgovara
stanju bitova u bitovima podatka.

Serijski EEPROM
Serijski EEPROM-i su danas sve pristupaniji za korienje. Tome
doprinose njegove male dimenzije (DIP 8), niska cena i mali broj potrebnih
linija za njegovo povezivanje sa mikrokontrolerom. Najea primena serijskih
EEPROM-a je u televiziji, SAT prijemnicima, video rekorderima gde slue za
memorisanje kanala.
Specifikacijom datom od strane proizvoaa, prilikom nestanka napajanja
garantovano je uvanje podataka do 40 godina. Opseg radnog napona kree su u
granicama od 3V do 5,5V. U sam ip ugraen je Power on Reset kojim su
zabranjene sve funkcije sve dok napon ne dostigne nominalnu vrednost.
Fabriki je odreeno da serijski EEPROM ima isti sadraj svih elija, $FF.
Microchip 24Cxx kola su kompatibilna sa I2C protokolom razvijenim od
strane Philipsa, koji omoguava korienje samo 2 bi-direkcione open-drain
linije.
Radna frekvencija kola kree se u granicama od 100kHz do 400kHz.

Slika 7. Serijski EEPROM 24C02


10

Slika 8. Raspored pinova serijskog EEPROM-a

PIN

Function

VCC

Supply Voltage

SDA

Serial Data Address I/O

SCL

Serial Clock

DC

Don`t connect

TEST

Test PIN

SDA serijski bidirekcioni kontakt sluzi za prenos adresa i podataka u


memoriju, takoe i za prenos adresa i podataka iz memorije. Poto je izveden
kao Open Drain potrebno je i na njega prikljuiti Pull up otpornik na
VCC(tipina vrednost je 10k za 100kHz, 1k za 400kHz).
SCL ulaz obezbeuje sinhronizaciju podataka koji se u memoriju upisuju ili
iitavaju.
Proizvoa u specifikaciji daje okvirnu procenu od oko 1,000,000 moguih
upisa-itanja memorije. U komercijalno dostupnoj verziji kola, radna
temperatura se kree u granicama od 0 oC do 70oC.
11

EEPROM 24c02 ima kapacitet od ukupno 2kbit-a, organizovanih u singleblokove od 256 x 8 bita. Protok informacija iz kola i prema kolu je mogu samo
kad je magistrala slobodna. Prenos podataka mora biti konstantan, a ukoliko
doe do odreene varijacije, moe doi do prekida(dolazei bit moze biti
interpretiran kao START ili STOP bit).
START bit nastaje promenom logikog nivoa na liniji SDA sa 1 na 0
kada je SCL na visokom logikom nivou. Komanda START mora prethoditi
bilo kojoj komandi za transfer podataka.
STOP bit nastaje promenom nivoa na liniji SDA sa 0 na 1 dok je linija
SCL na visokom logikom nivou. Naredba STOP prekida komunikaciju izmeu
master i slave ipa ( ip koji kontrolie protok podataka se zove master, a
drugi drugi slave).

Slika 9. Oblik START I STOP nivoa

Ako je STOP komanda nastala nakon READ komande, tada EEPROM


prelazi u Stand by reim, a ako je nastala nakon komande WRITE tada
inicira interno upisivanje u EEPROM. Uspeno izveden prenos podataka
potvruje se ACK (Acknowledge) bitom.

12

Nakon generisanja START bita, master alje slave adresu koju ine 4 device
select bita (1010) i 3 dont care bita. Osmi bit ima vrednost 1 ili 0 za itanje
ili upis.

Slika 10. Pozicija device-select bita u adresnoj rei

13

Upisivanje u EEPROM
Postoje 2 naina upisa u serijski EEPROM 24c02:
- upisivanje pojedinanih bajtova
- upisivanje grupa bajtova
Upisivanje pojedinanih bajtova inicijalizuje START bit sa master kola.
Za njim slede device select bitna re (1010) i logika nula to znai da sledi
upisivanje. Deveti bit je ACK, bit potvrde.

Nakon potvrde, memorija eka na osmobitnu adresu, kojom se odreuje u


koju od 256 lokacija, u jednom od odabranih blokova, treba da upie bajt
podataka. Po prijemu adresnog bajta memorija opet odgovara bitom potvrde.
Master alje osam bita podataka a slave posle osmog bita odgovara bitom
potvrde. Master zavrava upisivanje slanjem STOP bita. Da bi se to vie
skratilo vreme potrebno za upisivanje vri se ciklino ispitivanje bita potvrde.
Drugim reima, po prijemu bajta adrese i bajta podatka, memorija se
iskljuuje sa BUS-a da bi izvrila interno upisivanje. To vreme iznosi
maksimalno 10ms za reim upisivanja pojedinanih bajtova. U stvarnosti je to
vreme znatno krae, pa se zato vri ciklino ispitivanje bita potvrde.
Upisivanje grupa bajtova na isti nain poinje bajtom za upis, adresom i
prvim bajtom iz grupe. Umesto generisanja STOP stanja, MASTER alje do 8
data bajtova koji su privremeno uskladiteni u bafreru ipa i koji e biti upisani
u memoriju nakon to MASTER poalje STOP bit.

Nakon svakog pristiglog bajta, tri najnia adresna pokazivaa svaki put se
uveavaju za jedan, dok pet viih ostaju nepromenjena. Ukoliko MASTER
poalje vie od 8 bajtova, broja adresa se vraa na poetno stanje i upisani
sadraj se brie.
14

Opte karakteristike mikrokontrolera


Mikrokontroleri su elektronske komponente namenjene konstruisanju
elektronskih sistema za digitalno upravljanje i nadzor. Pomou takvih sistema
mogue je upravljati razliitim eletronskim ureajima i sistemima, a takoe
vriti i prikupljanje i obradu razliitih elektrinih i neelektrinih veliina.
Digitalni sistemi zasnovani na mikrokontrolerima mogu se programirati da u
zavisnosti od stanja upravljanog kola izvravaju odreene obrade i na osnovu
rezultata tih obrada vre upravljanja u kolu.
Na poetku je veoma vano napomenuti koje su razlike izmeu
mikrokontrolera i mikroprocesora. Mikroprocesori su elektronske komponente
koje su namenjene razliitim vrstama obrade u digitalnim raunarima. Da bi se
mikroprocesor mogao koristiti u sistemima digitalnog upravljanja, potrebno ga
je povezati sa komponentama za memorisanje programa za obradu i podataka
nad kojima se ta obrada izvodi, kao i sa komponentama za interakciju sa
spoljnim svetom ulaznim i izlaznim ureajima. Na taj nain se dobija digitalni
sklop koji je dosta sloen i glomazan, te je stoga i dosta skup.
Za razliku od mikroprocesora, mikrokontroleri su projektovani tako da
objedine kompletan digitalni raunar na jednom ipu, jer osim procesora sadre
i memorijske i periferne jedinice. Tako se postie da eljeni sistem ima
minimalan broj komponenata, ime se tedi prostor i vreme potrebno za
konstruisanje ureaja.
U sadanje vreme na tritu postoji nekoliko velikih proizvoaa
mikrokontrolera koji u svom proizvodnom programu imaju najrazliitije
familije mikrokontrolera. Najpoznatiji od njih su Intel, Motorola, Atmel i
Microchip. Primene mikrokontrolera su veoma iroke, to je posledica njihove
osobine da sami zavisno od eljene namene moemo da isprogramiramo
kakvo e biti ponaanje digitalnog ureaja koji projektujemo.

15

Funkcionalne jedinice savremenih


mikrokontrolera
U zavisnosti od tipa, odnosno namene, savremeni mikrokontroleri mogu da
imaju sledee funkcionalne jedinice:

ROM memorija
RAM memorija
EEPROM memorija
Registri posebne namene (SFR registri)
Programski broja
Upravljaka jedinica
Aritmetiko logika jedinica
A/D konvertor
U/I portovi
Oscilator
Tajmeri
Sigurnosni tajmer Watchdog tajmer
Jedinica za napajanje

Mikrokontroleri mogu da imaju sve, ili samo neke od ovih funkcionalnih


jedinica. Svaka od ovih jedinica ima svoju tano definisanu funkciju, to je
opisano do kraja ovog poglavlja.

ROM memorija
U ROM memoriji smeten je program koji mikrokontroler izvrava, a
tokom normalnog rada sadraj ove memorije se ne moe menjati. ROM
memorija savremenih mikrokontrolera moe biti programabilna, pri emu se
jedan mikrokontroler moe programirati vie puta, ime se projektantu olakava
konstruisanje eljenog sklopa. Programabilni ROM uglavnom je EEPROM ili
Flash tipa, to zavisi od konkretnog mikrokontrolera. Sadraj ROM memorije
se ne menja nakon iskljuenja napona napajanja.

16

RAM memorija
Ova memorija ima funkciju privremenog pohranjivanja podataka,
meurezultata i konanih rezultata u toku izvoenja programa. Pristup ovoj
memoriji je proizvoljan moe se i itati i u nju upisivati podaci. RAM
memorija gubi svoj sadraj ukoliko se iskljui napajanje .

EEPROM memorija
Sadraj EEPROM memorije moe da se menja tokom rada, ali se nakon
iskljuivanja napajanja sadraj ne gubi, nego ostaje sauvan u memoriji. Kod
mikrokontrolera EEPROM se uglavnom koristi kao memorija za postavljanje
poetnih podataka neophodnih za rad.

Registri posebne namene SFR


Grupa SFR registara predstavlja skup registara koji imaju tano definisanu
namenu, a neophodni su za rad mikrokontrolera. Hardverski se realizuju kao
memorija RAM tipa. To su razni statusni i upravljaki registri, na primer
registar u kojem se definie da li e odreeni pinovi biti ulazni ili izlazni.

Programski broja
Ovo je registar u mikrokontroleru koji ima funkciju da u sebi uvek sadri
adresu memorijske lokacije u programskoj memoriji u kojoj se nalazi sledea
instrukcija programa koju treba izvriti, sem u sluaju da se trenutno izvrava
instrukcija skoka.

Upravljaka jedinica
Upravljaka jedinica ima funkciju da upravlja radom mikrokontrolera i
kontrolie izvravanje svih operacija. U sklopu ove jedinice se uglavnom nalazi
dekoder instrukcija i kontrolna logika koja na osnovu instrukcije koja se
trenutno izvrava ukljuuje odgovarajue upravljake signale.
17

Aritmetiko logika jedinica ALU


Sve operacije nad podacima se izvravaju u aritmetiko logikoj jedinici.
Zavisno od sloenosti i tipa arhitekture, mikrokontroler moe imati instrukcije
za jednostavnije ili sloenije aritmetike i logike operacije.
Aritmetiko logika jedinica je vrsto spregnuta sa akumulatorom.
Akumulator je jedan od SFR registara u kome se nalazi podatak nad kojim se
obavljaju sve operacije ALU.

A/D konvertor
Ovo je elektronski sklop koji ima ulogu da analognu ulaznu veliinu,
uglavnom napon, pretvori u njen digitalni ekvivalent u odgovarajuem
digitalnom kodu. Kod modernih mikrokontrolera ovi A/D konvertori su 8 bitni,
10 bitni ili 12 bitni. Jedan mikrokontroler moe da ima vie A/D konvertora.

U/I portovi
Funkcija U/I portova je da obezbede mikrokontroleru povezivanje sa
ostalim komponentama digitalnog sistema. Svaki od U/I portova ima dodeljeni
registar u kojem je smeten podatak koji se alje na port ili je primljen sa porta.
Zavisno od konkretne arhitekture, portovi mogu biti bit adresibilni, to znai da
se svakom bitu na portu moe dodeliti da li e biti ulazni ili izlazni.

Oscilator
Oscilator obezbeuje taktni signal odreenog oblika i frekvencije koji je
neophodan za dobru sinhronizaciju rada pojedinih komponenata u sistemu sa
mikrokontrolerom. Za dobar rad sistema neophodno je da takt signal bude
stabilne frekvencije i talasnog oblika, to se obezbeuje spoljnom
stabilizacijom, najee uz pomo kristala kvarca. Kod veine mikrokontrolera
interni takt signal sa kojim se sinhronizuju sve operacije dobija se deljenjem
frekvencije oscilatora nekim brojem koji je dobijen celobrojnim stepenovanjem
broja 2.
18

Tajmeri
Tajmeri su registri ije se stanje menja prilikom dovoenja impulsa na
njihov ulaz. Mogu se koristiti za merenje vremena izmeu dve pojave impulsa
na ulazu, ukoliko se pobuda dovodi iz internog oscilatora. Ukoliko je izvor
pobude izvan mikrokontrolera, tada se tajmer ponaa kao broja impulsa.

Watchdog tajmer (sigurnosni)


Watchdog je specijalni tajmer koji je projektovan tako da nakon nekog
vremenskog interval izaziva reset mikrokontrolera, ukoliko je omoguen. Reset
se deava svaki put kada doe do prekoraenja opsega ovog tajmera. Prilikom
normalnog izvravanja programa, posebnim instrukcijama povremeno se vri
postavljanje stanja ovog tajmera na poetnu vrednost inicijalizacija, te se na taj
nain ostvaruje da ne dolazi do reseta. Ukoliko iz bilo kog razloga program
upadne u mrtvu petlju, nee se izvravati instrukcije za inicijalizaciju Watchdog
tajmera, tako da e on da broji sve do prekoraenja i izazvae reset
mikrokontrolera i program e ponovo poeti da se izvrava od poetne
vrednosti.

Jedinica za napajanje
Ova jedinica kod veine mikrokontrolera sadri logiku koja proverava
kakvog je kvaliteta napajanje komponente, poto je za kvalitetan rad kola
neophodno stabilno napajanje dovoljne snage. Ova logika projektovana je tako
da u sluaju nekvalitetnog napajanja, tzv. brown out izazove reset
mikrokontrolera. Sem toga, u sastavu ove jedinice nalazi se i spoljni prikljuak
za reset, tako da se reset mikrokontrolera moe izvriti i izvan mikrokontrolera.

19

RISK procesori i HARVARD arhitektura


Osamdesetih godina prolog veka dolazi do pojave procesora poznatih pod
nazivom RISC procesori, ija je arhitektura neto pojednostavljena u odnosu na
do tada standardne procesore. Sam naziv RISC znai da su to procesori sa
smanjenim brojem instrukcija Reduced Instruction Set Components, dok je
filozofija projektovanja RISC procesora takva da se sa jedne strane postignu
bolje performanse pri obradi, a sa druge strane arhitektura uini vidljiva
softveru. Osnovne osobine RISC arhitektura su:
1. Instrukcije obavljaju primitivne operacije, tj jedna instrukcija moe da
obavlja samo jednu operaciju na registru ili memoriji.
2. Sve instrukcije koje pristupaju memoriji u cilju itanja sadraja lokacija,
proitane podatke smjetaju u registar, i obrnuto.
3. Veina RISC procesora ima razdvojena registarska polja za celobrojne i
podatke sa pokretnim zarezom.
4. Da bi se pojednostavilo dekodiranje instrukcija, sve instrukcije RISC
procesora su jednake duine.
5. Postavljanje markera uslova kod RISC procesora nije implicitno.

RISC procesori imaju pojednostavljenu arhitekturu, te je stoga smanjena i


povrina potrebna za realizaciju RISC procesora. Na taj nain je direktno
smanjen i broj potrebnih tranzistora u kolu, a i sama potronja. Sa druge strane,
ip sa manjim brojem tranzistora bre se projektuje, a i greke se lake mogu
uoiti i ispraviti. Prilikom proizvodnje, poto je ip manji, u jednom
proizvodnom ciklusu moe se proizvesti vei broj ipova.
RISC procesori imaju i odreene nedostatke, od kojih je najznaajniji taj da
se za obavljanje jedne operacije mora izvriti vei broj RISC instrukcija, to
povlai da je neophodno procesoru staviti na raspolaganje vie memorije i vie
internih registara.
20

Veina RISC procesora imaju protonu arhitekturu, u kojoj se izvoenje


jedne instrukcije obavlja u vie faza. Broj faza u obradi definisan je brojem
stepeni u protonom sistemu. Broj stepeni u protonom sistemu u uskoj je vezi
sa sloenou arhitekture RISC procesora i brzinom njegovog rada. Uglavnom
je kod veine protonih procesora karakteristino da su razdvojene faze
dobavljanja instrukcije iz memorije i njenog izvravanja.
Harvard arhitektura je jedan od naina realizacije RISC procesora koji ima
osobinu da se za pristup podacima i instrukcijama koriste razdvojene
memorijske komponente kojima se razdvojeno i pristupa. Pri tome je put za
pribavljanje instrukcija maksimalno iskoriten, dok se put za pribavljanje
podataka koristi samo kod operacija itanja i pisanja u memoriju. Na ovaj nain
se postie velika brzina rada, dok je potreban vei broj pinova za adrese i
podatke. Naravno, to je potrebno samo ako se radi o mikroprocesoru, dok kod
mikrokontrolera koji imaju memoriju unutar istog kuita ne dolazi do
poveanja broja pinova.

Memorija za
podatke

Podaci

Centralna
procesorska
jedinica

Instrukcije

Memorija za
program

Slika 11. Objanjenje Harvard arhitekture

RISC procesori se u dananje vreme mnogo vie koriste nego


konvencionalni CISC procesori u tzv. embedded sistemima u industriji
raznim kontrolerima u robotici, tampaima, grafikim kontrolerima itd.
Naravno, postoji i veliki broj mikrokontrolera koji su realizovani kao RISC
procesori. Dva osnovna razloga za ovakvu dominaciju su vea propusnost RISC
procesora nego CISC procesora na istom radnom taktu i to za veinu ovih
aplikacija ne postoji softver, pa je razvoj upravljakog sklopa bri sa RISC
procesorom.
21

MIKROKONTROLER PIC16F877
Mikrokontroler PIC16F877A predstavlja integraciju mikroprocesora
(CPU), memorije i periferija. Ovaj mikrokontroler je izraen u CMOS
tehnologiji sa ugraenim FLASH i EEPROM memorijama, za uvanje programa i podataka. PIC16F877A ima tipinu RISC arhtekturu (karakterie manjim
skupom instrukcija koje se bre izvavaju u odnosu na CISC arhitekturu). Ovaj
mikrokontroler poseduje veinu potrebnih periferija na samom ipu tako da je
podesan za aplikacije na jednom ipu. U ovom projektu koristiemo
mikrokontroler proizvoaa Microchip.
Moemo jo rei da koristi ISP (In System Programming) tehniku
programiranja, za iji programator je dovoljno realizovati manji sklop od tri
otpornika i imati vezu sa serijskim portom raunara. Takoe, kompatibilan je sa
ostalim mikrokontrolerima iz Microchip-ove familije u smislu instrukcijskog
seta i arhitekture, tako da je prelazak na bilo koji drugi njihov mikrokontroler
veoma jednostavan.
RISC arhitektura omoguuje odvojene magistrale 8-bitnih podataka i 14bitne programske memorije, pa je mogue da se pribavlja naredna instrukcija
dok se izvrava tekua (eng. pipelining). Sve instrukcije traju jednako (osim u
sluaju grananja programa) i zavre se za etiri ciklusa oscilatora. Dakle, ako je
oscilator kongurisan na 4 MHz, dobija se da ciklus instrukcije iznosi 1 s.
Kao to smo ranije napomenuli, veina dananjih mikrokontrolera je
bazirano na Harvard arhitekturi, koja jasno definie etiri osnovne komponente
potrebne za embedded sistem. To ukljuuje CPU jezgro, memoriju za program
(ROM, EPROM ili Flash memorija), memoriju za podatke (RAM), jedan ili
vie tajmera (podesive i watchdog tajmere), kao i I/O linije za komunikaciju sa
eksternim periferijama i dopunskim resursima sve to treba da bude smeteno u
jednom integrisanom kolu. U daljem tekstu detaljnije e biti opisani delovi od
kojih je sastavljen mikrokontroler PIC16F877A.

22

Jezgro mikrokontrolera PIC16F877 proizvodi se u 40-pinskom (DIP) ili u


44-pinskim kuitima (QFP i PLCC), Slike 12 i 13.

Slika 12. Fiziki izgled mikrokontrolera PIC 16F877 u 40-pinskom kuitu

Slika 13. Fiziki izgled mikrokontrolera PIC 16F877 u 44-pinskom kuitu

23

Na slikama 12. i 13, mogu se videti fiziki izgledi mikrokontrolera PIC16F877


u razliitim varijantama, dok je na slici 14. ilustrovan raspored pinova kod
pomenutog mikrokontrolera.

Slika 14. Raspored pinova kod mikrokontrolera PIC16F877 u kuitu DIP40

U narednim poglavljima bie rei o osnovnim karakteristikama


mikrokontrolera PIC16F877, o njegovoj arhitekturi sa odgovarajuom emom,
kao i o vrstama oscilatora koji se koriste kao izvor takta za dotini
mikrokontroler.

24

Osnovne karakteristike mikrokontrolera

RISC mikroprocesor visokih performansi


35 instrukcija obima jedne rei
Radna frekvencija do 20 MHz
Trajanje taktnog intervala 200 ns, pri frekvenciji 20 MHz
Opkd obima 14 bita
Harverski magacin sa osam nivoa
Tri naina adresiranja (direktno,indirektno i relativno)
Programska flash memorija kapaciteta 8 k X 14-bitnih rei
Memorije za podatke tipa RAM kapaciteta 368 X 8 bita
Memorije za podatke EEPROM tipa kapaciteta 256 X 8 bita
Prekidi (do 14 izvora prekida)
U/I portovi: A, B, C, D, E
Tri tajmera:
- Timer0 (TMR0): 8-bitni tajmer/broja_dogaaja
- Timer1 (TMR1): 16-bitni tajmer/broja_dogaaja
- Timer2 (TMR2): 8-bitni tajmer/broja_dogaaja
10-bitni 8-kanalni analogno-digitalni (A/D) konvertor
Serijska komunikacija: MSSP, USART
Paralelna komunikacija: PSP
Power-on Reset - reset pri ukljuenju napajanja (POR)
Power-up timer - unoenje kanjenja nakon ukljuenja napajanja
(PWRT)
Oscillator
Start-up Timer - unoenje
kanjenja
nakon
stabilizovanja radne frekvencije oscilatora (OST)
Sleep mode - reim rada sa malim utrokom energije
Watchdog tajmer sa sopstvenim integrisanim RC oscilatorom za
nezavisni rad
Izbor tipa oscilatora
Radni napon od 2V do 5.5V
Mala potronja energije: (<0.6 mA pri naponu od 3V i radnoj
frekvenciji od 4 MHz, 20A pri naponu od 3V i radnom taktu od
32kHz <1A u standby reimu rada).

25

Arhitektura mikrokontrolera
Kao to je istaknuto, mikrokontroler PIC16F877A poseduje tipinu
RISC arhitekturu, koja je prikazana na Sl.15. Arhitektura poseduje odvojene
magistrale za podatke i programski kd. Obim podataka je 8-bitni, dok je
programski kd 14-bitni. Mogue je protono izvrenje (pipelining). Sve
instrukcije su istog obima (osim instrukcija grananja) i izvavaju se za etiri
taktna intervala. Dakle, ukoliko se koristi oscilator od 20 MHz, ciklus
instrukcije traje 200 ns. Na Sl.15 prikazani su gradivni blokovi mikrokontrolera
PIC16F877A.

U prethodnim celinama reeno je da strukturu


PIC16F877A ini nekoliko celina:

mikrokontrolera

Aritmetiko-logika jedinica (ALU)


Akumulator (Working Register)
Hardverski magacin (Stack) organizivan u 8 nivoa
EEPROM memorija podataka obima 256 bajtova
Flash programska memorija 8 kilorei obima 14 bita
RAM (File Registers) 368 bajtova
Viekanalni A/D konvertor,
USART,
SPI interfejs,
I2C interfejs,
est U/I portova,
Tajmere itd.

26

Slika 15. Arhitektura mikrokontrolera PIC16F877A

27

Organizacija memorije mikrokontrolera


Memorija mikrokontrolera PIC16F877A je organizovan u sledee tri
celine:
Programska memorija (FLASH)
Memorija podataka (RAM)
EEPROM memorija podataka.

U mikrokontroleru postoji i magacin (stack), koji radi na principu


ciklinog bafera, to znai da se u njega mogu staviti osam razliitih adresa,
dok se sa upisom devete adrese brie prva i tako redom. Programski se ne
moe utvrditi da li je dolo do prepunjeja magacina.

- Programska memorija (FLASH)


U mikrokontroler PIC16F877A integrisan je trinaestobitni programski
broja (PC) koji je u mogunosti da adresira 8K programskih rei od 14
bita. Izvravanje programa poinje od Reset vektora, a prekidni (interrupt)
vektor je 0x0004. Mapa programske memorije i magacin su prikazani na
Slici 14.

- Memorija podataka (RAM)


Memorija podataka je podeljena u vie banki (banks), a ine je registri
opte namene (General Purpose Registers) i registri specijalne funkcije
(Special Function Registers). U jednom od specijalnih registara, tzv.
STATUS registru postoje dva bita RP1 i RP0 koji slue za izbor eljene
banke podataka.

28

Slika 16. Mapa programske memorije i magacin (stack)


Svaka banka moe da sadri do 128 registara (0x7F). Nie lokacije u banci
zauzimaju specijalni registri, a ostatak prostora popunjavaju registri opte
namene implementirani kao statiki RAM. Neki specijalni registri koji se
esto koriste mapirani su u sve banke da bi se omoguio brzi pristup i redukcija
kda. Mapa registara mikrokontrolera PIC16F877 prikazana je na Slici 17.
Nekoliko specijalnih registara su registri jezgra, uskopovezani sa funkcionisanjem mikroprocesora kontrolera. Ostali registri su vezani za periferne module i
slue za njihovo upravljanje i kontrolu statusa.
Programski broja (PC) je 13-bitni registar i odreuje adresu naredne
instrukcije u programskoj flash memoriji. Simboliko ime nieg bajta je PCL i
to je registar u koji se moe i upisivati i iitavati. Viih pet bita programskog
brojaa (PC) smeteni su u izolovani registar PCH kojem se pristupa samo
preko latch-a PCLATH, mapiranom u internom RAM-u na ad-resi 0x0A.
STATUS registar je veoma vaan i zato je predvieno da se moe
adresirati iz bilo koje banke. On pokazuje status aritmetiko-logike jedinice,
reset status mikrokontrolera i sadri bite za selekciju banki internog RAM-a.
Od navedenih flegova posebno treba izdvojiti Zero bit (Z), koji se postavlja kad
je rezultat aritmetike operacije jednak nuli i bit prenosa/pozajmice Carry (C).
29

Registar OPTION_REG se koristi za konguraciju preskalera za tajmer 0


ili Watchdog, za upravljanje tajmerom 0, selekciju ivice okidanja eksternog
interapta, te za omoguenje Pull-up otpornika na portu B.
INTCON
je
registar
za
manipulisanje
sistemom prekida
mikrokontrolera. Pored bita za omoguenje svih prekida (GIE) i bita za
omoguenje perifernih prekida (PEIE), u ovom registru su interapt-egovi i
biti omoguenja prekida tajmera 0, spoljanjeg prekida na pinu RB0/INT i
prekida porta B na promenu stanja. Osim ova tri osnovna prekida postoji jo
11 periferijskih prekida. Bitovi za njihovo omoguenje nalaze se u registrima
PIE1 i PIE2, a korespondentni egovi, vesnici interapta, u registrima PIR1 i
PIR2. Ovi se egovi setuju im se ispuni uslov interapta bez obzira na stanje
njihovog bita omoguenja, a po izvrenju servis rutine potrebno ih je soverski
resetovati.
Kada je re o registrima jezgra ne treba zaboraviti par FSR (File Select
Register) i INDF (Indirect File), koji slue za indirektno adresiranje memorije
podataka. Bilo koja instrukcija koja se obraa INDF registru, u stvari,
indirektno pristupa onoj lokaciji internog RAM-a ija je adresa trenutno u
registru FSR.
Konano, treba spomenuti registar PCON (Power Control Register). U
PIC16F877 ovaj registar sadri samo dva bita. Pomou bita POR detektuje se
razlika izmeu Power-on reseta i reseta izazvanih drugim uzrokom. Drugi
bit (BOR) slui kao indikacija Brown-out stanja (nedozvoljeni naponski nivoi u
napajanju mikrokontrolera), zbog kojeg se takoe moe desiti reset.

30

- EEPROM memorija podataka


Kada je potrebno da se upamte neki parametri (podaci) i posle prestanka
napajanja mikrokontrolera, treba ih, prethodno, zapisati u interni EEPROM.
Ova memorija je obima 256 bajtova.

Slika 17. Mapa registara mikrokontrolera PIC16F877

31

Oscilator
Kod mikrokontrolera PIC16F877A postoje etiri konfiguracije oscilatora:

RC
XT
LP
HS

Resistor/Capacitor
Crystal / Resonator
Low Power Crystal
High Speed Crystal / Resonator.

Najjednostavnija varijanta je RC oscilator, a to je ilustrovano na Sl.18.


Ovakav pristup je ispravan u aplikacijama u kojima se ne zahteva precizna
procena vremenskih intervala. Ovde emo naglasiti kako je mogue koristiti i
interni RC oscilator, koji je integrisan u mikrokontroleru.

Slika 18. Povezivanje eksternog RC oscilatora


Frekvencija oscilovanja zavisi ne samo od vrednosti Rext i Cext, ve i od
napona napajanja kao i radne temperature. Vrednost otpornika Rext treba da
bude u opsegu od 3 K do 100K K. Izvan ovog opsega rad oscilatora nije
stabilan i osetljiv je na spoljane uticaje. Kondenzator Cext se moe ak i
izostaviti. Meutim, zbog stabilnosti preporuuje se vrednost oko 20pF. Na pinu
OSC2/CLKOUT generie se taktni impuls ija je perioda etiri puta vea od
periode rada oscilatora.

32

Kod vremenski kritinih aplikacija treba ugraivati kvarcni oscilator ili


keramiki rezonator. Vrednosti kondenzatora C1 i C2 (Sl.19.), treba da budu
identine.

Slika 19. Povezivanje eksternog kvarca (LP, XT, HS)

Mikrokontroleru PIC16F877A moe da se dovede i spoljanji takt, to je


prikazano na Sl. 20.

Slika 20. Dovoenje spoljanjeg takta

Odnos izmeu takta i instrukcijskog ciklusa


Takt koji se dovodi na pin OSC1 oscilatora u mikrokontroleru deli se na
etiri vremenski nepre-klapajua taktna signala nazvana Q1, Q2, Q3 i Q4.
Skup ovih signala ine jedan instrukcijski cik-lus . U zavisnosti od trenutka
generisanja u okviru ciklusa instrukcija, taktni signali Q1-Q4 se koriste za
sledee namene:
Q1 - pribavljanje instrukcije iz programske memorije
Q2 - dekodiranje naredbe iz prethodnog instrukcijskog ciklusa
Q3 - izvrenje naredbe iz prethodna dva instrukcijska ciklusa
Q4 - prenos opkda naredbe pozvane u Q1 u instrukcijski registar.
33

Portovi
PIC16F877A poseduje pet portova (PORTA, PORTB, PORTC, PORTD i
PORTE) i oni pred-tavljaju vezu njegove interne strukture sa spoljanjim
svetom. Svaki od njih moe da se konfigurie kao ulazni ili kao izlazni.
Pomenuti portovi su razliitog obima:

8-pinski (PORTB, PORTC, PORTD)


6-pinski (PORTA)
3-pinski (PORTE).

Svakom pinu bilo kojeg porta, u zavisnosti od reima rada, mogu da se


dodele fiksne ili promen-ljive funkcije. Konfiguracija smera prenosa ostvaruje
se upisom na odgovarajuu bit-poziciju u pripa-dajuem TRIS registru (0 - pin
je izlazni, 1 pin je ulazni).
Svakom portu je dodeljen registar podataka (PORTX), preko kojeg se
programski pristupa U/I pinovima. Upis u neki od tih registara inicirae upis u
latch tog porta, a njegovo itanje rezultirae ita-njem logikih stanja direktno
sa pinova. Sve instrukcije upisivanja su tipa read-modify-write . To znai da se
pri upisu u port najpre oitaju stanja pinova, zatim izvri modifikacija, a
potom korigovana vrednost upie u latch porta. Ne postoji velika razlika u
konstrukciji pomenutih pet portova. Jedino se PortB od ostalih razlikuje zbog
posebne opcije koju nude etiri MSB. Ukoliko se setuje bit RBIE u registru
INTCON, svaka promena stanja na ovim pinovima, generisae prekid
mikrokontrolera.

PortA
PortA je 6-bitni (RA5-RA0) bidirekcioni port (podaci mogu da se alju u
oba smera). Sadraj re-gistra TRISA odreuje smer (ulazni ili izlazni) pinova na
portu. Blok-dijagrami za pin RA4 je prikazan na Sl. 21 i 22, dok su u tabeli
21.a) prikazane funkcije portaA i registri.

34

Slika 21. Blok-dijagram pina RA4

Sada emo kroz nekoliko primera ilustrovati postavljanje smerova na portu:


TRISA = 0b000000 (PORTA je izlazni)
TRISA = 0b111111 (PORTA je ulazni)
TRISA = 0b101000 (RA5 i RA3 pinovi su ulazni, a RA4, RA2, RA1 i
RA0 su izlazni)
TRISA = 0b111000 (RA5-RA3 su ulazni, a RA2-RA0 su izlazni) itd.

Tabela 21a). Funkcije PortaA i registri

35

Slika 22. Blok-dijagram pinova RA5, RA3-RA0

PortA ima mogunost analogno-digitalne konverzije i prvenstveno se


koristi u te svrhe. A/D kon-vertor, koji je integrisan u mikrokontroleru, je 10bitni sa 8 ulaznih kanala, jer se u ove svrhe koriste i svi pinovi PortaE (i pinovi
PortaA izuzev RA4).
Pin RA4 je sa otvorenim drejnom i moe da se iskoristi za ulazni takt za
tajmer TMR0.

Port B
Port B je 8-bitni bidirekcioni port. Svakom pinu porta korespondira
odgovarajui bit u regis-tru TRISB, kojim se definie smer. Svi pinovi unutar
PortB poseduju pull-up otpornike. Ovi otpor-nici mogu da se ukljue
jednim kontrolnim bitom. To se postie postavljanjem RBPU' bita na 0.
Pull-up otpornici se automatski iskljuuju kada se pin konfigurie kao izlazni.
Otpornici su isklju-eni i kod Power-on reseta.
etiri pina na PORTB (RB7-RB4) imaju mogunost generisanja prekida.
Samo pinovi koji su definisani kao ulazni mogu da prouzrokuju prekid.
36

Kombinacija prekida na promenu stanja PortaB i pull-up otpornik mogu se


iskoristiti kao jednostavan interfejs za tastaturu. Na slikama 23. i 24. prikazana
je struktura PORTB.

Slika 23. Blok-dijagram pinova RB3-RB0

Slika 24. Blok-dijagram pinova RB7-RB4


37

Tabela 24.a) Funkcije PortaB i registri

Port C
Port C je 8-bitni bidirekcioni port. Posebnost ovog porta se ogleda u tome
to poseduje ugraen USART modul, koji slui za serijsku komunikaciju
(npr. sa racunarom ili drugim mikrokontro-lerom). Modulu se pristupa preko
pinova RC7 i RC6. Pinove treba softverski konfigurisati da budu u funkciji
USART modula.
Na Slikama 25. i 26. prikazana je struktura PortaC, dok je funkcionalna
tabela registara koji se koriste za konfigurisanje samog porta data u Tabeli
26.a).

Slika 25. Blok-dijagram pinova RC7-RC5, RC2-RC0


38

Slika 26. Blok-dijagram pinova RC7-RC5, RC2-RC0

Tabela 26.a) Funkcije PortaC i registri

39

Portovi D i E
Port D je 8-bitni bidirekcioni port. Ovaj port moe da se konfigurie kao 8bitni paralelni mikro-procesorski port (parallel slave port-PSP) i to
podeavanjem konfiguracionog bita PSPMOTE (TRISC<4>). U ovom reimu
rada ulazni bafer je TTL tipa.
Port E je bidirekcioni veliine 3 bita. Ima mogunost A/D konverzije.
Ulazni bafer je tipa Schmitt Trigger. Pinovi mogu da se konfiguriu kao
digitalni ili analogni, kao i u sluaju PortaA, o emu je ve bilo rei.

Periferijske jedinice
Mikrokontroler PIC16F877 poseduje nekoliko korisnih periferijskih
modula. S obzirom da mikro-kontroler treba da razmenjuje podatke sa ostalim
komoponentama (registrima, memorijama, drugim mikrokontrolerima itd.) u tu
svrhu je opremljen sa tri hardverska komunikaciona modula.
Prvi od njih je SSP modul (Synchronous Serial Port), koji slui za
komunikaciju sa serijskim EEPROM-ima, pomerakim registrima, displejdrajverima itd. Ovaj modul moe da radi u jednom od dva reima:
Serial Peripheral Interface (SPI)
Inter-Integrated Circuit (I2C).
Drugi serijski komunikacioni modul je USART (Universal Synchronous
Asynchronous Receiver Transmiter). On uglavnom slui za povezivanje sa
personalnim raunarom, mada to nije jedina njegova mogunost primene.
USART moe da se konfigurie u neki od sledeih reima rada:
Asinhroni rad (full duplex)
Sinhroni master rad (half duplex)
Sinhroni slave rad (half duplex).
Osim serijskih, postoji i jedan paralelni komunikacioni modul. U
pitanju je modul PSP (Pa-rallel Slave Port). Njegov zadatak je da PIC16F877
direktno povee na 8-bitnu magistralu podataka drugog mikroprocesora.
Eksterni mikroprocesor tada, preko linija Read (RD) i Write (WR) moe da
ita i upisuje u registar PortD kao u svaki drugi 8-bitni latch.
40

Realizacija projektnog zadatka


Na Slici 27 je prikazana blok ema, dok je na Slici 28 prikazana elektrina
ema veze mikrokontrolera PIC16F877 i serijskog EEPROM-a 24C02.

Slika 27. Blok ema sprege mikrokontrolera i seijskog EEPROM -a

41

D8

1 N 58 1 9

IK 1
1

V in

V o ut
G nd

1
2

L M78 0 5
C3

C4

1 00 n F

C2

C1

C10
1 00 n F

2 20 u F

1 00 n F

1 00 n F

2 20 u F

C9

C8
1 00 n F

R1

R2

1 0K

1 0K

MA X 23 2

CN1
16
15
14
13
12
11
10
9

1
6
2
7
3
8
4
9
5
C7
2 20 n F

D B 9 /F

R3
1 0K

TT1

IK 2

S1
1
2

C11
1 00 n F
IK 3
1
C1+
V cc
2
V+
Gn d
3
C1T1o u t
4
C2+
R 1 in
5
C 2 - R 1 ou t
6
VT1i n
7
T2o u t T2i n
8
R 2 in R 2 ou t

R4

4
3
S W DI P -2

R5
2K2
2K2
D2
LED

D1
LED

C5
2 7p F

Qu 1

C6

4 MH z

R6

2 7p F

1 0K

R7
1 0K

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

M C LR P B 7
PA0
PB6
PA1
PB5
PA2
PB4
PA3
PB3
PA4
PB2
PA5
PB1
RD
PB0
WR
VDD
CS
VSS
VDD
PD7
VSS
PD6
OSC 1 PD5
OSC 2 PD4
PC0
PC7
PC1
PC6
PC2
PC5
PC3
PC4
PD0
PD3
PD1
PD2

40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21

P IC 1 6 F8 7 7 -0 4

IK 4

IK 5
A0
A1
NC
GND
2 4C 0 2

1
2
3

J1

VC C
WP
SCL
SDA

A0
A1
NC
GND
2 4C 0 2

R8
VC C
WP
SCL
SDA

2K2

R9
2K2

D3
5V1

D4
5V1

Slika 28. Elektrina ema sprege mikrokontrolera i seijskog EEPROM-a

Inae, mikrokontroler ima takt od 4MHz i napaja se preko standardnog


stabilizatora napona LM7805 (V out = 5V0,1V, Imax = 500mA).
Komunikacija izmeu mikrokontrolera i raunara ostvaruje se preko
interfejsnog kola MAX232N. Komunikacija je bez handshaking-a.
Uloga diode D8 je zatita pogrenog prikljuivanja napona napajanja.
Tasterom TT1 se resetuje mikrokontroler.
Na samoj ploici je omogueno programiranje serijskog EEPROM-a i to se
ostvaruje preko serijskog porta raunara. Zener diodama se prilagoavaju
naponski nivoi.
Za definisanje reima rada koriste se DIPSW2 prekidai, a kao indikacija
reima koriste se crvene LED i zelena LED sa malom potronjom (low-power).
O ovome e detaljnije biti rei u poglavlju Laboratorijska veba.
42

Spisak komponenti:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

Designator

Part Type

Footprint

R1
R2
R3
R4
R5
R6
R7
C1
C2
C3
C4
C5
C6
C7
C8
C9
C10
C11
Y1
D1
D2
D3
D4
D5
IK1
IK2
IK3
IK4
DC
DB9F
TT1
DIPSW2
LC8
LC8
LC40
J2

2K2, Carbon Film Resistor, 0.25W, 5%


2K2, Carbon Film Resistor, 0.25W, 5%
10K, Carbon Film Resistor, 0.25W, 5%
10K, Carbon Film Resistor, 0.25W, 5%
10K, Carbon Film Resistor, 0.25W, 5%
2K2, Carbon Film Resistor, 0.25W, 5%
2K2, Carbon Film Resistor, 0.25W, 5%
220uF, Electrolytic Capacitor 16V
100nF, Polyester Block Capacitor, 5%
220uF, Electrolytic Capacitor 16V
100nF, Polyester Block Capacitor, 5%
27pF, Multilayer Ceramic Capacitor, 5%
27pF, Multilayer Ceramic Capacitor, 5%
220nF, Polyester Block Capacitor, 5%
100nF, Polyester Block Capacitor, 5%
100nF, Polyester Block Capacitor, 5%
100nF, Polyester Block Capacitor, 5%
100nF, Polyester Block Capacitor, 5%
Quartz HC-49U, 4MHz, 20ppm, 20pF
L-53LRD, Red Diffused LED
L-53LYD, Green diffused LED
Zener Diode 5V1
Zener Diode 5V1
Shottkey Diode 1n5819
LM7805, Linear voltage regulator, 5V
PIC16F877A, Microcontroller
MAX232, Driver/Receiver for EIA/TIA-232E
Serial EEPROM 24C02
YDJ-1134, Power Jack
DB9F PCB, DB9 Connector
Tact switch TS-062
Switch DIP2
Low_cost Socket DIP-8
Low_cost Socket DIP-8
Low_cost/Professional Socket DIP-40
Pin_Header/F 1x3

AXIAL0.4
AXIAL0.4
AXIAL0.4
AXIAL0.4
AXIAL0.4
AXIAL0.4
AXIAL0.4
RB.1/.2
RAD0.2
RB.1/.2
RAD0.2
RAD0.1
RAD0.1
RAD0.2
RAD0.2
RAD0.2
RAD0.2
RAD0.2
XTAL1
D0.1
D0.1
AXIAL0.3
AXIAL0.3
AXIAL0.3
TO-126
DIP40
DIP16
DIP8
POWER3
DB9RA/F
SW-4
DIPSW2
DIP8
DIP8
DIP40
PH3/F

Tabela 27. Spisak komponenata za kolo sa Sl.7.1


Legenda:
Carbon Film Resistor
Carbon Trimmer Potentiometer
Electrolytic Capacitor
Polyester Block Capacitor
Multilayer Ceramic Capacitor

Ugljenoslojni otpornik
Ugljenoslojni potenciometar
Elektrolitski kondenzator
Poliesterski blok kondenzator
Keramiki kondenzator through hole
43

Quartz
Red Diffused LED
Yellow diffused LED
Linear voltage regulator
Microcontroller
Driver/Receiver
Power Jack
Switch
Tact switch
Low_cost/Professional Socket
Pin_Header/F

Kristal kvarca
Crvena difuzna LED dioda
uta difuzna LED dioda
Linearni regulator napona
Mikrokontroler
Drajver/prijemnik
Konektor (dek) za napajanje
Prekida
Taster
Jeftino/profesionalno podnoje
Pin-letvica (muka)

Slika 29. Izgled tampane ploe

44

Slika 29a: Realizovani ureaj

45

Program u mikroC-u
unsigned short i=0, j=0, k;
void main() {
TRISA = 0b000011;
PORTA = 0;
ADCON1 = 6;
delay_ms(1000);
PORTA.F3 = !PORTA.F0;
PORTA.F2 = !PORTA.F1;

//Definisanje pinova Porta A

// Nacin paljenja LED.

i.F0 = !PORTA.F1;
i.F1 = !PORTA.F0;
// Inicijalizacija USART terminala
Usart_init(2400);
Usart_Write(i);
Soft_I2C_Config(&PORTD, 1, 0); // Inicijalizacija USART terminala
Soft_I2C_Start();
// Pocetak upisa
Soft_I2C_Write(0xA2);
// Adresa 24C02
Soft_I2C_Write(i);
// Pocetna lokacija
while ((j < 10)&& (i!=0)) {

Soft_I2C_Write(2*i+j);
Usart_Write(2*i+j);
j++;
}
Soft_I2C_Stop();
j=0;
if (i==0) {
delay_ms(100);
while (j < 32) {
Soft_I2C_Start();
Soft_I2C_Write(0xA2);
Soft_I2C_Write(j);
Soft_I2C_Stop();
Soft_I2C_Start();

// Citanje lokacije EEPROM-a


// Adresa 24C02

46

Soft_I2C_Write(0xA3);
k = Soft_I2C_Read(0);
Usart_Write(k);
Soft_I2C_Stop();
j++;

// Citanje

}
delay_ms(100);
Usart_Write(j-1);
j=0;

}
}//~!

Napomena:
Koriena je gotova I2C biblioteka iz kompajlera mikroC.

Program u asembleru
; ADDRESS OPCODE
ASM
; ---------------------------------------------$0000 $28F8
GOTO _main
$0004 $
_Delay_1us:
;delays.c,7 ::
void Delay_1us() {
;delays.c,8 ::
Delay_us(1);
$0004 $0000
NOP
;delays.c,9 ::
}
$0005 $0008
RETURN
$0006 $
_PutZerosToLAT:
$0006 $0804
MOVF FSR, 0
$0007 $1303
BCF STATUS, RP1
$0008 $1283
BCF STATUS, RP0
$0009 $00AA
MOVWF
PutZerosToLAT_k_L0
$000A $0820
MOVF ___porti2c, 0
$000B $0084
MOVWF
FSR
$000C $1384
BCF FSR, 7
$000D $0800
MOVF INDF, 0
$000E $00A9
MOVWF
PutZerosToLAT_temp_L0
$000F $10A9
BCF FLOC_PutZerosToLAT+0, ____sdai2c
$0010 $1029
BCF FLOC_PutZerosToLAT+0, ____scli2c
$0011 $0829
MOVF PutZerosToLAT_temp_L0, 0
47

$0012 $0080
MOVWF
INDF
$0013 $082A
MOVF PutZerosToLAT_k_L0, 0
$0014 $0084
MOVWF
FSR
$0015 $0008
RETURN
$0016 $
_Usart_Write:
$0016 $
L_Usart_Write_3:
$0016 $3000
MOVLW
0
$0017 $1303
BCF STATUS, RP1
$0018 $1683
BSF STATUS, RP0
$0019 $1898
BTFSC
TXSTA, 1
$001A $3001
MOVLW
1
$001B $00F1
MOVWF
STACK_1
$001C $0871
MOVF STACK_1, 0
$001D $3A00
XORLW
0
$001E $1D03
BTFSS STATUS, Z
$001F $2822
GOTO L_Usart_Write_4
$0020 $0000
NOP
$0021 $2816
GOTO L_Usart_Write_3
$0022 $
L_Usart_Write_4:
$0022 $1283
BCF STATUS, RP0
$0023 $0824
MOVF FARG_Usart_Write+0, 0
$0024 $0099
MOVWF
TXREG
$0025 $0008
RETURN
$0026 $
_Soft_I2C_Start:
$0026 $1303
BCF STATUS, RP1
$0027 $1283
BCF STATUS, RP0
$0028 $0820
MOVF ___porti2c, 0
$0029 $0084
MOVWF
FSR
$002A $1383
BCF STATUS, 7
$002B $1480
BSF INDF, ____sdai2c
$002C $2004
CALL _Delay_1us
$002D $1400
BSF INDF, ____scli2c
$002E $2004
CALL _Delay_1us
$002F $2006
CALL _PutZerosToLAT
$0030 $1080
BCF INDF, ____sdai2c
$0031 $2004
CALL _Delay_1us
$0032 $2006
CALL _PutZerosToLAT
$0033 $1000
BCF INDF, ____scli2c
$0034 $0008
RETURN
$0035 $
_Soft_I2C_Write:
$0035 $3008
MOVLW
8
$0036 $1303
BCF STATUS, RP1
$0037 $1283
BCF STATUS, RP0
$0038 $00A5
MOVWF
Soft_I2C_Write_temp_L0
$0039 $01A6
CLRF Soft_I2C_Write_r_L0, 1
$003A $0820
MOVF ___porti2c, 0
$003B $0084
MOVWF
FSR
$003C $1383
BCF STATUS, 7
$003D $
L_Soft_I2C_Write_0:
$003D $0825
MOVF Soft_I2C_Write_temp_L0, 0
48

$003E $1903
BTFSC
STATUS, Z
$003F $285A
GOTO L_Soft_I2C_Write_1
$0040 $2004
CALL _Delay_1us
$0041 $2004
CALL _Delay_1us
$0042 $2006
CALL _PutZerosToLAT
$0043 $1000
BCF INDF, ____scli2c
$0044 $2004
CALL _Delay_1us
$0045 $0824
MOVF FARG_Soft_I2C_Write+0, 0
$0046 $1903
BTFSC
STATUS, Z
$0047 $2848
GOTO L_Soft_I2C_Write_2
$0048 $
L_Soft_I2C_Write_2:
$0048 $2006
CALL _PutZerosToLAT
$0049 $0DA4
RLF FARG_soft_i2c_write+0, F
$004A $1C03
BTFSS STATUS, 0
$004B $284F
GOTO l_018
$004C $1784
BSF FSR, 7
$004D $1480
BSF INDF, ____sdai2c
$004E $2851
GOTO l_01C
$004F $
l_018:
$004F $1784
BSF FSR, 7
$0050 $1080
BCF INDF, ____sdai2c
$0051 $
l_01C:
$0051 $0000
NOP
$0052 $2004
CALL _Delay_1us
$0053 $1400
BSF INDF, ____scli2c
$0054 $1384
BCF FSR, 7
$0055 $1C00
BTFSS INDF, ____scli2c
$0056 $2855
GOTO $-1
$0057 $1784
BSF FSR, 7
$0058 $03A5
DECF Soft_I2C_Write_temp_L0, 1
$0059 $283D
GOTO L_Soft_I2C_Write_0
$005A $
L_Soft_I2C_Write_1:
$005A $01A6
CLRF Soft_I2C_Write_r_L0, 1
$005B $2004
CALL _Delay_1us
$005C $2006
CALL _PutZerosToLAT
$005D $0000
NOP
$005E $1000
BCF INDF, ____scli2c
$005F $2004
CALL _Delay_1us
$0060 $1480
BSF INDF, ____sdai2c
$0061 $2004
CALL _Delay_1us
$0062 $2004
CALL _Delay_1us
$0063 $0826
MOVF Soft_I2C_Write_r_L0, 0
$0064 $1903
BTFSC
STATUS, Z
$0065 $2866
GOTO L_Soft_I2C_Write_3
$0066 $
L_Soft_I2C_Write_3:
$0066 $1400
BSF INDF, ____scli2c
$0067 $1384
BCF FSR, 7
$0068 $1C00
BTFSS INDF, ____scli2c
$0069 $2868
GOTO $-1
$006A $01A6
CLRF FLOC_soft_i2c_write+1
49

$006B $2004
CALL _Delay_1us
$006C $1384
BCF FSR, 7
$006D $1880
BTFSC
INDF, ____sdai2c
$006E $1426
BSF FLOC_soft_i2c_write+1, 0
$006F $2004
CALL _Delay_1us
$0070 $2004
CALL _Delay_1us
$0071 $2004
CALL _Delay_1us
$0072 $2004
CALL _Delay_1us
$0073 $2004
CALL _Delay_1us
$0074 $2004
CALL _Delay_1us
$0075 $2004
CALL _Delay_1us
$0076 $2004
CALL _Delay_1us
$0077 $2006
CALL _PutZerosToLAT
$0078 $1784
BSF FSR, 7
$0079 $1000
BCF INDF, ____scli2c
$007A $1080
BCF INDF, ____sdai2c
$007B $0826
MOVF Soft_I2C_Write_r_L0, 0
$007C $00F0
MOVWF
STACK_0
$007D $0008
RETURN
$007E $
_Soft_I2C_Stop:
$007E $1303
BCF STATUS, RP1
$007F $1283
BCF STATUS, RP0
$0080 $0820
MOVF ___porti2c, 0
$0081 $0084
MOVWF
FSR
$0082 $1383
BCF STATUS, 7
$0083 $2006
CALL _PutZerosToLAT
$0084 $1080
BCF INDF, ____sdai2c
$0085 $2004
CALL _Delay_1us
$0086 $1400
BSF INDF, ____scli2c
$0087 $1384
BCF FSR, 7
$0088 $1C00
BTFSS INDF, ____scli2c
$0089 $2888
GOTO $-1
$008A $1784
BSF fsr, 7
$008B $2004
CALL _Delay_1us
$008C $2004
CALL _Delay_1us
$008D $2004
CALL _Delay_1us
$008E $2004
CALL _Delay_1us
$008F $1480
BSF INDF, ____sdai2c
$0090 $2004
CALL _Delay_1us
$0091 $0008
RETURN
$0092 $
_Soft_I2C_Read:
$0092 $3008
MOVLW
8
$0093 $1303
BCF STATUS, RP1
$0094 $1283
BCF STATUS, RP0
$0095 $00A5
MOVWF
Soft_I2C_Read_temp_L0
$0096 $01A6
CLRF Soft_I2C_Read_r_L0, 1
$0097 $0820
MOVF ___porti2c, 0
$0098 $0084
MOVWF
FSR
$0099 $1383
BCF STATUS, 7
$009A $
L_Soft_I2C_Read_4:
50

$009A $0825
MOVF Soft_I2C_Read_temp_L0, 0
$009B $3C00
SUBLW
0
$009C $1803
BTFSC
STATUS, C
$009D $28B4
GOTO L_Soft_I2C_Read_5
$009E $2004
CALL _Delay_1us
$009F $0000
NOP
$00A0 $1480
BSF INDF, ____sdai2c
$00A1 $2004
CALL _Delay_1us
$00A2 $0826
MOVF Soft_I2C_Read_r_L0, 0
$00A3 $1903
BTFSC
STATUS, Z
$00A4 $28A5
GOTO L_Soft_I2C_Read_6
$00A5 $
L_Soft_I2C_Read_6:
$00A5 $1400
BSF INDF, ____scli2c
$00A6 $1384
BCF FSR, 7
$00A7 $1C00
BTFSS INDF, ____scli2c
$00A8 $28A7
GOTO $-1
$00A9 $1880
BTFSC
INDF, ____sdai2c
$00AA $1403
BSF STATUS, C
$00AB $1C80
BTFSS INDF, ____sdai2c
$00AC $1003
BCF STATUS, C
$00AD $0DA6
RLF FLOC_soft_i2c_read+1, F
$00AE $2004
CALL _Delay_1us
$00AF $2006
CALL _PutZerosToLAT
$00B0 $1784
BSF FSR, 7
$00B1 $1000
BCF INDF, ____scli2c
$00B2 $03A5
DECF Soft_I2C_Read_temp_L0, 1
$00B3 $289A
GOTO L_Soft_I2C_Read_4
$00B4 $
L_Soft_I2C_Read_5:
$00B4 $1480
BSF INDF, ____sdai2c
$00B5 $2004
CALL _Delay_1us
$00B6 $0824
MOVF FARG_Soft_I2C_Read+0, 0
$00B7 $1903
BTFSC
STATUS, Z
$00B8 $28BA
GOTO L_Soft_I2C_Read_7
$00B9 $2006
CALL _PutZerosToLAT
$00BA $
L_Soft_I2C_Read_7:
$00BA $0824
MOVF FARG_soft_i2c_read+0, W
$00BB $1903
BTFSC
STATUS, 2
$00BC $28BE
GOTO L_07C
$00BD $1080
BCF INDF, ____sdai2c
$00BE $
L_07C:
$00BE $0000
NOP
$00BF $2004
CALL _Delay_1us
$00C0 $1400
BSF INDF, ____scli2c
$00C1 $1384
BCF FSR, 7
$00C2 $1C00
BTFSS INDF, ____scli2c
$00C3 $28C2
GOTO $-1
$00C4 $1784
BSF FSR, 7
$00C5 $2004
CALL _Delay_1us
$00C6 $2006
CALL _PutZerosToLAT
$00C7 $1000
BCF INDF, ____scli2c
51

$00C8 $2004
CALL _Delay_1us
$00C9 $2006
CALL _PutZerosToLAT
$00CA $1080
BCF INDF, ____sdai2c
$00CB $0826
MOVF Soft_I2C_Read_r_L0, 0
$00CC $00F0
MOVWF
STACK_0
$00CD $0008
RETURN
$00CE $
GlobalIniI2C:
$00CE $3000
MOVLW
0
$00CF $1303
BCF STATUS, RP1
$00D0 $1283
BCF STATUS, RP0
$00D1 $00A1
MOVWF
_i+0
$00D2 $3000
MOVLW
0
$00D3 $00A2
MOVWF
_j+0
$00D4 $0008
RETURN
$00D5 $
_Usart_Init:
$00D5 $1303
BCF STATUS, RP1
$00D6 $1683
BSF STATUS, RP0
$00D7 $1698
BSF TXSTA, 5
$00D8 $3090
MOVLW
144
$00D9 $1283
BCF STATUS, RP0
$00DA $0098
MOVWF
RCSTA
$00DB $1683
BSF STATUS, RP0
$00DC $1787
BSF TRISC, 7
$00DD $1307
BCF TRISC, 6
$00DE $
L_Usart_Init_0:
$00DE $1283
BCF STATUS, RP0
$00DF $1E8C
BTFSS PIR1, 5
$00E0 $28E4
GOTO L_Usart_Init_1
$00E1 $081A
MOVF RCREG, 0
$00E2 $00A8
MOVWF
Usart_Init_tmp_L0
$00E3 $28DE
GOTO L_Usart_Init_0
$00E4 $
L_Usart_Init_1:
$00E4 $0008
RETURN
$00E5 $
_Soft_I2C_Init:
$00E5 $1303
BCF STATUS, RP1
$00E6 $1283
BCF STATUS, RP0
$00E7 $0824
MOVF FARG_Soft_I2C_Init+0, 0
$00E8 $0084
MOVWF
FSR
$00E9 $0800
MOVF INDF, 0
$00EA $00A5
MOVWF
Soft_I2C_Init_temp_L0
$00EB $10A5
BCF FLOC_Soft_I2C_Init+0, ____sdai2c
$00EC $1025
BCF FLOC_Soft_I2C_Init+0, ____scli2c
$00ED $0825
MOVF Soft_I2C_Init_temp_L0, 0
$00EE $0080
MOVWF
INDF
$00EF $1784
BSF FSR, 7
$00F0 $0804
MOVF FSR, 0
$00F1 $00A0
MOVWF
___porti2c
$00F2 $1480
BSF INDF, ____sdai2c
$00F3 $1400
BSF INDF, ____scli2c
$00F4 $1384
BCF FSR, 7
52

$00F5 $1C00
BTFSS INDF, ____scli2c
$00F6 $28F5
GOTO $-1
$00F7 $0008
RETURN
$00F8 $
_main:
;I2C.c,3 ::
void main() {
;I2C.c,4 ::
TRISA = 0b000011;
//Definisanje pinova Porta A
$00F8 $20CE
CALL GlobalIniI2C
$00F9 $3003
MOVLW
3
$00FA $1683
BSF STATUS, RP0
$00FB $0085
MOVWF
TRISA
;I2C.c,5 ::
PORTA = 0;
$00FC $1283
BCF STATUS, RP0
$00FD $0185
CLRF PORTA, 1
;I2C.c,6 ::
ADCON1 = 6;
$00FE $3006
MOVLW
6
$00FF $1683
BSF STATUS, RP0
$0100 $009F
MOVWF
ADCON1
;I2C.c,7 ::
delay_ms(1000);
$0101 $3006
MOVLW
6
$0102 $00FC
MOVWF
STACK_12
$0103 $30FF
MOVLW
255
$0104 $00FB
MOVWF
STACK_11
$0105 $30FF
MOVLW
255
$0106 $00FA
MOVWF
STACK_10
$0107 $0BFC
DECFSZ
STACK_12, F
$0108 $290A
GOTO $+2
$0109 $2911
GOTO $+8
$010A $0BFB
DECFSZ
STACK_11, F
$010B $290D
GOTO $+2
$010C $2910
GOTO $+4
$010D $0BFA
DECFSZ
STACK_10, F
$010E $290D
GOTO $-1
$010F $290A
GOTO $-5
$0110 $2907
GOTO $-9
$0111 $301A
MOVLW
26
$0112 $00FB
MOVWF
STACK_11
$0113 $30FF
MOVLW
255
$0114 $00FA
MOVWF
STACK_10
$0115 $0BFB
DECFSZ
STACK_11, F
$0116 $2918
GOTO $+2
$0117 $291B
GOTO $+4
$0118 $0BFA
DECFSZ
STACK_10, F
$0119 $2918
GOTO $-1
$011A $2915
GOTO $-5
$011B $3042
MOVLW
66
$011C $00FA
MOVWF
STACK_10
$011D $0BFA
DECFSZ
STACK_10, F
$011E $291D
GOTO $-1
;I2C.c,8 ::
PORTA.F3 = !PORTA.F0; // Nacin paljenja LED.
$011F $3001
MOVLW
1
53

$0120 $1283
$0121 $1805
$0122 $3000
$0123 $00F0
$0124 $3000
$0125 $1870
$0126 $3008
$0127 $0605
$0128 $3908
$0129 $0685
;I2C.c,9 ::
$012A $3001
$012B $1885
$012C $3000
$012D $00F0
$012E $3000
$012F $1870
$0130 $3004
$0131 $0605
$0132 $3904
$0133 $0685
;I2C.c,11 ::
$0134 $3001
$0135 $1885
$0136 $3000
$0137 $00F0
$0138 $3000
$0139 $1870
$013A $3001
$013B $0621
$013C $3901
$013D $06A1
;I2C.c,12 ::
$013E $3001
$013F $1805
$0140 $3000
$0141 $00F0
$0142 $3000
$0143 $1870
$0144 $3002
$0145 $0621
$0146 $3902
$0147 $06A1
;I2C.c,14 ::
$0148 $3067
$0149 $1683
$014A $0099
$014B $1518
$014C $20D5
;I2C.c,15 ::

BCF STATUS, RP0


BTFSC
PORTA, 0
MOVLW
0
MOVWF
STACK_0
MOVLW
0
BTFSC
STACK_0, 0
MOVLW
8
XORWF
PORTA, 0
ANDLW
8
XORWF
PORTA, 1
PORTA.F2 = !PORTA.F1;
MOVLW
1
BTFSC
PORTA, 1
MOVLW
0
MOVWF
STACK_0
MOVLW
0
BTFSC
STACK_0, 0
MOVLW
4
XORWF
PORTA, 0
ANDLW
4
XORWF
PORTA, 1
i.F0 = !PORTA.F1;
MOVLW
1
BTFSC
PORTA, 1
MOVLW
0
MOVWF
STACK_0
MOVLW
0
BTFSC
STACK_0, 0
MOVLW
1
XORWF
_i, 0
ANDLW
1
XORWF
_i, 1
i.F1 = !PORTA.F0;
MOVLW
1
BTFSC
PORTA, 0
MOVLW
0
MOVWF
STACK_0
MOVLW
0
BTFSC
STACK_0, 0
MOVLW
2
XORWF
_i, 0
ANDLW
2
XORWF
_i, 1
Usart_init(2400);
MOVLW
103
BSF STATUS, RP0
MOVWF
SPBRG
BSF TXSTA, BRGH
CALL _Usart_Init
Usart_Write(i);
54

$014D $0821
MOVF _i, 0
$014E $00A4
MOVWF
FARG_Usart_Write+0
$014F $2016
CALL _Usart_Write
;I2C.c,16 ::
Soft_I2C_Config(&PORTD, 1, 0); // Inicijalizacija USART terminala
$0150 $3008
MOVLW
PORTD
$0151 $00A4
MOVWF
FARG_Soft_I2C_Init+0
$0152 $20E5
CALL _Soft_I2C_Init
;I2C.c,17 ::
Soft_I2C_Start();
// Pocetak upisa
$0153 $2026
CALL _Soft_I2C_Start
;I2C.c,18 ::
Soft_I2C_Write(0xA2);
// Adresa 24C02
$0154 $30A2
MOVLW
162
$0155 $00A4
MOVWF
FARG_Soft_I2C_Write+0
$0156 $2035
CALL _Soft_I2C_Write
;I2C.c,19 ::
Soft_I2C_Write(i);
// Pocetna lokacija
$0157 $0821
MOVF _i, 0
$0158 $00A4
MOVWF
FARG_Soft_I2C_Write+0
$0159 $2035
CALL _Soft_I2C_Write
;I2C.c,21 ::
while ((j < 10)&& (i!=0)) {
$015A $
L_main_0:
$015A $300A
MOVLW
10
$015B $0222
SUBWF
_j, 0
$015C $1803
BTFSC
STATUS, C
$015D $2982
GOTO L_main_1
$015E $0821
MOVF _i, 0
$015F $3A00
XORLW
0
$0160 $1903
BTFSC
STATUS, Z
$0161 $2982
GOTO L_main_1
$0162 $
L64_ex_L_main_1:
;I2C.c,24 ::
Soft_I2C_Write(2*i+j);
$0162 $3001
MOVLW
1
$0163 $00F4
MOVWF
STACK_4
$0164 $0821
MOVF _i, 0
$0165 $00F0
MOVWF
STACK_0
$0166 $0874
MOVF STACK_4, 0
$0167 $
L_main_7:
$0167 $1903
BTFSC
STATUS, Z
$0168 $296D
GOTO L_main_8
$0169 $0DF0
RLF STACK_0, 1
$016A $1070
BCF STACK_0, 0
$016B $3FFF
ADDLW
255
$016C $2967
GOTO L_main_7
$016D $
L_main_8:
$016D $0822
MOVF _j, 0
$016E $0770
ADDWF
STACK_0, 0
$016F $00A4
MOVWF
FARG_Soft_I2C_Write+0
$0170 $2035
CALL _Soft_I2C_Write
;I2C.c,25 ::
Usart_Write(2*i+j);
$0171 $3001
MOVLW
1
$0172 $00F4
MOVWF
STACK_4
$0173 $0821
MOVF _i, 0
55

$0174 $00F0
MOVWF
STACK_0
$0175 $0874
MOVF STACK_4, 0
$0176 $
L_main_9:
$0176 $1903
BTFSC
STATUS, Z
$0177 $297C
GOTO L_main_10
$0178 $0DF0
RLF STACK_0, 1
$0179 $1070
BCF STACK_0, 0
$017A $3FFF
ADDLW
255
$017B $2976
GOTO L_main_9
$017C $
L_main_10:
$017C $0822
MOVF _j, 0
$017D $0770
ADDWF
STACK_0, 0
$017E $00A4
MOVWF
FARG_Usart_Write+0
$017F $2016
CALL _Usart_Write
;I2C.c,27 ::
j++;
$0180 $0AA2
INCF _j, 1
;I2C.c,28 ::
}
$0181 $295A
GOTO L_main_0
$0182 $
L_main_1:
;I2C.c,29 ::
Soft_I2C_Stop();
$0182 $207E
CALL _Soft_I2C_Stop
;I2C.c,31 ::
j=0;
$0183 $01A2
CLRF _j, 1
;I2C.c,32 ::
if (i==0) {
$0184 $0821
MOVF _i, 0
$0185 $3A00
XORLW
0
$0186 $1D03
BTFSS STATUS, Z
$0187 $29C4
GOTO L_main_4
;I2C.c,33 ::
delay_ms(100);
$0188 $3082
MOVLW
130
$0189 $00FB
MOVWF
STACK_11
$018A $30FF
MOVLW
255
$018B $00FA
MOVWF
STACK_10
$018C $0BFB
DECFSZ
STACK_11, F
$018D $298F
GOTO $+2
$018E $2992
GOTO $+4
$018F $0BFA
DECFSZ
STACK_10, F
$0190 $298F
GOTO $-1
$0191 $298C
GOTO $-5
$0192 $3087
MOVLW
135
$0193 $00FA
MOVWF
STACK_10
$0194 $0BFA
DECFSZ
STACK_10, F
$0195 $2994
GOTO $-1
$0196 $0000
NOP
;I2C.c,35 ::
while (j < 32) {
// Citanje lokacije EEPROM-a
$0197 $
L_main_5:
$0197 $3020
MOVLW
32
$0198 $0222
SUBWF
_j, 0
$0199 $1803
BTFSC
STATUS, C
$019A $29B1
GOTO L_main_6
56

;I2C.c,36 ::
Soft_I2C_Start();
$019B $2026
CALL _Soft_I2C_Start
;I2C.c,37 ::
Soft_I2C_Write(0xA2);
// Adresa 24C02
$019C $30A2
MOVLW
162
$019D $00A4
MOVWF
FARG_Soft_I2C_Write+0
$019E $2035
CALL _Soft_I2C_Write
;I2C.c,38 ::
Soft_I2C_Write(j);
$019F $0822
MOVF _j, 0
$01A0 $00A4
MOVWF
FARG_Soft_I2C_Write+0
$01A1 $2035
CALL _Soft_I2C_Write
;I2C.c,39 ::
Soft_I2C_Stop();
$01A2 $207E
CALL _Soft_I2C_Stop
;I2C.c,40 ::
Soft_I2C_Start();
$01A3 $2026
CALL _Soft_I2C_Start
;I2C.c,41 ::
Soft_I2C_Write(0xA3);
$01A4 $30A3
MOVLW
163
$01A5 $00A4
MOVWF
FARG_Soft_I2C_Write+0
$01A6 $2035
CALL _Soft_I2C_Write
;I2C.c,42 ::
k = Soft_I2C_Read(0);
// Citanje
$01A7 $01A4
CLRF FARG_Soft_I2C_Read+0, 1
$01A8 $2092
CALL _Soft_I2C_Read
$01A9 $0870
MOVF STACK_0, 0
$01AA $00A3
MOVWF
_k
;I2C.c,43 ::
Usart_Write(k);
$01AB $0870
MOVF STACK_0, 0
$01AC $00A4
MOVWF
FARG_Usart_Write+0
$01AD $2016
CALL _Usart_Write
;I2C.c,44 ::
Soft_I2C_Stop();
$01AE $207E
CALL _Soft_I2C_Stop
;I2C.c,45 ::
j++;
$01AF $0AA2
INCF _j, 1
;I2C.c,47 ::
}
$01B0 $2997
GOTO L_main_5
$01B1 $
L_main_6:
;I2C.c,48 ::
delay_ms(100);
$01B1 $3082
MOVLW
130
$01B2 $00FB
MOVWF
STACK_11
$01B3 $30FF
MOVLW
255
$01B4 $00FA
MOVWF
STACK_10
$01B5 $0BFB
DECFSZ
STACK_11, F
$01B6 $29B8
GOTO $+2
$01B7 $29BB
GOTO $+4
$01B8 $0BFA
DECFSZ
STACK_10, F
$01B9 $29B8
GOTO $-1
$01BA $29B5
GOTO $-5
$01BB $3087
MOVLW
135
$01BC $00FA
MOVWF
STACK_10
$01BD $0BFA
DECFSZ
STACK_10, F
$01BE $29BD
GOTO $-1
$01BF $0000
NOP
57

;I2C.c,49 ::
Usart_Write(j-1);
$01C0 $0322
DECF _j, 0
$01C1 $00A4
MOVWF
FARG_Usart_Write+0
$01C2 $2016
CALL _Usart_Write
;I2C.c,50 ::
j=0;
$01C3 $01A2
CLRF _j, 1
;I2C.c,53 ::
}
$01C4 $
L_main_4:
;I2C.c,54 ::
}//~!
$01C4 $29C4
GOTO $

Heksadecimalni kd
:10000000F828FF3FFF3FFF3F0000080004080313EC
:100010008312AA002008840084130008A900A910F4
:100020002910290880002A088400080000300313E2
:10003000831698180130F1007108003A031D222838
:100040000000162883122408990008000313831265
:100050002008840083138014042000140420062048
:1000600080100420062000100800083003138312BB
:10007000A500A601200884008313250803195A2827
:100080000420042006200010042024080319482816
:100090000620A40D031C4F288417801451288417B0
:1000A00080100000042000148413001C55288417BD
:1000B000A5033D28A601042006200000001004200E
:1000C00080140420042026080319662800148413D1
:1000D000001C6828A601042084138018261404201C
:1000E00004200420042004200420042004200620EE
:1000F0008417001080102608F000080003138312F4
:100100002008840083130620801004200014841328
:10011000001C882884170420042004200420801454
:1001200004200800083003138312A500A60120084C
:10013000840083132508003C0318B4280420000021
:100140008014042026080319A52800148413001C19
:10015000A72880180314801C0310A60D0420062075
:1001600084170010A5039A2880140420240803197A
:10017000BA28062024080319BE2880100000042095
:1001800000148413001CC2288417042006200010C9
:100190000420062080102608F00008000030031319
:1001A0008312A1000030A2000800031383169816E2
:1001B00090308312980083168717071383128C1EC2
:1001C000E4281A08A800DE28080003138312240874
:1001D00084000008A500A5102510250880008417BC
:1001E0000408A000801400148413001CF5280800E3
:1001F000CE200330831685008312850106308316D6
:100200009F000630FC00FF30FB00FF30FA00FC0BC3
:100210000A291129FB0B0D291029FA0B0D290A298E
58

:1002200007291A30FB00FF30FA00FB0B18291B29A5
:10023000FA0B182915294230FA00FA0B1D29013052
:10024000831205180030F0000030701808300506E1
:1002500008398506013085180030F000003070182C
:100260000430050604398506013085180030F00099
:1002700000307018013021060139A106013005183F
:100280000030F00000307018023021060239A1065B
:100290006730831699001815D5202108A400162070
:1002A0000830A400E5202620A230A4003520210833
:1002B000A40035200A302202031882292108003ABE
:1002C000031982290130F4002108F0007408031991
:1002D0006D29F00D7010FF3F672922087007A400F8
:1002E00035200130F4002108F000740803197C293E
:1002F000F00D7010FF3F762922087007A400162029
:10030000A20A5A297E20A2012108003A031DC4290D
:100310008230FB00FF30FA00FB0B8F299229FA0B89
:100320008F298C298730FA00FA0B9429000020309D
:1003300022020318B1292620A230A4003520220869
:10034000A40035207E202620A330A4003520A4015F
:1003500092207008A3007008A40016207E20A20A34
:1003600097298230FB00FF30FA00FB0BB829BB292C
:10037000FA0BB829B5298730FA00FA0BBD2900001D
:100380002203A4001620A201C429FF3FFF3FFF3F24
:02400E00313D42
:00000001FF

Softver IC-Prog
Za programiranje mikrokontrolera PIC16F877A moe da se koristi softver
IC-Prog. Inae, ovaj softver je kompatibilan sa mnogim bootstrap loader-ima,
kao to su JDM Programmer, TAFE Programmer, TAIT Programmer,
Conquest Programmer, ProPIC 2 Programmer itd. ICProg poseduje
mogunost itanja, upisa i verifikacije (Read, Write, Verify) sadraja
mikrokontrolera. Naravno, softver dozvoljava mogunost podeavanja
parametara (WDT, PWRT, BODEN, LVP, CPD, CO, Debugger), kao i izbor
oscilatora (RC, LP, XT, HS).
Program IC-Prog se ne instalira na raunaru, ve se pokree direktno
tanije, klikom na fajl ICPROG.EXE (Sl. 30).

Slika 30. Startovanje programa


59

Ako programer ima raunar sa verzijom Windows-a viom od


Windows-a 98, odmah po startovanju progra-ma IC-Prog na ekranu e se
pojaviti prozor sa upozorenjem, koji je prikazan na Slika 31. Razlog je to su
kod svih Windows-a sa platformom NT zatieni portovi. Zbog toga je
neophodno da se instalira odgovarajui drajver.

Slika 31. Upozorenje prilikom pokretanja programa


Korak 1. Instaliranje drajvera
Ulaskom u podmeni Misc, koji se nalazi u meniju Options, ostvaruje se
instaliranje/ukljuivanje drajvera icprog.sys (Settings Options Misc:
Enable 2000/NT/XP), to je ilustrovano na Slika 32. Na taj nain omoguava se
pristup serijskom portu raunara. Isto tako, neophodno je da se prioritet
programiranja postavi ili na High ili na Realtime, a nikako na Normal. Ovo
potonje je veoma bitno. Naime, program po startovanju automatski podesi
normalan prioritet i ukoliko se ne promeni na High ili Realtime, raunar ne
moe da pristupi PIC mikrokontrolerima preko serijskog porta.

60

Slika 32 Ukljuivanje drajvera i prioriteta

Slika 33. Podeavanje parametara programa

61

Korak 2. Podeavanje hardverskih parametara


Nakon to je instaliran/ukljuen drajver, program e se restartovati i
ponudie opciju podeavanja hardverskih parametara, koji treba da budu
postavljeni kao na Slika 33. Ic-Prog ima slinu konfiguraciju kao JDM
Programmer, signali su bez inverzije dok se komunikacija obavlja preko, na
primer, serijskog porta COM2. Ako raunar ima samo jedan serijski port,
podrazumeva se da je to COM1.

Softver mikroC
mikroC predstavlja moan softverski alat, koji je razvila beogradska
Mikroelektronika, i namenjen je pisanju kda za Microchip-ove PIC
mikrokontrolere. Koristei mikroC, programeru je omoguen jednostavan nain
da kontrolie proces programiranja i napravi kvalitetan firmware.
Osnovne karakteristike programa mikroC su sledee:

Pisanje C kda korienjem kvalitetnog editora, to se ogleda


automatskom kontrolom i upozorenjima vezanim za sintaksu kda,
korienih parametara, kao i automatskoj korekciji pojedinih greaka
Preglednost strukture programa (kda), promenljivih i funkcija
omoguava Code explorer
Jasan asemblerski kd i standardna kompatibilnost generisanih HEX
datoteka toka programa preko ugraeg debagera (debugger)
Programer ima na raspolaganju veliki broj integrisanih biblioteka i
rutina, koje znaajno ubrzavaju pisanje programa
Detaljan izvetaj i grafiko predstavljanje RAM i ROM mape,
statistike kda i slino.

Moramo da napomenemo kako mikroC odstupa od ANSI standarda u


nekoliko segmenata. Neka odstupanja su nainjena su u cilju da se olaka
programiranje, dok su druge rezultat hardverskih ogranienja PIC
mikrokontrolera. Pomenuemo neke specifinosti:
Rekurzivne funkcije (function recursion) su podrane sa izvesnim
ogranienjima, koja su posledica neto sloenijeg pristupa magacinu
(stack) i ogranienja vezana za memoriju
Pokazivai (pointers) promenljivih i pokazivai konstanti nisu
kompatibilni, tj. nije mogua meusobna dodela ili uporeivanje
mikroC tretira oznaavanje const kao true constans (kod C++),
to omoguava kori-enje const objekta na mestima gde ANSIC
62

oekuje constant izraz .Ukoliko se tei ka prenosivosti programa,


treba koristiti tradicionalno pretprocesorsko definisanje konstanti
mikroC dozvoljava C++ stil jednolinijskih komentara, koristei dve
kose crte (//). Komentar moe da pone bilo gde i traje do sledee
nove linije programskog kda
Brojne standardne C biblioteke (ctype, math, stdlib, string )
implementirane su u mikroC, uz individualna odstupanja.
Napominjemo da mikroC podrava gotovo sve PIC mikrokontrolere serija
12, 16 i 18. Izuzetak su mikrokontroleri koji imaju staro hardversko jezgro kao
na primer PIC12C508, PIC12F508, PIC12C509, PIC12F509 itd. Inae, ograniena verzija (do 2KB programa) moe da s preuzme sa sajta Mikroelektronike
(www.mikroe.com). U sliaju ako se eli potpuna verzija (neogranien kapacitet
programa), mora da se plati licenca od 99.

UART terminal

Slici 34. Pokretanje terminala mikroC-a preko Tools USART Terminal


Na Slici 34 ilustrovano je startovanje internog (softverskog) terminala za
UART komunikaciju.
Na Slici 35 je prikazan izgled prozora UART terminala. Kao to se vidi,
mogue je podesiti veliki broj parametara. Naveemo najvanije:
63

Serijski port (u padajuem meniju treba izabrati eljeni serijski port, a


kod standardnih raunara to su COM1 i COM2)
Brzina prenosa (za frekvenciju kvarca od 4MHz treba izabrati 2400
bauda, za 8MHz bira se 9600 bauda itd.)
Broj stop bitova (1, 1.5 i 2)
Izbor parnosti (bez, parna, neparna itd.)
Broj bitova koji ine karakter (5, 6, 7 ili 8)
Ukljuivanje/iskljuivanje handshaking signala (RTS i DTR)
Izbor formata podatka koji se alje (ASCII, heksadecimalni - HEX ili
dekadni - DEC)
Nain slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd.

Slika 35. Izgled prozora kod UART komunikacionog terminala


im se podese parametri, terminal se startuje klikom na komandno dugme
Connect. Odmah zatim, terminal je spreman da prihvati komande (vidi Sliku
36). Kada se zavri komunikacija, treba kliknuti na komandno dugme
Disconnect.

64

Laboratorijska veba
(I)

Podesiti parametre USART terminala (COM1, 2400bauda, One Stop Bit )


Startovati program terminala pritiskom na komandno dugme Connect:
Postaviti DIPSW2 prekidae u iskljueno stanje (stanje 01 ili Off_On).
Dovesti napajanje mikrokontroleru, odnosno ureaju.
Posle jedne sekunde treba da se upali samo uta LED na tampanoj ploi.
Na ekranu e se pojaviti povorka osmobitnih rei:
prva re ini poetnu adresu sa koje poinje upis (0x01), zatim sadraj na
toj memorijskoj lokaciji (0x02), zatim se upisuje sadraj susedne
memorijske lokacije (0x03) itd. Ukupno se upisuje 10 osmobitnih rei u
deset susednih memorijskih lokacija, to je ilustrovano na Slici 36.
Pritiskom na taster TT1, mikrokontroler se resetuje i on poinje da
izvrava program iznova.
Iskljuiti napajanje ureaja, iskljuiti USART terminal na komandno
dugme Disconnect.

Slika 36. Prozor USART terminala (DIPSW2 = 01)


65

Prebaciti serijski EEPROM 24C02 u donje podnoje, koje je blie


konektoru DB9F.
Startovati program IC-Prog, klikom na ikonicu.
Izabrati memoriju 24C02 kao to je prikazano na Slici 37.
Pritiskom na taster F8 proitati sadraj memorije (ovo moe da se uradi
i iz Command menija).
Na Slici 38 je prikazan sadraj memorije.
Obrisati memoriju na naina ilustrovan na Slikama 39-40 (uitati
blank.hex fajl i programirati pritiskom na taster F5). Brisanje moe da
se obavi i na drugi nain, tj. uitavanjem sadraja praznog bafera (npr.
Buffer 2).

Slika 37. Izbor memorije 24C02 u programu IC-Prog


66

Slika 38. Sadraj memorije 24C02 za DIPSW2 = 01

Slika 39. Fajl blank.hex se uitava iz File menija


67

Slika 40. Sadraj prozora posle koga treba pritisnuti F5 za programiranje

(II)

Podesiti parametre USART terminala (COM1, 2400bauda, One Stop Bit )


Startovati program terminala pritiskom na komandno dugme Connect:
Postaviti DIPSW2 prekidae u iskljueno stanje (stanje 11 ili On_On).
Dovesti napajanje mikrokontroleru.
Posle dve sekunde treba da se upale obe diode.
Na ekranu e se pojaviti povorka osmobitnih rei:
prva re ini poetnu adresu sa koje poinje upis (0x03), zatim sadraj na
toj memorijskoj lokaciji (0x06), zatim se upisuje sadraj susedne
memorijske lokacije (0x07) itd. Ukupno se upisuje 10 osmobitnih rei u
deset memorijskih lokacija (Slika 41).
Iskljuiti napajanje ureaja, iskljuiti USART terminal na komandno
dugme Disconnect.
68

Prebaciti serijski EEPROM 24C02 u donje podnoje, koje je blie


konektoru DB9F.
Startovati program IC-Prog, klikom na ikonicu.
Izabrati memoriju 24C02 kao to je prikazano na Slici 37.
Pritiskom na taster F8 proitati sadraj memorije (ovo moe da se uradi
i iz Command menija).
Na Slici 8 je prikazan sadraj memorije.
Obrisati memoriju na naina ilustrovan na Slikama 39-40 (uitati fajl
blank.hex i programirati pritiskom na taster F5).

Slika 41.. Prozor USART terminala (DIPSW2 = 11)

69

Slika 42. Sadraj memorije 24C02 za DIPSW2 = 11

Napomena:
Posle svake operacije upisa serijskog EEPROM-a i provere sadraja,
vriti brisanje EEPROM-a 24C02.

(III)
Ponoviti postupak za stanja DIPSW2 = 10 . Treba da se dobije sadraj
serijskog EEPROM-a, kao na Slici 42.

70

Slika 42. Sadraj memorije 24C02 za DIPSW2 = 10

(iv)
Prebaciti serijski EEPROM 24C02 u donje podnoje, koje je blie
konektoru DB9F.
Startovati program IC-Prog i u njemu proizvoljno upisati sadraj prvih 20
memorijskih lokacija serijskog EEPROM-a.
Postaviti DIPSW2 prekidae u iskljueno stanje (stanje 00 ili Off_Off).
Startovati program USART terminal.
Dovesti napajanje mikrokontroleru, odnosno ureaju.
Posle jedne sekunde ne treba da se upale diode.
Na ekranu e se pojaviti povorka od 20 osmobitnih rei koje su upisane
programom IC-Prog.
Proces je ilustrovan na slikama 43 i 44. Na Slici 44 su povorka
osmobitnih rei zapoinje prvom (0x00), a zavrava se krajnjom adresom
(0x19).
71

Slika 43. Sadraj memorije 24C02 posle proizvoljnog programiranja

72

Slika 44.. Prozor USART terminala (DIPSW2 = 00)

Zakljuak
U radu smo se bavili praktinom realizacija upisa i itanja sadraja serijskog
EEPROM-a preko mikrokontrolera PIC16F877-04 i softvera IC-Prog.
Najpre smo opisali serijsku komunikaciju kod PC raunara, koja je u ovom
sluaju ostvarena preko kola MAX232 koje prilagoava naponske nivoe
izmeu serijskog porta raunara i mikrokontrolera.
U treem poglavlje je opisan serijski EEPROM 24C02, uz odgovarajue
slike samog kola i njegove karakteristike.
U etvrtom poglavlju opisane su opte karakteristike mikrokontrolera, dok
peto i esto poglavlje opisuje funkcionalne jedinice mikrokontrolera, RISK
procesore, kao i HARVARD arhitekturu.
73

Poglavlja 7, 8, 9 i 10 vezana su konkretno za mikrokontroler koji je


iskorien za ovaj projekat (PIC16F877-04).
Zatim su prikazane blok ema i elektrina ema ureaja koji predstavlja
spregu mikrokontrolera PIC16F877-04 i serijskog EEPROM-a 24C02.
Na kraju je opisan postupak izvoenja laboratorijske vebe, gde studenti
mogu da se upoznaju sa nainom upisa i iitavanja sadraja serijskog
EEPROM-a.

Literatura
[1] PIC16F87X, Datasheet, Microchip Tecnology, http://www.microchip.com
[2] 24C0xx, Serial EEPROM, http://datasheetarchive.com
[3] Serijska komunikacija raunara i USART modula mikrokontrolera

PIC16F877A, Dejan Lazi, Ivan Novakovi, Elektronski fakultet - Ni,


(seminarski rad), http://es.elfak.ni.ac.yu/students.html
[4] Softver mikroC, Mikroelektronika - Beograd, http://mikroe.com
[5] IC-Prog, Version 1.05, http://www.ic-prog.com
[6] Serijski EEPROM, http://www.mikroe.com/sr/tools/eeprom
[7] Mikrokontroleri, http://milan.milanovic.org/skola/mikkon/mikkon-06.htm

74

Ime
Prezime
Datum roenja
Brano stanje
Adresa stanovanja
E-mail adresa
Obrazovanje
Stepen strune spreme
Godina upisa na
Elektronski fakultet
Smer
Poznavanje jezika
Poznavanje softvera

Darko
Prvulovi
08.05.1982.
Neoenjen
. A. Kuna 13/9, Bor
darko019@gmail.com
Mainsko-elektrotehnika kola - Bor
IV stepen, elektrotehniar elektronike
2001.

Interesovanja

Mobilne komunikacije i mobilna telefonija, beini


linkovi, kablovska televizija

Osobine
Ostalo

Ambicioznost, temeljnost, tanost...


Vie puta uesnik okrunih takmienja iz
matemetike u osnovnoj i srednjoj koli, lan FK
Bor (1990-1996)

Telekomunikacije (T)
Engleski (napredno)
MS Office, CorelDRAW, Windows okruenje,
Adobe Photoshop, ACDSee

75

Ime
Prezime
Datum roenja
Brano stanje
Adresa stanovanja
E-mail adresa
Obrazovanje
Stepen strune spreme
Godina upisa na
Elektronski fakultet
Smer
Poznavanje jezika
Poznavanje softvera
Interesovanja

Osobine
Ostalo

Ivan
Truci
15.02.1977.
Neoenjen
Vojvode Miia 17
trucic@gmail.com
Tehnika kola Zajear
IV stepen, Elektrotehniar automatike
1997.
Telekomunikacije (T)
Engleski (napredno)
Windows operativni sistem, Microsoft
Office, Adobe Photoshop
Elektronika, programiranje, mobilne
komunikacije, satelitske komunikacije,
fotografija, sport
Istrajnost, samouverenost, komunikativnost
Uesnik takmienja iz matematike u
osnovnoj i srednjoj koli, aktivno bavljenje
sportom(odbojka i koarka)
76

77

You might also like