programiranje tastature 4x3 pomoću mikrokontrolera at89s8253es.elfak.ni.ac.rs/papers/dnikolic i...

64
UNIVERZITET U NIŠU ELEKTRONSKI FAKULTET KATEDRA ZA ELEKTRONIKU Programiranje tastature 4x3 pomoću mikrokontrolera AT89S8253 Studenti: Miloš Pan11251 Dejan Nikolić 11242

Upload: others

Post on 05-Sep-2019

29 views

Category:

Documents


2 download

TRANSCRIPT

UNIVERZITET U NIŠU ELEKTRONSKI FAKULTET KATEDRA ZA ELEKTRONIKU

Programiranje tastature 4x3

pomoću mikrokontrolera AT89S8253 Studenti:

Miloš Panić 11251 Dejan Nikolić 11242

SADRŽAJ

• UVOD -------------------------------------------------------------------------------------- 1 • Mikrokontroler AT89S8253 ------------------------------------------------------ 2 • Unutrašnja struktura mikrokontrolera -------------------------------------------- 3 • Redukovani režim napajanja -------------------------------------------------------- 6 • Programska memorija ---------------------------------------------------------------- 7 • Memorija podataka ------------------------------------------------------------------- 9 • Programski statusni registar --------------------------------------------------------- 13 • Taktovanje mikroprocesora ---------------------------------------------------------- 14 • Mašinski ciklusi ------------------------------------------------------------------------- 15 • Brojači/Tajmeri -------------------------------------------------------------------------- 15 • Opis prekida kod mikrokontrolera --------------------------------------------------- 19 • Načini programiranja ------------------------------------------------------------------ 30

• Projekat ------------------------------------------------------------------------- 30 • Električna šema --------------------------------------------------------------------- 30 • Softversko rešenje -------------------------------------------------------------------- 36

• Kod ----------------------------------------------------------------------------------------- 38 • Definisanje funkcija i promenljivih -------------------------------------------------- 38 • Hardverski zahtevi ----------------------------------------------------------------------- 38 • Inicijalizacija tajmera -------------------------------------------------------------------- 39 • Resetovanje RAM-a --------------------------------------------------------------------- 39 • Startna sekvenca ------------------------------------------------------------------------- 39 • Inicijalizacija displeja -------------------------------------------------------------------- 40 • Prikazivanje poruka ---------------------------------------------------------------------- 41

• Pot. Prog. za postavljanje reda i karaktera na LCD-u -------------------------- 43 • Ispis na LCD-u dok se menjaju parametri ----------------------------------------- 44 • Glavni program ------------------------------------------------------------------------- 44

• Programiranje mikrokontrolera AT89S8253 ---------------------------------- 49 • ISP prog 1.3 ------------------------------------------------------------------------------ 50 • Literatura ---------------------------------------------------------------------------------- 54 • Prilog ---------------------------------------------------------------------------------------- 55 • Biografija ---------------------------------------------------------------------------------- 60

1.UVOD

Današnji život je, nezamisliv bez različitih vidova komunikacije, informisanja, kontrole i dr. Sve više procesi koji mogu da se kontrolišu elektronskim putem, se time i podvrgavaju. Počev od medicine gde se kod dijagnostike bolesti pacijenata sve češće koriste elektronski uređaji koji različite vidove energije koriste za pobuđivanje elektro senzora koji pobuđuju pokazivače za prikazivanje tih kontrolnih pregleda. Ne možemo da ne spomenemo automobilsku industriju gde se pocesi starta, upravljanja, kontrole i drugih procesa takođe sprovode elekronskim uređajima. Uzaludno je pričati o tome koliko je elektronika prodrla u oblast života kad je u pitanju televizija, radio, telefonija, informacione tehnologije, internet, satelitske komunikacije i dr. Podsetiću samo na upotrebu elektronskih uređaja u vojnoj, avionskoj, telekomunikacionoj i drugim oblastima industrije. U novije vreme sve češće se čovek kao aktivni subjekat u izvršenju mnogih procesa, zapostavlja a ostavlja mesto da sami elektronski uređaji upravljaju i kontrolišu neke procese. Kao primer toga u vojnoj avijaciji se sve cešće upotrebljavaju bespilotne letelice koje same kontrolišu, snimaju, izvršavaju zadatke tamo gde je to potrebno.

Sve ovo o čemu smo govorili ne može se zamisliti bez sistema kao sto su memorijski prostori, procesori, mikrokontroleri, displeji, senzori i dr. Sa razvojem mikrokontrolera u prošlosti povećavao se broj procesa koji su mogli da se kontrolišu ovim putem, pa samim tim i upravljanje najobičnijom tastaurom. Osnovi problem koji se javlja u fazi projektovanja i realizacije tastaturre sastoji se u tome kakvu funkciju treba dodeliti dirkama na tastaturi: fiksnu ili promenljivu.

Kod tastatura sa fiksnim funkcijama prednosti su: jednostavnost u radu, funkcija dirke je evidentna, minimalan softver, logičko grupisanje dirki, dok su nedostaci veliki broj funkcija zahteva veliki broj dirki, često vizuelno pretraživanje, često pomeranje ruku, promena zahteva softversku modifikaciju.

Tastature sa promenljivim funkcijama imaju mali broj dirki, ne treba mnogo vizuelnog pretraživanja niti pokreta rukom, mogu se modifikovati softverskom promenom, dok su im nedostaci povecanje izbora funkcije, smanjena jasnoća oko beleženja dirki, potrebe za ‘’prompt’’ i povratne reakcije, potreban je duži period uvežbavanja.

Osobina tastaure da se pritisnuta dirka prihvati u trenutku kada je neka druga dirka takođe pritisnuta se zove rollover. Suprotno tome tastaure kod kojih nije ugrađen rollover ne dozvoljava prihvatanje bilo koje naredne dirke sve dok se prethodna ne oslobodi.

Two-key rollover dozvoljava da se pritisne i druga dirka ako je prva već pritisnuta. Ali druga dirka će generisati signal samo ako se prva otpusti. Ako se druga dirka otpusti pre prve, pritisak druge dirke biće ignorisan Kada se dve dirke istovremeno pritisnu dolazi do blokiranja izlaza.

Three-key rollover dozvoljava generisanje važećih podataka samo kada su sekvencijalno pritisnute dve dirke. Pritisak treće dirke neće generisati znak na izlazu sve dok se jedna od prethodne dve dirke ne oslobodi.

N-key rollover, omogucava da tastatura prihvati sve pritisnute dirke i generiđe važeće znakove nezavisno od broja istovremeno pritisnutih dirki. U ovom slučaju se koristi memorija u kojoj se pamti redosled pritisnutih dirki.

2. MIKROKONTROLER AT89S8253

Atmel-ov mikrokontroler AT89S8253 je 8-bitni mikrokontroler izrađen u CMOS

tehnologiji i optimizovan za upravljačke aplikacije. Kompatibilan je sa MCS-51 serijom mikrokontrolera. Set instrukcija je kompatibilan sa industrijskim standardom 80C51. Proizvodi se u tri kućišta (DIP-40, PLCC44, TQFP44) i jednom specifičnom (DIP-42) kućištu. Raspored pinova je prikazan na Slici 2.1 – dok je unutrašnja struktura mikrokontrolera prikazana na Slici 2.2.

U programerskom smislu, AT89S8253 je gotovo identičan sa mikrokontrolerom AT89S53.

2.1. Unutrašnja struktura mikrokontrolera Ukratko, ovaj mikrokontroler poseduje sledeće karakteristike: • Obimne logičke procesne mogućnosti (jednobitna logika) • Ugrađena flash programska memorija (12 Kb) • Ugrađena RAM memorija podataka (256 x 8 bitova) • 32 dvosmerne (bidirekcione) i pojedinačno adresibilne ulazno/izlazne linije • Devet izvora prekida • Ugrađeni EEPROM (2Kb) • Programabilni UART sa potpunim dupleksom i detekcijom greške rama

podataka • SPI serijski interfejs • Tri nivoa zaštite programske memorije • Tri 16-bitna tajmera/brojača • Programabilni watchdog tajmer • Flag prestanka napajanja • Režimi smanjene potrošnje • Napajanje u opsegu 4-6V • Ugrađeni oscilator takta • Frekvencija rada do 24MHz.

Opis pinova

Slika 2.1. Raspored pinova kod mikrokontrolera AT89S8253 • VCC - napajanje (za sva kucista osim za 42 PDIP);

• GND - masa(za sva kućista osim za 42 PDIP,za 42 PDIP masa spaja logičko jezgro i ugradjene data/program memorije);

• VDD - napon napajanja za 42PDIP koji spaja logičko jezgro i ugradjenu program/data memoriju;

• PWR VDD - napon napajanja za 42PDIP koji sadrži samo I/O drajvere.Aplikaciona ploča mora da spoji zajedno VDD i PWRVDD na zajedničko napajanje;

• PWR GND - masa za 42 PDIP koji spaja samo I/O drajvere .PWR GND i GND su obično spojeni pomoću uobičajenih silikonskih supstrata,ali ne preko bilo kog metalnog linka.Aplikaciona ploča mora zajedno GND i PWR GND spojiti na zajedničku masu;

• PORT 0 - je 8-bitni I/O port,a takodje i izlazni port. Svaki pin može pobuditi 8 TTL ulaza.Kada je 1 s upisana na port 0 može biti visoko impedansni ulaz.Ovaj pin se može koristiti kao multiplekser ali i kao prenosni put niske naredbe address-data u toku prihvatanja spoljašnjih programa i memorijskih podataka. U ovom modu Port 0 ima unutrasnje neprekidno napajanje. PORT 0 takodje prihvata kodove u toku programiranja FLASH memorije i izlazne kodove u toku verifikacije programa;

