sla , index 9781 negovan stankovi ć, index 9793es.elfak.ni.ac.rs/papers/generator talasnih...

38
Univerzitet u Nišu Elektronski fakultet Generator talasnih oblika realizovan pomoću mikrokontrolera AT89S8253 Projekat iz predmeta: Mikroprocesorski sistemi Predmetni nastavnik: Prof. Dr. Mile Stojčev Studenti: Slađan Stajić, index 9781 Negovan Stanković, index 9793

Upload: phamdan

Post on 06-Feb-2018

224 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Sla , index 9781 Negovan Stankovi ć, index 9793es.elfak.ni.ac.rs/Papers/generator talasnih oblika.pdf · pokazivac,tri 16 bit-na clock/counter,6 vektorske arhitekture prekida sa

Univerzitet u Nišu

Elektronski fakultet

Generator talasnih oblika realizovan pomoću mikrokontrolera

AT89S8253

Projekat iz predmeta: Mikroprocesorski sistemi

Predmetni nastavnik: Prof. Dr. Mile Stojčev

Studenti:

Slađan Stajić, index 9781

Negovan Stanković, index 9793

Page 2: Sla , index 9781 Negovan Stankovi ć, index 9793es.elfak.ni.ac.rs/Papers/generator talasnih oblika.pdf · pokazivac,tri 16 bit-na clock/counter,6 vektorske arhitekture prekida sa

2

SADRŽAJ

Projektni zadatak.....................................................................................3 Upoznavanje sa mikrokontrolerom AT89S8253....................................4 Izvori prekida..........................................................................................9 Serijska komunikacija............................................................................12 Softver....................................................................................................16 Hardver...................................................................................................26 Testiranje i upis hex fajla u mikrokontroler........................................................................................31 Zaključak................................................................................................36 Primer laboratorijske vežbe....................................................................37

Page 3: Sla , index 9781 Negovan Stankovi ć, index 9793es.elfak.ni.ac.rs/Papers/generator talasnih oblika.pdf · pokazivac,tri 16 bit-na clock/counter,6 vektorske arhitekture prekida sa

3

PROJEKTNI ZADATAK : Realizovati generator talasnih oblika pomoću mikrokontrolera AT89S8253. Realizacija je prikazana i objašnjena pomoću tri primera talasnih oblika koji su prikazani na sledećim slikama.

Preko serijskog porta na računaru zadavati komandu koji od ovih signala treba prikazati na izlaznom portu mikrokontrolera, komandu za start pomoću koje se počinje sa izvršavanjem odgovarajućeg programa i komandu stop pomoću koje stopiramo izvršavanje programa. Realizovati digitalno analogni konvertor koji nam služi da digitalni signal koji dobijamo na izlazu mikrokontrolera konvertuje u analogni koji možemo posmarati na osciloskopu.

Page 4: Sla , index 9781 Negovan Stankovi ć, index 9793es.elfak.ni.ac.rs/Papers/generator talasnih oblika.pdf · pokazivac,tri 16 bit-na clock/counter,6 vektorske arhitekture prekida sa

4

UPOZNAVANJE SA MIKROKONTROLEROM AT89S8253

-Kompatibilan je sa procesorom 51 -12 k bytes flesh memorija -SPI serijlski unos za ucitavanje programa -10000 read/write ciklusa -2k byres EEPROM -100000 write/read ciklusa(64k byte korisnicka matrica -Napon napajanja 2,7 do 5.5 V -Frekvencija od 0 do 24 MHz -Memorijsko zakljucanvanje iz 3 nivoa -256 x 8-bit-ni unutrasnji ram -32 I/O linije za programiranje -16-bitna clock/timer brojaca -9 generatora prekida -Poboljsani UART serijski port sa centriranjem detekcije greske i automatskim prepoznavanjem adrese -Male snage napajanja -Uspostavljanje prekida u niskom rezimu -Programilni tajmeri -Dvostruki pokazivac podataka -Iskljucivanje pomocu znaka(POWER OFF) -Fleksibilni ISP programator(byte i page mode) -Page mode:64 byte/page za DATA memoriju -4-nivo poboljsani kontrolor prekida -Programabilna x2 clock opcije

Page 5: Sla , index 9781 Negovan Stankovi ć, index 9793es.elfak.ni.ac.rs/Papers/generator talasnih oblika.pdf · pokazivac,tri 16 bit-na clock/counter,6 vektorske arhitekture prekida sa

5

-Unutrasnji POWER-ON reset -42-pin PDIP model kucista za redukovanje EMS emisije -Zeleni(Pb/Holide-free) opcija kucista AT89S8253 je processor visokih performansi,male potrosnje snage. Komponenta je napravljena u Atmel korporaciji i kompatibilna je sa nadaleko poznatim i popularnim procesorom 80C51.Repogramiranje memorije je moguce pomocu SPI serijskog ulaza ili pomocu konvekcionalnog programatora memorija.Kombinovanjem razlicitih 8-bitnih CPU-a sa ugradjenom programibilnom fles memorijom na monolitnom cipu, Atmel AT89S8253 je fleksibilan processor koji je zahvaljujuci niskoj ceni nasao veliku primenu kod mnogih kontrolnih aplikacija i programa. AT89S8253 ukljucuje standardne osobine poput 12 k bytes flash memory,2 k bytes EEPROM,256 bytes RAM memorije,32 I/O linije,programabilni clock/tajmer,dvostruki pokazivac,tri 16 bit-na clock/counter,6 vektorske arhitekture prekida sa 2 nivoa, potpuni serijski ulaz,eksterni sopstveni oscilator,i elektricno kolo sata.Ustvari AT89S8253 (uz pomoc staticke logike) se koristi za operacije niskih frekvencija,potpomognut sa 2 softverska moda. IDLE mod zaustavlja CPU dok dopustajuci RAM ,clock/counter,serijski port i sistem prekida se koriste za nastavak funkcionisanja.Niski mod cuva RAM sadrzaj ali i zamrzava oscilator iskljucujuci sve ostale funkcije u kolu sve dok naidje sledeci spoljasnji prekid ili hardverski reset.FLASH memorija se moze menjati pomocu serijskog SPI pristupa.Zadrzavanje Reset opcije SPI omogucava da memorija bude upisana ili procitana od stane bita koji su bili aktivni.

Ima 32 ulazno/izlazna pina, raspoređena u 4 porta sa po osam pinova. Poseduje watchdog tajmer, tri 16-bitna tajmera/brojača, devet izvora prekida i ugrađen oscilator (kvarcni oscilator se vezuje na pinove XTAL1 i XTAL2). Radi smanjenja potrošnje, pored normalnog moda rada, mikrokontroler može da radi u Idle modu ili Power-down modu.

Portovi od 0 do 3, kao i drugi resursi mikrokontrolera, mogu imati više funkcija. Ovde će biti pomenute samo one koje su bitne za ovu aplikaciju.

Važno je naglasiti da se port 1 koristi pri programiranju fleš memorije. Tako pinovi P1.5 do P1.7 imaju sledeću ulogu: P1.5 je ujedno serijski ulaz MOSI (Master Output Slave Input), P1.6 je MISO (Master Input Slave Output), i P1.7je SCK (Sampling Clock).

Sam algoritam serijskog programiranjaje sledeći:

1. priključi se napajanje i pin za reset RST se postavi na visoko, H.

2. uključi se serijski način programiranja slanjem instrukcije serijskog programiranja na pin MOSI/P1.5. Pri tome se na pin SCK/P1.7 dovodi takt frekvencije barem 16 puta manje od frekvencije rada mikrokontrolera.

3. programira se fleš slanjem odgovarajuće instrukcije za upis podataka. Mogu se pri programiranju koristiti dva moda: bajtovski ili stranični.

4. upis na bilo koju lokaciju može se verifikovati slanjem naredbe za čitanje, pri čemu se sadržaj memorijske lokacije dobija na pinu MISO/P1.6.

5. RST se vraća na niski nivo i mikrokontroler može da počne sa izvršavanjem programa.

Page 6: Sla , index 9781 Negovan Stankovi ć, index 9793es.elfak.ni.ac.rs/Papers/generator talasnih oblika.pdf · pokazivac,tri 16 bit-na clock/counter,6 vektorske arhitekture prekida sa

6

Kontrola rada tajmera definiše se preko registara TCON i TMOD sa adresama 88h i 89h Struktura registra a) TCON i b) TMOD. Značenje kontrolnih bitova je sledeće: - TR0 služi za dozvolu rada tajmera 0- TF0 se postavlja na jedinicu kada se javi prekoračenje tajmera, mora

