35
1 UNIVERZITET U NIŠU ELEKTRONSKI FAKULTET Katedra za elektroniku Predmet : Embeded sistemi Automatsko školsko zvono Profesor: Dr.Mile Stojčev Student: Radoslav Aleksić Br. indeksa 11716 U Nišu, 15.07.2008.

Automatsko Skolsko zvono - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/R.Aleksic - Automatsko Skolsko zvono.pdfNaizmenicni napona napajanja iz mreze 220V se preko transformatora tansformise

  • Upload
    others

  • View
    16

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Automatsko Skolsko zvono - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/R.Aleksic - Automatsko Skolsko zvono.pdfNaizmenicni napona napajanja iz mreze 220V se preko transformatora tansformise

1

UNIVERZITET U NIᘀUELEKTRONSKI FAKULTETKatedra za elektronikuPredmet : Embeded sistemi

Automatsko ᘐkolsko zvono

Profesor: Dr.Mile Stojაev

Student: Radoslav Aleksiၰ

Br. indeksa 11716

U Niᘐu, 15.07.2008.

Page 2: Automatsko Skolsko zvono - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/R.Aleksic - Automatsko Skolsko zvono.pdfNaizmenicni napona napajanja iz mreze 220V se preko transformatora tansformise

2

Sadr០aj:

1. Zadatak...............................................................................................(3)

2. Opis i analiza mikrokontrolera AT89S8253……………………..... (4)

3. Razrada projekta………………………………………….……........(8)

4. Softver……………………………………………………….….…(14)

5. Korisniაki interfejs…………………………………………….…..(26)

6. Kompletan kod…………………………………………….………(27)

Page 3: Automatsko Skolsko zvono - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/R.Aleksic - Automatsko Skolsko zvono.pdfNaizmenicni napona napajanja iz mreze 220V se preko transformatora tansformise

3

1. Zadatak

Projektovati automatsko ᘐkolsko zvono koriᘐၰenjem Atmelovog mikrokontrolera AT89S8253. Dan u nedelji i taაno vreme prikazivati na LCD displeju, zvono implementirati u vidu Buzzer-a. Zvono je potrebno oglasavati na svaki pun sat i na sat i petnaest minuta u vremenu od 8 do 18 აasova, svakog radnog dana.

Page 4: Automatsko Skolsko zvono - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/R.Aleksic - Automatsko Skolsko zvono.pdfNaizmenicni napona napajanja iz mreze 220V se preko transformatora tansformise

4

2. Opis i analiza mikrokontrolera AT89S8253

2.1 Opste karakteristike:

-Kompatibilan je sa procesorom 51;-12 k bytes fleᘐ memorija;-SPI serijlski unos za uაitavanje programa;-10000 read/write ciklusa;-2k byte EEPROM;-100000 write/read ciklusa(64kb korisniაka matrica);-Napon napajanja od 2,7V do 5.5 V;-Radna frekvencija od 0 do 24 MHz;-Memorijsko zakljuაavanje iz 3 nivoa;-256 x 8 unutrasnji ram;-32 I/O linije za programiranje;- Tri 16-bitna clock/timer brojaაa;-9 generatora prekida;-Poboljsani UART serijski port sa centriranjem detekcije greᘐke i automatskim prepoznavanjem adrese;-Male snage napajanja;-Uspostavljanje prekida u niskom rezimu;-Programilni Watchdog tajmer;-Dvostruki pokazivaა podataka;-Iskljuაivanje pomoၰu znaka (POWER OFF);-Fleksibilni ISP programator (byte i page mode);-Page mode: 64 byte/page za DATA memoriju;-Ⴠetvoronivovski, poboljᘐani kontoler prekida;-Unutraᘐnji POWER-ON reset;-42-pin PDIP model kuၰista za redukovanje EMS emisije;

2.2 Opis mikrokontrolera

AT89S8253 je osmobitni mikrokontroler visokih performansi i male potrosnje. Sadr០i 12kb ISP (In-System Programable) fleᘐ memorije i 2kb EEPROM memorije za podatke. Ureᄐaj je kompatabilan sa inudustrijskim standardom MCS-51. On-chip programabilni fleᘐ omoguၰuje In-system reprogramiranje mikrokontrolera preko SPI serijskog interfejsa. Atmel 89S8253 je moၰan mikrokontroler sa povoljnim odnosom cena/efikasnost, koji obezbedjuje pogodno reᘐenje za mnoge ugraᄐene sisteme. Ovaj mikrokontroler sadr០i i modove za uᘐtedu energije u koje se moze ulaziti softverski. IDLE (prazan hod) mod zaustavlja rad CPU-a, dok RAM, brojaაi/tajmeri i prekidni sistem nastavljaju sa radom. Power-down mod აuva sadrzaj RAM-a, ali zaustavlja oscilator, zaustavlja sve ostale funkcije აipa dokle god se ne desi spoljasnji prekid ili hardverski reset.

Page 5: Automatsko Skolsko zvono - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/R.Aleksic - Automatsko Skolsko zvono.pdfNaizmenicni napona napajanja iz mreze 220V se preko transformatora tansformise

5

2.3 Konfiguracija pinova

VCC - Napon napajanja;

GND - Masa;

Port 0 – Port 0 je osmobitni bidirekcionalni U/I port sa otvorenim drejnom. Kao izlazni port, mo០e pobuᄐivati do 6 TTL ulaza. Kada su na ovaj port upisane jedinice, port se moze koristiti kao ulaz sa visokom impedansom.

Port 1 – Port 1 je osmobitni bidirekcionalni U/I port sa unutraᘐnjim pull up-om. Mo០e pobuditi do 6 TTL ulaza. Kada su na portu upisane jedinice, podignute su na visoko stanje preko unutraᘐnjih slabih pull up-ova. Kada se na ulaz ovog porta dovede logiაka nula, na ovim portovima ၰe se

pojaviti struja (Iil, tipiაna vrednost 150uA) koja je posledica pull up otpornika. Neki pinovi ovog porta obavljaju i dodatne funcije. P1.0 I P1.1 mogu se koristiti kao spoljaᘐnji ulaz brojaაa/tajmera 2 (P1.0/T2) i okidni ulaz brojaაa/tajmera 2 (P1.1/T2EX), respektivno. P1.4, P1.5, P1.6 i P1.7 Mogu se koristiti kao selekcioni SPI slejv portovi, U/I podataka i za ᘐiftovanje clock pinova kao sto je prikazano na slici 2.2.