• PORT 1 - Ovaj port je 8-bitni obostrano prihvatni I/O port sa neprekidnim unutrašnjim napajanjem. Izlazne posebne memorijske lokacije PORT 1 mogu pobuditi 4 TTL logicka kola. Kada je 1s upisana na Port 1, pinovi su na visokom nivou uz pomoć unutrasnjeg neprekidnog napajanja i mogu se koristiti kao ulazi. Početna ulazna struja je Iil=150µA zbog unutrašnjeg neprekidnog napajanja. Neki PORT 1 pinovi mogu imati i druge dodatne funkcije P.1.0 i P.1.1 mogu služiti kao 2 spoljašnja TIMER /COUNTER ulaza (P 1.0/T2) i 2. aktivni ulaz (P 1.1/T2 EX) CLOCK/COUNTER respektivno. Osim toga P 1.4,P 1.5, P 1.6, P 1.7 mogu služiti za pomoćne portove. DATA INPUT/OUTPUT i CLOCK INPUT/OUTPUT pinovi su prikazani u narednoj tabeli:

Ovaj port prihvata adrese niskih nivoa u toku programiranja i verifikacije FLASH

memorije. • PORT 2 je 8 bitni dvosmerni I/O port sa unutrašnjim neprestanim napajanjem.

Izlazne pomoćne memorije PORT-a 2 mogu prihvatiti/napajati 6 TTL ulaza. Kada je 1s na ulazu Porta 2 on je na visokom nivou uz pomoć neprekidnog unutrašnjeg napajanja i mogu se koristiti kao ulazi. Kod ovih ulaza tipična ulazna stuja je 150 µA zbog slabog unutrašnjeg neprekidnog napajanja. PORT 2 emituje adrese visokih naredbi u toku donošenja podataka od spoljasnje memorije i u toku prihvatanja podataka iz spoljašnje memorije koje koriste 16-bitne adrese(MOVX I DPTR). U ovom slucaju PORT2 kada emituje 1s koristi jako unutrašnje napajanje . U toku prihvatanja podataka iz spoljašnje memorije PORT 2 korist 8 bitne adrese (MOVX I RI). PORT2 takodje ima i specijalne funkcije registra. PORT 2 takodje prihvata adresne bitove visokog zahteva i neke kontrolne signale u toku programiranja i potvrde FLASH memorije.

• PORT 3 je 8 bitni dvosmerni I/O port sa neprekidnim unutrašnjim napajanjem. PORT 3 pomoćne memorije mogu pobuditi 6 TTL ulaza. Kada se upisuju podaci na PORT 3, ovaj PORT dosta energije vuče od unutrašnjeg neprekidnog napajanja i tada se mogu

koristiti ulazi. Kod ovih ulaza uz pomoc spoljašnjeg napajanja struja je tipicno 150 µA zbog slabog unutrašnjeg napajanja. PORT 3 takodje prihvata i pojedine kontrolne signale za programiranje FLASH memorije. PORT 3 takodje predstavlja i servis specijalnih promenljivih osobina AT89S8253 koji su prikazani u tabeli:

NAPOMENA: Svi pinovi u PORT 1 i PORT 2 kao i pinovi PORT 3 (izuzev P3.2 INT 0 i

P 3.3 INT 1) imaju sopstveno nepekidno napajanje koje je nedostupno u POWER-DOWN modu. Pinovi P 3.2 (INT 0) I P 3.3 (INT 1) su aktivni podjednako i u

POWER –DOWN modu ( da bi mogli da potražuju prekide za izlaz iz POWER-DOWN moda) uz stalno uključeno unutrašnje napajanje.

• RST - RESET ulaz. Ovaj pin ima visoki nivo za najmanje 2 ciklusa.

• ALE/PROG - omogućava blokiranje podataka. ALE/PROG je ustvari izlaz koji blokira niske byte adrese (u toku opadajuce ivice) u toku prihvatanja spoljašnje memorije. Ovaj pin je takodje ulazni impuls programa (PROG) u toku programiranja FLASH-a. U normalnom radu ALE traje 1/6 frekvencije oscilovanja i može biti upotrebljen za spoljasnji counter i clock. Važno je, medjutim, da je ALE impuls preskočen u toku svakog prihvatanja podataka iz spoljašnje memorije. ALE operacija moze biti onemogućena postavljanjem bita 0 AUX R SFR na lokaciju 8EH. Sa umetanjem bita, ALE je aktivan samo u toku MOVX ili MOVC instrukcije. Postavljanjem ALE disable, bit nema efekta na mikrokontroler u spoljašnjem izvršnom modu.

• PSEN - omogućava čuvanje programa. PSEN čita strobe za programiranje spoljašnje memorije. Kada AT89S8253 izgubi code od izlazne memorije programa, PSEN je aktivan dvostruko u toku svakog ciklusa mašine izuzev 2 PSEN u toku svakog prihvatanja podataka od spoljašnje memorije.

• EA/VPP - spoljašnje omogućavanje pristupa. EA mora biti na GND u naredbi za omogućavanje komponente za unošenje podataka iz spoljašnje memorijske lokacije startujući od 0000H sve do FFFFH. Uprkos tome ,to je moguce samo ako je zaključani bit 1 programiran, i EA ce biti postavljeno na RESET.

• EA treba biti postavljen na Vcc za izvršenje unutrasnje naredbe, ovaj pin takodje prihvata Vpp napon pristupa u toku programiranja FLASH memorije kada je 12 V programiranje selektovano.

• XTAL 1 - ulaz u invertovani pojačavač oscilatora i ulaz u unutrašnji clock električnog kola.

• XTAL 2 - izlaz iz invertovanog pojačavača oscilatora.

Slika 2.2. Unutrašnja struktura mikrokontrolera AT89S8253 2.2. Redukovani režim napajanja U cilju uštede potrošnje električne energije, koja je dostupna za CMOS kola, Atmel-

ovi flash mikrokontroleri mogu da uđu u dva režima redukovanog napajanja:

• Režim praznog hoda (Idle Mode). CPU se prestaje sa radom, dok RAM i drugi ugrađeni pe-riferali u mikrokontroleru nastavljaju da rade. U ovom režimu rada, mikrokontroler se napaja strujom koja iznosi oko 15% vrednosti struje u normalnom režimu, tj. kada je mikrokontroler potpuno aktivan. U ovom modu (režimu rada), mikrokontroler tipično povlači struju oko 2 μA.

• Režim smanjene potrošnje (Power Down Mode). Sve aktivnosti unutar

mikrokontrolera su suspendovane, dok RAM i dalje zadržava svoj sadržaj. U ovom režimu, mikrokontroler tipično povlači struju oko 1 μA, a ponekad i manje od 0.2 μA. Kao dodatak, ovi mikrokontroleri su projektovani korišćenjem statičke logike, koja ne zahteva kontinualno taktovanje. To znači da frekvencija takta mikrokontrolera može usporiti ili čak zaustaviti, dok se čeka na unutrašnji događaj.

2.3. Programska memorija Svi Atmel-ovi flash mikrokontroleri imaju odvojene adresne prostore za programsku i

memoriju podataka, što je prikazano na Slici 2.3. Ovo logičko odvajanje omogućava da se memorija podataka adresira sa 8-bitnim adresama, koje mogu brže da se memorišu. Pored toga, 16-bitne memorijske adre-se mogu da se generišu preko DPTR registra. Moguće samo čitanje programske memorije, koja može da se direktno adresira do 64 Kb. Impuls PSEN (Program Signal Enable Store) služi za čitanje spo-ljašnje programske memorije (vidi Sliku 2.3). Memorija podataka zauzima odvojeni adresni prostor od programske memorije. Do 64Kb spoljašnje memorije može da se direktno adresira u spoljašnjem memorijskom prostoru podataka. Mikroprocesor generiše signale čitanja (RD) i upisa (WR), tokom pri-stupa spoljašnjoj memoriji podataka. Spoljašnja programska memorija i spoljašnja memorija podataka mogu da se kombinuju primenom RD i PSEN signala na ulazu I (AND) kola.

Slika 2.3. Struktura programske i memorije podataka Najniže adrese programske memorije mogu da se nalaze ili u ugrađenoj flash

memoriji ili u spoljašnjoj memoriji. Da bi se ovo odabralo, treba povezati EA (External Access) pin na masu (GND), a sva programska obraćanja usmerena su prema spoljašnjoj memoriji. Impuls za čitanje spoljne me-morije, PSEN, koristi se za sva spoljašnja programska obraćanja. nutrašnja programska obraćanja ne mogu da aktiviraju PSEN .

Mapa donjeg dela programske memorije prikazana je na Slici 2.4. Posle reseta, mikroprocesor započinje da izvršava instrukcije počev od memorijske lokacije 0000H. Kao što se vidi na slici, svakom prekidu je dodeljena fiksna lokacija u programskoj memoriji. Prekid inicira da mikroprocesor “skoči” na tu lokaciju, gde izvršava servisnu rutinu. Spoljašnji Prekid 0, na primer, dodeljen je memorijskoj lokaciji 0003H. Ako se koristi spoljašnji Prekid 0, njegova servisna rutina mora da započne od lokacije 0003H. Ukoliko se ne koristi prekid, pomenuta servisna lokacija je dostupna kao programska memorija opšte namene. Prekidne servisne lokacije postavljene su u 8-bitnim intervalima (razmacima):

0003H za spoljašnji Prekid 0, 000BH za Tajmer 0, 0013H za spoljašnji Prekid 1, 001BH za Tajmer 1, i tako dalje. Ukoliko je servisna rutina prekida dovoljno kratka (to je čest slučaj u upravljačkim

aplikaci-jama), ista može potpuno da se smesti unutar 8-bajtnog intervala. Duže rutine prekida mogu da koriste instrukciju skoka, kako bi preskočili sledeće prekidne lokacije – ako su u upotrebi drugi prekidi.

Slika 2.4. Programska memorija 2.4. Memorija podataka Desna polovina Slike 2.3 prikazuje unutrašnje i spoljašnje memorijske prostore

dostupne kod Atmel-ovih flash mikrokontrolera. Slika 2.4 prikazuje konfiguraciju za pristupanje do 2Kb spoljaš-nje RAM memorije. U ovom slučaju, mikroprocesor izvršava program iz unutrašnje flash memorije. Port 0 služi kao multipleksirana magistrala adresa/podataka za RAM, dok se 3 linije Porta 2 koriste za straničenje RAM-a.

Može se dodeliti do 64 Kb spoljašnje memorije podataka. Adrese spoljašnje memorije podataka mogu da budu širine 1 ili 2 bajta. Jednobajtne adrese često se koriste u vezi sa jednim ili više dru-gih ulazno/izlaznih linija za straničenje RAM-a, kao što je prikazano na Slici 2.5. Dvo-bajtne adre-se se takođe mogu koristiti, i u tom slučaju bajt više adrese se pojavljuje na Portu 2.

