P. 1
Tehicka_dokumentacija

Tehicka_dokumentacija

|Views: 108|Likes:
Published by bane123

More info:

Published by: bane123 on Sep 07, 2011
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

05/25/2012

pdf

text

original

Elektronski fakultet u Nisu Mikroprocesorski sistemi

RAZVOJNI SISTEM ZA MIKROKONTROLER PIC 16F877A

Mentor: Prof.Dr Mile Stojcev

Studenti: Branislav Dimirijevic, Slobodan Aleksic, Ivan Antic

Sadrzaj:
UVOD-----------------------------------------------------------------------------------1.MIKROKONTROLERI------------------------------------------------------------1.1 Mikroprocesori u odnosu na mikrokontrolere-------------------------------1.2 Mikroprocesori------------------------------------------------------------------1.3 Mikrokontroleri ----------------------------------------------------------------1.4 Razlika izmedju mikroprocesora i mikrokontrolera------------------------1.5 Terminologija-------------------------------------------------------------------1.6 Mikroracunar--------------------------------------------------------------------1.7 Ostala kola za podrsku rada sistema----------------------------------------- 1.8 Mikrokontroler PIC16F877A--------------------------------------------------1.9 Osnovne karakteristike mikrokontrolera PIC16F877A--------------------1.10 Kratak opis mikrokontrolera PIC16F877A---------------------------------1.11 Raspored nozica ---------------------------------------------------------- ----1.12 Generator takta (Oscilator)----------------------------------------------- ---1.13 Takt/Instrukcijski ciklus------------------------------------------------------1.14 Reset-----------------------------------------------------------------------------1.15 Watchdog timer----------------------------------------------------------------1.16 Prekidi---------------------------------------------------------------------------1.17 U/I portovi----------------------------------------------------------------------1.18 A/D konverzija-----------------------------------------------------------------1.19 Strujna,naponska i temperaturna ogranicenja------------------------------1.20 Organizacija memorije--------------------------------------------------------1.21 Tajmeri -------------------------------------------------------------------------1.22 CCP moduli --------------------------------------------------------------------1.23 Ostale periferne jedinice------------------------------------------------------1.24 Set instrukcija mikrokontrolera PIC16F877A-----------------------------2.HARDVERSKA STRUKTURA RAZVOJNOG SISTEMA------------------2.1 Programator---------------------------------------------------------------------2.2 Modifikovani Tait programator-----------------------------------------------2.3 Mikrokontrolerski sistem-------------------------------------------------------2.4 Tasteri-----------------------------------------------------------------------------2.5 Led--------------------------------------------------------------------------------2.6 Max232---------------------------------------------------------------------------2.7 Deo za ispravljanje i stabilizaciju napona------------------------------------2.8 Deo za analogno-digitalnu konverziju----------------------------------------2.9 Deo za povezivanje LCD-a----------------------------------------------------2.10 Povezivanje kola za reset i oscilatora---------------------------------------2.11 Fizicki izgled stampanih plocica---------------------------------------------2.12 Tabelarni prikaz komponenata sa vrednostima koriscenih za razvojni sistem---------------------------------------------------------------------------------3.PRATECI SOFTVER ZA PC I DEMO PROGRAMI-------------------------4 5 5 5 7 8 8 9 10 10 11 11 13 14 16 17 22 22 24 31 32 33 37 37 38 39 60 60 63 63 64 65 67 67 68 68 73 73 75 78

2

3.1 Instalacija softvera--------------------------------------------------------------3.2 Kreiranje aplikacija na programskom jeziku C za mikrokontroler PIC16F877A-------------------------------------------------------------------------3.3 Tipovi podataka-----------------------------------------------------------------3.4 Prekidi----------------------------------------------------------------------------3.5 Primena programskog jezika C (primeri) -----------------------------------3.6 Upisivanje parametara u DATA EEPROM----------------------------------3.7 Opcije za optimizaciju kôda pri kompajliranju -----------------------------3.8 Program za ukljucivanje i iskljucivanje LED-------------------------------3.9 Program koji upravlja radom LCD-a-----------------------------------------3.10 Program za komunikaciju razvojnog sistema sa racunarom-------------ZAKLJUCAK-------------------------------------------------------------------------DODATAK-----------------------------------------------------------------------------

78 105 106 107 108 110 111 111 116 120 125 126

3

pre svega. stampanja plocica. Tu cemo se potruditi da kroz primere objasnimo kako se koristiti razvojni sistem i kako funkcionise sam mikrokontroler. Program napravljen na racunaru se uz pomoc adekvatnog softvera (mi smo koristili IC-Prog) i 25-to pinskog kabla prenosi u nas razvojni sistem. LCD-a na kome se ispisuje tekst koji. koji softver se koristi u te svrhe. Pritiskom svakog tastera izvrsava se razlicita sekvenca programa koja se nalazi u mikokontroleru. To nas je podstaklo da odaberemo zadatak koji zahteva realizaciju razvojnog sistema sa LED indikatorima. LCD-om i komunikaciju s racunarom. testiranja i usavrsavanja citavog sistema. U prvom poglavlju reci cemo nesto vise o samom mikrokontroleru PIC 16F877A.a ostali su tasteri za odabir režima rada. ne zahteva se slozeni eksterni hardver da bi se realizovao mikroračunarski sistem. centralana komponenta naseg sistema je mikrokontroler PIC16F877A. a u trecem delu cemo detaljno opisati kako se kreira program na racunaru koji treba loadovati (ucitati) u PIC. Ovaj mikrokontroler je izradjen u CMOS tehnologiji sa ugradjenom FLASH i EEPROM memorijom za memorisanje programa i podataka. za komunikaciju sa racunarom. 4 . U ovom trenutku smo svesni da je resenje moglo da bude efikasnije. lemljenja komponenata na ploce. kako se do njega dolazi. Zahvaljuci cinjenici da mikrokontroler PIC16F877A firme Microchip pretstavlja integraciju centralne procesorke jedinice (CPU). korisnik prethodno definise u programu i komunikacija sa racunarom gde. preko projektovanja plocica u programskom paketu “Protel” . mozemo posmatrati brojac na monitoru racunara i resetovati ga sa Reset tastera na nasem sistemu. na primer. kako se on instalira i kako ga treba podesiti na racunaru. vezan devetopinskim kablom.takodje. U daljem tekstu cemo se truditi da detaljnije opisemo svaki deo sistema i da pokazemo kako citav sistem radi. male dimenzije i nisku cenu. Ova arhitektura karakterise se manjim skupom instrukcija koje se brze izvsavaju od instrukcija kod CISC arhitekture. ali permanentnim ispitivanjem smo se uverili da i ovo nase resenje daje dobre rezultate. Razvojni sistem je. Po zavrsetku programiranja na monitoru racunara dobijamo informaciju da je zahtevano ucitavanje programa u mikrokontroler zavrseno i tada mozemo poceti sa radom. Komunikacija korisnika sa ovim sistemom omogucena je sa 7 tastera od kojih je jedan Reset taster. Cilj nam je bio da od svih ideja odaberemo onu pravu koja podrazumeva. Naravno.trud i pozrtvovanje pocev od idejnog resenja zadatka. malih je dimenzija i mala je potrosnja energije. memorije i periferija. Drugi deo ce sadrzati hardverski opis citavog sistema. Korisnik od sistema moze da dobija informacije o njegovom radu na tri nacina: preko LED indikatora koji se pali onako kako je to korisnik unapred programski definisao u odredjenom modu rada. PIC16F877A ima tipicnu RISC arhtekturu. Tu ga prihvata programator koji puni mikrokontrler zahtevanim programom.UVOD Sistem oplemenjen mikrokontrolerom u potpunosti zamenjuje coveka. Realizacija ovakvog sistema zahtevala je veliku upornost. jedostavnost.

logika za prihvatanje prekida. A/D i D/A konvertore i dr.2 Mikroprocesori Na slici 1.2 prikazan je blok dijagram mikroprocesora.1. CPU cine sledeci blokovi: ALU.tajmeri. odredjeni broj radnih registara.1 Mikroprocesori u odnosu na mikrokontrolere Da bi ukazali na to kakva razlika postoji izmedju mikroprocesora i mikrokontrolera analiziracemo sliku 1. Sl.1 Detaljni blok dijagram mikroracunarskog sistema 1. 5 . sadrzi CPU.1.). Mikrokontroleri 1. SP.1 koja predstavlja jedan detaljan blok dijagram mikroracunarskog sistema. RAM i ROM memoriju i ostale ulazno-izlazno orijentisane gradivne blokove (paralelni i serijski interfejsi . na jedinstvenom cipu. Dok je mikroprocesor (CPU) na jedinstvenom cipu sam. PC. kola za taktovanje i sinhronizaciju i kola koja se koriste za prihvatanje zahteva za prekid. mikrokontroler.

LED i dr. TFT. Kada se u sistem instaliraju i uredjaji za masovno memorisanje (hard disk. Pored ulazno-izlaznih uredjaja specijalne namene. mis i CRT displej tada se taj ''mali racunar'' moze koristiti za razlicite aplikacije opste namene. Osnovna namena CPU-a je da pribavlja podatke. Programi koje koristi 6 . A/D i D/A konvertori i drugo. kao i brojaci/tajmeri ciji je zadatak da oslobode CPU od obavljanja U/I aktivnosti.).1.Sl. DMA kontroleri. kakvi su paralelni i serijski portovi za podatke. RAM memorijske dekodere.2 Blok dijagram mikroprocesora(CPU-a) Da bi se kompletirao mikroracunarski sistem pored mikroprocesora potrebno je dodati ROM. CD drajver). odredjeni broj ulaznoizlaznih uredjaja. kao i tastatura. oscilator. cesto se javlja i potreba da se ugrade i kontroleri prekida. obavlja izracunavanja nad podacima i memorise rezultate izracunavanja na disku kao i da za potrbe korisnika prikaze te rezultate na displeju (CRT.

mikroprocesor memorisani su na disku odakle se citaju i smestaju u RAM. Mikrokontroler je u sustini pravi ''mali racunar'' na cipu. generatore takta i dr. Kao i mikroprocesor. Mikrokontroler u toku svog rada koristi fiksni program koji je smesten u ROM-u i koji se ne menja u toku zivotnog veka sistema. ali takodje i RAM. paralelne i seriske U/I portove.1. i mikrokontroler je uredjaj opste namene. i upravlja svojim okruzenjem na osnovu rezultata izracunavanja. ROM.). 1. PC. koji sadrzi sve gradivne blokove CPU-a (ALU. najcesce malog obima.3 Mikrokontroleri Blok dijagram mikrokontrolera prikazan je na slici 1. se obicno smesta i u ROM-u.3 Blok dijagram mikrokontrolera 7 .3. koji pribavlja podatke. SP. Sl. obavlja ogranicenu obradu nad tim podacima. registre i dr. Deo programa.

pre svega. Mikroprocesori su projektovani za brzi prenos podataka iz programa sa spoljno adresiranih lokacija u cip. Postoje razni programatori za PIC mikrokontrolere. mikroprocesori koriste jedan ili dva tipa instrukcija.5 Terminologija Kako bi opis mikrokontrolera bio jasni dacemo. kao sto su recimo Atmel mikrokontroleri ili serijski EEPROM. Programator – uredjaj koji omogucava da program bude upisan u memoriju mikrokontlolera.ili dvo-bajtnih instrukcija koje se koriste za pribavljanje programa i podataka iz interne memorije. dok se kod mikrokontrolera brzi prenos bitova obavlja u okviru cipa. Nabrojimo samo neke koji se najcesce koriste: AllPIC programator. Veliki broj ulazno-izlaznih pinova mikrokontrolera se moze koristiti za vise namena sto se softverski definise. objasnjenja za neke osnovne termine koje cemo koristiti u daljem tekstu: U/I pin – spoljni pin prema spoljasnjem svetu koji se moze konfigurisati kao ulazni. Mikroprocesori su najcesce CISC tipa. Ovi programatori u stanju su da programiraju pored PIC mikrokontrolera i dosta drugih tipova kola slicnih funkcionalnosti (sto zavisi uglavnom od tipa programatora). Ovaj softver kreira onaj koji odredjuje kako ce mikrokontroler raditi. U nasem projektu smo koristili TAIT programator i softver za njega Icprog. Za kopiranje podataka iz spoljne memorije u CPU koriste veci broj op-kôdova. Paskal. Basic. PONY programator. dok operativnost mikroprocesora bez spoljne memorije i U/I podsistema nije moguca. U/I je neophodan u vecini slucajeva da omoguci mikrokontroleru da komunicira. TAIT programator. pri cemu je arihitektura i skup instrukcija projektovan za manipulisanje podacima obima bajt ili bit.Mikrokontroler koristi ogranicen skup jedno. Softver se moze kreirati u raznim jezicima kao sto su: C. upravlja ili cita informacije. Mikrokontroler moze da funkcionise kao racunar bez dodataka spoljnih gradivnih blokova (memorije i U/I uredjaja). Asembler. Mikrokontroler komunicira sa spoljnim svetom (pribavlja i predaje podatke) preko svojih pinova. 3. dok mikrokontroleri jedan ili dva. Bez softvera mikrokontroler nije upotrebljiv. Za manipulisanje sa podacima tipa bit.4 Razlike izmedju mikroprocesora i mikrokontrolera Razlike su brojne ali one koje su najvaznije su sledece: 1. 1. Nesto vise o ovom programatoru recicemo kasnije. odnosno izlazni. Softver – informacije koje su mokrokontroleru potrebne za rad. dok je kod mikrokontrolera taj broj veci. 1. 2. 8 . 4.

U/I podsistem i memoriski podsistem.. Na slici 1.1. Objektna datoteka – ovo je datoteka koju generise asembler / kompajler. Ekstenzija ove datoteke je .Izvorna datoteka – program napisan u asemblerskom jeziku koji mi razumemo.HEX. Bagovi – greske koje mi kreiramo nenemerno u toku pisaja programa. Asembler / kompajler – softverki paket koji prevodi izvornu datoteku u objektnu. Provera gresaka je vec ugradjena i ona je veoma korisna mogućst u trazenju gresaka u programu posto se greske markiraju za vreme procesa asembliranja.OBJ ili .6 Mikroracunar Mikroracunar je sastavljen od tri osnovna dela: Procesor (CPU). tada se on naziva mikroprocesor. od osnovnog pa do jako slozenog. MPASM je najnovija verzija asemblera firme Microchip koji podrzava celu PIC familiju. i ograniceni iznos memorije i ulaza –izlaza tada se to integrisano kolo naziva mikrokontroler. Vecinu ovih gresaka ce pronaci kompajler. 1. Ovde spadaju greske od jednostavnih u kucanju do pogresnog koriscenja sintakse jezika. Mi cemo u nasem projeku i za nas programator koristiti datoteke sa ekstenzijom .4 prikazan je jedan tipican mikroracunarski sistem. Kada na jedinstvenom cipu postoji mikroprocesor. Sl. Ako je procesor realizovan na jedninstvenom cipu. Izvorna datoteka se mora prvo obraditi (iskompajlirati) kako bi je mikrokontroler razumeo.HEX zavisno od direktive u asembleru.4 Tipican mikroracunarski sistem 9 . Svaki deo moze varirati u kompleksnosti.

Jedinica za napajanje moze biti izvedena kao linearna (konvertor je tipa AC-DC). Memorija se koristiti za cuvanje programa i podataka. 1.8 Mikrokontroler PIC16F877A Kao sto je u uvodu naglaseno centralna komponenta naseg sistema je mikrokontoler PIC16F877A firme Microchip. Oscilator moze biti napravljen od diskretnih elemenata ili kao gotov modul.jedan do dva UART-a. Sistem za napajanje.).LCD i dr. 8 ili16-bitna procesorska jedinica. do tri tajmera.Ukazimo sada u kratkim crtama na strukturu i funkcije koje obavljaju osnovni gradivni blokovi mikroracunarskog sistema: Centralna procesorska jedinica (CPU) – srce sistema i moze biti realizovana kao 4. EPROM. Preko ulazno-izlaznog podsistema mikrokontroler komunicira sa spoljnim svetom. Memorija – moze biti RAM. analogne i specijalne funkcije. • memorijama razlicitog tipa(EEPROM. Njegova uloga je da sinhrono pobudjuje sva kola u okviru mikroracunarskog sistema. memoriju.RAM. Ulaz/Izlaz (U/I) – cine ga blokovi koji mogu da obavljaju digitalne. Pas-cuvar (watchdog timer).FLASH. oscilator. Mikrokontroleri imaju integrisane sve gore pobrojane gradivne blokove: CPU.serijski portovi. kao prekidacki regulator tipa DC-DC konvertor( konverzije tipa AC-DC-DC) ili neka kombinacija.ROM) 10 . integrisni su unutar samog cipa. jedan ADC). watch-dog timer i U/I. ROM. U ovom poglavlju cemo se truditi da detaljnije opisemo ovo integrisano kolo. 1. I pored prednosti koje se nude integracijom postoji jedan ozbiljan nedostatak koji se ogleda u malom iznosu implementirane memorije (reda kB) i relativno skromnim mogucnostima ulazno-izlaznog podsistema (dva do tri paralelna porta. EEPROM i FLASH tipa ili bilo koja njihova kombinacija.koristi se kod sistema za rad u realnom vremenu da obavesti procesor o tome da je istekao krajnji rok izvrsenja zadatka ili da aktivira procesor iz stanja HALT u slucaju ako se rad procesora zaustavi kada se procita neki pogresan op-kod ili dr.7 Ostala kola za podrsku rada sistema Oscilator –je taktni generator mikroracunar. PIC familija mikrokontrolera podrzava rad sa: • velikim brojem U/I uredjaja(paralelni portovi.moze biti izveden kao ispravljacka jedinica. autonomna bateriska ili kombinacija.

ako koristimo oscilator 11 .6 mA pri naponu od 3V i radnoj frekvenciji od 4 MHz 2. Obim podataka je 8-bitni.velika brzina rada Radni napon od 2V do 5. Sve insrukcije su istog obima (osim instrukcija grananja) i izvsavaju se za cetiri taktna intervala.USART Paralelna komunikacija: PSP Power-on Reset. kada je fref = 20 MHz Op-kôd obima14bita Harverski magacin sa osam nivoa Tri nacina adresiranja: -direktno -indirektno -relativno Programska memorija kapaciteta 8 kx14-bitnih reci realizovane u FLASH tehnologiji Memorije za podatke tipa RAM kapaciteta 368x8 bita Memorije za podatke EEPROM tipa kapaciteta 256x8 bita Prekidi ( do 14 izvora prekida) U/I portovi: A. <0.D. Moguce je protocno izvrsenje (pipelining).B.E Tri tajmera: -Timer0: 8-bitni tajmer/brojac dogadjaja -Timer1: 16-bit tajmer/brojac dogadjaja -Timer2: 8-bit tajmer/brojac dogadjaja 10-to bitni 8-kanalni Analogno-Digitalni (A/D) konvertor Seriska komunikacija: MSSP.reset pri ukljucenju napajanja(POR) Power-up timer-unosenje kasnjenja nakon ukljucenja napajanja (PWRT) Oscillator Start-up Timer-unosenje kasnjenja nakon stabilizovanja radne frekvencije oscilatora(OST) Sleep -rezim rada za stednju energije Watchdog timer sa sopstvenim integrisanim RC oscilatorom za nezavisni rad Izbor tipa oscilatora Mala potrosnja.10 Kratak opis mikrokontrolera PIC16F877A Kao sto smo vec naglasili mikrokontroler PIC16F877A poseduje tipcnu RISC arhitekturu.9 Osnovne karakteristike mikrokontrolera PIC16F877A: • • • • • • • • • • • • • • • • • • • • • • • • • Visoko performansni RISC CPU 35 instrukcija obima jedne reci Radna frekvencija .5V Mala potrosnja energije: 1. dok je programski kôd 14-bitni. <1µA u standby nacinu rada 1.1.C.fref = DC-20 MHz Trajanje taktnog intervala tcpu = 200 ns. Dakle. 20µA pri naponu od 3V i radnom taktu od 32kHz 3. Arhitektura poseduje odvojene magistrale za podatke i programski kôd.

5) mogu se uociti sledeci gradivni blokovi: • Flash programska memorija – 8 kiloreci obima 14 bita • RAM (File Registers) – 368 bajtova • Aritmetičko-logička jedinica (ALU) • Akumulator (Working Register) • Hardverski magacin (Stack) organizivan u 8 nivoa • EEPROM memorija podataka obima 256 bajtova • Razne periferne jedinice (portovi.1. tajmeri.5 Blok dijagram mikrokontrolera PIC16F877A 12 .npr. od 20 MHz dobijamo da ciklus instrukcuije traje 200 ns.) Sl. Sa blok dijagrama (slika 1. USART.... A/D konvertor.

1. One su grupisane u pet portova (PORTA-PORTE) i svaki od njih mozemo konfigurisati kao ulazni ili izlazni. serijske komunikacije). Nozice OSC1 i OSC2 (pinovi 13 i 14) sluze za priklucivanje oscilatorskih komponeti (RC-kolo ili kvarc). Osim opste namene vecina pinova ima i specificnu namenu koju dobija u slucaju koriscenja nekih specijalnih periferija mikrokontrolera (brojaca. Standardno se koristi kao Reset. Na slici 1. Pin 1 (MCLR/VPP) ima dvostruku ulogu.6 prikazan je raspored nozica kod 40-to pinskog DIP pakovanja: Sl. ADC. 13 .1. Ostalih 33 pina prestavljaju U/I linije.11 Raspored nozica Jezgro mikrokontrolera PIC16F887A pakuje se u 40-pinsko DIP pakovanje ili u 44-pinska kucista QFP i PLCC tipa.6 Raspored nozica mikrokontrolera PIC16F877A • • • • Napajanje od +5V se dovodi na pinove VDD (11 i 32) a masa na pinove VSS (12 i 31). a u procesu programiranja kao pin za dovodjenje visokog napona (13V).

Kod vremenski kriticnih aplikacija treba ugradjivati kvarcni oscilator ili keramicki rezonator.Ova varijanta oscilatora moze se koristiti u aplikacijama gde se precizna procena vremenskih intervala ne zahteva. Van ovog opsega rad oscilatora postaje nestabilan i osetljiv na spoljne uticaje. Na OSC2/CLKOUT generise se taktni impuls cija je perioda cetiri puta veca od periode oscilatora. Najednostavnija varijanta je RC oscilator(slika 1.7).kao i radne temperature.8 Nacin povezivanja XT oscilatora Preporuka proizvodjaca za vrednosti C1 i C2 kod nekih konfiguracija je: 14 . Rext treba da je u granicama od 5k do 100k. treba da su jednaki. Vrednosti kondenzatora C1 i C2 (slika 1.1. vrednosti Rext i Cext .1.7 Nacin povezivanja RC oscilatora Frekfencja oscilovanja zavisi od napona napajanja. Sl. Sl. Cext se moze i izostaviti.1. ali zbog stabilnosti se preporucuje 20pF.8).12 Generator takta (Oscilator) Moguce su cetri varijante u konfiguraciji oscilatora: LP Low Power Crystal XT Crystal / Resonator HS High Speed Crystal / Resonator RC Resistor/Capacitor Kontroler moze da radi i na 32 kHz i tada ima jako malu potrosnju.

9. Bice prikazano kako se spaja kristalni oscilator sa mikrokontrolerom (slika 1.Nacin povezivanja spoljnjeg oscilatora Najcesce se koristi spoljni kristalni oscilator (XT) radne frekvencije 4MHz.0 MHz 4.11).10) i kako izgleda oblik signala generisan iz oscilatora u trenutku ukljucenja (slika 1.Tabela 1.0 MHz 8.0 MHz Tabela 1.1 LP 32 kHz 200 kHz Tabela 1.1.3 4.0 MHz 10.2 100 kHz 455 kHz 2. Oscilatoru treba neko vreme ΔT da se stabilizira na potrebnu frekvenciju i amplitudu 15 .9: Sl.0MHz 68-100pF 15-33pF XT 100-150pF 47-100pF 15-33pF 15-33 HS 15-33pF 15-33pF 15-33pF Rezonator Rezonator Kristal Kristal Kristal Rezonator Rezonator Rezonator Kristal Kristal Kristal Kristal Kristal Moguce je i da se oscilacije dovode iz nekog spoljnjeg izvora kao sto je prikazano na slici 1.

Sl.13 Takt/instrukciski ciklus Takt koji se dovodi na nozice oscilatora OSC1 u mikrokontroleru se deli na cetiri vremenski nepreklapajuca taktna signala nazvana Q1.Vremenski dijagram 16 .10 Spajanje kristalnog oscilatora oscilatora Sl. U toku taktnog impulsa Q1 instrukcijskog ciklusa TYC2. U toku intervala Q2 dekodira se instrukcija pribavljena u TCY1. U cetvrtom taktu Q4 instrukciskog ciklusa TCY2 se.1. Skup ovih signala cine jedan instrukciski ciklus(slika 1. U zavisnosti od trenutka generisanja u okviru ciklusa instrukcija taktni signali Q1-Q4 se koriste za sledece namene: • Q1-pribavljanje instrukcije iz programske memorije • Q2-dekodiranje naredbe iz prethodnog instrukciskog ciklusa • Q3-izvrsenje naredbe iz prethodna dva instrukciska ciklusa • Q4-prenos op-kôda naredbe pozvane u Q1 u instrukcijski registar.Sl.11 Oblik signala pri ukljucenju 1. prebacuje se u instrukciski registar.12 Vremenski dijagram i protocnost kod izvrsavanja instrukcije a). a u toku Q3 se izvrsava instrukcija pribavljena u TCY0. stanje programskog brojaca (PC) se uvecava za 1 i pribavlja naredna instrukciju iz programske memorije.Q3 i Q4.1. Uzmimo za primer instrukciski ciklus TCY2 (slika 1. instrukcija pribavljena u toku Q1.1.12a).Q2.12a).

14 Reset Reset sluzi da bi sve registre mikrokontrolera doveli u pocetni polozaj. i izvrsava se instrukcija sa labele 2. U toku TCY4 pribavlja se instrukcija sa labele 5 tipa Instruction @ address SUB_1 (prva naredba potprograma). U toku TCY0 pribavlja se instrukcija sa labele 1 tipa MOVLW 55h. ona treba da pretstavlja neku operaciju tipa NOP (da ne menja statusne markere procesora kao i stanja procesora).ili smo ga tek ukljucili. Nakon izvrsenja instrukcije CALL SUB_1 vrednost programskog brojaca se postavlja na adresu insrukcije koja se nalazi na labeli 5.12 b) Protocnost kod izvrsenja sekvence instrukcije Na slici 1. U toku TCY1 izvrsava se instrukcija sa labele 1 i pribavlja instrukcija sa labele 2 tipa MOVWF PORTB. porebno ju je preko otpornika povezati na pol napajanja Vdd (slika 1.12b postoje dva stepena u protocnoj obradi.13) 17 . U toku TCY2 pribavlja se instrukcija sa labele 3 koja je tipa CALL SUB_1 i pretstavlja poziv potprograma 1. a izvrsava instrukcija na labeli 4 koja je sa stanovista procesora i programa operacija tipa NOP. Prvi se odnosi na pribvljanje. efekat izvrsenja instrukcije sa labele 4 ne treba da bude vidljiv. Neka je protocni sistem inicijalno prazan. U toku TCY3 pribavlja se instrukcija sa labele 4 tipa BSF PORTA. Kao sto se vidi sa slika 1. u principu.Sl 1. Ako se mikrokontroler “zakoci” .12b prikazan je protocni nacin izvrsenja sekvence od 5 instrukcija. a drugi na izvrsenje. BIT3 i izvrsava insrukcija sa labele 3.tj. 1. U TCY5 pribavlja se druga naredba potprograma i izvrsava prava. Da bi sprecili slucajno dovodjenje “0” na MCLR nozicu. treba ga resetovati. Napomenimo da je instrukcija sa labele 3 tipa bezuslovno grananje tako da.

7 V). 1.1. Da bi se POR iskoristio dovoljno je MCLR nozicu prikljuciti na Vdd direktno ili preko otpornika (sl.14.10). Povezivanje kola za reset Postoji vise vrste reseta kod PIC16F877A mikrokontrolera: • Power-on reset (POR) • MCLR Reset pri normalnom radu • MCLR Reset prilikom SLEEP rezima rada • WDT Reset pri normalnom radu • WDT Wake-up (budjenje iz SLEEP rezima rada) • Brown-out Reset (BOR) Power-on reset (POR) impuls se generise u samom kolu kada se detektuje porast napona napajanja (oko 1.14 Spoljasnje kolo za reset 18 . Ukoliko je porast napona napajnja spor neophodno je na MCLR postaviti spoljnje kolo za reset.13.Sl.1. Sl.2 – 1. Sema kola za POR reset je prikazana na slici 1.

Tajmeru PWRT se dozvoljava rad setovanjem PWRTE bita koji pripada konfiguracionoj reci u fazi programiranja cipa.sto je prikazano na slici 1.15. Kolo za BROWN-OUT reset Varijanta 2 Uslov da tranzistor iskljuci je: Vdd ∗ R1 < 0 .1. Oscilator Start-up Timer (OST) obezbedjuje kasnjenje od 1024 taktnih intervala nakon isteka kvazistabilne periode PWRT-a (vidi tabelu 1.7) V Vz – napon na Zener diodi.1. Ovo obezbedjuje da 19 .7 V R2 + R1 Power-up Timer (PWRT) generise impuls fiksne sirine (nominalno 72 msec) od pojave impulsa POR-a.Kolo za BROWN-OUT reset Varijanta 1 Kolo ce generisati Reset impuls kada napon bude ispod (Vz + 0.15.4). Sl. Sl.Interno POR kolo nece generisati Reset signal kad napon napajanja padne ispod minimuma. Za to vreme ce kontroler biti je u Reset stanju. Za ovaj vremenski period se obezbedjuje da napon napajanja dostigne nominalnu vrednost.16. Za situacije kada je moguca pojava BROWN-OUT-a (privremeni pad napona ispod Vmin) prebno je napraviti spoljnje Brown-out reset kolo. PWRT se taktuje internim RC oscilator.

5 i 1. LP i HS rezima rada i to pri: • POR. Stanje nekih registara ostaje nedifinisano.5: Postavljanje registara nakon reseta Program Counter Power-on reset (POR) 000h MCLR reset pri 000h normalnom radu MCLR reset prilikom 000h SLEEP rezima rada WDT Reset pri 000h normalnom radu WDT Wake-up (budjenje iz SLEEP PC+1 rezima rada) Interapt 004h STATUS reg. Drugi bit (BOR)kada je setovan ukazuje da je aktivan Brown-out stanja (nepropisana naponska stajna u napajanju mikrokontrolera). Mikrokontroler PIC16F877A ima implementiran dvo-bitni statusni registar nazvan PCON (Power Control Register).6). Tabela 1. HS. a ostali se postavljaju u unapred definisana stanja (vidi Tabele 1. 0001 1xxx 000u uuuu 0001 0uuu 0000 1uuu uuu0 0uuu uuu1 0uuu 20 . Tabela 1. OST se aktivira samo kod XT. neki zadrzavaju svoje stanje.kristalni oscilator ili rezonator startuju stabilnom frekvencijom. LP 72 ms + 1024 1024 Tosc 1024 Tosc Tosc RC 72 ms - Stanja na kojima se postavljaju interni registri CPU-a nakon Reseta zavisi od vrste Reseta i rezima rada u kojima se nalazi procesor (Sleep i normalni). Prvi bit nazvan POR setuje se kada se aktivira Power-on-Reset a resetuje se kada je se aktivira neki drugi Reset.4 Power-up Konfiguracija PWRT omogucen PWRT Budjenje iz oscilatora onemogucen SLEEP rezima rada XT. zbog kojeg se takodje može aktivirati Reset. i • budjenju iz SLEEP rezima rada.

6 MCLR reset pri: -normalnom radu -SLEEP mod WDT reset pri normalnom radu ---.------0 0000 0000 000u Budjenje iz SLEEP -interapt -WDT time out ---.------0 0000 0000 000x Legenda: x – Nepoznato stanje u – Nepromenjeno stanje q – Stanje zavisi od uslova .---xxxx xxxx 0000 0000 0001 1xxx xxxx xxxx ---x xxxx xxxx xxxx xxxx xxxx xxxx xxxx ---0 0000 0000 000x ---..------u uuuu uuuu uuuu Registar Power-on reset 00h 01h 02h 03h 04h 05h 06h 08h 09h 0Ah 0Bh 80h 81h 82h 83h 84h 85h 86h 88h 89h 8Ah 8Bh INDF TMR0 PCL STATUS FSR PORTA PORTB EEDATA EEADR PCLATH INTCON INDF OPTION PCL STATUS FSR TRISA TRISB EECON1 EECON2 PCLATH INTCON ---.---uuuu uuuu 0000 0000 000q quuu uuuu uuuu ---u uuuu uuuu uuuu uuuu uuuu uuuu uuuu ---0 0000 0000 000u ---.---uuuu uuuu PC+1 uuuq uuuu uuuu uuuu ---u uuuu uuuu uuuu ---0 uuuu ---.---1111 1111 0000 0000 000q quuu uuuu uuuu ---1 1111 1111 1111 ---0 q000 ---.---1111 1111 0000 0000 0001 1xxx xxxx xxxx ---1 1111 1111 1111 ---0 x000 ---.Tabela 1.---uuuu uuuu PC+1 uuuq quuu uuuu uuuu ---u uuuu uuuu uuuu uuuu uuuu uuuu uuuu ---u uuuu uuuu uuuu ---.Ne postoji fizicki cita se kao 0 21 .

3 s. Iskljucivanje WDT-a se vrsi resetovanjem WDTE bita u konfiguracionoj reci.15 Watchdog timer Watchdog timer (WDT) taktuje se nezavisanim RC oscilatorom koji radi cak i kad je zaustavljen rad glavnog oscilatora. povezan na OSC1/CLKIN i OSC2/CLKOUT pinove. 1. izaziva RESET kontrolera. tako se vreme moze produziti do 2.1. prilikom normalnog rada. Tada se programskim 22 .17: Sl.16 Prekidi Mikrokontroler PIC16F877A podrzava tehniku rada sa prekidima (interrupts). Prekoracenje intervala brojanja WDT-a. u SLEEP rezimu rada. TO’ bit u STATUS registru ce biti 0 nakon isteka WDT. a drugi su eksterni. Ako je kontroler bio u SLEEP rezimu rada prekoracenje tajmera ce probuditi kontroler i program ce nastaviti sa normalnim radom. Nominalno vreme WDT-a je 18 ms bez uptrebe preskalera.Struktura Reset logike za PIC 16F877A data je na slici 1. Svaki prekid nema sopstveni vektor-broj.17 Blok dijagram Reseta 1. Ovo vreme moze da varira od kola do kola zbog temperature i slicno. Postoji ukupno 14 izvora pekida. Instrukcije CLRWDT i SLEEP resetuju WDT. Ukoliko je potrebno duze vreme moze se WDT-u pridruziti preskaler sa faktorom deljenja do 1:128.Kada se prihvati zahtev za prekid izvrsenje prekidnog programa pocinje od adrese 0x0004. neki su interni.

Osim ova tri osnovna prekida postoji jos 11 periferijskih prekida. RB6. a po izvrsenju servis rutine potrebno ih je soſtverski resetovati.Kada se ustanovi koji je od uredjaja generisao zahtev za prekid prelazi se na izvrsenje odgovarajuce rutine za obradu tog prekida. Povratna adresa prekinutog programana cuva se automatski u hardverski magacin. Pored bita za dozvolu rada svih prekida General Interrupt Enable (GIE) i bita za dozvolu rada prekida generisanih os strane periferija (PEIE). ovom registru pripadaju i markeri prekida (interrupt-flags) i bitovi koji dozvoljavaju prekid koji izaziva tajmer0. RB5. spoljasnji prekid na pinu RB0/INT i prekida porta B na promenu stanja. Ovi se flegovi setuju cim se ispuni uslov interapta bez obzira na stanje njihovog bita omogucenja. Upravljacki registar INTCON se koristi za maskiranje prekida.u registrima PIR1 i PIR2. 1. Znacenje pojedinih markera je sledece: • T0IF (INTCON:2) setuje se na prekoracenje Timer0 • INTF (INTCON:1) setuje se u slucaju da nastupi spoljni prekid na pinu RBO/INT • RBIF (INTCON:0) setuje se kada se dogodi promena stanja na nekom od pinova RB4.18. RB7 • PSPIF (PIR1:7) PSP marker bit koji se koristi u opreciji citanja i upisa na PORTD kada je on konfigurisan kao PSP • ADIF (PIR1:6) marker koji se koristi za vreme analogno-digitalne konverzije • RCIF (PIR1:5) marker koji oznacava da je prijemni bafer koji koji koristi USART blok. a korespodentni flegovi.putem testira stanje markera koji se postavljaju kada se aktivira odgovarajuci prekid (interrupt flags polling).18) prikazana je logicka sema svih interrupt-a sa tabelom u kojoj su oni pobrojani: 23 . pun • TXIF (PIR1:4) marker koji pokazuje da je bafer za slanje podataka koji koristi USART prazan • SSPIF (PIR1:3) marker koji se koristi za rad sinhronog serijskog porta • CCP1IF (PIR1:2) marker koji koristi CCP1 blok • TMR2IF (PIR1:1) marker koji setije Timer2 kada dodje do prkoracenja • TMR1IF (PIR1:0) marker koji setije Timer2 kada dodje do prkoracenja • EEIF (PIR2:4) marker koji se setuje kada se zavrsi upis u interni EEPROM • BCLIF (PIR2:3) marker koji koji korist SSP blok kada je konfigurisan da radi u I2C master rezimu rada • CCP2IF (PIR2:0) marker koji koristi CCP2 blok. Pregled sadrzaja marker bitova kojim se generise zahtev za prekid je definisan na slici 1. Bitovi za njihovo omogucenje nalaze se u registrima PIE1 i PIE2.Povratak iz prekidnog programa se vrsi instrukcijom RETFIE. Na sledecoj slici (sl.

PORTA sest. a ako je TRISA=0b000000. Razlicitog su obima. Svaki port poseduje odgovarajuci registar podataka (PORTX) preko kojeg se programski pristupa U/I pinovima. Konfiguracija smera prenosa na odgovarajucoj bit poziciji porta vrsi se upisom konfiguracione reci u pripadajuci TRIS registar pri cemu nula konfigurise pin kao izlazni. To znaci da se pri upisu u port prvo ocitaju stanja pinova. a ostala tri porta su osmopinski. prva 2 bita budu ulazna. 24 . PORTC. Upis u neki od tih registara inicirace upis u lec tog porta. Sve instrukcije upisivanja su tzv. a jedinica kao ulazni. Moguce je podeliti port A. ceo port A je izlazni. izvrsi modifikacija. ako je TRISA=0b111111 ceo port A je ulazni. Nema velike razlike u elektricnoj konstrukciji navedenih pet portova. u suprotnom pin je izlazni. Port B se od ostalih razlikuje posebnom opcijom koju nude cetiri MSB. PORTE cine tri pina.Sl. svaka promena stanja na ovim pinovima generisace prekid mikrokontrolera. Ukoliko se setuje bit RBIE u registru INTCON.a ostala 4 izlazna (TRISA=0b110000).17 U/I Portovi Za vezu mikrokontrolera sa spoljnim svetom zaduzeni su ulazno/izlazni portovi.18 Sema logike za prihvatanje zahteva za prekid i sadrzaj 1. Odredjeni pinovi U/I portova u zavisnosti od rezima rada mogu da imaju fiksne ili promenljive funkcije. Npr. Ima ih pet i oznaceni kao PORTA.1. na primer. a potom ispravljena vrednost upise u lec porta. Port A Port A je 6-to bitni bidirekcioni port i sadrzi pinove od RA0 do RA5. Ako postavimo TRIS na 1 pin je ulazni. tako da. TRISA je direkcioni registar koji odredjuje smer pinova na portu. PORTD i PORTE. a njegovo citanje rezultirace citanjem logickih stanja direktno sa pinova. read-modify-write instrukcije. PORTB.

Pri tome mora se voditi racuna o strujnom ogranicenju pina o cemu ce biti kasnije reci.20 Pin RA4 na portu A Pin RA4 je izlaz sa otvorenim drejnom pa se zahteva od projektanta da veze otpornik odgovarajuce vrednosti za pozitivan napon.19 i 1.19 Port A od RA0 do RA3 i RA5 Sl.20 bice prikazan blok dijagram porta A: Sl.1. Na slici 1. jer se u ove svrhe korite i svi pinovi na portu E (i pinovi porta A od RA0 do RA3 i pin RA5).21 tabelarni prikaz registara za konfigurisanje porta A 25 .21 dat je tabelarni prikaz funkcija pojedinih pinova porta A i registri koji se koriste za konfigurisanje porta: Sl. sto se odradjuje selekcijom bita T0SE u registru OPTION.1. Pin RA4 moze da se izkoristi za ulaznu frekvenciju timer0.Na slikama 1. A/D konvertor je 10-to bitni sa 8 ulaznih kanala. Timer0 moze da se okida preko ovog pina na rastucu ili opadajucu ivicu ulaznog signala.1. Ceo port A ima mogucnost analogno-digitalne konverzije i prvenstveno se korisi u te svrhe.

Neslaganje na portu B ce nastaviti da setuje RBIF. Sl. Ovaj interapt moze probuditi kontroler iz SLEEP rezim rada. To se radi stavljanjem RBPU' bita na ‘0’. ‘0’ u TRISB registru prosledjuje sadrzaj bita iz izlaznog (latch) registra na pin i on radi kao izlazni. Na slikama 1.22 i 1. Vrednost na pinovima se poredi sa starom vrednoscu uhvacenoj kod zadnjeg citanja porta B.1.22 Struktura pinova od RB0 do RB3 Sl. Ovi otpornici se mogu ukljuciti jednim kontrolnim bitom. Ovo ce ukloniti neslaganje na portu i uslov za interapt. • Resetovanjem flag bita RBIF. ‘1’ u nekom bitu u TRISB registru stavlja odgovarajuci pin u stanje visoke impedanse i on radi kao ulazni pin.1. Svi pinovi imaju odgovarajuce bitove u TRISB registru kojim moze da se pinovi konfigurisu kao izlazni ili kao ulazni. Cetri pina na PORTB (RB7-RB4) imaju mogucnost generisanja interapta.23 Struktura pinova od RB4 do RB7 26 . Pull-up otpornici se automatski iskljucuju kad se pin konfigurise kao izlazni. Korisnik moze u rutini za obradu prekida ponistiti prekid sledecim postupcima: • Citanjem ili pisanjem u PORTB. Nad ovim vrednostima se vrsi OR operacija da bi se generisao interapt na promenu stanaja na PORTB. Svi pinovi u PORTB imaju pull-up otpornike. Otpornici su iskljuceni kod Power-on-reset-a.23 prikazana je struktura PORTB. Samo pinovi definisani kao ulazni mogu prouzrokovati interapt. Da bi promena na U/I pinu bila prepoznata sirina impusa mora da bude majmanje koliko i jedan masinski ciklus (4 * Fosc). Citanje PORTB-a ce prekinuti neslaganje i uslov za interapt i omoguciti resetovanje bita RBIF Kombinacija interapta na promennu stanja PORTB i pull up otpornika se moze iskoristiti za jednostavan interfejs za tastaturu.Port B Port B je 8-mo bitni bidirekcioni port.

Pin RB0 ima mogucnost da izazove prekid mikrokontrolera.26 su prikazane blok seme PORTC. Sl. Ako je ovaj interapt omogucen (setovan bit 4 (INTE) u INTCON registru) i na RB0/INT pinu se pojavi odgovarajuca ivica (definisana INTEDG bitom OPTION registra) nastupice interapt. Ovaj port je poseban sto na pinovima RC6 i RC7 ima ugradjen USART modul koji sluzi za serisku komunikaciju (npr. Port C Port C je 8-mo bitni bidirekcioni port. kako bi naredni interapt bio moguc.27. Na kraju interapt rutine potrebno je u programu resetovati INTF bit u INTCON registru.25 i 1.Na slici 1. Prilikom koriscenja modula za serisku komunikaciju potrebno je softverski konfigurisati pinove RC6 i RC7 tako da budu u funkciji USART modula.24 Tabela registara koji sluze za konfigurisanje PORTB. 27 . Na slikama 1. Sa racunarom).1.24 su prikazane tabele sa funkcijama pojedinih pinova i registara koji se koriste za konfigurisanje porta B. a funkcionalna tabela registara koji se koriste za konfigurisanje samog porta data je na slici 1.

27 Tabela registara koji sluze za konfigurisanje PORTC 28 .1.Struktura pinova od RC3 i RC4 Sl.25. Struktura pinova od RC0 do RC2 i od RC5 do RC7 Sl.26.1.Sl.1.

1.29 Tabela registara koji sluze za konfigurisanje PORTD 29 . U tom rezimu rada ulazni bafer je TTL tipa.28 i 1. Sl.1.Port D Port D je 8-mo bitni bidirekcioni port. Ovaj port se moze konfigurisati kao 8-mo bitni paralelni mikroprocesorski port (parallel slave port-PSP). podesavanjem konfigurisuceg bita PSPMOTE (TRISC<4>). Struktura porta D Sl.28. Na slikama 1.29 je prikazana blok sema PORTD i funkcionalna tabela registara koji se koriste za konfigurisanje samog porta.

Na slikama 1.30 Struktura porta E Sl. Pinovi se mogu konfigurisati kao digitalni ili analogni.1.31 Tabela registara koji sluze za konfigurisanje porta 30 .kao i u slucaju porta A.31 prikazana je strukturna blok sema PORTE i tabelarni prikaz registara koji sluze za konfigurisanje.Svaki pin porta E moze da se konfigurise softverski kao ulazni ili izlazni.30 i 1. Ulazni bafer je Schmitt Trigger tipa.Port E Port E je sirine 3 bita. Sl.1.Ima mogucnost A/D konverzije. sto je vec pomenuto.

Registrom ADCON1 (na slici 1. tesko je upravljati bilo kojim procesom bez digitalizacije analognih velicina.1. Zato u nastavku dajemo prikaz tih registara i prikaz tabele koji su potrebni za konfigurisanje. Modul za A/D konverziju se bazira na A/D konvertor sa sukcesivni aproksimacijama. Sl. Da bi to uradili potrbno je da pravilno podesimo registre ADCON0 i ADCON1.1.32 je prikazan je registar ADCON0. Ako zelimo da koristimo A/D konverziju moramo ukljuciti modul za tu svrhu i podesiti ga na nacin koji nam najvise odgovara. kanal koji se koristi za A/D konverziju. Registar ADCON0 sluzi za podesavanje A/D konverzije: frekvencije semplovanja A/D konvertora.32 Registar za podesavanje A/D konverzije 31 . pocetak A/D konverzije i ukljucuje se modul za A/D konverziju.18 A/D konverzija S obzirom na kontinualnost pojava u spoljasnjem svetu.33) odredjujemo ulogu pojedinih pinova (analogni ili digitalni). Kao sto smo vec napomenuli PORTA i PORTE imaju mogucnost A/D konverzije sto podrazumeva da se mogu konfigurisati kao analogni ili digitalni. Na slici 1.

Sl.3) -65 do +150ºC -0.5 V 32 . MCLR i RA4) Temperatura cuvanja mikrokontrolera Napon Vdd u odnosu na Vss Napon na MCLR u odnosu na Vss Napon na RA4 u odnosu na Vss -55 do +125ºC -0.3V do(Vdd+0.naponska i temperaturna ogranicenja U tabeli 1.3V do +7. Tabela 1.19 Strujna.naponska i temperaturna ogranicenja mikrokontrolera Radna temperatura ambijenta Napon na pojedinim pinovima u odnosu na Vss (bez Vdd.7: Strujna. naponskih i temperaturnih ogranicenja mikrokontrolera i pojedinih portova.33 Podesavanje tipa kanala (analogni/digitalni) 1.1.5V 0 do +14V 0 do +8.7 dat je pregled strujnih.

Interapt vektor je 0x0004.D i E) 1W 300mA 250mA +/. Organizcija programske memorije PIC16F877A imaju 13-bitni programski brojac (PC) koji je u mogucnosti da adresira memorijski prostor od 8k programskih reci od 14 bita.C.20 Organizacija memorije Strukturu memorije ovog mikrokontrolera cine tri odvojena bloka: 1.D i E) Maksimalna struja koju moze port da da (port A.20mA 25mA 25mA 200mA 200mA 1. Programski se ne moze utvrditi da li je doslo do prepunjeja steka. Memorija podataka 3. niti se u njega moze upisivati.B.20mA +/.34.Ukupna disipacija Maksimalna izlazna struja na pinu Vss Maksimalna ulazna struja na pinu Vdd Ulazna struja kroz klamp diode IIK (VI < 0 ili VI > VDD) Izlazna struja kroz klamp diode IOK (VO < 0 or VO > VDD) Maksimalna struja koju moze da primi jedan pin Maksimalna struja koju moze da da svaki pin Maksimalna struja koju moze port da primi(port A. Magacin radi na principu ciklicnog bafera. Prilikom izvrsenja instrukcije CALL ili prilikom poziva prekida mikrokontrolera. Mapa programske memorije i magacin prikazani su na slici 1. a da se upisom devete brise prva i tako redom. koji se satoji od osam 13-bitnih registara.B. sto znaci da se u njega mogu staviti osam razlicitih adresa. Reset vektor je 0x0000 i od njega pocinje izvrsavanje programa. 33 . Programska memorija 2.C. adresa sledece instrukcije se stavlja na magacin. EEPROM memorija podataka Odvojeno od nabrojanoh memorijskih blokova egzistira zasebna struktura magacina (Stack). Stack pointer se ne moze citati.

1.Sl.1.34 Mapa programske memorije i stack Organizacija memorije podataka Memorija za podatke je izdeljena u vise celina–banki (banks).35. U jednom od specijalnih registara. STATUS registru postoje dva bita RP1 i RP0 koji sluze za odabir zeljene banke podataka po principu prikazanom na slici 1.Nacin kodovanja Bank 34 .35. tzv. a sastoji se od registara opste namene (General Purpose Registers) i registara specijalne funkcije (Special Function Registers). Sl.

Svaka banka moze da sadrzi do 128 registara (0x7F). a ostatak prostora popunjavaju registri opste namene implementirani kao staticki RAM. Programski brojač (PC) odredjuje adresu instrukcije u programskom flesu koja ce sledeca biti pribavljena. 35 . Rec je o 13-bitnom registru. selekciju ivice okidanja eksternog interapta. reset status mikrokontrolera i sadrzi bite za selekciju banki internog RAM-a. za upravljanje tajmerom0. Neki specijalni registri koji se cesto koriste mapirani su u sve banke da bi se omogućio brzi pristup i redukcija kôda. koji sluze za indirektno adresiranje memorije podataka. Registar OPTION_REG se koristi za konfiguraciju preskalera za tajmer 0 ili Watchdog. Težih pet bita programskog brojaca smesteni su u izolovani registar PCH kojem se pristupa samo preko leca PCLATH mapiranom u internom RAM-u na adresi 0x0A. Mapa registara mikrokontrolera PIC16F877 prikazana je na slici 1. Bilo koja instrukcija koja se obraca INDF registru ustvari indirektno pristupa onoj lokaciji internog RAM-a cija je adresa trenutno u registru FSR. Od navedenih flegova posebno treba izdvojiti Zero bit (Z) koji se postavlja kad je rezultat aritmeticke operacije jednak nuli i bit prenosa/pozajmice Carry (C). STATUS registar je veoma bitan i zato je predvidjeno da se moze adresirati iz bilo koje banke. Kada je rec o registrima jezgra ne treba zaboraviti par FSR (File Select Register) i INDF (Indirect File).36. Ostali registri su vezani za periferne module i sluze njihovom upravljanju i kontroli statusa. Nekoliko specijalnih registara su registri jezgra. usko povezani sa funkcionisanjem CPU. i za omogucavanje Pull-up otpornika na portu B. Simbolicko ime nizeg bajta je PCL. On pokazuje status aritmeticko-logicke jedinice. To je registar koji se moze i upisivati i iscitavati. Nize lokacije u banci zauzimaju specijalni regisri.

1.36 Mapa registra PIC16F877 36 .Sl.

37 . I u ovom slucaju se setuje interapt fleg CCP1IF. Istovremeno se setuje korespondentni interapt fleg u registru PIR1. Tajmer2 je 8-bitni tajmer sa programabilnim preskalerom i postskalerom. Ima tri izvora takta: sistemski sat (Fosc/4). potreban je CCP modulu prilikom generisanja PWM signala i modulu za sinhronu serijsku komunikaciju (SSP) kao Baud Rate generator. Ukoliko deljenje nije potrebno preskaler se dodeli watchdog tajmeru. Tajmer0 je jednostavni 8-bitni brojač koji generise interapt pri prelasku sa 0xFF na 0x00 (overflow). Da bi ova operacija bila uspesna tajmer1 mora raditi u tajmerskom rezimu ili rezimu sinhronizovanog brojanja. Brojac eksternih dogadjaja moze se sinhronizovati sa internim oscilatorom. spoljasnji takt ili spoljasnji kristal. generise se odgovarajuci interapt. bilo spoljni generator takta spojen na pin RA4/T0CKI. 1:4 i 1:8. resetuje ili ostane nepromenjen.22 CCP moduli CCP je skracenica za Compare/Capture/PWM.2) i svaki ima svoje specificnosti. a postoji i asinhroni nacin rada koji omogucuje da se brojac inkrementira i u sleep rezimu. Tajmer1 je 16-bitni i takodje je osposobljen da radi kao brojac ili merac vremena. U rezumu rada Compare 16-bitna vrednost registra CCPR1 se stalno poredi sa vrijednoscu para registara tajmera1. sto se ranije podesi odgovarajućim konfiguracionim bajtom upisanim u registar CCP1CON. Pojednostavljeni blok-dijagram PWM modula dat je na slici 1. Kada se vrednost brojaca izjednaci sa vrednoscu upisanom u registar PR2.1. U rezimu rada Capture kada se desi dogadjaj na pinu RC2/CCP1 16bitna vrednost tajmera 1 preslikava se u registre CCPR1H:CCPR1L. treba ih prethodno zapisati u interni EEPROM. 1:2.37. Moze biti tajmer/brojac opste namene. Poseduju ga svi nizi PICmicro™ procesori i ovde je zadrzana kompatibilnost s njima. Kada dodje do izjednacenja moguce je da se pin RC2/CCP1 setuje. Moguce je podesiti da se brojac inkrementira na rastucu ili opadajucu ivicu spoljnjeg signala.Interni EEPROM za podatke Ako je potrebno neke podatke sacuvati i po ukidanju napajanja mikrokontrolera. U kooperaciji sa tajmerom 2 koristi se registar PR2 (Period Register). Kada je preskaler u upotrebi maksimalna frekvencija eksternog izvora iznosi 50 MHz sto je vece od maksimalne frekvencije samog mikrokontrolera. PIC16F877A poseduje dva ovakva modula koji mu pomazu da se lakse nosi sa raznim zahtevima real-time aplikacija. Medjutim. 1. Preskaliranje je upotrebljivo sa vrednostima deljenja 1:1. Ova memorija sadrzi 256 bajtova. U kombinaciji sa modulom tajmera 0 moze se koristiti programabilni preskaler (delilac frekvencije) sa odnosima deljenja od 1:2 do 1:256. U rezimu rada PWM (Pulse Width Modulation) pin RC2/CCP1 proizvodi sirinskoimpulsni modulisani signal rezolucije do 10 bita. Izvor takta za tajmer0 moze biti bilo interni sistemski sat (Fosc/4).21 Tajmeri Ove se periferije koriste za merenje vremena i brojanje eksternih dogadjaja. 1. Ugradjena su tri tajmerska modula (TMR 0.

Sl.1.37 Pojednostavljeni blok-dijagram PWM modula Period PWM signala odredjuje se upisom u PR2 registar po formuli: PWM_perid = [(PR2)+1]*4*Tosc*TMR2_preskajler Vreme ispune (Duty Cycle Time) menja se upisom u registar CCPR1L i dva bita registra CCP1CON (biti 5 i 4). Time je omogucena maksimalno 10-bitna rezolucija PWM izlaza. Formula za proracun je: PWM_Duty_Cycle = (CCPR1L:CCP1CON<5:4>)*Tosc*TMR2_preskajler 1.23 Ostale periferne jedinice Mikrokontroler PIC16F877 poseduje jos nekoliko korisnih periferijskih modula koji ce u ovom odjeljku biti samo kratko spomenuti. Mikrokontroler obicno nije usamljen, nego je deo mreze uredjaja koji trebaju medjusobno komunicirati i razmenjivati podatke. U tu svrhu, on je opremljen sa tri hardverska komunikaciona modula. Prvi od njih je SSP modul (Synchronous Serial Port), koji sluzi za komunikaciju sa serijskim EEPROM-ima, pomerackim registrima, displej-drajverima, itd. Ovaj modul moze raditi u jednom od dva rezima: 1. Serial Peripheral Interface (SPI) 2. Inter-Integrated Circuit (I2C) Drugi serijski komunikacioni modul je USART (Universal Synchronous Asynchronous Receiver Transmiter).On uglavnom sluzi za povezivanje sa personalnim racunarom, ali to nije njegova jedina mogucnost primene. USART se moze konfigurisati u neki od sledecih modova rada:

38

1. Asinhroni rad (full duplex) 2. Sinhroni master rad (half duplex) 3. Sinhroni slave rad (half duplex) Osim serijskih, postoji i jedan paralelni komunikacioni modul. Rec je o modulu PSP (Parallel Slave Port). On sluzi da se PIC16F877 direktno poveze na 8-bitnu magistralu podataka drugog mikroprocesora. Eksterni procesor tada koristeci linije Read (RD) i Write (WR) moze citati i upisivati PORTD registar kao svaki drugi 8-bitni lec.

1.24 Set instrukcija mikrokontrolera PIC16F877A U tabelei 1.8 dat je prikaz instrukcija mikrokontrolera PIC16F877A. Tabela 1.8: Set instrukcija PIC16F877A Instrukcija instr ADDWF f, d add W and f ANDWF f, d AND W with f CLRF f Clear f CLRW Clear W COMF f, d Complement f DECF f, d Decrement f Decrement f, Skip DECFSZ f, d if 0 INCF f, d Increment f Increment f, Skip INCFSZ f, d if 0 Inclusive OR W IORWF f, d with f MOVF f, d Move f MOVWF f Move W to f NOP Operation Rotate left f RLF f, d through carry Rotate right f RRF f, d through carry SUBWF f, d Subtract W from f SWAPF f, d Swap nibles in f Exclusive OR W XORWF f, d with f BCF f, b Bit Clear f BSF f, b Bit Set f

flegovi C,DC,Z Z Z Z Z Z Z Z Z C C C,DC,Z Z -

trajanje 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

39

BTFSC f, b BTFSS f, b ADDLW k ANDLW k CALL k CLRWDT GOTO IORLW k MOVLW k RETFIE RETLW k RETURN SLEEP SUBLW k XORLW k k

Bit Test f, Skip if Clear Bit Test f, Skip if Set Add literal and W AND literal with W Call subrutine Clear Watchdog Timer Go to address Inclusive OR literal with W Move literal to W Return from interrupt Return with literal in W Return from subroutine Go into stanby mode Subtract W from literal Exclusive OR literal with W

C,DC,Z Z TO’, PD’ Z TO, PD C,DC,Z Z

1/2 1/2 1 1 2 1 2 1 1 1 1 1 1 1 1

1. ADDWF f,d Operandi: f (0 - 255) d (0 - 1) Operacija: (W) + (f) →(dest) Dodaje sadrzaj registra W sadrzaju registra 'f'. Ako je 'd' = 0 rezultat se smesta u registar W. Ako je 'd'= 1 rezultat se smesta u u registar 'f'. Primer: Pre instrukcije: W= 0x17 FSR = 0xC2 ADDWF FSR, 0

40

4.d Operandi: f (0 .u bitove koje gasimo ide 0 ANDWF POTRB.1) Operacija: (W) .1.3 i 6 bit.AND.Posle instrukcije W= 0xD9 FSR = 0xC2 2. Recimo u PORTB treba ugasiti 2. (f) → (dest) Logicki AND sa sadrzajima reistra W i 'f' Ako je 'd' = 0 rezultat se smesta u registar W.7) treba da zadrze njihovo trenutno stanje. 1 Pre instrukcije: W = 10110011b PORTB = 01100110b Posle instrukcije: W = 10110011b 41 .5.(Na izlazu nam treba x0xx00xxb) MOWLW 10110011b . Primer 1: ANDWF FSR.127) d (0 . 1 Pre instrukcije: W= 0x17 FSR = 0xC2 Posle instrukcije: W = 0x17 FSR = 0x02 Primer 2: Primena ove instrukcije je zgodna ukoliko treba nekoliko bita u nekom registru postaviti da budu 0 a da pritom ostali zadrze svoje stanje. ANDWF f. Ostali bitovi (0. Ako je 'd'= 1 rezultat se smesta u u registar 'f'. bez obzira na mjihovo renutno stanje.

d Operandi: Operacija: f (0 .flag Primer: Pre instrukcije: W = 0x5A Posle instrukcije W = 0x00 Z=1 5.1) (f) → (dest) CLRW CLRF FLAG_REG Pravi komplement sadrzaja registra 'f'. COMF f.PORTB = 00100010b 3. CLRW Operandi: nema Operacija: 00h → (W) Brise sadrzaj registra W i setuje Z. CLRF f Operandi: f (0 .127) d (0 . Primer: Pre instrukcije: FLAG_REG = 0x5A Posle instrukcije: FLAG_REG = 0x00 Z=1 4. 42 .127) Operacija: 00h → (f) Brise sadrzaj registra 'f' i setuje Z flag.

Ako je 'd'= 1 rezultat se smesta u u registar 'f'.Ako je 'd' = 0 rezultat se smesta u registat W. Ako je 'd'= 1 rezultat se smesta u registar 'f'. d Operandi: f (0 .127) d (0 . Primer: Pre instrukcije: REG1 = 0x13 Posle instrukcije REG1 = 0x13 W = 0xEC odnosno REG1 = 0b00010011 W = 0b11101100 COMF REG1.1 → (dest) Umanjuje zadrzaj registra 'f' Ako je 'd' = 0 rezultat se smesta u registat W.0 6.1) DECF CNT.1) Operacija: (f) . Primer: Pre instrukcije: CNT = 0x01 Z =0 Posle instrukcije CNT = 0x00 Z =1 7.127) d (0 .1 43 . DECFSZ f. DECF f.d Operandi: f (0 .

1) (f) + 1 → (dest) Uvecava sadrzaj registra 'f' Ako je 'd' = 0 rezultat se smesta u registar W. Umesto nje se izvrsava NOP.1 → (dest).1 Ako je CNT = 0 PC = adresa DALJE Ako je CNT <> 0 PC = adresa OVDE + 1 8. preskace se operacija koja neposredno sledi. Operacija se koristi za uslovno granjane programa.1 44 . Primer: Pre instrukcije: CNT = 0xFF INCF CNT. Ako je 'd' = 0 rezultat se smesta u registat W. INCF f. d Operandi: Operacija: f (0 . Ako je 'd'= 1 rezultat se smesta u u registar 'f'. Instrukcija traje 2 ciklusa. Ako je 'd'= 1 rezultat se smesta u u registar 'f'. preskoci ako je rezultat 0 Umanjuje sadrzaj registra 'f'. 1 Pre instrukcije: PC = adresa OVDE Posle instrukcije CNT = CNT . Ako je rezultat 0. Primer: OVDE GOTO DALJE DECFSZ PETLJA ------CNT.127) d (0 .Operacija: (f) .

Instrukcija traje 2 ciklusa. Umesto nje se izvrsava NOP.Z=0 Posle instrukcije CNT = 0x00 Z =1 9.1) 45 . 1 Pre instrukcije: PC = adresa OVDE Posle instrukcije: CNT = CNT + 1 Ako je CNT = 0: PC = adresa DALJE Ako je CNT <> 0: PC = adresa OVDE + 1 10. Operacija se korist za uslovno granjane programa. Primer: OVDE GOTO DALJE INCFSZ PETLJA ------CNT.127) d (0 .d Operandi: f (0 .Ako je rezultat 0.d Operandi: f (0 . Ako je 'd'= 1 rezultat se smesta u u registar 'f'. preskoci ako je rezultat 0 Uvecava sadrzaj registra 'f'.127) d (0 . Ako je 'd' = 0 rezultat se smesta u registar W. INCFSZ f. preskace se operacija koja neposredno sledi.1) Operacija: (f) + 1 → (dest). IORWF f.

Ako je 'd' = 0 rezultat se smesta u registar W.4. bez obzira na njihovo renutno stanje.0 46 .1) (f) → (dest) Sadrzaj registra 'f' ce biti stavljen u odredisni registar. Ako je 'd'= 1 rezultat ce biti smesten u taj isti registar 'f'.OR. Ako je 'd'= 1 rezultat se smesta u registar 'f'.0 Pre instrukcije: W = 0x91 RESULT = 0x13 Posle instrukcije: W = 0x13 RESULT = 0x93 Primer 2: Primena ove instrukcije je zgodna ukoliko treba nekoliko bita u nekom registru postaviti da budu 1 a da pritom ostali zadrze svoje stanje.d Operandi: Operacija : f (0 . Ovo moze da se koristi kao test sadrzaja registra jer ce status Z biti normalno opsluzen.7) treba da zadrze svoje trenutno stanje. (f) → (dest) Logicki OR sa sadrzajima reistra W i 'f' Ako je 'd' = 0 rezultat se smesta u registar W.127) d (0 . Ostali bitovi (0. Primer: IORWF RESULT. MOVF f.5.Operacija: (W) .u bitove koje palimo ide 1 ANDWF POTRB.1. (Na izlazu nam treba x1xx11xxb) MOWLW 01001100b .3 i 6 bit.1 Pre instrukcije: W = 01001100b PORTB = 01100110b Posle instrukcije: W = 01001100b PORTB = 01110110b 11. Primer: Posle instrukcije: MOVF FSR. Recimo u PORTB treba ugasiti 2.

d Operandi: f (0 . RLF f. Ako je 'd'= 1 rezultat se smesta u u registar 'f'.1) NOP MOVWF OPTION.127) (W) → (f) Sadrzaj registra W ce biti stavljen u registar 'f'. MOVWF f Operandi: Operacija: f (0 . Primer: 14. Primer: Pre instrukcije: OPTION = 0xFF W = 0x4F Posle instrukcije: OPTION = 0x4F W = 0x4F 13.127) d (0 . jer ova instrukcija traje jedan masinski ciklus. NOP Operandi: Nema Operacija: Nema Kontroler jednostavno ne radi nista. i po potrebi setuje C bit u statusnom registru.W ce imati vrednist FSR registra. 47 . 12. Ako je 'd' = 0 rezultat se smesta u registar W.0 Operacija: Rotira sardrzaj registra u levo. osim sto trosi vreme.

Ako je 'd' = 0 rezultat se smesta u registar W.127) d (0 . i po potrebi setuje C bit u statusnom registru.1) RRF REG1. RRF f. SUBWF f. Ako je 'd'= 1 rezultat se smesta u u registar 'f'. Primer: Pre instrukcije: REG1 = 1110 0110 C=0 Posle instrukcije: REG1 = 1110 0110 W = 0111 0011 C =0 16.Primer: Pre instrukcije: RLF REG1.127) d (0 .0 48 .1) Operacija: Rotira sardrzaj registra u desno. d Operandi: f (0 .0 REG1 = 1110 0110 C =0 Posle instrukcije REG1 = 1110 0110 W = 1100 1100 C=1 15. d Operandi: f (0 .

Primer 1: Pre instrukcije: REG1 = 3 W=2 C=? Posle instrukcije: REG1 = 1 W=2 C = 1 . rezultat je nula Primer 3: Pre instrukcije: REG1 = 1 W=2 C=? Posle instrukcije REG1 = FF W=2 C = 0 . rezultat je negativan SUBWF REG1. rezultat je pozitivan Primer 2: Pre instrukcije: REG1 = 2 W=2 C=? Posle instrukcije REG1 = 0 W=2 C = 1 .Operacija: (f) .1 49 . Ako je 'd'= 1 rezultat se smesta u registar 'f'.Ako je 'd' = 0 rezultat se smesta u registar W.(W) → (dest) Oduzima sadrzaj registra W od sadrzaja 'f' registra i zavisno od rezultata setuje C bit u statusnom registru.

Ako je 'd'= 1 rezultat se smesta u registar 'f'.Ako je 'd' = 0 rezultat se smesta u registar W. Primer: Pre instrukcije: REG1 = A5 Posle instrukcije: REG1 = A5 W = 5A 18.127) d (0 . d Operandi: Operacija: f (0 . (f) → (dest) SWAPF REG1.17.0 Logicki ekskluzivni OR sa sadrzajima reistra W i 'f'Ako je 'd' = 0 rezultat se smesta u registar W.127) d (0 . d Operandi: f (0 .1) Operacija: (f <3:0>) → (dest <7:4>).1) (W) . SWAPF f.1 50 .XOR. (f <7:4>) → (dest <3:0>) Visi i nizi nibl u registru 'f' ce zameniti mesta. Primer: Pre instrukcije: W = B5 RESULT = AF Posle instrukcije: W = B5 RESULT = 1A XORWF REG. Ako je 'd'= 1 rezultat se smesta u registar 'f'. XORWF f.

127) b (0 . BSF FLAG_REG. Primer: Pre instrukcije: FLAG_REG = 0A Posle instrukcije FLAG_REG = 8A 21.7) 1 → (f<b>) BCF FLAG_REG.7) Preskoci ako je (f<b>) = 0. BCF f.127) b (0 .127) b (0 . b Operandi: Operacija: f (0 .7) 0 → (f<b>) Resetuje bit 'b' u registru 'f'. Primer: Pre instrukcije: FLAG_REG = C7 Posle instrukcije: FLAG_REG = 47 20. BTFSC f. 7 Setuje bit 'b' u registru 'f'.19. BSF f. b Operandi: Operacija: f (0 . b Operandi: Operacija: f (0 . 7 51 .

b Operandi: f (0 . Umesto nje se izvrsava NOP i u tom slucaju instrukcija traje dva ciklusa. Ako je bit 'b' u registru 'f' setovan tada ce naredna instrukcija biti preskocena. Primer: OVDE NIJE NASTAVI BTFSC FLAG.7) Operacija: Preskoci ako je (f<b>) = 1.127) b (0 . instrukcija koja neposredno sledi se ne izvrsava. BTFSS f.Ako je bit 'b' u registru 'f' nula tada ce naredna instrukcija biti preskocena.Ako je bit 'b' setovan.1 GOTO RUTINA1 --- Pre instrukcije: PC = adresa OVDE Posle instrukcije Ako je FLAG<1> = 0 PC = adresa NASTAVI Ako je FLAG<1> = 1 PC = adresa NIJE 22. Primer: OVDE NIJE NASTAVI BTFSC FLAG. instrukcija koja neposredno sledi se ne izvrsava.Ako je bit 'b' nula.1 GOTO RUTINA1 --- Pre instrukcije: PC = adresa OVDE Posle instrukcije: Ako je FLAG<1> = 0 PC = adresa NIJE 52 . Umesto nje se izvrsava NOP i u tom slucaju instrukcija traje dva ciklusa.

ADDLW k Operandi: Operacija: k (0 . Primer: ADDLW Pre instrukcije: W = A3 Posle instrukcije: W = 03 Primer 2: Primena ove instrukcije je zgodna ukoliko treba nekoliko bita u nekom registru postaviti da budu 0 a da pritom ostali zadrze svoje stanje. ANDLW k perandi: k (0 .255) (W) + k → (W) Sadrzaju registra W bice dodata osmobitna vrednost literala 'k'. Primer: ADDLW 15 Pre instrukcije: W = 10 Posle instrukcije W = 25 24.AND. i rezultat ce biti smesten u registar W.Ako je FLAG<1> = 1 PC = adresa NASTAVI 23. 5F 53 . i rezultat ce biti smesten u registar W. (k) → (W) Sa sadrzajem registra W i osmobitnom vrednosti literala 'k' bice izvrseno logicko .AND.255) Operacija: (W) .

2047) (PC) + 1 → TOS k → (PC<10:0>).Jedanaest bitova direktne adrese smestaju se u PC<10:0> a visi bitovi PC-a se ucitavaju iz PCLATH. Najpre se adresa povratka (PC+1) smesta na stek.6.Recimo u PORTB treba ugasiti 1. (PCLATH<4:3>) → (PC<12:11>) Poziv podprograma. u bitove koje gasimo ide 0 Pre instrukcije: W = 11101001b Posle instrukcije: W = 10100001b 25. Takodje resetuje preskaler za WDT isetuje bitove TO' i PD'. CALL k Operandi: Operacija: k (0 . 54 . Primer: OVDE CALL TAMO Pre instrukcije: PC = adresa OVDE Posle instrukcije PC = adresa TAMO TOS = adresa OVDE 26. bez obzira na njihovo renutno stanje. Ova instrukcija traje dva ciklusa. (Na izlazu nam treba x0xx00xxb) ANDLF 10110011b .4 i 5 bit. Ostali bitovi (0.2.3. CLRWDT Operandi: Operacija: nema 00h → WDT 0 → WDT preskaler 1 →TO 1 → PD Resetuje watchdog tajmer.7) treba da zadrze svoje trenutno stanje.

OR. Primer: GOTO TAMO Posle instrukcije PC = adresa TAMO 28.OR. Jedanaest bitova adrese neposredno iza instrukcije bice upisano u PC<10:0>. GOTO k Operandi: Operacija: k (0 . Instrukcija traje dva ciklusa. Primer: IORLW Pre instrukcije: W = 9A 35 55 .2047) k → (PC<10:0>) (PCLATH<4:3>) → (PC<12:11>) Naredba bezuslovnog skoka (granjanja). i rezultat ce biti smesten u registar W. IORLW k Operandi: Operacija: k (0 .Primer: CLRWDT Pre instrukcije: WDT = ? Posle instrukcije WDT = 0 WDT preskaler = 0 TO' = 1 PD' = 1 27. visi bitovi PC-a ce biti upisani iz PCLATCH<4:3>.255) (W) . (k) → (W) Sa sadrzajem registra W i osmobitnom vrednosti literala 'k' bice izvrseno logicko .

Posle instrukcije W = BF Primer 2: Primena ove instrukcije je zgodna ukoliko treba nekoliko bita u nekom registru postaviti da budu 1 a da pritom ostali zadrze svoje stanje. (Na izlazu nam treba x1xx11xxb) IORLF 01001100b .255) (k) → (W) Osmobitna vrednost 'k' bice smestena u registar W.7) treba da zadrze svoje trenutno stanje. bez obzira na njihovo renutno stanje. RETFIE Operandi: Operacija: nema TOS → (PC) 1 → GIE Uzima se vrednost sa vrha steka (TOS) i stavlja u PC. Dalji interapt je omogucen automatskim setovanjem bita GIE (Global Interapt Enable). MOVLW k Operandi: Operacija: k (0 . Instrukcija traje dva ciklusa. Recimo u PORTB treba ugasiti 1. Primer: MOVLW Posle instrukcije W = 5A 5A 30.4 i 5 bit. Ostali bitovi (0.6. Primer: RETFIE Posle instrukcije 56 . u bitove koje gasimo ide 1 Pre instrukcije: W = 00110110b Posle instrukcije: W = 01111110b 29.2.3.

W sadrzi offset vrednost tabele -.W sada zahtevanu ima vrednost iz -. Primer: CALL TABELa . Primer: RETURN Posle instrukcije PC = TOS 57 .Pocetak tabele RETLW k2 RETLW k3 RETLW k4 Pre instrukcije W = 04 Posle instrukcije W = k4 32.W = offset RETLW k1 .tabele TABELA ADDWF PC .PC = TOS GIE = 1 31. RETLW k Operandi: Operacija: k (0 . PC uzima vrednost sa vrha steka (adresa povratka) Instrukcija traje dva ciklusa. RETURN Operandi: Operacija: nema TOS → (PC) Povratak iz podprograma.255) k→W TOS → (PC) Registar W uzima osmobitnu vrednost literala 'k'. Instrukcija traje dva ciklusa. Uzima se vrednost sa vrha steka (TOS) i stavlja u PC.

255) d (0 . Primer: SUBLW 02 Pre instrukcije: W=1 C=? Posle instrukcije W=1 C = 1 . Watchdog Timer i njegov preskaler se resetuju i procesor ide u SLEEP mod sa zaustavljenim oscilatorom.i rezultat ce biti smesten u registar W. SLEEP Operandi: Operacija: nema 00h → WDT 0→WDT preskaler 1 → TO’ 0 → PD’ Power down bit (PD’) se resetuje. Setuje se bit Time-out (TO’). SUBLW k Operandi: Operacija: k (0 .k → (W) Od sadrzaja registra W bice oduzeta osmobitna vrednost literala 'k'. Primer: SLEEP 34. rezultat je pozitivan Pre instrukcije: W=2 C=? 58 .7) (W) .33.

Primer: XORLW Pre instrukcije: W = B5 Posle instrukcije W = 1A AF 59 .XOR. XORLW k Operandi: Operacija: k (0 .XOR. rezultat je negativan 35.255) (W) .Posle instrukcije W=0 C = 1 . rezultat je nula Pre instrukcije: W=3 C=? Posle instrukcije W = FF C = 0 . (k) → (W) Sa sadrzajem registra W i osmobitnom vrednosti literala 'k' bice izvrseno logicko . i rezultat ce biti smesten u registar W.

Kreirani program se prethodno unosi. lemjenja i testiranja). Sema ovog programatora data je na slici 2. kao i detaljan prikaz svih delova koji cine razvojni sistem. kako same seme tako i proces izrade (od projektovanja stampane plocice pa do samog kraja.Hardverska struktura razvojnog sistema U ovom delu je detaljno opisana hardverska struktura razvojnog sistem. Sl. Na mestima gde je bilo potrebno prikazan je detaljan proracun za pojedine komponente.2. Sema Tait programatora 60 . mogucnost da radi kao „programator u kolu“ (In Circuit Serial Programmer-ICSP ) i standardne komponte koje koristi. 2. Njega karekterise relativna jednostavost. Nakon programiranja kontroler je sposoban da izvrsava odgovarjuci program.1 Programator Za programator je iskoriscen dobro poznati i vec provereni TAIT programator. Mikrokontrolerski sistem-predstavlja srce sistema i definisano je hardverom tipicnim za aplikaciju. 2. Ovaj razvojni sistem mozemo grubo podeliti u dva dela: 1. Programator-gradivni blok koji se koristi za punjenje kreiranog programa. Krakteristike komponenata date su u Dodatku . kompajlira i debagira u host-u tipa PC masina.2.1. a zatim se program serijskom komunikacijom prenosi do programatora.1. relativno mala cena izrade.

Tranzistor Q2 na slici 2.Na semi sa slike 2. Ovaj napon se generise na izlazu stabilizatora 7812 (slika 2. Stabilizator 7805 se koristi za napajanje mikrokontrolera i dela logickih kola. Kolo SN 74LS07 je sestostruki bafer sa otvorenim kolektorom. Komunikacija izmedju PC-racunara i programatora je serijska i sinhronizovana sa bitskom brzinom. Kada je u stanju ON tada je napon na pinu MCLR 13 V. a kada je ustanju OFF napon na pinu MCLR je 0 V.2 Sema za dobijanje potrebnih napona Nacin povezivanja programatora u rezimu rada In Circuit Serial Programmer je prikazan na slici 2.1 se koristi kao prekidac. Logiku programatora cini kolo SN 74LS07 i tranzistor BC557.3. Na hostu je instaliran softver nazvan ICPROG cijim se pokretanjem vrsi programiranje kontrolera. To znaci da imamo jednu liniju kojom se prenosi taktni signal. Programator se povezuje preko LTP porta na host.2) koji na pinu GND ima povezane dve diode prema masi. Za programiranje mikrokontrolera potreban je napon od 12V do 14V koji se dovodi na pinu MCLR.2V .1 mozemo uociti dva glavna dela programatora: deo za napajanje i logika koje se koristi za programiranje. Deo za napajanje se sastoji od dva linearna stabilizatora napona: LM7805 i LM7812. Sl. 2. dok PNP traznistor BC557 ima ulogu prekidaca napona za programiranje. 61 . cime je obezbedjeno da napon na pinu OUT bude 13. a drugu liniju po kojoj se prenose podaci. dok stabilizator 7812 obezbedujuje potrebne napone za programiranje.

D1 se koriste da se obezbedi reset mikrokontrolera. Povezivanje programatora Elementi sa sl.7 ).3. Sastavni deo programatora je konektor.2.3. kao i 12 i 31 direktno povezani na napon napajanja od 5 V ( VDD) i zajednicki kraj (VSS). respektivno. Pin 4 ( PGD) sluzi za punjenje programa u mikrokontroler i on je povezan na pin 40 (RB7/PGD). Ovaj uslov je ostvaren inverznom polarizacijom diode D2. tablica istinitosti. kao i elektricne karakteristike logickog kola U3 sa slike 2.1 do D.2.Sl. vidi sliku 2. Logicka sema. C1. 62 . na pinu MCLR potrebno je dovesti napon oko 13V. raspored pinova na kucistu. Otpornici R2 i R3 sluze da ogranice struju programiranja. R1. izgled i fizicke dimenzije kucista. Sa ovog konektora ne koriste se pinovi 2 i 3 jer su pinovi mikrokontrolera 11 i 32.3.1 dati su u dodatku( slike od D. Za vreme programiranja. Preko pina 5 (PGC) dovode se taktni impulsi za programiranje mikrokontrolera na pinu 39 (RB6/PGC).

) prikazana je blok sema razvojnog sistema.3 Mikrokontrolerski sistem Na slici (sl.2. Kada je neki od pinova na visokom nivou (5 V) svetlece dioda koja je vezana sa njim. Radi se o TAIT programatoru o kome je bilo reci u prethodnom odeljku.2.2 Modifikovani Tait programator Na slici (sl. Kolo za reset ima ulogu da resetuje mikrokontroler ako je to potrebno.4. Sl. RB1. Programator se vezuje za PC masinu pomocu 25pinskog kapla na LTP port. RB3. Sasravni deo razvojnog sistema je i programator.2. RB2.2.) prikazan je deo seme reazvojnog sistema koji sluzi za programiranje mikrokontrolera (deo TAIT programatora) i nacin povezivanja sa ostalim delovima sistema.5. Blok za serijsku komunikaciju se pomocu 9-pinskog kabla 63 . Srce ovog bloka je integrisano kolo MAX232. Oscilator koriscen u konkretnom slucaju je kvarcni rezonator frekfencije oscilovanja 4MHz. RB4. LCD modul se sastji od LCD-a baziranog na cip-setu HD44780. koje ima ulogu da obezbedi potrebne naponske nivo za serijsku komunikaciju. Modifikovani Tait programator 2. LED mreza za indikaciju stanja pinova sastoji se od LED dioda vezanih na pojedinim pinovima.4. Za komunikaciju sistema sa PC masinom iskoricen je blok MAX232. Mrezu tastera cine sest tastera vezanih za pinove porta B (RB0. RB5).

.. prikazani na slici 2. U konkretnoj realizaciji tasteri su povezani na deo porta B. D1 je sotki dioda i ima ulogu za vreme programiranja.. 64 .vezuje sa COM port PC masine. x=1. Pritisak tastature registruje se promenom stanja na bilo kom ulazu porta B. na taj nacin sto se po automatizmu generise zahtev za prekid. RBx. Blok sema razvojnog sistema 2. Kada taster nije pritisnut ulazni pin porta B.5. Na slici (sl.4 Tasteri Mikroprekidaci.x=1.. Sl..) skiciran je nacin povezivanja tastera sa mikrokontrolerom. na +5V. Pinovi RB6 i RB7 su iskorisceni za programiranje.. a kad se pritisne na logickoj nuli.6.. od RB0 do RB5.7.6 se koriste za realizaciju tastature.T7.. T1..2. pa time ne postoji potreba za programskim testiranjem rada tastature. je na logickoj jedinici.5.2. Sa ciljem da se ogranici struja kontakata prekidaca svaki od tastera povezan je preko otpornika Rx.

Kao sto se vidi iz proracuna otpornik treba da je veci od 100Ω. Sve diode su precnika 3mm i difuznog su tipa. mehanicke i opticke karakteristike dioda.2. R. U konkretnom resenju koriscen je otpornik od 4k7 sto je znatno veci od proracunatog. za PORTE zelene i za deo PORTD (RD0 i RD1) crvene. U Dodatku (slika D. Za svaki port na cijem je izlazu vezana LED koriscena je posebna boja diode. 65 . Svaka od dioda je preko odgovarajuceg otpornika povezana na +5 V.6.otpornost otpornika vezakog izmedju 5 V napajanja i tastera Itas – maksimalna dozvoljena struja kroz taster. Tako da na deo PORTA (od RA1 do RA6) su vezane crvene LED. Iz kataloskih podataka (koji su dati u Dodatku slika D.Sl. iznosi 10mA.14) date su elektricne. Ostali podaci nisu od velikog znacaja jer koristimo nizak napon napajanja. na osnovu kataloskih podataka. Struja LED-a. Otpornici se proracunavaju na sledeci nacin: R≥ VDD 5V = = 100 Ω Itas 50mA Gde je: VDD – napon napajanja. jer u ovom slucaju kroz tastere protice struja od 1mA. 2. za deo PORTC (od RC0 do RC5) zute. cija se vrednost odredjuje na sledeci nacin. za odgovarajuci osvetljaj. Nacin povezivanja tastera sa mikrokontrolerom Za proracun otpornika koji se vezuju izmedju napona napajanja i tastera (slika 2.) potrebno je poznavati maksimalu struju koja moze da se propusti kroz taster. zute i zelene boje.6.5 LED LED (LED-Light Emmiting Diode) koje su koriscene su crvene.13 ) vidi se da je maksimalna struja 50mA. Ova vrednost je uzeta da bi smanjili potrosnju sistema.

jer tacna vrednost ne postoji u E24 nizu.1V = = 290Ω If 10mA Gde su: VDD – napon napajanja Uf – napon na diodi If .7.2.struja kroz diodu Uzimamo proracunatu vrednost za otpornost. Nacin povezivanja LED za port C 66 . b)Proracun za zelene LED: VDD . prikazan je nacin povezivanja LED-a na portu C.struja kroz diodu Uzimamo vrednost za otpornik 270Ω.1V = = 290Ω Rg = If 10mA Gde su: VDD – napon napajanja Uf – napon na diodi If .2.Uf 5V .7.1.a)Proracun za crvene LED: Rr = VDD .Uf 5V . c)Proracun za zute LED: Ry = VDD . Sl. je postoji u nizu E24.struja kroz diodu Uzimamo vrednost za otpornik 270Ω. jer tacna vrednost ne postoji u E24 nizu. Nacin povezivanja LED dioda na drugim portovima je identican.7V = = 330Ω If 10mA Gde su: VDD – napon napajanja Uf – napon na diodi If . Na slici 2.2.Uf 5V .