Port 2 - Port 2 je osmobitni bidirekcionalni U/I port sa unutrasnjim pull up-om. Mo០e pobuditi do 6 TTL ulaza. Kada su na portu upisane jedinice, podignute su na visoko stanje preko unutraᘐnjih slabih pull up-ova. Kada se na ulaz ovog porta dovede logiაka nula, na ovim portovima ၰe se pojaviti struja (Iil, tipiაna vrednost 150uA) koja je posledica pull up otpornika.

Port 2 prihvata high-order adresne bitove kao i neke kontrolne signale za vreme programiranja i verifikacije fleᘐa.

Port 3 - Port 3 je, takoᄐe, osmobitni bidirekcionalni U/I port sa unutraᘐnjim pull up-om. Mo០e pobuditi do 6 TTL ulaza. Kada su na portu upisane jedinice, podignute su na visoko stanje preko unutraᘐnjih slabih pull up-ova. Kada se na ulaz ovog porta dovede logiაka nula, na ovim portovima ၰe se pojaviti struja (Iil, tipiაna vrednost 150uA) koja je posledica pull up otpornika.

Slika 2.1. 42-pinsko PDIP pakovanje

Page 6: Automatsko Skolsko zvono - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/R.Aleksic - Automatsko Skolsko zvono.pdfNaizmenicni napona napajanja iz mreze 220V se preko transformatora tansformise

6

Port 3 prihvata neke kontrolne signale u toku programiranja i verifikacije fleᘐa. Port 3 pru០a razne specijalne funkcije koje obezbeᄐuje AT89S8253. Opis je prikazan na slici 2.3

RST – Ulaz reseta. Potrebno vreme trajanja logiაke jedinice na ovom pinu, da bi sesistem resetovao, je najmanje dva maᘐinska ciklusa.

ALE/PROG – Addrss Latch Enable. Izlazni puls za leაovanje ni០eg bita adrese (na opadajuაu ivicu) za vreme pristupa spoljnoj memoriji. Takoᄐe je i programski ulaz, za vreme programiranja fleᘐa.

PSEM – Program Store Enable. Koristi se za strob აitanja spoljne programske memorije (aktivan na nisko).

XTAL1 – Ulaz za invertujuci oscilator i ulaz za unutraᘐnje taktno kolo.XTAL2 - Izlaz iz invertivanog oscilatora.

Page 7: Automatsko Skolsko zvono - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/R.Aleksic - Automatsko Skolsko zvono.pdfNaizmenicni napona napajanja iz mreze 220V se preko transformatora tansformise

7

2.4 Blok dijagram

Page 8: Automatsko Skolsko zvono - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/R.Aleksic - Automatsko Skolsko zvono.pdfNaizmenicni napona napajanja iz mreze 220V se preko transformatora tansformise

3. Razrada projekta

Osim opisanog mikrokontrolera, za realizaciju automatskog ᘐkolskog zvona upotrebeljene su sledeၰe komponente:

1. Razvojni sistem za mikrokontrolere AT89S85XX.2. LCD displej 16 x 2 (2 linije sa po 16 karaktera) sa kontrolerom HITACHI 44780.3. Za napajanje su korisceni transformator 220V u 7V, grecov spoj i kondenzator za

“peglanje” napona.4. Delitelji frekvencije CDA 4060 i CDA 4040. Ovi delitelji sluze da podele frekvenciju

oscilatora od 4194304 Hz na 1 Hz (perioda od jedne sekunde), koja ၰe se koristiti za ulaz spoljaᘐnjeg prekida koji inkrementira realno vreme.

5. Buzzer za oglaᘐavanje zvona.6. Tri mikroprekidaაa koji slu០e za podeᘐavanje vremena.

3.1 Razvojni sistem za mikrokontrolere AT89S82XX

Razvojni sistem je napravio student J. Jovanoviၰ. Na njemu su nadograᄐeni sistem za uაitavanje programa (hex fajla) u mikrokontroler, napajanje, LCD, oscilator od 11, 892 MHz.

Blok ᘐema i PCB layout su prikazani na slikama 3.1 i 3.2.

Page 9: Automatsko Skolsko zvono - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/R.Aleksic - Automatsko Skolsko zvono.pdfNaizmenicni napona napajanja iz mreze 220V se preko transformatora tansformise

9

3.2 LCD

Poslednjih godina LCD displeji su zamneili multisegmentne LED displeje. Ovo se desilo zbog viᘐe razloga:

1. Smanjenja cena LCD displeja.2. Moguၰnosti za prikazivanje brojeva, karaktera i grafike. LED displeji su bili ograniაeni na brojeve i nekoliko karaktera.3. LCD displeji poseduju kontrolere koji osve០avaju sliku, tako da se CPU oslobaᄐa od obavljanja ovog posla. LED displeji se moraju osve០avati, CPU-om ili na neki drugi naაin.4. Zbog lakoၰe prikazivanja karaktera i grafike.

Page 10: Automatsko Skolsko zvono - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/R.Aleksic - Automatsko Skolsko zvono.pdfNaizmenicni napona napajanja iz mreze 220V se preko transformatora tansformise

10

Opis pinova LCD displeja

16 x 2 LCD displeji obicno imaju 14 pinova. Funkcija svakog pina data je u tabeli na slici 3.3.

Vdd, Vss i Vee

Vdd i Vss obezbeᄐuju napajanje od +5V i masu, respektivno. Vee se koristi za kontrolu kontrasta LCD-a.

RS, register selet

Postoje dva jako va០na registra u unutraᘐnjosti LCD displeja. RS pin slu០i za njihovu selekciju. Za RS=0, selektovan je kodni registar za komande koji dozvoljava programeru da poᘐalje komandu, kao ᘐto je brisanje displeja, pomeranje kursora i sliაno. Ako je RS=1, onda je selektovan registar za podatke koji omoguၰava programetu da poᘐalje podatke koji ၰe biti prikazani na displeju.

R/W, read/write

R/W ulaz omoguၰuje upis ili აitanje vrednosti sa displeja. R/W=1 za აitanje; R/W=0 za upis. Na razvojnoj ploაici ovaj pin je postavljen na 0, tako da აitanje nije moguၰe (ne znam stvarno zbog აega je Jovanoviၰ to uradio???). Ⴠitanje pojednostavljuje kod, jer se tada mo០e koristiti busy flagmetoda, koja ၰe biti objaᘐnjena pod Data bit ulazima.