Slika 2.5. Izvršavanje programa iz spoljašnje memorije

Konfiguracija hardvera za izvršavanje spoljašnjeg programa je prikazana na Slici

2.5. Vidimo da 16 ulazno/izlaznih linija (Port 0 i Port 2) su posvećeni radu sa magistralom tokom obraćanja spoljaš-njeg programa memoriji. Port 0 (P0 na Slici 2.5) služi kao multipleksirana magistrala adresa/podataka.

Slika 2.6. Pristupanje spoljašnjoj memoriji podataka

On postavlja niži bajt programskog brojača (Program Counter) PCL kao adresu i zatim

prelazi u plivajuće stanje, dok čeka na pristizanje bajta kôda iz programske memorije. Tokom vremena kada je PCL važeći na P0, signal ALE (Address Latch Enable) postavlja ovaj bajt u adresni leč. U međuvremenu, Port 2 (P2 na Slici 2.5) postavlja viši bajt programskog brojača PCH. Tada PSEN šalje impuls spoljašnjoj memoriji, i mikrokontroler čita bajt kôda. Adrese programske memorije su uvek 16-bitne, čak i kada kapacitet upotrebljene memorije može da bude manja od 64 Kb. Izvršavanje spoljašnjeg programa “troši” (“žrtvuje”) dva 8-bitna porta (P0 i P2), zbog operacije adresiranja prog-ramske memorije.

Ukoliko je programska memorija unutrašnja, ostali bitovi P2 dostupnisu kao ulaz/izlaz. Unutraš-nja memorija podataka je prikazana na Slici 2.6. Memorijski prostor je podeljen u tri bloka, koji se uglavnom nazivaju niži 128, gornji 128, i SFR prostor.

Adrese unutrašnje memorije podataka su uvek dužine 1 bajt, što znači da se adresira samo prostor od 256 bajtova. Ipak, način adresiranja unutrašnjeg RAM-a može da, u stvari, smesti 384 bajtova. Direktne adrese veće od 7FH pristupaju jednom memorijskom prostoru, a indirektne adrese veće od 7FH pristupaju različitom memorijskom prostoru. Prema tome, Slika 2.7 ilustruje Gornji 128 i SFR prostor koji zauzima isti blok adresa, od 80H do FFH, iako su oni fizički odvojeni entiteti.

Slika 2.7. Unutrašnja memorija podataka

Slika 2.8. Nižih 128 bajtova unutrašnjeg RAM-a

Slika 2.9. Gornjih (viših) 128 bajtova RAM-a Slika 2.8 ilustruje kako je mapirano nižih 128 bajtova RAM-a. Nižih 32 bajtova je

grupi-sano u 4 banke od 8 registara. Programske instrukcije pozivaju ove registre kao R0 do R7. Dva bita u registru programske statusne reči PSW (Program Status Word) selektuju koja je registarska banka u upotrebi. Ova arhitektura omogućava efikasniju upotrebu kôdnog prostora, pošto su registarske in-strukcije kraće od instrukcija koje koriste direktno adresiranje. Sledećih 16 bajtova iznad registarskih banki formira blok bit-adresibilnog memorijskog prostora. Skup instrukcija mikrokontrolera uključuje veliki broj instrukcija sa jednim bitom, i ove instrukcije mogu direktno da adresiraju 128 bitova u ovom prostoru. Ove bit-adrese su od 00H do 7FH. Svi bajtovi u donjih 128 bajtova prostora mogu da se adresiraju ili direktno ili indirektno. Gornjih 128 (Slika 2.9) može da se adresira samo indirektno. Gornjih 128 bajtova RAM-a su samo u uređajima sa 256 bajta RAM-a.

Na Slici 2.10 prikazan je prostor registara specijalnih funkcija SFR (Special Function Register). SFR uključuje lečeve porta, tajmere, kontrolu periferala itd. Ovi registri mogu da se adresiraju samo direktno, tj. pristupa im se direktnim adresiranjem.

Slika 2.10. Prikaz registara specijalne namene

2.5. Programski statusni registar Programski statusni registar (PSW) sadrži bitove statusa koji ukazuju na trenutno

stanje mikroprocesora. PSW, prikazan na Slici 2.11, smešten je u SFR prostor. PSW sadrži bit prenosa (carry bit), bit pomoćnog prenosa (auxiliary carry bit) za BCD operacije, dva bita za selekciju ban-ke registara, marker prekoračenja (overflow flag), bit parnosti (parity bit), i dva korisnička statusna markera.

Bit prenosa, služi kao bit prenosa u aritmetičkim operacijama, a takođe služi i kao akumulator za veliki broj logičkih operacija. Bitovi RS0 i RS1 selektuju jednu od četiri registarke banke prikazane na Slici 2.8. Veliki broj instrukcija se obraća ovim lokacijama kao R0 do R7. Status bitova RS0 i RS1 u vreme izvršenja određuje koja je od četiri banke selektovana.

Bit parnosti ukazuje na broj jedinica u akumulatoru: P=1 – ukoliko akumulator sadrži neparan broj jedinica, i P=0 – ukoliko akumulator sadrži paran broj jedinica. Prema tome, broj jedinica u aku-mulatoru plus P uvek je paran broj.

Dva bita u PSW su neiskorišćeni i mogu da se upotrebe kao statusni bitovi opšte namene.

Slika 2.11. PSW registar u Atmelovim flash mikrokontrolerima

2.6. Taktovanje mikroprocesora Svi Atmelovi flash mikrokontroleri poseduju ugrađeni oscilator, koji se može da se

koristi kao iz-vor za njegov mikroprocesor. Da bi se koristio ugrađeni oscilator, treba povezati kristalni ili kera-mički rezonator između pinova XTAL1 i XTAL2 mikrokontrolera, i da se povežu kondenzatori pre-ma masi, kao što je prikazano na Slici 2.12.

Primer napajanja sa taktom iz spoljašnjeg oscilatora je prikazan na Slici 2.13. Unutrašnji takt ge-nerator definiše sekvence stanja koje čine mašinski ciklus.

Napomenuto je u uvodu kako mikroprocesor mikrokontrolera AT89S8253 može da se taktuje frekvencijom. Vrednosti kondenzatora na Slikama 2.12 i 2.13 mogu da uzimaju vrednosti 30±10 pF.

Slika 2.12. Korišćenje ugrađenog oscilatora

Slika 2.13. Povezivanje oscilatora (A) i konfiguracija sa spoljašnjim taktom (B) 2.7. Mašinski ciklusi Mašinski ciklus čini sekvenca od šest stanja, numerisanih od S1 do S6. Svako stanje

traje dve pe-riode oscilatora. Prema tome, mašinski ciklus traje 12 perioda oscilatora ili 1μs ako je frekvencija os-cilatora 12 MHz. Svako stanje podeljeno je na dve faze.

2.8. Brojači/Tajmeri Mikrokontroler AT89S8253 ima tri šesnaestobitna tajmersko-brojačka registra. Tajmeri

se mogu kofigurisati da rade u četiri moda rada, izuzetak je tajmer 2 koji može da radi u tri moda rada. Kada rade kao brojači, sadržaj tajmerskog registra se uvećava za jedan na

svaku silaznu ivicu odgovarajućeg ulaza mikrokontrolera (T0 za tajmer 0, T1 za tajmer 1 i T2 za tajmer 2).

Maksimalna frekvencija ulaznog signala koju brojač može da prati je 24 puta manja od radnog takta mikrokontrolera. Kada rade kao tajmeri sadržaji tajmerskih registara se uvećava za jedan u svakom mašinskom ciklusu. Jedan mašinski ciklus traje 12 perioda radnog takta mikrokontrolera. Npr , ako je radni takt 24MHz, registri se uvećavaju svakih 500 ns.

Svakom tajmeru pripadaju po dva osmobitna registra: • tajmeru 0: TH0 i TL0,

• tajmeru 1: TH1 i TL1 i

• tajmeru 2: TH2 i TL1.

Kontrola rada tajmera Radom tajmera 0 i 1 upravlja se pomoću registara TMOD i TCON.

Značenje pojedinih bita je sljedeće: GATE – kontrola gejta. Kada je ovaj bit na jedinici odgovarajući tajmer može da broji

kada je pripadajući TR bit jedinica i pripadajući INTx ulaz mikrokontrolera visok. Ako je vrijednost GATE bita 0, onda je dovoljno da odgovarajući bit TR bude visok.

C/T- ovaj bit određuje da li odgovarajući tajmer radi kao brojač opadajućih ivica na odgovarajućem T ulazu (C/T= 1) ili kao tajmer (C/T= 0).

M1 M0 Način rada (mod)

0 0 Mod 0 – tajmer radi kao 13-bitni brojač

0 1 Mod 1 – tajmer radi kao 16-bitni brojač

1 0 Mod 2 – tajmer radi kao osmobitni brojač. Brojački registar TL, nakon preticanja se puni sadržajem TH registra (auto reload)

1 1 Mod 3 – tajmer 1 je u ovom modu zaustavljen, a tajmer 0 radi kao dva odvojena osmobitna tajmera

Struktura TCON registra:

Značenje pojednih bita je sljedeće: TF1 – zastavica preteka tajmera 1 automatski se briše kada se skoči na potprogram

za opsluživanje prekida. TR1 – postavljanje ovog bita tajmer 1 počinje da broji, dok u suprotnom ne broji. TF0 – zastavica preteka tajmera 0 automatski se briše kada se skoči na potprogram

za opsluživanje prekida. TR0 – postavljanje ovog bita tajmer 0 počinje da broji, dok u suprotnom ne broji. IE1 – zastavica detektovanog spoljašnjeg zahtjeva za prekidom 1. Kada je zahtjev

detektovan postavlja se na jedinicu, a briše se automatski kada se skoči na potprogram za opsluživanje prekida.

IT1 – određuje da li je ulaz spoljašnjeg prekida osjetljiv na na opadajuću ivicu (IT1=1) ili na nizak nivo (IT1=0).