se softverski obrisati. - IT0 se postavlja na nulu da bi se podesilo okidanje donjom ivicom (level trigger) interapt signala INT0# ili se postavlja na jedinicu da bi se podesilo okidanje opadajućom ivicom INT0# signala. - IE0 se postavlja na nulu od strane hardvera kada je interapt opslužen (kada je ivično trigerovan) ili se postavlja hardverski kada se detektuje interapt na pinu INT0# - GATE0 treba da se postavi na nulu da bi se dozvolio rad Tajmera 0 kada god je setovan TR0 ili treba da se postavi da bi se dozvolio rad tajmera/brojača 0 samo kada je INT0# postavljen na visoko i TR0 setovan - C/T0 služi da se izabere mod rada kao brojač ili kao tajmer - bitovima M10 i M00 bira se mod rada. Modovi rada su dati u tabeli. M10 M00 mod

0 0 8-bitni tajmer/brojač sa 5-bitnim preskalerom

0 1 16-bitni tajmer/brojač

1 0 8- bitni tajmer/brojač sa automatskim reloadovanjem

1 1 8-bitni tajmer/brojač

Modovi rada za tajmer 0. Pored ova dva registra postoje i još dva registra TH0 i TL0 sa adresama 8Ch i 8Ah, respektivno, koji predstavljaju stanje brojača/tajmera. Kada se koristi kao tajmer, on uvećava svoj sadržaj na svakih dvanaest taktnih intervala, što ujedno iznosi i vreme izvršenja jedne instrukcije. Mikrokontroler ulazi u Idle stanje postavljanjem LSB bita PCON registra sa adresom 87h. Kada se mikrokontroler nađe u Power-down stanju onda se, ne samo prestaje sa izvršenjem instrukcija, već se i periferije zamrzavaju i oscilator prestaje sa radom. Iz ovog stanja se izlazi resetom ili primanjem spoljašnjeg interapta. U Power-down stanje se ulazi setovanjem četvrtog bita PCON registra. Prethodno navedeni registri nalaze se u SFR (Special Function Registers) prostoru koji je grafički prikazan na slici. Tabela. AT89S8253 SFR Map and Reset Values

Page 7: Sla , index 9781 Negovan Stankovi ć, index 9793es.elfak.ni.ac.rs/Papers/generator talasnih oblika.pdf · pokazivac,tri 16 bit-na clock/counter,6 vektorske arhitekture prekida sa

7

SFR deli adresni prostor sa RAM-om. To znači da se adrese za viših 128 bajtova RAM-a koriste za adresiranje SFR-a. U zavisnosti od načina adresiranja pristupa se ili SFR-u ili višem delu RAM-a. Tako se direktnim adresiranjem pristupa SFR-u, dok se samo indirektnim adresiranjem može pristupiti 128 višim bajtovima RAM-a. Ovo je grafički prikazano na slici.

Preklapanje SFR i RAM adresnog prostora. Nižim 128 bajtovima RAM-a može da se pristupa i direktno i indirektno.

Page 8: Sla , index 9781 Negovan Stankovi ć, index 9793es.elfak.ni.ac.rs/Papers/generator talasnih oblika.pdf · pokazivac,tri 16 bit-na clock/counter,6 vektorske arhitekture prekida sa

8

Organizacija nižih 128 bajtova RAM-a. Kao što se sa slike može videti, nižih 32 bajta je podeljeno u četiri banke registara. Svaka banka sadrži osam registra. Izbor banke obavlja se postavljanjem trećeg i četvrtog bita u PSW registru na odgovarajuću vrednost. Podrazumevana vrednost (default) selektuje prvu banku, a Stek Pointer (SP) je postavljen na adresu 07h. To znači da magacin zauzima prostor iznad prve banke. Međutim, ovo se može promeniti po potrebi tako da je položaj magacina proizvoljan kao i njegova veličina. Memorijski prostor RAM-a u opsegu adresa od 20h do2Fh je bit adresibilan, ali to u ovoj aplikaciji nije od važnosti. Važno je napomenuti da se podaci mogu čuvati i u EEPROM-u ili nekoj spoljašnjoj memoriji, mada se to ovde ne koristi. Fleš memorija isključivo služi za smeštanje programa i u nju se ne mogu upisivati podaci tokom rada mikrokontrolera. Grafički prikaz organizacije nižeg dela programske memorije prikazanje na slici .

Niži deo programske memorije.