Stabilisani napon od 13.15 do D.18) su dati tehnicki podaci koji se odnose na kolo MAX232. Veza razvojnog sistema sa PCijem je dupleks tipa. S obzirom da prenos podataka ne prati i prenos taktnih impulsa komunikacija je asinhrona serijska.8). Podaci od PC masine ka razvojnom sistemu se vode preko drajverskog stepena koji povezuje pinove 11 i 14 (T1IN i T1OUT-slika 2. U konkretnoj realizaciji iskorisceno je pakovanje DIP16. a od razvojnog sistema ka PC masini preko drajverskog stepena 12 i 13 (R1OUT i R1IN-slika 2. Nestabilizovani napon od 18 V se dovodi na ulaz linijskog stabilizatora 7812. 67 .6 Max232 MAX232 se koristi za povezivanje razvojnog sistema sa racunarom po standardu RS232C.9.8). Povezivanje MAX232 saistemom 2.2. Kolo se napaja jednostrukim naponom od 5 V. Nakon toga vrsi dvostruko ispravljanje pomocu Grecovog ispravljaca (B1/80).2 V se koristi za programiranje mikrokontrolera. U Dodatku (slike D. U Dodatku (slike D.19 do D. Pomocu transformatora T1 mrezni napon od 220 V se transformise u AC napon amplitude 12 V.2 V. a napon od 5 V za napajanje logike. Na izlazu stabilizatora dobija se stabilisani napon od 13.8. Napon napajanja od +5 V se dobija na izlazu linearnog stabilizatora 7805. Sl 2.7 Deo za ispravljanje i stabilizaciju napona Struktura bloka za napajanje prikazana je na slici 2..21) prikazani su tehnicki detalji usmeraca i stabilizatora.

bez obzira na tip ili proizvidjaca.9 Deo za povezivanje LCD-a Siroku primenu u savremenim mikrokontrolerskim sistemima postigli su LCD displeji koji pored prikaza numerickih karaktera imaju u sebi implementiran ceo ASCII alfabet. Postoje razliciti tipovi alfanumerickih LCD displeja. mada moze da se iskoristi i transformator od 15V.8 Deo za analogno-digitalnu konverziju U konkretnoj realizaciji izvrseno je samo prosledjivanje naponskih nivoa sa spoljneg ulaza na pin RA0. Transformator je postavljen na drugoj plocici radi povecanja sigurnosti.9.9. Usmeracki deo razvojnog sistema Na slici (sl.Povezivanje je ostvareno preko pina konektora J5. ali najveci procenat se bazira na istom cip-setu tipa Hitachi HD44780. Iz tog razloga displeji koji su kompatibilni sa HD44780 mogu koristiti iste softverske rutine. Transformator 2. 2. U konkretnom resenju za povezivnje LCD-a koriscena su sledeca tri konektora: 68 .Sl. Sl. Na njegovim izlazima imamo napone od 13 i 5V (VDD). 2.10. Preporucljivo je da se koristi transformator od 12V na sekundaru. kao i razne specijalne znake.) je prikazan usmeracki deo razvojnog sistema.2.2. Transformator bi trebalo da je dimenzionisan za snagu od nekih 6VA.

2.11. konektor kojim se predaju komande LCD-u. Povezivanje LCD displeja na napajanje i interfejsa za regulaciju osvetljaja LCD displej je formata 2x16 karaktera. 69 . Regulacija osvetljaja LCD displeja ostvarena je preko potenciometra R24 nominalne vrednosti 10k. konekor za napajanje. konektor za prenos podtaka. Svaki karakter moze da prikaze maksimalno 7x9 osnovnih elemenata.11. Pristup displeju radi upisa karaktera ostvaruje se preko 14-to pinskog konektora.: Sl. 2. LCD displej je instaliran na gornjrm desnom uglu osnovne ploce.1. paralelnim pristupom 8-mo bitnog podatkana nozicama od D7 do D14 (vidi sliku 2. za regulaciju osvetljaja prikazan je na slici na slici sl. Format prikaza karaktera je programabilan i definise se na pocetku prikaza informacije u redu. LCD_DATA. Nacin povezivanja LCD displeja na napajanje i interfejsa. LCD_NAP.2. 3. LCD_DATA1.12 i 2.13).

Sl. Raspored i funkcije pinova konektora LCD-a Ukazacemo sada na princip rada LCD displeja.13.2.2. Sl. Sa mikrokontrolerom LCD displej komunicira preko sledece dve magistrale: 70 .13.12. Fizicki izgled organizacije prikaza LCD-a i adresne organizacije memorije za prikaz Funkcija i namena svakog od pina na konektoru LCD displeja je definisana na slici 2.

Na ovaj nacin umesto da se povezivanje ostvari sa 11. CGRAM prikazuje karaktere na displeju u matricno tackastoj formi. a kada je RS=0 pristupa se komandnom registru.12. u suprotnom je upis). Upisom u DDRAM podaci se prikazuju na ekranu LCD-a. Na slici 2.• • dvosmerne magistrala za podatke. To znaci da je moguce ostvariti horizontalno pomeranje informacija u toku prikaza. Signal E kada je aktivan (E=1) dozvoljava rad displeja. D0 do D7.14). Signal R\W definise operaciju citanja ili upisa (R\W=1 obavlja se operacija citanja. Ako se LCD koristi samo za prikaz poruka. Naime. Sl. pri cemu se pocetna adresa prikaza definise komandom za prikaz u fazi inicijalizacije. prikazane su adrese vidljivih lokacija na LCD displeju. tako da se mogu prikazati forme karaktera kreiranih po zelji korisnika. i to tako sto se prvo prenosi MS a nakon toga LS nibl. pin RW se može povezati na masu i broj potrebnih pinova je tako smanjen na 6. Sadrzaj CGRAM-a je moguce softverski menjati. umesto da se vrsi istovremeni prenos svih osam bitova karaktera prenos se ostvaruje na nivou niblova. a nevidljivo 24. R\W i E. kada je RS =1 registrima za podatke nazvanih DDRAM-a (Display Data Ram) i CGRAM-a (Character Generator Ram).2.14. Dvoredni smart LCD U cilju ustede broja pinova kojim se LCD displej povezuje na mikrokontroler projektanti cesto koriste cetvorobitni rezim rada komuniciranja. je pikazno povezivanje LCD-a sa PIC16F877A u 4-bitnom rezimu komuniciranja.15. Na slici 2. realizuje se sa 7 linija. a za upravljanje radom displeja pinovi RD2 i RD3. U svakoj lokaciji se memorise po jedan karakter. Signalom RS definise se kom se registru vrsi pristup. preko ovih linija mikrokontroler moze da upisuje u ili cita podatke iz LCD displeja jednosmerne upravljacke magistrale – cine je linije RS. Treba pri ovome naglasiti da se cetvorobitni rezim komuniciranja definise odgovarajucom komandom u fazi inicijalizacije. a ukupno je vidljivo 16 karaktera. 71 . U konkretnoj realizaciji koriscen je PORT D i to tako da su za prenos podataka iskorisceni pinovi od RD4 do RD7. Internu memoriju LCD displeja koja se koristi za prikaz karaktera cine dva reda od po 40 lokacija(vidi sliku 2.

Sl. pa kao takva podrzava odredjeni skup komandi.15.16.16. Spisak komandi i funkcije koje obavljaju te komande prikazan je na slici 2.2. Nacin povezivanja LCD-a i mikrokontrolera LCD displej je programibilna periferija.Sl. Tabela instrukcija LCD-a 72 .2.

10 Povezivanje kola za reset i oscilatora Strukturu kola za reset cine pasivni elementi R1 i C1 cija je vremenska konstanta tako izabrana da obezbedi korektni start programa nakon ukljucenja sistema na napajanje. tj.2. postovane su preporuke firme Microchip.18 do 2.17. Nacin povezivanja mikrokontrolera Kondezator C1 ima ulogu da filtrira napon na pinu MCLR za vreme rada kontrolera. Sl. 73 .24 prikazan je oblik stampanih plocica razvojnog sistema projektovanih u programskom paketu '' Protel 99SE'' . Nacin povezovanja kola oscilatora je prikazan na slici 2. da ne dodje do nezeljenog resetovanja mikokontrolera usled postojanja VF smetnji na vodovima za napajanje. Uloga tastera T1 je da obezbedi manuelni reset za slucaj da mikrokontroler iz odredjenih razloga blokira rad u toku izvrsenja programa. U konkretnom resenju. Frekvencija oscilatora je 4 MHz. 2.11 Fizicki izgled stampanih plocica Na slikama 2.17. koje se odnosi na povezivanje kristalnog oscilatora.2.

.19. Izgled stampane plocice sa raspodelom elemenata-pogled odozgo Sl.2.Sl.18.2. Izgled stampane plocice sa raspodelom elemenata-pogled odozgo 74 .

Izgled stampane plocice napajanja sa raspodelom veza-pogled odozgo 2.20.12 Tabelarni prikaz komponenata sa vrednostima koriscenih pri realizaciji razvojnog sistema Spisak ugradjenih elemenata koriscenih u razvojnom sistemu dat je u tabeli 2. .1: Spisak komponenata Oznaka komponente Naziv komponente R1 Otpornik 1/4W R2 Otpornik 1/4W R3 Otpornik 1/4W R4 Otpornik 1/4W R5 Otpornik 1/4W R6 Otpornik 1/4W R7 Otpornik 1/4W R8 Otpornik 1/4W R9 Otpornik 1/4W R10 Otpornik 1/4W R11 Otpornik 1/4W Vrednost komponente 4k7 4k7 4k7 4k7 4k7 4k7 4k7 270Ω 270Ω 270Ω 270Ω 75 .Sl.2.1 Tabela 2.

R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29 R30 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 Otpornik 1/4W Otpornik 1/4W Otpornik 1/4W Otpornik 1/4W Otpornik 1/4W Otpornik 1/4W Otpornik 1/4W Otpornik 1/4W Otpornik 1/4W Otpornik 1/4W Otpornik 1/4W Otpornik 1/4W Potenciometar Otpornik 1/4W Otpornik 1/4W Otpornik 1/4W Otpornik 1/4W Otpornik 1/4W Otpornik 1/4W Blok kondenzator Keramicki kondenzator Keramicki kondenzator Elektrolitski kondenzator Elektrolitski kondenzator Elektrolitski kondenzator Elektrolitski kondenzator Elektrolitski kondenzator Elektrolitski kondenzator Elektrolitski kondenzator LED 3mm LED 3mm LED 3mm LED 3mm LED 3mm LED 3mm LED 3mm LED 3mm LED 3mm LED 3mm 270Ω 270Ω 270Ω 270Ω 270Ω 330Ω 330Ω 330Ω 330Ω 330Ω 330Ω 330Ω 10k 1k 1k 1k 10k 10k 100k 100nF 27pF 27pF 10μF 10μF 10μF 10μF 470μF 100μF 100μF Zuta Zuta Zuta Crvena Crvena Zelena Zelena Zelena Zelena Zelena 76 .

D11 D12 D13 D14 D15 D16 D17 D18 D19 D20 D21 D22 Q1 Q2 Q3 Q4 J3 J4 J6 J7 J11 TS OSC T1 T2 T3 T4 T5 T6 T7 LCD Kabl Kabl Kabl LED 3mm LED 3mm LED 3mm LED 3mm LED 3mm LED 3mm Dioda GREC L7812CV TS7805 Dioda Dioda Mikrokontroler MAX232 PNP Tranzistor TTL Bafer D9 PCB Konektor Konektor D25 PCB Konektor Muska kontaktna letvica Konektor Transformator 6VA Oscilator Mikroprekidac Mikroprekidac Mikroprekidac Mikroprekidac Mikroprekidac Mikroprekidac Mikroprekidac Hitachi HD44780 25-pinski 1:1 9-pinski 1:1 Za Napajanje Crvena Zelena Crvena Crvena Crvena Crvena BAT42 1A 1A 1A 1N4148 1N4148 PIC16F877A BC557 SN 74LS07 Zenski Dvopinski Zenski Dvopinska 220V 220/15V 400mA 4MHz Musko/Muski Musko/Zenski - 77 .

Pre istalacije ovog programskog paketa potrebno je istalirati MPLAB.EXE).41. koja se nalazi na prilozenom disku u sklopu ovog rada ( u folderu MPLAB_IDE pokrenuti aplikaciju MPLAB v6. Za nastavak istalacije potreban je jednostruki klik levim tasterom na polje NEXT . Po pokretanju aplikacije na monitoru se generise prozor: 2. jer se kasnije Hi-Tech integrise u MPLAB programski paket. Koraci koje treba preuzeti da bi se instalirao paket Hi. su sledeci: 1.41.1 Istalacija softvera Za kreiranje programa na HLL-u C koristicemo programski paket Hi-Tech. Instalacija MPLAB-a pocinje pokretanjem aplikacije MPLAB v6.Prateci softver za PC i demo programi 3. Nakon ovoga se generise sledeci prozir: 78 .Tech i kreirala aplikacija na programskom jeziku C.3.

a zatim klikom na polje NEXT nastavlja se instalacija. Klikom na taster (polje) Browse bira se direktorijum gde se instalira MPLAB. Cekira se polje ''I ACCEPT'' i klikom misa na polje ''NEXT'' sledi nastavak nstalacije i generise se prikaz sledeceg oblika 4. 79 .3.

Yes). Aplikacija nas pita da li zelimo da napravimo precicu u start meniju. a zatim sledi klik na taster NEXT. 6.5. 80 . a zatim treba kliknuti na NEXT. Odabiramo jednu od ponudjenih opcija(npr. Bira se da li zeli precica (shortcut) na radnoj povrsini (desktop).

Potrebno je sacekati odredjeni vremenski period da se zavrsi instalacija. Ako je korisnik spreman za instalaciju to potvrdjuje tasterom NEXT pa se dobija sledeci prozor: 8.7. a zatim se pojavljuje prozor prikazan na sledecoj slici: 81 .

82 . nakon citanje poruke koja seodnosi na USB Driver Installition Please read treba kliknuti na NEXT. 10.9. Za nastavak instalacije (posle odabira yes ili no) kliknuti na NEXT.

nakon citanje poruke koja seodnosi na USB Driver Installition Please read treba kliknuti na CONTINUE. 83 . 12.11. nakon citanje poruke koja seodnosi na Driver Installition You MUST read treba kliknuti na NEXT.

nakon citanje poruke koja seodnosi na USB Driver Installition Please read treba kliknuti na CONTINUE.13. Za kraj instalacije kliknuti na FINISH. 84 . Pozeljno je u ovom trenutku restartovati racunar. 15. 14.

05_lite pokrenuti aplikaciju picclite. Instalacija pocinje pokretanjem aplikacije picclite-setup koja se nalazi na prilizenom disku (u folderu Hi-Tech_PICC_v8.Nakon instalacije paketa MPLAB potrebno je instalirati programski paket Hi-Tech i integrisati ga u MPLAB. Po pokretanju aplikacije na monitoru dobijamo sledeci prozor: 2. Da bi se obavila ova aktivnost potrebno je preuzeti sledece korake: 1. Klikom na NEXT nastavlja se instalacija.exe). 85 .

Da bi se nastavilo sa instalacijom treba kliknuti na NEXT. 86 . 4. Klikom na YES nastavlja se proces instalacije.3. U generisanom prozoru nude se uslovi koriscenja licenciranog softvera.

5. Za nastvak istalacije potreno je kliknuti na polje NEXT 87 . Klikom na taster (polje) Browse bira se direktorijum gde se instalira HiTech. a zatim klikom na polje NEXT nastavlja se instalacija 6.

8.7. 88 .. u ovom trenutku potrebno je scekat izvesni vremenski period da se zavrsi istalacija Hi-Tech. Odgovorom na YES na generisnom prozoru izvrsice se integracija HiTech u MPLAB razvojnom okuzenju.

9. 10. 89 . Kliknuti na NEXT za nastavak. Za nastavak kliknuti na OK.

Sada je potrebno podesiti MPLAB tako da koristi Hi-Tech kompajler u procesu kompajliranja. 90 . Klikom na YES zavrsavamo instalaciju Hi-Tech i po automatizmu se restaruje racunar. Klikom na Project → Project Wizard pojavice se novi prozor na monitoru. 1.11. Klikom na ikonu MPLAB koja se nalazi na radnoj povrsini pokrece se kompajler i generise se prozor Sada je potrebno podesiti MPLAB tako da koristi Hi-Tech kompajler u procesu kompajliranja.

91 . Za natavak kliknuti na NEXT. 4. U polju Actiive Toolsuite potrebno je odabrati opciju HI-TECH Toolsuite. 3.2.a zatim kliknuti na polje NEXT. U polju Device potrebo je odabrati PIC16F877A.

92 . 6.5. U polju Poject Name potrebno je upisat ime projekta. Kliknuti NEXT za nastavak instalacije. a zatim u polju Project Directory odabrati direktorijum gde cemo smestiti prethodno napisani kôd.

7. stikliranjem polja ispred imena odabranog fajla i klikom na NEXT generise se prozir: 93 . Klikom na potrebni fajl. Na ovom prozoru treba odabrati folder u kojoj se nalazi napisan nas program koji zelimo da kompajliramo. pa zatim na ADD .

8. Klikom na FINISH zavrsavaju se potrebna podesavanja i generise se prozor: 94 .

95 . U potprozoru koji se nalazi na sedini glavnog prozora nalazi se listing napisanog programa koji moze da se dodatno edituje ili ako je sve u redu da se pokrene proces kompajliranja. Nakon toga. 10. ili pritiskom tastera Ctrl+F10.9. dobijamo sledeci prozor. ako je napisani program ispravan. Kompajliranje se ukljucuje klikom na Projekt→Build All.

exe). a zatim kliknuti na polje OK. 1. Kada ovo zavrsimo potrebo je instalirati programski paket Ic-Prog. Za nastavak instalacije kliknuti OK.11. Nakon nekoliko upozorenja ( jer u ovom trenutku jos nije ukljucen odgovrajuci drajver) na koje treba odgovoriti sa OK generisace se prozor: 96 . Nakon toga na monitoru se generise prozor: 2. 12. Rezultat kompajliranja je HEX fajl koji se kasnije da ucitava u Ic-Prog. Instalacija pocinje pokretanjem aplikacije icprog (u folderu ic prog pokrenuti aplikaciju icprog. U slucaju da ima greske u programu kompajler ce dati detaljno obavestenje o gresci. Potrebno je izvrsiti podesavanja kao na prilozenoj slici. 3.

Za ukljucivanje drajver potrebno je uraditi: Odabrati settings→optionns (kao na slici) 97 .4.

5. Da bi ukljucili drajver.Potrbno je kliknuti na polje Yes. koji je potreban za rad IC-Prog pod OS XP. 98 . potrbno je podesiti Ic-Prog kao na prilozenoj slici. a zatim kliknuti na polje OK: 6. Nakon toga se generise prozor sa pitanje da li se zeli resetovati aplikacija.

Kada se program resetovao potrbno je odabrati mikrokontoler PIC16F877A.7. Nakon toga se generise prozor kao na sledecoj slici: 99 . Treba sacekati da se program resetuje i potvrdno odgovoriti na postavljeno pitanje na pitanje. To mozemo da uradimo tako sto cemo kliknuti Settings→Device→ Microchip PIC→More→More→PIC16F877A. 9. 8.

100 . (kao na sledecoj slici).10. Sada je potrbno ucitati HEX fajl koji se dobija kompajliranjem programa. Nakon toga se generise prozor kao na sledecoj slici na kome je potrebno selektovati zeljeni HEX fajl i kliknuti na polje OK. 11... To mozeme da se uradi klikom na: File→Open File.

Na njemu se moze videti hexadecimalni sadrzaj iskompajliranog programa. Potrbno je na njemu podesiti tip oscilatora i fuses podesavanja. U nasem slucaju potrbno je samo iskljuciti fleg ''CP''. Kada se prethodna procedura. na monitoru ce se generisti prozor.12. 101 . ako vec nisu programski podesena.

13. Loadovanje se pokrece klikom na: Command→Program All (kao na prilozenoj slici): 102 . Pre pocetka loadovanja prozor bi trebalo da izgleda kao na prilozenoj slici: 14.

15. Na prozoru koji ce se pojaviti treba kliknuti Yes za nastavak. Zatim pocinje proces loadovanja i prozor izgleda kao na prilozenoj slici: 103 . 16.

Tada je potrebno kliknuti OK. ukoliko nije bilo greski. Posle toga je potrbno utvrditi gde je greska. Nakon zavrsetka loadovanja. Napomena: Posle svakog pokretanja programa Ic-Prog potrebno je izvrsiti pocetna podesavanja. U slucaju da je doslo do greske program ce dati detaljne informisati o gresci. otkloniti je i ponoviti proces loadovanja. 18. proram ce generisati prozor sa obavestenjem da je proces zavrsen. Potrebno uraditi: Settings→Hardware ( ili pritiskom na taster F3) kao na slici: 104 .17. Ako je proces loadovanja prosao uspesno preostaje samo ispitivanje programa na razvojnom sistemu.

Programski jezik C je dosta mocan i fleksibilan jezik. metala i prociscenog peska. Neke osnovne napomene Razvojni sistem ima neka svoja ogranicenja koja moramo da ispostujemo prilikom programiranja mikrokontrolera. velicinu memorije za program. a odmah zatim cekirati polje ''Invert MCLR'' i kliknuti OK. U daljem tekstu nastojacemo da objasnimo nacim programiranja na konkretnim primerima. 3.2 Kreiranje aplikacija na programskom jeziku C za mikrokontroler PIC16F877A Kako je mikrokontroler bez softvera samo obican komad plastike.). Posle toga nastaviljamo sa normalnim radom. itd. U toku pisaanja programa bice korisceni neki standardni potprogrami koji se lako mogu naci na Internetu. ali ima i neke svoje specificnosti. O ovim ogranicenjima bilo je reci u prethodnim odeljcima. Na disku koji cemo priloziti uz ovu dokumetciju naci ce se izmedju ostalog i ti potrogrami. na ovom mestu cemo dati nekoliko mogucih softverskih resenja za nas razvojni sistem i tako kompletirati iskoristivu celinu. Programiranje mikrokontrolera je dosta slicno standarnom programiranju. a to su: 105 .Nakon toga dobijamo sledeci prozor: Sada je potrebno decekirati. a usput cemo i reci nesto o njima. Kao prvo moramo da poznajemo dovoljno dobro arhitekturu kontrolera ( registre. Pored njih tu su i hardverska ogranicenja razvojnog sisstema. tako da sada necemo da se zadrzavamo na njih. velicinu memorije za smestaj podataka.

short).1 pokazuje znacenje osnovnih tipova podataka i modifikovanih tipova: Tabela 3. Aktiviranjem USART modula po programskom automatizmu pinovi RC6 i RC7 se konfigurisu ka RxD i TxD. unsigned. Tabela 3. pinovi RA1.RA5 su povezani na LED. Konfigurise se kao izlazni TRISE={0b000}. PORTE je ceo iskoriscen za LED indikaciju. PORTB je predvidjen kao ulazni port zbog toga sto ima mogucnost da generise prekid usled promene stanja na nekim od njegovih pinova (pinovi od RB4 do RB7). 3.3 Tipovi podataka C programski jezik podrzava pet osnovnih tipova podataka (character. PORTC je predvidjen za komunikaciju sistema sa racunarom i za LED indikaciju stanja na pojedinim pinovima.1. RA0 je predvidjen kao ulaz za analogno-digitalnu konverziju. Pinovi od RB0 do RB3 nemaju ovu mogucnost. LCD modul je povezan na pinove od RD2 do RD7 ( RD2 se vezuje na RS pin displeja. Pinovi RC0-RC5 su povezani na LED diode. pa je zato njih potrebno analizirati softverski (najcesce primenom Timer0). PORTD je predvidjen za povezivanje LCD displeja i LED indikaciju. pa se zbog toga ovi pinovi moraju programski konfigurisati kao izlazni. Za pinove RD0 i RD1 su vezane LED za indikaciju stanja. a pinove RC0-RC5 je potrebno rucno konfiguristi kao izlazne. 3. RD6. 4. nismo ih iskoristili kao ulazne nego su ostali slobodni (koriste se u procesu programiranja). Ova mogucnost se pokazala kao veoma korisna pri analizi tastera pa smo se zbog toga opredelili da to iskoristimo. kod PORTA . Ovaj port se kofigurise upisom komandne reci 0x3f u registar TRISB. float.1: Tipovi podataka u programskom jeziku C Tip character integer float double Znacenje Karakter podataka Neoznaceni celi brojevi Brojevi u pokretnom zarezu Brojevi u pokretnom zarezu dvostruke preciznosti Kljucna rec char int float double 106 . Pinovi RB6 i RB7 iako imaju mogucnost. Ovaj port se konfigurise kao izlazni TRISD={0x00}. RD5. void. Nije greska ako se inicjalizira registar TRISC na vrednost 0x00. RD7 su iskorisceni za prenos podataka). RD3 vezuje se za E pin. integer. a zatim aktivira modul za komunikaciju sa racunarom. tako da je vreme trajanja instukcijskog ciklusa 1us. respektivno. da generisu prekid. 5. Za pobudu oscilatora koriscen je kvarcni oscilator od 4MHz. i njega je potrebo konfigurisati kao ulazni upisom komandne 0b000001 reci u registar TRISA. long. double) i cetiri modifikovana tipa podataka(signed. kao sto smo vec rekli. a preko pinova RC6 i RC7 povezano je kolo MAX232. a RD4. 2.

4E-38 do 3.4E+38 3.2 prikazuje moguci opseg vrednosti za sve kombinacije osnovnih tipova podataka i modifikatora Tabela 3.2: Opseg vrednosti tipova podataka Tip short short int int char unsigned unsigned int signed signed int long long int signed long float Obim u bitovima 1 1 8 8 8 16 8 8 16 16 16 32 Opseg 0 ili1 0 ili 1 0 do 255 0 do 255 0 do 255 0 do 65535 -128 do 127 -128 do 127 0 do 65535 0 do 65535 -32768 do 32767 3.void signed unsigned long short Bez vrednosti Pozitivni ili negativni brojevi Samo pozitivni brojevi Duzi opseg broja Kraci opseg broja void signed unsigned long short Svakpm tipu podatka odgovara odredjeni opseg kod prezentacije brojeva. Tabela 3. Ovaj opseg se moze menjati u zavisnosti od koriscenog modifikatora. 107 . Kada se javi prekid.1. PIC hardver sledi fiksni model ponasanja prikazan na slici 3.4 Prekidi Prekidi mogu se inicirati od strane velikog broja razlicitih internih ili eksternih izvora u odnosu na PICmicroMCU.

upravljane radom AD konvertora itd.HI-Tech kompajler spada u profesionalne alate i namenjen je najzahtevnijim korisnicima. prvi korak je da se testira i odredi izvor prekida.Sl. Pokusaj da je koristite kao brojac=0. U slucaju vise prekida.ali zahvaljujuci MPLAB integraciji moze se dobiti zadovoljvajuce IDE okruzenje. 3. LCD. CRC16. a softver je u celini odgovornost projektanata. Baziran je na DOS aplikaciji koja se poziva iz komandne linije.. takodje sadrzi i veliki broj biblioteka za rad sa razlicitim periferijama (SPI.5 Primena programskog jezika C (primeri) Jedni od najpoznatijih ANSI C kompajlera koji su namenjeni Microchip PIC mikrokontrolerima su svakako Hi-Tech PICC i CCS PCW kompajleri. 108 .). CCS PCW kompajler sadrzi u sebi kompletno IDE okruzenje. izazvace gresku. Napomena: Obratite paznju da je C jezik ''case-sensitive'' pa nije sve jedno da li se koriste mala ili velika slova!!! Primer: ako deklarisete promenljivu unsigned char bRojAC. 3..1 Algoritam izvrsenja programa pri nastanku prekida Hardver je u potpunost pod PICmicroMCU kontrolom. USB.Biblioteke koje se isporucuju zajedno sa kompajlerima spadaju u osnovne. GLCD. kao i dodatne funkcije koje implementiraju odredjene tipove algoritama za manipulaciju nad podacima kao sto su CRC8. Pravilno je bRojAC=0. Za razliku od Hi-Tech kompajlera. RTC. rutina za indetifikacuju izvora prekida na osnovu dodeljenog prioriteta odredjuje koji ce se prekid prvo obraditi. pa ce za bilo kakvu dodatnu periferiju je potrebno kreirati odgovarajuce funkcije i procedure. I2C. Kada se desi prekid.

je da se portabilnost ovako pisanog kôda znacajno uproscava.XT Protect(zastiti mikrokontroler od citanja) . Prva pogodnost ovakvog pristupa je sto se na ovaj nacin jednostavnije mogu pamtiti imena pinova i njihova funkcija. Kada se ovako izgenerisani HEX fajl ucita u program programatora (recimo u Ic-Prog ) programator ce automatski podesiti podesavanja koji tip oscilatora koristimo. // PORTBIT(PORTC. da li ce ''watch-dog''(WDT) tajmer biti aktivan ili ne. bez da se preterano zalazi u analizu.ENABLED Power-up Timer(PWT) . // PORTBIT(PORTC.ENABLED Watchdog Timer(WDT) . // 109 . itd. ukoliko je iz nekog razloga potrebno u toku razvoja prebaciti neki izlazni uredjaj na neki drugi pin od planiranog.DISABLED Oscilator . ovo se bezbolno moze izvrsiti izmenom u samoj definiciji bez da se pretrazuje ceo kôd kako bi se izvrsile promene na svim mestima gde se taj pin upotrebljava.1).bit) //pinovi static bit Taster1 static bit Taster2 static bit Taster3 ((unsigned)(&adr)*8+(bit)) @ @ @ PORTBIT(PORTC. Ovom direktivom omogucavamo da kompajler umetne u HEX datoteku i ''fuses'' podesavanja shodno potrebama programera. Dole navedeni kôd je jasan sam po sebi i moze se usvojiti kao takav. #define PORTBIT(adr. da li ce mikrokontroler biti zasticen od citanja ili ne.DISABLED In-Circuit Debugger .2).''fuses'' podesavanja __CONFIG (LVPDIS&XT&PROTECT&PWRTEN&WDTDIS&DEBUGDIS). a druga mozda jos bitnija. ukoliko na pinu PORTC. Primera radi.DISABLED Pravljenje ALIAS-a ulazno/izlaznih pinova Jako korisna mogucnost C jezika je definisanje logickih imena ulazno/izlaznim pinovima. U konkretnom primeru je podeseno sledece: Low Voltage In-Circuit Serial Programming . Konkretna primena ove olaksice data je u sledecem primeru: Napomena: Ne sme se zaboraviti obavezno podesavanje smerova pinova koji se koriste u odgovarajucim TRIS registrima. taj pin mozemo nazvati Taster1.Naime.0 imamo povezan taster.0).

7 Opcije za optimizaciju kôda pri kompajliranju Prilikom kompajliranja kôda Hi-Tech kompajler moze primeniti vise modela optimizacije.static bit static bit static bit LED0 LED1 LED2 @ @ @ PORTBIT(PORTB. __EEPROM_DATA('s'. Optimizacija se ukljucuje navodjenjem parametara u komandnoj liniji pri pozivu kompajlera: -0 (ukljucuje post-pass optimizaciju).'1').'0'.'C'.'.'p'. To je najlakse izvesti uz pomoc makroa __EEPROM_DATA( ). kao i smanjenje objektnog (HEX) kôda.'2'. __EEPROM_DATA('L'.'6').0).'-'.'_'. __EEPROM_DATA('v'. Default vrednosti parametara).2 Izgled Ic-prog-a 3.'. // PORTBIT(PORTB.'D'.2).'e'.'1'.Ukoliko je ukljucen neki od metoda optimizacije dobija se povecanje brzine izvrsavanja kôda.'-'. // PORTBIT(PORTB. U datom primeru u EEPROM memoriju mikrokontrolera od adrese 0 redom bice upisan ''tekst'' kao na sledecoj slici: Sl 3. i –Zg (ukljucuje Global optimizaciju).'R'.'e'.1).'T'. // 3.'0'). Pozeljno je uvek koristiti optimizaciju. ukoliko kôd radi kako je specificirano 110 .'0'.'0'.'r'.6 Upisivanje parametra u DATA EEPROM Ponekad je jako zgodno da parametre ili info-tekst upisemo u interni DATA EEPROM mikrokontrolera vec pri samom pisanju programa (npr. koji su sastavni deo Hi-Tech PICC kompajlera.'B'.

Iskoriscena je mogucnost koja postoji u radu sa portom B. potrebno je odabrati Project.. Ukljucivanje optimizacije Hi-Tech kompajlera prikazana je na slici3. ukljuci neki pin odgovrajuceg porta ili da ukljucuje LED nekim unapred definisanim redosledom. Zatim se klikne na OK. Potrebno je uvek napisati ovu liniju!// 111 . a ima zadatak da. Program je dosta jednostavan i lak za razumevanje. obavezno je koriscenje maksimalne optimizacije kako bi generisani kôd rutine Delay bio odgovarajuceg trajanja..h> //ukljucujemo ovu bibliotrku jer se u njoj nalaze osnovne rutine koje su potrebne za vreme programiranja. Naime pinovi RB4 do RB7 mogu da generisu prekid ( samo ako smo prethono to omogucili konfigurisanjem odgovarajuceg flag-a) kada se desi promena stanja na odgovarajucem pinu. u zavisnosti od toga koji je taster pritisnut. Ukljucivanje optimizacije Hi-Tech kompajlera u MPLAB razvojnom okruzenju se izvodi na sledeci nacin: u meniju Project>Build options.. Listing programa sa komentarom je prikazan na slici 3. Sl 3.3. U primerima koji su navedeni. #include<pic.8 Program za iskljucivanje i ukljucivanje LED Svrha ovog programa je upoznavanje sa nekim osnovnim naredbama programskog jezika C.zahtevima. Ujedno je primenjena i softverska analiza stanja tastera koriscenjem Timer 0.3 Izgled prozora na kome je ukljucena maksimalna optimizacija 3. U tabu PICC Compiler treba stiklirati Use alternate settings i zatim u praznom polju upisati -0 –Zg (ako vec nije bilo upisano).4.

//davanje imena pojedinim pinovima.// { GIE=0. //pinRB5 ima simbolicko ime ts1// static bit ts2 @ PORTBIT(PORTB. static bit ts5 @ PORTBIT(PORTB. 1). j=1. j=0. 1). o njemu bice reci kasnije// __CONFIG(LVPDIS&XT&PWRTEN&WDTDIS&DEBUGDIS). ako jeste promenjiva i dobija vtrednost 0// { i=1. 0). 5). k=0. bit) ((unsigned)(&adr)*8+(bit)) static bit ts1 @ PORTBIT(PORTB. } RBIF=0. static bit ts4 @ PORTBIT(PORTB. //resetujemo RBIF// GIE=1.j.c" //potprogram koji unosi kasnjenje. } if(!ts2) //da li je pin RB4 na logicku nulu. //dozvoljavamo omogucene prekide// } if(T0IF) //da ji je omogucen prekid koji izaziva tajmer0// { GIE=0. // iskljucujemo sve prekide// if(!ts1) //da li je pin RB5 na logicku nulu. 2). ako jeste onda je pretisnut neki taster vezan na nekom pinu od RB4 do RB7 pa je kontroler generisao prekid. //podesavanje PIC-a// int i.k. static bit ts6 @ PORTBIT(PORTB. 0). 3). //promenjive koje koristimo u programu #define PORTBIT(adr. Ovaj deo je standardan i sam po sebi diviljno jasan// void interrupt tas(void) //pocetak prekidne rutine za skeniranje tastera// { if(RBIF) //pitamo da li je RBIF=1. 4). 112 . static bit led1 @ PORTBIT(PORTD. ako jeste promenjiva j dobija vtrednost 0// { i=0. k=0. static bit led2 @ PORTBIT(PORTD. static bit ts3 @ PORTBIT(PORTB.#include "delay.

sem pina RA0 koji je ulazni// TRISC=0x00. //kasnjenje od 250ms// DelayMs(250). //definisemo PORTA kao digitalni. } T0IF=0. DelayMs(250).if(!ts3) //da li je pin RB3 na logicku nulu. //podesavamo vrednost preskajlera za tajmer0// ADCON1=0b10001110. //omogucavamo dozvoljene prekide// while(1) //beskonacna petlja// { if(i==1) { led2=1. //ukljucujemo svaku drugu diodu porta C// DelayMs(250). //definisemo PORTA kao izlazni. k=1. //definisemo PORTE kao izlazni// TRISA=0b000001. //omogucavamo prekid koji izaziva promena stanja na pinovima RA4 do RA7// GIE=1. //definisemo PORTD kao izlazni// TRISB=0x3f. DelayMs(250). 113 . //resetujemo fleg T0IF// GIE=1. //gasimo PORTE// PORTA=0b000000. //definisemo PORTD kao izlazni// PORTE=0b000. osim RA0 koji je analogni ulaz// T0IE=1. DelayMs(250). led2=0. //gasimo PORTA// PORTC=0x00. osim RA6 i RA7 koje stavljamo kao izlazne jer ih i ne koristimo// TRISE=0b000. //gasimo PORTD OPTION=0b00000011. // definisemo PORTB kao ulazni. //gasimo PORTC// PORTD=0x00. ako jeste promenjiva k dobija vtrednost 0// { i=0. //omogucavamo prekid koji izaziva tajmer0// RBIE=1. } } //zavsavamo prekidnu rutinu// void main(void) //pocetak glavnog programa// { TRISD=0x00. j=0. //iskljucujemo datu diodu// PORTC=0b10101010. //ukljucujemo datu diodu// DelayMs(250).

DelayMs(250).h" void DelayMs(unsigned char cnt) { #if XTAL_FREQ <= 2MHZ 114 . PORTE=0b000. } if(k==1) { PORTC=0x00.c" #include "delay. PORTA=0b101010. DelayMs(250). } if(j==1) { PORTC=0x00.DelayMs(250). DelayMs(250). Listing potprograma je dat na slici 3. DelayMs(250). DelayMs(250). On ima zadatak da unese kasnjenje u izvrsenju programa izrazeno u milisekundama. DelayMs(250). DelayMs(250). DelayMs(250).c.5. } } //kraj beskonacne petlje// } //kraj programa// Sl 3. DelayMs(250). //iskljucujemo PORTC// PORTE=0b101. PORTE=0b101. DelayMs(250). DelayMs(250). DelayMs(250). PORTA=0x00000. PORTE=0x00.4 koriscen je bibliotecni potprogram delay. PORTC=0x00. PORTA=0b101010. Potprogram "delay. DelayMs(250). PORTA=0b000000.4 Listing programa za ukljucivanje LED U programu sa slike 3.

Moze se pomenuti samo to da pri kompajliranju programa mora biti ukljucena maksimalna optimizacuja. } while(--cnt). do { i = 4. _dcnt= (x)/(12MHZ/(XTAL_FREQ))|1. U ovom potrogramu je iskoriscena bibliotecki potprogram delay.5 Listing biblioteckog potprograma delay. } while(--i). #endif } Sl 3. while(--_dcnt != 0) continue. Promenjiva cnt je neoznacena 16-bitna vrednost. } 115 .do { DelayUs(996). pa nije podrebno dodatno komentarisati. a njegov listig prikazan je na slici 3. do { DelayUs(250).c Potprogram je dovoljno jasan. #ifndef DelayUs #ifndef XTAL_FREQ #define XTAL_FREQ #endif #define #define MHZ *1000 KHZ *1 4MHZ #if XTAL_FREQ >= 12MHZ #define DelayUs(x) { unsigned char _dcnt.h. #endif #if XTAL_FREQ > 2MHZ unsigned char i.6. } while(--cnt). } #else #define DelayUs(x) { unsigned char _dcnt. while(--_dcnt != 0) continue. _dcnt = (x)*((XTAL_FREQ)/12MHZ).

#include <pic. __EEPROM_DATA('s'. 'B'. '0').#endif extern void DelayMs(unsigned char). Pored ostalog ovde treba da se obavi konverzija dekadnog broja u niz ASCII cifara. 'r'. '0'. '6').c" #include "lcd. '0'. 'T'. DelayMs(250). 3. '-'. '2'. __EEPROM_DATA('v'. 'p'. 'C'.9 Program koji upravlja radom LCD-a Ovaj program je malo slozeniji od prethodnog. DelayMs(250). iz razloga sto LCD displej. '0'. Zadatak programa je da broji od 0 do 999 i rezultat prikaze na LCD displeju. //upisujemo podatke u EEPROM // GLOBALNE Promenljive unsigned int brojac. 'D'. '_'. } /////////////////////////////////////////////////////// /////////////////////////// MAIN ////////////////////// 116 .h> #include "delay.6 Listing biblioteckog potprograma delay.h 3.'. kao i svaka periferija manipulisu samo sa zapisima u ASCII formatu. '1'. '-'. DelayMs(250).c" __CONFIG(LVPDIS&XT&PROTECT&PWRTEN&WDTDIS&DEBUGDIS) konfigurisemo PIC // __EEPROM_DATA('L'. '. #endif Sl. 'e'. 'R'. Ovde je iskoriscen i interni EEPROM mikrokontrolera za zapis nekih informacija koje se koriste u svrhu evidencije. void Delay_1s() // procedura koja unosi kasnjenje { // od 1 sekunde DelayMs(250). 'e'. '1').

brojac = 0. 3).c je ugradjena rutina za konverziju decimalnog broja u niz ASCII karaktera. // Inicializacija LCD displej // resetujemo promenljivu brojac // ovde pravimo masku naseg prikaza na displej lcd_gotoxy(0.void main(void) { TRISD=0x00.h> #define LCD_DATA PORTD #define PORTBIT(adr. // uvecavamo brojac za 1 if(brojac > 999) brojac = 0. red . // pozicioniraj se u prvoj koloni . GIE=0. // iskljucujemo sve interapte lcd_init(). bit) ((unsigned)(&adr)*8+(bit)) // LCD static bit LCD_E @ PORTBIT(PORTD.htsoft.11.7 Listing programa za upravljanje LCD-om U programu sa slike 3.com. 1). 1). Potprogram je preuzet sa http://www.drugi red lcd_puts("Brojac:"). U potprogramu lcd. PORTD=0x00. // ispisi na LCD-u tekst while(1) // beskonacna petlja { Delay_1s(). #include <pic. a dodatno je prosiren komentarom. // ogranicavamo brojac do maximalnih 999 lcd_gotoxy(10.prvi red lcd_puts("LCD Test"). kol) lcd_dec2str3(brojac).7 koriscen je potprogram lcd. // pozicioniramo se (2. // definisemo brojanje i prikaz na priblizno 1sekundu brojac++. // pozicioniraj se u prvoj koloni . // ispisi na LCD-u tekst lcd_gotoxy(0. 0).c koji ima ulogu da upravlja radom LCD-a. // konvertujemo dekadni broj u STRING } } Sl 3. Napomena: Ovaj potprogram moze da se upotrbi samo za LCD-ove koji su formata 2X16 karaktera i kompatibilni su sa displejom baziranim na cip-setu HD44780. // 117 .

#define lcd_gotoxy(x. } /* ispisi string na LCD-u */ void lcd_puts(const char * s) { while(*s) lcd_data(*s++). #define lcd_cursor_right() lcd_cmd(0x14) #define lcd_cursor_left() lcd_cmd(0x10) #define lcd_display_shift() lcd_cmd(0x1C) #define lcd_home() lcd_cmd(0x02). LCD_STROBE(). /* posalji komandu LCD-u */ void lcd_cmd(unsigned char ins) { LCD_RS = 0. // // koliko * 8 // ovde definisi specijalne karaktere #define SPECIJALNI_KARAKTERI 64 //----------------------------------------------------------// Procedure za kontrolu LCD-a HD44780 16x2 //----------------------------------------------------------#define LCD_STROBE() LCD_E = 1. DelayUs(40).static bit LCD_RS @ PORTBIT(PORTD. // COMMAND LCD_DATA = (LCD_DATA & 0x0f) | (ins & 0xf0). } 118 . LCD_STROBE(). DelayMs(2).y) lcd_cmd(0x80+x+(0x40*y)). LCD_STROBE(). DelayUs(40).DelayUs(40). #define lcd_putch(x) lcd_data(x) #define lcd_goto(x) lcd_cmd(0x80+(x)). LCD_STROBE(). // podaci DelayUs(40). LCD_DATA = (LCD_DATA & 0x0f) | ((ins << 4) & 0xf0). LCD_E = 0 #define lcd_cursor(x) lcd_cmd(((x)&0x7F)|0x80) #define lcd_clear() lcd_cmd(0x01). // podaci LCD_DATA = (LCD_DATA & 0x0f) | (ins & 0xf0). LCD_RS = 0. } /* posalji podatak LCD-u */ void lcd_data(unsigned char ins) { LCD_RS = 1. LCD_DATA = (LCD_DATA & 0x0f) | ((ins << 4) & 0xf0). DelayMs(2). 2).

lcd_putch(y+0x30). DelayUs(160). // {4 bit interfejs} LCD_DATA = (LCD_DATA & 0b00001111) | 0x20. lcd_putch(x+0x30). // incrementiraj poziciju. lcd_putch(y+0x30). // {8 bit interfejs/i cekaj 160uS} LCD_DATA = (LCD_DATA & 0b00001111) | 0x30. LCD_STROBE(). Cursor = Off. y=x/10. if (x<1000) { y=x/100.// *----------------------------------------// * Konverzija decimalnih brojeva u string // u opsegu od 0 do 999 // *----------------------------------------*/ void lcd_dec2str3(unsigned int x) { unsigned int y. DelayUs(160). iskljuci pomeranje displeja lcd_cmd(0x0C). } else lcd_puts("Err").c 119 . 2 reda. lcd_cmd(0x20+0x08). // {8 bit interfejs/i cekaj 160uS} LCD_DATA = (LCD_DATA & 0b00001111) | 0x30. DelayUs(160). x-=(y*10). Blink = Off lcd_clear(). LCD_STROBE(). } /* inicijalizacija LCD-a */ void lcd_init() { // {8 bit interfejs/i cekaj 5ms} LCD_DATA = (LCD_DATA & 0b00001111) | 0x30. lcd_home(). LCD_STROBE(). } Sl 3. LCD_STROBE().8 Listing potprograma lcd. x-=(y*100). // Display = On. DelayMs(5). // 4bit. 5x7 lcd_cmd(0x06).

3.10 Program za komunikaciju razvojnog sistema sa racunarom Ovaj program ima za cilj da broji od 0 do 99 i da rezultat prikaze na racunaru. Program nema neku prakticnu svrhu, kao ni prethodni, vec mu je jedini cilj edukacija. Pokazuje kako se vrsi podesavanje USART modula mikrokontrolera. Brzina prenosa podataka dosta zavisi od izabranog oscilatora, o cemu je bilo reci u prethodnim odeljcima. Veoma lako moze da se promeni i da se koristi kao potprogram u nekim slozenijim programima. Komunikacija je asinhrona serijska bez koriscenja prekidnih rutina.

#include <pic.h> #include "delay.c" __CONFIG(LVPDIS&XT&PROTECT&PWRTEN&WDTDIS&DEBUGDIS); // konfigurisemo PIC __EEPROM_DATA('R', 'S', '2', '3', '2', '_', '_', '_'); __EEPROM_DATA('v', 'e', 'r', '-', '1', '.', '0', '0'); __EEPROM_DATA('j', 'u', 'n', '-', '2', '0', '0', '6'); PIC_CLK 4000000 // frekvencija XTAL-a BAUD 19200 // RS232 baud rate DIVIDER ((PIC_CLK/(16UL * BAUD) -1)) // interni HIGH_SPEED 1 // interno podesavanje RS232 registara

#define #define #define proracun #define

// PROMENLJIVE unsigned char brojac; unsigned char primljeni_podatak; // PROCEDURE void Delay_1s() // procedura koja unosi kasnjenje { // od 1 sekunde DelayMs(250); DelayMs(250); DelayMs(250); DelayMs(250); } // slanje jednog karaktera void RS232_putch(unsigned char c) { while(!TXIF); //prelazi u '1' kada je prazan TXREG = c; DelayUs(60);

120

} // prijem jednog karaktera unsigned char RS232_getch() { if(RCIF) //prelazi u '1' kada je prun { RCIF = 0; return RCREG; } CREN = 0; //ukoliko je doslo do greske obrisi je CREN = 1; //enable reception return 255; // ako nema podatka primljenog } // slanje stringa void RS232_putst(register const char *str) { while((*str)!=0) { RS232_putch(*str); if (*str==13) RS232_putch(10); if (*str==10) RS232_putch(13); str++; } } // *----------------------------------------// * Konverzija decimalnih brojeva u string // u opsegu od 0..99 za RS232 komunikaciju // *----------------------------------------*/ void RS232_dec2str2(unsigned int x) { unsigned int y; if (x<100) { y=x/10;RS232_putch(y+0x30);x-=(y*10); RS232_putch(x+0x30); } else RS232_putst("Err"); } void main(void) { TRISA = 0b11111111; TRISB = 0b00000000; TRISC = 0b11111111; ADCON1 = 0b10000111; // Set up A/D as Right justified,