IE0 – zastavica detektovanog spoljašnjeg zahtjeva za prekidom 0. Kada je zahtjev detektovan postavlja se na jedinicu, a briše se automatski kada se skoči na potprogram za opsluživanje prekida.

IT0 – određuje da li je ulaz spoljašnjeg prekida osjetljiv na na opadajuću ivicu (IT0=1) ili na nizak nivo (IT0=0).

Rezimi rada tajmera 0 i 1 Preticanje: Kada svi bitovi registra tajmera/brojača postanu jedinice, sledećim

uvećanjem sadržaja svi bitovi postaju nule. Mod 0:

U ovom modu tajmer predstavlja 13-bitni tajmer/brojač. Preticanje tajmera izaziva postavljanje odgovarajućih interapt zastavica (TF2, TF1, TF0). Postavljanje interapt zastavice izaziva prelazak na izvršenje servisne rutine, ako je odgovarajući interapt dozvoljen. Biti TF1, TF0 automatski se brišu prilikom skoka na prekidnu rutinu.

Mod 1: Mod 1 je isti kao mod 0, s tim da se koristi svih 8 bita registra TL1 tako da imamo 16-

bitni registar tajmera.

Slika 2.14. Mod 0 ili 1 tajmera 0 ili 1

Rezim 2 U ovom modu tajmer je kao osmobitni sa automatskim punjenjem incijalne vrijednosti

nakon preticanja. timer 0 At89S8253.

Slika 2.15. Mod 2 tajmera 0 ili 1

2.9. Opis prekida kod mikrokontrolera U mikroprocesorskim sistemima često je potrebno istovremeno pratiti rad više

perifernih jedinica. To se može postići neprestanim prozivanjem jedne po jedne jedinice, proveravajući njihova stanja. Ako se utvrdi da je došlo do neke promene na nekoj od tih periferija na koju treba reagovati, preduzimaju se odgovarajuće akcije kao odgovor na promene. Na primer, nakon startovanja konverzije A/D konvertora neprekidno se vrši čitanje stanja BUSY nožice konvertora, koje označava da li je konverzija u toku ili je završena. Ako neko očitavanje pokaže da je konverzija završena, tada se učita odgovarajući podatak sa konvertora. U ovom slučaju mikrokontroler je neprestano zauzet proverom stanja na liniji BUSY A/D konvertora.

Drugi način praćenja rada više perifernih jedinica je da same jedinice jave kada je potrebno opsluživanje. Ta metoda se naziva metodom prekida, dok se prethodno opisana naziva metodom prozivanja (pooling). Dakle, kada se koristi metoda prekida, periferna jedinica posebnim signalom javlja kada je neophodna reakcija upravljačkog uređaja tj. mikrokontrolera. Taj signal se zove zahtev za prekidom odnosno interaptom (interrupt request). Slučaj iz prethodnog primera bi se mogao rešiti povezivanjem BUSY nožice konvertora na odgovarajuću INT (spoljašnji prekid) nožicu mikrokontrolera. Kada se BUSY deaktivira izaziva se prekid. Nakon što mikrokontroler uvaži zahtev, prelazi na podprogram za opsluživanje prekida (u ovom slučaju čitanje vrednosti konverzije), a nakon toga nastavlja

sa izvršavanjem programa gde je prekinut u trenutku stizanja zahteva za prekidom. U ovom slučaju mikrokontroler se ne opterećuje proverom stanja na periferiji nego samo izvodi odgovarajuću akciju kada je to potrebno. Iz ovoga je jasno da u ovom slučaju mikrokontroler potroši mnogo manje vremena za opsluživanje periferija, zbog čega i program može biti mnogo efikasniji.

Izvori prekida Kod ovog mikrokontrolera postoje šest izvora prekida. Dva spoljašnja (0INT i 1INT), tri

prekida tajmera (tajmer 0,1 i 2) i prekid serijskog porta. Sa ciljem da se koriste bilo koji od prekida u flash mikrokontroleru, treba preduzeti

sledeća tri koraka. 1. Postaviti EA (bit dozvole) u IE registru na 1. 2. Postaviti odgovarajući pojedinačni bit prekida u IE registru na 1.

3. Započeti prekidnu servisnu rutinu na odgovarajućoj adresi vektora prekida. Videti sledeću tabelu.

Prekid tajmera 2 se generise logickim OR ili bitovima TF 2 I EXF 2 u registru T 2 CON.Nijedan od ovih markera se neb rise hardverom u toku servisnih uobicajenih procesa.U stvari,servisne uobicajeni procesi odredjuju koji od stanja TF 2 ili EXF 2 generisu prekide I taj bit ce biti obrisan softwerom.

Serijski prekid je logicki OR od bitova RI I TI u registru SCON I takodje bit SPIF u SPSR(ako je SPIE u SPCR setovan).Nijedan od ovih markera se neb rise pomocu hardwera u toku servisnih uobicajenih procesa.Servisni uobicajeni procesi mogu odrediti koji od SPI ili UART generisu prekide .

Timer 0 I timer 1 markeri, TF0 I TF 1,se setuju S5P2 ciklusa u toku timer-ovih prezasicenja.Vrednosti se zatim upisuju u sledecem ciklusu.Medjutim markeri Timera 2,TF 2, setuju S5P2 I upisuju u istom ciklusu kada je Timer prepunjen(prezasicen).

PrekidIzvorVektorske adreseSistem resetRST ili POR ili BOD0000HSpoljasnji prekid 0IE 00003HPrekid tajmera 0TF 0000BHSpoljasnji prekid 1 IE 10013HPrekid tajmera 1TF 1001BHPrekid serijskog portaRI ili TI0013H

Slede struktrure nekih registara:

Registar koji omogucava prekide je na sledecoj slici:

Registar prioriteta prekida je prikazan na sledecoj slici:

Simbol Funkcije

PT2 Timer 2- prekid niskog prioriteta PS Serijski port- prekid niskog prioriteta PT1 Timer 1- prekid niskog prioriteta PX1 Spoljasnji prekid 1 niskog prioriteta PT0 Timer 0- prekid niskog prioriteta PX0 Spoljasnji prekid 0- prekid niskog prioriteta

Registar visokog prioriteta prekida je prikazan na sledecoj slici:

I

zvor preki

da je prikazan na sledecoj slici:

Simbol Funkcije PT2H Timer 2- prekid visokog prioriteta PSH Serijski port- prekid visokog prioriteta PT1H Timer 1- prekid visokog prioriteta PX1H Spoljasnji prekid 1 visokog prioriteta PT0H Timer 0- prekid visokog prioriteta PX0H Spoljasnji prekid 0- prekid visokog prioriteta

Slika 2.16. Izvor prekida Na slici ispod se može videti da se prekid može jednostavno onemogućiti brisanjem

bita EA u istom registru.

Slika 2.17. Ilustracija dozvole prekida

Kao dodatak, za spoljašnje prekide, pinovi INT0 i INT1 (P3.2 i P3.3) moraju biti postavljeni na 1, i u zavisnosti od toga da li se prekid aktivira nivoom ili prelazom, bitovi IT0 ili IT1 u TCON registru moraju se postaviti na 1.

ITx = 0 okidanje nivoom

ITx = 1 okidanje prelazom Maskiranje prekida Svaki od pomenutih prekida se može dozvoliti ili zabraniti tj. maskirati. Kada je prekid

maskiran, odgovarajući bitovi (TF0, TF1,TF2, IE0 i IE1) se postavljaju na 1, ali to ne izaziva prelazak na odgovarajući servisni potprogram. Kod AT89S52 svaki od izvora prekida se može maskirati, to se kontroliše preko registra IE (interrupt enable, sl.). Kao što se vidi na sl., postavljanjem određenog bita na 1 odgovarajući prekid biva dozvoljen. U suprotnom je maskiran. Najviši bit EA (enable all) kontroliše maskiranje svih prekida. Ukoliko je on 0, svi prekidi su maskirani bez obzira na stanje bitova istog registra koji kontrolišu maskiranost pojedinačnih izvora prekida.

IE: Registar dozvole prekida (bit-adresabilan) Ako je bit 0, odgovarajući prekid je onemogućen. Ako je bit 1, odgovarajući prekid je

dozvoljen.

— ET2 ES ET1 EX1 ET0 EX0

EA IE.7 Onemogućava sve prekide. Ako je EA=0, nema potvrde prekida. Ako je EA=1, svaki izvor prekida se pojedinačno omogućava ili onemogućava postavljanjem njegovog bita dozvole

— IE.6 Nije implementirano, rezervisano za buduću upotrebu. ET2 IE.5 Omogućava ili onemogućava prekoračenje tajmera 2 ili

zahavtanje prekida (samo kod AT89C52)

ES IE.4 Omogućava ili neomogućava prekid serijskog porta.

ET1 IE.3 Omogućava ili onemogućava prekoračenje tajmera 1. EX1 IE.2 Omogućava ili onemogućava spoljašnji prekid 1. ET0 IE.1 Omogućava ili onemogućava prekoračenje tajmera 0. EX0 IE.0

Omogućava ili onemogućava spoljašnji prekid 0.

Prioriteti prekida Na primer, možete omogućiti Tajmer 1 prekid koji se automatski poziva svaki put kada

se Tajmer 1 overflow-je. Naknadno, možete omogućiti serijski prekid koji se poziva svaki put kada se primi karakter preko serijskog porta. Medjutim, vi možete smatrati da je prijem karaktera mnogo važniji od tajmerskog prekida. U ovom slučaju, ako se tajmer 1 prekid već izvršava vi možete poželeti da sam serijski prekid interrupt-uje tajmer 1 prekid. Kada se serijski prekid kompletira, upravljanje se vraća nazad na Tajmer 1 prekid opslužuje ga i konačno se vraća u glavni program. Ovo možete ostvariti dodeljivanjem visokog nivoa prioriteta serijskom prekidu i niskog nivoa prekida tajmer 1 prekidu.

Prioriteti prekida se kotrolišu od strane IP SFR registra (B8h). IP SFR registar ima sledeći format:

Bit

Name Bit Address Explanation of Function

7 - - Undefined 6 - - Undefined 5 - - Undefined 4 PS BCh Serial Interrupt Priority 3 PT1 BBh Timer 1 Interrupt Priority 2 PX1 BAh External 1 Interrupt Priority 1 PT0 B9h Timer 0 Interrupt Priority 0 PX0 B8h External 0 InPriorit

