0,00 €

V košarici ni izdelkov.

0,00 €

V košarici ni izdelkov.

More
    DomovLiteraturaArhiv literaturePIC od začetka - uvod

    Podatkovni RAM pomnilnik

    Slike niPodatkovni RAM pomnilnik je razdeljen na dve banki. Imenujemo ju banka 0 in banka 1. Prvih 12 lokacij v banki 0 in banki 1 je namenjenih za posebne namene, imenujemo pa jih SFR (Special Function Registers) registri. Preko njih komuniciramo z ostalimi enotami na čipu. Poleg tega imamo na naslednjih lokacijah še 68 GPR registrov (General Purpose Registers), ki so nam vedno na voljo za shranjevanje naših podatkov. Organizacijo podatkovnega pomnilnika lahko vidite na sliki 6.

    Lokacije, ki so v tabeli označene s sivo barvo, v PIC 16F84 ne obstajajo. Če iz njih beremo, dobimo vedno vrednost 0. Podatkovni pomnilnik si lahko predstavljate kot dve omari z 80 predali, ki so označeni po vrsti z zaporednimi številkami. Te številke so njihovi naslovi, omari pa predstavljata banki. Prva omara je banka 0, druga pa banka 1. Posamezen predal je 8-bitni register, ki hrani nek podatek. Če želimo brati ali pisati v lokacijo (register) RAM pomnilnika, se moramo nahajati v banki, v kateri je želeni register. V naši shemi pomnilnika so naslovi napisani s šestnajstiškimi vrednostmi (predpona 0x pred številom pomeni, da je število šestnajstiško). Kot vidimo na sliki, se GPR registri »prelivajo« iz ene banke v drugo – ti registri se namreč nahajajo v obeh bankah hkrati. Če npr. vpišemo neko vrednost na naslov 0x0C v banki 0, se bo pojavila ista vrednost tudi v banki 1 na naslovu 0x8C. Vsi GPR registri od naslovov 0x0C do 0x4F v banki 0 se namreč avtomatsko zrcalijo v registre 0x8C do 0xCF v banki 1. To je za programerja velika olajšava, saj lahko določen GPR register uporablja ne glede na to, v kateri banki se trenutno nahaja. Kot lahko vidite, se enako prezrcalijo tudi nekateri SFR registri.

    Načini naslavljanja podatkovnega RAM pomnilnika

    RAM pomnilnik lahko naslavljamo direktno ali pa indirektno. Največkrat se poslužujemo direktnega naslavljanja. Pri tem načinu naslavljanja se najprej postavimo v ustrezno banko in nato preko 7-bitnega naslova dostopamo do registra s podatkom. Banko, v kateri se trenutno nahajamo, izberemo s pomočjo SFR registra STATUS (vidimo, da se nahaja v obeh bankah – prav zaradi tega, da lahko preklapljamo med bankami). Trenutno izbrano banko določata njegov 6. in 7. bit (bita 5 in 6, saj se biti štejejo od 0 do 7; 0 je prvi bit). Bit 5 se imenuje RP0, bit 6 pa RP1. S kombinacijami teh dveh bitov lahko določimo 4 banke, čeprav ima 16F84 le 2. To je zato, ker imajo zmogljivejši PIC mikrokontrolerji več bank. V 16F84 torej uporabljamo le bit RP0. Če vanj vpišemo 0, bomo izbrali banko 0, če pa vpišemo 1, bomo izbrali banko 1. Naslov registra v banki določimo s samim parametrom ukaza. Poglejmo si to na primeru v zbirniku:

     bsf STATUS, RP0 ;Izberemo banko 1
     movlw 0x12 ;V delovni register vpišemo 0x12
     movwf TRISB ;Delovni register shranimo v register
     ;TRISB. Sedaj je v TRISB vrednost 0x12.
    Slike ni

    Spoznajmo prve tri instrukcije. Instrukcija bsf (bit set f) postavi določen bit v registru na 1 (ga vklopi). Prvi parameter (STATUS) pomeni naslov registra, v katerem želimo vklopiti bit, drugi parameter, ki se nahaja za vejico (RP0), pa pomeni bit, ki ga želimo vklopiti. V našem primeru smo postavili bit RP0 na 1 in tako izbrali banko 1. Vedeti morate, da sta besedi STATUS in RP0 definirani v datoteki p16f84.inc, ki jo moramo vključiti na začetku programa. STATUS je v bistvu konstanta z vrednostjo 0x03 (naslov registra STATUS), RP0 pa konstanta z vrednostjo 5 (bit 5 v registru, parameter namreč pomeni zaporedno številko bita v registru, od 0 do 7). Instrukcija bsf STATUS, RP0 je torej enakovredna bsf 0x03, 5, vendar veliko bolj razumljiva. Tukaj torej lahko vidite, kakšna olajšava za programerja so konstante v zbirniku. Instrukcija movlw (move literal to W) vpiše vrednost iz parametra v delovni register W. Instrukcija movwf (move W to f) vpiše v register f (ki ga določimo v parametru) vrednost, ki se nahaja v delovnem registru W (torej v našem primeru 0x12). Ta ukaz je torej spet enakovreden movwf 0x06. Kot vidite, se TRISB nahaja v banki 1. Če ne bi preklopili na banko 1, bi z ukazom movwf TRISB vpisali vrednost v register PORTB, ki se nahaja na istem naslovu v banki 0. Še opomba, da ne bo zmešnjave: v tabeli z registri v banki 1 sem pisal naslove od 0x80 naprej. V resnici so ti naslovi od 0x00 naprej, vendar MPLAB in PIC priročniki vedno zapisujejo naslove tako. Kot sem prej napisal, je naslov registra v parametru instrukcije vedno 7-biten, tako da prevajalnik vedno vzame prvih 7 bitov parametra za pravo vrednost. Če je torej parameter 0x80, bo prevajalnik avtomatsko odstranil 8. bit in dobili bomo pravo vrednost 0x00. 8. bit je pomemben le za prevajalnik, saj mu pove banko, v kateri je register. Tako lahko prevajalnik javi opozorilo, če pozabimo nastaviti pravo banko za določen register. Prikaz direktnega naslavljanja lahko vidite na sliki 7.