121

// (5 analog channels = digital inputs xxxx 011x) GIE = 0; // SERIAL PORT SETUP SPBRG = DIVIDER; BRGH = HIGH_SPEED; //data rate for sending SYNC = 0; //asynchronous SPEN = 1; //enable serial port pins CREN = 1; //enable reception SREN = 0; //no effect TXIE = 0; //disable tx interrupts RCIE = 0; //disable rx interrupts TX9 = 0; //8-bit transmission RX9 = 0; //8-bit reception TXEN = 0; //reset transmitter TXEN = 1; //enable the transmitter while(1) // beskonacna petlja { Delay_1s(); RS232_putst("Trenutno stanje brojaca je: "); RS232_dec2str2(brojac); RS232_putch(13); // ADCII znak (Return) za sledeci red if(++brojac > 99) brojac = 0; // ukoliko sa PC racunara dodje komanda R ili r resetuj brojac primljeni_podatak = RS232_getch();
if((primljeni_podatak=='R')||(primljeni_podatak == 'r')) brojac=0;

} } Sl 3.9 Listim programa za komunikaciju PC masine sa razvojnim sistemom Na slici 3.10 je dat oblik potprograma koji moze da koristi kod kreiranja nekih slozenijih programa. U njemu je sadrzana konverzija decimalnog broja u niz ASCII karaktera, kao i predaja i prijem podataka ka/iz serijskog porta.