Razmatranjem liste prioriteta prekida, dolazimo do sledećih pravila koja primenjujemo: - ništa ne može da prekine prekid visokog nivoa prioriteta – čak ni drugi prekid visokog

nivoa prioriteta; - prekid visokog nivoa može prekinuti izvršenje prekida niskog nivoa; - prekid niskog nivoa prioriteta može jedino da se opsluži ako nema drugih prekida koji

se već izvršavaju;

- ako se dva prekida dogode u isto vreme, prekid sa višim nivoom prioriteta će se prvi izvršiti. Ako su oba prekida istog prioriteta prekid koji je prozvan prvi sekvecnom prozivke prvi će se izvršiti.

Šta se dogadja kada se prekid dogodi ? Kada se dogodi prekid automatski se preuzimaju sledeće akcije od strane

mikrokontrolera: - tekuća vrednost Pc-a se smesti na stek, prvo niži bajt; - prekidi istog ili nižeg nivoa prioriteta se blokiraju; - u slučaju tajmerskog ili spoljašnjeg prekida, odgovarajući prekidni markeri se brišu; - programsko izvršenje se prenosi na odgovarajuću vektor adresu prekidnog

opslužioca (handler-a); - rutina prekidnog opslužioca se izvršava. Posebno istaknimo treći korak: Ako prekidi opslužuju tajmerski ili spoljašnji prekid,

mikrokontroler automatski briše prekidni marker pre nego što prenese upravljanje na rutinu koja opslužuje vaš prekid. Ovo znači da nije neophodno da vi brišete bit softverski u vašem kôdu.

Šta se dogadja kada se prekid završi ? Prekid se završava kada vaš program izvrši RETI (Return from Interrupt) instrukciju.

Kada se RETI instrukcija izvrši mikrokontroler preuzima sledeće akcije: - dva bajta se prenesu sa steka u programski brojač da se ponovo uspostavilo

normalno programsko izvršenje; - prekidni status se ponovo vraća na svoj status pre prekida. Serijski prekidi Serijski prekidi su neznatno različiti od ostalih prekida. Ovo je posledica činjenice da

postoje dva prekidna markera: RI i TI. Ako je bilo koji marker postavljen, serijski prekid je trigerovan. Kao što smo istakli u sekciji o serijskom portu, RI bit se postavlja kada se bajt primi od strane serijskog porta dok se TI postavlja kada se bajt šalje.

Ovo znači da kada se vaš serijski prekid izvršava, on može biti trigerovan zato što je RI marker postavljen ili zato što je TI marker postavljen – ili zato što su oba postavljena. Dakle vaša rutina mora da proveri status ovih markera da bi odredila koju akciju da preuzme. Takodje, pošto 8051 ne briše automatski markere RI i TI morate da ih obrišete u vašem softveru koji opslužuje prekid.

Kratak kôdni primer je u sledećem redosledu:

INT_SERIAL - JNB RI, CHECK_TI; ako RI marker nije postavljen, sakačemo na proveru TI MOV A,SBUF ;ako dodjemo do ove linije, to zato što je RI bio postavljen

CLR RI - brišemo RI bit posle njegovog procesiranja

CHECK_TI - JNB TI,EXIT_INT ;ako marker TI nije postavljen skočimo na izlaznu tačku

CLR TI - brišemo TI bit pre slanja drugog karaktera MOV SBUF,#'A' - šaljemio drugi karakter na serijski port EXIT_INT - RETI Kao što vidimo, naš kôd proverava oba prekidna markera. Ako su oba markera

postavljena, obe sekcije kôda će biti izvršene. Takodje podvučimo da svaka sekcija kôda briše svoj odgovarajući prekidni marker. Ako ste zaboravili da obrišete bitove prekida serijski prekid će se izvršavati ponavljajući se sve dok ne obrišite bit. Dakle veoma je važno da vi uvek obrišete prekidne markere serijskog prekida.

Važno prekidno razmatranje: Zaštita registara Vrlo važno pravilo koje se primenjuje na sve opslužioce prekida: Prekid mora da

ostavi procesor u isto stanje kakvo je bilo kada se prekid pokrenut. Zapamtite, ideja je da iza prekida glavni program ne bude svestan da se oni izvršavaju

u ''pozadini''. Ipak, razmotrimo sledeći kôd: CLR C ;obrišimo prenos

MOV A,#25h ;loaduj akumulator sa 25h

ADDC A,#10h ;saberi 10h sa prenosom

Nakon izvršenja prethodne tri instrukcije, akumulator će sadržati vrednost 35h. Ali šta će se desiti ako se upravo posle MOV instrukcije dogodi prekid. U toku prekida,

bit prenosa je postavljen i vrednost akumulatora je promenjena na 40h. Kada se prekid završi i upravljanje prenese nazad u glavni program, instrukcija ADDC će dodati 10h na 40h i dodatno dodati dodatni bt 1h zato što je bit prenosa postavljen. U ovom slučaju, akumulator će sadržati vrednost 51h nakon izvršenja instrukcije.

U ovom slučaju, glavni program kako se čini izračunava pogrešan rezultat. Kako može 25h + 10h da proizvede 51h kao rezultat ? Ovo nema smilsa. Programer koji nije familijaran sa prekidima izazvan problemom matematičkog proračuna uveriće se da je mikrokontroler na neki način oštećen.

Šta se dogadja, u stvarnosti, ako prekid ne štiti prethodni sadržaj registra prilikom njihovog korišćenja. Preformulišimo: Prekid mora da ostavi procesor u isto stanje kao što je bilo kada je prekid započeo

Šta ovo znači ? To znači da ako vi u prekidnoj rutini koristite akumulator, morate da budete sigurni da je vrednost akumulatora ista na kraju prekida kao što je bila na njegovom početku. Ovo je generalno izvodljivo sa PUSH i POP sekvencom. Na primer:

PUSH ACC

PUSH PSW

MOV A,#0FFh

ADD A,#02h

POP PSW

POP ACC

''Opustošenje'' prekidom je od strane MOV i ADD instrukcije. Ma koja od ove dve instrukcije modifikuje Akumulator (MOV i ADD instrukcija) i takodje modifikuje vrednost bita prenosa (ADD instrukcija će usloviti da bit prenosa bude postavljen). Pošto prekidna rutina mora da garantuje da registri ostaju ne promenjeni primenom rutine, rutina smešta originalne vrednosti na stek korišćenjem PUSH iinstrukcije. Nakon toga ona je slobodna da koristi registre pošto je zaštitila njihove suštinske vrednosti. Pošto prekid završi svoj zadatak, on uzima originalne vrednosti i vraća ih u registre. Dok se prekid izvršava, glavni program neće nikad da zna razliku zbog toga što su registri egzaktno isti kao što su bili pre nego što se prekid izvršio.

U principu, prekidna rutina mora da zaštiti sledeće registre: - PSW (Program Status Word)

- DPTR (DPH/DPL) (Data Pointer)

- ACC

- B

- Registri R0 – R7

Zapamtite da PSW sadrži mnoge individualne bitove koji su postavljeni od strane

različitih 8051 instrukcija. Ako niste apsolutno sigurni šta radite i ako ne razumete potpuno koja instrukcija koji bit postavlja najbolja ideja je da uvek zaštite PSW smeštajući ga na i uzimajući ga sa steka na početku i kraju prekida.

Istaknimo takodje da većina asemblera (u suštini, svi koje ja znam) neće vam dozvoliti da izvršite instrukciju:

PUSH R0 Ovo je posledica činjenice da zavisi koja je registarskih banaka selektovana, tj. R0

se može odnositi na adresu unutrašnje memorije ili 00h, ili 08h, ili 10h, ili 18h. R0, ++++, nije validna memorijska adresa koju instrukcije PUSH i POP mogu da koriste.

Prema tome, ako vi koristite bilo koji ''R'' registar u vašu prekidnu rutinu, vi ćete staviti apsolutnu adresu registra na stek umesto da samo kažete PUSH R0. Na primer, umesto PUSH R0 vi ćete izvršiti:

PUSH 00h

Naravno ovo funkcioniše jedino u slučaju ako ste selektovali default-ni set registara (registarska banka 0). Ako koristite alternativni registarski set, morate da PUSH adresu koja odgovara registru koji vi koristite.

Najčešći problemi sa prekidima Prekidi su veoma moćno sredstvo dostupno 8051 korisnicima, ali kada ih koristite

nekorektno mogu biti izvor velikog broja časova debagovanja. Greške u prekidnim rutinama je često veoma tečko dijagnosticirati i korigovati.

Ako ste koristili prekide i vaš je program doživeo krah ili vam se čini da se ne izvršava kako ste očekivali, uvek ponovo razmotrite sledeće prekide povezane odlukama:

Zaštita registra: Budite sigurni da ste zaštitili sve vaše registre, kako smo objasnili u prethodnom delu. Ako ste zaboravili da zaštitite registar koji koristi vaš glavni program, možete dobiti vrlo čudne rezultate. U našem prethodnom primeru pokazali smo kako greške kod zaštite registara uslovljavaju da glavni program očigledno izračunava da je 25h + 10h = 51h. Ako ste svedok problema sa registrima kao što su neočekivana promena vrednosti ili rezultat operacije je nekorektna vrednost, vrlo je verovatno da ste zaboravili da zaštitite registre. Uvek zaštitite vaše registre.

• Zaboravili ste da vratite vaše zaštićene vrednosti: Druga česta greška je da stavite vrednosti registara na stek da bi ih zaštitili, i onda zaboravite da ih preuzmete sa steka pre napuštanja prekidne rutine. Na primer, stavili ste ACC, B, i PSW na stek u cilju njihove zaštite i zatim preuzmete samo ACC i PSW sa steka pre napuštanja prekidne rutine. U o stavite vrednost ''B'', ekstra vrednost ostaje na steku. Nakon izvršavanja RETI instrukciju 8051 će koristiti vrednost kao vraćenu adresu umesto korektne vrednosti. U ovom slučaju, vaš program će skoro sigurno pasti. Uvek budite sigurni da ste POP onaj broj vrednosti sa steka koji ste i stavili.