E, enable

Ovaj ulaz se koristi od strane LCD displeja za leაovanje informacija. Kada se podaci dovedu na pinove za podatke (Data pins), na ovaj pin mora biti doveden visok-na-nizak puls za leაovanje. Ovaj puls mora biti ᘐirok najmanje 450 ns.

Data pins, D0-D7

Na ovaj ulaz postavljaja se informacija koja se ᘐalje LCD displeju, koja se zatim upisuje u njegove unutraᘐnje registre. Za prikazivanje ASCII karaktera, postavlja se ASCII kod za ០eljeni karakter dok je RS=1. Postoje i kodovi instrukcija koje se mogu poslati LCD displeju da izvrᘐi neku operaciju. Tabela na slici 3.4 sadr០i kodove za instrukcije koriᘐၰene u ovom projektu (za sve instrukcije pogledajte HITACHI 44780 datasheet). Prilikom slanja komandi RS=0.Pomeranje kursora na odredjenu poziciju ostvaruje se slanjem adrese karaktera. Adrese karaktera u prvom redu su u opsegu od 0x80 do 0x8F, a u drugom redu od 0xC0 do 0xCF.

Slika 3.3. Funkcije pinova

Page 11: Automatsko Skolsko zvono - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/R.Aleksic - Automatsko Skolsko zvono.pdfNaizmenicni napona napajanja iz mreze 220V se preko transformatora tansformise

11

RS=0 se takoᄐe koristi kada se proverava busy fleg. Busy fleg se mo០e proაitati sa pina D7, uz RS=0 i R/W=1. Ovaj fleg obaveᘐtava okolinu da je LCD zauzet (D7=1) obavljanjem internih operacija i da nece prihvatiti nove informacije. Kada je D7=0, displej je spreman da prihvati informaciju. U ovom projektu nije koriscena busy flag metoda zbog veၰ pomenutih razloga, pa se posle svake poslate informacije ᘐalje odredjeno kaᘐnjenje. Vreme operacije აiscenja celog displeja traje najdu០e 1.64 ms, ostale operacije koriᘐၰene u ovom projektu traju najdu០e 40 us. Za kaᘐnjenje svih operacija pogledajte datasheet.

3.3 Napajanje

Napajanje mikrokontrolera je ostvareno klasicnom procedurom i komponentama kao i kod drugih kontrolera. Naizmenicni napona napajanja iz mreze 220V se preko transformatora tansformise na 7V, a zatim ispravlja preko grecovog spoja i kondenzatora. Posle toga se signal vodi na stabilizator napona realizovan kao IC LM 7805 i takav signal se vodi na procesor i ostale digitalne periferne uredjaje i sluzi kao napajanje konstante vrednosti napona. Elektricna semaizvora napajanja je data na slici 3.4.

Slika 3.4. Ispravljac

Page 12: Automatsko Skolsko zvono - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/R.Aleksic - Automatsko Skolsko zvono.pdfNaizmenicni napona napajanja iz mreze 220V se preko transformatora tansformise

3.4 Oscilator stabilne frekvencije

Kao propratna hardverska struktura koriᘐၰen je digitalni oscilator frekvencije, kojigeneriᘐe აetvrtaste impulse frekvencije 1 Hz, odnosno vremenske აetvrtke trajanja periode 1 sekunda. Ceo ureᄐaj se napaja naponom napajanja od 5V, a koristi se zajedniაko napajanje. Kao oscilator konstantne frekvencije koristi se kvarcni kristal uაestanosti 4 194 304 Hz ili 242 Hz sa propratnim elementima za normalno prooscilovanje elektriაnog sklopa. Kao delitelj frekvencijeupotrebljena su kola (IC CDA 4060 აiji je maksimalni stepen deljenja 16384 ili 142 ) i CDA 4040(deli sa 256 ili 82 ). Na izlazu IC CDA 4060 (na pinu 13) dobija se impuls frekvencije 1 Hz. Elektriაna ᘐema veze oscilatora konstantne uაestanosti je prikazana na slici 3.5.

100 nF 100 nF

+5V

+5V

+5V

13

Slika 3.5. Oscilator stabilne frekvencije od jedne sekunde.

Page 13: Automatsko Skolsko zvono - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/R.Aleksic - Automatsko Skolsko zvono.pdfNaizmenicni napona napajanja iz mreze 220V se preko transformatora tansformise

13

3.4 Buzzer i mikrotasteri

ᘀema povezivanja buzzer-a i mikrotastera prikazana je na slici 3.6. Za podudu buzzer-a koristi se tranzistor BC337. U kolu kolektora postavljen je otpornik vrednosti 50 㪐 koji ograniაava kolektorsku struju na pribli០no 100 mA. U kolo baze nije potrebno stavljati otpornik jer na izlaze porta 1 jesu povezani pull up otpornici. Napomena : Port 0 nema pull up otpornike.

Page 14: Automatsko Skolsko zvono - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/R.Aleksic - Automatsko Skolsko zvono.pdfNaizmenicni napona napajanja iz mreze 220V se preko transformatora tansformise

14

4. Softver

4.1 Zaᘐto programirati u programskom jeziku C?

Kompajleri proizvode hex fajlove koje uაitavamo u ROM mikrokontrolera. Veliაina hex fajla, koju proizvodi kompajler, predstavlja va០nu stavku za programera mikrokontrolera iz dva razloga:

1. Mikrokontroleri poseduju on-chip ROM ograniაenog kapaciteta.2. Kodni prostor kod mikrokontrolera 8051 je ograniაen na 64kb.

Kako izbor programskog jezika utiაe na veliაinu kompajliranog programa? Asemblerski jezik proizvodi znatno manje hex fajlove od onih koje proizvodi C, ali programiranje u asembleru je dosadno, zamorno i oduzima puno vremena. Sa druge strane, programiranje u C-u oduzima mnogo manje vremena, lakᘐe se pise, ali veliაina hex fajla je mnogo veၰa od programa napisanog u Asembleru.

Glavni razlozi zbog kojih bi trebali koristiti programski jezik C umesto Asemblerskog jezika su:

