You are on page 1of 77

UNIVERZITET U NIŠU

ELEKTORNSKI FAKULTET
KATEDRA ZA ELEKTRONIKU

Programiranje i iščitavanje sadržaja


serijskog EEPROM-a pomoću
mikrokontrolera PIC16F877

Studenti:
Darko Prvulović 10610
Ivan Trucić 9264

Mentor:
Mile K. Stojčev, prof. dr.

1
Sadržaj

Uvod.................................................................................3
Serijska komunikacija – RS232.......................................4
Serijski EEPROM...........................................................10
Opšte 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 vežba......................................................65
Zaključak........................................................................73
Literatura........................................................................74
Kraće biografije autora...................................................75

dodatak: Data sheet

2
Uvod
Osnovna ideja ovog projekta je praktična realizacija upisa i čitanja sadržaja
serijskog EEPROM-a uz pomoć mikrokontrolera PIC16F877A.
U drugom poglavlju ukratko je objašnjena serijska komunikacija na PC
računarima, koja je u ovom slučaju realizovana uz pomoć kola MAX232 koje
ima ulogu prilagođenja između serijskog porta računara i samog uređaja.
Treće poglavlje opisuje serijski EEPROM 24C02 uz odgovarajuće slike
samog kola i karakteristike.
U četvrtom poglavlju opisane su opšte 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 iskorišćen za ovaj projekat (PIC16F877).
7. poglavlje opisuje pomenuti mikrokontroler, a prikazan je i njegov fizički
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 način instalacije programa Icprog, microC i podešavanje
parametara UART terminala.
Laboratorijska vežba je detaljno opisana u osamnaestom poglavlju, da bi
na kraju izveli zaključak i dali spisak literature korišćene prilikom izrade ovog
projekta. Priložene su i kratke biografije autora projekta.
Uz projekat su priloženi izvodi data sheet-ova serijskog EEPROMA 24C02
i mikrokontrolera PIC16F877.

3
Serijska komunikacija – RS232
Komunikaciju mikrokontrolera sa računarom, odnosno zadavanje određenih
naredbi, vršimo preko RS232 linije. U tekstu koji sledi objasnićemo serijsku
komunikaciju između računara 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 korišćen 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 sadrže 2 čvora gde je na svakom od njih
mikrokontroler ili računar, tako da možemo povezati jedan mikrokontroler za
jedan PC.
Pretpostavimo da brzina kojom šaljemo podatke sa računara 9600 baud-a
odnosno 9600 bita u sekundi, što je i široko preporučljiva brzina za bezbedno
slanje podataka. U tom slučaju ć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

5
Slika 3. Fizičke dimenzije MAX232 kola

Serijski port se drugačije naziva i komunikacijski (communication -


COM) port i on je bidirekcioni. Bidirekciona komunikacija omogućuje uređaju
i da prima i da šalje podatke. U zavisnosti od toga da li serijski uređaji koriste
različite pinove za prijem i slanje ili samo jedan, moguće 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
ključnu komponentu serijske komunikacije. Ovaj čip, s jedne strane prihvata
bajtove podataka od mikroprocesorskog sistema, transformiše 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 zajednički takt, ili da
predajnik obezbedi poseban signal kojim će obaveštavati prijemnik kada
dolazi sledeći podatak. Kod asinhronog prenosa ne postoji poseban signal već se
sinhronizacija vrši pomoću posebnih bitova koji se umeću.

Serijski port PC računara koristi se za serijski prenos podataka (bit po bit) i


samim tim je sporiji od paralelnog porta. Uređaji 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 između PC računara. Električne osobine serijskog
porta su definisane EIA (Electronics Industry Association) RS232C
standardom, čiji su parametri:

 Logička nula "SPACE" nalazi se u opsegu napona +3V do +25V


 Logička jedinica "MARK" je u opsegu -3V do - 25V
 Oblast između -3 do + 3 V nije definisana
 Napon na kolu ne sme da pređe 25V u odnosu na masu (GND)
 Struja kola ne sme preći 500 mA.

Inače, 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

7
Slika 5. Raspored pinova na konektoru DSUB-25

DSUB-9 Signal Opis signala


DSUB-25
pin 2 pin 3 TD Transmit Data
pin 3 pin 2 RD Receive Data
pin 4 pin 7 RTS Request To Send
pin 5 pin 8 CTS Clear To Send
pin 6 pin 6 DSR Data Set Ready
pin 7 pin 5 SG Signal Ground
pin 8 pin 1 CD Carrier Detect
pin 20 pin 4 DTR Data Terminal Ready
pin 22 pin 9 RI Ring Indicator
Tabela 1. Značenje pojedinih signala

Oblik signala kod RS232 standarda dat je slici 6.

Slika 6. Oblik signala kod RS232 standarda

8
Situacija kada nema slanja podatka, tj. linija je slobodna, označena je
MARK naponom. Prenos počinje kada linija pređe 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 najčešće
u suprotnosti sa ustaljenom logikom da je +5 V logička jedinica, a 0 V logička
nula. Problem rešava prijemno kolo (npr. MAX232, ST232, ICL232,
MAX3232, ST3232, ICL3232 itd.) konvertujući napo-ne tako da su prilagođeni
naponima interfejsa koji se koristi. Posle bita podatka dolazi bit parnosti koji se
koristi za detekciju jednostruke greške u prenosu. Iza bita parnosti signal se
postavlja u MARK stanje što označava početak STOP bita. Prema RS232
standardu broj stop bitova može biti: 1, 1.5 ili 2. Nakon završetka STOP bitova,
linija je spremna za slanje novog karaktera. PC računari koriste kao DATA bite
najčešće 7 ili 8 bita. Između slanja dva karaktera linija se nalazi u MARK
stanju, a u toku prenosa više puta prelazi iz MARK u SPACE stanje u zavisnosti
od broja jedinica i nula. To znači da se linija može nalaziti u SPACE stanju
najviše u slučaju kada karakter sadrži sve nule. Ova osobina prenosa
upotrebljena je za uvođenje specijalnog znaka nazvanog BREAK (prekid). Ovaj
se signal ko-risti kako bi se dala prijemniku signalizacija da je došlo do
problema u slanju podataka.
Serijski prenos počinje 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
greške i za to vreme javlja predajniku da je zauzet. Ako su podaci primljeni bez
greške, prijemnik šalje predajniku signal potvrde ACK (Acknowledgment -
ASCII 6), a u slučaju ako se pojavila neka greška, šalje signal nega tivne potvrde
NAK (ASCII 21). Zavisno od upotrebljenog protokola, odgovor predajnika na
dobijeni NAK signal može biti ponovno slanje podataka.
Protokol za prenos može se izvesti na dva načina 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
utvrđivanja da li je to XON, XOFF ili podatak. Strana koja ne može da primi
karakter kao indikator tog stanja drugoj strani šalje XOFF znak.
Prilikom serijskog prenosa podataka moguća je pojava sledećih vrsta
grešaka:

 Greška uokvirenja ili greška rama podatka (framing error). Do ove


greške dolazi u slučaju kada prijemnik očekuje STOP bit ali se on ne
pojavljuje.

9
 Greška prekoračenja (overrun error). Nastaje kada se pojavljuje novi