• Koristite RET umesto RETI: Zapamtite da se prekidne rutine uvek završavaju sa RETI instrukcijom. Lako može da se desi da nepažnjom umestio RETI instrukcije koristitite RET. Prema tome RET instrukcija nesme da završi vašu prekidnu rutinu. Obično, korišćenje instrukcije RET umesto RETI stvoriće iluziju da vaš program radi normalno.

2.10. Načini programiranja Programiranje, čitanje i brisanje sadržaja EEPROM-a i flash memorije mikrokontrolera

može da se ostvari paralelno ili serijski. Ovde se nećemo zadržavati oko opisa jednog ili drugog načina progra-miranja, već ćemo naglasiti da se serijsko programiranje ostvaruje preko tri pina mikrokontrolera: MOSI (P1.5), MISO (P1.6) i SCK (P.1.7), uz dovedeni takt, napajanje i masu (GND).

3. Projekat Cilj ovog projekta je da se isprogramira tastatura tipa 4x3, pomoću mikrokontrolera

AT89S8253 i da se sadrzaj koji korisnik otkuca na tastaturi prikaze na 16-bitnom LCD displeju.

3.1. Električna šema Da bi se omogućilo programiranje i ispravno funkcionisanje mikrokontrolera, kao i

prikaz toka komunikacije u skladu sa projektnim zadatkom, potrebno je obezbediti dodatne hardverske komponente, kao što su: napajanje, električna kola koja omogućavaju fizičko povezivanje sa računarom (MAX232, 74LVC244), displej za grafički prikaz. Sve ove komponente zajedno čine razvojni sistem, čija je el. šema data na slici 3.1. u i šemi na kraju rada.

Slika 3.1. Razvojni sistem mikrokontrolera Štampana ploča na kojoj je smešten razvojni sistem prikazana je na sledećoj slici:

Layout pločice:

Slika 3.2. Štampana ploča (PCB) razvojnog sistema mikrokontrolera

3.2. Deatljan opis povezivanja sistema Sistem se sastoji iz mikrokontrolerske ploče (logičkog naziva MCU). „Srce“

kontrolerske ploče čini Atmel-ov AT89S8253.Na mikrokontrolersku ploču povezana je tastatura 4x3, takodje ploča na sebi ima povezan i LCD displej sa mogućnošću prikaza 16 karaktera u 2 reda.

Napajenje se nalazi na MCU ploči i razvodi se na kontrolersku ploču.Programiranje se vrši povezivanjem programatora na konektor JP1, stavljanjem prekidača S1 u stanje uključeno i prebacivanjem jumpera JP6 u mod „program“ . Time smo doveli potrebne signale za In Sistem Programiranje i reset procesora prebacili na programator. Nakon završenog programiranja prekidač i jumper vratiti u prethodni položaj. Blok šema opisanog sistema, kao i izgled štampane ploče dati su na slici 3.3

Slika 3.3.a Električna šema tastature 4x3 realizovane pomoću mikrokontrolera AT89S8253

Slika 3.4.a. Prihvatanje podataka sa tastautre preko multipleksirnaog interfejsa

Slika 3.4.b. Električna šema povezivanja tastature 4x3 preko potra 2 sa

mikrokontrolerom AT89S8253

Kako bi detektovao pritisnuti taster, najpre, mikrokontroler setuje pinove 0 do 7 na

portu 2 i inicijalizuje promenljivu 'Digit' na nulu.Vrednost digit predstavlja cifru pritisnutog tastera. Onda salje vrednost 0111 u V1 V2 V3 V4 i cita kolone. Ako su vrednosti procitane iz kolona K1 K2 K3 =111 to znaci da je taster u vrsti V1 i koloni K1 pritisnut.To je '1'.U proceduri 'CheckColumn',vrednost 'Digit' se povecava.Vrednost 'Digit' predstavlja pritisnuti taster.Pre nego sto izlazi iz procedure, mikrokontroler setuje 'KeyPressed',kako bi naznacio da je taster pritisnut.Ako su vrednosti procitane iz kolona K1 K2 K3 =101,to znaci da je taster u vrsti V1 i koloni K2 pritisnut.To je '2'. Tabela predstavlja znacenje svih kombinacija vrednosti dobijenih iz K1 K2 K3.

Slika 3.5. Tabela sa stanjima ulaza i izlaza za svaki pritisnut taster

Ne mogu biti pritisnuta dva tastera u isto vreme. Različito je vreme prilikom pritiskanja tastera zajedno sa drugim tasterom. 'KeyPressed' oznacava da je pritisnut taster u tom trenutku. Pre nego sto izadje iz procedure,ako je 'KeyPressed' setovano, mikrokontoler setuje promenljivu 'KeyAlreadyPressed'. Promenljiva neće biti setovana na nulu dokle kod ova procedura ne detektuje da nijedan taster nije pritisnut. Dakle,ako vise od dva tastera budu pritisnuta,samo ce prvi biti detektovan.Kako bi se videlo da li je pritisnut neki od tastera,vrednosti kolona se proveravaju iznova i iznova u beskonacnoj petlji dokle god jedna od njih nema u sebi vrednost 0.U stvari, neefikasno je skenirati tastaturu bez odredjenih vremenskih intervala.Obicno koristimo intervale vece od 10 ms. Ovaj interval moze biti generisan od strane tajmera. Tastature treba često analizirati kako bi se detektovalo kada je određena dirka pritisnuta, kao kada je i oslobođena. Interval najkraćeg pritiska dirke koji se mora detektovati varira od 20-100ms.

Jedan od načina da se implementira softver za analizu tastature zasniva se na korišćenju programibilnog tajmera. Tajmer se koristi za generisanje zahteva za prekid jedanput u svakoj mili sekundi. U toku obrade svake prekidno-uslužne rutine podatak na izlaznom portu se kružno pomera za jednu bit poziciju, a nakon toga se čita ulazni port. Ako u podatku koji se prihvati sa ulaznog porta postoji 0 na bilo kojoj poziciji, tada je neka od dirki pritisnuta.

U trenutku kada se odredjena dirka pritisne, ne javlja se samo jedan čist prelaz iz stanja otvoreno u stanje zatvoreno. Naprotiv dirka zatreperi vise puta između ta dva stanja pre nego sto ona konacno zauzme poziciju zatvoreno. Slična situacija se javlja i kada se dirka otpusti. Period treperenja dirke zavisi od njene konstrukcije. Kvalitetne dirke terpere od 1-5ms a loše od 20-100ms. Ako se o treperenju ne vodi računa mikroračunar će smatrati da je dirka pritisnuta više puta i oslobođena. Kod aplikacije gde se čitanje stanja dirki vrši softverski, eliminacija efkta treperenja dirki se u potpunosti obavlja programski. Osnovna ideja algoritma za eliminaciju treperenja dirki sastoji se u aktiviranju brojača čija je perioda drojanja duža od vremena treperenja dirke u toku procesa aktiviranja i deaktiviranja.

3.3. Softversko rešenje

Analiza algoritma prikazana je na slici 3.1. Nakon uključenja sistema napajanja ulazi se u fazu inicijalizacije. U toku ove faze

obavljaju se sledeće aktivnosti:

• definisanje funkcija i promenljivih koji se koriste u kodu (poglavlje 4.1.); • definisanje hardverskih zahteva (poglavlje 4.2.); • postavljanje rada tajmera (poglavlje 4.3.). U okviru postavljanja rada

tajmera, definisana je i procedura za obradu prekida kod tajmera. • resetovanje RAM-a (poglavlje 4.4.); • postavljanje rada displeja (poglavlje 4.6.) U okviru ovog poglavlja definisane

su i tabele za prikaz tekstova, tj. definisan je tekst koji se pojavljuje u prvom i drugom redu displeja (poglavlja 4.6.1.).

Nakon završetka inicijalizacije, prelazi se na ispisivanje početne poruke. Početna

poruka glasi:

“Elektronski fakultet MIPS Laboratorija”

Po završetku ispisivanja početne poruke mozemo unositi parametre preko

tastature. Sve prethodno izvršene faze bile su postavljanje sistema za ispravno

funkcionisanje. Sada, nakon izvršenja ovih faza sledi izvršavanje glavnog programa. U okviru glavnog programa čeka se događaj. Događaj može biti pritisak na neki taster. U zavisnosti od toga koji se od događaja javi, izvršava se rutina koja će obraditi taj događaj, kao što se iz algoritma može videti. Pritiskom na bilo koji numerički taster na LCD-u se ispisuje oznaka tog tastera. Taster taraba ''#'' ima funkciju brisanja sadržine koja je ispisana na LCD-u, dok je taster zvezda '' * '' sdf(second function) taster i pritiskom na njega i jos jednog(bilo kog) numeričkog tastera na LCD-u se stampa ASCII kod pritisnutog numeričog tastera.

ALGORITAM

Slika 3.6

4.Kod

Kod je pisan u Asembleru i kompajliran u softveru Arhimedes bez simulacije. U oblasti 4 prikazane su sve funkcije ponaosob, kao i glavni program. Opis funkcije se nalazi ispred, a postoje i dodatni in-line komentari.

4.1 Definisanje funkcija i promenljivih -definišemo funkcije i promenljive koje koristimo u našem programu TASTAT EQU 20H TASTER1 EQU TASTAT.0 TASTER4 EQU TASTAT.1 TASTER7 EQU TASTAT.2 ZVEZDA EQU TASTAT.3 TASTAT1 EQU 21H TASTER2 EQU TASTAT1.0 TASTER5 EQU TASTAT1.1 TASTER8 EQU TASTAT1.2 TASTER0 EQU TASTAT1.3 TASTER3 EQU TASTAT1.4 TASTER6 EQU TASTAT1.5 TASTER9 EQU TASTAT1.6 TARABA EQU TASTAT1.7 CHARBRO EQU 30H ;BROJAC KARAKTERA ZA ISPIS POMLO EQU 31H POMHI EQU 32H KOLONE EQU 33H 4.2 Hardverski zahtevi -definišemo hardverske zahteve ENABLE EQU P3.7 ;ENABLE LCD RS EQU P3.6 ;REGISTAR SELECT BLIGHT EQU P3.5 ;BACK LIGHT LCD-a RSEG CODE START JMP GLAVNI ORG START+TIMER0 JMP SCAN ;PREKIDNI PROGRAM ZA TAJMER0