1. Pisanje programa je lakᘐe, a oduzima manje vremena.2. Program se moze lako izmeniti i nadograditi.3. Moguၰnost upotrebe biblioteka sa funkcijama.4. Isti C kod se lako mo០e upotrebiti na razlicitim tipovima mikrokontrolera, sa malo ili

bez ikakve izmene.

3.2 Tipovi podataka

Jako je bitno odabrati odgovarajuce tipove podataka koje ၰemo koristiti za proramiranje mikrokontrolera, jer nam je cilj da napravimo ᘐto je moguၰe manji hex fajl.

Unsigned char

Character tip podatka je najprirodniji tip podatka koji mo០emo koristiti u najveၰem broju aplikacija, jer je 8051 osmobitni mikrokonroler. Dakle, unsigned char je osmobitni tip podatka koji zauzima vrednosti od 0 – 255 (0x00 – 0xFF). U mnogim situacijama, kao ᘐto je podeᘐavanje vrednosti brojaაa, gde nema potrebe za oznaაenim tipom podatka, treba koristiti unsigned charumesto signed char. Ne zboravite da upiᘐete unsigned ispred char, jer ako napiᘐete samo char, C kompajer ၰe to podrazumevati kao signed char. Pri deklaraciji promenljivih, treba obratiti pa០nju na veliაinu podataka i pokuᘐavati da upotrebite unsigned char umesto int gde god je to moguၰe. 8051 ima mali broj registara i mali kapacitet RAM-a, tako da nepravilna upotreba podataka (npr int umesto char), mo០e dovesti do stvaranja velikog hex fajla.

Page 15: Automatsko Skolsko zvono - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/R.Aleksic - Automatsko Skolsko zvono.pdfNaizmenicni napona napajanja iz mreze 220V se preko transformatora tansformise

15

Signed char

Signed char je osmobitni tip podatka koji koristi bit najveၰe te០ine da oznaci znak “-“ ili “+”. Kao posledicu ovoga, imamo samo sedam bitova da predstavimo vrednost promenljive. Opseg koji se mo០e predstaviti ovim tipom podatka je od -128 do +127. U sitacijama gde je potrebno predstaviti pozitivbe i negativne brojeve (npr temperatura), upotreba signed char-a je neophodna.

Unsigned int

Ovo je ᘐesnaestobitni tip podatka koji zauzima vrednosti od 0 do 65535 (0x0000 –0xFFFF). Kod mikrokontrolera 8051, unsigned int koristi se za definisanje ᘐesnaestobitih promenljivih (npr memorijske adrese, postavljanje vrednosti brojaაa na vise od 256). Ne zaboravite na kljuაnu reა unsigned spred int, u suprotnom ၰe C kompajer podrazumevati signed int.

Signed int

Signed int je tip podatka koji koristi bit najvece te០ine da predstavi znak promenljive. Opseg vrednosti koji se mogu predstaviti je od -32.768 do +32.767.

Sbit (single bit)

Upotreba Sbit tipa podatka se koristi za pristupanje bit adresibilnim registrima. Omoguၰava pristup pojedinaაnim bitovima iz SFR registara. Takoᄐe se moze koristit i za adresiranje bit adresibilnih portova P0 – P3.

Bit i sfr

Bit tip podatka omoguၰava pristup bit adresibilnim memorijskim lokacijama koji se nalaze na adresama od 0x20 do 0x2F. Primetite da se sbit koristi kada se pristupa bitu iz SFR registra, a bit kada se pristupa bitu iz bit adresibilnog RAM prostora. Za pristupanje bajtovima iz SFR polja korisiti se sfr tip podatka.

U ovom projektu koriᘐၰeni su tipovi unsigned char, unsigned int i bit. Definisanje podataka dato je na slici 4.1.

Page 16: Automatsko Skolsko zvono - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/R.Aleksic - Automatsko Skolsko zvono.pdfNaizmenicni napona napajanja iz mreze 220V se preko transformatora tansformise

16

3.3 Opis funkcija za komunikaciju sa LCD displejom

Na slici 4.2 prikazane su osnovne funkcije za komunikaciju sa LCD displejom. (Napomna: Pogledati poglavlje 3.2 na strani 9). Pre pocetka rada sa displejom, on se mora inicijalizovati (bira se re០im rada, displej se mora ukljuაiti i obrisati).

Page 17: Automatsko Skolsko zvono - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/R.Aleksic - Automatsko Skolsko zvono.pdfNaizmenicni napona napajanja iz mreze 220V se preko transformatora tansformise

17

Cifre se na displeju prikazuju preko look up tabela. U registrima se აuvaju binarne vrednosti brojeva (sati, minuti, dani, sekunde). Ali, displej prikazuje karaktere zadate u ASCII kodu. Za prikazivanje cifri, koristi se funkcija prikazi_cifre(). Telo funkcije prikazano je na slici 4.3. Brojevi koji se prikazuju su dvocifreni. Prvo se izdvoje manja i veၰa cifra, a zatim se njihov karakter poziva iz look up tabele cifre. Slicno ovome, prikazuju se i dani (preko look up tabele dani). Alternativno, moguၰe je napisati funkciju koja konvertuje binarni broj u ASCII, a zatim je pozivati pre svakog prikazivanja promenljive. Ovo ၰe smanjiti obim koda, ali to u ovom projektu nije imperativ.

Na slici 4.3 takoᄐe je prikazano telo funkcije za prikazivanje taაnog vremena. Prvo se kursor postavlja na pocetak prvog reda. Zatim se upisuju dani. Kursor se posle ovoga postavlja na mesto sedmog karaktera u prvom redu, gde se ispisuju cifre (nakon ispisivanja karaktera, kursor se automatski inkrementira za jednu poziciju udesno) i upisuje karakter “:”, koji odvaja cifre sati od cifara minuta itd.

Page 18: Automatsko Skolsko zvono - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/R.Aleksic - Automatsko Skolsko zvono.pdfNaizmenicni napona napajanja iz mreze 220V se preko transformatora tansformise

18

Na slici 4.4 prikazana su tela funkcija za prikazivanje poruka u dva reda. Prva poruka “Vreme je podeseno” prikazuje se na izlazku iz funkcije podesi_vreme() (biၰe objaᘐnjena kasnije), dok se druga poruka “ Skolsko zvono Rasa Aleksic” prikazuje kao uvod, odmah nakon ᘐto se pokrene glavni program i inicijalizuje displej.