Page 9: Sla , index 9781 Negovan Stankovi ć, index 9793es.elfak.ni.ac.rs/Papers/generator talasnih oblika.pdf · pokazivac,tri 16 bit-na clock/counter,6 vektorske arhitekture prekida sa

9

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 ne briše 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 softverom.

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 nebrise 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 u toku timer-ovih prezasicenja.

Page 10: Sla , index 9781 Negovan Stankovi ć, index 9793es.elfak.ni.ac.rs/Papers/generator talasnih oblika.pdf · pokazivac,tri 16 bit-na clock/counter,6 vektorske arhitekture prekida sa

10

Slede struktrure nekih registara:

-Registar koji omogucava prekide je na sledecoj slici:

Registar prioriteta prekida je prikazan na sledecoj slici:

Page 11: Sla , index 9781 Negovan Stankovi ć, index 9793es.elfak.ni.ac.rs/Papers/generator talasnih oblika.pdf · pokazivac,tri 16 bit-na clock/counter,6 vektorske arhitekture prekida sa

11

Registar visokog prioriteta prekida je prikazan na sledecoj slici:

Ovo je sve što je potrebno da se zna o kontroleru i njegovim funkcijama koje se koriste u ovoj aplikaciji. Dodatne informacije mogu se naći na atmelovom sajtu na adresi www.atmel.com.

Page 12: Sla , index 9781 Negovan Stankovi ć, index 9793es.elfak.ni.ac.rs/Papers/generator talasnih oblika.pdf · pokazivac,tri 16 bit-na clock/counter,6 vektorske arhitekture prekida sa

12

SERIJSKA KOMUNIKACIJA

Pošto komunikaciju mikrokontrolera sa računarom odnosno zadavanje određenih naredbi vršimo preko RS 232 linije u tekstu koji sledi podrobnije ćemo objasniti serijsku komunikaciju između računara i mikrokontrolera AT89S8253. ‘Telecommunication Industry Association, 1997-e godine izdala je TIA 232 Version F serijsko komunikacijski protokol poznat kao RS 232 (Recommended Standard) protokol. RS 232 standard je široko korišćen pri prenosu podataka sa brzinama u granicama od 115 do 330 kbips a maksimalna razdaljina za komunikaciju je oko 30 metra. RS 232 predstavlja peer to peer komunikacijski standard, odnosno pogodan je za aplikacije koje sadrže 2 čvora gde je na svakom od njih mikrokontroler ili računar odnosno možemo povezati jedan mikrokontroler za jedan PC. Pretpostavimo da je brzina kojom šaljemo podatke sa računara 9600 baud-a odnosno 9600 bita u sekundi, što je inače i široko preporučljiva brzina za bezbedno slanje podataka, onda će za slanje jednog bajta plus jedan start i jedan stop bit biti potrebno 1ms. MAX 232 je iskorišten kao driver chip između serijskog porta na računaru i mikrokontrolera.

Jedna od najbitnijih karakteristika mikrokontrolera AT89S8253 je integrisani U ART (Universal Asynchrony Receiver Transmiter), poznat kao serijski port. Činjenica da AT89S8253 ima ugradjeni serijski port znači da vi možete vrlo jednostavno da čitate i upisujete vrednosti sa/u serijski port. Kada ne bi bilo serijskog porta, upis bajta na serijsku liniju bi bio prilično dosadan proces koji zahteva uključivanje i isključivanje jedne od I/O linija brzo sukcesivno podešavanje ''clock out'' svakog individualnog bita, uključujući start bitove, stop bitove i bitove parnosti. Umesto toga neophodno je jednostavno samo da konfigurišemo mod rada serijskog porta i baud rate. Kada ga jednom konfigurišemo, jedino što nam preostaje da uradimo je da upišemo u SFR registar vrednost koju upisujemo u serijski port ili da pročitamo isti SFR registar da bi pročitali vrednost sa serijskog porta. AT89S8253 će nam automatski staviti do znanja kada je završio slanje karaktera koji smo upisali, a takodje će nas obavestiti i kada primi bajt tako da ga možemo procesirati. Prva stvar koju morate da uradite kada koristite AT89S8253 sa ugradjenim serijskim portom je očigledno da ga konfigurišete. Dakle treba da kažemo AT89S8253 koliko bitova podatka mi želimo da pošaljemo, baud rate koja će biti korišćena i kako će željena baud rate biti odredjena.

Page 13: Sla , index 9781 Negovan Stankovi ć, index 9793es.elfak.ni.ac.rs/Papers/generator talasnih oblika.pdf · pokazivac,tri 16 bit-na clock/counter,6 vektorske arhitekture prekida sa

13

Na slici iznad predstavljen je ''Serial Control'' (SCON) SFR registar i definisano je šta svaki od bitova SFR-a reprezentuje: SCON SFR registar dozvoljava nam da konfigurišemo Serial Port. Dakle, proći ćemo kroz sve bitove i razmotriti njihove funkcije. Prva četiri bita (bitovi od 4 do 7) su konfiguracioni bitovi. Bitovi SM0 i SM1 postavljaju serial mod vrednostima izmedju 0 i 3 uključujući i njih.

Četiri moda rada su definisana u prethodnoj tabeli. Kao što možemo videti, selektovanjem Serijskog moda selektujemo operacije (8 bitni/9 bitni, UART ili Shift registar) i takodje odredjujemo kako će baud rate biti proračunata. U modovima 0 i 2 baud rate je fiksno zasnovana na frekvecniji oscilatora. U modovima 1 i 3 baud rate je promenljiva i bazirana na to kako često se Tajmer 1 overflow-je. Više reči o različitim serijskim modovima će biti nešto kasnije. Sledeći bit SM2, je fleg za ''Multiprocesorske komunikacije''. Generalno, kad god mikrokontroler primi bajt on postavlja "RI" (Receiver Interrupt) marker. On stavlja do znanja programu da je bajt primljen i da je neophodno da bude procesiran. Ipak, kada je SM2 postavljen "RI" marker će biti trigerovan (okinut) ako je primljeni 9-ti bit "1". Tako da kažemo, ako je SM2 setovan i primljen je bajt čiji je 9-ti bit 0, RI fleg nikad neće biti setovan. Ovo može biti korisno u nekim naprednijim serijskim aplikacijama. Za sada je dovoljno da znate da je skoro uvek potrebno da obrišete ovaj bit tako da je marker postavljen prijemom bilo kog karaktera. Sledeći bit, REN je ''Receiver Enable''. Ovaj bit je vrlo iskren: ako želite da primite podatak putem serijskog porta, postavite ovaj bit. Skoro uvek će biti potrebno da postavite ovaj bit. Poslednja četiri bita (bitovi od 0 do 3) su operativni bitovi. Koriste se u trenucima slanja i prijema podataka - oni se ne koriste da konfigurišu serijski port. TB8 bit se koristi u modovima 2 i 3. U modovima 2 i 3, ukupno 9 bitova podataka se