4.3 Inicijalizacija tajmera GLAVNI MOV IE,#00H ;zabrana svih interapta MOV SP,#70H ;definisanje steka INIC: MOV TMOD,#001H ;T0 = 16b_TIMER MOV TH0,#0FCH MOV TL0,#067H ;INT T0 NA 1mS SETB TR0 ;STARTUJE tajmer 0

4.4 Resetovanje RAM-a - poželjno je resetovati RAM na početku izvršavanja programa, i to na lokacijama

od 08-70H MOV R0,#08 RESR MOV A,#0 MOV @R0,A INC R0 MOV A,R0 CJNE A,#070H,RESR ;RESETUJE RAM OD 08-70H 4.5 Startna sekvenca - Ovde omogućavamo serijski interapt, inicijalizujemo displej i ispisujemo na

displeju “Elektronski fak. MIPS LAB”. Time će studenti imati uvid kada je sistem stvarno resetovan i da li je u funkciji.

MOV IE,#082H ;ENABLE INTERRUPTS, T0, SPI CALL PAUSE10MS ;PAUZA 10mS CALL LCDINIC ;INICIJALIZACIJA DISPLEJA MOV R7,#0 ;BROJ PORUKE ZA PRIKAZ CALL PORPRIK1 ;PRIKAZ PORUKE NA LCD_U PRVI RED CALL PORPRIK2 ;PRIKAZ PORUKE NA LCD_U DRUGI RED

mov r3,#0100 pauza1 call PAUSE10MS djnz r3,pauza1

mov r7,#01 call PORPRIK call PORPRIK2 mov r3,#0100 pauza1x call PAUSE10MS djnz r3,pauza1x CLR RS NOP MOV P0,#00001111B ;DISPLAY ON/OFF CONTROL, CURSOR ON and blink of cursor position character SETB ENABLE MOV R0,#050 DJNZ R0,$ CLR ENABLE MOV R0,#050 ;PAUSE 40uS DJNZ R0,$ ;MAX. EXECUTE TIME =40uS MOV P0,#00000111B ;ENTRY MODE SET, CURSOR MOVE SHIFT=0 => DECREMENT CURSOR POSITION SETB ENABLE MOV R0,#050 DJNZ R0,$ CLR ENABLE MOV R0,#050 ;PAUSE 40uS DJNZ R0,$ ;MAX. EXECUTE TIME =40uS

4.6 Inicijalizacija displeja -inicijalizujemo displej, 2-redni sa 16 karaktera 5x7 Displej je sa kontrolerom povezan u 8-bit modu LCDINIC CLR ENABLE CLR RS NOP MOV P0,#00111000B ;8-bit interface,2-redni LCD, 5x7 font SETB ENABLE MOV R0,#050 DJNZ R0,$ CLR ENABLE MOV R0,#050 ;PAUSE 40uS DJNZ R0,$ ;MAX. EXECUTE TIME =40uS MOV P0,#00001100B ;DISPLAY ON/OFF CONTROL SETB ENABLE MOV R0,#050 DJNZ R0,$

CLR ENABLE MOV R0,#050 ;PAUSE 40uS DJNZ R0,$ ;MAX. EXECUTE TIME =40uS MOV P0,#00000001B ;CLEAR DISPLAY SETB ENABLE MOV R0,#050 DJNZ R0,$ CLR ENABLE MOV R1,#017 ;PAUSE 1.7 mS, MAX. EXECUTE TIME =

1.64mS PAU100uS MOV R0,#0100 DJNZ R0,$ DJNZ R1,PAU100uS MOV P0,#00000110B ;ENTRY MODE SET SETB ENABLE MOV R0,#050 DJNZ R0,$ CLR ENABLE MOV R0,#050 ;PAUSE 40uS DJNZ R0,$ ;MAX. EXECUTE TIME =40uS RET

4.6.1 Prikazivanje poruka

;***** PRIKAZIVANJE PORUKA 1.RED **** PORPRIK MOV R1,#0 CALL ADRLCD MOV CHARBRO,#0 MOV DPTR,#PORUKE CALL PRIK12 RET ;***** PRIKAZIVANJE PORUKA 2.RED **** PORPRIK2 MOV R1,#040H CALL ADRLCD MOV CHARBRO,#0 MOV DPTR,#PORUKE2 CALL PRIK12 RET PRIK12 CLR C MOV A,R7 ;U R7 JE BROJ PORUKE (0-15) ANL A,#00001111B

RL A RL A RL A RL A ADDC A,DPL MOV DPL,A MOV A,DPH ADDC A,#0 MOV DPH,A MOV POMLO,DPL MOV POMHI,DPH NEXTPOR MOV DPL,POMLO MOV DPH,POMHI MOV A,CHARBRO MOVC A,@A+DPTR CALL LCDSTAMP INC CHARBRO MOV A,CHARBRO CJNE A,#016,NEXTPOR RET

4.7. Konverzija BCD u ASCII

BCDASC ANL A,#00001111B PUSH ACC CLR C SUBB A,#00AH JC BRMANJI POP ACC ;BROJEVI A-F, tj.10-15 dec. CLR C SUBB A,#009H ORL A,#01000000B ;DODAJE 64 JMP EXKONV BRMANJI POP ACC ORL A,#00110000B ;DODAJE 48 EXKONV RET ;--- SOFT. PAUZA 10mS --- PAUSE10MS MOV R1,#040 ;40x250uS=10mS PET250u MOV R0,#0250 DJNZ R0,$ DJNZ R1,PET250u RET

4.8. Potprogram za postavljanje adrese reda

ADRLCD CLR ENABLE CLR RS MOV R0,#050 ; 50 uS DJNZ R0,$ MOV A,R1 ;U R1 JE ZELJENA ADRESA SETB ACC.7 ;ACC.7 JE UVEK SETOVAN KOD POSTAVLJANJA

ADRESE MOV P0,A ;DISPLAY DATA RAM ADRESS SETB ENABLE MOV R0,#050 DJNZ R0,$ CLR ENABLE MOV R0,#050 ;PAUSE 50uS DJNZ R0,$ ;MAX. EXECUTE TIME =40uS RET

4.9. Clear display CLRLCD CLR RS ;BRISE RS I ENABLE CLR ENABLE MOV R0,#050 DJNZ R0,$ MOV P0,#00000001B ;CLEAR DISPLAY SETB ENABLE MOV R0,#050 DJNZ R0,$ CLR ENABLE MOV R1,#017 ;PAUSE 1.7 mS, MAX. EXECUTE TIME = 1.64mS PAU100 MOV R0,#0100 DJNZ R0,$ DJNZ R1,PAU100 RET

4.10. Potprogram za štampanje jednog karaktera na LCD

LCDSTAMP SETB RS CLR ENABLE MOV R0,#050 ; 50 uS DJNZ R0,$ MOV P0,A SETB ENABLE MOV R0,#050 DJNZ R0,$ CLR ENABLE MOV R0,#050 ;PAUSE 50uS DJNZ R0,$ ;MAX. EXECUTE TIME =40uS RET 4.11. Glavni program

GP0 CALL CLRLCD ;brise LCD MOV R1,#00FH ;u R1 se nalazi zeljena

adresa CALL ADRLCD JB TARABA,$ GP JNB TARABA,TS0 JMP GP0 TS0 JNB TASTER0,TS1 MOV A,#'0' jnb ZVEZDA,cif0 mov r7,a swap a anl a,#00001111b call BCDASC call LCDSTAMP mov a,r7 anl a,#00001111b call BCDASC

call LCDSTAMP mov a,#' ' cif0 CALL LCDSTAMP JB TASTER0,$ TS1 JNB TASTER1,TS2 MOV A,#'1' jnb ZVEZDA,cif1 mov r7,a swap a anl a,#00001111b call BCDASC call LCDSTAMP mov a,r7 anl a,#00001111b call BCDASC call LCDSTAMP mov a,#' ' cif1 CALL LCDSTAMP JB TASTER1,$ TS2 JNB TASTER2,TS3 MOV A,#'2' jnb ZVEZDA,cif2 mov r7,a swap a anl a,#00001111b call BCDASC call LCDSTAMP mov a,r7 anl a,#00001111b call BCDASC call LCDSTAMP mov a,#' ' cif2 CALL LCDSTAMP JB TASTER2,$ TS3 JNB TASTER3,TS4 MOV A,#'3' jnb ZVEZDA,cif3 mov r7,a swap a anl a,#00001111b call BCDASC call LCDSTAMP mov a,r7 anl a,#00001111b call BCDASC call LCDSTAMP mov a,#' ' cif3 CALL LCDSTAMP JB TASTER3,$ TS4 JNB TASTER4,TS5 MOV A,#'4' jnb ZVEZDA,cif4 mov r7,a

swap a anl a,#00001111b call BCDASC call LCDSTAMP mov a,r7 anl a,#00001111b call BCDASC call LCDSTAMP mov a,#' ' cif4 CALL LCDSTAMP JB TASTER4,$ TS5 JNB TASTER5,TS6 MOV A,#'5' jnb ZVEZDA,cif5 mov r7,a swap a anl a,#00001111b call BCDASC call LCDSTAMP mov a,r7 anl a,#00001111b call BCDASC call LCDSTAMP mov a,#' ' cif5 CALL LCDSTAMP JB TASTER5,$ TS6 JNB TASTER6,TS7 MOV A,#'6' jnb ZVEZDA,cif6 mov r7,a swap a anl a,#00001111b call BCDASC call LCDSTAMP mov a,r7 anl a,#00001111b call BCDASC call LCDSTAMP mov a,#' ' cif6 CALL LCDSTAMP JB TASTER6,$ TS7 JNB TASTER7,TS8 MOV A,#'7' jnb ZVEZDA,cif7 mov r7,a swap a anl a,#00001111b call BCDASC call LCDSTAMP mov a,r7 anl a,#00001111b call BCDASC call LCDSTAMP mov a,#' '

