Professional Documents
Culture Documents
ELEKTORNSKI FAKULTET
KATEDRA ZA ELEKTRONIKU
Studenti:
Darko Prvulovi 10610
Ivan Truci
9264
Mentor:
Mile K. Stojev, prof. dr.
Sadraj
Uvod.................................................................................3
Serijska komunikacija RS232.......................................4
Serijski EEPROM...........................................................10
Opte karakteristike mikrokontrolera.............................15
Funkcionalne jedinice mikrokontrolera..........................16
RISK procesori i HARVARD arhitektura......................20
Mikrokontroler PIC16F877............................................22
Osnovne karakteristike mikrokontrolera........................25
Arhitektura mikrokontrolera..........................................26
Realizacija projektnog zadatka.......................................41
Program u mikroC-u.......................................................46
Program u asembleru......................................................47
Heksadecimalni kod.......................................................58
Sotver ICprog.................................................................59
Softver microC...............................................................62
UART terminal...............................................................63
Laboratorijska veba......................................................65
Zakljuak........................................................................73
Literatura........................................................................74
Krae biografije autora...................................................75
dodatak: Data sheet
Uvod
Osnovna ideja ovog projekta je praktina realizacija upisa i itanja sadraja
serijskog EEPROM-a uz pomo mikrokontrolera PIC16F877A.
U drugom poglavlju ukratko je objanjena serijska komunikacija na PC
raunarima, koja je u ovom sluaju realizovana uz pomo kola MAX232 koje
ima ulogu prilagoenja izmeu serijskog porta raunara i samog ureaja.
Tree poglavlje opisuje serijski EEPROM 24C02 uz odgovarajue slike
samog kola i karakteristike.
U etvrtom poglavlju opisane su opte karakteristike mikrokontrolera, dok
peto i esto poglavlje opisuje funkcionalne jedinice mikrokontrolera, RISK
procesore, kao i HARVARD arhitekturu. Poglavlja 7, 8, 9 i 10 vezana su
konkretno za mikrokontroler koji je iskorien za ovaj projekat (PIC16F877).
7. poglavlje opisuje pomenuti mikrokontroler, a prikazan je i njegov fiziki
izgled. U 8., 9., i 10. poglavlju, redom su opisane osnovne karakteristike
mikrokontrolera, arhitektura mikrokontrolera, kao i oranizacija njegove
memorije.
Projektni zadatak, kao i programski kod u microC-u, program u asembleru
i heksadecimalni kod, redom su opisani u poglavljima 11, 12, 13 i 14. Poglavlja
15, 16, 17 opisuju nain instalacije programa Icprog, microC i podeavanje
parametara UART terminala.
Laboratorijska veba je detaljno opisana u osamnaestom poglavlju, da bi
na kraju izveli zakljuak i dali spisak literature koriene prilikom izrade ovog
projekta. Priloene su i kratke biografije autora projekta.
Uz projekat su priloeni izvodi data sheet-ova serijskog EEPROMA 24C02
i mikrokontrolera PIC16F877.
Serijski port se drugaije naziva i komunikacijski (communication COM) port i on je bidirekcioni. Bidirekciona komunikacija omoguuje ureaju
i da prima i da alje podatke. U zavisnosti od toga da li serijski ureaji koriste
razliite pinove za prijem i slanje ili samo jedan, mogue je razlikovati dva tipa
komunikacije: full-duplex (informacije se mogu istovremeno prenositi u oba
smera) i half-duplex (dok se informacije prenose u jednom smeru, prenos iz
drugog smera je zabranjen).
Serijski port se zasniva na UART kontrolerskom ipu, koji predstavlja
kljunu komponentu serijske komunikacije. Ovaj ip, s jedne strane prihvata
bajtove podataka od mikroprocesorskog sistema, transformie ih u bitski niz i
alje bit-po-bit.
Postoje dva glavna oblika serijskog prenosa: sinhroni i asinhoni. Sinhoni
prenos podrazumeva da predajnik i prijemnik dele zajedniki takt, ili da
predajnik obezbedi poseban signal kojim e obavetavati prijemnik kada
dolazi sledei podatak. Kod asinhronog prenosa ne postoji poseban signal ve se
sinhronizacija vri pomou posebnih bitova koji se umeu.
DSUB-25
pin 2
pin 3
pin 4
pin 5
pin 6
pin 7
pin 8
pin 20
pin 22
DSUB-9
Signal
Opis signala
pin 3
pin 2
pin 7
pin 8
pin 6
pin 5
pin 1
pin 4
pin 9
TD
RD
RTS
CTS
DSR
SG
CD
DTR
RI
Transmit Data
Receive Data
Request To Send
Clear To Send
Data Set Ready
Signal Ground
Carrier Detect
Data Terminal Ready
Ring Indicator
Serijski EEPROM
Serijski EEPROM-i su danas sve pristupaniji za korienje. Tome
doprinose njegove male dimenzije (DIP 8), niska cena i mali broj potrebnih
linija za njegovo povezivanje sa mikrokontrolerom. Najea primena serijskih
EEPROM-a je u televiziji, SAT prijemnicima, video rekorderima gde slue za
memorisanje kanala.
Specifikacijom datom od strane proizvoaa, prilikom nestanka napajanja
garantovano je uvanje podataka do 40 godina. Opseg radnog napona kree su u
granicama od 3V do 5,5V. U sam ip ugraen je Power on Reset kojim su
zabranjene sve funkcije sve dok napon ne dostigne nominalnu vrednost.
Fabriki je odreeno da serijski EEPROM ima isti sadraj svih elija, $FF.
Microchip 24Cxx kola su kompatibilna sa I2C protokolom razvijenim od
strane Philipsa, koji omoguava korienje samo 2 bi-direkcione open-drain
linije.
Radna frekvencija kola kree se u granicama od 100kHz do 400kHz.
PIN
Function
VCC
Supply Voltage
SDA
SCL
Serial Clock
DC
Don`t connect
TEST
Test PIN
EEPROM 24c02 ima kapacitet od ukupno 2kbit-a, organizovanih u singleblokove od 256 x 8 bita. Protok informacija iz kola i prema kolu je mogu samo
kad je magistrala slobodna. Prenos podataka mora biti konstantan, a ukoliko
doe do odreene varijacije, moe doi do prekida(dolazei bit moze biti
interpretiran kao START ili STOP bit).
START bit nastaje promenom logikog nivoa na liniji SDA sa 1 na 0
kada je SCL na visokom logikom nivou. Komanda START mora prethoditi
bilo kojoj komandi za transfer podataka.
STOP bit nastaje promenom nivoa na liniji SDA sa 0 na 1 dok je linija
SCL na visokom logikom nivou. Naredba STOP prekida komunikaciju izmeu
master i slave ipa ( ip koji kontrolie protok podataka se zove master, a
drugi drugi slave).
12
Nakon generisanja START bita, master alje slave adresu koju ine 4 device
select bita (1010) i 3 dont care bita. Osmi bit ima vrednost 1 ili 0 za itanje
ili upis.
13
Upisivanje u EEPROM
Postoje 2 naina upisa u serijski EEPROM 24c02:
- upisivanje pojedinanih bajtova
- upisivanje grupa bajtova
Upisivanje pojedinanih bajtova inicijalizuje START bit sa master kola.
Za njim slede device select bitna re (1010) i logika nula to znai da sledi
upisivanje. Deveti bit je ACK, bit potvrde.
Nakon svakog pristiglog bajta, tri najnia adresna pokazivaa svaki put se
uveavaju za jedan, dok pet viih ostaju nepromenjena. Ukoliko MASTER
poalje vie od 8 bajtova, broja adresa se vraa na poetno stanje i upisani
sadraj se brie.
14
15
ROM memorija
RAM memorija
EEPROM memorija
Registri posebne namene (SFR registri)
Programski broja
Upravljaka jedinica
Aritmetiko logika jedinica
A/D konvertor
U/I portovi
Oscilator
Tajmeri
Sigurnosni tajmer Watchdog tajmer
Jedinica za napajanje
ROM memorija
U ROM memoriji smeten je program koji mikrokontroler izvrava, a
tokom normalnog rada sadraj ove memorije se ne moe menjati. ROM
memorija savremenih mikrokontrolera moe biti programabilna, pri emu se
jedan mikrokontroler moe programirati vie puta, ime se projektantu olakava
konstruisanje eljenog sklopa. Programabilni ROM uglavnom je EEPROM ili
Flash tipa, to zavisi od konkretnog mikrokontrolera. Sadraj ROM memorije
se ne menja nakon iskljuenja napona napajanja.
16
RAM memorija
Ova memorija ima funkciju privremenog pohranjivanja podataka,
meurezultata i konanih rezultata u toku izvoenja programa. Pristup ovoj
memoriji je proizvoljan moe se i itati i u nju upisivati podaci. RAM
memorija gubi svoj sadraj ukoliko se iskljui napajanje .
EEPROM memorija
Sadraj EEPROM memorije moe da se menja tokom rada, ali se nakon
iskljuivanja napajanja sadraj ne gubi, nego ostaje sauvan u memoriji. Kod
mikrokontrolera EEPROM se uglavnom koristi kao memorija za postavljanje
poetnih podataka neophodnih za rad.
Programski broja
Ovo je registar u mikrokontroleru koji ima funkciju da u sebi uvek sadri
adresu memorijske lokacije u programskoj memoriji u kojoj se nalazi sledea
instrukcija programa koju treba izvriti, sem u sluaju da se trenutno izvrava
instrukcija skoka.
Upravljaka jedinica
Upravljaka jedinica ima funkciju da upravlja radom mikrokontrolera i
kontrolie izvravanje svih operacija. U sklopu ove jedinice se uglavnom nalazi
dekoder instrukcija i kontrolna logika koja na osnovu instrukcije koja se
trenutno izvrava ukljuuje odgovarajue upravljake signale.
17
A/D konvertor
Ovo je elektronski sklop koji ima ulogu da analognu ulaznu veliinu,
uglavnom napon, pretvori u njen digitalni ekvivalent u odgovarajuem
digitalnom kodu. Kod modernih mikrokontrolera ovi A/D konvertori su 8 bitni,
10 bitni ili 12 bitni. Jedan mikrokontroler moe da ima vie A/D konvertora.
U/I portovi
Funkcija U/I portova je da obezbede mikrokontroleru povezivanje sa
ostalim komponentama digitalnog sistema. Svaki od U/I portova ima dodeljeni
registar u kojem je smeten podatak koji se alje na port ili je primljen sa porta.
Zavisno od konkretne arhitekture, portovi mogu biti bit adresibilni, to znai da
se svakom bitu na portu moe dodeliti da li e biti ulazni ili izlazni.
Oscilator
Oscilator obezbeuje taktni signal odreenog oblika i frekvencije koji je
neophodan za dobru sinhronizaciju rada pojedinih komponenata u sistemu sa
mikrokontrolerom. Za dobar rad sistema neophodno je da takt signal bude
stabilne frekvencije i talasnog oblika, to se obezbeuje spoljnom
stabilizacijom, najee uz pomo kristala kvarca. Kod veine mikrokontrolera
interni takt signal sa kojim se sinhronizuju sve operacije dobija se deljenjem
frekvencije oscilatora nekim brojem koji je dobijen celobrojnim stepenovanjem
broja 2.
18
Tajmeri
Tajmeri su registri ije se stanje menja prilikom dovoenja impulsa na
njihov ulaz. Mogu se koristiti za merenje vremena izmeu dve pojave impulsa
na ulazu, ukoliko se pobuda dovodi iz internog oscilatora. Ukoliko je izvor
pobude izvan mikrokontrolera, tada se tajmer ponaa kao broja impulsa.
Jedinica za napajanje
Ova jedinica kod veine mikrokontrolera sadri logiku koja proverava
kakvog je kvaliteta napajanje komponente, poto je za kvalitetan rad kola
neophodno stabilno napajanje dovoljne snage. Ova logika projektovana je tako
da u sluaju nekvalitetnog napajanja, tzv. brown out izazove reset
mikrokontrolera. Sem toga, u sastavu ove jedinice nalazi se i spoljni prikljuak
za reset, tako da se reset mikrokontrolera moe izvriti i izvan mikrokontrolera.
19
Memorija za
podatke
Podaci
Centralna
procesorska
jedinica
Instrukcije
Memorija za
program
MIKROKONTROLER PIC16F877
Mikrokontroler PIC16F877A predstavlja integraciju mikroprocesora
(CPU), memorije i periferija. Ovaj mikrokontroler je izraen u CMOS
tehnologiji sa ugraenim FLASH i EEPROM memorijama, za uvanje programa i podataka. PIC16F877A ima tipinu RISC arhtekturu (karakterie manjim
skupom instrukcija koje se bre izvavaju u odnosu na CISC arhitekturu). Ovaj
mikrokontroler poseduje veinu potrebnih periferija na samom ipu tako da je
podesan za aplikacije na jednom ipu. U ovom projektu koristiemo
mikrokontroler proizvoaa Microchip.
Moemo jo rei da koristi ISP (In System Programming) tehniku
programiranja, za iji programator je dovoljno realizovati manji sklop od tri
otpornika i imati vezu sa serijskim portom raunara. Takoe, kompatibilan je sa
ostalim mikrokontrolerima iz Microchip-ove familije u smislu instrukcijskog
seta i arhitekture, tako da je prelazak na bilo koji drugi njihov mikrokontroler
veoma jednostavan.
RISC arhitektura omoguuje odvojene magistrale 8-bitnih podataka i 14bitne programske memorije, pa je mogue da se pribavlja naredna instrukcija
dok se izvrava tekua (eng. pipelining). Sve instrukcije traju jednako (osim u
sluaju grananja programa) i zavre se za etiri ciklusa oscilatora. Dakle, ako je
oscilator kongurisan na 4 MHz, dobija se da ciklus instrukcije iznosi 1 s.
Kao to smo ranije napomenuli, veina dananjih mikrokontrolera je
bazirano na Harvard arhitekturi, koja jasno definie etiri osnovne komponente
potrebne za embedded sistem. To ukljuuje CPU jezgro, memoriju za program
(ROM, EPROM ili Flash memorija), memoriju za podatke (RAM), jedan ili
vie tajmera (podesive i watchdog tajmere), kao i I/O linije za komunikaciju sa
eksternim periferijama i dopunskim resursima sve to treba da bude smeteno u
jednom integrisanom kolu. U daljem tekstu detaljnije e biti opisani delovi od
kojih je sastavljen mikrokontroler PIC16F877A.
22
23
24
25
Arhitektura mikrokontrolera
Kao to je istaknuto, mikrokontroler PIC16F877A poseduje tipinu
RISC arhitekturu, koja je prikazana na Sl.15. Arhitektura poseduje odvojene
magistrale za podatke i programski kd. Obim podataka je 8-bitni, dok je
programski kd 14-bitni. Mogue je protono izvrenje (pipelining). Sve
instrukcije su istog obima (osim instrukcija grananja) i izvavaju se za etiri
taktna intervala. Dakle, ukoliko se koristi oscilator od 20 MHz, ciklus
instrukcije traje 200 ns. Na Sl.15 prikazani su gradivni blokovi mikrokontrolera
PIC16F877A.
mikrokontrolera
26
27
28
30
31
Oscilator
Kod mikrokontrolera PIC16F877A postoje etiri konfiguracije oscilatora:
RC
XT
LP
HS
Resistor/Capacitor
Crystal / Resonator
Low Power Crystal
High Speed Crystal / Resonator.
32
Portovi
PIC16F877A poseduje pet portova (PORTA, PORTB, PORTC, PORTD i
PORTE) i oni pred-tavljaju vezu njegove interne strukture sa spoljanjim
svetom. Svaki od njih moe da se konfigurie kao ulazni ili kao izlazni.
Pomenuti portovi su razliitog obima:
PortA
PortA je 6-bitni (RA5-RA0) bidirekcioni port (podaci mogu da se alju u
oba smera). Sadraj re-gistra TRISA odreuje smer (ulazni ili izlazni) pinova na
portu. Blok-dijagrami za pin RA4 je prikazan na Sl. 21 i 22, dok su u tabeli
21.a) prikazane funkcije portaA i registri.
34
35
Port B
Port B je 8-bitni bidirekcioni port. Svakom pinu porta korespondira
odgovarajui bit u regis-tru TRISB, kojim se definie smer. Svi pinovi unutar
PortB poseduju pull-up otpornike. Ovi otpor-nici mogu da se ukljue
jednim kontrolnim bitom. To se postie postavljanjem RBPU' bita na 0.
Pull-up otpornici se automatski iskljuuju kada se pin konfigurie kao izlazni.
Otpornici su isklju-eni i kod Power-on reseta.
etiri pina na PORTB (RB7-RB4) imaju mogunost generisanja prekida.
Samo pinovi koji su definisani kao ulazni mogu da prouzrokuju prekid.
36
Port C
Port C je 8-bitni bidirekcioni port. Posebnost ovog porta se ogleda u tome
to poseduje ugraen USART modul, koji slui za serijsku komunikaciju
(npr. sa racunarom ili drugim mikrokontro-lerom). Modulu se pristupa preko
pinova RC7 i RC6. Pinove treba softverski konfigurisati da budu u funkciji
USART modula.
Na Slikama 25. i 26. prikazana je struktura PortaC, dok je funkcionalna
tabela registara koji se koriste za konfigurisanje samog porta data u Tabeli
26.a).
39
Portovi D i E
Port D je 8-bitni bidirekcioni port. Ovaj port moe da se konfigurie kao 8bitni paralelni mikro-procesorski port (parallel slave port-PSP) i to
podeavanjem konfiguracionog bita PSPMOTE (TRISC<4>). U ovom reimu
rada ulazni bafer je TTL tipa.
Port E je bidirekcioni veliine 3 bita. Ima mogunost A/D konverzije.
Ulazni bafer je tipa Schmitt Trigger. Pinovi mogu da se konfiguriu kao
digitalni ili analogni, kao i u sluaju PortaA, o emu je ve bilo rei.
Periferijske jedinice
Mikrokontroler PIC16F877 poseduje nekoliko korisnih periferijskih
modula. S obzirom da mikro-kontroler treba da razmenjuje podatke sa ostalim
komoponentama (registrima, memorijama, drugim mikrokontrolerima itd.) u tu
svrhu je opremljen sa tri hardverska komunikaciona modula.
Prvi od njih je SSP modul (Synchronous Serial Port), koji slui za
komunikaciju sa serijskim EEPROM-ima, pomerakim registrima, displejdrajverima itd. Ovaj modul moe da radi u jednom od dva reima:
Serial Peripheral Interface (SPI)
Inter-Integrated Circuit (I2C).
Drugi serijski komunikacioni modul je USART (Universal Synchronous
Asynchronous Receiver Transmiter). On uglavnom slui za povezivanje sa
personalnim raunarom, mada to nije jedina njegova mogunost primene.
USART moe da se konfigurie u neki od sledeih reima rada:
Asinhroni rad (full duplex)
Sinhroni master rad (half duplex)
Sinhroni slave rad (half duplex).
Osim serijskih, postoji i jedan paralelni komunikacioni modul. U
pitanju je modul PSP (Pa-rallel Slave Port). Njegov zadatak je da PIC16F877
direktno povee na 8-bitnu magistralu podataka drugog mikroprocesora.
Eksterni mikroprocesor tada, preko linija Read (RD) i Write (WR) moe da
ita i upisuje u registar PortD kao u svaki drugi 8-bitni latch.
40
41
D8
1 N 58 1 9
IK 1
1
V in
V o ut
G nd
1
2
L M78 0 5
C3
C4
1 00 n F
C2
C1
C10
1 00 n F
2 20 u F
1 00 n F
1 00 n F
2 20 u F
C9
C8
1 00 n F
R1
R2
1 0K
1 0K
MA X 23 2
CN1
16
15
14
13
12
11
10
9
1
6
2
7
3
8
4
9
5
C7
2 20 n F
D B 9 /F
R3
1 0K
TT1
IK 2
S1
1
2
C11
1 00 n F
IK 3
1
C1+
V cc
2
V+
Gn d
3
C1T1o u t
4
C2+
R 1 in
5
C 2 - R 1 ou t
6
VT1i n
7
T2o u t T2i n
8
R 2 in R 2 ou t
R4
4
3
S W DI P -2
R5
2K2
2K2
D2
LED
D1
LED
C5
2 7p F
Qu 1
C6
4 MH z
R6
2 7p F
1 0K
R7
1 0K
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
M C LR P B 7
PA0
PB6
PA1
PB5
PA2
PB4
PA3
PB3
PA4
PB2
PA5
PB1
RD
PB0
WR
VDD
CS
VSS
VDD
PD7
VSS
PD6
OSC 1 PD5
OSC 2 PD4
PC0
PC7
PC1
PC6
PC2
PC5
PC3
PC4
PD0
PD3
PD1
PD2
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
P IC 1 6 F8 7 7 -0 4
IK 4
IK 5
A0
A1
NC
GND
2 4C 0 2
1
2
3
J1
VC C
WP
SCL
SDA
A0
A1
NC
GND
2 4C 0 2
R8
VC C
WP
SCL
SDA
2K2
R9
2K2
D3
5V1
D4
5V1
Spisak komponenti:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Designator
Part Type
Footprint
R1
R2
R3
R4
R5
R6
R7
C1
C2
C3
C4
C5
C6
C7
C8
C9
C10
C11
Y1
D1
D2
D3
D4
D5
IK1
IK2
IK3
IK4
DC
DB9F
TT1
DIPSW2
LC8
LC8
LC40
J2
AXIAL0.4
AXIAL0.4
AXIAL0.4
AXIAL0.4
AXIAL0.4
AXIAL0.4
AXIAL0.4
RB.1/.2
RAD0.2
RB.1/.2
RAD0.2
RAD0.1
RAD0.1
RAD0.2
RAD0.2
RAD0.2
RAD0.2
RAD0.2
XTAL1
D0.1
D0.1
AXIAL0.3
AXIAL0.3
AXIAL0.3
TO-126
DIP40
DIP16
DIP8
POWER3
DB9RA/F
SW-4
DIPSW2
DIP8
DIP8
DIP40
PH3/F
Ugljenoslojni otpornik
Ugljenoslojni potenciometar
Elektrolitski kondenzator
Poliesterski blok kondenzator
Keramiki kondenzator through hole
43
Quartz
Red Diffused LED
Yellow diffused LED
Linear voltage regulator
Microcontroller
Driver/Receiver
Power Jack
Switch
Tact switch
Low_cost/Professional Socket
Pin_Header/F
Kristal kvarca
Crvena difuzna LED dioda
uta difuzna LED dioda
Linearni regulator napona
Mikrokontroler
Drajver/prijemnik
Konektor (dek) za napajanje
Prekida
Taster
Jeftino/profesionalno podnoje
Pin-letvica (muka)
44
45
Program u mikroC-u
unsigned short i=0, j=0, k;
void main() {
TRISA = 0b000011;
PORTA = 0;
ADCON1 = 6;
delay_ms(1000);
PORTA.F3 = !PORTA.F0;
PORTA.F2 = !PORTA.F1;
i.F0 = !PORTA.F1;
i.F1 = !PORTA.F0;
// Inicijalizacija USART terminala
Usart_init(2400);
Usart_Write(i);
Soft_I2C_Config(&PORTD, 1, 0); // Inicijalizacija USART terminala
Soft_I2C_Start();
// Pocetak upisa
Soft_I2C_Write(0xA2);
// Adresa 24C02
Soft_I2C_Write(i);
// Pocetna lokacija
while ((j < 10)&& (i!=0)) {
Soft_I2C_Write(2*i+j);
Usart_Write(2*i+j);
j++;
}
Soft_I2C_Stop();
j=0;
if (i==0) {
delay_ms(100);
while (j < 32) {
Soft_I2C_Start();
Soft_I2C_Write(0xA2);
Soft_I2C_Write(j);
Soft_I2C_Stop();
Soft_I2C_Start();
46
Soft_I2C_Write(0xA3);
k = Soft_I2C_Read(0);
Usart_Write(k);
Soft_I2C_Stop();
j++;
// Citanje
}
delay_ms(100);
Usart_Write(j-1);
j=0;
}
}//~!
Napomena:
Koriena je gotova I2C biblioteka iz kompajlera mikroC.
Program u asembleru
; ADDRESS OPCODE
ASM
; ---------------------------------------------$0000 $28F8
GOTO _main
$0004 $
_Delay_1us:
;delays.c,7 ::
void Delay_1us() {
;delays.c,8 ::
Delay_us(1);
$0004 $0000
NOP
;delays.c,9 ::
}
$0005 $0008
RETURN
$0006 $
_PutZerosToLAT:
$0006 $0804
MOVF FSR, 0
$0007 $1303
BCF STATUS, RP1
$0008 $1283
BCF STATUS, RP0
$0009 $00AA
MOVWF
PutZerosToLAT_k_L0
$000A $0820
MOVF ___porti2c, 0
$000B $0084
MOVWF
FSR
$000C $1384
BCF FSR, 7
$000D $0800
MOVF INDF, 0
$000E $00A9
MOVWF
PutZerosToLAT_temp_L0
$000F $10A9
BCF FLOC_PutZerosToLAT+0, ____sdai2c
$0010 $1029
BCF FLOC_PutZerosToLAT+0, ____scli2c
$0011 $0829
MOVF PutZerosToLAT_temp_L0, 0
47
$0012 $0080
MOVWF
INDF
$0013 $082A
MOVF PutZerosToLAT_k_L0, 0
$0014 $0084
MOVWF
FSR
$0015 $0008
RETURN
$0016 $
_Usart_Write:
$0016 $
L_Usart_Write_3:
$0016 $3000
MOVLW
0
$0017 $1303
BCF STATUS, RP1
$0018 $1683
BSF STATUS, RP0
$0019 $1898
BTFSC
TXSTA, 1
$001A $3001
MOVLW
1
$001B $00F1
MOVWF
STACK_1
$001C $0871
MOVF STACK_1, 0
$001D $3A00
XORLW
0
$001E $1D03
BTFSS STATUS, Z
$001F $2822
GOTO L_Usart_Write_4
$0020 $0000
NOP
$0021 $2816
GOTO L_Usart_Write_3
$0022 $
L_Usart_Write_4:
$0022 $1283
BCF STATUS, RP0
$0023 $0824
MOVF FARG_Usart_Write+0, 0
$0024 $0099
MOVWF
TXREG
$0025 $0008
RETURN
$0026 $
_Soft_I2C_Start:
$0026 $1303
BCF STATUS, RP1
$0027 $1283
BCF STATUS, RP0
$0028 $0820
MOVF ___porti2c, 0
$0029 $0084
MOVWF
FSR
$002A $1383
BCF STATUS, 7
$002B $1480
BSF INDF, ____sdai2c
$002C $2004
CALL _Delay_1us
$002D $1400
BSF INDF, ____scli2c
$002E $2004
CALL _Delay_1us
$002F $2006
CALL _PutZerosToLAT
$0030 $1080
BCF INDF, ____sdai2c
$0031 $2004
CALL _Delay_1us
$0032 $2006
CALL _PutZerosToLAT
$0033 $1000
BCF INDF, ____scli2c
$0034 $0008
RETURN
$0035 $
_Soft_I2C_Write:
$0035 $3008
MOVLW
8
$0036 $1303
BCF STATUS, RP1
$0037 $1283
BCF STATUS, RP0
$0038 $00A5
MOVWF
Soft_I2C_Write_temp_L0
$0039 $01A6
CLRF Soft_I2C_Write_r_L0, 1
$003A $0820
MOVF ___porti2c, 0
$003B $0084
MOVWF
FSR
$003C $1383
BCF STATUS, 7
$003D $
L_Soft_I2C_Write_0:
$003D $0825
MOVF Soft_I2C_Write_temp_L0, 0
48
$003E $1903
BTFSC
STATUS, Z
$003F $285A
GOTO L_Soft_I2C_Write_1
$0040 $2004
CALL _Delay_1us
$0041 $2004
CALL _Delay_1us
$0042 $2006
CALL _PutZerosToLAT
$0043 $1000
BCF INDF, ____scli2c
$0044 $2004
CALL _Delay_1us
$0045 $0824
MOVF FARG_Soft_I2C_Write+0, 0
$0046 $1903
BTFSC
STATUS, Z
$0047 $2848
GOTO L_Soft_I2C_Write_2
$0048 $
L_Soft_I2C_Write_2:
$0048 $2006
CALL _PutZerosToLAT
$0049 $0DA4
RLF FARG_soft_i2c_write+0, F
$004A $1C03
BTFSS STATUS, 0
$004B $284F
GOTO l_018
$004C $1784
BSF FSR, 7
$004D $1480
BSF INDF, ____sdai2c
$004E $2851
GOTO l_01C
$004F $
l_018:
$004F $1784
BSF FSR, 7
$0050 $1080
BCF INDF, ____sdai2c
$0051 $
l_01C:
$0051 $0000
NOP
$0052 $2004
CALL _Delay_1us
$0053 $1400
BSF INDF, ____scli2c
$0054 $1384
BCF FSR, 7
$0055 $1C00
BTFSS INDF, ____scli2c
$0056 $2855
GOTO $-1
$0057 $1784
BSF FSR, 7
$0058 $03A5
DECF Soft_I2C_Write_temp_L0, 1
$0059 $283D
GOTO L_Soft_I2C_Write_0
$005A $
L_Soft_I2C_Write_1:
$005A $01A6
CLRF Soft_I2C_Write_r_L0, 1
$005B $2004
CALL _Delay_1us
$005C $2006
CALL _PutZerosToLAT
$005D $0000
NOP
$005E $1000
BCF INDF, ____scli2c
$005F $2004
CALL _Delay_1us
$0060 $1480
BSF INDF, ____sdai2c
$0061 $2004
CALL _Delay_1us
$0062 $2004
CALL _Delay_1us
$0063 $0826
MOVF Soft_I2C_Write_r_L0, 0
$0064 $1903
BTFSC
STATUS, Z
$0065 $2866
GOTO L_Soft_I2C_Write_3
$0066 $
L_Soft_I2C_Write_3:
$0066 $1400
BSF INDF, ____scli2c
$0067 $1384
BCF FSR, 7
$0068 $1C00
BTFSS INDF, ____scli2c
$0069 $2868
GOTO $-1
$006A $01A6
CLRF FLOC_soft_i2c_write+1
49
$006B $2004
CALL _Delay_1us
$006C $1384
BCF FSR, 7
$006D $1880
BTFSC
INDF, ____sdai2c
$006E $1426
BSF FLOC_soft_i2c_write+1, 0
$006F $2004
CALL _Delay_1us
$0070 $2004
CALL _Delay_1us
$0071 $2004
CALL _Delay_1us
$0072 $2004
CALL _Delay_1us
$0073 $2004
CALL _Delay_1us
$0074 $2004
CALL _Delay_1us
$0075 $2004
CALL _Delay_1us
$0076 $2004
CALL _Delay_1us
$0077 $2006
CALL _PutZerosToLAT
$0078 $1784
BSF FSR, 7
$0079 $1000
BCF INDF, ____scli2c
$007A $1080
BCF INDF, ____sdai2c
$007B $0826
MOVF Soft_I2C_Write_r_L0, 0
$007C $00F0
MOVWF
STACK_0
$007D $0008
RETURN
$007E $
_Soft_I2C_Stop:
$007E $1303
BCF STATUS, RP1
$007F $1283
BCF STATUS, RP0
$0080 $0820
MOVF ___porti2c, 0
$0081 $0084
MOVWF
FSR
$0082 $1383
BCF STATUS, 7
$0083 $2006
CALL _PutZerosToLAT
$0084 $1080
BCF INDF, ____sdai2c
$0085 $2004
CALL _Delay_1us
$0086 $1400
BSF INDF, ____scli2c
$0087 $1384
BCF FSR, 7
$0088 $1C00
BTFSS INDF, ____scli2c
$0089 $2888
GOTO $-1
$008A $1784
BSF fsr, 7
$008B $2004
CALL _Delay_1us
$008C $2004
CALL _Delay_1us
$008D $2004
CALL _Delay_1us
$008E $2004
CALL _Delay_1us
$008F $1480
BSF INDF, ____sdai2c
$0090 $2004
CALL _Delay_1us
$0091 $0008
RETURN
$0092 $
_Soft_I2C_Read:
$0092 $3008
MOVLW
8
$0093 $1303
BCF STATUS, RP1
$0094 $1283
BCF STATUS, RP0
$0095 $00A5
MOVWF
Soft_I2C_Read_temp_L0
$0096 $01A6
CLRF Soft_I2C_Read_r_L0, 1
$0097 $0820
MOVF ___porti2c, 0
$0098 $0084
MOVWF
FSR
$0099 $1383
BCF STATUS, 7
$009A $
L_Soft_I2C_Read_4:
50
$009A $0825
MOVF Soft_I2C_Read_temp_L0, 0
$009B $3C00
SUBLW
0
$009C $1803
BTFSC
STATUS, C
$009D $28B4
GOTO L_Soft_I2C_Read_5
$009E $2004
CALL _Delay_1us
$009F $0000
NOP
$00A0 $1480
BSF INDF, ____sdai2c
$00A1 $2004
CALL _Delay_1us
$00A2 $0826
MOVF Soft_I2C_Read_r_L0, 0
$00A3 $1903
BTFSC
STATUS, Z
$00A4 $28A5
GOTO L_Soft_I2C_Read_6
$00A5 $
L_Soft_I2C_Read_6:
$00A5 $1400
BSF INDF, ____scli2c
$00A6 $1384
BCF FSR, 7
$00A7 $1C00
BTFSS INDF, ____scli2c
$00A8 $28A7
GOTO $-1
$00A9 $1880
BTFSC
INDF, ____sdai2c
$00AA $1403
BSF STATUS, C
$00AB $1C80
BTFSS INDF, ____sdai2c
$00AC $1003
BCF STATUS, C
$00AD $0DA6
RLF FLOC_soft_i2c_read+1, F
$00AE $2004
CALL _Delay_1us
$00AF $2006
CALL _PutZerosToLAT
$00B0 $1784
BSF FSR, 7
$00B1 $1000
BCF INDF, ____scli2c
$00B2 $03A5
DECF Soft_I2C_Read_temp_L0, 1
$00B3 $289A
GOTO L_Soft_I2C_Read_4
$00B4 $
L_Soft_I2C_Read_5:
$00B4 $1480
BSF INDF, ____sdai2c
$00B5 $2004
CALL _Delay_1us
$00B6 $0824
MOVF FARG_Soft_I2C_Read+0, 0
$00B7 $1903
BTFSC
STATUS, Z
$00B8 $28BA
GOTO L_Soft_I2C_Read_7
$00B9 $2006
CALL _PutZerosToLAT
$00BA $
L_Soft_I2C_Read_7:
$00BA $0824
MOVF FARG_soft_i2c_read+0, W
$00BB $1903
BTFSC
STATUS, 2
$00BC $28BE
GOTO L_07C
$00BD $1080
BCF INDF, ____sdai2c
$00BE $
L_07C:
$00BE $0000
NOP
$00BF $2004
CALL _Delay_1us
$00C0 $1400
BSF INDF, ____scli2c
$00C1 $1384
BCF FSR, 7
$00C2 $1C00
BTFSS INDF, ____scli2c
$00C3 $28C2
GOTO $-1
$00C4 $1784
BSF FSR, 7
$00C5 $2004
CALL _Delay_1us
$00C6 $2006
CALL _PutZerosToLAT
$00C7 $1000
BCF INDF, ____scli2c
51
$00C8 $2004
CALL _Delay_1us
$00C9 $2006
CALL _PutZerosToLAT
$00CA $1080
BCF INDF, ____sdai2c
$00CB $0826
MOVF Soft_I2C_Read_r_L0, 0
$00CC $00F0
MOVWF
STACK_0
$00CD $0008
RETURN
$00CE $
GlobalIniI2C:
$00CE $3000
MOVLW
0
$00CF $1303
BCF STATUS, RP1
$00D0 $1283
BCF STATUS, RP0
$00D1 $00A1
MOVWF
_i+0
$00D2 $3000
MOVLW
0
$00D3 $00A2
MOVWF
_j+0
$00D4 $0008
RETURN
$00D5 $
_Usart_Init:
$00D5 $1303
BCF STATUS, RP1
$00D6 $1683
BSF STATUS, RP0
$00D7 $1698
BSF TXSTA, 5
$00D8 $3090
MOVLW
144
$00D9 $1283
BCF STATUS, RP0
$00DA $0098
MOVWF
RCSTA
$00DB $1683
BSF STATUS, RP0
$00DC $1787
BSF TRISC, 7
$00DD $1307
BCF TRISC, 6
$00DE $
L_Usart_Init_0:
$00DE $1283
BCF STATUS, RP0
$00DF $1E8C
BTFSS PIR1, 5
$00E0 $28E4
GOTO L_Usart_Init_1
$00E1 $081A
MOVF RCREG, 0
$00E2 $00A8
MOVWF
Usart_Init_tmp_L0
$00E3 $28DE
GOTO L_Usart_Init_0
$00E4 $
L_Usart_Init_1:
$00E4 $0008
RETURN
$00E5 $
_Soft_I2C_Init:
$00E5 $1303
BCF STATUS, RP1
$00E6 $1283
BCF STATUS, RP0
$00E7 $0824
MOVF FARG_Soft_I2C_Init+0, 0
$00E8 $0084
MOVWF
FSR
$00E9 $0800
MOVF INDF, 0
$00EA $00A5
MOVWF
Soft_I2C_Init_temp_L0
$00EB $10A5
BCF FLOC_Soft_I2C_Init+0, ____sdai2c
$00EC $1025
BCF FLOC_Soft_I2C_Init+0, ____scli2c
$00ED $0825
MOVF Soft_I2C_Init_temp_L0, 0
$00EE $0080
MOVWF
INDF
$00EF $1784
BSF FSR, 7
$00F0 $0804
MOVF FSR, 0
$00F1 $00A0
MOVWF
___porti2c
$00F2 $1480
BSF INDF, ____sdai2c
$00F3 $1400
BSF INDF, ____scli2c
$00F4 $1384
BCF FSR, 7
52
$00F5 $1C00
BTFSS INDF, ____scli2c
$00F6 $28F5
GOTO $-1
$00F7 $0008
RETURN
$00F8 $
_main:
;I2C.c,3 ::
void main() {
;I2C.c,4 ::
TRISA = 0b000011;
//Definisanje pinova Porta A
$00F8 $20CE
CALL GlobalIniI2C
$00F9 $3003
MOVLW
3
$00FA $1683
BSF STATUS, RP0
$00FB $0085
MOVWF
TRISA
;I2C.c,5 ::
PORTA = 0;
$00FC $1283
BCF STATUS, RP0
$00FD $0185
CLRF PORTA, 1
;I2C.c,6 ::
ADCON1 = 6;
$00FE $3006
MOVLW
6
$00FF $1683
BSF STATUS, RP0
$0100 $009F
MOVWF
ADCON1
;I2C.c,7 ::
delay_ms(1000);
$0101 $3006
MOVLW
6
$0102 $00FC
MOVWF
STACK_12
$0103 $30FF
MOVLW
255
$0104 $00FB
MOVWF
STACK_11
$0105 $30FF
MOVLW
255
$0106 $00FA
MOVWF
STACK_10
$0107 $0BFC
DECFSZ
STACK_12, F
$0108 $290A
GOTO $+2
$0109 $2911
GOTO $+8
$010A $0BFB
DECFSZ
STACK_11, F
$010B $290D
GOTO $+2
$010C $2910
GOTO $+4
$010D $0BFA
DECFSZ
STACK_10, F
$010E $290D
GOTO $-1
$010F $290A
GOTO $-5
$0110 $2907
GOTO $-9
$0111 $301A
MOVLW
26
$0112 $00FB
MOVWF
STACK_11
$0113 $30FF
MOVLW
255
$0114 $00FA
MOVWF
STACK_10
$0115 $0BFB
DECFSZ
STACK_11, F
$0116 $2918
GOTO $+2
$0117 $291B
GOTO $+4
$0118 $0BFA
DECFSZ
STACK_10, F
$0119 $2918
GOTO $-1
$011A $2915
GOTO $-5
$011B $3042
MOVLW
66
$011C $00FA
MOVWF
STACK_10
$011D $0BFA
DECFSZ
STACK_10, F
$011E $291D
GOTO $-1
;I2C.c,8 ::
PORTA.F3 = !PORTA.F0; // Nacin paljenja LED.
$011F $3001
MOVLW
1
53
$0120 $1283
$0121 $1805
$0122 $3000
$0123 $00F0
$0124 $3000
$0125 $1870
$0126 $3008
$0127 $0605
$0128 $3908
$0129 $0685
;I2C.c,9 ::
$012A $3001
$012B $1885
$012C $3000
$012D $00F0
$012E $3000
$012F $1870
$0130 $3004
$0131 $0605
$0132 $3904
$0133 $0685
;I2C.c,11 ::
$0134 $3001
$0135 $1885
$0136 $3000
$0137 $00F0
$0138 $3000
$0139 $1870
$013A $3001
$013B $0621
$013C $3901
$013D $06A1
;I2C.c,12 ::
$013E $3001
$013F $1805
$0140 $3000
$0141 $00F0
$0142 $3000
$0143 $1870
$0144 $3002
$0145 $0621
$0146 $3902
$0147 $06A1
;I2C.c,14 ::
$0148 $3067
$0149 $1683
$014A $0099
$014B $1518
$014C $20D5
;I2C.c,15 ::
$014D $0821
MOVF _i, 0
$014E $00A4
MOVWF
FARG_Usart_Write+0
$014F $2016
CALL _Usart_Write
;I2C.c,16 ::
Soft_I2C_Config(&PORTD, 1, 0); // Inicijalizacija USART terminala
$0150 $3008
MOVLW
PORTD
$0151 $00A4
MOVWF
FARG_Soft_I2C_Init+0
$0152 $20E5
CALL _Soft_I2C_Init
;I2C.c,17 ::
Soft_I2C_Start();
// Pocetak upisa
$0153 $2026
CALL _Soft_I2C_Start
;I2C.c,18 ::
Soft_I2C_Write(0xA2);
// Adresa 24C02
$0154 $30A2
MOVLW
162
$0155 $00A4
MOVWF
FARG_Soft_I2C_Write+0
$0156 $2035
CALL _Soft_I2C_Write
;I2C.c,19 ::
Soft_I2C_Write(i);
// Pocetna lokacija
$0157 $0821
MOVF _i, 0
$0158 $00A4
MOVWF
FARG_Soft_I2C_Write+0
$0159 $2035
CALL _Soft_I2C_Write
;I2C.c,21 ::
while ((j < 10)&& (i!=0)) {
$015A $
L_main_0:
$015A $300A
MOVLW
10
$015B $0222
SUBWF
_j, 0
$015C $1803
BTFSC
STATUS, C
$015D $2982
GOTO L_main_1
$015E $0821
MOVF _i, 0
$015F $3A00
XORLW
0
$0160 $1903
BTFSC
STATUS, Z
$0161 $2982
GOTO L_main_1
$0162 $
L64_ex_L_main_1:
;I2C.c,24 ::
Soft_I2C_Write(2*i+j);
$0162 $3001
MOVLW
1
$0163 $00F4
MOVWF
STACK_4
$0164 $0821
MOVF _i, 0
$0165 $00F0
MOVWF
STACK_0
$0166 $0874
MOVF STACK_4, 0
$0167 $
L_main_7:
$0167 $1903
BTFSC
STATUS, Z
$0168 $296D
GOTO L_main_8
$0169 $0DF0
RLF STACK_0, 1
$016A $1070
BCF STACK_0, 0
$016B $3FFF
ADDLW
255
$016C $2967
GOTO L_main_7
$016D $
L_main_8:
$016D $0822
MOVF _j, 0
$016E $0770
ADDWF
STACK_0, 0
$016F $00A4
MOVWF
FARG_Soft_I2C_Write+0
$0170 $2035
CALL _Soft_I2C_Write
;I2C.c,25 ::
Usart_Write(2*i+j);
$0171 $3001
MOVLW
1
$0172 $00F4
MOVWF
STACK_4
$0173 $0821
MOVF _i, 0
55
$0174 $00F0
MOVWF
STACK_0
$0175 $0874
MOVF STACK_4, 0
$0176 $
L_main_9:
$0176 $1903
BTFSC
STATUS, Z
$0177 $297C
GOTO L_main_10
$0178 $0DF0
RLF STACK_0, 1
$0179 $1070
BCF STACK_0, 0
$017A $3FFF
ADDLW
255
$017B $2976
GOTO L_main_9
$017C $
L_main_10:
$017C $0822
MOVF _j, 0
$017D $0770
ADDWF
STACK_0, 0
$017E $00A4
MOVWF
FARG_Usart_Write+0
$017F $2016
CALL _Usart_Write
;I2C.c,27 ::
j++;
$0180 $0AA2
INCF _j, 1
;I2C.c,28 ::
}
$0181 $295A
GOTO L_main_0
$0182 $
L_main_1:
;I2C.c,29 ::
Soft_I2C_Stop();
$0182 $207E
CALL _Soft_I2C_Stop
;I2C.c,31 ::
j=0;
$0183 $01A2
CLRF _j, 1
;I2C.c,32 ::
if (i==0) {
$0184 $0821
MOVF _i, 0
$0185 $3A00
XORLW
0
$0186 $1D03
BTFSS STATUS, Z
$0187 $29C4
GOTO L_main_4
;I2C.c,33 ::
delay_ms(100);
$0188 $3082
MOVLW
130
$0189 $00FB
MOVWF
STACK_11
$018A $30FF
MOVLW
255
$018B $00FA
MOVWF
STACK_10
$018C $0BFB
DECFSZ
STACK_11, F
$018D $298F
GOTO $+2
$018E $2992
GOTO $+4
$018F $0BFA
DECFSZ
STACK_10, F
$0190 $298F
GOTO $-1
$0191 $298C
GOTO $-5
$0192 $3087
MOVLW
135
$0193 $00FA
MOVWF
STACK_10
$0194 $0BFA
DECFSZ
STACK_10, F
$0195 $2994
GOTO $-1
$0196 $0000
NOP
;I2C.c,35 ::
while (j < 32) {
// Citanje lokacije EEPROM-a
$0197 $
L_main_5:
$0197 $3020
MOVLW
32
$0198 $0222
SUBWF
_j, 0
$0199 $1803
BTFSC
STATUS, C
$019A $29B1
GOTO L_main_6
56
;I2C.c,36 ::
Soft_I2C_Start();
$019B $2026
CALL _Soft_I2C_Start
;I2C.c,37 ::
Soft_I2C_Write(0xA2);
// Adresa 24C02
$019C $30A2
MOVLW
162
$019D $00A4
MOVWF
FARG_Soft_I2C_Write+0
$019E $2035
CALL _Soft_I2C_Write
;I2C.c,38 ::
Soft_I2C_Write(j);
$019F $0822
MOVF _j, 0
$01A0 $00A4
MOVWF
FARG_Soft_I2C_Write+0
$01A1 $2035
CALL _Soft_I2C_Write
;I2C.c,39 ::
Soft_I2C_Stop();
$01A2 $207E
CALL _Soft_I2C_Stop
;I2C.c,40 ::
Soft_I2C_Start();
$01A3 $2026
CALL _Soft_I2C_Start
;I2C.c,41 ::
Soft_I2C_Write(0xA3);
$01A4 $30A3
MOVLW
163
$01A5 $00A4
MOVWF
FARG_Soft_I2C_Write+0
$01A6 $2035
CALL _Soft_I2C_Write
;I2C.c,42 ::
k = Soft_I2C_Read(0);
// Citanje
$01A7 $01A4
CLRF FARG_Soft_I2C_Read+0, 1
$01A8 $2092
CALL _Soft_I2C_Read
$01A9 $0870
MOVF STACK_0, 0
$01AA $00A3
MOVWF
_k
;I2C.c,43 ::
Usart_Write(k);
$01AB $0870
MOVF STACK_0, 0
$01AC $00A4
MOVWF
FARG_Usart_Write+0
$01AD $2016
CALL _Usart_Write
;I2C.c,44 ::
Soft_I2C_Stop();
$01AE $207E
CALL _Soft_I2C_Stop
;I2C.c,45 ::
j++;
$01AF $0AA2
INCF _j, 1
;I2C.c,47 ::
}
$01B0 $2997
GOTO L_main_5
$01B1 $
L_main_6:
;I2C.c,48 ::
delay_ms(100);
$01B1 $3082
MOVLW
130
$01B2 $00FB
MOVWF
STACK_11
$01B3 $30FF
MOVLW
255
$01B4 $00FA
MOVWF
STACK_10
$01B5 $0BFB
DECFSZ
STACK_11, F
$01B6 $29B8
GOTO $+2
$01B7 $29BB
GOTO $+4
$01B8 $0BFA
DECFSZ
STACK_10, F
$01B9 $29B8
GOTO $-1
$01BA $29B5
GOTO $-5
$01BB $3087
MOVLW
135
$01BC $00FA
MOVWF
STACK_10
$01BD $0BFA
DECFSZ
STACK_10, F
$01BE $29BD
GOTO $-1
$01BF $0000
NOP
57
;I2C.c,49 ::
Usart_Write(j-1);
$01C0 $0322
DECF _j, 0
$01C1 $00A4
MOVWF
FARG_Usart_Write+0
$01C2 $2016
CALL _Usart_Write
;I2C.c,50 ::
j=0;
$01C3 $01A2
CLRF _j, 1
;I2C.c,53 ::
}
$01C4 $
L_main_4:
;I2C.c,54 ::
}//~!
$01C4 $29C4
GOTO $
Heksadecimalni kd
:10000000F828FF3FFF3FFF3F0000080004080313EC
:100010008312AA002008840084130008A900A910F4
:100020002910290880002A088400080000300313E2
:10003000831698180130F1007108003A031D222838
:100040000000162883122408990008000313831265
:100050002008840083138014042000140420062048
:1000600080100420062000100800083003138312BB
:10007000A500A601200884008313250803195A2827
:100080000420042006200010042024080319482816
:100090000620A40D031C4F288417801451288417B0
:1000A00080100000042000148413001C55288417BD
:1000B000A5033D28A601042006200000001004200E
:1000C00080140420042026080319662800148413D1
:1000D000001C6828A601042084138018261404201C
:1000E00004200420042004200420042004200620EE
:1000F0008417001080102608F000080003138312F4
:100100002008840083130620801004200014841328
:10011000001C882884170420042004200420801454
:1001200004200800083003138312A500A60120084C
:10013000840083132508003C0318B4280420000021
:100140008014042026080319A52800148413001C19
:10015000A72880180314801C0310A60D0420062075
:1001600084170010A5039A2880140420240803197A
:10017000BA28062024080319BE2880100000042095
:1001800000148413001CC2288417042006200010C9
:100190000420062080102608F00008000030031319
:1001A0008312A1000030A2000800031383169816E2
:1001B00090308312980083168717071383128C1EC2
:1001C000E4281A08A800DE28080003138312240874
:1001D00084000008A500A5102510250880008417BC
:1001E0000408A000801400148413001CF5280800E3
:1001F000CE200330831685008312850106308316D6
:100200009F000630FC00FF30FB00FF30FA00FC0BC3
:100210000A291129FB0B0D291029FA0B0D290A298E
58
:1002200007291A30FB00FF30FA00FB0B18291B29A5
:10023000FA0B182915294230FA00FA0B1D29013052
:10024000831205180030F0000030701808300506E1
:1002500008398506013085180030F000003070182C
:100260000430050604398506013085180030F00099
:1002700000307018013021060139A106013005183F
:100280000030F00000307018023021060239A1065B
:100290006730831699001815D5202108A400162070
:1002A0000830A400E5202620A230A4003520210833
:1002B000A40035200A302202031882292108003ABE
:1002C000031982290130F4002108F0007408031991
:1002D0006D29F00D7010FF3F672922087007A400F8
:1002E00035200130F4002108F000740803197C293E
:1002F000F00D7010FF3F762922087007A400162029
:10030000A20A5A297E20A2012108003A031DC4290D
:100310008230FB00FF30FA00FB0B8F299229FA0B89
:100320008F298C298730FA00FA0B9429000020309D
:1003300022020318B1292620A230A4003520220869
:10034000A40035207E202620A330A4003520A4015F
:1003500092207008A3007008A40016207E20A20A34
:1003600097298230FB00FF30FA00FB0BB829BB292C
:10037000FA0BB829B5298730FA00FA0BBD2900001D
:100380002203A4001620A201C429FF3FFF3FFF3F24
:02400E00313D42
:00000001FF
Softver IC-Prog
Za programiranje mikrokontrolera PIC16F877A moe da se koristi softver
IC-Prog. Inae, ovaj softver je kompatibilan sa mnogim bootstrap loader-ima,
kao to su JDM Programmer, TAFE Programmer, TAIT Programmer,
Conquest Programmer, ProPIC 2 Programmer itd. ICProg poseduje
mogunost itanja, upisa i verifikacije (Read, Write, Verify) sadraja
mikrokontrolera. Naravno, softver dozvoljava mogunost podeavanja
parametara (WDT, PWRT, BODEN, LVP, CPD, CO, Debugger), kao i izbor
oscilatora (RC, LP, XT, HS).
Program IC-Prog se ne instalira na raunaru, ve se pokree direktno
tanije, klikom na fajl ICPROG.EXE (Sl. 30).
60
61
Softver mikroC
mikroC predstavlja moan softverski alat, koji je razvila beogradska
Mikroelektronika, i namenjen je pisanju kda za Microchip-ove PIC
mikrokontrolere. Koristei mikroC, programeru je omoguen jednostavan nain
da kontrolie proces programiranja i napravi kvalitetan firmware.
Osnovne karakteristike programa mikroC su sledee:
UART terminal
64
Laboratorijska veba
(I)
(II)
69
Napomena:
Posle svake operacije upisa serijskog EEPROM-a i provere sadraja,
vriti brisanje EEPROM-a 24C02.
(III)
Ponoviti postupak za stanja DIPSW2 = 10 . Treba da se dobije sadraj
serijskog EEPROM-a, kao na Slici 42.
70
(iv)
Prebaciti serijski EEPROM 24C02 u donje podnoje, koje je blie
konektoru DB9F.
Startovati program IC-Prog i u njemu proizvoljno upisati sadraj prvih 20
memorijskih lokacija serijskog EEPROM-a.
Postaviti DIPSW2 prekidae u iskljueno stanje (stanje 00 ili Off_Off).
Startovati program USART terminal.
Dovesti napajanje mikrokontroleru, odnosno ureaju.
Posle jedne sekunde ne treba da se upale diode.
Na ekranu e se pojaviti povorka od 20 osmobitnih rei koje su upisane
programom IC-Prog.
Proces je ilustrovan na slikama 43 i 44. Na Slici 44 su povorka
osmobitnih rei zapoinje prvom (0x00), a zavrava se krajnjom adresom
(0x19).
71
72
Zakljuak
U radu smo se bavili praktinom realizacija upisa i itanja sadraja serijskog
EEPROM-a preko mikrokontrolera PIC16F877-04 i softvera IC-Prog.
Najpre smo opisali serijsku komunikaciju kod PC raunara, koja je u ovom
sluaju ostvarena preko kola MAX232 koje prilagoava naponske nivoe
izmeu serijskog porta raunara i mikrokontrolera.
U treem poglavlje je opisan serijski EEPROM 24C02, uz odgovarajue
slike samog kola i njegove karakteristike.
U etvrtom poglavlju opisane su opte karakteristike mikrokontrolera, dok
peto i esto poglavlje opisuje funkcionalne jedinice mikrokontrolera, RISK
procesore, kao i HARVARD arhitekturu.
73
Literatura
[1] PIC16F87X, Datasheet, Microchip Tecnology, http://www.microchip.com
[2] 24C0xx, Serial EEPROM, http://datasheetarchive.com
[3] Serijska komunikacija raunara i USART modula mikrokontrolera
74
Ime
Prezime
Datum roenja
Brano stanje
Adresa stanovanja
E-mail adresa
Obrazovanje
Stepen strune spreme
Godina upisa na
Elektronski fakultet
Smer
Poznavanje jezika
Poznavanje softvera
Darko
Prvulovi
08.05.1982.
Neoenjen
. A. Kuna 13/9, Bor
darko019@gmail.com
Mainsko-elektrotehnika kola - Bor
IV stepen, elektrotehniar elektronike
2001.
Interesovanja
Osobine
Ostalo
Telekomunikacije (T)
Engleski (napredno)
MS Office, CorelDRAW, Windows okruenje,
Adobe Photoshop, ACDSee
75
Ime
Prezime
Datum roenja
Brano stanje
Adresa stanovanja
E-mail adresa
Obrazovanje
Stepen strune spreme
Godina upisa na
Elektronski fakultet
Smer
Poznavanje jezika
Poznavanje softvera
Interesovanja
Osobine
Ostalo
Ivan
Truci
15.02.1977.
Neoenjen
Vojvode Miia 17
trucic@gmail.com
Tehnika kola Zajear
IV stepen, Elektrotehniar automatike
1997.
Telekomunikacije (T)
Engleski (napredno)
Windows operativni sistem, Microsoft
Office, Adobe Photoshop
Elektronika, programiranje, mobilne
komunikacije, satelitske komunikacije,
fotografija, sport
Istrajnost, samouverenost, komunikativnost
Uesnik takmienja iz matematike u
osnovnoj i srednjoj koli, aktivno bavljenje
sportom(odbojka i koarka)
76
77