77
1 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.

serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

  • Upload
    others

  • View
    9

  • Download
    0

Embed Size (px)

Citation preview

Page 1: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

1

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.

Page 2: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

2

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

Page 3: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

3

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.

Page 4: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

4

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

Page 5: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

5

Slika 2. Raspored pinova kod kola MAX232

Page 6: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

6

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

Page 7: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

7

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

Page 8: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

8

Slika 5. Raspored pinova na konektoru DSUB-25

Tabela 1. Značenje pojedinih signala

Oblik signala kod RS232 standarda dat je slici 6.

Slika 6. Oblik signala kod RS232 standarda

DSUB-25

DSUB-9 Signal Opis signala

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

Page 9: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

9

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.

Page 10: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

10

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

Page 11: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

11

Slika 8. Raspored pinova serijskog EEPROM-a

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 0oC do 70

oC.

PIN Function

VCC Supply Voltage

SDA Serial Data Address I/O

SCL Serial Clock

DC Don`t connect

TEST Test PIN

Page 12: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

12

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.

Page 13: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

13

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

Page 14: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

14

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.

Page 15: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

15

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.

Page 16: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

16

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.

Page 17: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

17

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.

Page 18: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

18

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.

Page 19: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

19

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.

Page 20: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

20

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.

Page 21: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

21

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.

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.

Memorija za

podatke Podaci

Centralna

procesorska

jedinica Instrukcije

Memorija za

program

Page 22: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

22

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.

Page 23: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

23

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

Page 24: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

24

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.

Page 25: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

25

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).

Page 26: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

26

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.

Page 27: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

27

Slika 15. Arhitektura mikrokontrolera PIC16F877A

Page 28: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

28

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.

Page 29: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

29

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).

Page 30: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

30

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 sostverski

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.

Page 31: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

31

- 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

Page 32: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

32

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.

Page 33: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

33

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.

Page 34: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

34

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.

Page 35: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

35

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

Page 36: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

36

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.

Page 37: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

37

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

Page 38: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

38

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

Page 39: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

39

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

Tabela 26.a) Funkcije PortaC i registri

Page 40: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

40

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.

Page 41: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

41

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

Page 42: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

42

12

C 3

2 20 u F

C 4

1 00 n F

C 1

2 20 u F

D 8 1 N 58 1 9

C 2

1 00 n F

M C L R1

P A 02

P A 13

P A 24

P A 35

P A 46

P A 57

R D8

W R9

P C 21 7

P D 22 1

P D 32 2

P C 42 3

P C 52 4

P C 62 5

P C 72 6

P D 42 7

P D 52 8

P D 62 9

P D 73 0

C S1 0

V D D1 1

V S S1 2

O S C 11 3

O S C 21 4

P C 01 5

P C 11 6

P C 31 8

P D 01 9

P D 12 0

V S S3 1

V D D3 2

P B 03 3

P B 13 4

P B 23 5

P B 33 6

P B 43 7

P B 53 8

P B 63 9

P B 74 0

IK 2

P IC 1 6 F8 7 7 -0 4

C 5

2 7p F

C 6

2 7p F

Qu 1

4 MH z

T T 1

D 1L E D

C 1 +1

V cc1 6

V +2

G n d1 5

C 1 -3

T 1o u t1 4

C 2 +4

R 1 in1 3

C 2 -5

R 1 ou t1 2

V -6

T 1i n1 1

T 2o u t7

T 2i n1 0

R 2 in8

R 2 ou t9

IK 3

MA X 23 2

162738495

C N 1

D B 9 /F

C 1 11 00 n F

C 1 0

100n

F

C 8

1 00 n F

C 9

100n

F

C 72 20 n F

V in1

Gn

d2

V o ut3

IK 1

L M78 0 5

12

43

S 1

S W DI P -2

R 1

1 0K

R 2

1 0K

R 3

1 0K

D 2L E D

R 4

2 K 2R 5

2 K 2

A 0A 1N CG N D S D A

S C LW P

V C C

IK 5

2 4C 0 2

A 0A 1N CG N D S D A

S C LW P

V C C

IK 4

2 4C 0 2 D 35 V 1

D 45 V 1

R 8

2 K 2 R 9

2 K 2

1 2 3

J 1

R 6

1 0K

R 7

1 0K

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 (Vout = 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.

Page 43: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

43

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”

Page 44: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

44

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

Page 45: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

45

Slika 29a: Realizovani uređaj

Page 46: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

46

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();

Page 47: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

47

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

Page 48: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

48

$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

Page 49: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

49

$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

Page 50: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

50

$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:

Page 51: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

51

$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

Page 52: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

52

$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

Page 53: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

53

$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

Page 54: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

54

$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);

Page 55: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

55

$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

Page 56: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

56

$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

Page 57: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

57

;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

Page 58: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

58

;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

Page 59: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

59

: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

Page 60: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

60

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.

Page 61: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

61

Slika 32 Uključivanje drajvera i prioriteta

Slika 33. Podešavanje parametara programa

Page 62: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

62

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

Page 63: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

63

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:

Page 64: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

64

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.

Page 65: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

65

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»)

Page 66: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

66

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

Page 67: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

67

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

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

Page 68: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

68

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.

Page 69: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

69

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»)

Page 70: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

70

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.

Page 71: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

71

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).

Page 72: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

72

Slika 43. Sadržaj memorije 24C02 posle proizvoljnog programiranja

Page 73: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

73

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.

Page 74: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

74

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

Page 75: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

75

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 [email protected]

Obrazovanje „Mašinsko-elektrotehnička škola“ - Bor

Stepen stručne spreme IV stepen, elektrotehničar elektronike

Godina upisa na

Elektronski fakultet

2001.

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)

Page 76: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

76

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 [email protected]

Obrazovanje Tehnička škola Zaječar

Stepen stručne spreme IV stepen, Elektrotehničar automatike

Godina upisa na

Elektronski fakultet

1997.

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)

Page 77: serijskog EEPROM -a pomoću - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/ITrucic - DPrvulovic - Programiranje serijskog EEPROM-a... · 3 Uvod Osnovna ideja ovog projekta je praktična

77