4.4 Vremenska kaᘐnjenja

Postoje dva naაina za generisanje vremenskog kaᘐnjenja za mikrokontrolere 8051 u programskom jeziku C:

1. Koriᘐၰenjem for petlje (softversko kaᘐnjenje).

2. Koriᘐၰenjem tajmera (hardversko kaᘐnjenje).

Uticaj na trajanje softverskog kaᘐnjenja imaju tri kljuაna faktora:

1. Dizajn mikrokontrolera. Originalni 8051 mikrokontroler je napravljen davne 1980. godine. Od tada su znatno napredovale arhitekture mikroprocesora i tehnologija integrisanih kola. Originalni mikrokontoleri 8051/52 koriste 12 perioda taktne frekvencije za jedan maᘐinski ciklus (AT8928253 koristi 12 perioda). Danas postoje mikrokontroleri iz ove familije koji koriste manji broj perioda po maᘐinskom ciklusu (DS5000 koristi 4, a DS89C420 samo 1).

2. Frekvencija kristala povezanog na pinove XTAL1 i XTAL2. Perioda jedne taktnefrekvencije jednaka je reciproაnoj vrednosti frekvencije.

3. Izbor kompajlera. Razliაiti kompajleri proizvode razliაiti kod.

Page 19: Automatsko Skolsko zvono - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/R.Aleksic - Automatsko Skolsko zvono.pdfNaizmenicni napona napajanja iz mreze 220V se preko transformatora tansformise

19

Softversko kaᘐnjenje treba izracunati priblizno, u skladu sa gornjim faktorima, a zatim proveravanjem u Keil microvision-u (ili drugom sliაnom softveru) fino podeᘐavati vrednosti promenljivih u for petlji (ili petljama). Ako je potrebno napraviti precizno kaᘐnjenje, najbolje je posmatrati signal na osciloskopu.

U ovom projektu napravljena je petlja od pribli០no jedne milisekunde sa promenljivim parametrom trajanja, koja se koristi za zadr០avanje prikaza na displeju i za აekanja kod zadavanja vremena. Telo funkcije softverskog kaᘐnjenja prikazano je na slici 4.5.

Ipak, kada je potrebno napraviti izuzetno precizno kaᘐnjenje, koriste se tajmeri mikrokontrolera. 8051 mikrokontroleri imaju 2 tajmera, 8052 imaju 3 (AT89S8253 ima 3 tajmera). Svi tajmeri su ᘐesnaestobitni. Mikrokontroleri 8051 su osmobitni, pa se tajmerupristupa kao dva odvojena registra (TH viᘐi bajt, TL ni០i bajt). Struktura ovog registra data je na slici 4.6.

Oba tajmera koriste isti registar za postavljanje razlicitih modova TMOD (timer mode) registar. TMOD je osmobitni registar u kome su აetiri ni០a bita za tajmer 0, a აetiri viᘐa bita za tajmer 1. Ni០a dva bita koriste se za postavljanje moda rada tajmera, a viᘐa dva bita odreᄐuju operaciju. Ovaj registar prikazan je na slici 4.7.

M1 i M0 selektuju mod rada tajmera. Postoje 3 moda:

1. Mod 0; M1=0, M0=0. 13-bitni tajmer.2. Mod 1; M1=0, M0=1. 16-bitni tajmer (koriᘐcen u ovom projektu).3. Mod 2; M1=1, M0=0. 8-bitni auto reload mod. U ovom modu u TH se upisuje

vrednost. Vrednost u TH se ne menja, ova vrednost se kopira u TL, a TL se zatim inkrementira. Kada tajmer zavrᘐi sa odbrojavanjem, on sam napuni TL sa vrednoᘐၰu u TH, zato se ovaj mod zove auto reload mod.

Page 20: Automatsko Skolsko zvono - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/R.Aleksic - Automatsko Skolsko zvono.pdfNaizmenicni napona napajanja iz mreze 220V se preko transformatora tansformise

20

C/T odreᄐuje da li se tajmer koristi kao brojaა dogaᄐaja (ako je jednak jedinici) ili kao generator kaᘐnjenja (ako je jednak nuli). GATE bitom se odluაuje da li se tajmer startuje hardverski (GATE=1) ili softverski (GATE=0).

U C-u, svim registrima se moze direktno pristupati koriᘐၰenjem heder fajla “red51.h”.

Softversko pokretanje tajmera se postize postavljanjem bita TRx (x je broj tajmera) iz regisra TCON na jedinicu, a zaustavlja postavljanjem na nulu. Kada brojac zavrᘐi brojanje, on podi០e fleg TFx (takoᄐe deo TCON registra) i time obaveᘐtava okolinu da je zavrᘐio brojanje.TCON registar prikazan je na slici 4.8.

Ⴠetiri niza bita slu០e za kontrolu nad spoljaᘐnjim prekidima, sto je objaᘐnjeno u poglavlju4.5 na 21. stranici).

Hardverska kaᘐnjenja upotrebljena u ovom projektu prikazana su na slici 4.9.

Postupak pravljenja hardverskog kaᘐnjenja je sledeၰi. Prvo se odredi koliko nam kaᘐnjenje treba, a zatim odabere odgovarajuci mod. Od maksimalne vrednosti tajmera (zavisi od moda) oduzima se ០eljena vrednost brojanja. Vrednosti upisati u registre TH i TL, za prva dva moda ili u TH za mod 2. Pustiti tajmer da radi i აekati da brojaა zavrᘐi brojanje (podigne fleg). Zatim, iskljuciti brojaა i spustiti fleg.

Page 21: Automatsko Skolsko zvono - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/R.Aleksic - Automatsko Skolsko zvono.pdfNaizmenicni napona napajanja iz mreze 220V se preko transformatora tansformise

21

4.5 Prekidne rutine

8051 C kompajleri, sa pogleda na prekide, poseduju sledeၰe karakteristike:

1. Svakom prekidu dodeljuju jedinstven broj (vidite tabelu na slici 4.10.).2. Dodeljuju registarsku banku svakom ISR-u (ISR, od Interrupt Service Routine). Ova

osobina smanjuje veliაinu koda i აini ga kompaktnijim.

Dozvoljavanje prekida

