|
|
|
| Software projekti | |
|
MOTOROLA 68HC11 - BIT PO BIT U današnjim razmerama kilobajta i megabajta može se zaboraviti na bitove i njihov značaj. Motorolin mikrokontroler MC68HC11 poseduje poseban set instrukcija namenjenih za manipulisanje bitovima : BITA, BITB, BCLR, BSET, BRCLR i BRSET. Prve dve instrukcije (BITA i BITB) su namenjene za poređenje sadržaja akumulatorskih registara (acca i accb) sa memorijskom lokacijom. Unutar procesora se obavlja logičko “I” (AND) čime se utiče na registar stanja (eng. Condition Code Register ccr) a da se pri tom ne menja sadržaj operanda. U registru stanja postoje dva bita N (negative) i Z (zero) na osnovu kojih se može odrediti da li je rezultat manji, veći ili jednak nuli. Druge dve instrukcije (BCLR i BSET) čitaju operand, manipulišu selektovanim bitovima unutar operanda i vraćaju rezultat u memoriju koja je rezervisana za operand. Pored toga, menja se vrednost bitova N i Z registra stanja ccr. Preostale dve instrukcije (BRCLR i BRSET) su uslovni skokovi koji se obavljaju na osnovu maske koja definiše bitove koji se proveravaju te dve instrukcije ne utiču na registar stanja programa, a akumulatorski registri acca i accb se mogu ravnopravno koristiti. Maska (jedan bajt) se obavezno postavlja tako da se obavezno postave jedinice na mestima potrebnih bitova, bez obzira da li se bit setuje ili čisti. Ovo se razlikuje od klasičnog načina manipulisanja bitovima koje koristi logičke operacije OR i AND. Maskiranje se često primenjuje sa ciljem da se utiče na daljnji tok izvršavanja programa u zavisnosti od vrednosti proveravanog bita. Upotreba gornjih šest instrukcija automatizuje mehanizam manipulisanja bitovima u smislu da je izbegnuta upotreba logičkih operacija (AND za čišćenje i OR za setovanje) koje se obavljaju negde u pozadini (nevidljive za korisnika). Slede tri kratka primera koja prikazuju primenu navedenih instrukcija. Primer 1. Prikazan je deo koda koji ilustruje situaciju kada se testira četvrti bit određene memorijske lokacije. Ukoliko je taj bit setovan treba “skočiti” na labelu lab1 radi obavljanja nekog zadatka:
Primer 2.
Kod ispitivanja flegova može se koristiti i “polling” metod. U slučaju kada je važno samo sačekati određeni događaj (i samo to!) potrebno je proveravati fleg koji se postavlja sa 0 na 1 kada se nešto desi. Dati deo koda služi za proveravanje da li se desila promena na drugom pinu porta A odnosno bitu IC1 (eng. Input-Capture kanal br.1). Program se “zaglavljuje” na labeli označenoj sa lab1 sve dok se ne pojavi logičko “1” na drugom bitu registra TFLG1 (indikator događaja IC1) koji se nalazi na memorijskoj lokaciji $1023. Može se primetiti da je cilj koda u primeru 1. ekvivalentan primeru 2, a to su uslovni skokovi na osnovu testiranja bita (ili grupe bitova). U poslednjem slučaju program “samo čeka” što baš nije korisno ali ako nema prioritetnijih zadataka gornji kod se može tolerisati.
Ponekad je korisno nasilno setovati (postaviti na logičku “1”) ili očistiti (postaviti na logičku “0”) neke bitove u registrima ili memoriji. Omogućavanje interapta PAOVI se postiže tako što se postavi logička “1” na peti bit TMSK1 registra koji se nalazi na lokaciji $1022. Onemogućavanje istog interapta se može izvršiti na sl. način.
Treba primetiti da se ovom naredbom brišu bitovi na mestima jedinica u maski.
|
|
C o p y r i g h t 1998 mikroElektronika. All Right Reserved. Za sva pitanja obratite se redakciji |