znak u prijemniku a prethodni nije upotpunosti primljen.
 Greška parnosti (parity error). Nastaje kada bit parnosti ne odgovara
stanju bitova u bitovima podatka.

Serijski EEPROM
Serijski EEPROM-i su danas sve pristupačniji za korišćenje. Tome
doprinose njegove male dimenzije (DIP 8), niska cena i mali broj potrebnih
linija za njegovo povezivanje sa mikrokontrolerom. Najčešća primena serijskih
EEPROM-a je u televiziji, SAT prijemnicima, video rekorderima gde služe za
memorisanje kanala….
Specifikacijom datom od strane proizvođača, prilikom nestanka napajanja
garantovano je čuvanje podataka do 40 godina. Opseg radnog napona kreće su u
granicama od 3V do 5,5V. U sam čip ugrađen je Power on Reset kojim su
zabranjene sve funkcije sve dok napon ne dostigne nominalnu vrednost.
Fabrički je određeno da serijski EEPROM ima isti sadržaj svih ćelija, $FF.
Microchip 24Cxx kola su kompatibilna sa I2C protokolom razvijenim od
strane Philipsa, koji omogućava korišćenje samo 2 bi-direkcione open-drain
linije.
Radna frekvencija kola kreće 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, takođe i za prenos adresa i podataka iz memorije. Pošto je izveden
kao Open Drain potrebno je i na njega priključiti ‘Pull up’ otpornik na
VCC(tipična vrednost je 10kΩ za 100kHz, 1kΩ za 400kHz).

SCL ulaz obezbeđuje sinhronizaciju podataka koji se u memoriju upisuju ili


iščitavaju.
Proizvođač u specifikaciji daje okvirnu procenu od oko 1,000,000 mogućih
upisa-čitanja memorije. U komercijalno dostupnoj verziji kola, radna
temperatura se kreće u granicama od 0 oC do 70oC.

11
EEPROM 24c02 ima kapacitet od ukupno 2kbit-a, organizovanih u single-
blokove 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
dođe do određene varijacije, može doći do prekida(dolazeći bit moze biti
interpretiran kao START ili STOP bit).

START bit nastaje promenom logičkog nivoa na liniji SDA sa ‘1’ na ‘0’
kada je SCL na visokom logičkom 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 logičkom nivou. Naredba STOP prekida komunikaciju između
master i slave čipa ( čip koji kontroliše 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 režim”, a ako je nastala nakon komande WRITE tada
inicira interno upisivanje u EEPROM. Uspešno izveden prenos podataka
potvrđuje se ACK (Acknowledge) bitom.

12
Nakon generisanja START bita, master šalje slave adresu koju čine 4 “device
select” bita (1010) i 3 ”don’t care” bita. Osmi bit ima vrednost 1 ili 0 za čitanje
ili upis.

Slika 10. Pozicija device-select bita u adresnoj reči

13
Upisivanje u EEPROM

Postoje 2 načina upisa u serijski EEPROM 24c02:


- upisivanje pojedinačnih bajtova
- upisivanje grupa bajtova

Upisivanje pojedinačnih bajtova inicijalizuje START bit sa master kola.


Za njim slede “device select” bitna reč (1010) i logička nula što znači da sledi
upisivanje. Deveti bit je ACK, bit potvrde.

Nakon potvrde, memorija čeka na osmobitnu adresu, kojom se određuje u


koju od 256 lokacija, u jednom od odabranih blokova, treba da upiše 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 završava upisivanje slanjem STOP bita. Da bi se što više
skratilo vreme potrebno za upisivanje vrši se ciklično ispitivanje bita potvrde.
Drugim rečima, po prijemu bajta adrese i bajta podatka, memorija se
“isključuje” sa BUS-a da bi izvršila interno upisivanje. To vreme iznosi
maksimalno 10ms za režim upisivanja pojedinačnih bajtova. U stvarnosti je to
vreme znatno kraće, pa se zato vrši ciklično ispitivanje bita potvrde.
Upisivanje grupa bajtova na isti način počinje bajtom za upis, adresom i
prvim bajtom iz grupe. Umesto generisanja STOP stanja, MASTER šalje do 8
data bajtova koji su privremeno uskladišteni u bafreru čipa i koji će biti upisani
u memoriju nakon što MASTER pošalje STOP bit.

Nakon svakog pristiglog bajta, tri najniža adresna pokazivača svaki put se
uvećavaju za jedan, dok pet viših ostaju nepromenjena. Ukoliko MASTER
pošalje više od 8 bajtova, brojač adresa se vraća na početno stanje i upisani
sadržaj se briše.

14
Opšte karakteristike mikrokontrolera

Mikrokontroleri su elektronske komponente namenjene konstruisanju


elektronskih sistema za digitalno upravljanje i nadzor. Pomoću takvih sistema
moguće je upravljati različitim eletronskim uređajima i sistemima, a takođe
vršiti i prikupljanje i obradu različitih električnih i neelektričnih veličina.
Digitalni sistemi zasnovani na mikrokontrolerima mogu se programirati da u
zavisnosti od stanja upravljanog kola izvršavaju određene obrade i na osnovu
rezultata tih obrada vrše upravljanja u kolu.

Na početku je veoma važno napomenuti koje su razlike između


mikrokontrolera i mikroprocesora. Mikroprocesori su elektronske komponente
koje su namenjene različitim vrstama obrade u digitalnim računarima. 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 uređajima. Na taj način se dobija digitalni
sklop koji je dosta složen i glomazan, te je stoga i dosta skup.

Za razliku od mikroprocesora, mikrokontroleri su projektovani tako da


objedine kompletan digitalni računar na jednom čipu, jer osim procesora sadrže
i memorijske i periferne jedinice. Tako se postiže da željeni sistem ima
minimalan broj komponenata, čime se štedi prostor i vreme potrebno za
konstruisanje uređaja.

U sadašnje vreme na tržištu postoji nekoliko velikih proizvođača


mikrokontrolera koji u svom proizvodnom programu imaju najrazličitije
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 možemo da isprogramiramo
kakvo će biti ponašanje digitalnog uređaja koji projektujemo.

15
Funkcionalne jedinice savremenih
mikrokontrolera
U zavisnosti od tipa, odnosno namene, savremeni mikrokontroleri mogu da
imaju sledeće funkcionalne jedinice:

• ROM memorija
• RAM memorija
• EEPROM memorija
• Registri posebne namene (SFR registri)
• Programski brojač
• Upravljačka jedinica
• Aritmetičko logička 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 tačno definisanu funkciju, što je
opisano do kraja ovog poglavlja.

 ROM memorija
U ROM memoriji smešten je program koji mikrokontroler izvršava, a
tokom normalnog rada sadržaj ove memorije se ne može menjati. ROM
memorija savremenih mikrokontrolera može biti programabilna, pri čemu se
jedan mikrokontroler može programirati više puta, čime se projektantu olakšava
konstruisanje željenog sklopa. Programabilni ROM uglavnom je EEPROM ili
Flash tipa, što zavisi od konkretnog mikrokontrolera. Sadržaj ROM memorije
se ne menja nakon isključenja napona napajanja.

16
 RAM memorija
Ova memorija ima funkciju privremenog pohranjivanja podataka,
međurezultata i konačnih rezultata u toku izvođenja programa. Pristup ovoj
memoriji je proizvoljan – može se i čitati i u nju upisivati podaci. RAM
memorija gubi svoj sadržaj ukoliko se isključi napajanje .

 EEPROM memorija
Sadržaj EEPROM memorije može da se menja tokom rada, ali se nakon
isključivanja napajanja sadržaj ne gubi, nego ostaje sačuvan u memoriji. Kod
mikrokontrolera EEPROM se uglavnom koristi kao memorija za postavljanje
početnih podataka neophodnih za rad.

 Registri posebne namene SFR


Grupa SFR registara predstavlja skup registara koji imaju tačno definisanu
namenu, a neophodni su za rad mikrokontrolera. Hardverski se realizuju kao
memorija RAM tipa. To su razni statusni i upravljački registri, na primer
registar u kojem se definiše da li će određeni pinovi biti ulazni ili izlazni.

 Programski brojač
Ovo je registar u mikrokontroleru koji ima funkciju da u sebi uvek sadrži
adresu memorijske lokacije u programskoj memoriji u kojoj se nalazi sledeća
instrukcija programa koju treba izvršiti, sem u slučaju da se trenutno izvršava
instrukcija skoka.

 Upravljačka jedinica
Upravljačka jedinica ima funkciju da upravlja radom mikrokontrolera i
kontroliše izvršavanje svih operacija. U sklopu ove jedinice se uglavnom nalazi
dekoder instrukcija i kontrolna logika koja na osnovu instrukcije koja se
trenutno izvršava uključuje odgovarajuće upravljačke signale.

17
 Aritmetičko logička jedinica ALU
Sve operacije nad podacima se izvršavaju u aritmetičko logičkoj jedinici.
Zavisno od složenosti i tipa arhitekture, mikrokontroler može imati instrukcije
za jednostavnije ili složenije aritmetičke i logičke operacije.
Aritmetičko logička 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 veličinu,
uglavnom napon, pretvori u njen digitalni ekvivalent u odgovarajućem
digitalnom kodu. Kod modernih mikrokontrolera ovi A/D konvertori su 8 bitni,
10 bitni ili 12 bitni. Jedan mikrokontroler može da ima više 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 smešten podatak koji se šalje na port ili je primljen sa porta.
Zavisno od konkretne arhitekture, portovi mogu biti bit adresibilni, što znači da
se svakom bitu na portu može dodeliti da li će biti ulazni ili izlazni.

 Oscilator
Oscilator obezbeđuje taktni signal određenog 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 obezbeđuje spoljnom
stabilizacijom, najčešće uz pomoć kristala kvarca. Kod većine 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 dovođenja impulsa na
njihov ulaz. Mogu se koristiti za merenje vremena između dve pojave impulsa
na ulazu, ukoliko se pobuda dovodi iz internog oscilatora. Ukoliko je izvor
pobude izvan mikrokontrolera, tada se tajmer ponaša kao brojač impulsa.

 Watchdog tajmer (sigurnosni)


Watchdog je specijalni tajmer koji je projektovan tako da nakon nekog
vremenskog interval izaziva reset mikrokontrolera, ukoliko je omogućen. Reset
se dešava svaki put kada dođe do prekoračenja opsega ovog tajmera. Prilikom
normalnog izvršavanja programa, posebnim instrukcijama povremeno se vrši
postavljanje stanja ovog tajmera na početnu vrednost inicijalizacija, te se na taj
način ostvaruje da ne dolazi do reseta. Ukoliko iz bilo kog razloga program
upadne u mrtvu petlju, neće se izvršavati instrukcije za inicijalizaciju Watchdog
tajmera, tako da će on da broji sve do prekoračenja i izazvaće reset
mikrokontrolera i program će ponovo početi da se izvršava od početne
vrednosti.

 Jedinica za napajanje
Ova jedinica kod većine mikrokontrolera sadrži logiku koja proverava
kakvog je kvaliteta napajanje komponente, pošto je za kvalitetan rad kola
neophodno stabilno napajanje dovoljne snage. Ova logika projektovana je tako
da u slučaju nekvalitetnog napajanja, tzv. “brown out“ izazove reset
mikrokontrolera. Sem toga, u sastavu ove jedinice nalazi se i spoljni priključak
za reset, tako da se reset mikrokontrolera može izvršiti i izvan mikrokontrolera.

19
RISK procesori i HARVARD arhitektura

Osamdesetih godina prošlog veka dolazi do pojave procesora poznatih pod


nazivom RISC procesori, čija je arhitektura nešto pojednostavljena u odnosu na
do tada standardne procesore. Sam naziv RISC znači 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 učini vidljiva
softveru. Osnovne osobine RISC arhitektura su:

1. Instrukcije obavljaju primitivne operacije, tj jedna instrukcija može da


obavlja samo jednu operaciju na registru ili memoriji.

2. Sve instrukcije koje pristupaju memoriji u cilju čitanja sadržaja lokacija,


pročitane podatke smještaju u registar, i obrnuto.

3. Većina 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 dužine.

5. Postavljanje markera uslova kod RISC procesora nije implicitno.

RISC procesori imaju pojednostavljenu arhitekturu, te je stoga smanjena i


površina potrebna za realizaciju RISC procesora. Na taj način je direktno
smanjen i broj potrebnih tranzistora u kolu, a i sama potrošnja. Sa druge strane,
čip sa manjim brojem tranzistora brže se projektuje, a i greške se lakše mogu
uočiti i ispraviti. Prilikom proizvodnje, pošto je čip manji, u jednom
proizvodnom ciklusu može se proizvesti veći broj čipova.
RISC procesori imaju i određene nedostatke, od kojih je najznačajniji taj da
se za obavljanje jedne operacije mora izvršiti veći broj RISC instrukcija, što
povlači da je neophodno procesoru staviti na raspolaganje više memorije i više
internih registara.

20
Većina RISC procesora imaju protočnu arhitekturu, u kojoj se izvođenje
jedne instrukcije obavlja u više faza. Broj faza u obradi definisan je brojem
stepeni u protočnom sistemu. Broj stepeni u protočnom sistemu u uskoj je vezi
sa složenošću arhitekture RISC procesora i brzinom njegovog rada. Uglavnom
je kod većine protočnih procesora karakteristično da su razdvojene faze
dobavljanja instrukcije iz memorije i njenog izvršavanja.
Harvard arhitektura je jedan od načina 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 iskorišten, dok se put za pribavljanje
podataka koristi samo kod operacija čitanja i pisanja u memoriju. Na ovaj način
se postiže velika brzina rada, dok je potreban veći broj pinova za adrese i
podatke. Naravno, to je potrebno samo ako se radi o mikroprocesoru, dok kod
mikrokontrolera koji imaju memoriju unutar istog kućišta ne dolazi do
povećanja broja pinova.

Centralna
Memorija za procesorska Memorija za
podatke Podaci Instrukcije program
jedinica

Slika 11. Objašnjenje Harvard arhitekture

RISC procesori se u današnje vreme mnogo više koriste nego


konvencionalni CISC procesori u tzv. “embedded“ sistemima u industriji –
raznim kontrolerima u robotici, štampačima, grafičkim kontrolerima itd.
Naravno, postoji i veliki broj mikrokontrolera koji su realizovani kao RISC
procesori. Dva osnovna razloga za ovakvu dominaciju su veća propusnost RISC
procesora nego CISC procesora na istom radnom taktu i što za većinu ovih
aplikacija ne postoji softver, pa je razvoj upravljačkog sklopa brži sa RISC
procesorom.

21
MIKROKONTROLER PIC16F877
Mikrokontroler PIC16F877A predstavlja integraciju mikroprocesora
(CPU), memorije i periferija. Ovaj mikrokontroler je izrađen u CMOS
tehnologiji sa ugrađenim FLASH i EEPROM memorijama, za čuvanje prog-
rama i podataka. PIC16F877A ima tipičnu RISC arhtekturu (karakteriše manjim
skupom instrukcija koje se brže izvšavaju u odnosu na CISC arhitekturu). Ovaj
mikrokontroler poseduje većinu potrebnih periferija na samom čipu tako da je
podesan za aplikacije na jednom čipu. U ovom projektu koristićemo
mikrokontroler proizvođača Microchip.

Možemo još reći 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 računara. Takođe, 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 omogućuje odvojene magistrale 8-bitnih podataka i 14-


bitne programske memorije, pa je moguće da se pribavlja naredna instrukcija
dok se izvršava tekuća (eng. pipelining). Sve instrukcije traju jednako (osim u
slučaju grananja programa) i završe se za četiri ciklusa oscilatora. Dakle, ako je
oscilator konfigurisan na 4 MHz, dobija se da ciklus instrukcije iznosi 1 µs.

Kao što smo ranije napomenuli, većina današnjih mikrokontrolera je


bazirano na Harvard arhitekturi, koja jasno definiše četiri osnovne komponente
potrebne za embedded sistem. To uključuje CPU jezgro, memoriju za program
(ROM, EPROM ili Flash memorija), memoriju za podatke (RAM), jedan ili
više tajmera (podesive i watchdog tajmere), kao i I/O linije za komunikaciju sa
eksternim periferijama i dopunskim resursima – sve to treba da bude smešteno 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 kućištima (QFP i PLCC), Slike 12 i 13.

Slika 12. Fizički izgled mikrokontrolera PIC 16F877 u 40-pinskom kućištu

Slika 13. Fizički izgled mikrokontrolera PIC 16F877 u 44-pinskom kućištu

23
Na slikama 12. i 13, mogu se videti fizički izgledi mikrokontrolera PIC16F877
u različitim varijantama, dok je na slici 14. ilustrovan raspored pinova kod
pomenutog mikrokontrolera.

Slika 14. Raspored pinova kod mikrokontrolera PIC16F877 u kućištu DIP40

U narednim poglavljima biće reči o osnovnim karakteristikama


mikrokontrolera PIC16F877, o njegovoj arhitekturi sa odgovarajućom šemom,
kao i o vrstama oscilatora koji se koriste kao izvor takta za dotični
mikrokontroler.

24
Osnovne karakteristike mikrokontrolera

 RISC mikroprocesor visokih performansi


 35 instrukcija obima jedne reči
 Radna frekvencija do 20 MHz
 Trajanje taktnog intervala 200 ns, pri frekvenciji 20 MHz
 Opkôd obima 14 bita
 Harverski magacin sa osam nivoa
 Tri načina adresiranja (direktno,indirektno i relativno)
 Programska flash memorija kapaciteta 8 k X 14-bitnih reči
 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č_događaja
- Timer1 (TMR1): 16-bitni tajmer/brojač_događaja
- Timer2 (TMR2): 8-bitni tajmer/brojač_događaja
 10-bitni 8-kanalni analogno-digitalni (A/D) konvertor
 Serijska komunikacija: MSSP, USART
 Paralelna komunikacija: PSP
 Power-on Reset - reset pri uključenju napajanja (POR)
 Power-up timer - unošenje kašnjenja nakon uključenja napajanja
(PWRT)
 Oscillator Start-up Timer - unošenje kašnjenja nakon
stabilizovanja radne frekvencije oscilatora (OST)
 Sleep mode - režim rada sa malim utroškom energije
 Watchdog tajmer sa sopstvenim integrisanim RC oscilatorom za
nezavisni rad
 Izbor tipa oscilatora
 Radni napon od 2V do 5.5V
 Mala potrošnja energije: (<0.6 mA pri naponu od 3V i radnoj
frekvenciji od 4 MHz, 20µA pri naponu od 3V i radnom taktu od
32kHz <1µA u standby režimu rada).

25
Arhitektura mikrokontrolera
Kao što je istaknuto, mikrokontroler PIC16F877A poseduje tipičnu
RISC arhitekturu, koja je prikazana na Sl.15. Arhitektura poseduje odvojene
magistrale za podatke i programski kôd. Obim podataka je 8-bitni, dok je
programski kôd 14-bitni. Moguće je protočno izvršenje (pipelining). Sve
instrukcije su istog obima (osim instrukcija grananja) i izvšavaju 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 rečeno je da strukturu mikrokontrolera


PIC16F877A čini nekoliko celina:

 Aritmetičko-logička jedinica (ALU)


 Akumulator (Working Register)
 Hardverski magacin (Stack) organizivan u 8 nivoa
 EEPROM memorija podataka obima 256 bajtova
 Flash programska memorija – 8 kiloreči obima 14 bita
 RAM (File Registers) – 368 bajtova
 Višekanalni 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 sledeće tri
celine:

 Programska memorija (FLASH)


 Memorija podataka (RAM)
 EEPROM memorija podataka.

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


cikličnog bafera, što znači da se u njega mogu staviti osam različitih adresa,
dok se sa upisom devete adrese – briše prva i tako redom. Programski se ne
može utvrditi da li je došlo do prepunjeja magacina.

- Programska memorija (FLASH)

U mikrokontroler PIC16F877A integrisan je trinaestobitni programski


brojač (PC) koji je u mogućnosti da adresira 8K programskih reči od 14
bita. Izvršavanje programa počinje 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 više banki (banks), a čine je registri


opšte 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 služe za izbor željene
banke podataka.

28
Slika 16. Mapa programske memorije i magacin (stack)

Svaka banka može da sadrži do 128 registara (0x7F). Niže lokacije u banci
zauzimaju specijalni registri, a ostatak prostora popunjavaju registri opšte
namene implementirani kao statički RAM. Neki specijalni registri koji se
često koriste mapirani su u sve banke da bi se omogućio brzi pristup i redukcija
kôda. Mapa registara mikrokontrolera PIC16F877 prikazana je na Slici 17.
Nekoliko specijalnih registara su registri jezgra, uskopovezani sa funkcionisa-
njem mikroprocesora kontrolera. Ostali registri su vezani za periferne module i
služe za njihovo upravljanje i kontrolu statusa.
Programski brojač (PC) je 13-bitni registar i određuje adresu naredne
instrukcije u programskoj flash memoriji. Simboličko ime nižeg bajta je PCL i
to je registar u koji se može i upisivati i iščitavati. Viših pet bita programskog
brojača (PC) smešteni 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 važan i zato je predviđeno da se može
adresirati iz bilo koje banke. On pokazuje status aritmetičko-logičke jedinice,
reset status mikrokontrolera i sadrži bite za selekciju banki internog RAM-a.
Od navedenih flegova posebno treba izdvojiti Zero bit (Z), koji se postavlja kad
je rezultat aritmetičke operacije jednak nuli i bit prenosa/pozajmice Carry (C).

29
Registar OPTION_REG se koristi za konfiguraciju preskalera za tajmer 0
ili Watchdog, za upravljanje tajmerom 0, selekciju ivice okidanja eksternog
interapta, te za omogućenje Pull-up otpornika na portu B.

INTCON je registar za manipulisanje sistemom prekida


mikrokontrolera. Pored bita za omogućenje svih prekida (GIE) i bita za
omogućenje perifernih prekida (PEIE), u ovom registru su interapt-flegovi i
biti omogućenja prekida tajmera 0, spoljašnjeg 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 omogućenje nalaze se u registrima
PIE1 i PIE2, a korespondentni flegovi, vesnici interapta, u registrima PIR1 i
PIR2. Ovi se flegovi setuju čim se ispuni uslov interapta bez obzira na stanje
njihovog bita omogućenja, a po izvršenju servis rutine potrebno ih je soſtverski
resetovati.

Kada je reč o registrima jezgra ne treba zaboraviti par FSR (File Select
Register) i INDF (Indirect File), koji služe za indirektno adresiranje memorije
podataka. Bilo koja instrukcija koja se obraća INDF registru, u stvari,
indirektno pristupa onoj lokaciji internog RAM-a čija je adresa trenutno u
registru FSR.
Konačno, treba spomenuti registar PCON (Power Control Register). U
PIC16F877 ovaj registar sadrži samo dva bita. Pomoću bita POR detektuje se
razlika između Power-on reseta i reseta izazvanih drugim uzrokom. Drugi
bit (BOR) služi kao indikacija Brown-out stanja (nedozvoljeni naponski nivoi u
napajanju mikrokontrolera), zbog kojeg se takođe može 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 Resistor/Capacitor
 XT Crystal / Resonator
 LP Low Power Crystal
 HS 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 moguće 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 spoljašne uticaje. Kondenzator Cext se može čak i
izostaviti. Međutim, zbog stabilnosti preporučuje se vrednost oko 20pF. Na pinu
OSC2/CLKOUT generiše se taktni impuls čija je perioda četiri puta veća od
periode rada oscilatora.

32
Kod vremenski kritičnih aplikacija treba ugrađivati kvarcni oscilator ili
keramički rezonator. Vrednosti kondenzatora C1 i C2 (Sl.19.), treba da budu
identične.

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

Mikrokontroleru PIC16F877A može da se dovede i spoljašnji takt, što je


prikazano na Sl. 20.

Slika 20. Dovođenje spoljašnjeg takta

Odnos između takta i instrukcijskog ciklusa

Takt koji se dovodi na pin OSC1 oscilatora u mikrokontroleru deli se na


četiri vremenski nepre-klapajuća 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
sledeće namene:

Q1 - pribavljanje instrukcije iz programske memorije


Q2 - dekodiranje naredbe iz prethodnog instrukcijskog ciklusa
Q3 - izvršenje naredbe iz prethodna dva instrukcijska ciklusa
Q4 - prenos opkôda 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 spoljašnjim
svetom. Svaki od njih može da se konfiguriše kao ulazni ili kao izlazni.
Pomenuti portovi su različitog obima:

 8-pinski (PORTB, PORTC, PORTD)


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

Svakom pinu bilo kojeg porta, u zavisnosti od režima rada, mogu da se


dodele fiksne ili promen-ljive funkcije. Konfiguracija smera prenosa ostvaruje
se upisom na odgovarajuću bit-poziciju u pripa-dajućem 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 iniciraće upis u
latch tog porta, a njegovo čitanje rezultiraće čita-njem logičkih stanja direktno
sa pinova. Sve instrukcije upisivanja su tipa read-modify-write . To znači da se
pri upisu u port najpre očitaju stanja pinova, zatim izvrši modifikacija, a
potom korigovana vrednost upiše 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, generisaće prekid
mikrokontrolera.

PortA

PortA je 6-bitni (RA5-RA0) bidirekcioni port (podaci mogu da se šalju u


oba smera). Sadržaj re-gistra TRISA određuje 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 mogućnost analogno-digitalne konverzije i prvenstveno se


koristi u te svrhe. A/D kon-vertor, koji je integrisan u mikrokontroleru, je 10-
bitni 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 može da se iskoristi za ulazni takt za
tajmer TMR0.

Port B
Port B je 8-bitni bidirekcioni port. Svakom pinu porta korespondira
odgovarajući bit u regis-tru TRISB, kojim se definiše smer. Svi pinovi unutar
PortB poseduju pull-up otpornike. Ovi otpor-nici mogu da se uključe
jednim kontrolnim bitom. To se postiže postavljanjem RBPU' bita na ‘0’.
Pull-up otpornici se automatski isključuju kada se pin konfiguriše kao izlazni.
Otpornici su isklju-čeni i kod Power-on reseta.
Četiri pina na PORTB (RB7-RB4) imaju mogućnost 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 ugrađen USART modul, koji služi 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 može da se konfiguriše kao 8-
bitni paralelni mikro-procesorski port (parallel slave port-PSP) i to
podešavanjem konfiguracionog bita PSPMOTE (TRISC<4>). U ovom režimu
rada ulazni bafer je TTL tipa.
Port E je bidirekcioni veličine 3 bita. Ima mogućnost A/D konverzije.
Ulazni bafer je tipa Schmitt Trigger. Pinovi mogu da se konfigurišu kao
digitalni ili analogni, kao i u slučaju PortaA, o čemu je već bilo reči.

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 služi za
komunikaciju sa serijskim EEPROM-ima, pomeračkim registrima, displej-
drajverima itd. Ovaj modul može da radi u jednom od dva režima:

 Serial Peripheral Interface (SPI)


 Inter-Integrated Circuit (I2C).

Drugi serijski komunikacioni modul je USART (Universal Synchronous


Asynchronous Receiver Transmiter). On uglavnom služi za povezivanje sa
personalnim računarom, mada to nije jedina njegova mogućnost primene.
USART može da se konfiguriše u neki od sledećih režima 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 poveže na 8-bitnu magistralu podataka drugog mikroprocesora.
Eksterni mikroprocesor tada, preko linija Read (RD) i Write (WR) može 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 električna
š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 3
1 V in V o ut
2

G nd
C11
1 00 n F
L M78 0 5 IK 3 CN1
C1 C2 C3 C4 1 16 1

1 00 n F
2
C10 C1+ V cc
2 15 6
2 20 u F 1 00 n F 2 20 u F 1 00 n F V+ Gn d
3 14 2
C1- T1o u t
4 13 7
C2+ R 1 in
5 12 3

1 00 n F
C 2 - R 1 ou t
C9 6 11 8
V- T1i n
7 10 4
T2o u t T2i n
8 9 9
R 2 in R 2 ou t
5
C8 MA X 23 2
C7
1 00 n F 2 20 n F D B 9 /F

R1 R2 R3

1 0K 1 0K 1 0K

TT1
IK 2
1 40
M C LR P B 7
2 39
S1 PA0 PB6
3 38
R4 PA1 PB5
1 4 4 37
R5 PA2 PB4
2 3 5 36
2K2 PA3 PB3
6 35
2K2 PA4 PB2
S W DI P -2 D1 D2 7 34
PA5 PB1
LED LED 8 33
RD PB0
9 32
C5 WR VDD
10 31
CS VSS
11 30
VDD PD7
Qu 1 12 29
2 7p F VSS PD6
13 28
OSC 1 PD5
14 27
OSC 2 PD4
15 26
C6 4 MH z PC0 PC7
R6 R7 16 25
PC1 PC6
17 24
PC2 PC5
18 23
2 7p F PC3 PC4
1 0K 1 0K 19 22
PD0 PD3
20 21
PD1 PD2
P IC 1 6 F8 7 7 -0 4

J1
1
2
3

IK 4
IK 5 R8
A0 VC C
A0 VC C
A1 WP 2K2 R9
A1 WP
NC SCL
NC SCL
GND SDA 2K2
GND SDA
2 4C 0 2 D3 D4
2 4C 0 2 5V1 5V1

Slika 28. Električna šema sprege mikrokontrolera i seijskog EEPROM-a

Inače, mikrokontroler ima takt od 4MHz i napaja se preko standardnog


stabilizatora napona LM7805 (V out = 5V±0,1V, Imax = 500mA).
Komunikacija između mikrokontrolera i računara ostvaruje se preko
interfejsnog kola MAX232N. Komunikacija je bez handshaking-a.
Uloga diode D8 je zaštita pogrešnog priključivanja napona napajanja.
Tasterom TT1 se resetuje mikrokontroler.
Na samoj pločici je omogućeno programiranje serijskog EEPROM-a i to se
ostvaruje preko serijskog porta računara. Zener diodama se prilagođavaju
naponski nivoi.
Za definisanje režima rada koriste se DIPSW2 prekidači, a kao indikacija
režima koriste se crvene LED i zelena LED sa malom potrošnjom (low-power).
O ovome će detaljnije biti reči u poglavlju Laboratorijska vežba.

42
Spisak komponenti:

Designator Part Type Footprint

1 R1 2K2, Carbon Film Resistor, 0.25W, 5% AXIAL0.4


2 R2 2K2, Carbon Film Resistor, 0.25W, 5% AXIAL0.4
3 R3 10K, Carbon Film Resistor, 0.25W, 5% AXIAL0.4
4 R4 10K, Carbon Film Resistor, 0.25W, 5% AXIAL0.4
5 R5 10K, Carbon Film Resistor, 0.25W, 5% AXIAL0.4
6 R6 2K2, Carbon Film Resistor, 0.25W, 5% AXIAL0.4
7 R7 2K2, Carbon Film Resistor, 0.25W, 5% AXIAL0.4
8 C1 220uF, Electrolytic Capacitor 16V RB.1/.2
9 C2 100nF, Polyester Block Capacitor, 5% RAD0.2
10 C3 220uF, Electrolytic Capacitor 16V RB.1/.2
11 C4 100nF, Polyester Block Capacitor, 5% RAD0.2
12 C5 27pF, Multilayer Ceramic Capacitor, 5% RAD0.1
13 C6 27pF, Multilayer Ceramic Capacitor, 5% RAD0.1
14 C7 220nF, Polyester Block Capacitor, 5% RAD0.2
15 C8 100nF, Polyester Block Capacitor, 5% RAD0.2
16 C9 100nF, Polyester Block Capacitor, 5% RAD0.2
17 C10 100nF, Polyester Block Capacitor, 5% RAD0.2
18 C11 100nF, Polyester Block Capacitor, 5% RAD0.2
19 Y1 Quartz HC-49U, 4MHz, 20ppm, 20pF XTAL1
20 D1 L-53LRD, Red Diffused LED D0.1
21 D2 L-53LYD, Green diffused LED D0.1
22 D3 Zener Diode 5V1 AXIAL0.3
23 D4 Zener Diode 5V1 AXIAL0.3
24 D5 Shottkey Diode 1n5819 AXIAL0.3
25 IK1 LM7805, Linear voltage regulator, 5V TO-126
26 IK2 PIC16F877A, Microcontroller DIP40
27 IK3 MAX232, Driver/Receiver for EIA/TIA-232E DIP16
28 IK4 Serial EEPROM 24C02 DIP8
29 DC YDJ-1134, Power Jack POWER3
30 DB9F DB9F PCB, DB9 Connector DB9RA/F
31 TT1 Tact switch TS-062 SW-4
32 DIPSW2 Switch DIP2 DIPSW2
33 LC8 Low_cost Socket DIP-8 DIP8
34 LC8 Low_cost Socket DIP-8 DIP8
35 LC40 Low_cost/Professional Socket DIP-40 DIP40
36 J2 Pin_Header/F 1x3 PH3/F
Tabela 27. Spisak komponenata za kolo sa Sl.7.1

Legenda:

Carbon Film Resistor Ugljenoslojni otpornik


Carbon Trimmer Potentiometer Ugljenoslojni potenciometar
Electrolytic Capacitor Elektrolitski kondenzator
Polyester Block Capacitor Poliesterski blok kondenzator
Multilayer Ceramic Capacitor Keramički kondenzator “through hole”

43
Quartz Kristal kvarca
Red Diffused LED Crvena difuzna LED dioda
Yellow diffused LED Žuta difuzna LED dioda
Linear voltage regulator Linearni regulator napona
Microcontroller Mikrokontroler
Driver/Receiver Drajver/prijemnik
Power Jack Konektor (džek) za napajanje
Switch Prekidač
Tact switch Taster
Low_cost/Professional Socket Jeftino/profesionalno podnožje
Pin_Header/F Pin-letvica (muška)

Slika 29. Izgled štampane ploče

44
Slika 29a: Realizovani uređaj

45
Program u mikroC-u

unsigned short i=0, j=0, k;


void main() {
TRISA = 0b000011; //Definisanje pinova Porta A
PORTA = 0;
ADCON1 = 6;
delay_ms(1000);
PORTA.F3 = !PORTA.F0; // Nacin paljenja LED.
PORTA.F2 = !PORTA.F1;

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) { // Citanje lokacije EEPROM-a


Soft_I2C_Start();
Soft_I2C_Write(0xA2); // Adresa 24C02
Soft_I2C_Write(j);
Soft_I2C_Stop();
Soft_I2C_Start();
46
Soft_I2C_Write(0xA3);
k = Soft_I2C_Read(0); // Citanje
Usart_Write(k);
Soft_I2C_Stop();
j++;

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

}
}//~!

Napomena:

Korišćena 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 BCF STATUS, RP0
$0121 $1805 BTFSC PORTA, 0
$0122 $3000 MOVLW 0
$0123 $00F0 MOVWF STACK_0
$0124 $3000 MOVLW 0
$0125 $1870 BTFSC STACK_0, 0
$0126 $3008 MOVLW 8
$0127 $0605 XORWF PORTA, 0
$0128 $3908 ANDLW 8
$0129 $0685 XORWF PORTA, 1
;I2C.c,9 :: PORTA.F2 = !PORTA.F1;
$012A $3001 MOVLW 1
$012B $1885 BTFSC PORTA, 1
$012C $3000 MOVLW 0
$012D $00F0 MOVWF STACK_0
$012E $3000 MOVLW 0
$012F $1870 BTFSC STACK_0, 0
$0130 $3004 MOVLW 4
$0131 $0605 XORWF PORTA, 0
$0132 $3904 ANDLW 4
$0133 $0685 XORWF PORTA, 1
;I2C.c,11 :: i.F0 = !PORTA.F1;
$0134 $3001 MOVLW 1
$0135 $1885 BTFSC PORTA, 1
$0136 $3000 MOVLW 0
$0137 $00F0 MOVWF STACK_0
$0138 $3000 MOVLW 0
$0139 $1870 BTFSC STACK_0, 0
$013A $3001 MOVLW 1
$013B $0621 XORWF _i, 0
$013C $3901 ANDLW 1
$013D $06A1 XORWF _i, 1
;I2C.c,12 :: i.F1 = !PORTA.F0;
$013E $3001 MOVLW 1
$013F $1805 BTFSC PORTA, 0
$0140 $3000 MOVLW 0
$0141 $00F0 MOVWF STACK_0
$0142 $3000 MOVLW 0
$0143 $1870 BTFSC STACK_0, 0
$0144 $3002 MOVLW 2
$0145 $0621 XORWF _i, 0
$0146 $3902 ANDLW 2
$0147 $06A1 XORWF _i, 1
;I2C.c,14 :: Usart_init(2400);
$0148 $3067 MOVLW 103
$0149 $1683 BSF STATUS, RP0
$014A $0099 MOVWF SPBRG
$014B $1518 BSF TXSTA, BRGH
$014C $20D5 CALL _Usart_Init
;I2C.c,15 :: 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 kôd