Kada se sistem pokrene (ili resetuje) svi prekidi su maskirani (zabranjeni), sto znaაi da nijedan neၰe biti obraᄐen od strane mikrokontrolera. Da bi mikrokontroler obradio prekid, on mora biti softverski aktiviran. Za odmaskiranje i maskiranje (dozvolu i zabranu) prekida odgovoran je IE (Interrupt Enable) registar. IE registar prikazan je na slici 4.11.

EA IE.7

Slu០i za zabranu ili dozvolu svih prekida. Ako je EA=0, nijedan prekid se ne prihvata. Ako je EA=1, svaki izvor prekida se pojedinaაno dozvoljava ili zabranjuje postavljanjem odgovarajuceg bita prekida na jedinicu ili nulu .

-- IE.6

Trenutno nema namenu. Njegova namena je rezervisana za buduၰnost. Ovaj bit ne treba postavljati na jedinicu.

Page 22: Automatsko Skolsko zvono - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/R.Aleksic - Automatsko Skolsko zvono.pdfNaizmenicni napona napajanja iz mreze 220V se preko transformatora tansformise

22

ET2 IE.5

Dozvola ili zabrana prekida tajmera 2 (samo za 8052).

ES IE.4

Dozvola ili zabrana prekida serijskog porta.

ET1 IE.3

Dozvola ili zabrana prekida tajmera 1.

EX1 IE.2

Dozvola ili zabrana spoljaᘐnjeg prekida 1.

ET0 IE.1

Dozvola ili zabrana prekida tajmera 0.

EX0 IE.0

Dozvola ili zabrana spoljaᘐnjeg prekida 0.

Pod prekidom tajmera podrazumeva se ulazak u ISR kada tajmer zavrᘐi sa odbrojavanjem, odnosno, kada podigne fleg. Pod spoljaᘐnjim prekidom podrazumeva se ulazak u ISR kada se dovede spoljaᘐnji prekid. Spoljaᘐnji prekid mo០e biti nivovski kada prekid izaziva nizak nivo na pinu odreᄐenom za prekid, ili ivicni kada se na pinu javi opadajuၰa ivica prekidnog signala. Ni០a აetiri bita TCON registra (videti sliku 4.8 na strani 18.) nose informacije o spoljaᘐnjim prekidima. Bitovi ITx (x se odnosi na broj prekida) odredjuju vrstu spoljaᘐnjeg prekida. Ako se ITx postavi na logiაku jedinicu, onda se bira iviაni spoljaᘐnji prekid, u suprotnom prekid je nivovski. Bitovi IEx ukazuju mikrokontroleru da se dogodio prekid. Ako je prekid prihvaၰen, onda su ovi bitovi na visokom nivou. Ovi bitovi se ne koriste od strane programera.

U ovom projektu koriᘐၰena su oba spoljaᘐnja prekida koji su implementirana kao iviაni(komandama IT1=1 i IT0=1, na poაetku programa). Pinovi dodeljeni spoljaᘐnjim prekidima 0 i 1 su P2.2 i P3.3, respektivno. Na pin P2.2 doveden je izlaz sa pina 13 oscilatora stabilne frekvencije (slika 3.5, strana 13). Telo funkcije koja se obraᄐuje ISR-om za inkrementiranje realnog vremena prikazano je na slici 4.12. Funkciji se dodeljuje izvrᘐavanje na prekid tako sto se u produ០etku funkcije navede redni broj prekida (videti sliku 4.10 na strani 20). Prekidna funkcija se ne navodi medju prototipima funkcija.

Page 23: Automatsko Skolsko zvono - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/R.Aleksic - Automatsko Skolsko zvono.pdfNaizmenicni napona napajanja iz mreze 220V se preko transformatora tansformise

23

Slika 4.12. ISR prekida 0

Kada se udje u ISR, potrebno je maskirati prekide (slika 4.11, strana 21.) da se ne bi desilo da za vreme obrade jednog prekida rad mikrokontrolera prekine zbog nekog drugog prekidnog izvora. Na izlasku iz ISR-a, prekide trebamo ponovo dozvoliti. U ovom projektu maskiranje se vrᘐi pomoၰu reაi disable_int i enable_int, koje su definisane makroima na pocetku programa (Slika 4.13).

Drugi spoljaᘐnji prekid aktivira se pritiskom na taster OK (videti sliku 3.6, strana 13.) koji je povezan na pin P2.3. Telo funkcije prikazano je na slici 4.14.

Page 24: Automatsko Skolsko zvono - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/R.Aleksic - Automatsko Skolsko zvono.pdfNaizmenicni napona napajanja iz mreze 220V se preko transformatora tansformise

24

Kada se desi prekid, podigne se se flag_podesavanja, koji se ispituje u glavnom programu. Ako je flag_podesavanja=1, onda se poziva funkcija podesi_vreme(), koja slu០i za podeᘐavanja vremena. Funkcija za podeᘐavanje vremena mogla je biti smeᘐtena i u ISR, ali onda bi bio potreban joᘐ jedan taster za kretanje kroz funkciju podesi_vreme(). Naime, mikrokontroler leაuje prekide, tako da, ako bismo koristili isto dugme (OK), nikada ne bismo izaᘐli iz petlje. Po zavrsetku ISR-a, mikrokontroler bi ponovo uᘐao u ISR zbog postavljenog bita u registru TCON. U ovom projektu, ovo je izbegnuto u glavnom programu (slika 4.15.), tako ᘐto se nakon izlaska iz funkcije podesi_vreme(), flag_podesavanja izbriᘐe. Ovo je uraᄐeno nekoliko puta jer mikrokontroleru treba nekoliko ciklusa da obradi prekid (mo០da je moglo i sa manje od pet brisanja, ali samo sa jednim brisanjem nije radilo. Tako da, zbog sigurnosti flag_podesavanja briᘐemo pet puta).

Slika 4.15. Glavni program.

Page 25: Automatsko Skolsko zvono - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/R.Aleksic - Automatsko Skolsko zvono.pdfNaizmenicni napona napajanja iz mreze 220V se preko transformatora tansformise

25

5. Korisniაki interfejs

