Oblika tipičnega zbirniškega programa na primeru LED-ice
To je še zadnja stvar, ki jo morate vedeti, preden boste lahko pričeli resno programirati mikrokontroler 16F84. Nekateri elementi se morajo nahajati v vsakem zbirniškem programu, saj v nasprotnem primeru program ne bo pravilno deloval. Poglejmo si tipičen program za PIC 16F84 v zbirniku:
list p=16f84 ;Tip mikrokontrolerja
#include <p16f84.inc> ;Vkljuci datoteko z definicijami naslovov ;registrov
__CONFIG _CP_OFF & _XT_OSC & _WDT_OFF & _PWRTE_ON
org 0x000 ;Pisi v prvo lokacijo (reset vektor)
goto Zacni ;Skok v glavni program
org 0x004 ;Pisi v peto lokacijo (prekinitveni vektor)
Zacni
bsf STATUS, RP0 ;Izberemo banko 1
movlw 0x00 ;V W vpisemo 0x00
movwf TRISB ;Vsebino W kopiramo v TRISB
bcf STATUS, RP0 ;Izberemo banko 0
movlw 0x01 ;V W vpisemo 0x01
movwf PORTB ;V PORTB vpisemo vrednost W (vkljucimo LED na RB0 ;pinu)
zanka goto zanka ;Program zakljucimo z zanko
end ;Konec programa
Najprej si poglejmo novo instrukcijo goto. Ta instrukcija povzroči skok v programu na oznako (labelo), ki ji sledi v parametru. Labelo lahko v programu postavimo kamor koli pred instrukcijo ali pa v novo vrstico med programom. V našem primeru je instrukcija goto Zacni povzročila, da se je izvajanje programa nadaljevalo za labelo Zacni. Labele naj ne vsebujejo šumnikov! Nova instrukcija bcf je ravno nasprotna že znani instrukciji bsf – na 0 postavi določen bit v registru, ki ga določimo s prvim parametrom. Kateri bit bomo izklopili, določa drugi parameter. V našem primeru smo izklopili bit RP0 v registru STATUS, tako da smo se pomaknili v banko 0. Poglejmo si obliko programa: pomen prvih dveh vrstic smo že opisali. V tretji vrstici nastavimo mikrokontroler. Ta vrstica bo pri amaterski rabi vedno enaka: _CP_OFF izključi zaščito programa pred kopiranjem, _XT_OSC nastavi mikrokontroler na delovanje s kristalnim oscilatorjem, _WDT _OFF izključi watchdog timer (Ta timer omogoči resetiranje mikrokontrolerja ob napaki v programu, vendar je potrebno zanj prirediti program. Če bi bil vključen v navadnem programu, bi se mikrokontroler vedno znova samodejno resetiral.), _PWRTE_ON pa vklopi power-on timer, ki poskrbi, da se oscilator stabilizira preden začne mikrokontroler izvrševati program. Goto instrukcija se bo vpisala na naslov 0, saj smo tako določili z direktivo org. Ker mikrokontroler po vklopu vedno izvrši najprej instrukcijo na naslovu 0, bo skočil na glavni program, ki se nahaja za labelo Zacni. Vidimo lahko, da je prvi ukaz glavnega programa na naslovu 0x004 (zaradi org direktive), kar je tudi peta lokacija programskega pomnilnika – torej prekinitveni vektor (prva lokacija je na naslovu 0). Ker prekinitev zaenkrat še ne bomo uporabljali, bo na tej lokaciji začel glavni program. Prekinitve so že avtomatsko izključene ob vklopu mikrokontrolerja, zato s tem ne bo težav. Glavni program se mora vedno končati tako, da se znajde v neskončni zanki. V našem primeru smo ga z instrukcijo goto prisilili, da v neskončnost izvršuje to instrukcijo. Če bi ta del programa manjkal, bi program »ušel« naprej po programskem pomnilniku in povzročil nepredvidljivo obnašanje mikrokontrolerja. Zadnji del programa je obvezno direktiva end. Ta program povzroči, da se na pinu RB0 mikrokontrolerja pojavi napajalna napetost. V TRISB smo vpisali vrednost 0 zato, da smo nastavili pin RB0 kot izhoden pin. Ko smo vpisali v register PORTB vrednost 0x01, smo postavili njegov prvi bit na 1. Ker je ta bit povezan s pinom RB0, smo tudi ta pin postavili na 1 (napajalno napetost). Če je na tem pinu LED-ica s preduporom za omejitev toka, bo zasvetila. Tukaj sem navedel samo enostaven primer za popestritev, v naslednjem poglavju pa bom objasnil vse, kar morate vedeti o programiranju vhodno/izhodnih pinov mikrokontrolerja PIC 16F84 in priključevanju raznih elementov nanj.
V naslednjem poglavju se bomo postopoma naučili, kako mikrokontroler PIC 16F84 sploh priključiti v vezje in uporabiti v najrazličnejše namene, kot so npr. krmiljenje LED-ic, relejev, triakov, branje stanja tipke, uporaba LED 7-segmentnega prikazovalnika itd.
Virtualna trgovina, nakup brošure in informacije!
PIC od začetka – uvod
Avtor: Jernej Škvarč
Ljubljana, avgust 2004