cif7 CALL LCDSTAMP JB TASTER7,$ TS8 JNB TASTER8,TS9 MOV A,#'8' jnb ZVEZDA,cif8 mov r7,a swap a anl a,#00001111b call BCDASC call LCDSTAMP mov a,r7 anl a,#00001111b call BCDASC call LCDSTAMP mov a,#' ' cif8 CALL LCDSTAMP JB TASTER8,$ TS9 JNB TASTER9,povgp MOV A,#'9' jnb ZVEZDA,cif9 mov r7,a swap a anl a,#00001111b call BCDASC call LCDSTAMP mov a,r7 anl a,#00001111b call BCDASC call LCDSTAMP mov a,#' ' cif9 CALL LCDSTAMP JB TASTER9,$ povgp JMP GP ;****** INTERRUPT TIMER-a 0 na 1mS ************* SCAN PUSH ACC PUSH PSW INC KOLONE MOV A,KOLONE CJNE A,#03,OKKOL MOV KOLONE,#0 OKKOL ORL P2,#00000111B MOV A,KOLONE JNZ OSTK1 ANL P2,#11111110B JMP VRSTE OSTK1 CJNE A,#01,OSTK2 ANL P2,#11111101B JMP VRSTE OSTK2 CJNE A,#02,VRSTE ANL P2,#11111011B

VRSTE MOV A,KOLONE JNZ KOL1 MOV TASTAT,#0 MOV A,P2 CLR C RLC A CPL A SWAP A ANL A,#00001111B MOV TASTAT,A JMP NOTAST KOL1 CJNE A,#01,KOL2 ANL TASTAT1,#11110000B MOV A,P2 CLR C RLC A CPL A SWAP A ANL A,#00001111B ORL TASTAT1,A JMP NOTAST KOL2 CJNE A,#02,NOTAST ANL TASTAT1,#00001111B MOV A,P2 CLR C RLC A CPL A ANL A,#11110000B ORL TASTAT1,A NOTAST NOP IZIRQ MOV TH0,#0FCH ;definisanje vremena za ponovno

generisanje interapta tr0 MOV TL0,#067H ;INT T0 NA 1mS POP PSW POP ACC RETI

5. Programiranje mikrokontrolera AT89S8253 Program koji smo napisali u asembleru možemo istestirati i kompajlirati pomoću

više programa kao sto su Arhimed 8051, A51 makro asembler koji je u sastavu Keil uVision 3.

Ukoliko je program ispravan vršimo kreiranje hex fajla. Hex fajl upisujemo u mikrokontroler na način koji je opisan u slikovito prikazanom postupku koji sledi.

Za upis hex fajla koristimo ISP_PROG v1.3 Flexible Atmel AT89xx Flash programmer koji se moze download-ovati sa sajta www.8052.com Programator se sa racunarom povezuje preko serijske 232 veze (na COM port kompjutera).

Programiranje se vrši povezivanjem programatora na konektor JP1, stavljanjem prekidača S1 u stanje uključeno i prebacivanjem jumpera JP6 u mod „program“ . Time smo doveli potrebne signale za In Sistem Programiranje i reset procesora prebacili na programator. Napajanje programatora se vrši sa mikrokontrolerske ploče.

Nakon završenog programiranja (opisano u daljem tekstu) iskopčati programator sa ploče a prekidač i jumper vratiti u prethodni položaj i izvršiti reset mikrokontrolera pritiskom na taster S2 – RESET.

Opis softvera koji se koristi za upis koda je opisan u odeljku 5.1. Sema programatora prikazana je na sledećoj slici:

5.1 ISP PROG 1.3

Softver za ovaj programator je spakovan u jednoj izvršnoj datoteci i nije potrebna

njegova instalacija, što pojednostavljuje njegovu upotrebu i mobilnost.

Pokretanje programa se vrši dvostrukim klikom na izvršnu datoteku.

Nakon pokretanja programa, ako vam isti prijavi grešku u konektovanju. Treba podesiti odgovarajući COM port na koji ste povezali vaš programator. Primer je prikazan na na sledećoj slici:

Sledeći korak je odabir kontrolera koji programiramo:

Zatim učitavamo HEX fajl koji želimo da upišemo u kontroler File – Load Flash File

Na kraju vršimo sledeće radnje u datom redosledu: - brisanje sadržaja kontrolera (CHIP ERASE) - upisivanje zeljenog HEX fajla u kontroler (WRITE FLASH) - provera upisanog sadrzaja (VERIFY FLASH)

Kao dodatne opcije korisniku se pruzaju i: -ostavljanje svog potpisa (WRITE USER SIGNATURE) -zaključavanje kontrolera (LOCK DEVICE)

6. LITERATURA 1. ARHITEKTURE I PROGRAMIRANJE RAČUNARSKIH SISTEMA

ZASNOVANIH NA FAMILIJI PROCESORA 80x86, Mile K. Stojčev, Branislav D. Petrović, I

izdanje, Elektronski fakultet, Niš, 1999. 2. Flash microcontroller – Architectural Overview, http://www.atmel.com 3. Flash microcontroller – Memory Organization, http://www.atmel.com 4. ATMEL, SPI AT Microcontrollers, Datasheets, http://www.atmel.com 5. Migration from AT89S8252/53 to AT89S8253, http://www.atmel.com 6. Obrada prekida kod mikrokontrolera AT89S8253, Saša Đorđević, Seminarski rad, Elektronski fakultet, Niš, 2007.

7. Merenje vremena treperenja taster, M.Radenković i A.Stevanović, seminarski rad Elektornski fakultet, Niš, 2009.

PRILOG 1 – Električna šema razvojnog sistema za AT89S8253

PRILOG 2- LCD displej

U mnogi projektima za prikazivanje izlaznih podataka, kao i za davanje instrukcija korisniku, koriste se alfanumerički LCD displeji (LCD - liquid crystal display). LCD displej se može koristiti prilikom debugovanja, pri čemu su prekidne tačke podešene tako da se vrijednost željenih promjenljivih prikažu na LCD displeju. Najčešće korišteni LCD displeji su displeji sa ugrađenim kontrolerom Hitachi 44780 koji predstavlja interfejs između vanjskog svijeta i displeja.

Prema tome mikrokontroler komunicira sa kontrolerom Hitachi 44780, koji dalje upravlja LCD dispejom. U daljem tekstu koristiće se termin komunikacija između mikrokontrolera i LCD displeja, podrazumjevajući da je stvarni tok komunikacije mikrokontroler -> kontroler HD 44780 -> LCD displej.

Blok šema LCD displeja sa kontrolerom Hitachi 44780 prikazana je na sljedećoj slici:

Sa slike se vidi da LCD u sebi sadrži LCD panel i LCD kontroler baziran na kolu HD 44780. Da bi se uspostavila komunikacija između mikrokontrolera i LCD-a prvo je potrebno izvršiti povezivanje pinova mikrokontrolera sa odgovarajućim pinovima LCD-a i priključiti LCD na odgovarajući napon napajanja. U blok šemi postoji i dio backlight, a on predstavlja osvjetljenje pozadine. Postoje LCD displeji sa osvjetljenjem i bez osvjetljenja pozadine. Osvjetljenje pozadine jednostavno se uključuje povezivanjem pinova A i K na napon napajanja LCD displeja.

Da bi se ostvarila komunikacija između mikrokontrolera i LCD displeja, potrebno je znati za šta služi koji pin na LCD displeju. Zbog toga u sljedećoj tabeli dat je opis pojedinih pinova na LCD displeju:

Pinov Opis DB0 - DB7 Pinovi za prenos podataka pri čemu je DB0 najmanje značajan bit E Signal za uključenje R/W 0-pisanje na LCD, 1-čitanje sa LCD-a RS 0-naredba, 1-podatak V0 Kontrast Vdd +5V Vss GND

Prema navedenoj tabeli za prikazivanje podataka na LCD displeju, na mikrokontroler je potrebno povezati pinove DB0-DB7, E i RS signal. S obzirom da će se samo prikazivati podaci na LCD-u, nije potrebna komunikacija sa R/W pinom i on se može odmah spojiti na GND, jer je logička 0 potrebna za mogućnost pisanja na LCD displej. Ovim načinom povezivanja ostvaruje se 8-bitna komunikacija između mikrokontrolera i LCD displeja, a potrebno je ukupno 10 slobodnih pinova na mikrokontroleru. Takođe postoji i 4-bitna komunikacija za koju je potrebno 6 slobodnih pinova na mikrokontroleru. U ovom projektu koristiće se 4-bitna komunikacija zbog potrebe manjeg broja slobodnih pinova na mikrokontroleru.

U projektu su korišteni mikrokontroler Atmega88 i LCD displej DEM16217 16x2 (2 linije sa 16 znakova). Ovaj displej ima backlight, ali se nije koristio u projektu. Šema spajanja mikrokontrolera i LCD displeja prikazana je na sljedećoj slici:

Na šemi se vidi da su međusobno povezani sljedeći pinovi:

Mikrokontroler LCD displej PB0 DB5 PB1 DB6 PB2 DB7 PB3 DB8 PB4 E PB5 RS

S obzirom da svaki LCD displej ima odgovarajuće karakteristike, prije pisanja programskog koda za ostvarenje komunikacije između mikrokontrolera i LCD displeja potrebno je pogledati u karakteristikama LCD-a način za ostvarivanje 8-bitne ili u ovom slučaju 4-bitne komunikacije. Na sljedećoj slici prikazan je 4-bitni način ostvarivanja komunikacije koji je nalazi u karakteristikama korištenog LCD-a.

BIOGRAFIJA

Ime i prezime: Dejan Nikolić Datum i mesto rođenja: 28.10.1984. Jagodina Adresa stanovanja: Kruševac, selo Bošnjane Obrazovanje: MEŠ - Kruševac Godina upisa fakulteta: 2003. Smer: Telekomunikacije Poznavanje jezika: Engleski, Nemački Poznavanje softvera i programskih jezika:

MSOffice, Asembler

Interesovanja: Zapošljenje:

Fudbal, bodi-bilding, čitanje bez posla

Ime i prezime: Miloš Panić Datum i mesto rodjenja: 25.03.1984. Pirot Adresa stanovanja: Pirot Obrazovanje: Gimnazija, Pirot Godina upisa fakulteta: 2003. Smer: Telekomunikacije Poznavanje jezika: Engleski Poznavanje softvera i programskih jezika: MSOffice, Asembler Interesovanja: tenis Zapošljenje: bez posla