#include <pic.h> #include „delay.c“ // slanje jednog karaktera void RS232_putch(unsigned char c) { while(!TXIF); //prelazi u ’1’ kada je prazan TXREG = c; DelayUs(60); }

122

// prijem jednog karaktera unsigned char RS232_getch() { if(RCIF) //prelazi u ’1’ kada je pun { RCIF = 0; return RCREG; } CREN = 0; //ukoliko je doslo do greske obrisi je CREN = 1; //enable reception return 255; // ako nema podatka primljenog } // slanje stringa void RS232_putst(register const char *str) { while((*str)!=0) { RS232_putch(*str); if (*str==13) RS232_putch(10); //prelaz u novi red if (*str==10) RS232_putch(13); //vrati se na pocetak reda str++; } } // *----------------------------------------// * Konverzija decimalnih brojeva u string // u opsegu od 0..99 za RS232 komunikaciju // *----------------------------------------*/ void RS232_dec2str2(unsigned int x) { unsigned int y; if (x<100) { y=x/10;RS232_putch(y+0x30);x-=(y*10); RS232_putch(x+0x30); } else RS232_putst(„Err“); } Sl 3.10 Listing potprograma za komunikaciju razvojnog sistema sa PC masinom S obzirom da je u predlogu ostvaruje serijska komunikacija izmedju mikrokontrolera i PC masine, potrebno je da na PC racunaru postoji neki terminal program koji podrzava ovaj tip komunikacije. Jedan tipican usluzni program ovog tipa je ''Terminal_v1.9b'', koji je zapisan na prilozenom disku (u folderu RS232_Terminal pokrenuti aplikaciju Terminal_v1.9b.exe). Pre pocetka komunikacije neophodno je definisati parametre serijskog prenos podataka (bitska brzina, broj bitova po karakteru, parnost, broj stop bitova, tip handshake, kao i