Page 14: Sla , index 9781 Negovan Stankovi ć, index 9793es.elfak.ni.ac.rs/Papers/generator talasnih oblika.pdf · pokazivac,tri 16 bit-na clock/counter,6 vektorske arhitekture prekida sa

14

transmituju. Prvih 8 bitova podataka su 8 bitova glavne vrednosti, dok se deveti bit uzima sa bit pozicije TB8. Ako je TB8 postavljen i vrednost koja se šalje upisana u serijski port, bitovi podataka će biti upisani na serijsku liniju praćeni sa postavljenim devetim bitom. Ako je TB8 postavljen na 0 deveti bit će biti "clear" RB8 takodje operiše u modovima 2 i 3 i u suštini funkcioniše na isti način kao i TB8, ali na prijemnoj strani. Kada je bajt primljen u modovima 2 ili 3, ukupno su primljena 9 bitova. U ovom slučaju, prvih osam primljenih bitova su podaci serijskog bajta, a vrednost devetog primljenog bita će biti smeštena u RB8. TI znači ''Transmit Interrupt''. Kada program upiše vrednost u serijski port, protekne izvesno vreme pre nego što se individualni bitovi poslatog bajta ne proslede na serijski port sa taktom (clocked out). Ako program upiše drugi bajt u serijski port pre nego što se prvi bajt kompletno prosledi, poslati podaci će biti pogrešni. Dakle, mikrokontroler postavljanjem TI bita stavlja do znanja programu da je u fazi ''clocked out'' poslednjeg bajta. Kada je TI bit setovan program može da pretpostavi da je serijski port "slobodan" i spreman da primi sledeći bajt. Konačno, RI bit označava ''Receiver Interrupt''. Funkcionalno je sličan "TI" bitu, s tim što ukazuje daje bajt upravo primljen. Možemo da kažemo, da kad god mikrokontroler primi kompletan bajt on trigeruje RI bit i obaveštava program daje neophodno da brzo pročita vrednost, pre nego što drugi bajt pročita. Čim serijski port bude konfigurisan u odgovarjućem modu, kao što smo objasnili u prethodnom delu, program mora da konfiguriše njegovu baud rate. Ovo se jedino primenjuje kad je serijski port u modovima 1 i 3. Odredjivanje Baud rate u modovima 0 i 2 se bazira na frekveciji oscilatora. U modu 0 baud rate je uvek jednak frekvenciji oscilatora podeljenoj sa 12. To znači da ako imate kristal sa frekvencijom 11.059 MHz baud rate moda 0 će uvek biti 921 583 baud-a. U modu 2 baud rate je uvek frekvencija oscilatora podeljena sa 64, tako da za isti kristal od 11.059 MHz-a brzina će biti 172 979 baud-a. U modovima 1 i 3, baud rate je odredjen frekventnošću overflow-vanja (prekoračenja) tajmera 1. To znači da ako se tajmer 1 češće overflow-je baudrate će biti veća. Postoje mnogi načini koji mogu da uslove da se tajmer 1 overflow-je odredjenom brzinom, ali najopštija metoda je da stavimo tajmer 1 u 8-bitni auto-reload mod (tajmer mod 2) i postavimo reload vrednost (TH1) koja će usloviti overflow-vanje na pogodnoj frekvenciji koja će generisati baud rate. Da bi odredili vrednost koja mora biti smeštena u TH1 da bi generisali datu baud rate, morate koristiti sledeću jednačinu (pretpostavimo daje PCON.7 postavljen na 0). TH1 = 256 - ((Kristal / 384)/Baud) Ako je PCON.7 postavljen onda baud rate se efektivno udvostručava, dakle jednačina postaje: TH1 = 256 - ((Kristal / 192)/Baud) Baud-ova brzina u našem slučaju je 9600, a oscilovanje kristala 11.059MHz. Tako da prema formuli TH1 = 256 - ((Kristal / 384)/Baud) u TH1 upisujemo vrednost #FDh. ;(0FDH - 9600 Q=11.0592MHz) MOV TH1,#0FDH ;definisanje brzine tajmera T1 9600 MOV TL1,TH1 MOV TMOD,#021H ;T1 = AUTORELOAD, T0 = 16b_TIMER MOV SCON,#050H ;dozvola serijskog prijema SETB TR1 ;STARTUJE tajmer 1 Čim serijski port bude konfigurisan na način kako smo objasnili u prethodnom delu, on postaje spreman za slanje i primanje podataka. Da bi upisali bajt u serijski port samo morate upisati

Page 15: Sla , index 9781 Negovan Stankovi ć, index 9793es.elfak.ni.ac.rs/Papers/generator talasnih oblika.pdf · pokazivac,tri 16 bit-na clock/counter,6 vektorske arhitekture prekida sa

15

vrednost u SBUF (99h) SFR registra. Na primer, ako vi želite da pošaljete slovo 'B' na serijski port, to ćete izvršiti kao: MOV SBUF,#'B' Izvršenjem gornje instrukcije mikrokontroler će početi sa prenosom karaktera preko serijskog porta. Očigledno prenos nije trenutan - vreme potrebno za prenos je merljivo mikrokontroler nas obaveštava kada je prenos karaktera ostvaren postavljanjem TI bita u SCON. Kada je ovaj bit postavljen mi znamo da je poslednji karakter prenešen i tada mi možemo da pošaljemo sledeći karakter, ili bilo kakvu vrednost. Razmotrimo sledeći kodni segment: CLR TI ;da bi bili sigurni da je bit inicijalno obrisan MOV SBUF, #'B' ;šaljemo slovo 'B' na serijski port JNB TI, $ ;pauza sve dok je TI bit postavljen Prethodno navedene instrukcije će uspešno preneti karakter i čekati da TI bit bude postavljen pre nastavka. Poslednja instrukcija kaze " Skoči ako TI bit nije postavljen na $" ~ $ u mnogim asemblerima znači ''ista adresa tekuće instrukcije''. Prema tome mikrokontroler će pauzirati na JNB instrukciji sve dok je TI bit postavljen od strane mikrokontrolera radi uspešnog prenosa karaktera. Čitanje primljenih podataka od serijskog porta je jednako lako kao i upis. Čitanje bajta od serijskog porta se svodi na čitanje vrednosti smeštene u SBUF (99h) SFR registra nakon automatskog setovanja RI markera u SCON od strane mikrokontrolera. Na primer, ako želite da programski čekate da karakter bude primljen i zatim pročitani karaketr smestite u Akumulator, možete koristiti sledeći kodni segment: JNB RI, $ ;čekati da mikrokontroler postavi marker RI MOV A, SBUF ;pročitati karakter sa serijskog porta Prva linija prethodnog kodnog segmenta čeka da mikrokontroler postavi RI marker. Tako dokle god bit nije postavljen program ponavlja "JNB" instrukciju kontinualno. Čim je RI bit postavljen kao odgovor na primljen karakter gornji uslov automatski nije ispunjen i programski tok dolazi do MOV instrukcije koja čita vrednost. U našem projektu smo komunikaciju između serijskog porta računara i mikrokontrolera odradili pomoću programa koji smo napisali u Delphi-u. O tome više reči u textu koji sledi.

