Loginės operacijos naudojamos PIC16F84  (0)

Trumpas supažindinimas su PIC loginėmis operacijomis. Taip pat galima susipažinti su kintamųjų apsibrėžimo direktyvomis.


Prisijunk prie technologijos.lt komandos!

Laisvas grafikas, uždarbis, daug įdomių veiklų. Patirtis nebūtina, reikia tik entuziazmo.

Sudomino? Užpildyk šią anketą!

Kintamųjų apsibrėžimas. Ne visada patogu atminties ląstelę vadinti pagal jos adresą, tai labai painu. Patogiau ląstelei suteikti vardą, pagal kurią iškviečiama ląstelė. Ląstelei vardas gali būti suteikiamas keliais būdai. Vienas būdas ląstelės vardui priskirti yra naudojamas EQU direktyva.

EQU – pasirinkto kintamojo apibrėžimas. Šia direktyva yra suteikiami vardai duomenų atminties registrams. Pavyzdžiui, norint suteikti  registrui, kurio adresas yra 0Ch vardą „Vardas“, į programą reikią įvesti šią eilutę:

Vardas EQU 0Ch        ;priskiriamas pavadinimas ląstelei, kurios adresas Ch

Naudojant šia direktyva, taip pat galima nustatyti pastoviųjų skaitines vertes, pvz.:

 Septyni   EQU   7 ; (pastoviajai Septyni priskirta verte 7). 

 Kai norima apsibrėžti kelias atminties ląsteles naudojant direktyva EQU nėra praktiškas, ypač kai mums nėra svarbus ląstelės adresas (tik priskirtas jos vardas) naudojama cblock direktyva. cblock – ši direktyva apibrėžią kintamųjų bloką. Ji naudojama apsibrėžti keliems kintamiesiems. Po direktyvos nurodomas adresas nuo kurio prasideda kintamųjų adresai, kurie eina iš eilės. Pavyzdžiui:

cblock 0x10               ;kintamojo bloko apsibrėžimo pradžia, prasideda nuo 10h adreso
             vardas1                       ;kintamojo pavadinimas, kurio adresas 10h
             vardas2                       ;kintamojo pavadinimas, kurio adresas 11h
             endc                           ;apsibrėžiamo bloko babaiga
 

vardas1 automatiškai yra priskiriamas adresas 10h, vardas2 - 11h.

Suteikus registrams pavadinimus, juos patogu stebėti watch stebėjimo lange, kuris pavaizduotas 1 paveikslėjyje.šį langą galima rasti: view>watch.

 Registru stebejimo langas

1 pav. Watch registrų stebėjimo langas

Požymiai. Požymiai nusako skaičiaus būseną, jie yra STATUS registre. Pagrindiniai yra C ir Z požymis. Iš jų galima nustatyti koks yra skaičiaus ženklas po atkiltos operacijos (sudėties, atimties).

 Z – nulio rezultato požymio bitas. „1“ rodo aritmetinio ar loginio rezultatas yra lygus nuliui, „0“ rezultatas nėra lygus nuliui. 

DC – dešimtainio keliamojo vieneto požymis (požymis kad persipildė žemesnioji tetrada) atliekant sudėties ar atimties veiksmus. Jei „1“ yra keliamasis vienetas, „0“ rodo kad jo nėra.

C – keliamojo vieneto požymis (požymis, kad persipildė registras) atliekant sudėtie ir atimties veiksmus.

Pavyzdžiui, po atimties komandos galime gauti:

            SUBLW      0x03 
Prieš instrukcija:
           w=0x01, C=x, Z=x
Po instrukcijos:             w=0x02, C=1, Z=0,        rezultatas >0
 Prieš instrukcija:           w=0x03, C=x, Z=x
Po instrukcijos:             w=0x00, C=1, Z=1,        rezultatas =0
 Prieš instrukcija:           w=0x04, C=x, Z=x
Po instrukcijos:             w=0xFF, C=0, Z=0,       rezultatas <0

Mikrovaldiklyje nėra komandų kurios galėtų atlikti daugybos ir dalybos operacijas. Daugyba ir dalyba iš lyginių skaičių galima atlikti pasinaudojus perstūmimo komandomis RRF, LRF. Komanda RLF  - perstumiamas per vieną bitą į kairę. Vyriausias išstumtas bitas pereina į C požymį, o bitas iš C požymio į jauniausią skiltį ir įrašomas į d registrą. Toks veiksmas atitinka daugyba iš dviejų. Analogiškai komanda RRF kur perstumiamas bitas į dešinę pusę ir tai atitinka dalyba iš dviejų. Taigi jeigu daugiklį eina išskaidyti į 21+22+23+24+...=2+4+8+16+... tai galima pasinaudoti šiomis komandomis. Du pakelta x laipsnyje atitinka komandos panaudojimą x kartų.

                                    RLF REG,f                               ;atliekama bito slinkimo į kairę operacija
Prieš instrukcija:
           REG=0100 0110, C=0               ;d‘70‘
Po instrukcijos:             REG=1000 1100, C=0               ;d‘140‘

Pastaba. Atliekant šį veiksmą reikia stebėti vyriausiojo bito išstūmimą, kitu atveju atlikus daugybą galite gauti mažesnį skaičių.

Nesant daugikliui ar dalikliui lyginiam skaičiui tenka naudotis sudėties ir atimties operacijomis. Pavyzdžiui: 6x5. nei vieno, nei kito dauginamojo neina išskaidyti 2x . Šią daugybos veiksmą atliekame pasinaudojus sudėties operacija: 5+5+5+5+5+5 arba 6+6+6+6+6. Tai galima atlikti su addwf komanda ir uždaryti į ciklą su komanda decfsz priklausomai nuo dauginamojo dydžio:

suma    addwf daug2,f                 ;dauginamojo 2 turinį  sudėtis su darbiniu registru
            decfsz daug1,f                ;uždaromas į ciklą sudėtis tiek kartų koks daug1 turinys
            goto suma                      ;jei daugyba dar neatlikta grižta prie operacijos suma

 Komanda decfsz (decrement f register skip if zero) atima iš nurodyto registro 1 ir įrašo į f registrą (w – darbinį registrą) rezultatą. Ir jeigu rezultatas yra lygus nuliui peršoka vieną komandą.

Analogiškai atliekama dalyba pavyzdžiui: 30/7. Skaičius 30 yra atimamas tol kol atsakymas tampa lygus ar neigiamas skaičius. Kiek kartų bus atimta toks bus ir atsakymas. Blogiausia, kad dalinant ne visada gaunamas tikslus skaičius jis turi liekana.  

 

Pasidalinkite su draugais
Aut. teisės: www.technologijos.lt
(0)
(0)
(0)

Komentarai (0)

Susijusios žymos: