Mikroprocesorski Sistemi

download Mikroprocesorski Sistemi

of 172

description

Mikroprocesorski Sistemi Skripta

Transcript of Mikroprocesorski Sistemi

  • S L O B O M I R P U N I V E R Z I T E T

    FAKULTET INFORMACIONIH TEHNOLOGIJA

    Dr Aleksandar . ORI

    PICmicro 2012.

  • Integrisani Raunarski Sistemi Dr Aleksandar . ORI

    2

    Autor: Dr Aleksandar . ORI, Slobomir P Univerzitet - Fakultet informacionih tehnologija

    MIKROPROCESORSKI SISTEMI

    Recenzenti: Dr Milun Jevti, red. prof. Elektronskog fakulteta Univerziteta u Niu Dr Zlatko Bundalo, red. prof. Elektrotehnikog fakulteta Univerziteta u Banja Luci

    Izdava: Slobomir P Univerzitet - Fakultet informacionih tehnologija, Bijeljina

    Raunarska obrada teksta i slika: Dr Aleksandar . ori

    Dizajn korica: Dr Aleksandar . ori

    tampa: MST Gaji, Beograd

    Tira: 200 primeraka

    ISBN 978-86-80893-38-9

    CIP ,

    Pretampavanje ili umnoavanje ove knjige u celini ili njenim delovima nije dozvoljeno bez prethodne izriite saglasnosti i pismene dozvole autora i izdavaa.

  • Integrisani Raunarski Sistemi Dr Aleksandar . ORI

    3

    S A D R A J

    P R E D G O V O R ........................................................................................................................ 5 MIKROPROCESORI, MIKRORAUNARI ILI MIKROKONTROLERI? ........................................ 8 1.1. IZBOR MIKROKONTROLERA .......................................................................................... 9 1.1.1. Zato PICmicro? ..................................................................................................... 11 1.1.2. Ugraeni sistemi ....................................................................................................... 12 1.1.3. Razvoj aplikacija na bazi mikrokontrolera ............................................................. 12 ALATI ZA RAZVOJ SOFTVERA PROGRAMIRANJE PIC MCU ............................................ 14 2.1. RAZVOJNI ALATI ............................................................................................................ 14 2.2. PROGRAMIRANJE PIC16F877 MCU ............................................................................. 18 2.2.1. Skup i podela instrukcija ......................................................................................... 18 2.2.2. Asemblerski jezik ...................................................................................................... 21 2.2.3. Vii programski jezici ............................................................................................... 24 2.2.4. Modularno programiranje - potprogrami i hardverski stek ................................. 25 2.2.5. Rukovanje prekidima ............................................................................................... 28 2.2.6. Protona (pipelining) obrada instrukcija ............................................................... 37 ARHITEKTURA I ORGANIZACIJA MCU PIC16F877 ................................................................. 40 3.1. RISC i CISC ARHITEKTURE MIKROKONTROLERA ................................................... 40 3.2. ORGANIZACIJA MEMORIJSKOG PROSTORA ........................................................... 43 3.2.1. Periferijska Data EEPROM memorija ..................................................................... 44 3.2.2. Programska Flash EEPROM memorija .................................................................. 50 3.2.3. SRAM memorija podataka ....................................................................................... 56 3.2.4. Naini adresiranja RAM memorije .......................................................................... 58 3.3. IZBOR I KONFIGURISANJE TAKTNOG OSCILATORA CPU ...................................... 60 3.4. PROGRAMSKI BROJA (BROJA INSTRUKCIJA) .................................................... 63 3.4.1. itanje tabele metodom izraunatog skoka .......................................................... 66 3.5. KONFIGURACIONA RE MCU PIC16F877 .................................................................. 68 INTEGRISANI SISTEMI ZA RESETOVANJE MCU .................................................................... 71 4.1. VRSTE RESETA MCU PIC16F877 ................................................................................. 72

  • Integrisani Raunarski Sistemi Dr Aleksandar . ORI

    4

    4.1.1. MCLR reset u toku normalnog rada MCU i u sleep stanju.................................. 72 4.1.2. POR (Power-up Reset) reset ................................................................................... 74 4.1.3. WDT (Watch-Dog Timer) reset u toku normalnog rada MCU i u sleep stanju ... 80 4.1.4. BOR (Brown-Out Reset) reset ................................................................................. 82 POVEZIVANJE MCU SA OKRUENJEM I/O PORTOVI OPTE I SPECIJALNE NAMENE 85 5.1. ORGANIZACIJA I MULTIPLEKSNE FUNKCIJE PORTA A .......................................... 88 5.2. ORGANIZACIJA I MULTIPLEKSNE FUNKCIJE PORTA B .......................................... 91 5.3. ORGANIZACIJA I MULTIPLEKSNE FUNKCIJE PORTA C .......................................... 96 5.4. ORGANIZACIJA I MULTIPLEKSNE FUNKCIJE PORTA D .......................................... 97 5.5. ORGANIZACIJA I MULTIPLEKSNE FUNKCIJE PORTA E .......................................... 98 5.6. PARALELNI SLAVE PORT ............................................................................................. 99 INTEGRISANI PERIFERIJSKI PODSISTEMI MCU PIC16F877 ............................................... 102 6.1. TAJMERI/BROJAI ...................................................................................................... 106 6.2. MERENJA VREMENA I FREKVENCIJE NA BAZI TAJMERA/BROJAA ................ 108 6.3. TAJMER/BROJA 0 (TMR0) ........................................................................................ 113 6.4. TAJMER/BROJA 1 (TMR1) ........................................................................................ 117 6.5. TAJMER/BROJA 2 (TMR2) ........................................................................................ 123 6.6. CCP (CAPTURE, COMPARE, PWM) PERIFERIJE ..................................................... 125 6.6.1. CCP u reimu kaptiranja (Capture) ....................................................................... 127 6.6.2. CCP u reimu poreenja (Compare) ..................................................................... 129 6.6.3. CCP u reimu generisanja PWM (Pulse Width Modulation) signala ................ 131 6.7. A/D KONVERTOR ......................................................................................................... 136 6.7.1. A/D konvertor sa registrom sukcesivnih aproksimacija .................................... 139 6.7.2. Vreme akvizicije A/D kanala .................................................................................. 142 6.7.3. Izbor taktnog generatora A/D modula .................................................................. 144 6.7.4. Rad A/D modula u sleep reimu............................................................................ 145 6.8. UNIVERZALNI SINHRONO/ASINHRONI PRIJEMNIK/PREDAJNIK (USART) .......... 146 6.8.1. Asinhrona serijska komunikacija ......................................................................... 149 6.8.2. Asinhroni predajnik USART-a ............................................................................... 152 6.8.3. Asinhroni prijemnik USART-a ............................................................................... 154 6.8.4. USART u sinhronom master modu ...................................................................... 157 6.8.5. USART u sinhronom slave modu ......................................................................... 158 6.9. SINHRONI SERIJSKI PORT U MASTER MODU (MSSP) ........................................... 159 6.9.1. SPI sinhroni serijski interfejs ................................................................................ 159 6.9.2. IIC sinhroni serijski interfejs ................................................................................. 164 LITERATURA

  • Integrisani Raunarski Sistemi Dr Aleksandar . ORI

    5

    P R E D G O V O R

    Udbenik "Mikroprocesorski Sistemi" napisan je sa ciljem da popuni prazninu usled dueg nedostatka domae strune literature koja se odnosi na problematiku Microchip-ovih PIC mikrokontrolera. Knjiga je koncipirana i napisana u skladu sa programom predmeta Mikroprocesorski Sistemi koji studenti Fakulteta informacionih tehnologija Slobomir P Univerziteta sluaju na treoj godini osnovnih akademskih studija. Autor je na osnovu dosadanjih iskustava siguran da ova knjiga moe posluiti kao udbenik i studentima elektrotehnikih fakulteta, kao i inenjerima informatike i elektrotehnike u sticanju znanja i vetina pri projektovanju ugraenih sistema. Sadraj udbenika je plod viegodinje nastave koju je autor drao studentima iz predmeta Mikroprocesorski Sistemi i obiluje jednostavnijim primerima realizacije i programiranja manje sloenih ureaja i sistema zasnovanih na PIC (Programmable Interface Controller) MCU (Micro Controller Unit). Knjiga je posveena osmobitnim MCU iz serije PIC16F87X, odnosno, etrdesetopinskom PIC16F877 Microchip-ovom mikrokontroleru koji ve izvesno vreme reprezentuje sam vrh popularnih osmobitnih MCU. Materija u knjizi je organizovana tako da opis arhitekture pomenutog MCU prate i primeri programa pisanih na asemblerskom jeziku i jeziku C. Svi programi su briljivo napisani i komentarisani sa posebnom panjom. Njihova valjanost je proverena na softverskom simulatoru ili na realnom razvojnom sistemu. Najvei broj programa napisan je na C jeziku za ta je korien CCS (Custom Computer Services Inc.) C kompajler kao integrisano razvojno okruenje. Udbeniko tivo je podeljeno na est poglavlja. Prvo, uvodno poglavlje opisuje esencijalne razlike meu pojmovima kao to su mikroprocesor, mikroraunar i mikrokontroler, kriterijume za pravilan izbor MCU-a i postupak razvoja aplikacija na bazi MCU-a. Drugo poglavlje razmatra softverske razvojne alate PIC mikrokontrolera za razvoj aplikacija, skup i podelu instrukcija, programske jezike i modularno programiranje, rukovanje prekidima i protonu obradu instrukcija. Sagledane su prednosti modularnog naina programiranja i razmatrani potprogrami, stek i prekidni mehanizam. Tree poglavlje posveeno je arhitekturi i organizaciji PIC16F877 MCU. S tim u vezi, najpre su opisane RISC (Reduced Instruction Set Computer) i CISC (Complex Instruction Set Computer) arhitekture mikrokontrolera i ukratko periferijski moduli a potom detaljno razmatrana organizacija memorijskog prostora i naini adresiranja statike RAM memorije. Izboru i

  • Integrisani Raunarski Sistemi Dr Aleksandar . ORI

    6

    konfigurisanju taktnog oscilatora CPU jedinice posveen je deo poglavlja. Kraj poglavlja odnosi se na organizaciju programskog brojaa i konfiguracionu re MCU. U etvrtom poglavlju opisani su integrisani sistemi za resetovanje kojima je opremljen MCU. Razmatran je uticaj vie razliitih vrsta internih i eksternih reset signala na stanja registara mikrokontrolera i izvravanje programa, kao i ponaanje sistema u toku uspostavljanja napona napajanja. Opisana su, takoe, jednostavna eksterna kola za resetovanje MCU za sluaj kada zbog odreenih ogranienja interna integrisana kola ne mogu biti koriena. I/O portovi MCU opte i specijalne namene koji slue za povezivanje MCU sa spoljanjim okruenjem razmatrani su u petom poglavlju knjige. Detaljno je opisana arhitektura raspoloivih portova i pojedinih namenskih linija portova. Ilustrovana je i programski objanjena prekidna logika odreenih linija porta B MCU-a. Prikazan je i jedan nain realizacije matrine tastature 4x3. Posebno je u okviru ovog poglavlja razmatran port D u radnom reimu paralelnog slave porta (Parallel Slave Port - PSP). Data su objanjenja i ilustracije ciklusa upisa i itanja PSP potkrepljena programskim reenjima. Najobimnije esto poglavlje ovog udbenika posveeno je integrisanim periferijskim podsistemima MCU. Posle uvodnog dela posveenog tajmerima/brojaima opisani su principi merenja vremena i frekvencije na bazi tajmera/brojaa sa primerom realizacije digitalnog frekvencmetra i meraa periode periodinih signala. Od integrisanih standardnih periferijskih ureaja detaljno su razmatrani osmobitni tajmer 0, esnaestobitni tajmer 1 i osmobitni tajmer 2. Dati su primeri njihove primene u sistemima za upravljanje proizvodnom trakom i mainom za pakovanje, kao i u sistemu za akviziciju temperature. Tri podmodula (Capture-Compare-PWM) u sastavu CCP periferijskog ureaja analizirana su pojedinano kao i primeri programskih reenja praktine primene podmodula. Integrisanom 10-bitnom A/D konvertoru sukcesivnih aproksimacija posveena je posebna panja, zbog injenice da se radi o vanoj periferiji koja omoguava da se u mikrokontroleru (u digitalnom domenu) prihvataju i obrauju analogne ulazne veliine. Opisani su vani parametri A/D modula kao to su: brzina konverzije, vreme akvizicije i izbor taktnog generatora. Kraj ovog poglavlja bavi se analizom integrisanih serijskih komunikacionih interfejsa. Analizirani su asinhroni i sinhroni komunikacioni interfejsi, protokoli i naini sprezanja ovih periferijskih ureaja sa PC raunarom i drugim poluprovodnikim ureajima koji su opremljeni odreenim komunikacionim interfejsima. Objanjen je asinhroni serijski prenos podataka koji se realizuje komunikacionim kanalom po standardu RS232 ili RS485, kao i sinhroni serijski prenos zasnovan na integrisanim periferijskim komunikacionim interfejsima IIC (Inter Integrated Circuit I2C) i SPI (Serial Peripheral Inteface). Gotovo svako izlaganje materije u okvirima potpoglavlja praeno je sa jednim ili vie proverenih primera praktine primene ili realizacije to, prema miljenju autora, moe doprineti jasnoi i boljem razumevanju izloenog tiva. Autor se srdano zahvaljuje recenzentima dr Milunu Jevtiu, redovnom profesoru Elektronskog fakulteta Univerziteta u Niu i dr Zlatku Bundalu, redovnom profesoru Elektrotehnikog fakulteta Univerziteta u Banja Luci na umesnim sugestijama i savetima koji su doprineli kvalitetu ovog dela. Uprkos injenici da je udbenik pripreman i realizovan sa velikom panjom, autor je svestan moguih greaka koje se, gotovo po pravilu, potkradaju i najiskusnijim u ovom poslu. Stoga e svaka dobronamerna i korisna primedba italaca biti uzeta u obzir i prihvaena sa zahvalnou autora.

    Prof. dr Aleksandar . ORI Mart 2012

  • Integrisani Raunarski Sistemi Dr Aleksandar . ORI

    7

    * * *

    O va knjiga posveO va knjiga posveO va knjiga posveO va knjiga posveena je m ojoj ena je m ojoj ena je m ojoj ena je m ojoj porodici, porodici, porodici, porodici, supruzi L idiji i supruzi L idiji i supruzi L idiji i supruzi L idiji i

    sinovim a sinovim a sinovim a sinovim a edom iru i N ikoli.edom iru i N ikoli.edom iru i N ikoli.edom iru i N ikoli.

    Z a Z a Z a Z a godingodingodingodineeee ljubavljubavljubavljubav iiii, razum evanj, razum evanj, razum evanj, razum evanjaaaa i stalni stalni stalni stalneeee podrkpodrkpodrkpodrkeeee , kao , kao , kao , kao

    znak zahvalnostiznak zahvalnostiznak zahvalnostiznak zahvalnosti....

    A utorA utorA utorA utor

  • Integrisani Raunarski Sistemi Dr Aleksandar . ORI

    8

    Poglavlje 1

    MIKROPROCESORI, MIKRORAUNARI ILI MIKROKONTROLERI?

    Savremeni integrisani mikroprocesori CPU (Central Processing Unit) generalno su zastupljeni u zahtevnim aplikacijama sofisticiranih performansi gde cena i gabarit dizajna nisu kritini kriterijumi izbora. Velika procesorska snaga modernih mikroprocesora doputa mogunost njihove ugradnje u desktop raunare i radne stanice gde su softverska kompatibilnost, fleksibilnost, znaajna procesorska mo za multiprocesnu obradu, performanse i pouzdanost od znaaja. Integrisani blokovi dananjih mikroprocesora (kakav je npr. Pentium IV) pored mikroprocesora opte namene sadre i jedinicu za upravljanje memorijskim prostorom, interapt kontroler, matematiki procesor, ke memoriju itd. Sve to im omoguava da izvravaju simultano vei broj kompleksnih i zahtevnih procesa - programa. Sa veim brojem jezgara dananji mikroprocesori uspeno omoguavaju i paralelizam u izvravanju procesa. Ali ono to njih u osnovi razlikuje od mikrokontrolera je to oni sami ne mogu da funkcioniu kao mikroraunar. Neophodan je dodatni hardver za realizaciju memorijskog prostora - operativne memorije, i brojnih ulazno/izlaznih modula za realizaciju interakcije sa okruenjem - perifernim ureajima. Termin mikroraunari koristi se za sistem koji minimalno sadri mikroprocesor, programsku memoriju, memoriju podataka i ulazno-izlazni (I/O) ureaj. Time je omogueno da mikroraunar realizuje neku korisnu funkciju prema okruenju. Savremeni mikroraunarski sistemi ukljuuju i

  • Integrisani Raunarski Sistemi Dr Aleksandar . ORI

    9

    dodatne komponente kao to su tajmeri, brojai, A/D konvertori, komunikacioni interfejsi i slino. Prema tome, pod mikroraunarskim sistemom opte namene, danas se podrazumeva raunar kao to je PC sa perifernim memorijskim ureajima sa magnetnim i optikim medijumima, periferijama za multimedijalne komunikacije i operativnim sistemom opte namene. Za razliku od ovih, postoje i mikroraunarski sistemi specijalizovane namene, koji moraju da zadovolje i dodatne stroge zahteve. Takvi su na pimer sistemi za rad u realnom vremenu (Real Time Systems) koji mogu da budu i sloeniji od PC-a sa specijalizovanim operativnim sistemom za rad u realnom vremenu. Ali, veliki broj specijalizovanih mikroraunarskih sistema se realizuje za konkretnu - jednu namenu, za ta nije neophodan hardver i softver obima PC-a. Za realizaciju ovih namenskih (ugraenih - embedded) mikroraunarskih sistema, od kojih se danas sve vie zahteva to manja potronja energije, realizovani su mikroraunari na jednom ipu. Integrisan ceo mikroraunar na jednom ipu, kratko nazvan mikrokontroler, danas moe biti mikroraunar baziran na 8-bitnom mikroprocesoru sa skromnim memorijskim prostorom i skromnim periferijama (U/I kontrolerima), pa do mikroraunara sa 32- bitnim mikroprocesorom i monim pridruenim hardverom. Ova knjiga posveena je mikroraunarima integrisanim u jednom silicijumskom ipu, tkzv. mikrokontrolerima MCU (Micro Controller Unit) za realizaciju namenskih (ugraenih) mikroraunarskih sistema. Termin mikro sugerie veliinu ureaja a kontroler oblast primene (upravljake aplikacije). Sinonim ugraeni kontroler upuuje na ugradnju mikrokontrolera u iroki spektar monih ureaja kojima upravlja, kao to su: kuni elektronski ureaji, automobilski i vojni ureaji, HI-FI audio oprema, celularni telefonski ureaji, beini kontrolni ureaji, smart kartice i slino. Proseni automobil danas, poseduje na primer oko 20-tak ugraenih mikroraunara, (Mercedes S klase iz 1999 godine posedovao je 63 mikrokontrolera a automobil marke BMW iz iste godine 65) dok je tipino srednje elektrificirano domainstvo opremljeno sa vie od 50-tak mikrokontrolera ugraenih u razliite elektrine i elektronske ureaje. Amerika kompanija Texas Instruments proizvela je prvi mikrokontroler serije TMS1000. etvorobitna centralna procesorska jedinica (CPU) sa dovoljno RAM, ROM memorije i I/O hardverom u jednom ipu ugraivana je u kalkulatore, mikrotalasne penice i industrijske tajmere. Veliki broj mikrokontrolera razliitih proizvoaa, razliitih arhitektura i performansi, raspoloiv je danas na tritu. Neki od njih su podesni za krajnje jednostavne aplikacije, dok su drugi namenjeni za upravljanje i nadzor sloenih procesa sa zahtevnim obradama podataka. Tako je nastala jedna vrsta mikroraunara na ipu poznata pod nazivom Data Signal Processors (DSP) namenjenih obradi analognih elektrinih signala. Posebna panja u ovoj knjizi posveena je programiranju i projektovanju sistema na bazi PIC serije mikrokontrolera, proizvoaa Microchip Technology Inc. Iz napred reenog jasno je da su mikroraunari poput PC-a fleksibilniji a mikrokontroleri kompaktniji mikroraunarski sistemi, a da izbor prvenstveno zavisi od polja primene i cene.

    1.1. IZBOR MIKROKONTROLERA

    Mikroraunar u jednom ipu, poznat pod nazivom mikrokontroler, postaje takav integralni deo ivota ljudi da se moe rei da je raunarska revolucija bila najava primene mikrokontrolera u svakodnevnom ivotu. Naime, na temelju modernog drutva, vie od pet biliona mikrokontrolera, ugraenih u iroki spektar proizvoda, prodaje se u toku samo jedne godine. Na tritu danas, zastupljeno je na stotine raspoloivih mikroprocesora i mikrokontrolera a izbor odgovarajueg za zadatu aplikaciju moe biti ozbiljna potekoa za projektanta. Uopteno, polazei od korisnikih zahteva, funkcionalnosti i karakteristika aplikacije, kao i cene, projektant

  • Integrisani Raunarski Sistemi Dr Aleksandar . ORI

    10

    je u situaciji da poredi razliite mikroraunare raspoloive na tritu. Meutim, konaan izbor ipak je uslovljen brojnim faktorima kao to su: trini trendovi, profil proizvoaa, popularnost, ekspertiza lokalnog dizajna i slino. U tabeli 1.1.1. dat je pregled respektivnih proizvoaa popularnih osmobitnih mikrokontrolera najniih reprezentativnih cena kotanja.

    Proizvoa Ureaj Memorija u ipu Ostale karakteristike ureaja

    Atmel Corp. ATtiny11 1-kbyte Flash 8-bitni tajmer, analogni komparator, watchdog tajmer, oscilator u ipu, 1 izvor eksternog

    prekida, Dallas Semi DS80C310 256-byte RAM 4 takta po instrukcijskom ciklusu, UART, tri 16-

    bitna tajmera/brojaa, dva data pointera, 10 internih/16 eksternih izvora prekida

    Hitachi H8/3640 8-kbyte ROM, 512-byte RAM

    Tri 8-bitna/jedan 16-bitni tajmer, jedan 14-bitni PWM tajmer, watchdog tajmer, dva SCI porta,

    8-bitni ADC, 32KHz subtaktni generator Infineon C501 8-kbyte ROM, 256-byte

    RAM Serijski komunikacioni interfejs SCI, tri 16-bitna

    tajmera, 32 I/O porta Microchip PIC16CR54C 768-byte ROM, 25-byte

    RAM 12 I/O pina velikog strujnog kapaciteta, 8-bitni

    tajmer, watchdog tajmer, RC oscilator Mitsubishi M37531M4 8-kbyte ROM, 256-byte

    RAM 2.2V do 5.5V napajanje, tri 8-bitna tajmera, 16-

    bitni watchdog tajmer, 10-bitni osmokanalni ADC, UART, 1 eksterni izvor prekida, ugraeni

    taktni generator Motorola 68HC705KJ1 1240-byte OTP, 64-byte

    RAM Viefunkcijski tajmer sa 15 stanja, oscilator u ipu, watchdog tajmer, I/O port velikog strujnog

    kapaciteta NEC 789011 2-kbyte ROM, 128-byte

    RAM Dva 8-bitna tajmera, UART, 22 I/O porta,

    dvokanalni serijski interfejs SCI Philips P87LPC762 2-kbyte OTP, 128-byte

    RAM Oscilator, UART, watchdog tajmer, 32-bajtna

    EEPROM za podatke, IIC, analogni komparatori, tajmeri/brojai

    Samsung KS860004 4-kbyte ROM, 208-byte RAM

    Jedan 8-bitni tajmer, jedan 8-bitni tajmer/broja, RC oscilator, 32 I/O porta, 14 izvora prekida

    Scenix SX28AC 3-kbyte Falsh, 136-byte RAM

    8-bitni tajmer, watchdog tajmer, analogni komparator, programabilni I/O, brown-out

    detektor STMicro ST6203CB1 1-kbyte ROM ili OTP, 64-

    byte RAM 8-bitni tajmer, watchdog tajmer, 9 I/O linija visokog strujnog kapaciteta, brown-out kolo

    Toshiba TMP87C405AM 4-kbyte ROM, 256-byte RAM

    9 izvora prekida, programabilni watchdog tajmer, 22 programabilna I/O porta

    Xemics SA XE8301 22-kbyte ROM, 512-byte RAM

    Preskaler taktnog generatora, etiri 8-bitna tajmera sa PWM, watchdog tajmer, UART,

    kristalni i RC oscilator, 20 programabilnih I/O linija

    Zilog Z8E000 0.5-kbyte OTP, 32-byte RAM

    Jedan 16-bitni tajmer, watchdog tajmer, 13 I/O pina, 4 izvora prekida

    Tabela 1.1.1. Pregled respektivnih proizvoaa popularnih 8-bitnih mikrokontrolera sa najniom cenom kotanja.

    Kao snaan alat koji projektantu doputa mogunost kreiranja sofisticirane manipulacije ulazno-izlaznim podacima pod programskom kontrolom, mikrokontroleri se prema rezoluciji

  • Integrisani Raunarski Sistemi Dr Aleksandar . ORI

    11

    mogu klasifikovati na 8-bitne, 16-bitne i 32.bitne. Osmobitni mikrokontroleri su najpopularniji i koriste se u najveem broju aplikacija zasnovanim na mikrokontroleru. esnaestobitni i tridesetdvobitni mikrokontroleri su snaniji ureaji vee procesorske snage ali su uobiajeno skuplji i nepotrebni u veem broju aplikacija opte namene. Proces projektovanja ugraenih sistema poinje, kao i veina stvari u ivotu, od cilja-definicijom krajnjeg proizvoda. Definicija proizvoda pretpostavlja opis ciljnih funkcija i naina rada proizvoda. Kao kljuni korak u uspenom dizajnu bilo kog elektronskog sistema navodi se izrada tehnike dokumentacije. U odnosu na krajnji dizajn dokumentacija treba da sadri:

    - definiciju zahteva proizvoda, - definiciju funkcionalnih zahteva, - izbor mikrokontrolera, - hardversko-softverske specifikacije, - opis razvoja sistema, - hardverski dizajn, - dizajn softvera, - integraciju, - verifikaciju.

    U toku razvoja sistema esto se dogaa situacija u kojoj se pojavljuje problem sa izborom mikrokontrolera pa se, takoe esto, pojedine faze projektovanja moraju ponoviti. Na kraju, proces projektovanja sistema nije uvek mogue deliti. Kada je za razvoj aplikacije izabran mikrokontroler odgovarajue procesorske moi opredeljenje projektanta za ui izbor proizvoaa i odgovarajueg ureaja treba uskladiti sa:

    - miljenjem strune javnosti i popularnou serije mikrokontrolera, - cenom kotanja, - tehnikim karakteristikama ureaja, - performansama raspoloivog razvojnog alata - potronjom ureaja, - gabaritom ureaja, - iskustvom projektanata u radu sa serijom mikrokontrolera.

    Prema tome, izbor odgovarajueg mikrokontrolera u funkciji je brojnih inilaca sa gotovo jednakim teinskim udelom i meusobnim uticajem na opredeljenje. Izbor odgovarajueg mikrokontrolera za datu aplikaciju je uobiajeno i funkcija familijarnosti projektanta sa arhitekturom kontrolera.

    1.1.1. Zato PICmicro?

    U postupku realizacije sofisticiranih elektronskih sistema, odluku o nainu implementacije odreenog dela sistema donosi projektant. Dizajneru na raspolaganju stoje diskretna IC kola, PLD kola ili mikroprocesori. Meutim, mnoge aplikacije mogu biti pogodno implementirane primenom mikrokontrolera a mnotvo njih zasnovano je na PIC familiji Microchip-ovih RISC mikrokontrolera. Napredne karakteristike ovih mikrokontrolera predmet su panje narednih poglavlja ove knjige. Meutim, od koristi je na ovom mestu nabrojati neke od znaajnih osobina pomenute familije mikrokontrolera kao to su:

    1. RISC arhitektura sa relativno malim brojem instrukcija, 2. protona obrada instrukcija koja poveava brzinu izvoenja instrukcija,

  • Integrisani Raunarski Sistemi Dr Aleksandar . ORI

    12

    3. veliki broj raspoloivih instrukcija koje se izvravaju u jednom instrukcijskom ciklusu, 4. fleksibilni izbor taktnog oscilatora CPU jedinice (interni/eksterni/PLL), 5. iroki spektar u ipu integrisanih periferija kao to su: A/D konvertor, impulsno-irinski modulator

    (PWM), tajmeri/brojai, sinhroni i asinhroni serijski komunikacioni interfejsi, USB komunikacioni interfejs, EEPROM memorija, analogni komparatori itd.,

    6. interna programska memorija (FLASH EEPROM) i memorija podataka (SRAM), 7. serijsko programiranje ureaja u sistemu, 8. raspoloivi u kuitima od 8 do 40 pinova za prilagoenje irokom spektru aplikacija, 9. napon napajanja u opsegu od 2V do 5.5V, 10. relativno brzo ovladavanje jednostavnom arhitekturom ureaja.

    Slika. 1.1.1. Izgled jednog 8-bitnog RISC mikrokontrolera na jedinstvenom supstratu, proizvodnje Microchip Inc.

    1.1.2. Ugraeni sistemi

    Postoji neverovatno mnogo aplikacija zasnovanih na ugraenim mikroprocesorskim sistemima, od kojih su neke oigledne a druge manje primetne za veinu ljudi. Ugradnja velikog broja savremenih mikrokontrolera u jednostavne i funkcionalno sloene aplikacije, od ekonomino praktinih do zabavnih i gotovo apsurdnih, uticala je na znaajno smanjenje cene ovih ureaja na tritu. Ipak, cena sistema sa ugraenim kontrolerima, od sluaja do sluaja, nije uvek razumno prihvatljiva. Prava trina revolucija nastala je upravo razvojem i realizacijom ugraenih mikroprocesorskih sistema pri emu su mnogi analogni sistemi ubrzo postali deo istorije. Ugraeni sistemi namenjeni su prvenstveno inteligentnim elektronskim ureajima korienim za upravljanje, kao i ureajima za nadzor povezanim sa realnim okruenjem. Primeri takvih sistema su PLC (programabilni logiki kontroleri), DCS (distribuirani kontrolni sistemi) i pametni senzori. Savremena elektronska merna instrumentacija poseduje ugraeni mikroprocesorski sistem kao srce celog sistema. Mikrokontroleri se generalno koriste za namenske aplikacije a izbor odgovarajueg dobrim delom je funkcija familijarnosti projektanta sa njegovom arhitekturom. Meutim, razvojni alati za dati mikrokontroler i njihova cena, takoe znaajno utiu na opredeljenje projektanta.

    1.1.3. Razvoj aplikacija na bazi mikrokontrolera

    Jedna od moguih mapa za dizajniranje aplikacije na bazi mikrokontrolera zasnovana je na sledeim postupcima:

  • Integrisani Raunarski Sistemi Dr Aleksandar . ORI

    13

    1. Na prvom mestu definicija korisnikih zahteva. 2. Razvoj funkcionalnih specifikacija sistema. Kreiranje dovoljne dokumentacije za podrku

    zahtevima u opisnoj formi, formi blok dijagrama, dijagrama toka, vremenskih dijagrama itd. 3. Pronalaenje podesnog hardvera za podrku neophodnoj funkcionalnosti aplikacije. Ovaj korak

    bi trebao pomoi projektantu u odluci da li je mikrokontroler neophodan ili nije. 4. Identifikacija odgovarajueg mikrokontrolera kao mozga aplikacije ukoliko je neophodan. 5. Kada je izabran odgovarajui mikrokontroler, paljivo sprovesti dvostruku proveru zadovoljenja

    zahteva u sluajevima brzine, potronje, broja I/O linija, komunikacionih interfejsa mikrokontrolera itd.

    6. Prikupljanje celokupnog alata za pomo u razvoju hardvera i softvera. Alat ukljuuje odgovarajui asembler i/ili kompajler za pisanje i prevoenje programa, odgovrajui simulator za izabrani mikrokontroler, hardverski emulator po potrebi, razvojni sistem, programator i slino.

    7. Ako je dizajner familijaran sa arhitekturom izabranog mikrokontrolera moe se zapoeti sa asembliranjem prototipa. U suprotnom, dizajner bi morao prouavanjem arhitekture mikrokontrolera, pisanjem programskih primera i testiranjem na razvojnom sistemu ili programskom simulatoru zapoeti proces familijarizacije.

    8. Kada dizajner ovlada arhitekturom mikrokontrolera softver treba podeliti na celine koje mogu biti napisane u formi potprograma ili funkcija i testirane nezavisno. Razvoj hardvera moe ii paralelno u iteracijama testiranja i otklanjanja greaka za sve programske i hardverske celine aplikacije. Za kompletiranje pojedinih iteracija potrebno je koristiti opremu za testiranje i razvojne alate kao to su emulator, programator, simulator i slino, i u skladu sa mogunostima minimizirati broj iteracija. Jedan realistian mikrokontrolerski razvojni sistem prikazan je na slici 1.1.2.

    Slika. 1.1.2. Izgled jednog mikrokontrolerskog razvojnog sistema.

    9. Konano, integracijom softvera i hardvera potrebno je ponovo izvriti testiranje i eventualno otklanjanje greaka kompletne aplikacije.

    10. U toku pisanja programa i izgradnje hardvera, vana aktivnost koja ne sme biti proputena je izrada dokumentacije. Dokumentovanje dizajna je ekstremno vano ne samo kao trag projektanta ve i za testiranje aplikacije u toku ivota ureaja i buduih revizija.

    11. Finalni korak je razvoj sistema u ciljnom okruenju na odgovarajuoj proizvodnoj liniji.

  • Integrisani Raunarski Sistemi Dr Aleksandar . ORI

    14

    Poglavlje 2

    ALATI ZA RAZVOJ SOFTVERA PROGRAMIRANJE PIC MCU

    2.1. RAZVOJNI ALATI

    Za pisanje i testiranje softvera potreban je dobar razvojni alat. Sa porastom popularnosti PIC familije mikrokontrolera izbor raspoloivog softverskog razvojnog alata je postajao iri i atraktivniji za korisnike. Microchip nudi integrisano razvojno okruenje MPLAB IDE pod Windows operativnim sistemom za PICmicro MCU sa ugraenim editorom, asemblerom, linkerom i prevodiocem, mogunou integracije vieg programskog jezika, programskim simulatorom aplikacija, mogunou pokretanja aplikacije na emulatoru i softverom za programiranje mikrokontrolera. Sve nabrojano u jednom integrisanom okruenju predstavlja izvanredan alat sa mogunou da korisnik monitorie izvoenje aplikacije i odziv pod razliitim ulaznim uslovima. Na slici 2.1.1. a) prikazan je izgled vie otvorenih prozora paketa MPLAB IDE, dok je na slici 2.1.1. b) dat izgled jednog od pomonih prozora za podeavanje moda.

  • Integrisani Raunarski Sistemi Dr Aleksandar . ORI

    15

    Slika 2.1.1. a). Integrisano softversko razvojno okruenje za PICmicro MCU MPLAB IDE (Microchip).

    Osim MPLAB IDE paketa korisniku na raspolaganju stoji mnotvo drugih softverskih alata kao to su: PIC Simulator IDE - izvanredno integrisano okruenje simulatora namenjeno serijama PIC12FXXX i PIC16FXXX sa BASIC prevodiocem, asemblerom, disasemblerom, generatorom HEX datoteke, interaktivnim asemblerskim editorom i veim brojem simuliranih I/O ureaja, PIC18 Simulator IDE namenjeno seriji mikrokontrolera PIC18FXXXX, CCS C kompajler za brzi razvoj aplikacionog softvera na viem programskom jeziku C, slika 2.1.4., koji ukljuuje tri odvojena prevodioca - PCB za 12.bitni operacioni kod, PCM za 14-bitni opkod i PCH za 16-bitni opkod PIC mikrokontrolera, kao i softver za programiranje PICmicro ureaja IC-Prog namenjen veem broju razliitih vrsta programatora, slika 2.1.5.

    Slika 2.1.1. b). Izgled prozora razvojnog moda paketa MPLAB IDE za izbor procesora.

  • Integrisani Raunarski Sistemi Dr Aleksandar . ORI

    16

    Slika 2.1.2. PIC Simulator IDE.

    Na slici 2.1.2. prikazan je izgled PIC simulatora IDE sa prozorima simuliranih I/O ureaja i portovima izabranog mikrokontrolera PIC16F877A a na slici 2.1.3. izgled glavnog prozora istog simulatora namenjenog seriji PIC18FXXXX mikrokontrolera.

    Slika 2.1.3. PIC18 Simulator IDE.

  • Integrisani Raunarski Sistemi Dr Aleksandar . ORI

    17

    Slika 2.1.4. Editor i radno okruenje CCS C kompajlera za PICmicro.

    Slika 2.1.5. Izgled prozora alata IC-Prog za programiranje PICmicro.

  • Integrisani Raunarski Sistemi Dr Aleksandar . ORI

    18

    2.2. PROGRAMIRANJE PIC16F877 MCU

    2.2.1. Skup i podela instrukcija

    Mikrokontroler PIC16F877 poseduje skup od 35 etrnaestobitnih instrukcija od kojih se veina izvrava u jednom instrukcijskom ciklusu izuzev instrukcija grananja programa za ije izvoenje su potrebna dva ciklusa. Sve instrukcije mogu se podeliti na tri grupe: bajt orijentisane, bit orijentisane i literalne i kontrolne instrukcije/operacije. Na slici 2.2.1. prikazan je generalni format tri grupe instrukcija.

    Format bajt-orijentisanih instrukcija

    Format bit-orijentisanih instrukcija

  • Integrisani Raunarski Sistemi Dr Aleksandar . ORI

    19

    Opti format literalnih i kontrolnih instrukcija

    Specifian format kontrolnih instrukcija CALL i GOTO

    Slika 2.2.1. Formati tri grupe instrukcija MCU PIC16F877.

    Sedam najniih bita bajt orijentisanih operacija predstavlja adresu registra operanda to znai da se moe adresirati 27=128 registara. Bit oznaen sa d je odredini bit operacije tako da je za d=0 rezultat operacije u akumulatoru (radni registar w), dok je za d=1 rezultat u registru operanda. Podrazumevana vrednost ovog bita u sluaju da se izostavi je d=1. irina polja operacionog koda bajt orijentisanih instrukcija je est bita na najvioj poziciji u instrukcijskoj rei. Prema tome, ukupan broj bajt orijentisanih operacija moe biti 26=64, od ega je implementirano 18. Kao i kod grupe bajt orijentisanih operacija, sedam najniih bita bit orijentisanih operacija predstavlja adresu registra operanda. Sledea tri bita predstavljaju adresu bitske pozicije (0 do 7) osmobitnog sadraja registra operanda (23=8), dok najvia etiri bita pripadaju operacionom kodu ove grupe instrukcija (maksimalan broj ovih instrukcija moe biti 24=16). Literalne i kontrolne operacije su prostijeg formata. Osam najniih bita ovih operacija predstavlja literalnu konstantu (0 do 255) dok je operacioni kod estobitni. Izuzetak ine kontrolne operacije koje se odnose na instrukcije poziva potprograma CALL i bezuslovnog skoka GOTO koje imaju neto drugaiji format. Naime, literalna konstanta ovih instrukcija je 11-bitna i predstavlja simboliku adresu prve instrukcije potprograma ili bezuslovnog skoka, dok je operacioni kod ovih instrukcija trobitni. Budui da je adresa skoka 11-bitna to se ovim operacijama moe dosei prostor programske memorije ne vei od 211=2048 instrukcijskih rei (dve kilo rei) u odnosu na tekuu kontrolnu instrukciju skoka. U tabeli 2.2.1. prikazan je potpuni skup instrukcija podeljenih u tri grupe. U prvoj koloni prikazane su mnemonike instrukcije koje sadre operande i odredini bit d, dok je u drugoj koloni dat opis svake instrukcije. Broj instrukcijskih ciklusa potrebnih za izvoenje svake od instrukcija dat je u treoj koloni tabele. Za izvoenje uslovnih instrukcija (npr. DECFSZ f,d) potrebna su jedan ili dva instrukcijska ciklusa u zavisnosti od kondicionalnog testa. Ako je kondicionalni test istinit instrukcija se izvrava u dva ciklusa pri emu je drugi ciklus NOP operacija. Isto se dogaa u sluaju modifikacije sadraja programskog brojaa koja je rezultat neke instrukcije (npr. CALL k). etvrta kolona opisuje 14-bitni operacioni kod instrukcije gde je sa d oznaen odredini bit ija vrednost je d=1 ako je odredini registar operand f a d=0 ako je to akumulator w. Sa f su oznaena sedam bita adrese operanda dok je x vrednost bita koja moe biti proizvoljna 0 ili 1. Sa tri bita oznaena sa b u skupu bit orijentisanih instrukcija kodira se jedna od osam bitskih pozicija 8-bitnog sadraja operanda (0 do 7), dok je u skupu literalnih i kontrolnih instrukcija sa k oznaena 8-bitna ili 11-bitna literalna konstanta. U poslednjoj petoj koloni tabele navedeni su bitovi statusnog registra CPU na koje neke instrukcije mogu imati uticaj. Koristei operacione kodove instrukcija date u tabeli 2.2.1. mogue je direktno, bez posredstva prevodioca, napisati izvrni binarni oblik programa uz poznavanje adresa operanada koje ine registri opte i posebne namene, kao u sledeem primeru. Neka su heksadecimalne adrese korisnikih promenljivih, za koje je rezervisan prostor u RAM memoriji, S_COPY, P_COPY i W_COPY redom 0x70h, 0x71h i 0x72h a adrese registara posebne namene, kao to

  • Integrisani Raunarski Sistemi Dr Aleksandar . ORI

    20

    su STATUS i PCLATH redom 0x03h i 0x0Ah. Za asemblerski potprogram sa labelom PUSH, odgovarajui 14-bitni binarni ekvivalenti mnemonikih instrukcija, dobijeni iz tabele 2.2.1., prikazani su istovremeno.

    Kompletan instrukcijski set

    Mnemonik, OPIS INSTRUKCIJE Broj 14-bit Opkod Uticaj na Operandi ciklusa MSb

    LSb Stat. Reg. BAJT-ORIJENTISANE OPERACIJE

    ADDWF f, d Sabiranje sadraja registara W i f 1 00 0111 dfff ffff C,DC,Z ANDWF f, d AND operacija nad bitovima registara W i f 1 00 0101 dfff ffff Z CLRF f Brisanje sadraja registra f 1 00 0001 1fff ffff Z CLRW - Brisanje sdraja registra W 1 00 0001 0xxx xxxx Z COMF f, d Operacija komplementiranja bitova registra f 1 00 1001 dfff ffff Z DECF f, d Dekrementiranje sadraja registra f 1 00 0011 dfff ffff Z DECFSZ f, d Dekrementiranje sadraja registra f-skok ako je on 0. 1(2) 00 1011 dfff ffff

    INCF f, d Inkrementiranje sadraja registra f 1 00 1010 dfff ffff Z INCFSZ f, d Inkrementiranje sadraja registra f-skok ako je on 0 1(2) 00 1111 dfff ffff

    IORWF f, d OR operacija nad bitovima registara W i f 1 00 0100 dfff ffff Z MOVF f, d Prenos sadraja registra f 1 00 1000 dfff ffff Z MOVWF f Prenos sadraja registra W u registar f 1 00 0000 1fff ffff

    NOP - Nema operacije izuzev troenja instrukcijskog ciklusa 1 00 0000 0xx0 0000

    RLF f, d Rotiranje sadraja registra f ulevo kroz Carry bit 1 00 1101 dfff ffff C RRF f, d Rotiranje sadraja registra f udesno kroz Carry bit 1 00 1100 dfff ffff C SUBWF f, d Oduzimanje sadraja registra W od registra f 1 00 0010 dfff ffff C,DC,Z SWAPF f, d Zamena polubajtova registra f 1 00 1110 dfff ffff

    XORWF f, d Ekskluzivna OR operacija nad bitovima reg. W i f 1 00 0110 dfff ffff Z BIT-ORIJENTISANE OPERACIJE

    BCF f, b Resetovanje bita b registra f 1 01 00bb bfff ffff

    BSF f, b Setovanje bita b registra f 1 01 01bb bfff ffff

    BTFSC f, b Testiranje bita b registra f-skok ako je on 0 1 (2) 01 10bb bfff ffff BTFSS f, b Testiranje bita b registra f-skok ako je on 1 1 (2) 01 llbb bfff ffff

    LITERALNE I KONTROLNE OPERACIJE ADDLW k Sabiranje literalne konstante k sa sadrajem registra W 1 11 lllx kkkk kkkk C,DC,Z ANDLW k AND op. nad literalnom konst. k i sadrajem registra W 1 11 1001 kkkk kkkk Z CALL k Poziv potprograma na simbolikoj adresi k 2 10 Okkk kkkk kkkk

    CLRWDT - Brisanje registra Watchdog tajmera 1 00 0000 0110 0100 TO,PD GOTO k Bezuslovni skok na simboliku adresu k 2 10 lkkk kkkk kkkk

    IORLW k OR op. nad literalnom konst. k i sadrajem registra W 1 11 1000 kkkk kkkk Z MOVLW k Prenos literalne konstante k u registar W 1 11 00xx kkkk kkkk

    RETFIE - Povratak iz prekidne rutine sa omoguenim glob. prek. 2 00 0000 0000 1001

    RETLW k Povratak iz potprog. sa lit. konst. k u registru W 2 11 0lxx kkkk kkkk

    RETURN - Povratak iz potprograma 2 00 0000 0000 1000

    SLEEP - Uvoenje u standby reim rada 1 00 0000 0110 0011 TO,PD SUBLW k Oduzimanje sadraja registra W od lit. konst. k 1 11 1l0x kkkk kkkk C,DC,Z XORLW k Ekskluzivna OR op. nad lit. konst. k i sadrajem reg. W 1 11 1010 kkkk kkkk Z

    Tabela 2.2.1. Kompletan skup instrukcija mikrokontrolera PIC16F877.

  • Integrisani Raunarski Sistemi Dr Aleksandar . ORI

    21

    PUSH: MOVWF W_COPY 00 0000 1111 0010 SWAPF STATUS, 0 00 1110 0000 0011 MOVWF S_COPY 00 0000 1111 0000 CLRF STATUS 00 0001 1000 0011 MOVF PCLATH, 0 00 1000 0000 1010 MOVWF P_COPY 00 0000 1111 0001 CLRF PCLATH 00 0001 1000 1010 RETURN 00 0000 0000 1000

    2.2.2. Asemblerski jezik

    Asemblerski jezik predstavlja simboliki mainski jezik koji umesto binarnih ili heksadecimalnih operacionih kodova instrukcija koristi sugestivne mnemonike instrukcije, jednostavne za pamenje, ije delove ine i simboliki predstavljeni operandi. Na slici 2.2.2. prikazan je tok generisanja apsolutnog koda kojim se puni programska memorija MCU. Kada je izvorna datoteka asemblirana na ovaj nain, sve promenljive i rutine koriene u izvornoj datoteci moraju biti definisane unutar nje ili u posebnim datotekama koje eksplicitno moraju biti ukljuene u izvornu. Ako proces prevoenja protekne bez greaka generie se hex datoteka koja sadri izvrni mainski kod za punjenje programske memorije ciljnog ureaja. Ova datoteka moe biti koriena zajedno sa debagerom za testiranje koda pri izvrenju ili sa programatorom za programiranje ciljnog ureaja.

    Slika 2.2.2. Nain generisanja apsolutnog koda.

    MPASM asembler/prevodilac tipino je ukljuen u Microchip-ovo integrisano razvojno okruenje MPLAB IDE. Proces prevoenja izvorne asemblerske datoteke *.asm generie datoteke tipa: HEX, ERR i LST. Prvom se puni programska memorija mikrokontrolera, druga sadri spisak greki i upozorenja. Trea je najkorisnija za programera jer sadri, adrese, programski kod, greke, dodatne informacije poput grafikog zauzea memorije itd. Osnovni elementi asemblerskog jezika su sledei:

    labele, instrukcije, operandi, direktive i komentari.

  • Integrisani Raunarski Sistemi Dr Aleksandar . ORI

    22

    Labele su tekstualni opisi nekog dela programa. Obino se koriste kao taka u programu gde e doi do skoka. Labela mora poeti u prvoj koloni sa abecednim znakom ili sa znakom _, zavrava se sa : a maksimalna doputena duina labele je 32 karaktera. Instrukcije ili naredbe se piu za odreenu seriju mikrokontrolera po pripadajuim sintaksnim pravilima.

    Operandi su delovi instrukcije i oznaavaju registar, varijablu ili konstantu. Direktive su asemblerske komande koje se pojavljuju u izvornom kodu ali se uobiajeno ne

    prevode u operacione kodove. Koriste se za kontrolu asemblerskog programa i kontrolu alokacije podataka. Ne zavise od tipa mikrokontrolera. Komentari se unose radi jasnoe i dokumentovanja a piu se iza instrukcija ili u praznom redu sa obaveznim znakom ; na poetku. Ne prevode se.

    Slika 2.2.3. Format tipine linije izvornog koda.

    U nastavku teksta, tabela 2.2.2., opisana je principijelna struktura tipinog asemblerskog programa.

    ;********************************************************************** ; Ova datoteka predstavlja ablon asemblerskog programa * ; za PICmicro PIC16F877 MCU. Datoteka sadri osnovne * ; asemblerske gradivne blokove. * ; * ; Ako se prekidi ne koriste, kod prikazan izmeu ORG 0x04 * ; direktive i labele Main moe biti uklonjen. Takoe se mogu * ; ukloniti i promenljive w_copy, s_copy i p_copy. * ; * ;********************************************************************** ; * ; Ime datoteke: xxx.asm * ; Datum: * ; Verzija programa: * ; * ; Autor: * ; Preduzee: * ; * ; * ;********************************************************************** ; * ; Ukljune datoteke: * ; * ; * ;********************************************************************** ; * ; Komentari: * ; * ;**********************************************************************

    LIST p=16f877 ; listing direktiva za definiciju procesora. #INCLUDE ; kontrolna direktiva za ukljuenje dodatne datoteke-datoteke za deklaraciju simbolikih i fizikih ; adresa SPR (Special Purpose Registers) registara (promenljivih) i odgovarajuih bitova.

    __CONFIG _CP_OFF & _WDT_ON & _BODEN_ON & _PWRTE_ON & _RC_OSC & _WRT_ENABLE_ON & _LVP_ON & _DEBUG_OFF & _CPD_OFF

  • Integrisani Raunarski Sistemi Dr Aleksandar . ORI

    23

    ; '__CONFIG' direktiva za podatke-koristi se za ugradnju konfiguracionih podataka unutar .asm datoteke. ; Labele koje slede direktivu sadrane su u odgovarajuoj .inc datoteci.

    ;******** Definicija promenljivih ********

    W_COPY EQU 0x70 ; promenljiva W_COPY koja se koristi pri zameni konteksta procesa. S_COPY EQU 0x71 ; promenljiva S_COPY koja se koristi pri zameni konteksta procesa. P_COPY EQU 0x72 ; promenljiva P_COPY koja se koristi pri zameni konteksta procesa.

    ; kontrolna direktiva EQU je opteg oblika equ i ima sledee znaenje: Vrednost pridruuje se simbolu ;. U ovom sluaju to su adrese gornje tri korisnike promenljive.

    ;********* Adresa reset vektora *********

    ORG 0x00 ; kontrolna direktiva oznaava startnu adresu programa - adresa reset vektora prog. mem. CLRF PCLATH ; brisanje PCLATH registra obezbeuje selekciju stranice 0 programske memorije. GOTO MAIN ; bezuslovni skok na poetak glavnog programa.

    ;************ Skok na adresu prekidnog vektora i kod za spaavanje konteksta glavnog programa **************

    ORG 0x04 ; adresa prekidnog vektora na koju se program grana po pojavi prekidnog zahteva. MOVWF W_COPY ; sauvaj aktuelni sadraj registra w u w_copy (kopija w registra). SWAPF STATUS, W ; prenesi sadraj svopovanog status registra u w registar. MOVWF S_COPY ; sauvaj aktuelni sadraj registra w u s_copy (kopija svopovanog status registra). MOVF PCLATH, W ; prenesi sadraj pclath registra u w registar. MOVWF P_COPY ; sauvaj aktuelni sadraj registra w u p_copy (kopija pclath registra).

    ; gornji skup instrukcija koristi se za uvanje konteksta prekinutog procesa, sadraja registara w, status i pclath, dok se sadraj PC ; automatski pamti u steku. Instrukcija swapf koristi se umesto instrukcije movf koja moe uticati na Z bit statusnog registra.

    ;************ Nastavak koda pripada rutini za obradu prekida **************

    ; ISR: ; izvorni kod prekidne servisne rutine sa labelom ISR zapoinje na ovom mestu. Kod ISR rutine moe biti lociran i na drugom mestu, ; do ije prve instrukcije se moe doi naredbom bezuslovnog skoka. ; posle izvoenja koda prekidne servisne rutine sledi niz instrukcija za rekonstrukciju sadraja registara w, status i pclath kao pre skoka na adresu prekidnog vektora, dok se sadraj PC automatski rekonstruie iz steka.

    ;************ Kod za rekonstrukciju konteksta prekinutog glavnog programa i povratak iz prekidne rutine *************

    MOVF P_COPY, W ; prenesi kopiju PCLATH registra u w. MOVWF PCLATH ; obnovljeni sadraj PCLATH registra odgovara onom pre skoka na prekidni vektor. SWAPF S_COPY, W ; svopuj prethodno svopovanu kopiju STATUS registra i prenesi je u w. MOVWF STATUS ; obnovljeni sadraj STATUS registra odgovara onom pre skoka na prekidni vektor. SWAPF W_COPY, F SWAPF W_COPY, W ; dvostrukom primenom instrukcije swapf koja ne utie na bitove statusnog registra obnavlja ; se sadraj registra w koji odgovara onom pre skoka na prekidni vektor. RETFIE ; povratak iz ISR u glavni program na mesto prekida.

    ;************ Kod glavnog programa *************

    MAIN:

    ; poetak koda glavnog programa.

    END ; kontrolna direktiva za indikaciju kraja programa.

    Tabela 2.2.2. Struktura tipinog asemblerskog programa.

    MPASM asembler podrava sledee radix forme (brojne osnove): heksadecimalna, decimalna, oktalna, binarna i ASCII. Podrazumevana radix forma je heksadecimalna. Ova forma radix-a odreuje formu dodeljenih konstanti u object fajlu kada radix nije eksplicitno specificiran asemblerskom direktivom. Tabela pokazuje razliite radix specifikacije, njihovu sintaksu i primere korienja.

  • Integrisani Raunarski Sistemi Dr Aleksandar . ORI

    24

    Tip Sintaksa Primer Decimalni D''

    . D'100' .100

    Heksadecimalni H'' 0x

    H'9f' 0x9f

    Oktalni O'' O'777' Binarni B'' B'00111001' ASCII A''

    '' A'C' 'C'

    Tabela 2.2.3. Tabela razliitih radix specifikacija.

    etiri nia bita

    (4-bit)

    I I V

    Tri via bita (3 bit) ---> Hex 0 1 2 3 4 5 6 7

    0 NUL DLE Space 0 @ P ` p 1 SOH DC1 ! 1 A Q a q 2 STX DC2 " 2 B R b r 3 ETX DC3 # 3 C S c s 4 EOT DC4 $ 4 D T d t 5 ENQ NAK % 5 E U e u 6 ACK SYN & 6 F V f v 7 Bell ETB ' 7 G W g w 8 BS CAN ( 8 H X h x 9 HT EM ) 9 I Y i y A LF SUB * : J Z j z B VT ESC + ; K [ k { C FF FS , < L \ l | D CR GS - = M ] m } E SO RS . > N ^ n ~ F SI US / ? O _ o DEL

    Tabela 2.2.4. Tabela 7-bitnih ASCII karaktera.

    2.2.3. Vii programski jezici

    Za razliku od asemblera, vii programski jezici nude mogunost brzog, konformnog, preglednog i efikasnog dizajniranja aplikacionog softvera to, u krajnjem, ima uticaj na cenu aplikacije. Primena viih programskih jezika u mikrokontrolerskim aplikacijama podrana je od strane proizvoaa koji, u skladu sa poveanjem radne brzine mikrokontrolera, obezbeuju i veu programsku i RAM memoriju ovih komponenata. Jedan program napisan na asembleru troi tipino 80% od veliine istog programa u C verziji. Savremeni razvojni sistemi za PIC mikrokontrolere u osnovi nude projektantu iste mogunosti kao PC zasnovano razvojno okruenje, izuzev grafikih biblioteka. Razvoj proizvoda kombinacija je znanja i iskustva

  • Integrisani Raunarski Sistemi Dr Aleksandar . ORI

    25

    dizajnera. Programiranje mikrokontrolera na viem programskom jeziku moe biti naizgled teak zadatak uz inicijalni troak za odgovarajui kompajler, emulator i neophodni hardver, to je oteavajue za procenu cene projekta. Na tritu je raspoloivo nekoliko C kompajlera za PIC seriju mikrokontrolera koji imaju veoma sline karakteristike i koji se esto koriste u komercijalne, industrijske i edukacione svrhe, kao to su:

    mikroC PICC18 C18 CCS C

    Popularni i snani mikroC kompajler, proizvod mikroElektronike (www.mikroe.com), jednostavan je za uenje, poseduje veliki broj bibliotekih funkcija i integrisano razvojno okruenje sa ugraenim simulatorom i debagerom (In Circuit Debager-MikroICD). Demo verzija kompajlera sa ogranienjem za veliinu programa do 2K raspoloiva je na sajtu firme mikroElektronika. PICC18, drugi popularni C kompajler, razvijen je od strane firme HI-Tech Software (www.htsoft.com) i raspoloiv u dve verzije: standardna i profesionalna. Snaan simulator i integrisano razvojno okruenje (Hi-Tide) glavne su karakteristike kompajlera. PICC18 je podran od strane PROTEUS simulatora (www.labcenter.co.uk) koji moe biti korien za simulaciju sistema zasnovanih na PIC mikrokontrolerima. Vremenski limitirana demo verzija ovog kompajlera raspoloiva je na sajtu proizvoaa. C18 je proizvod firme Microchip Inc. (www.microchip.com), ukljuuje simulator i hardversko-softverski razvojni alat kao to je emulator (ICE200) i debager (ICD2). Na sajtu proizvoaa raspoloiva je vremenski limitirana demo verzija kompajlera kao i verzija sa limitiranom funkcionalnou koja nije vremenski limitirana. CCS C kompajler proizvod je firme Custom Computer Services Inc. (www.ccsinfo.com). Poseduje veliki broj ugraenih bibliotekih funkcija i podrku debageru ICD-U40. Ovi alati omoguavaju projektantu brzo i efikasno dizajniranje aplikacionog softvera za Microchip-ove mikrokontrolere u viem programskom jeziku C, istovremeno poboljavajui preglednost i itljivost programa. PCB, PCM, PCH i PCD su odvojeni prevodioci za 12-bitne, 14-bitne, 16-bitne i 24-bitne operacione kodove PICmicro, respektivno. Proizvoa nudi vremenski ogranienu demo verziju ovog kompajlera. Pomenuti C kompajleri doputaju mogunost ukljuenja asemblerskih jezikih instrukcija u C program za npr. realizaciju striktnog programskog kanjenja i slino. Osim pomenutih C kompajlera na tritu su raspoloivi mikroBasic i mikroPascal kompajleri, proizvodi firme mikroElektronika, koji programerima familijarnim sa programskim jezicima Basic i Pascal pruaju mogunost konformnog programiranja PICmicro ureaja. U ovoj knjizi je za razvoj aplikacija korien CCS C kompajler, detaljnije diskutovan u sledeim poglavljima.

    2.2.4. Modularno programiranje - potprogrami i hardverski stek

    Dobar softver treba da bude konfigurisan kao skup interaktivnih programskih modula a ne kao jedan veliki program koji se izvrava od svog poetka pa do kraja. Postoje mnoge prednosti modularnog programiranja, koje posebno dolaze do izraaja kada veliina programa premai nekoliko stotina linija ili u sluaju timskog razvoja projekta. Modularno programiranje koristi odreene principe konstrukcije programa. Moe se definisati kao jedan pristup programiranju pri kome su odvojeni logiki zadaci programirani odvojeno a povezani docnije. Modularno programiranje zahteva dekompoziciju programskih zahteva i specifikacija na odreeni broj zasebnih rutina, odnosno, jasno definisanih kraih i dobro dokumentovanih zadataka. Ideja,

  • Integrisani Raunarski Sistemi Dr Aleksandar . ORI

    26

    jedan zadatak po modulu dobro je pravilo koje programera navodi na generalizaciju reenja i mogunosti viestrukog korienja koda. Prednosti ovakvog naina programiranja sline su prednostima pri realizaciji modularnog hardverskog sistema. Naime, svaki se programski modul, kao osnovni konstruktivni element programa, moe testirati, debagovati i odravati zasebno to programsku celinu ini pouzdanijom. Modul se moe preuzeti iz npr. standardne biblioteke koja se isporuuje sa prevodiocem, iz specijalizovnih biblioteka ili iz personalnih biblioteka korisnika koje on sam razvija. Ako je reenje programskog modula dovoljno opte, moe se primeniti u velikom broju programa. Eventualno auriranje programske celine olakano je izmenom samo pojedinih programskih modula. Programski moduli se mogu pozivati iz glavnog programa, drugih programskih modula ili na bazi hardverski generisanih zahteva. Tipian primer startovanja izvrenja potprograma na osnovu hardverskog dogaaja su potprogrami - rutine za obradu prekida. Softverski modul za obradu prekida ima svoje specifinosti u odnosu na potprograme zbog ega mu treba biti posveena posebna panja. U programskom jeziku C potprogrami imaju jedan od dva oblika: funkcije i makroi. Funkcija je potprogram koji podrazumeva mehanizam poziv/povratak (call/return) podran u modernim raunarima orijentisanim na rad sa stekom. Funkcije koriste stek da od pozivaoca dobiju ulazne podatke i predaju im vrednost. Programski kod funkcije se u izvrnom programu pojavljuje samo jednom ali se funkcije mogu pozivati proizvoljan broj puta. Makroi su slini funkcijama, to su imena kojima je pridruena tekstualna definicija. U C jeziku makroi imaju jedan od dva oblika, makro kao objekat ije ime se zamenjuje tekstualnom definicijom i makro kao funkcija koji osim imena sadri i parametre, slino funkciji. Glavna razlika makroa u odnosu na funkciju je to to se njihov programski kod kopira na mestima poziva u programu i izvrava kao niz instrukcija bez podrke mehanizma poziv/povratak koji koriste funkcije. Svako pozivanje funkcije predstavlja dodatno optereenje jer se deo vremena troi na smetanje podataka na stek, prenoenje izvravanja programa na drugo mesto u memoriji i povratak na instrukciju iza poziva funkcije. Makro, sa druge strane, prevodilac razvija u tekst svaki put kada sretne njegovo ime to proizvodi kod koji se izvrava bez dodatnog optereenja. Meutim, ako se makro poziva vie puta u programu, kopiranje koda makroa na vie mesta uveava obim programa i u izvornom i u izvrnom obliku, to je cena vee brzine izvoenja u odnosu na funkciju.

    Slika 2.2.4. Pozivanje potprograma.

    Na slici 2.2.4. je prikazan simboliki tok programa koji u jednom svom delu dva puta poziva potprogram za izvoenje specifinog zadatka. Na mestu poziva potprograma (call), koji se uobiajeno nalazi na drugom mestu u memoriji, kao na slici, tekua adresa programskog brojaa se automatski inkrementira i smeta u hardverski stek tako da ukazuje na povratnu adresu u programu a potom se u programski broja upisuje adresa prve instrukcije potprograma (simboliku adresu potprograma u izvornom kodu predstavlja njegovo ime). Po povratku iz potprograma (return) automatskim mehanizmom se sa vrha hardverskog steka uzima sauvana povratna adresa koja ukazuje na prvu instrukciju u programu iza poziva potprograma i smeta u

  • Integrisani Raunarski Sistemi Dr Aleksandar . ORI

    27

    programski broja. Na taj nain omoguen je normalan nastavak izvoenja programa, iz koga je pozvan potprogramski modul.

    Slika 2.2.5. Korienje hardverskog steka za uvanje povratnih adresa.

    Na slici 2.2.5. prikazan je sadraj steka pre, po pozivu i po povratku iz potprograma. Mikrokontroler PIC16F877 poseduje hardverski stek od osam 13-bitnih registara organizovanih po cirkularnom LIFO (Last In First Out) principu. Stek nije u sastavu RAM memorije ve predstavlja zasebnu celinu sa pridruenim trobitnim pokazivaem steka koji nije dostupan programeru. Poziv potprograma (call xxx) inicira redom:

    smetanje inkrementirane adrese instrukcije poziva (call xxx), koju sadri 13-bitni programski broja u registar steka na koji ukazuje pokaziva steka. Inkrementirana adresa instrukcije poziva potprograma (PC(call xxx)+1) predstavlja adresu prve instrukcije koja sledi posle call xxx instrukcije u programu iz koga je pozvan potprogram.

    automatsko inkrementiranje pokazivaa steka, punjenje programskog brojaa adresom prve instrukcije potprograma (xxx) to za posledicu ima

    grananje programa. Povratak iz potprograma (return) inicira redom:

    automatsko dekrementiranje pokazivaa steka, punjenje programskog brojaa povratnom adresom koja se uva u registru steka na koji ukazuje

    pokaziva steka to za posledicu ima nastavak izvoenja programa iz koga je pozvan potprogram. Izlazna taka svakog potprograma mora biti instrukcija return. Mehanizam steka podrava tkzv. gnedenje potprograma, odnosno, mogunost pozivanja jednog potprograma iz drugog potprograma. Na slici 2.2.6. prikazan je simboliki princip dvonivovskog gnedenja, kao i izgled hardverskog steka pri pozivanju i povratku iz potprograma. Iz glavnog programa se najpre poziva potprogram PP1 ija se povratna adresa PC1 smeta na vrh steka na koji ukazuje pokaziva. Potom se iz potprograma PP1 poziva potprogram PP2 ija se povratna adresa PC2 smeta na jedan nivo ispod vrha, imajui u vidu automatsko inkrementiranje pokazivaa steka posle smetanja prve povratne adrese. Povratak u glavni program dogaa se suprotnim tokom. Po kompletiranju potprograma PP2 povratnom instrukcijom return se dekrementira pokaziva steka a potom u programski broja prenosi sauvana druga povratna adresa PC2. Ova adresa je zapravo adresa prve instrukcije posle instrukcije poziva potprograma PP2 i nalazi se u potprogramu PP1 odakle je pozvan potprogram PP2. Kada se zavri izvoenje i potprograma PP1 povratnom instrukcijom RETURN se jo jednom dekrementira pokaziva steka a potom u programski broja prenosi sauvana prva povratna adresa PC1. Ova adresa je zapravo adresa prve instrukcije posle instrukcije poziva potprograma PP1 i nalazi se u glavnom programu odakle je pozvan potprogram PP1. Mehanizam steka moe rukovati i situacijama u kojima potprogram poziva samog sebe. Takvi potprogrami poznati su pod nazivom rekurzivni potprogrami. Mehanizam steka se dalje koristi i za rukovanje prekidima. U programima koji koriste i potprograme i prekide, dubina steka od osam nivoa katkad moe biti nedovoljna. Naime,

  • Integrisani Raunarski Sistemi Dr Aleksandar . ORI

    28

    cirkularni LIFO mehanizam steka posle sauvanih osam povratnih adresa prepisuje devetu adresu preko prve, desetu preko druge itd., ime se gube povratne adrese nekih potprograma ili prekida. Mikrokontroler PIC16F877 ne poseduje statusne bitove za indikaciju praznog i punog steka niti instrukcije PUSH (guraj u stek) i POP (izvuci iz steka) za implementaciju softverskog steka. PUSH i POP akcije se odnose na sadraj programskog brojaa i automatski se dogaaju izvoenjem instrukcija CALL, RETURN, RETLW i RETFIE kao i grananjem programa na adresu prekidnog vektora.

    Slika 2.2.6. Gnedenje potprograma i izgled steka pri pozivanju i povratku iz potprograma.

    2.2.5. Rukovanje prekidima

    Potprogrami, razmatrani u prethodnoj sekciji, predstavljaju jednostavne predvidljive dogaaje koje diktira program. U realnim situacijama, gde postoji interakcija procesora sa spoljanjim fizikim dogaajima na ije zahteve procesor treba da odgovori, to, meutim, nije jednostavno. Primer jednog vremenski osetljivog dogaaja prikazan je na slici 2.2.7.

    Slika 2.2.7. Detekcija i merenje trajanja jednog spoljanjeg dogaaja.

    Sistem meri proteklo vreme izmeu dva R talasa signala elektrokardiografa (ECG) pacijenta a zasnovan je na detektoru pika ECG signala i mikrokontroleru MCU. Maksimalno oekivano vreme izmeu dva uzastopna R talasa je 1.5s. Potrebno vremensko razlaganje od 0.1ms

  • Integrisani Raunarski Sistemi Dr Aleksandar . ORI

    29

    dobijeno je primenom spoljanjeg oscilatora frekvencije 10KHz. Za merenje proteklog vremena, kao vremenska baza se koristi 16-bitni broja taktovan impulsima oscilatora. Merenje vremena se zasniva na stalnom praenju stanja brojaa i itanju njegovog registra u trenucima pojave R talasa. Razlika dva uzastopno proitana stanja brojaa srazmerna je proteklom vremenu. Glavni problem, meutim, jeste detekcija R talasa budui da ECG signal pacijenta nije sinhronizovan sa MCU. Jedan od naina detekcije je stalno itanje izlazne linije detektora pika povezane na ulaz mikrokontrolera. Takva tehnika poznata je pod nazivom tehnika prozivke (polling). Ako se pretpostavi normalni srani ritam pacijenta od 60 otkucaja/min, tada vreme izmeu dva uzastopna R talasa iznosi 1s. Za detekciju jednog R talasa koji se moe dogoditi u ovom vremenu potrebno je, za usvojeno razlaganje vremena, obaviti 10000 prozivki. Prema tome, 99.99% vremena, u kome nema pojave R talasa, procesor troi beskorisno traei jedan dogaaj u 10000. Alternativni pristup reenju bio bi korienje dodatnog hardvera iji zadatak bi bio slanje signala procesoru u trenutku detekcije R talasa, to bi moglo biti iskorieno za prekidanje tekueg procesa, itanje registra brojaa i potom nastavak izvoenja prekinutog procesa. Takav pristup daje ansu procesoru da do trenutka detekcije R talasa obavi mnotvo drugih korisnih akcija, izvravajui tekui proces, i ne potroi ovo vreme na prozivku. Ovakav mehanizam-mehanizam prekida podravaju svi savremeni procesori, ukljuujui i hardver za generisanje prekidnog signala na odgovarajui dogaaj. Glavni nedostatak prekidom upravljanog praenja dogaaja u realnom vremenu je dodatna kompleksnost hardvera. Tehnika prozivke moe biti adekvatna za sluaj dogaaja koji se retko pojavljuju, kada perioda prozivanja ne mora biti kratka. Meutim, smanjenje brzine prozivanja smanjuje verovatnou precizne detekcije trenutka pojave asinhronog dogaaja (preskakanje) ali poveava efikasnost procesora. Esencijalno, pojava prekidnog signala uzrokuje prekid aktuelnog procesa, pamenje njegove prekinute pozicije i skok na specijalni potprogram poznat pod imenom prekidna servisna rutina. Ova se rutina izvrava samo na zahtev, odnosno, na odgovarajui dogaaj koji generie prekidni signal. Na slici 2.2.8. je prikazan blok dijagram odziva procesora na prekidni zahtev. Kao to se moe videti:

    1. Procesor odmerava prekidnu liniju jednom u svakom instrukcijskom ciklusu. Ako je ova linija aktivna, odgovarajui indikator prekida (flag-zastavica), koji predstavlja le kolo, je setovan, u suprotnom indikator je resetovan. Bez obzira na stanje ove linije tekua instrukcija se izvrava do kraja. To znai da se instrukcija u vreme izvoenja ne moe prekinuti, ak i u sluaju dvociklusnih instrukcija.

    2. Ako je prekidna linija neaktivna, procesor jednostavno nastavlja sa izvoenjem sledee instrukcije posle ega se opisani proces ispitivanja linije prekida ponavlja.

    3. Ako je prekidna linija aktivna, u sledea tri instrukcijska ciklusa kontrola se prebacuje na prekidnu servisnu rutinu. Prvi od tri ciklusa moe biti zavrni ciklus dvociklusne instrukcije ili, u suprotnom, pseudo ciklus, dok su druga dva neophodna za uspostavljanje protone obrade instrukcija na kojoj bazira mikrokontroler PIC16F877. Opisano kanjenje od tri do etiri instrukcijska ciklusa, od trenutka pojave prekidnog signala do poetka izvoenja prve instrukcije prekidne servisne rutine, poznato je pod nazivom vreme kanjenja (latency). Nemogue je preciznije odrediti vreme kanjenja (tri ili etiri instrukcijska ciklusa) zbog sluajne prirode pojave prekidnog zahteva koji se moe pojaviti bilo kada, npr odmah posle ispitivanja prekidne linije.

    4. U toku trajanja vremena kanjenja po automatizmu se izvravaju sledee operacije: a) Bit za globalno maskiranje prekida GIE (Global Interrupt Enable) se resetuje ime se automatski

    zabranjuju (maskiraju) svi ostali prekidi. Na ovaj nain omoguena je obrada aktuelnog prekida bez mogunosti njegovog prekidanja.

    b) Sadraj inkrementiranog registra programskog brojaa upuuje se na hardverski stek na isti nain kao i za instrukciju poziva potprograma (CALL). Ovo e omoguiti procesoru da se po izvoenju prekidne servisne rutine instrukcijom povratka vrati na mesto prekida. Pri ovome treba

  • Integrisani Raunarski Sistemi Dr Aleksandar . ORI

    30

    imati u vidu ogranienu dubinu hardverskog steka od osam nivoa zbog mogueg ugnjedavanja.

    c) Kako je prva instrukcija prekidne servisne rutine uvek na adresi prekidnog vektora 004h programske memorije, zavrni korak je punjenje registra programskog brojaa adresom ove instrukcije. Ako je program za obradu prekida na drugom mestu u programskoj memoriji a ne odmah ispod adrese prekidnog vektora tada se instrukcijom bezuslovnog skoka GOTO vri grananje programa na poetak programa za obradu prekida.

    5. Kao i potprogram, prekidna servisna rutina mora biti okonana instrukcijom za povratak. Meutim, u ovom sluaju nije dovoljno samo punjenje programskog brojaa povratnom adresom sa steka. Neophodno je jo i ponovo omoguiti mehanizam prekida, onemoguen resetovanjem GIE bita za maskiranje svih prekida. Relevantna zavrna instrukcija za ovu situaciju je RETFIE (RETurn From Interrapt and Enable). Na taj nain, po povratku u prekinuti program bilo koji budui prekidi mogu biti servisirani.

    Prekidna linija

    aktivna ?

    Kraj izvrenja tekue

    instrukcije programa

    Ne

    Da

    Resetovanje bita za

    globalno maskiranje

    prekida GIE=0

    Uitavanje PC u stek

    PC+1 STACK

    Grananje na adresu

    prekidnog vektora

    0x04 PC

    Izvrenje prekidne

    servisne rutine (ISR)

    Instrukcija povratka iz

    ISR (RETFIE) GIE=1

    Sledea instrukcija

    programa

    Prekidna linija

    aktivna ?

    Ne

    Da

    Slika 2.2.8. Odziv na prekidni zahtev.

  • Integrisani Raunarski Sistemi Dr Aleksandar . ORI

    31

    Prekidna servisna rutina se znaajno razlikuje od potprograma ne samo po zavrnoj instrukciji (RETFIE) ve i po logici prekidnog sistema, kao i pseudosluajnoj prirodi prekida. Na slici 2.2.9. je prikazan deo te logike za jedan izvor prekida koji ima interakciju sa procesorom preko dva bita kontrolnog registra prekida.

    Slika 2.2.9. Bit flag-a-zastavice prekida i bit za maskiranje/demaskiranje prekida kao deo logike prekidnog sistema.

    INTCON REGISTAR

    Tabela 2.2.5. Sadraj registra INTCON za kontrolu tri standardna izvora prekidnog signala.

    Bit zastavice prekida (flag) se automatski setuje kada odgovarajui izvor prekida zahteva servis. Ako je pri tome i mask bit setovan zahtev e biti prosleen ostatku kontrolne logike prekidnog sistema, kao na slici 2.2.9. Treba primetiti da stanje mask bita ne utie na stanje zastavice. To znai da se zastavica automatski setuje svaki put kada izvor prekida postavi zahtev, dok se prosleivanje zahteva ostatku logike vri samo u sluaju da je mask bit setovan.

    R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-x

    GIE PEIE T0IE INTE RBIE T0IF INTF RBIF

    bit 7 bit 0

    bit 7 GIE: Bit za maskiranje svih prekida (globalni mask bit). 1 = Omogueni svi nemaskirani prekidi. 0 = Onemogueni svi prekidi.

    bit 6 PEIE: Bit za maskiranje prekida sa svih periferija. 1 = Omogueni nemaskirani prekidi sa svih periferija. 0 = Onemogueni prekidi sa svih periferija.

    bit 5 T0IE: Bit za omoguenje prekida sa tajmera 0 pri tranziciji FFh00h. 1 = Omoguen prekid. 0 = Onemoguen prekid.

    bit 4 INTE: Bit za maskiranje spoljanjeg prekida sa RB0/INT linije. 1 = Omoguen prekid. 0 = Onemoguen prekid.

    bit 3 RBIE: Bit za maskiranje prekida sa vieg nibla porta B. 1 = Omoguen prekid. 0 = Onemoguen prekid.

    bit 2 T0IF: Zastavica prekida sa tajmera 0 pri tranziciji brojakog registra TMR0 FFh00h. 1 = TMR0 brojaki registar prekoraio osnovu brojanja (bit mora biti programski resetovan). 0 = TMR0 brojaki registar nije prekoraio osnovu brojanja.

    bit 1 INTF: Zastavica spoljanjeg prekida sa RB0/INT linije. 1 = RB0/INT spoljanji prekid se dogodio (bit mora biti programski resetovan). 0 = RB0/INT spoljanji prekid se nije dogodio.

    bit 0 RBIF: Zastavica prekida sa vieg nibla porta B. 1 = Najmanje jedan od etiri bita vieg nibla porta B je promenio stanje u odnosu na stanje zapameno u le registru porta B. Operacija itanja porta B moe ukloniti ovu asimetriju (bit mora biti programski resetovan). 0 = Nijedan od etiri bita vieg nibla porta B nije promenio stanje u odnosu na stanje le registra porta B.

  • Integrisani Raunarski Sistemi Dr Aleksandar . ORI

    32

    Prema tome, ako je mask bit resetovan, jedino se tehnikom prozivke zastavice prekida moe detektovati zahtev koji generie odgovarajui izvor prekida. Bit zastavice prekida se po automatskom setovanju mora programski resetovati kako bi se mogao detektovati sledei zahtev izvora prekida, prekidnim mehanizmom ili prozivkom. Veoma je vano napomenuti da se neposredno pre povratka iz rutine za obradu prekida u prekinuti program bit zastavice prekida mora programski resetovati da bi se mogao detektovati novi zahtev za prekidnim servisom. U suprotnom, dogodila bi se beskrajna serija prekidnih zahteva. Setovana zastavica prekida bila bi znak procesoru da se dogodio novi zahtev pa bi po izlasku iz prekidne servisne rutine program ponovo granao na prekidnu rutinu. Kako neposredno pre izlaska iz prekidne rutine nije resetovana zastavica prekida, opisani ciklus bi se ponavljao neogranieni broj puta. Individualni (lokalni) bit za maskiranje/demaskiranje prekida, koji se odnosi na odgovarajui izvor prekida, moe biti setovan ili resetovan iskljuivo programski. Posle reseta mikrokontrolera individualni mask bitovi svih izvora prekida, kao i GIE bit, postavljaju se u reset stanje ime su svi individualni prekidi maskirani. Za demaskiranje pojednih prekidnih zahteva treba koristiti asemblersku instrukciju BSF (bit set file register), odnosno, setovati mask bit odgovarajueg izvora prekida u kontrolnom registru prekida ali i bit za globalno omoguenje prekida GIE. PIC16F87X serija mikrokontrolera poseduje 14 hardverski ugraenih izvora prekidnog signala, slika 2.2.10. Registar za kontrolu prekida INTCON (INTerrupt CONtrol) sadri individualne bitove za maskiranje/demaskiranje tri standardna prekida (TOIE, INTE, RBIE) i njima odgovarajue flag bitove, bit za globalno maskiranje/demaskiranje svih vrsta prekida GIE, kao i bit za globalno maskiranje/demaskiranje prekida sa svih periferijskih jedinica PEIE (PEripheral Interrupt Enable), tabela 2.2.5. GIE (Global Interrupt Enable) bit omoguava (ako je setovan) ili onemoguava (ako je resetovan) sve nemaskirane prekide. Kada je GIE bit setovan zajedno sa individualnim bitom za omoguenje/onemoguenje (maskiranje/demaskiranje) prekida, setovanje odgovarajueg individualnog flag bita uzrokuje programski skok na adresu prekidnog vektora. Individualni mask bitovi za omoguenje/onemoguenje prekida mogu se setovati bez obzira na stanje GIE bita. Meutim, programski skok na adresu prekidnog vektora se nee dogoditi u sluaju da je GIE bit resetovan. Individualni prekidi se mogu onemoguiti kroz njihove odgovarajue mask bitove za omoguenje/onemoguenje prekida koji se nalaze u razliitim registrima.

    Slika 2.2.10. Kontrolna logika prekidnog sistema mikrokontrolera PIC16F877.

  • Integrisani Raunarski Sistemi Dr Aleksandar . ORI

    33

    Tri standardna izvora prekidnog signala, spoljanji prekid na liniji RB0/INT porta B, spoljanji prekid na linijama vieg nibla porta B, RB i prekid koji generie tajmer 0 modul usled prekoraenja njegovog osmobitnog brojakog registra TMR0, kontroliu se i detektuju u registru INTCON i hardverski su ugraeni u gotovo svim serijama Microchip-ovih mikrokontrolera.

    Slika 2.2.11. Principijelna ekvivalentna ema prekidne logike mikrokontrolera PIC16F877.

    Kontrolni bitovi prekida sa pojedinih periferija (omoguenje/onemoguenje) sadrani su u registrima specijalne namene PIE1 i PIE2, a njima odgovarajue zastavice prekida (flag bitovi) u SFR registrima PIR1 i PIR2. Bit za globalno maskiranje/demaskiranje prekida sa svih periferija (PEIE) sadran je u INTCON registru. Principijelna ekvivalentna ema prekidne logike mikrokontrolera, slika 2.2.11., jasno pokazuje da je GIE bit glavni prekida svih prekida, dok je PEIE bit glavni prekida prekida sa periferijskog podsistema. Takoe se moe primetiti da parovi mask bit/bit zastavice individualnih prekida moraju biti setovani da bi se prekid dogodio. Mikrokontroler PIC16F877 se instrukcijom SLEEP uvodi u stand-by reim niske potronje. Izvoenjem ove instrukcije blokira se kvarcni oscilator, kojim se taktuje CPU jedinica, ime se prekida sa daljim izvoenjem instrukcija. Kako je snaga disipacije MCU srazmerna frekvenciji taktovanja

    2DDCLKTD VfCP =

    gde je fCLK frekvencija taktnih impulsa, CT ekvivalentno koncentrisano kapacitivno optereenje MCU a VDD napon napajanja MCU, to se za fCLK=0Hz snaga disipacije svodi na minimalnu, to

  • Integrisani Raunarski Sistemi Dr Aleksandar . ORI

    34

    je posledica struja curenja kroz poluprovodnik. Ova osobina mikrokontrolera od esencijalnog je znaaja za ureaje sa baterijskim napajanjem. Buenje mikrokontrolera iz sleep reima vri se resetom MCU ili generisanjem bilo kog prekidnog signala. Sa slika 2.2.10. i 2.2.11. je evidentno da se buenje MCU prekidnim signalom moe obaviti na dva naina: normalnim nastavljanjem izvoenja prve instrukcije posle SLEEP instrukcije ako je pre izvoenja SLEEP instrukcije GIE bit bio resetovan ili grananjem programa na prekidni vektor ako je GIE bit bio setovan. Budui da postoji samo jedan prekidni vektor na adresi programske memorije 004h i ukupno 14 izvora prekida, prvi zadatak rutine za obradu prekida ISR je odreivanje izvora prekidnog signala metodom prozivke individualnih zastavica prekida-flegova. Ovaj deo rutine za obradu prekida poznat je pod nazivom analizator prekida. Po odreivanju izvora prekidnog signala prelazi se na obradu odgovarajueg prekida. Uobiajeno je da se prozivaju samo izvori prekida koji su omogueni-demaskirani. Deo asemblerskog programa koji pripada prekidnoj servisnoj rutini sa analizatorom prekida za tri standardna izvora prekida u INTCON registru prikazan je sledeom sekvencom instrukcija u tabeli 2.2.6.

    ISR: ; Poetak prekidne servisne rutine BTFSC INTCON,RBIF ; Proveri prekid na promenu vieg nibla porta B GOTO EXT_PROMENA ; Ako jeste, skoi na labelu EXT_PROMENA BTFSC INTCON,INTF ; Proveri prekid na RB0 pinu porta B GOTO EXT_PIN ; Ako jeste, skoi na labelu EXT_PIN BTFSC INTCON,T0IF ; Proveri prekid sa Tajmera 0 GOTO TAJMER0 ; Ako jeste, skoi na labelu TAJMER0

    IRQ_IZLAZ: RETFIE ; Povratak iz prekidne rutine sa GIE=1

    EXT_PROMENA: ; ; Kod za obradu prekida sa vieg nibla porta B ; BCF INTCON,RBIF ; Brisanje zastavice prekida pre izlaska iz ISR GOTO IRQ_IZLAZ

    EXT_PIN: ; ; Kod za obradu prekida sa RB0 pina porta B ; BCF INTCON,INTF ; Brisanje zastavice prekida pre izlaska iz ISR GOTO IRQ_IZLAZ

    TAJMER0: ; ; Kod za obradu prekida sa Tajmera 0 ; BCF INTCON,T0IF ; Brisanje zastavice prekida pre izlaska iz ISR GOTO IRQ_IZLAZ

    Tabela 2.2.6. Asemblerska forma ISR sa analizatorom prekida za tri standardna izvora prekidnog signala.

    Iz date sekvence se vidi da se najpre vri provera ko je od tri izvora prekida generisao prekidni zahtev i potom prelazi na odgovarajuu obradu. Redosled prozivke (RBIF, INTF, T0IF) definie prioritet prekida u sluaju da vie od jednog prekida koincidira. Jasno je da e u tom sluaju zbog setovanih zastavica prekida, po obradi prioritetnog prekida i izlasku iz prekidne rutine program ponovo ulaziti u nju uzastopno onoliki broj puta koliko preostalih koincidentnih zahteva nieg prioriteta postoji. Obrada prekidnih zahteva ii e redosledom koji diktira analizator prekida. U gornjem primeru, za sluaj da sva tri zahteva koincidiraju najpre se obrauje

  • Integrisani Raunarski Sistemi Dr Aleksandar . ORI

    35

    EXT_PROMENA, po ponovnom ulasku u prekidnu rutinu EXT_PIN i na kraju TAJMER0 podrutina, resetujui pri tome svaki put odgovarajuu zastavicu prekida. Zbog automatskog hardverskog setovanja zastavica svih izvora prekida nezavisno od stanja njihovih mask bitova, tehnika prozivke zastavica moe biti iskoriena za detekciju odgovarajuih dogaaja bez primene prekidnog mehanizma. Da bi se mogao detektovati sledei dogaaj, kao i u sluaju ISR, mora se izvriti programsko resetovanje odgovarajue zastavice. Primena tehnike prozivke umesto prekidnog mehanizma, kao to je ve reeno, znaajno umanjuje efikasnost procesora troei dragoceno procesorsko vreme na prozivanje, odnosno, ekanje na pojavu dogaaja. Interni procesorski registri (registri posebne namene) kao to su tipino W-akumulator, STATUS-statusni registar ALU, PCLATH-upisni bafer za pet viih bitova programskog brojaa i PC-programski broja jesu deljivi resursi. Jedna ISR rutina koristi ove registre na isti nain kao i bilo koji potprogram ili deo glavnog programa, tako da je eventualni konflikt zbog izmene sadraja registara mogu. Na primer, zbog sluajne prirode prekidnog zahteva ne moe se predvideti memorijska banka memorije podataka sa ijim registrima operie program u trenutku pojave prekida. Budui da se program prekida a kontrola prebacuje na rutinu za obradu prekida, u njoj se zavisno od potrebe moe selektovati druga memorijska banka. Selekcija odgovarajue banke vri se odgovarajuim upisom u bitske pozicije 5 i 6 statusnog registra. Po izlasku iz prekidne rutine lako moe doi do konflikta ako aktuelna banka ne odgovara onoj u kojoj je program operisao do pojave prekida. Slian zakljuak vai i za npr. registar akumulatora W ijim sadrajem operie i tekui program koji se prekida i prekidna rutina. Mogui konflikti se mogu izbei pamenjem sadraja procesorskih registara od znaaja u trenutku pojave prekida, slino hardverskom mehanizmu uvanja sadraja PC registra u steku. Posle obrade prekida i neposredno pred povratak u prekinuti program, obnavljanjem sadraja ovih registara na stanje koje odgovara trenutku pojave prekidnog zahteva moglo bi se nastaviti sa izvoenjem prekinutog programa kao da prekida nije ni bilo. Opisani postupak pamenja sadraja internih registara, prebacivanja kontrole na prekidnu servisnu rutinu, obnavljanja sadraja registara i ponovnog vraanja kontrole na prekinuti program poznat je pod nazivom zamena konteksta procesa. Posebna panja pri zameni konteksta treba biti posveena izboru lokacija u memoriji podataka gde e se uvati zapameni sadraji internih registara. Ove lokacije koriste se za sistemske namene i ne sme ih koristiti niti prekidna rutina za uvanje rezultata/meurezultata obrade, niti potprogrami ili glavni program. 16 registara opte namene (GPR-korisniki registri), koji pripadaju najviem adresnom prostoru bilo koje od etiri memorijske banke mikrokontrolera PIC16F877, mapirani su u svim bankama memorije podataka te predstavljaju njihove zajednike registre. Otuda je najpogodnije ove memorijske lokacije RAM memorije koristiti za pamenje i obnavljanje sadraja internih registara procesora jer ne zahtevaju selekciju memorijske banke ('banking'). Izabrane lokacije predstavljaju softverski stek i koriste se u nedostatku instrukcija PUSH i POP, kojima raspolau neki mikrokontroleri, za pamenje i obnavljanje sadraja vanih registara, respektivno. U sluaju nedostatka, ove instrukcije se mogu programski implementirati kao npr. asemblerski makroi. Takav nain implementacije PUSH i POP instrukcija poveava fleksibilnost u smislu pamenja i obnavljanja sadraja veeg broja registara od znaaja ali, naalost, iziskuje vie vremena za izvravanje. Primeri asemblerske programske implementacije PUSH i POP instrukcija u formi makroa dati su u tabeli 2.2.7.

    ;Rezervacija prostora (dodela adresa promenljivim)

    S_COPY EQU 0x70 ;16 GPR registara, najvieg adresnog prostora P_COPY EQU 0x71 ;svake banke zajedniki su za sve etiri banke W_COPY EQU 0x72 ;poev od adrese 0x70 do 0x7F

    PUSH MACRO

  • Integrisani Raunarski Sistemi Dr Aleksandar . ORI

    36

    MOVWF W_COPY ;Sauvaj sadraj W reg. u njegovu kopiju W_COPY. SWAPF STATUS, W ;Sauvaj sadraj STATUS reg. bez uticaja na njegov MOVWF S_COPY ;sadraj, primenom instrukcije swapf. MOVF PCLATH, W ;Sauvaj sadraj PCLATH reg. u njegovu kopiju P_COPY MOVWF P_COPY ENDM

    POP MACRO MOVF P_COPY, W ;Obnovi PCLATH reg. i selektuj originalnu stranicu MOVWF PCLATH ;programske memorije. SWAPF S_COPY, W ;Obnovi STATUS reg. i selektuj originalnu banku MOVWF STATUS ;memorije podataka. SWAPF W_COPY, F ;Obnovi W reg. ne utiui na sadraj ve obnovljenog SWAPF W_COPY, W ;STATUS reg., dvostrukom primenom instrukcije swapf. ENDM

    Tabela 2.2.7. Programska implementacija PUSH i POP makroa (potprograma).

    Opti oblik deklaracije makro definicije u asembleru je macro [,...,]. Kraj makro definicije zavrava direktivom ENDM. Kao to je opisano u poglavlju 2.2.4. ove knjige makro je slian funkciji, moe i ne mora imati argumente a na mestu poziva u programu kod makroa se u celini kopira. U gornjem primeru pokazana su dva makroa bez argumenata koja se pozivaju imenima PUSH i POP. Makro PUSH koristi se kao zamena za nedostajuu instrukciju MCU PIC16F877 istog imena. Koristi se za privremeno smetanje (pamenje) sadraja internih registara procesora W, STATUS i PCLATH u odgovarajui adresni prostor memorije podataka sa simbolikim adresama W_COPY, S_COPY i P_COPY. Moe se primetiti da se u oba makroa na odreenim mestima koriste instrukcije zamene niblova swapf statusnog registra i registra akumulatora. Razlog primene ove instrukcije lei u injenici da ona ne utie ni na jedan bit statusnog registra. Razlog za izbegavanje primene naizgled logine instrukcije movf, umesto swapf, jeste mogunost uticaja ove instrukcije na Z bit (zero bit) statusnog registra. Po pravilu, PUSH makro ukljuuje registre specijalne namene koje kao deljive resurse zajedniki koriste ISR, potprogrami ili gla