123

124 . a u prozoru terminala bi trebao da se pojavi rezultat izvrsenja programa. Ukoliko je sve u redu i COM port uspesno inicijalizovan potrebno je kliknuti na dugme [Connect].komunikacioni port po se predaju i primaju podaci).

U trecem delu smo integrisali potreban softver za punjenje programa u mikrokontroler. gde smo slikovito opisali kako se i kojim redosledom softver instalira i listing samih programa koje smo dali i time kompletirali razvojni sistem.. U drugom delu opisana je hardverska struktura sistema zasnonovana na mikrokontroleru PIC16F877A. Ivan Antic 125 . To je bila i tema prvog poglavlja ovog rada.Zakljucak Kao i realizacija prakticnog dela naseg zadatka. Slobodan Aleksic. Pre svega ''PIC16F87X Data Sheet'' iz koje smo koristili detalje koji se odnose na tehnicke karateristike mikrokontrolera. nimalo nije bilo jednostavno opistai citav razvojni sistem i objasniti sve njegove delove. Od velike koristi nam je bila literatura koju smo uspeli da nadjemo surfujuci po Internetu. Moramo pomenuti nekoliko skripti i diplomskih radova koji su na Internetu postavile nase kolege i njihovi nastavnici sa tehnickih fakulteta bivse Jugoslavije. S postovanjem: Branislav Dimitrijevic.

