Professional Documents
Culture Documents
Skripta Pic16f84a Cro
Skripta Pic16f84a Cro
ELEKTROTEHNIČKI ODJEL
Mikrokontrolerski sustavi
1 Uvod................................................................................................................ 5
1
4.4 Generatori takta ..................................................................................................37
4.5 Takt / instrukcijski ciklus....................................................................................39
4.6 Obrada instrukcija ..............................................................................................39
4.7 Reset....................................................................................................................40
4.7.1 Reset kod pada napona napajanja (Reset on Brown-Out).............................40
4.8 Ulazno / izlazni sklopovi .....................................................................................41
4.8.1 PORTA i TRISA ............................................................................................41
4.8.2 PORTB i TRISB ............................................................................................41
4.9 Organizacija memorije........................................................................................42
4.9.1 Programski brojač (Program Counter) ...........................................................43
4.9.2 Stog (Stack) ..................................................................................................44
4.9.3 Status registar ...............................................................................................44
4.9.4 Direktno adresiranje ......................................................................................45
4.9.5 Indirektno adresiranje....................................................................................45
4.9.6 Relativno adresiranje.....................................................................................45
4.10 Prekidi (Interrupts)..............................................................................................46
4.10.1 INTCON registar ...........................................................................................47
4.11 Podatkovna EEPROM memorija ........................................................................48
4.11.1 EECON1 registar ..........................................................................................49
4.12 Slobodni brojač TMR0 ........................................................................................49
4.12.1 OPTION registar ...........................................................................................50
2
7.3.4 Izgradnja projekta..........................................................................................77
7.3.5 Pokretanje simulatora....................................................................................78
7.3.6 Provjera rada aplikacije .................................................................................79
8.1 Uvod.....................................................................................................................90
8.2 Instalacija sustava pri programiranju programskim paketom IC-PROG .........90
8.3 Programiranje mikrokontrolera programskim paketom IC-PROG...................91
9.1 Napajanje.............................................................................................................96
9.2 Led diode.............................................................................................................96
9.3 Tipkala .................................................................................................................97
9.4 LCD zaslon (display)...........................................................................................98
9.5 Sedamsegmentni zaslon ....................................................................................99
9.6 Analogno-digitalni pretvarač (A/D converter) .................................................100
9.7 RS-232 komunikacija ........................................................................................101
9.8 Digitalni termometar - DS1820 .........................................................................102
9.9 Pull-up/pull-down otpornici na portovima.......................................................103
9.10 Direktan pristup portovima ..............................................................................105
10.1 Uvod...................................................................................................................106
10.2 Makro naredbe ..................................................................................................106
10.3 Potprogrami ......................................................................................................107
10.4 Primjeri ..............................................................................................................108
10.4.1 Program za aktiviranje porta B ....................................................................108
10.4.2 Način upisivanja konstanti ...........................................................................109
10.4.3 Naredbe uvjeta............................................................................................109
10.4.4 Zbrajanje i oduzimanje, indirektno adresiranje.............................................109
10.4.5 Usporedba (komparacija) ............................................................................110
10.4.6 Inkrementiranje i dektrementiranje ..............................................................111
10.4.7 Inicijalizacija Porta A i Porta E.....................................................................112
10.4.8 EEPROM - čitanje podataka sa memorije ...................................................113
10.4.9 EEPROM - upis podatka u memoriju...........................................................113
10.4.10 FLASH programska memorija - čitanje podataka ........................................113
10.4.11 FLASH programska memorija - upisivanje podataka ...................................114
10.4.12 Zbrajanje dva 16 bitna broja ........................................................................115
10.4.13 Oduzimanje dva 16 bitna broja....................................................................115
10.4.14 Sortiranje sa indirektnim pristupom .............................................................115
10.4.15 Interupt........................................................................................................116
10.4.16 Preskaler - rad sa TMR0 .............................................................................117
3
10.4.17 Dvosmjerna vrtnja motora ...........................................................................119
10.4.18 Dioda ..........................................................................................................119
10.4.19 LED diode na portu B ..................................................................................122
10.4.20 Usporedba - indirektnim adresiranjem .........................................................123
10.4.21 Protok..........................................................................................................124
10.4.22 Regulacija temperature ...............................................................................125
10.4.23 Pretvorbe ....................................................................................................126
10.4.24 Servo motor.................................................................................................130
4
1 Uvod
5
2 Podjela računala
Na slici 2.1. prikazano je djelovanje čovjeka s obzirom na okolinu, tj. djelovanje s obzirom na
informacije koje dobija od svojih osjetila. Na sličnom principu koristimo računala u procesnoj tehnici.
Računalo u procesnoj tehnici može poslužiti samo za njegov nadzor ili za automatsko upravljanje
cjelokupnim procesom. Koji od ovih načina će se primijeniti ovisi o načinu unosa podataka u računalo
te njihove obrade i načinu upotrebe dobivenih rezultata za upravljanje procesom. Dakle, treba
razlikovati nadzor nad procesom (očitavanje relevantnih parametara) i upravljanje s njim (podešavanje
parametara) bilo izravno (automatski) ili neizravno. Prema načinu unosa podataka u računalo te
njihove uporabe za upravljanje tijekom procesa razlikuju se:
Off-line prijenos podataka odvija se u dvije faze. U prvoj se podaci iz izvora zapisuju na neki
prijenosni medij (disketa, priručna memorija, optički mediji i drugo), pa se tek potom sa tih medija
prenosi ili upisuje u računalo. Vrijeme između skupljanja podataka i unosa je po potrebi, za sat ili dva,
tjedan, mjesec, godinu dana ili nikad. Naravno ovakav sustav nepogodan je za brz i izravan nadzor
nad procesima.
Računala koja rade ″on line″ (slika 2.2) unose podatke automatski kada su generirani. Podatke
generiraju razni senzori koji su električnim vodičima spojeni na računalo. Vrijeme potrebno da se ti
podaci prebace u računalo mjeri se uglavnom u milisekundama. Za takve sustave kažemo da rade u
realnom vremenu, zbog toga što je vrijeme potrebno za obradu podataka definirano
6
Osnovni razlog uporabe on-line sustava jest brzina rada i velike mogućnosti obrade podataka
kojom raspolaže digitalno računalo. Dakle nadzor sustava gdje se procesi vrlo brzo mijenjaju gotovo je
nemoguć bez primjene digitalnog računala. Osim toga u realnom vremenu mogu se pratiti i predvidjeti
tendencije koje se u procesu mogu pojaviti. Na taj način lako je intervenirati i izbjeći alarmantne
situacije. Za razliku od navedenog, kod off-line obrade koja bi trajala dugo dobiveni rezultati bili bi
gotovo nekorisni.
Kvaliteta intervencije u sustavu ovisiti će o kvaliteti algoritma koji su razvijeni za upravljanje
procesom i zatim uneseni u obliku programske potpore u računalo. Kod vrlo složenih sustava može se
dogoditi da tim programom nisu obuhvaćene baš sve moguće situacije do kojih u životu i radu može
doći. Ne može se baš sve predvidjeti. Iz navedenog razloga ponekad se on-line sustav izbjegava, a
stanje procesa samo se prikazuje voditelju (osobi) koji odlučuje što treba učiniti. No može se dogoditi
da voditelj donese neadekvatan zaključak unatoč kvalitetnim informacijama koje mu se predočuju. Da
bi se to izbjeglo sve se više uvode ekspertni sustavi, odnosno digitalna računala s programskom
potporom koja se služe bazom znanja koncipiranom od tima vrhunskih stručnjaka za proces koji se
nadzire. Takav sustav koji može i ne mora biti on-line pomaže voditelju da u kritičnim situacijama
donese najbolju odluku. Osnovno načelo rada ekspertnog sustava prikazano je na slici 2.3.
Dakle, neki se procesi ne mogu nadzirati bez on-line sustava nadzora s digitalnim računalom, jer
nikakvo drugo sredstvo nema takvu brzinu rada i moć kao računalo koje može na brze novonastale
promjene u procesu smjesta reagirati.
Elementi inteligentnog ponašanja vrlo su značajno svojstvo ovih sustava. Pod tim se misli na
prilagodljivost i snalaženje sustava (računala) u promijenjenoj situaciji u odnosu na programski
prepoznatljivu i definiranu, a to znači da sustav mora prepoznati promjenu van definiranih okvira,
prilagoditi se i donijeti više ili manje adekvatno rješenje da bi se sustav ponašao unutar definiranih
granica. Znači u takvim situacijama ne traži se idealno rješenje već prvo prihvatljivo.
Kao primjer navest ćemo nekoliko kontrolora procesa:
1.) SCADA (Supervisory Control And Data Acquisition) razvojni sustavi su tijekom prošlih nekoliko
godina tehnološki brzo napredovali i pratili razvoj ostalih segmenata informatičke industrije. Napredak
tehnologija SCADA sustava je vidljiv u nekoliko segmenata.
Najznačajniji napredak je napravljen na polju tehnologija veznih uz internet. Današnji SCADA
razvojni sustavi omogućavaju povezivanje SCADA sustava s web serverom što omogućava nadzor i
upravljanje sustava s udaljenih lokacija korištenjem interneta i web preglednika.
Veliki problem SCADA sustava je bio u povezivanju računala s mjernom i upravljačkom opremom
zbog nestandardnih programskih sučelja takve opreme prema SCADA sustavima što je rezultiralo
ograničavanjem mogućnosti odabira opreme, odnosno SCADA razvojog sustava. Uvođenjem
standardnog programskog sučelja mjerne i upravljačke opreme – OPC (OLE for Process Control),
baziranog na Microsoft OLE (Object Linking and Embedding) tehnologiji za komunikaciju između
programskih modula u Windows okolini, omogućena je upotreba šireg spektra mjerne i upravljačke
opreme i SCADA sustava uz pojednostavljen rad.
Daljnji napredak je vidljiv u proširenju postojećih mogućnosti i povećavanju pouzdanosti.
7
2.) FPGA (field-programmable gate array) je poluvodička naprava koja sadrži programabilne logičke
komponente i programabilne međuspojeve. Programabilne logičke komponente mogu biti
programirane da poboljšaju funkcionalnost osnovnih logičkih operacija (kao što su AND, OR, XOR,
NOT) ili složenijih kombinacijskih sklopova kao što su dekoderi i jednostavne matematičke operacije.
Večina FPGA sadrži i memorijske elemente najčešće flip-flop (bistabilne multivibratore) ili više blokova
memorije. Hijerarhija programabilnih međuveza dopušta logičkim blokovima u FPGA-u da budu
međusobno povezani ako je to potrebno i sa sistemskim projektantom, nešto kao one-chip
programabilni model. Ti logički blokovi kao i međuveze mogu biti programirani i poslije tehnološke
proizvodnje preko projektanta tako da FPGA može obavljati logičke operacije koje se u tom trenutku
od njega zahtjevaju.
3.) ASIC (application-specific integrated circuit) je integrirani sklop projektiran za za opću upotrebu
(npr. čip dizajniran isključivo za mobilni telefon bio je ASIC). Kako je tehnologija iz godine u godinu
napredovala maksimalna složenost ASIC-a je također rasla (od 5000 logičkih vrata do nekoliko
milijuna). Moderni ASIC-i često uključuju 32-bitni procesor, memorijske blokove uključujući ROM,
RAM, EEPROM, Flash itd. Dizajneri ASIC-a koriste se HDL-om (hardware description language) kao
što su Verilog ili VHDL kako bi opisali funkcionalnost ASIC-a.
4.) PLC Prvi programibilni logički kontroleri (PLC) razvijali su inženjeri General Motors-a 1968., kada
su pokušali pronaći alternativnu zamjenu za složene relejne kontrolne sustave.
Novi kontrolni sustav morao je zadovoljiti slijedeće zahtjeve:
• Jednostavno programiranje,
• Programske izmjene bez sistemskih intervencija (bez mijenjanja ožičenja),
• Manje, jeftinije i pouzdanije komponente od relejnih kontrolnih sustava,
• Jednostavno i jeftino održavanje
Prema DIN EN61131-1 (1994.) programabilni logički upravljač (kontroler) jest digitalni elektronički
sustav za uporabu u industrijskom okolišu s programabilnom memorijom za internu pohranu u primjeni
orijentiranih upravljačkih naredbi kod implementiranja specifičnih funkcija kao što su npr. logičko
upravljanje, slijedno upravljanje, funkcije odbrojavanja, funkcije brojenja i aritmetičke funkcije,
Osnovna namjena PLCa je upravljanje, putem digitalnih ili analognih ulaznih i izlaznih signala,
različitim vrstama strojeva ili procesa.
Glavni djelovi PLC-a su:
8
Izlazni modul također posreduje između centralne jedinice i automata. Njegove zadaće su:
Izlazne stezaljke
Centralna
procesorska
jedinica
p
MEMORIJA
Program Podaci
Optoizolacija Optoizolacija
9
3 Osnovni sklopovski elementi za ''on line'' način rada
Shematski prikaz sustava koji radi u ″on line″ načinu rada prikazan je slikom 3.1. Proces je sredina
koja se mjeri te upravlja računalom. Računalo služi za obradu podataka prikupljenih iz procesa.
Središnji dio služi za povezivanje procesa i računala, koji ćemo sada razmotriti.
Senzori mjere razne fizikalne veličine (temperatura, pritisak, vlažnost, protok, kut zakreta, brzina,
itd.) te ih pretvaraju u odgovarajuće električne veličine (napon, struja, frekvencija, faza itd.). Mjeriti se
mogu različite pojave kao što je vodostaj rijeke, brzina toka iste, temperatura kotla termoelektrane,
rastezanje željeza pri zagrijavanju, itd. Senzori se još i nazivaju mjerni pretvornici. Osobitosti o kojima
treba voditi računa pri korištenju senzora je točnost, sposobnost približavanja pravoj vrijednosti
fizikalne veličine, a koja se ogleda u sljedećim parametrima:
• Statička greška - odstupanje između pokazane i stvarne vrijednosti fizikalne veličine kada se
ova ne mijenja. Obično se daje u postocima prema najvećoj vrijednosti koja se može mjeriti.
• Dinamička greška - koliko senzor "kasni" za promjenama fizičke veličine. Svaki senzor
posjeduje dinamičku grešku. Ova greška nestaje kad se fizikalna veličina prestane mijenjati.
• Greška ponovljivosti - je najveće odstupanje od srednje vrijednosti pri ponovljenom mjerenju
nepromijenjene fizikalne veličine.
• Mrtvo vrijeme - predstavlja vrijeme potrebno da se promjene fizikalne veličine počnu iskazivati i
na izlazu iz senzora.
• Mrtva zona - je najveća promjena fizikalne veličine do koje se na izlazu iz senzora još uvijek ne
očitavaju promijene.
Od senzora se u osnovi traži da ne djeluju na svojstva ili ponašanje sredine u kojoj se nalaze. U
on-line sustavima se nalazi mnogo analognih veličina stoga signal treba filtrirati, ispraviti (linearizirati) i
kondicionirati da bi se analogni signal mogao digitalizirati u A/D pretvorniku.
Postoje dva načina rada. Prvi je da se mjerene veličine prikazuju čovjeku te on odlučuje kako će
reagirati i drugi način je kada računalo samo djeluje u procesu. To znači da računalo iz samog
procesa preko senzora uzima željene informacije te od dobivenih mjernih veličina pomoću određenih
algoritama donosi zaključke, a nakon tih zaključaka djeluje na sustav preko izvršnih organa. Izvršni
organi mogu biti prekidač, elektromotor koji upravlja ventilom, regulator izgaranja na ložištu itd.
Senzori i izvršni organi za svaki sustav su specifični.Više o tome smo rekli kod on-line sustava na str.
7.
10
3.2 Analogna obrada signala
Električni signali koji dolaze iz senzora imaju različite oblike. S druge strane za analogno-digitalni
pretvarač signali su standardnh veličina (0 - 5 VDC, 0 - 10 VDC, –10 do +10 VDC, 0 - 20 mA, 4 - 20
mA), standardizirani. Da bi se to postiglo potrebna je elektronička obrada signala. Signal je potrebno
propustiti kroz elektronički sklop koji će mu dati oblik i veličinu, no ne smije se oštetiti informacija koju
taj signal nosi. Signal je potrebno linearizirati, pojačati i filtrirati. Da bi signal doveli u željeno analogno
područje često koristimo pojačala s povećanjem većim od 1, ali i s povećanjem manjim od 1. Zadatak
pojačala je da promjeni vrijednost analognih veličina i prenese ih u novo područje naponskih
vrijednosti, a da ne pokvari njihovu analognu informaciju (normiranje). Često se koriste i razni filtri
kojima je zadatak odstraniti šum. Karakteristika signala se može poboljšavati i na digitalan način, tako
da se senzoru doda mikroračunalo koje posebnim algoritmima oblikuje signal pa tek tada prenosi u
″glavno″ računalo.
3.3 Multipleksori
Da bi se upravljalo procesom potrebno je puno različitih senzora, rijetko kada nam je dovoljan
samo jedan. Mjerena veličina svakog senzora bit će prvo podvrgnuta analognoj obradi. Zatim svaka
mjerna veličina bi mogla imati svoj A/D pretvarač i svoj interface. Takvo rješenje bi bilo preskupo u
sustavima gdje se koristi nekoliko desetaka pa i nekoliko stotina senzora, pa se upotrebljava samo
jedan A/D pretvarač i interface. Kod takvog rješenja mora postojati multipleksor (slika 3.2b).
Multipleksor (engl. Multiplexer) ili selektor (engl. Data selector) je sklop kojim se podatak sa jednog od
više ulaza usmjerava (prenosi) na izlaz. S kojeg ulaza će se odabrati podatak i prenjeti na izlaz ovisi o
stanju posebnih ulaza za odabiranje (slika 3.2a). Broj ulaza za podatke N ovisi o broju ulaza za
odabiranje M.
N = 2M
D0
DN −1
S0 − S M −1
Na slici 3.2b. prikazana je logička shema multipleksora s četiri ulaza. Kada je potrebno odabrati
jedan od četiri ulazna podatka tada multipleksor treba imati dva ulaza za odabiranje podataka. Podaci
sa ulaza dovode se na sklopove ″I″. Koji sklop ″I″ će prenjeti podatak s ulaza na izlaz, preko sklopa
″ILI″ ovisi o kombinaciji na ulazima za odabiranje podataka S0 i S1 . To se može prikazati i tablicom
stanja slika 3.2b.
11
S1 S0
D0
D1
Y
D2
D3
Naravno postaje upitno kojim redom će se signali obrađivati. Samo po sebi se nalaže rješenje
redom kojim dolaze no to se rijetko primjenjuje. Brzina promjene pojedinih mjernih veličina je različita
pa tako i njihova gustoća uzimanja uzoraka ne može biti ista. Tako se npr. temperatura prostorije ne
može promijeniti u vremenu manjem od desetak sekundi, dok se promjena tlaka u parogeneratoru
mora mjeriti u milisekudama pa čak i češće (frekvencija uzorkovanja). Stoga se uzorci signala uzimaju
prema potrebi obrade mikroračunala. Znači mikroračunalo bira redoslijed obrade podataka prema
programu koji izvodi, šaljući adresu ulaznog podatka multipleksoru.
Sample & Hold sklop ima zadaću da u trenutku uzorkovanja očita vrijednost analognog signala na
ulazu te da ga zadrži sve do sljedećeg uzorkovanja. Na neki način djeluje kao memorija za pamćenje
analogne vrijednosti između uzorkovanja kako se na ulazu u A/D sklop ne bi mijenjala vrijednost
tijekom pretvorbe.
Stvarni Sample & Hold sklop uz sklopku i kondenzator, sadrži i serijski otpor sklopke i vodiča ali i
unutarnji otpor izvora signala R1, te paralelni otppor R2 (slika 3.3.). Vremenska konstanta R1C mora
biti puno manja od vremena T0N, kada je sklopka S zatvorena, a vremenska konstanta R2C mora biti
puno veća od intervala uzorkovanja TS.
12
Sl. 3.4. Shema S&H sklopa
Kašnjenje koje nastaje pri povratku iz stanja zadržavanja u stanje praćenja ograničava frekvenciju
uzimanja uzoraka.
Digitalni sustavi koji služe za mjerenje, regulaciju ili automatizaciju na svome će ulazu i izlazu u
pravilu imati analognu veličinu. Najveći je broj procesa u prirodi analogan, a to vrijedi i za mnoge
veličine u tehničkim sustavima. Da bi računalo moglo obrađivati te signale potrebno ih je kodirati,
diskretizirati po vremenu i amplitudi, tek tada kada su pretvoreni u binarne brojeve mogu se unositi u
računalo. Zbog toga je potrebno imati uređaje za automatsko pretvaranje između tih dvaju načina
prikaza veličina. Proces kvantizacije predstavljat će mjerni proces u kojemu se konstatira koliko
standardnih mjernih jedinica sadrži mjerna veličina. Idealna karakteristika A/D pretvorbe prikazana je
na slici 3.6. kao i blok shema A/D pretvarača. Pretvorba analogne veličine u digitalnu (i obratno)
inherentno je diskontinuirani proces. Proces pretvorbe sastoji se u tome da se ulaznoj veličini koja se
nalazi u nekom određenom naponskom intervalu pridruži određeni broj n. U idealnom slučaju
naponski su intervali (ili koraci) jednake širine U K i ponekad se nazivaju kanalima. Jedna je od
osnovnih karakteristika A/D i D/A pretvorbe broj koraka odnosno kanala koji određuju rezoluciju.
13
Rezolucija ili razlučivanje je širina kanala kao postotak maksimalnog ulaznog napona ili
jednostavno njihov omjer. Ako je nM maksimalni broj koji odgovara maksimalnom ulaznom naponu
UM, onda je širina koraka jednaka UM/nM, pa se rezolucija svodi na 1/nM. Budući da je broj n izražen
k
binarno sa k bita, maksimalni je broj 2 – 1, pa je uobičajeno da se rezolucija jednostavno izražava
kao broj bita što ih ima ulazni ili izlazni podatak.
ua - ulazni napon
n - broj bita
nM - maksimalni broj bita
UM - maksimalni ulazni napon
UK - naponski interval (korak)
14
Da ne bi signal previše izobličili A/D pretvorbom potrebno je dobro provesti diskretizaciju. To znači
da koraci kojima se uzima signal kod diskretizacije moraju biti gusti po vremenu da se ne izgubi ni
jedan harmonik ulaznog signala, a po amplitudi treba imati dovoljnu veliku razlučivost da bi razlikovala
male promjene amplitude. A/D pretvorba je povremeno mjerenje vrijednosti signala ako se promatra
kao proces. Kako je signal promjenjiv moramo u određenom trenutku uzeti uzorak (sample) signala i
tu vrijednost privremeno pohraniti (hold). S & H izvodimo jer mjerenje nije moguće izvesti trenutno već
ima određeno trajanje. Shannonov teorem govori da se pri uzimanju uzoraka iz nekog kontinuiranog
signala uzorci moraju uzimati barem dvostruko većom frekvencijom nego što je frekvencija najvišeg
harmonika koji se uzima u obzir pri razmatranju.
Imamo dvije osnovne vrste A/D pretvarača:
ua
up
A/D pretvarač koji ulazni analogni napon pretvara najprije u odgovarajući vremenski interval
prikazan je na slici 3.8. Ulazna analogna veličina ua nalazi se na jednom od ulaza naponskog
komparatora K. Na drugom ulazu je napon 0, pa je izlaz komparatora na niskoj razini. Proces
pretvorbe započinje impulsom START koji postavlja bistabil u 1. Time se otvara ulaz u brojilo i brojilo
počinje brojati impulse iz generatora impulsa. Istovremeno je pobuđen i generator pilastog napona koji
je spojen na drugi izlaz komparatora. Rad sklopa može se pratiti pomoću dijagrama na slici 3.9. Kada
pilasti napon naraste do vrijednosti ulaznog napona, izlaz iz komparatora odlazi na visoku razinu i
vraća bistabil u stanje 0. Time završava pretvorba napona u vrijeme. Za vrijeme T dok je ″I″ sklop
otvoren impulsi iz generatora pokreću brojilo, a nakon završetka pretvorbe stanje brojila pokazuje
traženu digitalnu veličinu u koju je pretvoren ulazni napon.Treba napomenuti da točnost pretvorbe
ovisi o stabilnosti frekvencije generatora impulsa i o linearnosti i stabilnosti pilastog napona.
15
Sl.3.9. Princip rada Wilkinson-ovog A/D pretvarača
Pretvarač radi tako da se produženi ulazni napon iz produživača uspoređuje s naponom u obliku
stepenica (slika 3.12.). Pri tome prva stepenica ima veličinu Umax/2, druga Umax/4, treća Umax/8, itd.
Gdje je Umax najveći ulazni napon koji se može pretvarati. Zbog takvog načina rada taj tip A/D
pretvarača zove se i A/D pretvarač sa sukcesivnom aproksimacijom. Ako je stepeničasti napon, koji
predstavlja sumu svih stepenica, manji od produženog ulaznog napona, onda do tada generirane
stepenice ostaju. Kada stepenasti napon postane veći, briše se doprinos stepenice koja se pojavila
posljednja i izazvala prekoračenje ulaznog napona. Tako na kraju usporedbe ostaju samo one
stepenice čija je suma približno jednaka veličini ulaznog napona, odnosno neznatno niža od njega.
Generiranjem svake naponske stepenice upravlja jedan bistabil, propuštajući kroz zajednički otpornik
struju proporcionalnu težinskoj vrijednosti toga bistabila u binarnom brojevnom sustavu. Tako bistabil
najmanje težinske vrijednosti B0 upravlja strujom I0 stvarajući najmanju stepenicu napona, sljedeći po
redu bistabil B1, upravlja strujom 2I0 stvarajući tako dvostruko veću stepenicu, itd. Bistabili se
postavljaju u stanje 1 nizom uzastopnih impulsa. Prvi od tih impulsa postavi u stanje prvi bistabil
najveće težinske vrijednosti, koji ukljući odgovarajuću struju, i napravi najveću stepenicu Umax/2. Zatim
se uključuje sljedeći bistabil po težinskoj vrijednosti, koji stvori stepenicu Umax/4, itd.Kada suma
stepeničastog napona prekorači veličinu ulaznog napona, uspoređivač pošalje signal o
prekoračenju.Taj signal postavi u nulu bistabil koji je generirao posljednju stepenicu, zbog toga
prestane teći ona struja kojom upravlja taj bistabil pa nestane i njegova stepenica. Kada se tako
izredaju svi bistabili i njihove stepenice, pretvorba je završena, a stanje bistabila u obliku binarnog
podatka predočavaju na digitalni način veličinu ulaznog napona.
16
Sl. 3.12. A/D pretvarač sa sukcesivnom aproksimacijom
17
c) Sigma-delta A/D pretvarači
Na gornjoj slici ulazni naponski signal VIN je doveden na integrator, čiji izlaz se preko komparatora
uspoređuje s referentnom naponskom nulom pretvarača. D-bistabil kontrolira preklopnik s kojim
uključujemo/isključujemo referentni napon na ulazu u integrator. Kako ulazni napon raste ili pada,
komparator uključuje ili isključuje referentni napon, koji se oduzima od ulaznog signala, s težnjom da
zadrži nulu na izlazu integratora.
Brojač C1 konstantno broji impulse dobivene iz generatora takta, dok brojač C2 samo broji
impulse kada je preklopnik zatvoren. Pretpostavimo da je kapacitet brojača C1 1000. Nakon svakog
perioda od 1000 impulsa, broj u brojaču C2 je proporcionalan srednjoj vrijednosti ulaznog signala.
Digitalno filtriranje prikazuje rezultate u dugoj prikrivenosti između početka ciklusa uzorka i prvog
ispravnog digitalnog izlaza. Značajno zaostajanje između digitalnog izlaza i njegovog trenutnog
pratećeg uzorkovanja. Ove karakteristike sprječavaju korištenje ovih pretvarača u složenim sistemima
– nakon prebacivanja iz jednog kanala u drugi zahtjeva se mnogo vremenskih ciklusa za postavljanje
digitalnog filtriranja.
18
Razlike u odnosu na alternativne tehnologije:
19
3.6 Digitalno analogni pretvarač
Digitalni signal ima mnoge svoje prednosti, ali je ipak analogni signal u mnogo slučajeva pogodniji.
Na primjer, u regulacijskoj tehnici zbog izvršnog sklopa analogne prirode potrebno je digitalne signale
pretvoriti u analogne.
2n−1
U iz
20
D/A pretvarač nam je potreban da bi digitalni signal dobiven iz računala pretvorili u odgovarajući
analogni signal najčešće napon ili struju. On nam je potreban za prikaz podataka na CRT monitoru.
D/A pretvarač radi tako da svaki bit binarnog podatka upravlja određenim iznosom električne struje
proporcionalnog težinskoj vrijednosti tog bit-a. Tako bit najmanje težinske vrijednosti B0 upravlja
strujnim iznosom I0, B1 upravlja strujom 2I0, B2 strujom 3I0, itd. Sve struje teku u istu točku te je
konačan iznos određen binarnim brojem zbroj svih struja. Propuštanjem te struje kroz otpornik dobije
se napon. Šiljci prijelaznog napona vezani su uz kontinuiranost veličine (slika 3.15.).
n
1000
0111
20
3.7 Međusklop (Interface)
Međusklop (eng. interface) služi za povezivanje računala sa vanjskim uređajima. Vanjski sklopovi
imaju drugačiji način rada koji je neovisan o načinu rada digitalnog računala. Zadatak međusklopova
je da ta dva različita načina rada uskladi tako da čine cjelinu. Pošto su vanjski sklopovi jako različiti,
međusklopovi trebaju biti sastavljeni od standardnih elektroničkih dijelova. Mikroračunala imaju
posebne LSI-komponente za prijenos podataka između mikroprocesora i vanjskih jedinica, koje se
programski prilagođavaju specifičnim vanjskim jedinicama. To omogućava fleksibilnost i jednostavnost
međusklopova. Treba spomenuti da postoje standardni LSI-sklopovi za ulazno – izlazni prijenos. Ti
LSI-sklopovi se rade za standardne vanjske jedinice kao što su disketna jedinica, tipkovnica, itd.
Neposredni ulazno – izlazni prijenos se vrši paralelno, znači da se svi bit-ovi jedne riječi prenose od
jednom (to su međusklopovi u užem smislu).
Uređaji za povezivanje udaljenih jedinica s računalom koriste serijsku vezu jer paralelna nije
praktična zbog broja vodiča, znači prenosi se bit po bit. Najprije treba paralelne podatke pretvoriti u
serijske te se na prijemnom mjestu opet pretvaraju u paralelne. Svi potrebni sklopovi za povezivanje
na daljinu se također zovu interface, mada bi bilo prikladnije reći interface u širem smislu, jer oni
sadrže interface u užem smislu, paralelno/serijsku i serijsko/paralelnu pretvorbu.
Uređaji koji koriste serijsku komunikaciju koriste dvije vrste kabela i to: DCE (Data
Communications Equipment) i DTE (Data Terminal Equipment). DCE koriste modemi, printeri i sl. dok
se DTE koristi za vezu između PC korisnika.
U/I kanali su priključci ili ulazno/izlazni sklopovi koji omogućuju povezivanje računala sa različitim
vanjskim uređajima ili s uređajima unutar kučišta sustava.
a) parelelni
b) serijski
a) Paralelni prijenos podataka ukazuje na istovremeni prijenos bitova preko više komunikacijskih
vodova. Sklopovi su standardni i direktno su povezani sa sve tri sabirnice. Sklop ima svoj registar
(privremenu memoriju) koja ima svoju adresu pa mikroprocesor lako na njega prenese podatke.
Nečelo paralelnog prijenosa prikazan je na slici 3.17.
21
Sl. 3.17. Načelna shema osam bitnog paralelnog prijenosa
Prikazani sustav paralelnog prijenosa podataka razvila je tvrtka CENTRONICS, pa se često tako i
naziva. Kako bitovi prolaze istovremeno, prijenos je brži od serijskog prijenosa, ali je neprikladan za
udaljene veze zbog velikog broja vodiča u spojnom kabelu. Efikasna duljina je 10 m.
b) Serijski prijenos podataka. Za razliku od paralenog prijenosa, kod serijskog se podaci šalju po
jednoj žici. Da bi se podaci sa sabirnice mogli redosljedno poslati preko serijskog sučelja, u sklopu
sučelja obavezno su ugrađeni registri posmaka koji omogućavaju pretvorbu paralelnog prihvata u
serijsko odašiljanje i obratno.
22
Sl. 3.20. UART
Najčešći tip prijenosnog puta u procesima je RS-232C. Postoje i RS-422 (baziran na strujnoj petlji
od 4 do 20mA). RS-232C baziran je na naponskom prijenosu, ali na izlazu i ulazu su različiti naponi.
Na izlazu se napon kreće od -15 do +15V, na izlazu od -3 do +3V. Brzine prijenosa su do 20Kb/s. RS-
422 podržava vodove do kilometra i veće brzine prijenosa (do 100Kb/s).
Postoje dva tipa prijenosa s obzirom na vremensku usklađenost prijenosa:
• Sinkroni
• Asinkroni
Asinkroni način prijenosa podataka najčešće se upotrebljava pri malim brzinama prijenosa tj. kada
se prenosi relativno malo bitova u sekundi, jer su tada prihvatljive veće međusobne razlike taktnih
signala, odašiljača i prijemnika. Za veće brzine prijenosa upotrebljava se sinkroni prijenos koji mogu
prenositi nekoliko puta više bitova u sekundi. Pri asinkronom načinu prijenosa odašiljač i prijemnik
imaju odvojene izvore taktnih signala pa je potrebno relativno velika usklađenost, odnosno točnost tih
signala. Pri sinkronom prijenosu to nije problem jer isti taktni signali određuju mjesto svakog bita koji
se prenosi i u odašiljaču i u prijemniku. Inače je način rada pri sinkronom serijskom prijenosu sličan
radu pri asinkronom prijenosu. Postoji odašiljač koji paralelne podatke pretvara u serijske, i prijemnik
što dolazeće impulse prihvaća i formira podatak spreman za daljnji paralelni prijenos.
Kod asinkronog prijenosa podataka nema informacije o taktu uključenog u samoj poruci, već se
koristi česta resinkronizacija koristeći se start i stop bitovima.
Prijenos podataka počinje start bitom, a završava stop bitom. Osim start i stop bita može se slati i
paritetni bit, koji štiti od jednostruke pogreške. Također ne može detektirati koji je bit krivo poslan, a ne
može detektirati ni višestruke pogreške.
23
3.8 Paritetni sklop
Paritetni sklop koristi se kao generator i ispitivač pariteta pri prijenosu digitalnih signala. Za
siguran prijenos kodiranih podataka u digitalnim sustavima vrlo često se koristi metoda pariteta.
Svakoj binarnoj kombinaciji, kojom se pokazuje podatak, dodaje se tzv. paritetni bit kako bi ukupan
broj jedinica bio uvijek paran (metoda parnog broja jedinica) ili neparan (metoda neparnog broja
jedinica).
Na mjestu odakle se odašilje digitalni signal paritetni sklop djeluje kao generator paritetnog bita.
Sklop ispituje broj jedinica u podatku i generira paritetni bit. Ako 4-bitni podatak ima parni broj jedinica
generator pariteta na izlazu daje stanje 0, ako podatak sadrži neparan broj jedinica, generator pariteta
daje na izlazu stanje 1. Time se postiže da je ukupan broj jedinica podataka i paritetnog bita uvijek
paran (slika 3.22.).
24
3.10 Računalo
Računalo je ''mozak'' jednog ″on line″ sustava. Ono omogućava brzu reakciju i korekciju u
sustavu. Tako na primjer, na temelju prikupljenih meteoroloških podataka računalo danas izračunava
vremensku prognozu za sutra, za to bi ljudima koristeći meteorološke algoritme trebalo možda mjesec
dana i tada bi ti podaci bili nevažni. Koristeći računalo ti podaci mogu biti obrađeni u vrlo kratkom
vremenu pa ta vremenska prognoza postaje upotrebljiva. Računala tako mogu biti korištena u različite
svrhe, a to im omogućuje programibilnost. Program koji je unesen u računalo prilagođava računalo
određenom sustavu. Gotovo za svaki sustav računalo je sklopovski isto, moguće su male modifikacije.
3.10.1 Mikroprocesor
Značajke mikroprocesora:
3.10.2 Mikrokontroler
Mikrokontroler je elektronički uređaj koji, slično kao i računalo, ima zadaću da zamjeni čovjeka u
kontroli dijela proizvodnog procesa ili gotovo cijelog proizvodnog procesa. Iz svakodnevne prakse pri
uporabi računala opće namijene tip PC-a već je poznato da je standardni ulaz tipkovnica i miš
(eventualno upravljačka palica), dok je standardni izlaz monitor ili pisač. Teško je definirati što će biti
standardni ulaz i izlaz mikrokontroleru. Razlog tome je što su mikrokontroleri uglavnom dizajnirani za
specifične zadaće vrlo raznolike od slučaja do slučaja. Primjera ima mnogo, od jednostavne regulacije
osvjetljenja, alarmnih sustav, pa dao upravljanja robotima u industrijskim pogonima. Ulazi mogu biti
vrlo jednostavne izvedbe kao na primjer prekidač u sklopu plovka za nadzor najvećeg ili najnižeg
nivoa tekućine u spremniku. Mikrokontroler tada ima za obradu samo dva stanja koje opisuje jedan bit.
Složenije je praćenje ako treba pratiti stvarnu razinu nivoa tekućine u spremniku. Tada treba definirati
koliko će se nivoa pratiti i tu će se upotrijebiti nekakav potenciometarski sklop koji će mikrokontroleru
predati određenu analognu vrijednost koju će ovaj potom pomoću A/D pretvornika obraditi i isporučiti
odredištu. Ako je pak povezan s fotoćelijom za brojanje predmeta po načelu prekidanja svjetlosnog
snopa radi se o izravnom brojanju impulsa tijekom rada neovisno o vremenu.
Dakle, ulazi mogu biti analogne i digitalne prirode i u suštini podatke će isporučivati nekakav
mjerni pretvornik (senzor).
25
Izlazi iz mikrokontrolera također mogu biti analogne i digitalne prirode. Analogni izlazi, bilo
naponski ili strujni, mogu se elektromehaničkim sklopovima pretvoriti u neku korisnu radnju kao
promjena položaja nekog predmeta, povećanje brzine vrtnje motora i slično. Najjednostavniji primjer je
lampica upozorenja koja upozorava čovjeka na promjenu ili neispravnost. Složeniji izlaz biti će kada
se želi pratiti veličina promjene bilo kao analogni ili digitalni prikaz.
Naravno, ulaz i izlaz mikrokontrolera nije isključivo vezan na komunikaciju sa strojem. Uglavnom
kontroler ima neki vid komunikacije prema korisniku, na primjer s lampicama ili s digitalnim
pokazivačem. No nisu rijetki slučajevi da se za komunikaciju s čovjekom koristi računalo tipa PC.
Iz navedenog može se zaključiti da se mikrokontroleri prema načinu izrade i komunikacije s
okolišem mogu svrstati u jednu od dvije osnovne kategorije:
U suštini mikrokontroler radi na načelu vrlo bliskom računalu. On je uistinu malo računalo, a
složenost mu ovisi o složenosti zadaće koju ima nadzirati.
26
- Aritmetičko-logička jedinica (izvršna jedinica) ALU izvršava osnovne aritmetičke i logičke
operacije (+, -, posmak, komplementiranje, logičke operacije I i ILI)
- Akumulator A služi za privremeno pohranjivanje jednog od operanada (podataka nad kojima
se obavlja aritmetička ili logička operacija). Rezultat operacije se najčešće ponovo pohranjuje
u akumulator. Akumulator sudjeluje i u prijenosu podataka između procesora i ostalih
komponenti računala, odnosno vanjskog svijeta.
- Programsko brojilo PC (engl. Program Counter) je registar koji sadrži adresu sljedeće
instrukcije koja će se izvesti. Upravljačka jedinica ga automatski inkrementira.
- Instrukcijski registar IR je registar u kojem je zapisan operacijski kod čije je izvršavanje u
tijeku. Operacijski kod je binarni kod kojim je pojedina instrukcija prikazana i zapisana u
memoriji računala.
- DC (engl. Data Counter) je registar u kojem je zapisana adresa memorijske lokacije na kojoj
se nalazi operand, pa se taj registar naziva brojilo podataka.
- Privremeni registar WR (Work Registar) je povezan s jednim od ulaza u aritmetičko-logičku
jedinicu i služi za privremeno pohranjivanje jednog od podataka koji sudjeluju u aritmetičkoj ili
logičkoj operaciji. Ovaj privremeni registar nije element programskog modela mikroprocesora.
- Interna sabirnica – skup linija za prijenos podataka koje su izvedene na samom
mikroprocesorskom čipu. Omogućava prijenos podataka između pojedinih registara,
aritmetičko-logičke jedinice i upravljačke jedinice. Interna sabirnica je preko međuregistara,
odnosno sabirničkog sučelja povezana s vanjskom sabirnicom.
- Upravljačka jedinica – sastoji se od sklopova za dekodiranje instrukcije i upravljačkih
sklopova. Upravljački sklopovi u skladu s operacijskim kodom instrukcije koja se izvršava
generiraju niz upravljačkih signala. Ti signali upravljaju prijenosom podataka između registara
i aritmetičko-logičke jedinice, aktiviraju promjenama vrijednosti programskog brojila,
omogućavaju prijenose podataka između procesora i memorije i sl. Sve operacije unutar
mikroprocesora sinkroniziraju se signalom vremenskog vođenja (takt). Događaji u
mikroprocesoru odvijaju se u točno utvrđenim diskretnim vremenskom trenucima.
a) registri opće namjene (služe za privremenu pohranu podataka koji se obrađuju, odnosno
operanada, međurezultata, rezultata, pohranjuju kazala koja upućuju na pojedine memorijske
lokacije)
b) namjenski registri (programsko brojilo [program counter], kazalo stoga [stack pointer],
registar stanja programa [program status word, statusni registar])
c) namjenski registri kojima korisnik ne može pristupiti (IR – registar instrukcija, privremeni
registar)
CISC arhitektura (slika 3.25.) je starija arhitektura od RISC, osmislio ju je Von Neumann 1945.
godine. Sustavno je opisao osnovnu građu i djelovanje računala, a na njegovom se modelu temelje i
današnja računala (slika 3.24.).
27
Sl. 3.24. Van Neumannov model računala
Da bi popravili performanse CISC arhitektura pokušava smanjiti broj instrukcija koje program mora
pozivati. Da bi to napravili moraju imati velik broj mikro instrukcija koje pokrivaju velik raspon
zadataka. Jedna mikroinstrukcija, kad se dekodira u procesoru može postati nekoliko zadataka (tasks)
koje procesor mora izvršiti. Kao posljedica, instrukcije su varijabilne duljine i često zahtjevaju više od
jednog takta za njihovo izvršavanje. Kao što vidimo na slici 3.25. CISC arhitektura koristi samo jednu
sabirnicu koja služi kao podatkovna i kao adresna sabirnica.
Sl. 3.25. Pojednostavljena shema CISC arhitekture ili Von Neumann-ove arhitekture
• proširenje instrukcije
• kompleksne strojne instrukcije
• dekodiranje instrukcija
• razni načini adresiranja memorije
• relativno malo registara
• viši radni takt
RISC arhitektura (slika 3.26.) računala nastala je na Sveučilištu Harvard. RISC arhitektura
pokušava poboljšati performanse reduciranjem broja taktova potrebnih za izvršavanjem zadatka.
Imaju mali set pojednostavljenih instrukcija, izvršavajući cijeli mikro kôd odjednom. Ovo znači da
zadatak treba više instrukcija koje su jednake duljine i obično trebaju jedan takt za izvršavanje. Zbog
ovoga, RISC sustavi su sposobni procesirati više instrukcija paralelno (pipelining). Procesor radi više
instrukcija odjednom, počevši drugu instrukciju prije završetka prve. Ovo značajno povećava
propusnost i čini RISC bržim od CISC-a. Vidimo na slici 3.26. da ova koncepcija koristi dvije sabirnice.
Time se postiže veći protok informacija. Odvajanjem sabirnica omogućava se da instrukcije mogu biti
veće od 8 bit-a. PIC16F84 koristi 14 bit-a za instrukcije što dozvoljava da sve instrukcije budu od
jedne riječi i svaka instrukcija se izvršava u jednom ciklusu osim instrukcija skoka i grananja.
28
Sl. 3.26. Pojednostavljena shema RISC arhitekture ili Harvard-ske arhitekture
29
Svim mikrokontrolerima su zajednička sljedeća svojstva:
Dio mikrokontrolera koji je zadužen za čuvanje podataka. Memorija mora biti u mogućnosti da čita
i zapisuje podatke. Zato postoji linija Č/P, ako je Č/P = 1 onda se vrši čitanje u suprotnom vršimo upis.
• Adresno polje – sve moguće lokacije koje neka procesorska jedinica može adresirati (ne moraju
biti iskorištene baš sve adrese)
• Sa prvi bajt može se adresirati 256 lokacija, dok se sa dva bajta može adresirati i do 64 K
lokacija
• Moćno mikroračunalo mora imati različite načine adresiranja
• neposredno – naredba sadrži sam podatak s kojim se radi. Podatak može biti 8 ili 16 bitni. Za
dohvat 2 bajta podatka dovoljna su tri zahvata u memoriju. To je vrlo brz način adresiranja.
30
• direktno (izravno) – prvi bajt je operacijski kod koji govori koja se operacija radi sa podatkom, a
drugi i treći bajt naredbe pokazuju lokaciju memorije gdje se nalazi podatak koji se želi obraditi.
Ovakvim načinom adresiranja može se doduše adresirati bilo koja lokacija u adresnom polju, ali
za dobivanje samo adrese operanda potrebna su dva zahvata u memoriju, to je vrlo spor način
adresiranja.
• indirektno (posredno) – drugi i treći bajt naredbe pokazuju adresu lokacije(pointera) gdje se
nalazi adresa podatka koji se obrađuje. To je vrlo neekonomično adresiranje, jer za dohvat
podatka treba puno zahvata u memoriju. Prednost je da se stvarna adresa operanda može
programski mjenjati, mjenjanjem sadržaja pointera tijekom izvođenja programa bez potrebe
mijenjanja glavnog programa.
• segmentno – zasniva se na činjenici da se programi većinom vrte u jednom dijelu (segmentu)
memorije.
MMU (jedinica za upravljanje memorijom) - zadatak Memory Management Unit je da podjeli memoriju
na više segmenata. Tako podijeljena memorija se adresira segmentno.
Mikroprocesor (CPU) je najvažniji elektronički sklop računala, koji preuzima programske naredbe i
na osnovu njih obrađuje podatke. Naziv ''mikro’’ koristi se zbog malih dimenzija. Sadrži do nekoliko
milijuna tranzistora ukomponiranih na silicijskoj pločici upakiranoj u plastično kućište.
Vrijeme izvođenja instrukcija je reda mikrosekunde, a broj instrukcija i veličina binarnog podatka
osnovni su parametri koji definiraju kvalitetu mikroprocesora. Mikroprocesori koji se u računalnim
sustavima opće namjene koriste dizajnirani su za rad s podacima duljine 4, 8, 16, 32 i 64 bit-a.
Na slici 3.29. prikazan je primjer centralne procesorske jedinice sa tri registra, registri su dakle
memorijske lokacije čija je uloga da pomognu pri obavljanju raznih matematičkih operacija ili bilo kojih
drugih operacija sa podacima gdje god da se oni nalazili. Imamo dvije nezavisne cjeline (memoriju i
CPU) koje nisu međusobno povezane , čime je spriječena bilo kakva razmijena podataka. Ako
naprimjer želimo zbrojiti sadržaj dvije lokacije iz memorije i njihov rezultat ponovo vratiti u memoriju
potrebna nam je veza između memorije i CPU, tj. moramo imati neki ″put″ preko kojeg podaci idu iz
jednog bloka u drugi, a ti ″putevi″ se zovu sabirnice.
31
3.10.8 Sabirnica
Prijenos podataka između sklopova unutar mikroprocesora i unutar računala vrlo je značajan dio
posla, a obavlja se preko SABIRNICA (BUS), višežilnim prenosnim putevima između pojedinih
sklopova. Broj vodova sabirnice ovisi o broju bit-a koji opisuju podatke koje je potrebno prenjeti. U
suštini prijenos podataka je paralelan.
Dakle postoje dva osnovna sustava sabirnica:
Međusobno su odvojene međusklopovima jer se često promet na njima ne odvija istom brzinom.
Razmjena podataka u mikroprocesoru obavlja se višestruko brže nego između sklopova računala, te
ih je stoga potrebno odvojiti. O prijenosu podataka između unutrašnje i vanjske sabirnice brinu se
posebni upravljači (controller).
Unutarnja i vanjska komunikacija odvija se preko tri odvojene sabirnice:
Naravno, komunikacija posredstvom triju sabirnica ubrzava sustav. Podatku, koji je na sabirnici
podataka, preko adresne sabirnice određuje se mjesto na koje će se uputiti, a upravljačka sabirnica će
prijenos odobriti.
MEMORIJSKA LOKACIJA 0
MEMORIJSKA LOKACIJA 1
REGISTAR 2
REGISTAR 3
MEMORIJA PODACI
ADRESE
Kontrolne linije
MEMORIJSKA LOKACIJA n
Č/P CPU
Sl. 3.30. Primjer komunikacije memorije i centralne procesorske jedinice pomoću sabirnica
32
3.10.9 U/I jedinica
Ove memorijske lokacije se nazivaju portovi. Portovi mogu biti ulazni, izlazni ili dvosmjerni. Kod
rada s portovima potrebno je prvo odabrati port s kojim se radi.
ULAZNI
REGISTAR PODACI
IZLAZNI
REGISTAR PODACI
PODACI
U/I
jedinica
Ovime smo mikrokontroleru omogućili povezivanje na daljinu. Paralelni prijenos nije pogodan za
velike udaljenosti zbog većeg broja vodiča. Da bi prijenos funkcionirao treba odrediti skup pravila po
kojima će se odvijati, skup pravila po kojem se vrši prijenos podataka nazivamo protokol. Serijski
prijenos podataka dijelimo na sinkroni i asinkroni. Sinkroni prijenos između dva uređaja radi pod
zajedničkim taktom. Asinkroni prijenos koristimo kad ne znamo frekvencijski takt drugog uređaja, ovu
vrstu prijenosa koristimo za slanje manjih podataka.
33
3.10.11 Slobodni brojač
Program u njega upisuje 0 svaki put kad kada se pravilno izvrši. Ako signal izostane, neće doći
do upisivanja 0 (znači da se mikrokontroler vrti u beskonačnoj petlji ), vrijednost brojača će se
povećavati do svoje maksimalne vrijednosti kada će sam resetirati mikrokontroler.
Na taj način onemogućava se duži nepravilan rad mikrokontrolera bez obzira na uzrok
neispravnosti. Ova metoda višestruko povećava sigurnost sustava kojeg mikrokontroler
nadzire/upravlja.
34
4 Mikrokontroler PIC 16F84
35
• zaštita koda
• SLEEP način rada ( za štednju energije)
• odabir vrste oscilatora
PIC 16F84 je 8-bit-ni mikrokontroler niske cijene, izveden CMOS tehnologijom. Izveden je u RISC
(Reduced Instruction Set Computer) arhitekturi. To znači da koristi dvije sabirnice, podatkovnu (8-bit-
na) i instukcijsku (14-bit-na). PIC 16F84 ima osam nivoa dubok stog i više prekidnih izvora, što
unutarnjih, što vanjskih. Istovremeno izvođenje i prihvaćenje slijedeće instrukcije omogućuje da se
svaka instrukcija izvrši u jednom instrukcijskom ciklusu, osim instrukcija skoka i poziva potprograma
(za koje su potrebna dva instrukcijska ciklusa). Također obično koriste 2:1 sažimanje koda i 4:1 veću
brzinu rada (na 20 MHz) od drugih 8-bit-nih mikrokontrolera iste klase. SLEEP način rada omogućuje
štednju energije. Iz takvog načina rada mikrokontroler se može vratiti u aktivno stanje putem prekida,
vanjskih ili unutarnjih, i/ili resetom. Te ima Watchdog timer sa vlastitim RC oscilatorom koji štiti od
softverskog ″zamrzavanja″ ili slučajne beskonačne petlje. Incircuit reprogramibilnost omogućuje
optimiranje programskog koda unutar sklopa, bez odvajanja mikrokontrolera od gotovog sklopa. To je
vrlo korisno u razvoju sklopova gdje mikrokontroler nije fizički dostupan, a prototip zahtjeva
optimizaciju.
MEM. ZA SLOBODNI
PODATKE BROJAČ
RAM
MEM. ZA
PODATKE CPU
EEPROM
PORT A PORT B
36
4.3 Raspored nožica
PIC 16F84 može raditi sa dvije različite konfiguracije oscilatora. A to su kristalni oscilator (XT) i RC
oscilator, radnog takta 4 MHz, 10 MHz ili 20 MHz ovisno o tipu mikrokontrolera. Slika 4.5. prikazuje
oblik signala dobiven iz oscilatora u trenutku uključenja, oscilatoru treba neko vrijeme ∆T da se
stabilizira na određenu frekvenciju.
37
C2
OSCI 1
XTAL
OSCI 2
C1
Vdd
OSCI 1
C
OSCI 2
U
+5
t
T
Sl. 4.5. Oblik signala pri uključenju oscilatora
38
4.5 Takt / instrukcijski ciklus
Takt doveden s nožice OSC1 u mikrokontroleru se dijeli na četiri nepreklapajuća takta koje
nazivamo Q1, Q2, Q3 i Q4 koji skupa čine jedan instrukcijski ciklus npr. TCY1.
Instrukcijske cikluse dijelimo:
Uzmimo za primjer instrukcijski ciklus TCY2. Na Q1 takt u instrukcijskom ciklusu TCY2 programski
brojač (PC) se uvećava za 1 te poziva instrukciju iz programske memorije. U sljedeća dva takta Q2 i
Q3 instrukcijskog ciklusa TCY2 instrukcija koja je bila pozvana i spremljena u instrukcijski registar u
prijašnjem TCY1 instrukcijskom ciklusu se dekodira i izvodi. U četvrtom taktu Q4 instrukcijskog ciklusa
TCY2 se instrukcija pozvana na Q1 sprema u instrukcijski registar.
Q3
Q4
PC
39
4.7 Reset
Reset služi da bi sve registre mikrokontrolera doveli u početni položaj. Znači ako se mikrokontroler
''smrzne'' ili smo ga tek uključili treba ga resetirati. Da bi spriječili slučajno dovođenje ''0'' na MCLR
nožicu, potrebno ju je preko otpornika spojiti na pozitivan pol napajanja Vdd, slika 4.7.
RA 2
Vdd RA 3
R RA 4
MCLR
Sl. 4.7.
1. Resetiranje pri dovođenju napajanja (Power-on Reset). Ovaj reset traje isto koliko treba
oscilatoru da stabilizira frekvenciju (∆T), slika 4.5. odnosno 72 ms
2. Dovođenje ″0″ na MCLR nožicu
3. Reset za vrijeme ″Sleep″ načina rada
4. Reset pri prekoračenju Watchdog timera
Ovaj impuls generira sam mikrokontroler ako napon napajanja padne ispod dozvoljene granice
koja je potrebna za normalan rad mikrokontrolera, te ga ″drži″ 72 ms u resetu koliko je potrebno da se
frekvencija stabilizira.
1.8 V
T
t
Sl. 4.8. Reset pri padu napona
40
4.8 Ulazno / izlazni sklopovi
PIC 16F84 ima dva porta, PORTA i PORTB. Portom nazivamo grupu ulazno/izlaznih nožica
(pinova) kojima možemo pristupati istovremeno. Fizički, port je registar koji je povezan s pinovima
mikrokontrolera. Svi pinovi portova se mogu definirati kao ulazni ili izlazni, prema potrebama sustava.
Definiraju se upisivanjem nule i jedinice u registru TRIS, upisivanjem ″1″ pin postaje ulazni a
upisivanjem ″0″ izlazni. Pošto imamo dva porta imamo i dva TRIS registra, TRISA i TRISB. PORTA i
PORTB se nalaze u banci 0 a TRISA i TRISB u banci 1.
Ovaj port ima pet pridruženih pinova, od RA0 do RA4. Pin RA4 može biti samo ulazni, jer se na
tom pinu nalazi i ulaz takta za brojač TMR0. Bitom T0CS u registru OPTION se bira funkcija (ulaz
takta ili standardni ulaz porta) ovog pina, točnije rečeno bira se izvor takta (vanjski ili nutarnji) brojača
TMR0.
U primjeru su pinovi RA0 i RA1 proglašeni kao izlazni a RA2, RA3 i RA4 ulazni.
PORTA
RA2
RA3
1
TRISA
0
PORTB ima 8 pridruženih pinova, od RB0 do RB7. Svaki pin ima pull-up tranzistor i njime se
definira linija na logičku jedinicu. Svim tranzistorima se upravlja pomoću samo jednog bita, RBPU
bitom OPTION registra. Četiri pina ovog porta mogu izazvati prekid RB4: RB7 i to samo ako su
konfigurirani kao ulazni.
41
bsf PORTB, 4 ;PORTB < 7 : 4 > = 0
bsf PORTB, 5
bsf PORTB, 6
bsf PORTB, 7
Primjer pokazuje kako su pinovi RB0, RB1, RB2 i RB3 proglašeni za ulazne, a pinovi RB4, RB5, RB6 i
RB7 za izlazne, te nakon čega su izlazni pinovi postavljeni u jedinicu.
PORTB
RB1
RB2
1
RB3
TRISB
0
PIC16F84 ima dva odvojena memorijska bloka, jedan za podatke i drugi za program. Blok za
podatke čini EEPROM memorija, GPR i SFR registri u RAM memoriji a programski blok čini Flash
memorija.
Programska memorija je izrađena u Flash tehnologiji što omogućuje programiranje
mikrokontrolera više puta pa čak i kada bude ugrađen u sustav. Ima 1024 lokacije širine 14 bit-a. Nulta
lokacija je rezervirana za reset a četvrta lokacija za prekid (interrupt).
Memorija za podatke se sastoji od EEPROM i RAM memorije. EEPROM memorija ima 64 lokacije
širine 8 bit-a (sl. 4.11) kojima se pristupa indirektno preko EEADR i EEDATA registara, sadržaj ove
memorije se ne gubi pri prekidu napajanja. RAM memorija ima 68 osmobitnih lokacija koje zauzimaju
prostor u memorijskoj mapi od 0x0C do 0x4F lokacije. Lokacije RAM memorije se nazivaju GPR
(General Purpose Registrers) registri.
SFR (Special Function Registers) registri zauzimaju prvih 12 lokacija u banci 0 i banci 1. To su
registri specijalne namjene i oni su direktno vezani za rad mikrokontrolera.
42
Sl. 4.11. Organizacija memorije
Podatkovna memorija je još podijeljena na dvije banke, BANK0 i BANK1. Banke se biraju preko RP0
bit-a u Status registru.
Primjer:
Programski brojač (PC) je 13 bit-ni registar koji sadrži adresu instrukcije koja se izvršava. Fizički je
realiziran pomoću 5 bit-nog registra PCLATH koji predstavlja 5 najviših bit-ova adrese i 8 bit-nog
registra PCL koji predstavlja preostalih 8 bit-a adrese.
43
4.9.2 Stog (Stack)
PIC 16F84 ima 13-bitni hardverski stog dubok 8 nivoa. Memorijski prostor stoga nije dio ni
programske ni podatkovne memorije, a pokazivač stoga nije moguće čitati i u njega upisivati
vrijednosti. Njegova osnovna zadaća je da sačuva vrijednost PC-a nakon što se iz glavnog programa
skoči na adresu potprograma. Da bi se program znao vratiti odakle je počeo mora sa stoga vratiti
vrijednost PC-a. Sadržaj sa stoga vraća se u programsko brojilo kod izvršavanja instrukcija RETURN,
RETLW ili RETFIE, koje se izvršavaju na kraju potprograma.
U status registru se upisuju aritmetički status ALU (C, DC, Z), reset status (TO, PD) i bit-ovi za
odabir memorijske banke (IRP, RP1, RP0). Ovaj registar može biti odredište za bilo koju instrukciju s
bilo kojim drugim registrom. Ako je status registar odredište instrukcije koja utječe na Z, DC ili C bit
tada je upis u ova tri bit-a je onemogućen.
C (Carry) – bit na koji utječu operacije zbrajanja i oduzimanja, bit je setiran kada se oduzima manja
vrijednost od veće
1 = pojavio se prijenos najvišeg bit-a rezultata
0 = nema prijenosa najvišeg bit-a rezultata
DC (Digit Carry) – isto kao i Carry samo ovaj bit predstavlja prijenos sa četvrtog mjesta
1 = pojavio se prijenos na četvrtom mjestu
0 = nema prijenosa
TO (Time-out) – bit je setiran nakon uključenja napajanja i izvršenja CLRWDT i SLEEP Instrukcije, a
resetira kad dođe do prekoračenja sigurnosnog brojača
1 = nije bilo prekoračenja sigurnosnog brojača
0 = došlo je do prekoračenja sigurnosnog brojača
RP1, RP0 (Register Bank Select) – bit-ovi za izbor memorijske banke, RP1 je uvijek «0»
01 = BANK 0
00 = BANK 1
IRP (Register Bank Select) – osmi bit za indirektno adresiranje RAM-a, ne koristi se kod PIC 16F84 i
ne smije biti setiran
0 = banka 2 i 3
1 = banka 0 i 1
44
4.9.4 Direktno adresiranje
Vrši se preko 9 bit-ne adrese koja se dobije povezivanjem sedmog bit-a direktne adrese iz
instrukcije i dva bit-a iz STATUS registra (RP1, RP0).
IRP1 IRP0 7 0
00 01
odabir
banke 00
odabir
lokacije
7F
BANK 0 BANK 1
Ovaj način adresiranja ne uzima adresu iz instrukcije, već je radi pomoću IRP bit-a STATUS
registra i FSR registra. Adresiranoj lokaciji se pristupa preko INDF registra koji zapravo nije fizički
registar već se njegova adresa nalazi u FSR registru, FSR je pokazivač. Npr. ako memorijska lokacija
05h sadrži vrijednost 10h i ako memorijska lokacija 06h sadrži vrijednost 0Ah, upišemo li vrijednost
05h u FSR registar, INDF registar vratit će vrijednost 10h. Inkrementiranjem FSR registra, INDF
registar vratit će vrijednost 0Ah.
Adresa operanda u postupku relativnog adresiranja ovisi o smještaju same naredbe unutar
memorije. Oblik naredbe koja koristi relativno adresiranje prikazano je na slici 4.14.
Adresa operanda izračuna se tako, da se adresi, na kojoj se nalazi kod postupka, pribroji pomak.
Naziv relativno adresiranje potječe upravo od činjenice, da je adresa operanda određena relativno
prema položaju, odnosno smještzaju same naredbe. Relativni pomak računa se kao dvojni
komplement, a to znači da on može biti pozitivan i negativan.Budući da na raspolaganju stoji 8 bitova,
to je moguće adresirati bilo koju memorijsku lokaciju, udaljenu +127 ili -128 memorijskih lokacija od
lokacija same naredbe.
45
Naredbe koje koriste relativno adresiranje su dužine dviju riječi, što ih čini prikladnim za upotrebu.
Mana relativnog adresiranja je u relativno kratkom dometu adrese (+127, -128 memorijskih lokacija),
te u potrebi za izračunavanjem relativnog pomaka prilikom pisanja programa. Formula po kojoj se
izračunava stvarna adresa glasi:
Stvarna adresa (operanda ili skoka) = adresa naredbe+relativni pomak.
TOK
IZVRŠAVANJA
PROGRAMA
Vdd
PROGRAM
R
U KOM SE
OBRAĐUJE
RB0/INT PREKID
T
NASTAVAK
NORMALNOG
TOKA
IZVRŠAVANJA
PROGRAMA
46
GIE bit može zabraniti ili omogućiti sve prekide odjednom. To je vrlo korisno kod pisanja programa
jer omogućuje da se na neko vrijeme zabrane svi prekidi. Prekidi koji su ostali ne riješeni obrađuju se
nakon ponovnog setiranja GIE bit-a. Ako se obradi bilo koji od ovih prekida mora se resetirati bit koji je
izazvao prekid jer će se u suprotnom prilikom povratka u glavni program prekid ponovno obraditi.
EEIE EEIF
TOIE TOIF
RBIE RBIF
INTERUPT
Na slici 4.16. prikazana je opća shema prekida pomoću sklopki. Pomoću GIE sklopke
omogućujemo bilo koji od četiri moguća prekida. Koristeći sklopke EEIE, TOIE, RBIF, INTE
određujemo vrste prekida, dok nam sklopke sa desne strane EEIF, TOIF, RBIF, INTF pokazuju koji se
prekid dogodio nekom trenutku.
RBIF (RB Port Change Interrupt Flag) – bit koji nam govori o promjeni na 4,5,6, ili 7-om pinu porta B
1 = najmanje jedan pin je promijenio stanje
0 = nije se desila promjena ni na jednom pinu
INTF (INT External Interrupt Flag) – bit koji nam govori da e došlo do vanjskog prekida
1 = prekid se desio
0 = prekid se nije desio
T0IF (TMR0 Overflow Interrupt Flag) – bit koji nam govori da je došlo do prekoračenja TMR0 brojača
1 = došlo je do prekoračenja
0 = nije došlo do prekoračenja
RBIE (RB Port Change Interrupt Enable) – bit koji omogućava pojavu prekida na promjenu stanja 4, 5,
6 ili 7-og pina porta B
1 = omogućena pojava prekida
0 = onemogućena pojava prekida
INTE (INT External Interrupt Enable) – bit koji omogućuje vanjski prekid sa pina RB0/INT
1 = prekid je omogućen
0 = prekid je onemogućen
47
T0IE (TMR0 Overflow Interrupt Enable) – bit koji omogućuje prekid prilikom prekoračenja brojača
TMR0
1 = prekid je omogućen
0 = prekid je onemogućen
EEIE (EEPROM Write Complete Interrupt Enable) – bit koji omogućava prekid nakon završetka upisa
u EEPROM memoriju
1 = prekid je omogućen
0 = prekid je onemogućen
GIE (Global Interrupt Enable) – bit koji dozvoljava ili zabranjuje sve prekide
1 = svi prekidi su omogućeni
0 = svi prekidi su onemogućeni
PIC 16F84 ima 64 bayt-a EEPROM memorijskih lokacija na adresama od 00h do 63h. Najvažnija
osobina ove memorije je da ne gubi sadržaj prilikom nestanka napona napajanja. Stoga ova memorija
služi za čuvanje parametaranekog procesa ili nekih važnih promjenjivih podataka.
Iz EEPROM memorije čitamo podatak tako da setiramo RD bit koji inicira prijenos podataka s
adrese koja se nalazi u registru EEADR u EEDATA registar. Za čitanje podatka nije potrebno neko
vrijeme kao za upis pa se taj podatak može koristiti već u sljedećoj instrukciji.
Da bi upisali podatak u EEPROM memoriju treba prvo upisati adresu željene memorijske lokacije
u EEADR registar a podatak u EEDATA registar. Nakon toga setiramo WR bit koji pokreće upisivanje
podatka na željenu lokaciju. Nakon upisa WR bit će biti resetiran, a EEIF setiran, što se može
iskoristiti za obradu prekida. Vrijednosti 55h i AAh su prvi i drugi ključ koji onemogućuju da dođe do
slučajnog upisa u EEPROM. Te dvije vrijednosti se upisuju u EECON2, koji služi samo za prihvaćanje
ove dvije vrijednosti i time spriječi slučajan upis. Programske linije u primjeru označene s 1, 2, 3, 4 i 5
moraju biti izvršene tim redoslijedom i u pravilnim vremenskim razmacima, tako da je vrlo važno
onemogućiti prekide za vrijeme izvršavanja tih instrukcija. Nakon upisa prekidi se mogu omogućiti.
Primjer dijela programa koji vrši upis podatka 0xEE u prvu lokaciju EEPROM memorije.
48
EEPROM memoriji se pristupa preko SFR registara, a to su:
RD (Read Control) – bit koji inicira prijenos podataka s adrese definirane EEADR u EEDATA registar
1 = inicira čitanje
0 = ne inicira čitanje
WR (Write Control) – bit koji inicira upis podataka iz EEDATA registra na adresu koja se nalazi u
EEADR registru
1 = inicira upis
0 = ne inicira upis
WREN (EEPROM Write Enable) – bit koji omogućuje upis u EEPROM memoriju
1 = upis je dozvoljen
0 = upis nije dozvoljen
WRERR (EEPROM Error Flag) – bit koji nam govori da je došlo do greške prilikom upisa u EEPROM
1 = došlo je do greške
0 = do greške nije došlo
EEIF (EEPROM Write Operation Interrupt Flag) – bit koji nam govori da je upis u EEPROM završen
1 = upis je završen
0 = upis nije počeo ili nije završen
Fizički brojač je registar čija se vrijednost stalno uvećava za jedan a kad dođe do 255 kreće sa
brojanjem ponovno od nule. PIC16F84 ima 8 bit-ni brojač, broj bitova određuje do koliko će brojač
8
brojati (2 = 256). Brojač nam omogućuje da mjerimo vrijeme, ako znamo vrijeme koje je potrebno
brojaču da napravi puni krug od 0 do 256 tada lako možemo izračunati vrijeme koje je proteklo za bilo
koje stanje brojača. Na slici 2.2. je prikazana pojednostavljena shema odnosa preskalera i brojača.
Nakon svakog prelaska brojača s 255 na 0 setira se bit T0IF u INTCON registru. Ako je dozvoljen
prekid, ovo se može iskoristiti za generiranje prekida. T0IF bit mora programer resetirat da bi
omogućio generiranje novog prekida. Stanje brojača može se uvećavati korištenjem unutarnjeg takta
ili vanjskog koji se uzima s nožice RA4/TOCKI. Izvor takta se bira pomoću bit-a T0CS u OPTION
registru. Izaberemo li vanjski takt tada je moguće birati i ivicu signala (rastuća ili padajuća) na koju će
brojač uvećavati svoju vrijednost.
49
Sigurnosni brojač (Wachdog timer) čuva mikrokontroler od ″smrzavanja″. Ako dođe do nepravilnog
rada mikrokontrolera, sigurnosni brojač ga nakon nekog vremena resetira, a program se počinje
izvršavati iz početka. Da bi spriječili resetiranje za vrijeme normalnog toka programa moramo upisati
nulu u WDT registar (instrukcijom CLRWDT) svaki put kad se približi svom prekoračenju.
Preskaler je naziv za dio mikrokontrolera kojim se dijeli instrukcijski ciklus prije nego dođe do
logike koja uvećava stanje brojača. Broj kojim se dijeli instrukcijski ciklus se definira pomoću prva tri
bit-a u OPTION registru, najveći djelitelj je 256, čime se omogućuje mjerenje duljih vremenskih
perioda. Preskaler se može pridružiti brojaču TMR0 ili sigurnosnom brojaču, dodjeljuje se pomoću bita
PSA u OPTION registru. Kada je preskaler dodijeljen TMR0 brojaču sve instrukcije upisa u TMR0
registar (CLRF TMR0, MOVWF TMR0, BSF TMR0…) će obrisati preskaler. Ako je preskaler dodijeljen
sigurnosnom brojaču samo instrukcija CLRWDT će obrisati preskaler u isto vrijeme kada i sigurnosni
brojač. Promjena preskalera je kompletno pod kontrolom programera i može se mijenjati u toku rada
programa.
PS0, PS1, PS2 (Prescaler Rate Select) – bit-ovi koji definiraju faktor djeljenja preskalera
Koristimo li takt od 4 MHz jedan instrukcijski ciklus (4 interna takta) koji traje 1 µs, broj u danoj
tablici pokazuje na koliko mikrosekundi se uvećava TMR ili WDT brojač za jedan.
50
Bitovi TMR0 WDT
000 1:2 1:1
001 1:4 1:2
010 1:8 1:4
011 1:16 1:8
100 1:32 1:16
101 1:64 1:32
110 1:128 1:64
111 1:256 1:128
T0SE (TMR0 Sorce Edge Select) – bit kojim se bira brid signala za okidanje brojača TMR0
1 = padajući brid
0 = rastući brid
T0CS (TMR0 Clock Source Select) – bit kojim se bira izvor taka za TMR0
1 = vanjski preko RA4/TOCKI nožice
0 = interni takt (¼ takta oscilatora)
INTEDG (Interrupt Edge Select) – bit kojim se bira brid signala na koji se pojavljuje vanjski prekid s
nožice RB0/INT
1 = rastući brid
0 = padajući brid
RBPU (PORB Pull-up Enable) – bit koji uključuje ili isključuje pull-up tranzistore
1 = uključeni
0 = isključeni
51
5 Set instrukcija
Vrši se između radnog registra (W) i ″f″ registra koji predstavlja bilo koju lokaciju RAM-a (Sl. 3.23).
Prve tri instrukcije iz tablice (na strani 63) osiguravaju upis konstante u W registar (MOVLW je
skraćenica od MOVE Literal to W), zatim prijepis podataka iz W registra u RAM i prijepis podataka iz
RAM-a u W registar (ili u istu tu lokaciju RAM-a, pri čemu se mijenja stanje zastavice Z). Instrukcija
CLRF upisuje nulu u f registar, a CLRW upisuje nulu u W registar. SWAPF instrukcija unakrsno
zamjeni mjesta četverobitnim poljima unutar registra.
Od svih aritmetičkih operacija PIC kao i većina mikrokontrolera podržava samo zbrajanje i
oduzimanje. Zastavice C, DC i Z postavljaju se u ovisnosti rezultata te dvije operacije, ali sa izuzetkom
jer se oduzimanje vrši kao zbrajanje s negativnom vrijednošću, zastavica C je poslije oduzimanja
inverzna, znači setirana je ako je operacija moguća, a resetirana ako je veći broj oduzet od manjeg.
Logička jedinica PIC-a ima mogućnost izvođenja operacija I, ILI, EX-ILI, negacije (COMF) i
rotiranja (RLF i RRF). Instrukcije koje rotiraju lijevo ili desno pomiču bitove kroz zastavicu C za po
jedno mjesto. Bit koji izlazi iz registra upisuje se u C zastavicu, te se upisuje u bit na suprotnoj strani
registra.
Instrukcije BCF i BSF vrše setiranje ili resetiranje jednog bit-a bilo gdje u memoriji (tablica na
strani 63).
Za upravljanje toka programa nam služe instrukcije GOTO, CALL, RETURN. ''RETLW k''
instrukcija je identična RETURN instrukciji, samo što prije povratka iz podprograma u W registar upiše
konstantu koja je definirana operandom instrukcije. Ova funkcija nam omogućuje kreiranje Lookup
tabela. Instrukcija RETFIE služi za povratak iz podprograma a razlikuje se od RETURN po tome što
automatski setira bit GIE. BTFSC i BTFSS su uvjetne naredbe skoka, u zavisnosti od bit-a koji se
testira u ''f'' registru preskače se ili se ne preskače sljedeća naredba programa.
52
Trajanje Utječe na
u strojnim STATUS
Instrukcija Opis ciklusima bit-ove
53
5.5 Opis pojedinih instrukcija
ADDLW
Sintaksa: [labela] ADDLW k
Opis: Sadržaj W registra se zbraja s 8 bit-nom konstantom k i Rezultat se sprema u
W registar
Operacija: (W) + k Î W
Operand: 0 ≤ k ≤ 255
Zastavica: C, DC, Z
Broj riječi: 1
Broj ciklusa: 1
Primjer:
ADDLW 0X15
ADDWF
Primjer 1:
ADDWF REG, W
ANDLW
54
Primjer 1:
ANDLW 0x5F
Primjer 2:
ANDLW 0x55
ANDWF
Primjer 1:
ANDWF REG, f
Primjer 2:
ANDWF FSR, w
BCF
Primjer 1:
BCF REG, 7
55
Primjer 2:
BCF INDF, 3
BSF
Primjer 1:
BSF REG, 7
Primjer 2:
BSF INDF, 3
Prije instrukcije: W = 0x17
FSR = 0xC2
sadržaj adrese (FSR) = 0x20
Poslije instrukcije: W = 0x17
FSR = 0xC2
sadržaj adrese (FSR) = 0x28
BTFSC
Primjer:
LAB_01BTFSC REG, 1 ;Testiraj bit broj 1 u REG
LAB_02. . . . . . ;Preskoči ovu liniju ako je = 1
LAB_03. . . . . . ;Ovdje skoči ako je = 0
56
BTFSS
Primjer:
LAB_01BTFSC REG, 1 ;Testiraj bit broj 1 u REG
LAB_02. . . . . . ;Preskoči ovu liniju ako je = 0
LAB_03. . . . . . ;Ovdje skoči ako je = 1
CALL
Primjer:
LAB_01CALL LAB_02 ;Pozovi podprogram LAB_02
:
LAB_02. . . . . .
CLRF
Primjer 1:
CLRF TRISB
57
Primjer 2:
CLRF INDF
CLRW
Primjer:
CLRW
CLRWDT
Primjer:
CLRWDT
COMF
58
Primjer 1:
COMF REG, w
Primjer 2:
COMF INDF, f
DECF
Primjer 1:
DECF REG, f
Primjer 2:
DECF REG, w
DECFSZ
59
Primjer:
MOVLW .10
MOVWF CNT ;CNT = 10
Loop
: ;Blok naredbi
:
DECFSZ CNT, f ;Umanji sadržaj registra CNT za jedan
GOTO Loop ;Preskoči ovu liniju ako je = 0
LAB_03 ;Ovde skoči ako je = 0
U ovom primjeru blok naredbi se izvršava onoliko puta koliko je početna vrijednost varijable CNT,
što je u ovom primjeru 10.
GOTO
Primjer:
LAB_00CALL LAB_01 ;Skoči na LAB_01
:
LAB_01 ...... ;Program nastavlja normalno dalje
INCF
Primjer 1:
INCF REG, f
Primjer 2:
INCF REG, w
60
INCFSZ
Primjer:
LAB_01INCFSZ REG, f ;Uvećaj sadržaj REG za jedan
LAB_02. . . . . . ;Preskoči ovu liniju ako je = 0
LAB_03. . . . . . ;Ovdje skoči ako je = 0
IORLW
Primjer:
IORLW 0x35
IORWF
Primjer 1:
IORWF REG, w
61
Primjer 2:
IORWF REG, f
MOVF
Primjer 1:
MOVF FSR, w
Primjer 2:
MOVF INDF, f
MOVLW
Primjer:
MOVLW 0x5A
62
MOVWF
Primjer 1:
MOVWF OPTION_REG
NOP
Primjer:
NOP ;Kašnjenje od 1µs pri taktu od 4 MHz
Prije instrukcije: PC = x
Poslije instrukcije: PC = x + 1
RETFIE
Primjer:
RETFIE
Prije instrukcije: PC = x
GIE = 0
Poslije instrukcije: PC = TOS
GIE = 1
63
RETLW
Primjer:
RETLW 0x43
RETURN
Primjer:
RETURN
Prije instrukcije: PC = x
TOS = x
Poslije instrukcije: PC = TOS
TOS = TOS - 1
RLF
C registar 1
64
Primjer 2: RLF REG, f
RRF
C registar 1
Primjer 1:
RRF REG, w
Primjer 2:
RRF REG, f
SLEEP
65
Primjer:
SLEEP
SUBLW
Primjer:
SUBLW 0x03
SUBWF
Primjer:
SUBWF REG, 1
66
SWAPF
Primjer 1:
SWAPF REG, w
Primjer 2:
SWAPF REG, f
XORLW
Sintaksa: [labela] XORLW k
Opis: Vrši logičku operaciju isključivo ILI nad sadržajem registara W i 8 bit-nom
konstantom k, rezultat se sprema u W registar.
Operacija: (W) .XOR. k Î W
Operand: 0 ≤ k ≤ 255
Zastavica: Z
Broj riječi: 1
Broj ciklusa: 1
Primjer 1:
XORLW 0xAF
XORWF
67
Primjer 1:
XORWF REG, f
68
6 Razvojni alati za PIC 16F84
6.1 Asembler
Asemblerski jezik je jezik kojim čovjek i mikrokontroler komuniciraju. Asemblerski jezik je razumljiv
čovjeku, sastoji se od riječi i abecednih znakova. No program napisan u asemblerskom jeziku mora se
prevesti u niz nula i jedinica da bi ga mikrokontroler razumio. Razlikujemo pojam «asembler» i
«asemblerski jezik». Asembler je program prevodilac koji prevodi asemblerski jezik u jezik nula i
jedinica, a asemblerski jezik je skup pravila po kojima se piše program za mikrokontroler.
Primjer: ovako izgleda naredba RETURN prevedena asemblerom, dobije se 14 bit-ni niz nula i
jedinica koji je razumljiv mikrokontroleru.
asm hex
- Labele
- Naredbe
- Operandi
- Komentari
- Direktive
69
Labela predstavlja tekstualnu verziju neke adrese u programskoj ili RAM memoriji. Dužina labele
može biti najviše 32 znaka, bitno je da počinje slovom ili donjom crtom ″_″. Labele se pišu u prvoj
koloni.
Naredbe su definirane upotrebom određenog mikrokontrolera i pri pisanju programa treba samo
poštovati način njihove upotrebe.
Operandi su elementi naredbi nad kojima se izvršava naredba. To su najčešće registri ,
promjenjive vrijednosti ili konstantne u memoriji.
Komentar je tekst koji programer piše nakon naredbe iz znaka ″ ; ″ da bi program bio jasniji i
pregledniji.
Direktiva je slična naredbi, ali je nezavisna od modela mikrokontrolera i predstavlja posebnost
samog asemblerskog jezika.
Direktiva koju ćemo koristiti glasi:
PROCESOR 16f84
#include ''p16f84.inc''
__CONFIG_CP_OFF &_WDT_OFF &_PWRTE_ON &_XT_OSC
70
7 MPLAB IDE v6.60
• PC kompatibilno računalo
• Microsoft Windows 98 SE, Windows 2000 SP2, Windows NT SP6, Windows ME, Windows XP
• 64 MB radne memorije (128MB preporučeno)
• 45 MB slobodnog prostora na tvrdom disku
• Internet Explorer 5.0 ili noviji
7.3.1 Uvod
Da bi napravili kôd koji se može izvršavati koristeći ciljani PICmicro MCU mikrokontroler, izvorni
kôd se treba staviti unutar projekta i tada se kôd izgrađuje koristeći selektirane alate za prevođenje
(language tools): asemblere, kompajlere, itd.U MPLAB-u IDE, projekt menadžer se brine o tim
procesima.
Prvi korak je pisanje vrlo kratkog izvornog kôda koji spremamo u određenu datoteku. Tada
izrađujemo projekt, dodajemo izvorni kôd projektu, alati za prevođenje(language tools) kôda se
dodjeljuju projektu, i napokon kôd je izgrađen i testiran.
Pri pokretanju programa na ekranu će se pojaviti MPLAB IDE radna površina (desktop).
Krenite sa pisanjem kôda za aplikaciju koristeći MPLAB IDE editor. Odaberite File>New .U
radnom prostoru će se otvoriti prazan prozor za editiranje, pisanje. Unesite ovaj primjer gotovog kôda.
Preporuka Copy/Paste.
71
title "PIC16F877 brojac"
PROCESSOR 16F877
#include <p16f877.inc> ;Ova datoteka sadrži sva imena registara
;specijalnih namjena i njihove adrese od ;PIC16F877
;Ta se datoteka nalazi u istom direktoriju
;kao i MPASMWIN.exe
__CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC
IncCount
incf COUNT,F ;incrementiramo count
movf COUNT,W ;CONT→W
movwf PORTB ;prosljedi na PORTB
Delay
movlw 0xFF ;vremensko trajanje petlje
movwf DVAR2
D0
movwf DVAR
D1
decfsz DVAR,F
goto D1
decfsz DVAR2,F
goto D0
return
end
Kada je kôd unesen, odaberemo akciju File>Save i spremimo datoteku u novi direktorij naziva
C:\Projekti kao brojac16f877.asm.
72
Slika 1.
Pritisnitie Save.
Sljedeći korak pri stvaranju aplikacije je podešavanje projekta. Najlakši način za to je preko
MPLAB-ovog Čarobnjaka za projekt (Project Wizard).
Slika 2.
73
Slika 3.
Slika 4.
4. Unesite ime projekta. Radi ove demonstracije, nazovite ga Brojac i pritisnite Browse da bi
odabrali projektni direktorij koji smo napravili ranije da bi spremili izvorni kôd, C:\Projekti (slika
5.)
74
Slika 5.
5. Pritisnite Next. Sada trebamo dodati postojeće datoteke vašem projektu. Pronađite mapu
C:\Projekti i odaberite brojac16f877.asm (Slika 6.).
Slika 6.
75
Slika 7.
7. Pritisnite Next za nastavak i dovršenje izrade Čarobnjaka. U ovom finalnom prozoru možemo
vidjeti i provjeriti parametre ovog projekta.
Slika 8.
76
Prozor projekta na radnoj površini bi trebao izgledati kao na slici 9.
Slika 9.
SAVJET: Datoteke se mogu dodavati i projekti spremati sa desnim klikom miša u projektnom
prozoru. U slučaju greške, datoteke se mogu ručno brisati tako da ih odaberemo i
pokrenemo izbornik desnim klikom na miša.
Slika 10.
Ako se datoteke nisu uspješno asemblirale, provjerite sljedeće natuknice i ponovno izgradite
projekt:
● Provjerite sintaksu i format kôda unesenog u editorski prozor. Ako je asembler javio greške u
Output prozoru, dvostrukim pritiskom miša na grešku MPLAB će otvoriti odgovarajuću liniju u
izvornom kôdu pokazujući na nju sa zelenom strelicom na lijevoj margini prozora izvornog kôda.
● Provjerite da li koristite odgovarajući asembler (MPASM assambler) za PICmicro uređaje.
Odaberite Project>Set Language Tool Locations. Pritisnite Microchip MPASM
Toosuite\Executables\ MPASM Assembler (mpasmwin.exe) i provjerite na njezinu lokaciju. Ako
je lokacija ispravna, pritisnite Cancel. A ako nije, promijenite ju i tada pritisnite OK.
77
Nakon uspješne izgradnje projekta generira se, alatima za prevođenje, izlazne datoteke. Te
datoteke sadrže objektni kôd koji se može upisati u PICmicro mikrokontrolere i informacije (debugging
information) koje služe za ispravljanje izvornog kôda i simbolično gledanje varijabla kôda preko
prozora za gledanje(Watch windows).
Važno: Generirana datoteka.HEX se sada može otvoriti u programu IC-Prog i upisati na PIC
16F877.
Bilješka: Velika korist od projekta se najviše vidi kada je mnogo datoteka koje se trebaju
kompajlirat\asemblirat i povezat da bi činile izvršnu aplikaciju – kao u stvarnim
aplikacijama. Projekti sve to prate. Opcije za izgradnju(build options), se mogu
namještati za svaku datoteku od koje svaka može pristupati drugim pogodnostima
alata za prevođenje(language tools), kao što su izlazna izvješća i optimizacija
kompajlera.
Sada kad je projekt izgrađen, trebamo provjeriti da li funkcionira. Da bi to učinili trebamo odabrati
alat za pronalaženje pogrešaka (debug tool). To može biti hardwerski ili softwerski alat za inspekciju
kôda poslije izvršenja programa (u ovom slučaju brojac16f877.asm). U ovom vodiču ćemo koristiti
MPLAB SIM simulator.
Simulator je softwerski program koji radi na PC-u i simulira instrukcije od PICmicro
mikrokontrolera. Simulator ne radi u «realnom vremenu», zato što simulatorski program ovisi o brzini
PC-a, kompleksnosti koda, preljevom (overhead) operativnog sustava i koliko drugih zadaća (tasks)
obavlja. Ipak, simulator precizno mjeri vrijeme koje je potrebno da se kôd izvrši kao da radi u realnom
vremenu i u aplikaciji.
Bilješka: Ostali pronalazači pogreška (debuggers) sadrže MPLAB ICE 2000, MPLAB ICE 4000
i MPLAB ICD2. To su opcionalni hardwerski alati za testiranje kôda na PC platformi.
Većina operacija od MPLAB IDE alata za pronalaženje pogreški su iste kao i od
simulatora, ali za razliku od simulatora, ovi alati dozvoljavaju da ciljani PIC
mikrokontroler radi pri punoj brzini u stvarnoj ciljanoj aplikaciji.
Slika 11.
Poslije odabira MPLAB SIM, vidjet ćemo sljedeće promjene (vidi pripadajuće brojeve na slici 12).
1. Statusna traka (status bar) na dnu MPLAB IDE prozora će se promijeniti na «MPLAB SIM».
2. Dodatne meni opcije bi se trebale pojaviti u Debugger meniju.
3. Dodatne alatne ikone bi se trebale pojaviti koje služe za ispravljanje pogreški u kôdu
(Debugger Tool Bar).
78
Slika12.
Run
Halt
Animate
Step into
Reset
Prvo odaberite Debugger>Reset (ili ikonu na alatnoj traci). Trebala bi se pojaviti zelena
strelica na lijevoj strani prozora izvornog kôda, pokazujući na prvu liniju izvornog kôda koja bi se
trebala izvršiti.
79
Slika13a.
Da bi prolazili kroz aplikaciju korak kroz korak, selektirajte Debugger>Step Into (ili ikonu ).Tada
će se izvršiti trenutna linija kôda na kojoj je program zaustavljen i zelena strelica će skočiti na sljedeću
liniju kôda koja bi se trebala izvršiti.
Imamo još akciju Animate koja se pokreće selektiranjem Debugger>Animate (ili pripadajućom
ikonom ). S njom prolazimo kroz izvorni kôd automatski korak po korak sa određenom
vremenskom pauzom između skoka.
Ta se vremenska pauza može promijeniti i definira na sljedeći način: selektirajte
Debugger>Settings i pod tabularom Debugger Animation promijenimo vrijednost (slika 13b.)
Slika 13b.
80
Vrijednost koju unosimo označava milisekunde po koraku [msecs]. To znači da će prije izvršenja
sljedećeg koraka čekati 0,5 sekundi.
Vrijednosti varijabla se mogu vidjeti u svakom trenutku tako da postavimo kursor miša iznad
imena varijable bilo gdje u izvornom kôdu. Pojavit će se mali prozorčić sa trenutnom vrijednošću
varijable.
Slika 14.
Korisnici često žele imat pregled ključnih varijabli cijelo vrijeme. Varijable se lakše prate ako
otvorimo prozore za gledanje nego da mišom prelazimo preko svake varijable. Prozor za gledanje
vrijednosti varijabli će biti prisutan cijelo vrijeme na ekranu. Prozori (Watch Windows) se mogu naći
pod View menijem.
81
Slika 15.
Tri simbola bi se trebala nalaziti u prozoru za gledanje. Prva je ispisana adresa File registra, slijedi
ime simbola konačno vrijednost simbola. Korisnici mogu gledati kako se vrijednosti simbola mijenjaju
pri kretanju kroz program korak po korak.
Slika 16.
82
Napomena: Te promjene, kao i promjene u ostalim registrima možemo pratiti i u sljedećim
prozorima: Prozor Specijalnih registra (poglavlje 3.6.4) i Prozor File registra
(poglavlje 3.6.5 ). Svaki korisnik će sam za sebe odlučiti koji im je od prozora
najkorisniji za upotrebu.
Selektiramo View>8 Specal Functin Registers i pojavit će nam se prozor kao na slici 17.
Slika 17.
U ovom prozoru možemo vidjeti sve Registre specijalne namjene sa njihovom adresom (prvi
stupac Address), imenom (drugi stupac SFR Name) i njihovom binarnom, decimalnom i
heksadecimalnom vrijednošću (sljedeća tri stupca). U posljednjem stupcu (Char) će se ispisati znak
koji odgovara vrijednosti ASCII tabele.
83
7.3.6.5 Prozor File registra (File Register)
Selektiranjem View>4 File Registers otvorit ćemo prozor za gledanje File registra (slika 19.).
Slika 19.
On pokazuje sve vrijednosti na adresama File registra. Pritiskom na tabular Symbolic (označen
crvenom bojom) dobit ćemo simbolični prikaz koji je razumljiviji (slika 20.).
Registri su sortirani po adresama. U ovom prozoru također možemo upisivati vrijednosti u registre
kao što je opisano u poglavlju 3.6.5.
Slika 20.
84
7.3.6.6 Upisivanje vrijednosti registara preko prozora
Preko ovog prozora, osim gledanja, možemo upisivati vrijednosti u registre. To možemo na dva
načina:
1. Dođemo do polja u koji ćemo upisati vrijednost i pritskom na Enter (na tipkovnici), ili
dvostrukim lijevim klikom miša, možemo upisati neku vrijednost.
2. Drugi način je da pritiskom desnog klika miša iznad određenog polja, kad se pojavi meni,
odaberemo opciju Fill Registers … .Pojavit će se prozor kao na slici 18.
Slika 18.
Simuliranje pinova je korisna simulatorska opcija, posebice kad nam je u programu potrebno
izazvati prekid preko npr. RB0 pina ili kad su nam određeni portovi definirani kao ulazni i onda želimo
na njih dovesti odgovarajuće poticaje, da bi vidjeli kako naš program reagira na njih.
Selektirajte Debugger>Stimulus Controller . U prozoru koji se pojavio, pod tabularom Pin
Stimulus, pritisnite Add Row. Prikazat će nam se prozor kao na slici 21.
Slika 21.
85
Pod stupcem Type, pritiskom na polje Asynch, odabiremo sinkroni ili asinkroni oblik poticaja. Ako
odaberemo asinkroni oblik poticaja Asynch možemo odabrati koji pin želimo stimulirati (pod Pin
stupcem) i oblik akcije (stupac Action).
Slika 22.
Akcije:
Pri završetku uređivanja pritisnite Edit Complete. Prilikom prolaska kroz kôd akcijama Step Into ili
Animate, stimulacija pina će se obaviti pritiskom na tipku Fire. Ako odaberemo sinkroni oblik poticaja
dobit ćemo poticaj u obliku takta.
Slika 23.
86
7.3.6.8 Postavljanje točaka za prekid (Setting Breakpoints)
Točke za prekid koristimo kada želimo da nam se kôd kreće do određene lokacije i tada zaustavi.
To se ostvaruje ovako:
3. Iz menija koji se pojavio nakon desnog klika miša, selektirajte Set Break Poin . Stop znak bi se
trebao pojaviti na lijevoj margini pokraj te linije kôda (slika 21.).
Slika 21.
Slika 22.
Bilješka: Nakon zaustavljanja kod točke za prekid, zgodan način za kretanje do neke lokacije u
kôdu je da stavimo kursor na bilo koju instrukciju u kôdu i pritiskom desnog klika miša
odaberemo Run to Cursor. Trajna točka za prekid nije dodana toj liniji i simbol točke
za prekid se neće vidjeti – samo će se strelica kretati do te linije. Ako se ta instrukcija
slučajno neće nikad izvršiti, aplikacija će nastaviti raditi sve dok ne selektiramo
Debugger>Halt.
87
7.3.6.9 Praćenje kôda (Tracing Code)
Simulirano praćenje može se koristiti za snimanje izvršenja kôda. Ponekad je bolje, da umjesto
kretanja kroz linije kôda korak po korak, kôd snimimo u akciji. Omogućimo simulirano praćenje tako da
selektiramo Debugger>Settings i odaberemo «Trace/Pins» tabular.
Slika 23.
U Trace Option području se nalaze dvije kućice koje se mogu potvrditi kvačicom, a one
kontroliraju kakav ćemo dosje dobit simuliranim praćenjem. Kada je gornja kućica potvrđena,
simulator skuplja podatke kada simulator radi u «Run» modu. On skuplja podatke sve dok nije
zaustavljen točkom za prekid ili «ručno». On će ispisati posljednjih 8192 ciklusa. Ovaj mod je vrlo
koristan jer možemo vidjeti zapise instrukcija koje su izvršene do točke za prekid.
Ako potvrdimo i drugu kućicu, tada će memorija za praćenje skupiti 8192 ciklusa i prestati
skupljati, a aplikacija će biti zaustavljena na točki za prekid. Ovaj mod je koristan da bi vidjeli zapise
instrukcija nakon pritiska Run.
Selektirajte View>Simulator Trace (slika 20). Simulator praćenja ne prikazuje samo sekvencu
izvršene instrukcije nego i druge informacije. Prikazuje još vremensku bazu da svaki ciklus. Podaci
koji se čitaju ili upisuju u File registar će biti uhvaćeni i prikazani u SA, SD, DA i DD stupcima kao što
se vidi na slici 24.
Slika 24.
88
• Line - pokazuje brojeve ciklusa
• Addr - adresa programskog brojila (Program Counter)
• Op - vrijednost instrukcije strojnog kôda
• Label - prikazuje svaku labelu simbolično
• Instruction - prevedenu instrukciju (disassembled instruction)
Sljedeća četiri stupca prikazuju vrijednosti podataka koje se upisuju i čitaju u File registre:
Ako je koje polje označeno crticama to znači da pri toj instrukciju nije korišten taj registar.
• Cycles - pokazuje vremensku bazu za svaki ciklus. Može se koristiti za mjerenje vremena
koje je potrebno da se izvrši rutina. Vrijeme se računa na bazi frekvencije unesene u
Debugger>Settings , tabular Clock.
89
8 Programiranje mikrokontrolera PIC 16F877
8.1 Uvod
Easy-PIC
• Sustav podržava 8, 18, 28 i 40 pinske mikrokontrolere (isporučuje se sa PIC16F877)
• Na ploči je jasno označen svaki kratkospojnik, element ili pin cime je znatno olakšan rad.
• Na sustavu je moguće isprobati većinu industrijskih potreba: temperaturne kontrolere, brojače,
tajmere...
• Primjeri asembleru cine sam početak rada vrlo efikasnim.
IC-Prog
Programski paket koji koristimo za programiranje mikrokontrolera. Program se nalazi na CD-u, ali
preporučamo da se «skine» novija verzija sa Interneta.
Napomena: Korisnici Windows NT/2000/XP operativnog sustava morat će još «skinuti» datoteku
icprog.sys i kopirati je u istu mapu gdje i icprog.exe.
1. Prvo što treba uraditi je priključivanje sustava preko serijskog kabla na računalo. Na računalu
mora biti slobodan jedan COM port (najvjerojatnije COM 1 kod novijih računala ili COM2 kod
starijih modela) na kojeg se priključuje serijski kabel iz kompleta.
2. Sljedeći korak je priključivanje napajanja. Napajanje može biti i istosmjerno i izmjenično već
prema izboru od 9 do 12 Volti.
3. Kopirati ICprog.exe sa CD-a na tvrdi disk računala. Najbolje je napraviti mapu PIC i u njemu
posebnu mapu ICPROG čime će sve biti preglednije. (npr. C:\PIC\ICPROG ). Kopiranjem
programa u spomenutu mapu je završena njegova instalacija. Kopirajte datoteku icprog.sys u
mapu ako koristite Windows NT/2000/XP.
90
Slika 1.
Slika 2.
91
Potrebno je definirati hardwer preko kojeg se mikrokontroler na ploči programira. Kako je na ploči
ugrađen JDM programator njega treba odabrati.
Opcija PORTS se bira na osnovu slobodnog porta na računalu korisnika. Obično je slobodan
COM1 , pa njega i treba selektirati. Pritisnite OK.
Slika 3.
Slika 4.
92
2. Kada se definira hardwer, sljedeći korak je odabir mikrokontrolera koji ćemo programirati.
Klikom na Settings > Device> Mikrocip PIC bira se mikrokontroler PIC16F877 koji se koristi na
razvojnom sustavu PIC-easy kao na slici 5.
Slika 5.
3. Sljedeći korak je učitavanje HEX datoteke (mikrokontroler prima program u toj formi).
Selektirajte ikonicu Open (ili preko odabira File>Open) i pojavit će nam se prozor za
traženje i odabir datoteke (slika 6.).
Slika 6.
Napomena: HEX datoteku pravi bilo koji asemblerski, BASIC ili C kompajler.
93
4. ISP prekidač na razvojnom sustavu prebaciti u položaj za upisivanje/programiranje (u modu
za upisivanje svijetli dioda PROGRAM MODE ON).
Slika 7.
Slika 8.
94
Kad počne programiranje pojavit će se sljedeća slika:
Slika 9.
6. Nakon što je programiranje završeno isključiti prekidač ISP (gornji desni ugao razvojnog
sustava), kao što je prikazano na slici ispod.
Slika 10.
95
9 Opis razvojnog sustava
9.1 Napajanje
Slika 11.
Za ispravan rad svih elemenata na razvojnom sustavu potrebno je osigurati stabilnih +5V. Kod
PIC-Easy sustava, to je postignuto upotrebom naponskog stabilizatora LM7805. Zbog povećane
disipacije do koje dolazi pri većem opterećenju, stabilizator je postavljen na odgovarajući hladnjak.
Slika 12.
Sustav ima 32 diode koje su povezane na pinove porta A, B, C, D i E. Ove diode se obično koriste
u prvobitnoj fazi rada, ali i kasnije za indikacije dešavanja u programu. Svaka grupa dioda se
uključuje/isključuje preko prekidača SW3. Način povezivanja LED dioda sa mikrokontrolerom prikazan
je na narednoj slici.
Napomena: LED diode se uključuju logičkom nulom. To znači da mikrokontroler mora na pinu
imati logičku nulu da bi dioda svjetlila.
96
Slika 13.
Slika 14.
9.3 Tipkala
Sustav posjeduje jedano RESET tipkalo i 24 tipkala za simuliranje komandnih ulaza sustava koji
su povezani na pinove RE0, RE1 i portove A, B i C. Shematski prikaz veze tipkala i mikrokontrolera
dat je na sljedećoj slici.
97
Slika 15.
Oznaka iznad svakog predstavlja naziv pina na koji je odgovarajuće tipkalo priključeno. Da bi se
tipkalo koristilo odgovarajući pin portova A, B, C i/ili E mora se definirati kao ulazni. Kratkospojnikom u
lijevom donjem kutu razvojnog sustava definira se da li je prilikom aktiviranja tipkala vrijednost
odgovarajućeg pina 5V ili 0V. Ako je kratkospojnik u gornjem položaju, onda će se prilikom aktiviranja
izvjesnog tipkala na odgovarajući pin doći logička jedinica, a ako je u donjem položaju logička nula.
Slika 16.
Predviđen je klasičan LCD zaslon sa 2x16 karaktera. Ipak, to nije ograničenje jer se može koristiti
bilo koji zaslon koji ima isti tip komunikacije sa mikrokontrolerom.
Kontrast zaslona se regulira potenciometrom u donjem lijevom kutu razvojnog sustava. LCD
zaslon se može priključiti ili na port B ili na port D. Naredna slika prikazuje shemu povezivanja LCD-a
na port D i port B mikrokontrolera PIC16F877. Ako su pinovi LCD zaslona sa donje strane, korisnik
treba da zalemi kontakt letvicu na mjestu odgovarajućeg porta u dnu razvojnog sustava, u okviru
pravokutnika predviđenim za LCD zaslon!!!.
98
Slika 17.
Slika 18.
Izgled postavljenog LCD zaslona na port B. Izgled postavljenog LCD zaslona na port D.
Sedamsegmentni zaslon se sastoji od četiri znamenke čije se osvježavanje i ispis vrši preko porta
B u kombinaciji sa portom A. Preko DIP prekidača SW2, definiraju se znamenke koje će biti uključene,
a koje ne. Npr. recimo da treba omogućiti prikazivanje krajnje lijeve znamenke. Prebacivanjem
četvrtog prekidača na SW2 u radni režim (ON) znamenka sedamsegmentnog zaslona (DIS1, krajnje
lijevo znamenka) će pokazivati vrijednost koja je definirana vrijednostima pinova porta B (slika 20.).
Slično se radi kada su u pitanju znamenke DIS2, DIS3 i DIS4. Naredna slika prikazuje način
povezivanja sedamsegmentnih zaslona sa mikrokontrolerom.
99
Slika 19.
Slika 20.
100
Slika 21.
Slika 22.
101
Slika 23.
Slika 24.
102
Slika 25.
Digitalna vrijednost temperature se šalje ili na pin RA5 ili RE2 u zavisnosti od toga u kom položaju
se nalazi kratkospojnik koji se nalazi neposredno iznad čipa DS1820. U prikazanom primjeru
temperatura će se očitavati preko pina RA5. Polukrug oko tropinskog podnožja označava orijentaciju
DS1820 prilikom postavljanja u podnožje.
Slika 26.
103
Slika 27.
Slika 28.
Slika 29.
104
Port B je na PULL-DOWN otpornicima, što znači da su ti pinovi na logičkoj nuli sve dok se na
njih ne postavi željena vrijednost.
Port A je preko SW1 povezan na otpornu mrežu. Ako SW1 nije u ON položaju, odgovarajući pin
nema ni pull-up ni pull-down otpornik na sebi . Ovo je jako bitno jer omogućuje da se port A koristi u
analognom modu kao A/D pretvarač.
DIP prekidači na sustavu omogućavaju veliku fleksibilnost. Njihovim korištenjem pinovi portova se
povezuju sa različitim elementima sustava:
SW1 - uključuju / isključuju PULL-UP ili PULL-DOWN otpornike porta A i pinova RE0 i RE1
porta E.
SW2 - uključuje / isključuje sedamsegmentne zaslone
SW3 - uključivanje / isključivanje led dioda na portovima A, B, C, D i E.
Svi pinovi PIC-a se mogu definirati kao ulazni ili kao izlazni. Pinovima portova moguće je pristupiti
direktno sa desne strane razvojnog sustava preko «flat» kabla. Na taj način se mogu očitavati ili
unositi odgovarajuće vrijednosti na portove sa vanjskih elemenata.
Slika 30.
105
10 Primjeri
10.1 Uvod
U ovom poglavlju su prikazani primjeri gotovih programa koji bi vam trebali pomoći da brže
savladate programiranje u asemlerskom programu. Svaki ovaj primjer možete isprobati u simulatoru
MPLAB IDE i preko programa IC-Prog upisati na mikrokontroler PIC 16F877, koji se nalazi na
razvojnom sustavu. Detaljni opis postupka je opisan u prethodnim poglavljima, ali evo jedan kratak
podsjetnik:
Nakon uspješne izgradnje kôda program se može ispitati u simulatoru ili ga možemo odmah
upisati na naš mikrokontroler PIC 16F877. Potrebna .hex datoteka je generirana u istoj mapi u kojoj
smo izradili projekt i možemo ju preko programatora IC-Prog upisati u PIC 16F877.
6. Pokrenite IC-Prog.
7. Selektirajte File>Open File i odaberite ime_datoteke.hex datoteku u radnoj mapi.
8. Nakon postavljanja radnih uvjeta razvojnog sustava, selektirajte Command>Program All.
9. Programiranje je time je završeno i potrebno je isključiti ISP prekidač.
Na razvojnom sustavu se mogu vidjeti rezultati. Prije primjera nalazi se kratak podsjetnik na
makroe i potprograme.
Napomena: LED diode se uključuju logičkom nulom. To znači da mikrokontroler mora na pinu
imati logičku nulu da bi dioda svjetlila.
Makro naredbe se definiraju preko direktive macro u okviru koje se zadaje ime makroa i po
potrebi argumenti.
Definicija makroa se mora nalaziti ispred mjesta gdje se koristi. Kada se u okviru programa pojavi
ime makroa, on se zamjenjuje nizom instrukcija koje su navedene prilikom definiranja makroa.
Najjednostavnija primjena makroa je davanje imena nizu naredbi koje se ponavljaju.
Kao primjer može poslužiti odabir banke SFR registra. PIC16F877 ima četiri banke: Bank 0, Bank
1, Bank 2, Bank 3. Pristupa im se preko RP1 iRP0 bitova STATUS registra.
106
RP1:RP0 Bank
00 0
01 1
10 2
11 3
BANK0 macro
bcf STATUS,RP0
bcf STATUS,RP1
endm
BANK1 macro
bcf STATUS,RP0
bsf STATUS,RP1
endm
BANK2 macro
bsf STATUS,RP0
bcf STATUS,RP1
endm
BANK3 macro
bsf STATUS,RP0
bsf STATUS,RP1
endm
Ovako napisani makroi se spremaju u posebnu datoteku sa nastavkom .INC. Datoteka ima
nastavak .INC asocirajući da se radi o INCLUDE (u prijevodu uključi-umetni u program) datoteci.
U sljedećim primjerima će se koristiti samo banke 0 i 1, dok će se banka 3 i 4 koristiti samo kod
upisa podatka u EEPROM, odnosno FLASH programsku memoriju (raspored File registrima po
bankama se nalazi u prilogu 8.10).
10.3 Potprogrami
Potprogram predstavlja niz naredbi koji počinje labelom, a završava se naredbom return ili retlw.
Glavna razlika u odnosu na makro je to što se niz instrukcija potprograma nalazi samo na jednom
mjestu u okviru programske memorije. Ovaj niz instrukcija se izvršava svaki put kad se navede
naredba call Ime_potprograma. Kada program stigne do naredbe return nastavlja se izvršavati od
sljedeće naredbe u glavnom programu kod koje je potprogram bio pozvan. Definicija potprograma se
može nalaziti i prije i poslije mjesta poziva.
107
10.4 Primjeri
U ovom primjeru definiramo pinove porta B kao izlazne, i na njegove pinove dovodimo u stanje
logičke jedinice.
__CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC
PROCESSOR 16F877
#include "p16f877.inc"
__CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC
bcf STASTUS,RP1
bsf STASTUS,RP0 ;BANKA 1
movlw 0x00 ;upisi 0 u radni spremnik
movwf TRISB ;upisi u reg. TRISB-definiramo
;pinove portaB kao izlazne
bcf STATUS,RP0 ;BANKA 0
movlw 0xFF ;b'11111111'
movwf PORTB ;svi pinovi porta B odlaze u 1
108
10.4.2 Način upisivanja konstanti
binarno
movlw b'00101100'
heksadecimalno
movlw h'2c'
ili movlw 0x2c
decimalno
movlw d'44'
ili movlw .44
Ovo je program koji testira ulazni pin RC0 i ako je u jedinici setira izlazni RB0, i ako je RC1 u nuli
setira RB1 i obratno.
PROCESSOR 16f877
#include "p16f877.inc"
#include "bank.inc"
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
org 0x00
goto Main
BANK1
movlw b'00000000'
movwf TRISB
movlw b'11111111'
movwf TRISC
BANK0
Main btfss PORTC,0 ;kontrola 1 na RC0
bcf PORTB,0 ;ako je nula resetira RB0
btfsc PORTC,0 ;kontrola 0 na RC0
bsf PORTB,0 ;ako je jedinica setira RB0
btfss PORTC,1 ;kontrola 0 na RC1
bsf PORTB,1 ;ako je nula setira RB1
btfsc PORTC,1 ;kontrola 1 na RC1
bcf PORTB,1 ;ako je jedinica setira RB1
goto Main
end
Jednostavni primjeri zbrajanja i oduzimanja konstanti između registra opće namjene i radnog
registra w te indirektno adresiranje koristeći INDF i FSR registre.
PROCESSOR 16f877
#include "p16f877.inc"
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
org 0x00
goto Main
109
Main clrf FSR
clrf INDF
movlw .65 ;65 → w
addlw .120 ;65 + 120 = 185 → w
sublw .150 ;150 - 185 = .221 ili 0xdd → w
addlw .120 ;35 + 221 = 85 → w
movf 0x20,0 ;vrijednost sa adrese 0x20
;u w. 0x20=.0
addlw .12 ;0 + 12 → w
movlw 0x21 ;0x21 → w
movwf FSR ;0x21 → FSR
movf INDF,0 ;vrijednost reg. INDF→w
;INDF sadrži vrijednost
:registra 0x21, a reg. FSR
;sadrži njegovu adresu
addlw .20 ;0 + 20 = .20 → w
goto Main
end
Kada u registar FSR upišemo neku adresu(npr. 0x21), tada će registar INDF sadržavati vrijednost
(podatak) zapisan na toj adresi. Ako je u FSR registar upisana adresa npr. 0x22 , a onda u INDF
registar upišemo vrijednost d'55', tada će se u registru 0x22 nalaziti podatak d'55'.
56
– 34
je isto što i 56 + (–34)
56 00111000
34 00100010
prvi komplement 11011101
+ 1
drugi komp. (-34) 11011110
+56 00111000
22 100010110
PROCESSOR 16f877
#include "p16f877.inc"
#include "bank.inc"
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
org 0x00
BANK1
movlw b'11111111'
movwf TRISB
clrf TRISC
BANK0
clrf PORTC
goto Main
Main
movlw .100
subwf PORTB,0 ;W = portb - 100
110
btfsc STATUS,Z ;da li je rez=0
bsf PORTC,0 ;portb=100, setiramo RC0
Dolaskom impulsa na pin RC0 uvećava se za jedan registar PORTB, a dolaskom impulsa na pin
RC1 smanjujemo vrijednost registra za jedan. Vrijednost registra se ispisuje na izlaznim pinovima
porta B.
PROCESSOR 16f877
#include "p16f877.inc"
#include "bank.inc"
__CONFIG _CP_OFF & _W DT_OFF & _PWRTE_ON & _XT_OSC
org 0x00
goto Main
Main BANK1
Clrf TRISB
Movlw b'11111111' ;ili 0xff
Movwf TRISC
BANK0
Clrf PORTB
Btfsc PORTC,0 ;RC0 uvećava PortB
Incf PORTB
Btfsc PORTC,1 ;RC1 smanjuje PortB
Decf PORTB
Goto Main
end
Dolaskom impulsa na pin RC0 smanjujemo vrijednost GPS registra 0x20 dok ne dođe do nule i
tada mu upisujemo vrijednost .16 i dalje vrtimo petlju.
111
PROCESSOR 16f877
#include "p16f877.inc"
#include "bank.inc"
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
org 0x00
BANK1
Movlw 0xff
Movwf TRISC ;definiranje portova
BANK0
Movlw .12 ;.12→w
Movwf 0x20 ;prvi slobodan GPR registar u BANK0
Goto Main
Port A (RA<5:0>) i port E (RE<2:0>) su ulazno/izlazni pinovi koji mogu biti definirani kao analogni i
digitalni priključnice (portovi). Ako ih želimo koristiti kao digitalne ulazno/izlazne pinove moramo to
definirati u registru ADCON1. Inicijalizacija se obavlja ovim kratkim kôdom:
Napomena: Na razvojnom sustavu su na testne LED diode priključeni sljedeći pinovi PORTA
RA<5:0> i PORTE RE<1:0>.
112
10.4.8 EEPROM - čitanje podataka sa memorije
Da bi pročitali neki podatak s neke adrese iz EEPROM-a, dovoljno je kopirati primjer ovog kôda:
;/onemogućuje prekide
BCF INTCON, GIE ;- ako su već ranije omogućeni
;\u suprotnom izbacite tu liniju
MOVLW 0x55 ;upisuje vrijednost 55h
MOVWF EECON2 ;u registar EECON2 (prvi ključ)
MOVLW 0xAA ;upisuje vrijednost AAh
MOVWF EECON2 ;u reg. EECON2 (drugi ključ)
BSF EECON1, WR ;počinje operacija upisa
;/omogućuje prekide
BSF INTCON, GIE ;- ako ih koristimo,
;\ u suprotnom izbacite
BCF EECON1, WREN ;onemogućuje pisanje
EEDATH : EEDATA: - sadrži 13-bitni podatak koji čitamo ili ćemo upisati u programsku memoriju
113
Čitanje se vrši na sljedeći način:
;/onemogućuje prekide
BCF INTCON, GIE ;- ako su već ranije omogućeni,
;\u suprotnom izbacite tu liniju
114
10.4.12 Zbrajanje dva 16 bitna broja
PROCESSOR 16F877
#include "p16f877.inc"
__CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC
PROCESSOR 16F877
#include "p16f877.inc"
__CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC
movf LSB1,W
subwf LSB2,1 ;oduzmi i spremi u LSB2
btfss STATUS,C ;kontrola carry bita
decf MSB2,1 ;dekrementiraj i spremi u MSB2
movf MSB1
subwf MSB2,1 ;zbroji ga sa MSB2
end
PROCESSOR 16F877
#include "p16f877.inc"
__CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC
cblock 0x40
bi,adr,nadr,rsort,sort,asort
endc
movlw .10 ;sprema 10 u w
115
movwf rsort ;interacija snimanja
movlw 0x30 ;sprema h'30' u w
movwf asort ;početna adresa sortiranja
poc movlw .9 ;9 Æ w
movwf bi ;broj interacija traženja najvećeg
movlw 0x20
movwf nadr ;početna adresa najvećeg = h'20'
movwf FSR ;spremanje u FSR registar, broj 0x20
movf INDF,0
movwf sort ;podatak se sprema u sort, početna
;najveća vrijednost
prva clrf 0x20 ;cisti spremnik
incf FSR ;sljedeća adresa : 0x21
subwf INDF,0 ;0x21 - 0x20 indirektno →w
btfsc STATUS,C ;usporedba carry bita
bsf 0x2a,0 ;upis statusa u pomoćni registar 0x2a
subwf INDF,0 ;vrijednost lokacije 0x21 u w
btfsc 0x2a,0
goto naj ;upisivanje najvećeg broja
decfsz bi
goto prva
goto upis
10.4.15 Interupt
U ovom programu omogućujemo prekid uslijed promjene porta B, prekoračenja TMR0 i prekid
preko pina RB0.
PROCESSOR 16F877
#include "p16f877.inc"
#include "bank.inc"
__CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC
org 0x00
goto Main
org 0x04 ;interupt vektor
goto Inter
116
Main clrf TMR0
BANK1
movlw B'01000000' ;unosimo bin podatak
movwf OPTION_REG ;interrupt preko RB0 na
;rastući brid
BANK0 ;setira bitove za E prekida
bsf INTCON,7 ;global E
bsf INTCON,T0IE ;brojač E
bsf INTCON,INTE ;vanjski E
bsf INTCON,RBIE ;port change E
Kada dođe do prekida, program skače na vektor/adresu prekidne rutine i onemogućuju se daljnji
prekidi.
CONSTANT PRESCstd = .1
117
goto WAITb ;vrti se 255 puta
decfsz WCYCLE,1 ;dekrementira .100 u .99
goto WAITa
RETURN ;vraća ga u glavni program
Ovaj makro će pripremiti parametre koji će definirati dužinu pauze nakon pozivanja potprograma
WAIT ili WAIT_X. Pauza se dobiva tako da se broje prekoračenja TMR0 brojača (prijelaz iz .255 u .0).
Kod prekoračenja se u registru INTCON,T0IF (2 bit) javlja zastavica.
Prema tome da bi dobili vremenski član - Timer - nije potrebno ići u prekidnu rutinu i brojat prekide,
nego je dovoljno brojati zastavice (flag bit).
Ako negdje u programu pozovemo macro Wait tako da upišemo
WAIT .100
preskaler u OPTION registru će biti postavljen na '1' (omjer TMR0 1:4, što znači da će TMR0
inkrementirati svaki 4 takt – to je određeno konstantom PRESCstd) i brojat će (dekrementirat) 100
prekoračenja i vratiti se u glavni program.
Timer će trajati 4*100*256= 102400 ciklusa. Pri taktu od 4MHz, jedan ciklus traje 1µs. To iznosi
102,4 ms.
Ako negdje u programu pozovemo macro Wait tako da upišemo
WAITX .244, .3
preskaler u OPTION registru će biti postavljen na '7' (omjer TMR0 1:256, što znači da će TMR0
inkrementirati svaki 256 takt – to je određeno argumentom PRESCext) i brojat će (dekrementirat) 100
prekoračenja i vratiti se u glavni program.
Timer će trajati 16*244*256=999424 µs što je 0,999424 s. Približno ≈1s. Pri taktu od 4MHz kada
jedan ciklus traje 1µs.
Program.
PROCESSOR 16F877
#include "p16f877.inc"
#include "wait.inc"
#include "bank.inc"
cblock 0x20
WCYCLE, PRESC wait
endc
BANK1
clrf TRISC
BANK0
end
118
10.4.17 Dvosmjerna vrtnja motora
Programom mijenjamo smjer vrtnje trofaznog motora (RA0 – tipkalo T1, RA1 – tipkalo T2, RA2 –
tipkalo STOP, RB0 – sklopnik M1, RB1 – sklopnik M2).
PROCESSOR 16F877
#include "p16f877.inc"
#include "bank.inc"
__CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC
BANK1
clrf TRISB
BANK0
end
10.4.18 Dioda
Na RA1 pin je spojena LED dioda koja svijetli 2 s, pa 1s ne svijetli, i onda opet svijetli 2 s itd.
PROCESSOR 16F877
#include "p16f877.inc"
#include "bank.inc"
__CONFIG _CP_ON&_WDT_OFF&_PWRTE_ON&_XT_OSC
119
org 0x00
goto main
org 0x04
goto prekid
con equ 0x20
main BANK1
movlw b'11111101'
movwf TRISA
BANK0
bsf PORTA,1 ;dioda svijetli
BANK1
movlw b'00000100' ;preskaler 100
movwf OPTION_REG ;inkrementiranje
;TMR0 svake 32 µs
movlw b'10100000'
movwf INTCON ;dozvola tajmerskog prekida
clrf con
petlja goto petlja ;čekanje prekida
prekid movlw b'10100000' ;dozvola sljedećeg prekida,
movwf INTCON ;jer prilikom prekida GIE ode
;u nulu
incf con
movlw .244 ;prekid se treba desiti 244 puta,jer
;je 32*256*244=1998848 µs
subwf con,0
btfss STATUS,Z
retfie
clrf con ;postavljanje con varijable ponovno
;u nulu
BANK0
Btfss PORTA,1 ;test da li je dioda svijetlila ili nije
goto skok
BANK1
Movlw b'00000011'
Movwf OPTION_REG
BANK0
Bcf PORTA,1
retfie
skok BANK1
movlw b'00000100'
movwf OPTION_REG
BANK0
Bsf PORTA,1
retfie
end
PROCESSOR 16F84
#include "p16f84.inc"
#include "bank.inc"
__CONFIG _CP_ON&_WDT_OFF&_PWRTE_ON&_XT_OSC
org 0x00
goto main
org 0x04
goto main
120
cblock 0x0c
aa,bb,cc
endc
main BANK1
movlw b'11111101'
movwf TRISA ;RA1 definiramo kao izlazni pin
BANK0
goto dalje
return
;kraj petlje od dvije sekunde
;gašenje diode
dalje bcf PORTA,1 ;dioda ne svijetli
;čekanje 1 sekundu
PETl2 movlw .127
movwf cc
petl2 call PETl1
decfsz cc,1
goto petl2
goto daljel
121
10.4.19 LED diode na portu B
Program za paljenje i gašenje svih LED dioda na portu B u intervalima od 0,5ms. Prvo ćemo
izraditi makro koji generira pauzu.
local Loop1
local dechi
local Delay1ms
local Loop2
local Kraj
PROCESSOR 16f877
#include "p16f877.inc"
#include "pause.inc"
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
122
Cblock 0x20 ;početak RAM-a
HIcnt ;registri koje koristi makro pausems
LOcnt
LOOPcnt
endc
Loop
movlw 0x00 ;isključi diode na portu B
movwf PORTB
pausems .500 ;pričekaj 500 milisekundi (0.5sec)
movlw 0xff ;uključi diode na portu B
movwf PORTB
pausems .500 ;pričekaj 500 milisekundi (0.5sec)
goto Loop ;skoči na labelu Loop
end
U ovom primjeru na mjesto argumenta makro naredbe možemo unesti 16 bitni broj. To znači da
možemo napraviti pauzu od 65,535 s.
Podaci se nalaze od adrese 0x30 do 0x39. Treba ih usporediti sa podatkom na adresi 0x20. Ako
su jednaki adresu tog podatka stavi na 0x40 i svaki sljedeći dalje.
PROCESSOR 16f877
#include "p16f877.inc"
#include "bank.inc"
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
ORG 0x00
bcf STATUS,RP0
bcf STATUS,RP1 ;BANK0
movlw 0x2f ;0x30-1 adresa podatka
movwf FSR ;w u FSR
movlw 0x40
movwf 0x22 ;početna adresa sortiranja
goto petlja
123
goto petlja ;ako nisu isti, goto petlja
goto upis ;jednaki su
prekid
end
10.4.21 Protok
Na RC1 pristižu impulsi sa mjerača protoka koji daje 100 impulsa/litri tekućine. Ovaj program će
na port B ispisivati veličinu protoka litre/sekundi.
PROCESSOR 16F877
#include "p16f877.inc"
#include "bank.inc"
__CONFIG _CP_ON&_WDT_OFF&_PWRTE_ON&_XT_OSC
org 0x00
goto main
org 0x04
goto prekid
cblock 0x20
brojac,v1
endc
main BANK1
movlw b'00000010'
movwf TRISC ;RC1 kao ulazni pin (dolaze impulsi)
movlw b'00000000'
movwf TRISB ;portb kao izlazni
movlw b'00000101'
movwf OPTION_REG ;timer se inkrementira svake 64µs
movlw b'10100000'
movwf INTCON ;dozvola timerskog prekida
clrf brojac
clrf v1
BANK0
124
prekid BANK1
movlw b'10100000'
movwf INTCON ;ponovna dozvola prekida
incf v1 ;inkrementiranje pomoćne varijable v1 da
;vidimo koliko se desilo prekida
movlw .156 ;156*64 = 9984 µs tj. 1ms
subwf v1
btfss STATUS,Z ;ako se desilo 156 prekida idem dalje,
retfie ;ako nije nastavljam s prekidima
Na port B pristižu podaci sa 8 bitnog A/D pretvornika o stanju temperature u prostoriji. U spoju sa
termometrom A/D pretvarač nam daje informaciju o temperaturi u rasponu od –20 do +80 °C. Na RC1
je spojen grijač preko releja. Napiši program da temperatura u prostoriji bude 21 plus/minus 1°C.
Početna temperatura u prostoriji je 0°C.
PROCESSOR 16F877
#include "p16f877.inc"
#include "bank.inc"
__CONFIG _CP_ON&_WDT_OFF&_PWRTE_ON&_XT_OSC
org 0x00
goto main
org 0x04
goto main
goto petlja
end
125
Imamo 256 (0-255) mogućih stanja registra kojima moramo pridružiti raspon temperature od -20
do 80°C.
10.4.23 Pretvorbe
a) Binarni u EXCESS-3
PROCESSOR 16F877
#include "p16f877.inc"
__CONFIG _CP_ON&_WDT_OFF&_PWRTE_ON&_XT_OSC
org 0x00
goto main
org 0x04
goto main
cblock 0x20
bin,ex3
endc
main
movlw .11
movwf bin
movlw .3
addwf bin,0
movwf ex3
b) EXCESS-3 u binarni
PROCESSOR 16F877
#include "p16f877.inc"
__CONFIG _CP_ON&_WDT_OFF&_PWRTE_ON&_XT_OSC
org 0x00
goto main
org 0x04
goto main
cblock 0x20
bin,ex3
endc
main
movlw .11
movwf ex3
movlw .3
subwf ex3,0
movwf bin
126
c) Binarni u oktalni
PROCESSOR 16F877
#include"p16f877.inc"
__CONFIG _CP_ON&_WDT_OFF&_PWRTE_ON&_XT_OSC
org 0x00
goto main
cblock 0x20
oz1,oz2,oz3,bin
endc
movlw .64
addwf bin,1
dva movlw .8
subwf bin,1
btfsc STATUS,C
incf oz2
btfsc STATUS,C
goto dva
movlw .8
addwf bin,0
movwf oz3
end
d) Oktalni u binarni
PROCESSOR 16F877
#include "p16f877.inc"
__CONFIG _CP_ON&_WDT_OFF&_PWRTE_ON&_XT_OSC
org 0x00
goto main
org 0x04
goto main
cblock 0x20
oz2,oz1,oz0,bin,con ;oz2,oz1,oz0 - oktalne znamenke
endc ;con - kontrolna varijabla za petlje
127
;rezultata u oz2
incf con
movlw .6
subwf con,0
btfss STATUS,Z
goto pet2
;množenje sa 8
clrf con
clrf STATUS
end
Ovaj program izdvaja znamenke stotice, desetice i jedinice iz broja. To ćemo napraviti preko makro
naredbe koju ćemo kasnije pozvati u programu.
Spremi kao digbyte.inc
128
addwf Digtemp,f
Exit2 movf Digtemp,w ;izračunavanje znamenke jedinice
movwf Dig3
endm
PROCESSOR 16F877
#include "p16f877.inc"
#include "digbyte.inc"
__CONFIG _CP_ON&_WDT_OFF&_PW RTE_ON&_XT_OSC
cblock 0x20
REZ
Digtemp
Dig1 ;Dig1 - stotica
Dig2 ;Dig2 - desetica
Dig3 ;Dig3 - jedinica
endc
end
Poslije izvođenja programa sadržaj u registrima Dig1, Dig2, Dig3 će biti ovakav:
.2 .5 .5
PROCESSOR 16F877
#include"p16f877.inc"
__CONFIG _CP_ON&_WDT_OFF&_PWRTE_ON&_XT_OSC
org 0x00
goto main
org 0x04
goto main
cblock 0x20
con,bcd2,bcd1,bcd0,bin
endc
129
main clrf con
clrf bin
clrf bcd2
clrf bcd1
clrf bcd0
movlw .3
movwf bin
end
PROCESSOR 16f877
#include "p16f877.inc"
#include "bank.inc"
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
Main BANK1
movlw b'11000001' ;uključeni pull up otpori na
;PORTB, prekid na rastući brid, TMR0/4
movwf OPTION_REG
bcf TRISA,0 ;pin RA0 je izlazni
movlw b'11111111'
130
movwf TRISB ;svi pinovi PORTB su ulazni
bsf OPTION_REG,0
BANK0
movlw b'10001000' ;uključivanje interrupata: GIE i INTE
movwf INTCON
131
movf Ulaz
btfss STATUS,Z ;ako je sadržaj registra Ulaz 0,
return ;vraća se iz potprograma Kontrola
goto Stand_by ;u protivnom se vraća u Stand_by
end
132
11 Popis pojmova i kratica:
A
ADC (Analog-to-Digital Converter)- analogno digitalni pretvarač
Adresiranje
ALU (Arithmetic Logic Unit)- Aritmetičko logička jedinica
Analogna veličina
Analogno – digitalni pretvarač
Algoritam
Analogna informacija
Arhitektura računala
ASCII kod (American Standard Code for Information Interchange)- Američki standardni kod za
razmjenu informacija
Asinkroni prijenos podataka
ASIC (application-specific integrated circuit)
B
B - Bajt (byte)
Binarni podatak
b – bit (binary digit)
Boolova logika
Brojač
Bistabil
Bit operacije
BCF (Bit Clear Function)
BSF (Bit Set Function)
C
CPU (Central Processing Unit)- Centralna procesorska jedinica
CRT (Cathode Ray Tube)- Katodna cijev
Clock-takt
CISC (Complex Instruction Set Computer)
CMOS (Complementary Metal Oxide Semiconductor)
D
DAC (Digital-Dnalog Converter)- Digitalno analogni pretvarač
Dekoderi
Dinamička greška
Digitalni sustav
DCE (Data Communications Equipment)-Podatkovna komunikacijska oprema
DTE (Data Terminal Equipment)-Podatkovna terminalna oprema
DC (Digit Carry)
E
EEPROM (Electrically Erasable Read-Only Memory)
Ekspertni sustavi
Električni signali
EEDATA registar
EEADR registar
F
FIFO (FIrst in – First out)
FPGA (field-programmable gate array)
FSR registra
G
Generator takta
Građa računala
Greška ponovljivosti
GPR (General Purpose Registrers) registri
GIE sklopke
H
Harvard-ska arhitektura
133
I
Indirektno adresiranje
Instrukcije
Instrukcijski registar
Integrirani sklopovi
INTF (INT External Interrupt Flag)
INTCON registar
INTE (INT External Interrupt Enable)
Izlazni sklopovi
K
Kašnjenje
Kodiranje
L
LSI – komponente
Logička jedinica
M
Memorija
Memorijska jedinica
Mikroprocesori
Mikrokontroleri
Mikroračunala
Multipleksiranje
Mrtvo vrijeme
Mrtva zona
Međusklop
MMU (Memory Menagment Unit)
N
Naredba
Namjenski registri
Namjenski registri
O
Obrada podataka
Off line sustavi
On line sustavi
Opreacijski kod
Oscilatorski Start-up Timer
OPTION registra
Organizacija memorije
OPTION registar
P
Pareleni prijenos podataka
PIC (Programm Interupt Controller)
Prijenos podataka
Procesna računala
Procesor
Program
Programski jezici
PLC programibilni logički kontroleri
Paritetni sklop
Paritetni bit
Parametri procesa
PC(Personal Computer) računalo
PC (Program Counter)-Programsko brojilo
Podatkovna sabirnicaPORTA
PORTB
Prekidi (Interrupts)
R
Radna memorija
Računalo
134
Rezolucija ili razlučivost
Registar općenamjene
Reset
Relativno adresiranje
RS232
RISC (Reduced Instruction Set Computer)
S
Sample & Hold sklop
Sabirnica
SCADA (Supervisory Control And Data Acquisition)
Segmentno adresiranje
Senzori
Serijska komunikacija
Serijski prijenos podataka
SFR (Special Function Registers)
Slobodni brojač
Sigma Delta A/D pretvarači
Sinkroni prijenos
Sigurni brojač
Status registar
Statička greška
Stog (Stack)
Sučelje
T
T0IF (TMR0 Overflow Interrupt Flag)
T0IE (TMR0 Overflow Interrupt Enable)
T0SE (TMR0 Sorce Edge Select)
T0CS (TMR0 Clock Source Select)
U
U/I kanali
Upravljačka jedinica
Unutrašnja sabirnica
Upravljačka sabirnica
T0SE (TMR0 Sorce Edge Select)
T0CS (TMR0 Clock Source Select)
V
VLSI tehnologija
Vanjska sabirnica
W
Watchdog timera
WR (Write Control)
WREN (EEPROM Write Enable)
WRERR (EEPROM Error Flag)
WR (Work Registar)-Privremeni rwgistar
Z
Z (Zero) zastavica
135
12 Popis korištene literature:
136