: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 može da se koristi softver
IC-Prog. Inače, 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
mogućnost čitanja, upisa i verifikacije (Read, Write, Verify) sadržaja
mikrokontrolera. Naravno, softver dozvoljava mogućnost podešavanja
parametara (WDT, PWRT, BODEN, LVP, CPD, CO, Debugger), kao i izbor
oscilatora (RC, LP, XT, HS).
Program IC-Prog se ne instalira na računaru, već se pokreće direktno –
tačnije, klikom na fajl ICPROG.EXE (Sl. 30).

Slika 30. Startovanje programa

59
Ako programer ima računar sa verzijom Windows-a «višom» 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 zaštićeni portovi. Zbog toga je
neophodno da se instalira odgovarajući drajver.

Slika 31. Upozorenje prilikom pokretanja programa

Korak 1. Instaliranje drajvera

Ulaskom u podmeni Misc, koji se nalazi u meniju Options, ostvaruje se


instaliranje/uključivanje drajvera icprog.sys (Settings → Options → Misc: √
Enable 2000/NT/XP), što je ilustrovano na Slika 32. Na taj način omogućava se
pristup serijskom portu računara. 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, računar ne
može da pristupi PIC mikrokontrolerima preko serijskog porta.

60
Slika 32 Uključivanje drajvera i prioriteta