1 Logicka sema i funkcionalna tabela logickog kola 74ls07 Ovo kolo se pakuje u 14-pinsko DIP pakovanje kao na slici. a ostali pinovi sluze kao ulazni i izlazni pinovi pojedinih kola unutar cipa.D.Dodatak 1 Sl. Sl D.2 Raspored pinova na kucistu logickog kola 74LS07 (pogled odozgo) 126 . Naponi napajanja se dovode na nozice 14 i 7.

5 Elektricne karakteristike logickog kola 74ls07 (napon napajanja.D.3 Logicka sema bafera Sl.D.nivoi.Sl.4 Vreme uspona i vreme opadanja logickih nivoa Sl.potrosnja struje i radna temperatura kola) 127 .D.

6 Elektricne osobine logickog kola 74ls07 (strujna i naponska ogranicenja) Sl.D.Sl.D.7 Fizicke dimenzije logickog kola 74ls07 128 .

8 Raspored nozica tranzistora BC557 Sl. fizicke dimenzije i elektricne karakteristike tranzistora BC557 date su na slikama od D8 do D12.temperaturna i ogranicenja snage tranzistora BC557 129 .strujna .Raspred nozica.D. izgled kucista. Sl.9 Naponska.D.

Sl.D.10 Elektricne karakteristike tranzistora BC557 Sl.11 Zavisnost parametra hfe od struje kolektora 130 .D.