Page 16: Sla , index 9781 Negovan Stankovi ć, index 9793es.elfak.ni.ac.rs/Papers/generator talasnih oblika.pdf · pokazivac,tri 16 bit-na clock/counter,6 vektorske arhitekture prekida sa

16

SOFTVER Komunikaciju sa mikrokontrolerom odnosno slanje određenih naredbi istom smo ostvarili programom koji je napisan u Delphi-u. Izgled tog programa je prikazan u tekstu koji sledi. unit siggen; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, ImgList, ExtCtrls, CPort, ComCtrls; type TForm1 = class(TForm) GroupBox1: TGroupBox; Image1: TImage; Image2: TImage; Image3: TImage; RadioButton1: TRadioButton; RadioButton2: TRadioButton; RadioButton3: TRadioButton; ComPort1: TComPort; Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button2Click(Sender: TObject); procedure RadioButton2Click(Sender: TObject); procedure RadioButton1Click(Sender: TObject); procedure RadioButton3Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; startstop:boolean; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject);

Page 17: Sla , index 9781 Negovan Stankovi ć, index 9793es.elfak.ni.ac.rs/Papers/generator talasnih oblika.pdf · pokazivac,tri 16 bit-na clock/counter,6 vektorske arhitekture prekida sa

17

begin ComPort1.WriteStr('P OFFW'); Halt; Close; end; procedure TForm1.FormCreate(Sender: TObject); begin Button2.Caption:='START'; ComPort1.Open; RadioButton1.Checked:=true; ComPort1.WriteStr('PRES1S'); end; procedure TForm1.Button2Click(Sender: TObject); begin if Button2.Caption='START' then begin Button2.Caption:='STOP'; ComPort1.WriteStr('P ONW'); end else begin Button2.Caption:='START'; ComPort1.WriteStr('P OFFW'); end; end; procedure TForm1.RadioButton1Click(Sender: TObject); begin if RadioButton1.checked=true then ComPort1.WriteStr('PRES1S'); if RadioButton2.checked=true then ComPort1.WriteStr('PRES2S'); if RadioButton3.checked=true then ComPort1.WriteStr('PRES3S'); end; procedure TForm1.RadioButton2Click(Sender: TObject); begin if RadioButton1.checked=true then ComPort1.WriteStr('PRES1S'); if RadioButton2.checked=true then ComPort1.WriteStr('PRES2S'); if RadioButton3.checked=true then ComPort1.WriteStr('PRES3S'); end; procedure TForm1.RadioButton3Click(Sender: TObject); begin if RadioButton1.checked=true then ComPort1.WriteStr('PRES1S'); if RadioButton2.checked=true then ComPort1.WriteStr('PRES2S'); if RadioButton3.checked=true then ComPort1.WriteStr('PRES3S'); end;end.

Page 18: Sla , index 9781 Negovan Stankovi ć, index 9793es.elfak.ni.ac.rs/Papers/generator talasnih oblika.pdf · pokazivac,tri 16 bit-na clock/counter,6 vektorske arhitekture prekida sa

18

Izgled izvršnog fajla je dat na sledećoj slici

Klikom na neki od signala a za tim na dugme START mikrokontroleru se šalje komanda za generisanje odgovarajućeg signala. Ukoliko je u pitanju prvi signal niz karaktera koji se šalje je PRES1S. Ukoliko je u pitanju drugi signal niz karaktera koji se šalju je PRES2S a za treći signal niz karaktera je PRES3S. Posle klika na dugme START izgled izvršnog fajla je sledeći.

Page 19: Sla , index 9781 Negovan Stankovi ć, index 9793es.elfak.ni.ac.rs/Papers/generator talasnih oblika.pdf · pokazivac,tri 16 bit-na clock/counter,6 vektorske arhitekture prekida sa

19

U svakom trenutku možemo zaustaviti generisanje odgovarajućeg signala pritiskom na dugme STOP. Kada kliknemo na START šalje se niz karaktera P ONW, kada pretisnemo STOP šaljemo niz karaktera P OFW. Kada odgovarajući niz karaktera stigne u mikrokontroler u njemu nastupa serijska prekidna rutina koja uslovljava dekodiranje odgovarajuće naredbe i izvršenje iste. Program pomoću kojeg se vrši generisanje odgovarajučih talasnih oblika napisan je u asembleru i njegov izgled je prikazan u tekstu ispod STATUS EQU 20H TIME EQU STATUS.0 NAREDBA EQU STATUS.2 NOTSEND EQU STATUS.3 ;BAJT NIJE POSLAT PRESETS EQU 21H PRES1 EQU PRESETS.0 PRES2 EQU PRESETS.1 PRES3 EQU PRESETS.2 POWFLAGS EQU 22H STARTF EQU POWFLAGS.0 STOPF EQU POWFLAGS.1 TIMEHI EQU 30H TIMELO EQU 31H BROJAC EQU 32H OUTVAL EQU 33H TRHI EQU 34H TRLO EQU 35H PRIMA EQU 36H ;PRIMLJENI BAJT IZ SBUF-a BROSER EQU 37H ;BROJ BAJTOVA NA SERIJSKOM PORTU

Page 20: Sla , index 9781 Negovan Stankovi ć, index 9793es.elfak.ni.ac.rs/Papers/generator talasnih oblika.pdf · pokazivac,tri 16 bit-na clock/counter,6 vektorske arhitekture prekida sa

20

;MESTO ZA KOMANDE IZ PC-a ZNAK EQU 60H PRVI EQU 61H DRUGI EQU 62H TRECI EQU 63H CETVRT EQU 64H KONTROL EQU 65H STRING SEGMENT CODE RSEG STRING START: JMP GLAVNI