Korisnik na raspolaganju ima tri dugmeta. Sva tri dugmeta slu០e za podeᘐavanje vremena. Pritiskom na dugme OK, poაinje se podeᘐavanje vremena. U prvom redu LCD displeja prikazuju se dan i vreme. U drugom redu prikazuje se poruka koja govori koji se parametar podeᘐava (dan, sat, minut ili sekunda). Menjanje parametara i izlazak iz podesavanja vrᘐi se, takoᄐe, pritiskom na dugme OK, odreᄐeni broj puta. Dugmad PLUS i MINUS slu០e za inkrementiranje ili dektrementiranje parametara. Vreme se u glavnom programu stalno ispituje funkcijom proveri_alarm(). Zvono se oglaᘐava na svaki pun sat i na sat i petnaest minuta od 8h do 18h, svakog radnog dana i traje 5 sekundi.

Page 26: Automatsko Skolsko zvono - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/R.Aleksic - Automatsko Skolsko zvono.pdfNaizmenicni napona napajanja iz mreze 220V se preko transformatora tansformise

26

6.Kompletan kod

#include <reg8253.h>

/** Definisanje koriscenih portova i pinova **/#define sekunda P3_2#define rs P3_6#define en P3_7#define ok P3_3#define blight P3_5 #define plus P1_0#define minus P1_1#define alarm_port P1_2#define lcd_port P0

/** Definisanje makroa zbog preglednosti **/#define disable_int IE=0x00;#define enable_int IE=0x85;

/*******************************************//** Prototipi funkcija koje se koriste za komunikaciju sa LCD-om **/

void zadaj_komandu(unsigned char);void upis_podatka(unsigned char *);void LCD_inicijalizacija(void);void upisi_bajt(unsigned char);void prikazi_uvod(void);void prikazi_poruku(void);void prikazi_cifre(unsigned char x);void prikazi_vreme(void);

/********************************************/

/** Prototipi funkcija kasnjenja **/

void kasnjenje_40us(void);void kasnjenje_2ms(void);void tit_tastera(void);void ms_kasnjenje(unsigned int vreme);

/* Prototipi funkcija za podesavanje vremena i proveru vremena alarma */void proveri_alarm(void);void podesi_vreme(void);

/** Podaci, koriscene promenljive i look up tabele **/

Page 27: Automatsko Skolsko zvono - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/R.Aleksic - Automatsko Skolsko zvono.pdfNaizmenicni napona napajanja iz mreze 220V se preko transformatora tansformise

27

unsigned char d;unsigned char code *uvod[]={" Skolsko Zvono:"," Rasa Aleksic "};unsigned char code *porukap[]={" Vreme je "," Podeseno "};unsigned char code *dan[]={"*PON*","*UTO*","*SRE*","*CET*","*PET*","*SUB*","*NED*"};unsigned char code *poruka[]={" Podesite dan" , " Podesite sate " , " Podesite minute" , " Podesite sek. "};unsigned char code *cifre[]={"0","1","2","3","4","5","6","7","8","9"};bit flag_podesavanja=0;unsigned char dani=1;unsigned char sati=0;unsigned char min=0;unsigned char sec=0;

/** Glavni program **/

void main(){

LCD_inicijalizacija();blight=1;//pali se svetlo pozadine LCD displejaalarm_port=1;//oglasava se zvono

prikazi_uvod();alarm_port=0;//zvono se gasiplus=0x01;//Pinovi se postavljaju kao ulazniminus=0x01;

sekunda =0x01;ok =0x01;

enable_int prikazi_vreme();

IT1=1;//Ivicni spoljasnji prekidiIT0=1;

while(1)

{if(flag_podesavanja==1){

disable_intpodesi_vreme();enable_intflag_podesavanja=0;flag_podesavanja=0;flag_podesavanja=0;flag_podesavanja=0;

Page 28: Automatsko Skolsko zvono - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/R.Aleksic - Automatsko Skolsko zvono.pdfNaizmenicni napona napajanja iz mreze 220V se preko transformatora tansformise

28

flag_podesavanja=0;}proveri_alarm();

}}

/** Prekidna rutina drugog eksternog prekida **/void podigni_flag(void) interrupt 2

{ flag_podesavanja=1;

}/** Prekidna rutina prvog eksternog prekida **/void prihvati_sekundu(void) interrupt 0{

disable_intsec++;if(sec==60&&sati==23&&min==59){

sec=0;min=0;sati=0;

}else if (sec==60&&min==59){

sec=0;min=0;sati++;

}else if (sec==60){

sec=0;min++;

}prikazi_vreme();enable_int

}

/** Kasnjenje od priblizno 250us zbog istitravanja tastera **/void tit_tastera(void){

for (d=0;d<6;d++)kasnjenje_40us();

}/** Manje precizno softversko kasnjenje od priblizno 1ms **/void ms_kasnjenje(unsigned int vreme)

{

Page 29: Automatsko Skolsko zvono - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/R.Aleksic - Automatsko Skolsko zvono.pdfNaizmenicni napona napajanja iz mreze 220V se preko transformatora tansformise

29

unsigned int u,y;for(u=0;u<vreme;u++)

for(y=0;y<140;y++);}

/** Ispituje da li je vreme za zvono ili ne **/void proveri_alarm(void){

if(dani>=0&&dani<=4){if(sati>=8&&sati<=18)

{if(min==0||min==15)

{if(sec>=0&&sec<=5)

alarm_port=1;else

alarm_port=0;}

elsealarm_port=0;

}else

alarm_port=0;}

}/********Funkcije za LCD*************************************************/

/** Funkcija uz pomoc koje se vrednost promenljive predstavlja kao dvocifren broj na LCD-u **/void prikazi_cifre(unsigned char x){

unsigned char temp;temp = x/10;upis_podatka(cifre[temp]);temp = x%10;upis_podatka(cifre[temp]);

}/** Prikazivanje datuma, sata, minuta i sekundi u prvoj liniji LCD-a **/void prikazi_vreme(void){zadaj_komandu(0x80);upis_podatka(dan[dani-1]);zadaj_komandu(0x86);prikazi_cifre(sati);

Page 30: Automatsko Skolsko zvono - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/R.Aleksic - Automatsko Skolsko zvono.pdfNaizmenicni napona napajanja iz mreze 220V se preko transformatora tansformise

30

upisi_bajt(':');zadaj_komandu(0x89);prikazi_cifre(min);upisi_bajt(':');zadaj_komandu(0x8C);prikazi_cifre(sec);}