12 Fizicke dimenzije tranzistora BC557 131 .Sl.D.

D.13) prikazan je njihov izgled i njihovi tehnicki podaci: Sl.D.13 Tehnicki podaci i izgled tastera 132 .Na slici (sl.

Sl.D.15 Propagaciono vreme pri slanju i prijemu za MAX232 133 .14 Tehnicki parametri i fizicki izgled koriscenih dioda Sl.D.

D.Sl.16 Logicka sema i fizicki izgled MAX232 Sl.D.17 Elektricne karakteristike MAX232 134 .

19 Parametri usmeraca 135 .18 Elektricne karakteristike maks 232 Sl.D.Sl.D.

20 Fizicki izgled usmeraca Sl.Sl.D.21 Fizicki izgled stabilizatora 136 .D.

Dodatak 2 Fizicki izgled razvojnog sistema 137 .

projektovanje telekomunikacionih sistema… Ivan S. mobilne telekomunikacije.1983. 05.05. rodjen 04. 138 . Studije upisao 2001. Osnovnu skolu i Gimnaziju zavrsio u rodnom gradu. smer telekomunikacije. Aleksic. godine na Elektronskom fakultetu u Nisu.. rodjen 05. na kome i danas uspesno studira. kablovska televizija. U toku studiranja izradio je par projekata medju kojima je i ovaj.. Interesovanja: mikroprocesorki i mikrokontrolerski sistemi.. godine u Prokuplju. 1982. godine u Vranju. elektroakustika. Intresovanja: Mikroracunarski sistemi.. godine u Surdulici.1983. web programiranje.godine na smeru telekomunikacije. smer za telekomunikacije.Branislav R. godine Elektronski fakultet u Nisu.Elektronski fakultet u Nisu je upisao 2002. Antic.02. U istom mestu zavrsio je srednju tehnicku skolu na smeru automatika. Upisuje 2002. satelitske kimunikacije. Interesovanja: Primena mikroracunara u kolima sa pokretnim LED displejom. Slobodan P. gde je zavrsio osnovnu skolu i gimnaziju. Student je pete godine. projektovanje telekomunikacionih sistema. Dimitrijevic. rodjen 21. obrada i digitalni prenos analognih signala.

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->