ORG 0023H ; početna adresa prekidnog podprograma za serijski kanal

JB RI,RX JB TI,TX RX: JMP RECEIVE TX: JMP TRANS ;ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» ;º inicijalizacija TIMER-a,reset.RAM-a i sl. º ;ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ GLAVNI: MOV IE,#00H ;zabrana svih interapta MOV SP,#70H ;definisanje steka ;(0FDH - 9600 Q=11.0592MHz) INIC: MOV TH1,#0FDH ;definisanje brzine tajmera T1 9600 MOV TL1,TH1 MOV TMOD,#021H ;T1 = AUTORELOAD, T0 = 16b_TIMER MOV SCON,#050H ;dozvola serijskog prijema SETB TR1 ;STARTUJE tajmer 1 MOV P2,#0 ;******* resetovanje rama ***** MOV R0,#08 RESR: MOV A,#0 MOV @R0,A INC R0 MOV A,R0 CJNE A,#070H,RESR MOV IE,#092H ;DOZVOLA SERIJSKOG PRIJEMA I INT T0 ;** POCETAK GLAVNOG PROGRAMA ** GP: NOP

Page 21: Sla , index 9781 Negovan Stankovi ć, index 9793es.elfak.ni.ac.rs/Papers/generator talasnih oblika.pdf · pokazivac,tri 16 bit-na clock/counter,6 vektorske arhitekture prekida sa

21

SERTEST: JNB NAREDBA,GP CALL DECODE CLR NAREDBA ISPSER: JB NAREDBA,SERTEST JNB STARTF,GP JB PRES1,PROG1 JB PRES2,PROG2 JB PRES3,PROG3 JMP GP ;---- TALASNI OBLIK 1 ----- PROG1: INC R1 CJNE R1,#0,UPISIP1 JMP ISPSER UPISIP1: MOV A,R1 ANL A,#11100000B MOV P2,A JMP PROG1 ;---- TALASNI OBLIK 2 ----- PROG2: INC R1 CJNE R1,#0128,RASTP2 PADP2: DEC R1 CJNE R1,#0,PADAP2 JMP ISPSER PADAP2: MOV P2,R1 JMP PADP2 RASTP2: MOV P2,R1 JMP PROG2 ;---- TALASNI OBLIK 3 ----- PROG3: INC R1 CJNE R1,#0128,RAST1 RAVAN1: MOV P2,#0128 MOV R0,#0128 PAURAV1: NOP DJNZ R0,PAURAV1 JMP PORAST2 RAST1: MOV P2,R1

Page 22: Sla , index 9781 Negovan Stankovi ć, index 9793es.elfak.ni.ac.rs/Papers/generator talasnih oblika.pdf · pokazivac,tri 16 bit-na clock/counter,6 vektorske arhitekture prekida sa

22

JMP PROG3 PORAST2: INC R1 CJNE R1,#0,RAST2 JMP RAVAN2 RAST2: MOV P2,R1 JMP PORAST2 RAVAN2: MOV P2,#0255 MOV R0,#0128 PAURAV2: NOP DJNZ R0,PAURAV2 JMP ISPSER ;**** DEKODIRANJE NAREDBE **** DECODE: MOV A,ZNAK CJNE A,#'P',ERRKOM JMP OKKOM ERRKOM: CLR NAREDBA JMP IZDECO OKKOM: MOV A,KONTROL CJNE A,#'S',UKISK ;------------------------------ VID1: MOV A,CETVRT CJNE A,#'1',VID2 MOV PRESETS,#0 SETB PRES1 JMP IZDECO VID2: CJNE A,#'2',VID3 MOV PRESETS,#0 SETB PRES2 JMP IZDECO VID3: CJNE A,#'3',ERRKOM MOV PRESETS,#0 SETB PRES3 JMP IZDECO ;------------------------------- UKISK : MOV A,KONTROL CJNE A,#'W',IZDECO MOV A,CETVRT CJNE A,#'N',VIDIOF SETB STARTF

Page 23: Sla , index 9781 Negovan Stankovi ć, index 9793es.elfak.ni.ac.rs/Papers/generator talasnih oblika.pdf · pokazivac,tri 16 bit-na clock/counter,6 vektorske arhitekture prekida sa

23

JMP IZDECO VIDIOF: CJNE A,#'F',ERRKOM CLR STARTF MOV P2,#0 ;------------------------------- IZDECO RET ;************************************************ ;SERIAL INPUT INTERRUPT ROUTINE ;************************************************ RECEIVE: PUSH ACC MOV A,R0 PUSH ACC PUSH PSW ;SAVE ACC AND CURRENT BANK SELECT MOV PRIMA,SBUF ;GET SERIAL INTERUPT BYTE MOV A,SBUF CJNE A,#080,KLASIC ;"P" MOV BROSER,#0 KLASIC: MOV A,#060H CLR C ADDC A,BROSER MOV R0,A MOV A,PRIMA MOV @R0,A POVSER: INC BROSER MOV A,BROSER CJNE A,#06,PPI SETB NAREDBA MOV BROSER,#0 PPI: CLR RI POP PSW POP ACC MOV R0,A POP ACC RETI ;******** PREDAJA ********** TRANS: CLR TI CLR NOTSEND RETI END START

Page 24: Sla , index 9781 Negovan Stankovi ć, index 9793es.elfak.ni.ac.rs/Papers/generator talasnih oblika.pdf · pokazivac,tri 16 bit-na clock/counter,6 vektorske arhitekture prekida sa

24