/** Davanje komande LCD-u **/void zadaj_komandu(unsigned char vr){

lcd_port = vr;rs =0x0;en =0x1;en =0x0;kasnjenje_40us();

}/** Upis podataka (koji moze biti veci od jednog karaktera) na LCD **/void upis_podatka(unsigned char *string){

unsigned char i;for(i=0;string[i]!='\0';i++)

upisi_bajt(string[i]);}/** Upis jednog bajta(karaktera) na LCD **/void upisi_bajt(unsigned char vr){

lcd_port = vr;rs =0x1;en =0x1;en =0x0;kasnjenje_40us();

}/** Funkcija koja inicijalizuje LCD **/void LCD_inicijalizacija(void){

zadaj_komandu(0X38);kasnjenje_2ms(); zadaj_komandu(0X0C);zadaj_komandu(0X01);kasnjenje_2ms();zadaj_komandu(0X06);

}

/** Prikazuje se poruka u dva reda - Vreme je podeseno **/void prikazi_poruku(void)

Page 31: Automatsko Skolsko zvono - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/R.Aleksic - Automatsko Skolsko zvono.pdfNaizmenicni napona napajanja iz mreze 220V se preko transformatora tansformise

31

{zadaj_komandu(0x80);upis_podatka(porukap[0]);zadaj_komandu(0xc0);upis_podatka(porukap[1]);ms_kasnjenje(1000);zadaj_komandu(0x01);kasnjenje_2ms();

}/** Prikazuje se uvod u 2 reda kada se startuje program - Skolsko zvono Rasa Aleksic **/void prikazi_uvod(void){

zadaj_komandu(0x80);upis_podatka(uvod[0]);zadaj_komandu(0xC0);upis_podatka(uvod[1]);ms_kasnjenje(3000);zadaj_komandu(0x01);kasnjenje_2ms();

}/** Precizna hardverska kasnjenja koja se koriste za potrebe LCD-a **/void kasnjenje_40us (void)

{TMOD=0x10; //Tajmer 1 mod 1TL1=0xCE;TH1=0xFF;TR1=1;while(TF1==0);TR1=0;TF1=0;}

void kasnjenje_2ms (void){TMOD=0x10; //Tajmer 1 mod 1TL1=0xF8;TH1=0xF8;TR1=1;while(TF1==0);TR1=0;TF1=0;}

/** Funkcija za podesavanje tacnog vremena **/void podesi_vreme(void)

{

Page 32: Automatsko Skolsko zvono - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/R.Aleksic - Automatsko Skolsko zvono.pdfNaizmenicni napona napajanja iz mreze 220V se preko transformatora tansformise

32

/***************zadavanje dana u nedelji******************///zadaj_komandu(0xC0);upis_podatka(poruka[0]); //Prikazuje se Podesita dan u drugoj linije

displejatit_tastera();while (ok==0);tit_tastera();while((ok!=0))

{tit_tastera();if (plus==0)

{dani++;}if(dani==8)

{dani=1;}prikazi_vreme(); // U gornjoj linije se prikazuje vreme podesavanjams_kasnjenje(200);}zadaj_komandu(0x01);kasnjenje_2ms();prikazi_vreme();zadaj_komandu(0xC0);upis_podatka(poruka[1]);//Prikazuje se Podesite satetit_tastera();

while (ok==0);/************************Zadavanje sata******************////

tit_tastera();while(ok!=0){tit_tastera();if(plus==0){

sati++;if(sati==24)

{ sati=0;}prikazi_vreme();ms_kasnjenje(500);// Ako je dugme pritisnuto duze od pola

sekundewhile(plus==0)// Sati se inkrementuju brzo

{sati++;

if(sati==24){ sati=0;}

prikazi_vreme();ms_kasnjenje(90);}

}

Page 33: Automatsko Skolsko zvono - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/R.Aleksic - Automatsko Skolsko zvono.pdfNaizmenicni napona napajanja iz mreze 220V se preko transformatora tansformise

33

else if(minus==0){

sati--;if(sati==0xff){ sati=23;}prikazi_vreme();ms_kasnjenje(500);while(minus==0){sati--;if(sati==0xff){ sati=23;}prikazi_vreme();ms_kasnjenje(90);}

}}ms_kasnjenje(200);

//******************* Zadavanje minuta **************//tit_tastera();zadaj_komandu(0x01);kasnjenje_2ms();prikazi_vreme();zadaj_komandu(0xc0);upis_podatka(poruka[2]);tit_tastera();while(ok==0);tit_tastera();while(ok!=0){

tit_tastera();if(plus==0)

{min++;if(min==60)

{min=0;}prikazi_vreme();ms_kasnjenje(500);while(plus==0)

{min++;if(min==60){ min=0;}prikazi_vreme();ms_kasnjenje(90);}

Page 34: Automatsko Skolsko zvono - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/R.Aleksic - Automatsko Skolsko zvono.pdfNaizmenicni napona napajanja iz mreze 220V se preko transformatora tansformise

34

}else if(minus==0){

min--;if(min==0xff)

{ min=59;}prikazi_vreme();ms_kasnjenje(500);while(minus==0){

min--;if(min==0xff)

{ min=59;}prikazi_vreme();ms_kasnjenje(90);

}}}ms_kasnjenje(400);zadaj_komandu(0x01);kasnjenje_2ms(); prikazi_vreme();zadaj_komandu(0xC0);upis_podatka(poruka[3]);tit_tastera();

////////////********************** Zadavanje sekundi**************/////////////while(ok==0); tit_tastera();while(ok!=0 ){

tit_tastera();if(plus==0)

{sec++;if(sec==60)

{ sec=0;}prikazi_vreme();ms_kasnjenje(500);while(plus==0){

sec++;if(sec==60){ sec=0;}prikazi_vreme();ms_kasnjenje(90);

}

Page 35: Automatsko Skolsko zvono - es.elfak.ni.ac.rses.elfak.ni.ac.rs/Papers/R.Aleksic - Automatsko Skolsko zvono.pdfNaizmenicni napona napajanja iz mreze 220V se preko transformatora tansformise

35

}else if(minus==0){

sec--;if(sec==0xff)

{ sec=59;}prikazi_vreme();ms_kasnjenje(500);while(minus==0)

{sec--;if(sec==0xff)

{ sec=59;}prikazi_vreme();ms_kasnjenje(90);

}}}ms_kasnjenje(400);tit_tastera();while(ok==0);tit_tastera();prikazi_poruku();// Prikazuje se poruka u dva reda - Vreme je

podesenokasnjenje_2ms();prikazi_vreme();ms_kasnjenje(250);

}