Slika 33. Podešavanje parametara programa

61
Korak 2. Podešavanje hardverskih parametara

Nakon što je instaliran/uključen drajver, program će se restartovati i


ponudiće opciju podešavanja hardverskih parametara, koji treba da budu
postavljeni kao na Slika 33. Ic-Prog ima sličnu konfiguraciju kao JDM
Programmer, signali su bez inverzije – dok se komunikacija obavlja preko, na
primer, serijskog porta COM2. Ako računar ima samo jedan serijski port,
podrazumeva se da je to COM1.

Softver mikroC
mikroC predstavlja moćan softverski alat, koji je razvila beogradska
Mikroelektronika, i namenjen je pisanju kôda za Microchip-ove PIC
mikrokontrolere. Koristeći mikroC, programeru je omogućen jednostavan način
da kontroliše proces programiranja i napravi kvalitetan firmware.
Osnovne karakteristike programa mikroC su sledeće:

 Pisanje C kôda korišćenjem kvalitetnog editora, što se ogleda


automatskom kontrolom i upozorenjima vezanim za sintaksu kôda,
korišćenih parametara, kao i automatskoj korekciji pojedinih grešaka
 Preglednost strukture programa (kôda), promenljivih i funkcija
omogućava Code explorer
 Jasan asemblerski kôd i standardna kompatibilnost generisanih HEX