Dobijanje talasnih oblika Talasni oblik 1: Najpre inkrementiramo R1.Nakon toga naredbom CJNE (Compare Jump If Not Equal) uporedjujemo sadrzaj R0 sa 0. Ukoliko nije 0 onde se ide na labelu UPISP1 gde se vrši generisanje prvog talasnog oblika. Posle svake periode vrši se ispitivanje o serijskom interaptu. Ukoliko nije dat zahtev za drugi talasni oblik nastavlja se generisanje prvog. Talasni oblik 2: Kod drugog talasnog oblika imamo dva labele PADP2 i RASTP2 koje nam generišu uzlazni i silazni deo drugog signala. Prvo vršimo inkrementiranje R1 do 128 dekadno, dokle nam signal ide uzlaznom putanjom, a zatim se vrši dekrementiranje R1 do 0 čime nam signal ide silaznom putanjom. Talasni oblik3: Treći signal se dobija inkrementiranjem R1 do 128, zatim određeni broj taktova signal zadržava stanje 128 nakon čega se opet vrši inkrementiranje R1 od 128 do 256 i na kraju periode opet zadržava novo stanje tj. 255. I kod ovog i kod prethodnog signala se na kraju svake periode vrši ispitivanje serijskog interapta. ;---- TALASNI OBLIK 1 ----- PROG1: INC R1 ; inkrementiranje R1 CJNE R1,#0,UPISIP1 ;uporedjivanje sadržaja R1 sa nulom i ako nije nula skače se na labelu UPISP1 JMP ISPSER ; ispitivanje serijskog interapta na kraju periode UPISIP1: MOV A,R1 ; generisanje prvog talasnog oblika ANL A,#11100000B MOV P2,A JMP PROG1 ;---- TALASNI OBLIK 2 ----- PROG2: INC R1 ;inkrementiranje R1 CJNE R1,#0128,RASTP2 ;uporedjivanje sadržaja R1 sa 128 dekadno i ako nije jednako skače se na RASTP2 PADP2: DEC R1 ;generisanje padajuće ivice drugog signala CJNE R1,#0,PADAP2 JMP ISPSER ;ispitivanje serijskog interapta na kraju periode PADAP2: MOV P2,R1 ;izbacivanje rezultata na izlaz JMP PADP2 RASTP2: MOV P2,R1 ;generisanje rastuće ivice i izbacivanje rezultata na izlaz JMP PROG2

Page 25: Sla , index 9781 Negovan Stankovi ć, index 9793es.elfak.ni.ac.rs/Papers/generator talasnih oblika.pdf · pokazivac,tri 16 bit-na clock/counter,6 vektorske arhitekture prekida sa

25

;---- TALASNI OBLIK 3 ----- PROG3: INC R1 ;inkrementiranje R1 CJNE R1,#0128,RAST1 ;uporedjivanje sadržaja R1 sa 128 dekadno i ako nije jednako skače se na RAST1 RAVAN1: MOV P2,#0128 ;prvi ravan deo signala MOV R0,#0128 PAURAV1: NOP DJNZ R0,PAURAV1 JMP PORAST2 RAST1: MOV P2,R1 JMP PROG3 PORAST2: INC R1 CJNE R1,#0,RAST2 JMP RAVAN2 RAST2: MOV P2,R1 JMP PORAST2 RAVAN2: MOV P2,#0255 ;drugi ravan deo signala MOV R0,#0128 PAURAV2: NOP DJNZ R0,PAURAV2 JMP ISPSER ; ispitivanje serijskog interapta na kraju periode

Page 26: Sla , index 9781 Negovan Stankovi ć, index 9793es.elfak.ni.ac.rs/Papers/generator talasnih oblika.pdf · pokazivac,tri 16 bit-na clock/counter,6 vektorske arhitekture prekida sa

26

HARDVER

Za hardversku realizaciju generatora talasnih oblika iskorišćena je PCB koju je projektovao student J. Jovanović. Šema prikazuje kako su povezani mikrokontroler AT89S8253, ispravljač napona od 220V AC 50Hz na 5V DC (trafo je smesten van PCB ploce), kolo max232 za spregu sa računarom preko RS232 porta. Šema po kojoj smo realizovali digitalno analognogni konvertora data je na sledećoj slici.

Digitalno analogni konvertor je povezan na port P2 atmelovog mikrokontrolera i ima ulogu da digitalni signal, promenljiv u vremenu, koji imamo na izlazu mikrokontrolera pretvori u analogni signal kojeg možemo posmatrati na osciloskopu. Da nebismo dobili jednosmerni nivo na izlazu konvertora operacioni pojačavači su realizovani sa simetričnim napajanjem.

Page 27: Sla , index 9781 Negovan Stankovi ć, index 9793es.elfak.ni.ac.rs/Papers/generator talasnih oblika.pdf · pokazivac,tri 16 bit-na clock/counter,6 vektorske arhitekture prekida sa

27

Blok šema elemenata smeštenih na PCB ploči

Page 28: Sla , index 9781 Negovan Stankovi ć, index 9793es.elfak.ni.ac.rs/Papers/generator talasnih oblika.pdf · pokazivac,tri 16 bit-na clock/counter,6 vektorske arhitekture prekida sa

28

Layout gornje strane PCB-a

Page 29: Sla , index 9781 Negovan Stankovi ć, index 9793es.elfak.ni.ac.rs/Papers/generator talasnih oblika.pdf · pokazivac,tri 16 bit-na clock/counter,6 vektorske arhitekture prekida sa

29

Layout donje strane PCB-a

Page 30: Sla , index 9781 Negovan Stankovi ć, index 9793es.elfak.ni.ac.rs/Papers/generator talasnih oblika.pdf · pokazivac,tri 16 bit-na clock/counter,6 vektorske arhitekture prekida sa

30

Realizovan hardver ima sledeći izgled.

Page 31: Sla , index 9781 Negovan Stankovi ć, index 9793es.elfak.ni.ac.rs/Papers/generator talasnih oblika.pdf · pokazivac,tri 16 bit-na clock/counter,6 vektorske arhitekture prekida sa

31

TESTIRANJE I UPIS HEX FAJLA U MIKROKONTROLER

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 atmelov softver koji se moze download-ovati sa njihovog sajta. Vrši se serijsko programiranje priključivanjem programatora na na pinove 5 i 6 porta P1 mikrokontrolera.

-Sledeci korak je izbor ATMEL-ovog mikrocontrolera,a kako smo mi koristili AT89S8253 biramo njega, što je prikazano na sledećoj slici:

Page 32: Sla , index 9781 Negovan Stankovi ć, index 9793es.elfak.ni.ac.rs/Papers/generator talasnih oblika.pdf · pokazivac,tri 16 bit-na clock/counter,6 vektorske arhitekture prekida sa

32

Posle izbora komponente u prozoru softvera se moze videti prazan buffer mikrocontrolera koji je prikazan na sledećoj slici:

Page 33: Sla , index 9781 Negovan Stankovi ć, index 9793es.elfak.ni.ac.rs/Papers/generator talasnih oblika.pdf · pokazivac,tri 16 bit-na clock/counter,6 vektorske arhitekture prekida sa

33

Page 34: Sla , index 9781 Negovan Stankovi ć, index 9793es.elfak.ni.ac.rs/Papers/generator talasnih oblika.pdf · pokazivac,tri 16 bit-na clock/counter,6 vektorske arhitekture prekida sa

34

Zatim vršimo učitavanje hex fajla na sledeći način

