May 072013
 

Prethodni primer može da se napiše tako da potroši još 1 vorda više uz pomoć asmeblerskih naredbi koje smo upotrebili kako bismo se polako upoznavali sa njima jer nam njihovo poznavanje može biti od koristi kada budemo radili interapte. Njihovom upotrebom ostvarili smo i optimizaciju u smislu uštede programske memorije, mada postoji mišljenje da je danas sa ovim cenama bolje kupiti kontroler sa više memorije nego trošiti vreme na optimizaciju koja smanjuje veličinu programa. Optimizacija ili ne, odlučite sami šta više odgovara vašim potrebama i stilu pogramiranja.

Tutor18.bas

Sve BASIC naredbe su nam poznate pa ćemo da se posvetimo asemblerskim. Prva, “bcf STATUS, C” ima sintaksu koja glasi:

bcf f, b

Reč “bcf” je skraćenica od “bit clear file” gde “bit” označava da radimo sa jednim bitom, “clear” da “čistimo” oredjeni bit, tj. da ga postavljamo na 0, a “file” označava odredjenu promenljivu koja može da bude ili SFR ili neka naša promenljiva, tj. bilo koja lokacija u RAM-u kontrolera. Slovo “f” iza reči “bcf” označava da sledi naziv registra, a slovo “b” označava da sledi oznaka bita koji se resetuje – oznaka može da bude broj ili naziv bita. Da bi se koristio naziv, pre toga mora da bude definisan. Kraće rečeno, ova naredba resetuje odredjeni bit u nekom registru. A konkretno u ovom primeru ova naredba resetuje, tj. postavlja na nulu, u registru koji se zove STATUS, bit označen slovom C.

Naziv ovog registra i naziv bita su već definisani u PDS-u (kao i svi ostali SFR registri i njihovi bitovi) i njihove nazive ne moramo da pišemo velikim slovima u asemblerskim naredbama.

STATUS je SFR registar, čiji kompletan opis možete da vidite u tehničkim podacima na strani 21, koji čuva informacije o, kako mu i ime kaže, statusu nekih dogadjaja u kontroleru. Njegov bit 0 ima naziv “C” od reči “carry” koji služi kao informacija o prekoračenju rezultata nakon sabiranja ili oduzimanja. On se takodje koristi i u sledećoj naredbi u programu i ubrzo ćete videti zašto smo ga resetovali.

Postoji i asemblerska naredba koja setuje, tj. postavlja na 1 neki bit, a njena sintaksa glasi:

bsf f, b

Reč “bsf” je skraćenica od “bit set file”.

Sledeća naredba u programu je “rrf LATB, 1” čija sintaksa glasi:

rrf f, d

Reč “rrf” je skraćenica od “rotate right file” što znači “rotiraj udesno promenljivu”; slovo “f” iza reči “rrf” označava da sledi naziv registra ili promenljive, a slovo “d” označava odredište (“destination”) koje može da bude ista ta promenljiva, ili može da bude “w” registar. Ako je odredište ista ta promenljiva, umesto “d” pišemo broj 1, a ako je “w” registar, onda pišemo broj 0. Registar “w” je interni registar kontrolera, slovo “w” potiče od naziva “working registar” i jedini je registar koji nije smešten u RAM, a služi za prenos podataka izmedju RAM lokacija i vrši matematičko-logičke operacije sa RAM lokacijama.

Naredba “rrf” radi rotaciju samo za jedan bit, ali radi rotaciju kroz C bit STATUS registra što može da nam napravi problem. Da bi bilo jasnije, evo slike koja pojašnjava šta se tačno dešava:

rrf
Vidimo da kod rotacije udesno (postoji i naredba za rotaciju ulevo) bit 7 prelazi na mesto bita 6, bit 6 na mesto bita 5 itd sve do bita 0 koji prelazi na mesto C bita, dok C bit prelazi na mesto bita 7. Pošto nama nije potrebna rotacija već pomeranje, pre samog rotiranja moramo C bit STATUS registra da postavimo na 0 kako ne bi smo “vrteli” u krug ceo registar.

Pažljiv posmatrač može da vidi da u konkretnom primeru, pošto nam je u LATB registru samo jedan bit setovan, naredba “bcf STATUS, C” može da se izostavi, ali generalno nam je neophodna za “pretvaranje” asemblerske naredbe za rotiranje u naredbu za pomeranje jer ovaj PIC nema asemblersku naredbu za pomeranje bitova.

Pomenuli smo i naredbu za rotiranje ulevo i verovatno ste već pogodili kako glasi njena sintaksa:

rlf f, d

Reč “rlf” je skraćenica od, pogadjate, “rotate left file”, a evo i slikovnog prikaza njenog delovanja:

rlf

Veličina iskompajliranog programa: 81 Word-a