datoteka toka programa preko ugrađeg debagera (debugger)
 Programer ima na raspolaganju veliki broj integrisanih biblioteka i
rutina, koje značajno ubrzavaju pisanje programa
 Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape,
statistike kôda i slično.

Moramo da napomenemo kako mikroC odstupa od ANSI standarda u


nekoliko segmenata. Neka odstupanja su načinjena su u cilju da se olakša
programiranje, dok su druge rezultat hardverskih ograničenja PIC
mikrokontrolera. Pomenućemo neke specifičnosti:

 Rekurzivne funkcije (function recursion) su podržane sa izvesnim


ograničenjima, koja su posledica nešto složenijeg pristupa magacinu
(stack) i ograničenja vezana za memoriju
 Pokazivači (pointers) promenljivih i pokazivači konstanti nisu
kompatibilni, tj. nije moguća međusobna dodela ili upoređivanje
 mikroC tretira označavanje const kao “true constans” (kod C++),
što omogućava koriš-ćenje const objekta na mestima gde ANSIC

62
očekuje constant izraz .Ukoliko se teži ka prenosivosti programa,
treba koristiti tradicionalno pretprocesorsko definisanje konstanti
 mikroC dozvoljava C++ stil jednolinijskih komentara, koristeći dve
kose crte (//). Komentar može da počne bilo gde i traje do sledeće
nove linije programskog kôda
 Brojne standardne C biblioteke (ctype, math, stdlib, string )
implementirane su u mikroC, uz individualna odstupanja.

Napominjemo da mikroC podržava 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. Inače, ograni-
čena verzija (do 2KB programa) može da s preuzme sa sajta Mikroelektronike
(www.mikroe.com). U sličaju ako se želi potpuna verzija (neograničen 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,
moguće je podesiti veliki broj parametara. Navešćemo najvažnije:

63
 Serijski port (u padajućem meniju treba izabrati željeni serijski port, a
kod standardnih računara 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)
 Uključivanje/isključivanje handshaking signala (RTS i DTR)
 Izbor formata podatka koji se šalje (ASCII, heksadecimalni - HEX ili
dekadni - DEC)
 Način 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 završi komunikacija, treba kliknuti na komandno dugme
Disconnect.

64
Laboratorijska vežba
(I)

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


 Startovati program terminala pritiskom na komandno dugme Connect:
 Postaviti DIPSW2 prekidače u isključeno stanje (stanje «01» ili Off_On).
 Dovesti napajanje mikrokontroleru, odnosno uređaju.
 Posle jedne sekunde treba da se upali samo žuta LED na štampanoj ploči.
 Na ekranu će se pojaviti povorka osmobitnih reči:
prva reč čini početnu adresu sa koje počinje upis (0x01), zatim sadržaj na
toj memorijskoj lokaciji (0x02), zatim se upisuje sadržaj susedne
memorijske lokacije (0x03) itd. Ukupno se upisuje 10 osmobitnih reči u
deset susednih memorijskih lokacija, što je ilustrovano na Slici 36.
 Pritiskom na taster TT1, mikrokontroler se resetuje i on počinje da
izvršava program iznova.
 Isključiti napajanje uređaja, isključiti USART terminal na komandno
dugme Disconnect.

Slika 36. Prozor USART terminala (DIPSW2 = «01»)


65
 Prebaciti serijski EEPROM 24C02 u donje podnožje, koje je bliže
konektoru DB9F.
 Startovati program IC-Prog, klikom na ikonicu.
 Izabrati memoriju 24C02 kao što je prikazano na Slici 37.
 Pritiskom na taster «F8» pročitati sadržaj memorije (ovo može da se uradi
i iz Command menija).
 Na Slici 38 je prikazan sadržaj memorije.
 Obrisati memoriju na načina ilustrovan na Slikama 39-40 (učitati
blank.hex fajl i programirati pritiskom na taster «F5»). Brisanje može da
se obavi i na drugi način, tj. učitavanjem sadržaja praznog bafera (npr.
Buffer 2).

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

66
Slika 38. Sadržaj memorije 24C02 za DIPSW2 = «01»

Slika 39. Fajl blank.hex se učitava iz File menija

67
Slika 40. Sadržaj 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 prekidače u isključeno 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 reči:
prva reč čini početnu adresu sa koje počinje upis (0x03), zatim sadržaj na
toj memorijskoj lokaciji (0x06), zatim se upisuje sadržaj susedne
memorijske lokacije (0x07) itd. Ukupno se upisuje 10 osmobitnih reči u
deset memorijskih lokacija (Slika 41).
 Isključiti napajanje uređaja, isključiti USART terminal na komandno
dugme Disconnect.

68
 Prebaciti serijski EEPROM 24C02 u donje podnožje, koje je bliže
konektoru DB9F.
 Startovati program IC-Prog, klikom na ikonicu.
 Izabrati memoriju 24C02 kao što je prikazano na Slici 37.
 Pritiskom na taster «F8» pročitati sadržaj memorije (ovo može da se uradi
i iz Command menija).
 Na Slici 8 je prikazan sadržaj memorije.
 Obrisati memoriju na načina ilustrovan na Slikama 39-40 (učitati fajl
blank.hex i programirati pritiskom na taster «F5»).

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

69
Slika 42. Sadržaj memorije 24C02 za DIPSW2 = «11»

Napomena:

Posle svake operacije upisa serijskog EEPROM-a i provere sadržaja,


vršiti brisanje EEPROM-a 24C02.

(III)

 Ponoviti postupak za stanja DIPSW2 = «10» . Treba da se dobije sadržaj


serijskog EEPROM-a, kao na Slici 42.

70
Slika 42. Sadržaj memorije 24C02 za DIPSW2 = «10»

(iv)

 Prebaciti serijski EEPROM 24C02 u donje podnožje, koje je bliže


konektoru DB9F.
 Startovati program IC-Prog i u njemu proizvoljno upisati sadržaj prvih 20
memorijskih lokacija serijskog EEPROM-a.
 Postaviti DIPSW2 prekidače u isključeno stanje (stanje «00» ili Off_Off).
 Startovati program USART terminal.
 Dovesti napajanje mikrokontroleru, odnosno uređaju.
 Posle jedne sekunde ne treba da se upale diode.
 Na ekranu će se pojaviti povorka od 20 osmobitnih reči koje su upisane
programom IC-Prog.
 Proces je ilustrovan na slikama 43 i 44. Na Slici 44 su povorka
osmobitnih reči započinje prvom (0x00), a završava se krajnjom adresom
(0x19).
71
Slika 43. Sadržaj memorije 24C02 posle proizvoljnog programiranja

72
Slika 44.. Prozor USART terminala (DIPSW2 = «00»)

Zaključak
U radu smo se bavili praktičnom realizacija upisa i čitanja sadržaja serijskog
EEPROM-a preko mikrokontrolera PIC16F877-04 i softvera IC-Prog.
Najpre smo opisali serijsku komunikaciju kod PC računara, koja je u ovom
slučaju ostvarena preko kola MAX232 koje prilagođava naponske nivoe
između serijskog porta računara i mikrokontrolera.
U trećem poglavlje je opisan serijski EEPROM 24C02, uz odgovarajuće
slike samog kola i njegove karakteristike.
U četvrtom poglavlju opisane su opšte 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
iskorišćen za ovaj projekat (PIC16F877-04).
Zatim su prikazane blok šema i električna šema uređaja koji predstavlja
spregu mikrokontrolera PIC16F877-04 i serijskog EEPROM-a 24C02.
Na kraju je opisan postupak izvođenja laboratorijske vežbe, gde studenti
mogu da se upoznaju sa načinom upisa i iščitavanja sadržaja serijskog
EEPROM-a.

Literatura
[1] PIC16F87X, Datasheet, Microchip Tecnology, http://www.microchip.com
[2] 24C0xx, Serial EEPROM, http://datasheetarchive.com
[3] Serijska komunikacija računara 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 Darko
Prezime Prvulović
Datum rođenja 08.05.1982.
Bračno stanje Neoženjen
Adresa stanovanja Đ. A. Kuna 13/9, Bor
E-mail adresa darko019@gmail.com
Obrazovanje „Mašinsko-elektrotehnička škola“ - Bor
Stepen stručne spreme IV stepen, elektrotehničar elektronike
Godina upisa na 2001.
Elektronski fakultet
Smer Telekomunikacije (T)
Poznavanje jezika Engleski (napredno)
Poznavanje softvera MS Office, CorelDRAW, Windows okruženje,
Adobe Photoshop, ACDSee
Interesovanja Mobilne komunikacije i mobilna telefonija, bežični
linkovi, kablovska televizija
Osobine Ambicioznost, temeljnost, tačnost...
Ostalo Više puta učesnik okružnih takmičenja iz
matemetike u osnovnoj i srednjoj školi, član „FK
Bor“ (1990-1996)

75
Ime Ivan
Prezime Trucić
Datum rođenja 15.02.1977.
Bračno stanje Neoženjen
Adresa stanovanja Vojvode Mišića 17
E-mail adresa trucic@gmail.com
Obrazovanje Tehnička škola Zaječar
Stepen stručne spreme IV stepen, Elektrotehničar automatike
Godina upisa na 1997.
Elektronski fakultet
Smer Telekomunikacije (T)
Poznavanje jezika Engleski (napredno)
Poznavanje softvera Windows operativni sistem, Microsoft
Office, Adobe Photoshop
Interesovanja Elektronika, programiranje, mobilne
komunikacije, satelitske komunikacije,
fotografija, sport
Osobine Istrajnost, samouverenost, komunikativnost

Ostalo Učesnik takmičenja iz matematike u


osnovnoj i srednjoj školi, aktivno bavljenje
sportom(odbojka i košarka)
76
77

You might also like