Page 35: Sla , index 9781 Negovan Stankovi ć, index 9793es.elfak.ni.ac.rs/Papers/generator talasnih oblika.pdf · pokazivac,tri 16 bit-na clock/counter,6 vektorske arhitekture prekida sa

35

Upis u mikrokontroler vršimo na sledeći način koji je prikazan na slici

Page 36: Sla , index 9781 Negovan Stankovi ć, index 9793es.elfak.ni.ac.rs/Papers/generator talasnih oblika.pdf · pokazivac,tri 16 bit-na clock/counter,6 vektorske arhitekture prekida sa

36

ZAKLJU ČAK Generator talasnih oblika je analiziran i razrađen. Jasno postavljene softverske i hardverske zadatke smo izvršili. Nakon učitavanja programa u mikrokontroler izvršeno je testiranje celokupnog sistema. Testiranje je prošlo uspešno tako da se može reći da je generator talasnih oblika uspešno realizovan. Moguća su dalja dorađivanja kao što je kreiranje drugih talasnih oblika, povećanje periode signala odnosno smanjenje frekvencije.Na osnovu ovoga mogu da se baziraju različite laboratorijske vežbe. Možemo napomenuti da na ovaj način izrađen generator talasnih oblika ograničen gornjom graničnom frekvencijom koja zavisi od broja instrukcija koji su upotrebljeni pri pisanju programa za odgovarajući signal. Jedna instrukcija može da traje jedan dva ili više ''mašinska ciklusa''. Jedan mašinski ciklus je minimalno trajanje vremena za koje jednostruke instrukcije mogu biti izvršene. Ciklus je realno 12 impulsa kristala. Dakle kao što smo rekli, ako se instrukcija izvršava za jedan mašinski ciklus, ona će iskoristiti 12 impulsa kristala. Pošto znamo da kristal pulsira 11 059 000 puta u sekundi i da jedan mašinski ciklus ima 12 impulsa, mi možemo da proračunamo koliko instrukcionih ciklusa mikrokontrolera može da izvrši u sekundi: 11059 000/12 = 921583 Ovo znači da mikrokontroler može da izvrši 921 583 jednotaktnih instrukcija u sekundi.Na primer, ako koristite isključivo instrukcije koje se izvršavaju u 2 takta, mikrokontroler će izvršavati 460 791 instrukciju u sekundi. Takodje mikrokontroler ima dve realno spore instrukcije koje zahtevaju 4 taktna intervala da bi se izvršila - ako se izvršavaju samo ove dve instrukcije proračunate performanse su oko 230 395 instrukcija u sekundi. Najbrže instrukcije zahtevaju jedan mašinski ciklus (12 impulsa kristala), većina drugih dva mašinska takta (24 impulsa kristala) i dve vrlo spore matematičke operacije zahtevaju četiri mašinska takta (48 impulsa kristala).Postoje i drugi načini programiranja mikrokontrolera, možemo povlačiti vrednosti signala iz tablice koja je ubačena u mikrokontroler i slično. Dakle ukoliko želimo veću frekvenciju signala trebamo program napisati sa što manje instrukcija.Ukoliko želimo veću frekvenciju signala onda je bolje realizovati generisanje talasnih oblika na drugačiji način pomoću posebnog generatora signala koji može biti kontrolisan mikrokontrolerom.

Page 37: Sla , index 9781 Negovan Stankovi ć, index 9793es.elfak.ni.ac.rs/Papers/generator talasnih oblika.pdf · pokazivac,tri 16 bit-na clock/counter,6 vektorske arhitekture prekida sa

37

PRIMER LABORATORIJSKE VEŽBE Pre početka bilo koje laboratorijske vežbe vezane za ovaj projekat studenti trebaju pažljivo proučiti sadržaj ovog projekta. Njihov rad može da se svodi na modifikaciju programa talasnih oblika, povećanje periode istih i testiranja celog sistema na način koji je objašnjen u tekstu projekta. Primer: Korišćenjem programa za generisanje talasnih oblika koji je objašnjen u projektu, izvršiti modifikaciju istog tako da mu se perioda signala povećava. Tako prepravljen program testirati i proveriti na oscilo skopu promenu periode. U zaključku smo naveli da frekvencija odnosno perioda signala direktno zavisi od broja instrukcija koje koristimo u programu. Dakle da bismo povećali periodu potrebno je da ubacimo neku instrukciju na određenom mestu i na taj način povećamo vreme izvršenja programa. Instrukcija koju ubacujemo je insrukcija NOP, vreme potrebno za izvršenje ove instrukcije je jedan mašinski ciklus tj. 12 takta kristala a to je 1,085 mikro sekunde. Modifikovan program za generisanje talasnih oblika signala koji su predstavljeni na početku projekta je sledeći: ;---- TALASNI OBLIK 1 ----- PROG1 INC R1 CJNE R1,#0,UPISIP1 JMP ISPSER UPISIP1 MOV A,R1 ANL A,#11100000B MOV P2,A NOP NOP JMP PROG1 ;---- TALASNI OBLIK 2 ----- PROG2 INC R1 CJNE R1,#0128,RASTP2 PADP2 DEC R1 CJNE R1,#0,PADAP2 JMP ISPSER PADAP2 MOV P2,R1

Page 38: Sla , index 9781 Negovan Stankovi ć, index 9793es.elfak.ni.ac.rs/Papers/generator talasnih oblika.pdf · pokazivac,tri 16 bit-na clock/counter,6 vektorske arhitekture prekida sa

38

NOP NOP JMP PADP2 RASTP2 MOV P2,R1 NOP NOP JMP PROG2 ;---- TALASNI OBLIK 3 ----- PROG3 INC R1 CJNE R1,#0128,RAST1 RAVAN1 MOV P2,#0128 NOP MOV R0,#0128 PAURAV1 NOP DJNZ R0,PAURAV1 JMP PORAST2 RAST1 MOV P2,R1 NOP JMP PROG3 PORAST2 INC R1 CJNE R1,#0,RAST2 JMP RAVAN2 RAST2 MOV P2,R1 NOP JMP PORAST2 RAVAN2 MOV P2,#0255 NOP MOV R0,#0128 PAURAV2 NOP DJNZ R0,PAURAV2 JMP ISPSER Ovako modifikovan program kompajliramo i dobijamo hex fajl, koji upisujemo u mikrokontroler na način objašnjen pod naslovom ’Testiranje i upisivanje hex fajla u mikrokontroler’.Kada sve to izvršimo onda možemo promenjeni signal posmatrati na osciloskopu.