Grunnleggende programmering

 

Her skal jeg prøve å forklare noen grunnleggende ting innen assembler programmering.

Assembler programmering er nesten det laveste nivået man kommer innen programmering,

her behandler man en og en byte og en og en bit.

Instruksjonssettet består bare av 35 instruksjoner og de er lette å huske etterhvert.

 

Skriving av program

Når man skriver et program så er første kolonne avsatt til 'merker' ( label ), neste kolonne er avsatt til

instruksjonene, neste kolonne er avsatt til konstanter og registre, neste kolonne bruks til kommentarer.

Man kan skrive programmet i Notepad da bruker man tabulatoren til å flytte seg mellom kolonnene.

Når man skriver en kommentar er det viktig å ha semikolon foran kommentaren.

Her er et eksempel.

LOOP

DECFSZ

10,1

;Trekker fra 1 i reg.10 Hvis reg 10 er 0 så hopp over neste instruksjon

 

GOTO

LOOP

;Gå til linjen merket LOOP

 

 

F - registere

PIC prosessoren har flere registre, f- registerene er områder i RAM som har adresse fra 00 hex til 4F hex,

et f- register kan også være en utgang eller inngang.

Adressene fra 00 hex til 0B hex er registerer som har spesielle oppgaver, adressene fra 0C hex til 4F hex er ledige

plasser som kan brukes til hva som helst.

 

Tall systemer

Tall kan skrives på forskjellige måter, heksadesimalt, binært og desimalt.

Heksadesimalt skrives slik : 0x5F

Binært skrives slik : b'01011111'

Desimalt skrives slik ; .95

Skrives tallet uten noe foran, blir dette tolket som en hex verdi.

Tallet 95 blir tolket som 0x95 og er ikke det samme som .95 som er desimalt.

 

W - registeret

W -registeret er et mellomlager som man må bruke i forbindelse med de fleste instruksjoner.

Å kopiere noe fra et f- register til et annet f- register går ikke uten videre, verdien må mellomlagres

først, dette gjør man i w- registeret.

Kommandoene under kopierer inneholdet av register 0C hex til 0D hex.

0 etter komma i den første instruksjonen bestemmer hvor inneholdet skal lagres, 0 til w- register og 1 til f- register.

 

MOVF

0C,0

;Kopierer innholdet i 0C til w

 

MOVWF

0D

;Kopierer innholdet i w til 0D

 

 

PIC 16F84 Instruksjoner

ã Atle Hillestad

 

BYTE ORIENTERTE

ADDWF f.d Adderer innholdet i W-registeret med innholdet i f- registeret. Hvis d.

= 0. Blir svaret plassert i W-Registeret, hvis d. = 1. Blir svaret plassert tilbake i f-registeret.

 

ANDWF f,d OG'er innholdet I W-registeret med innholdet I f-registeret. Hvis f. = 0

blir svaret plassert I W-registeret. Hvis d. = 1. Blir svaret plassert tilbake i f-registeret.

 

CLRF f Innholdet i f. blir satt til 0 (clearet) og Z -bit blir satt.

 

CLRW Innholdet i W. blir satt til 0 (clearet) og Z -bit blir satt.

 

COMF f,d Innholdet i f-registeret blir komplementert ( invertert ). Hvis d. = 0.blir

resultatet Plassert i W-registeret. Hvis d. = 1. Blir resultatet plassert tilbake I f- Registeret.

 

DECF f,d Minker innholdet i f-registeret med 1. Hvis d. = 0.blir resultatet

plassert i W-registeret. Hvis d. = 1. Blir resultatet plassert tilbake i f-Registeret.

 

DECFSZ f,d Minker innholdet i f-registeret med 1. Hvis d. = 0.blir resultatet

plassert i W-registeret. Hvis d. = i. Blir resultatet plassert tilbake i f-Registeret.

Hvis resultatet = 1. Blir neste instruksjon utført. Hvis resultatet =

0.vil den neste instruksjon ikke bli utført, isteden vil PC hoppe 2-cycler.

 

INCF f,d Innholdet i f-registeret økes med 1. . Hvis d. = 0.blir resultatet

Plassert i W-registeret. Hvis d. = 1. Blir resultatet plassert tilbake i f- Registeret.

 

INCFSZ f,d Innholdet i f-registeret økes med 1. . Hvis d. = 0.blir resultatet

plassert i W-registeret. Hvis d. = 1. Blir resultatet plassert tilbake i f- Registeret.

Hvis resultatet = 1. Blir neste instruksjon utført. Hvis resultatet =0.

vil den neste instruksjon ikke bli utført, isteden vil PC hoppe 2-cycler.

 

IORWF f,d Innclusiv OR'er W-registeret med f-registeret. . Hvis d. = 0.blir

resultatet plassert i W-registeret. Hvis d. = 1. Blir resultatet plassert tilbake i f-Registeret.

 

MOVF f,d Innholdet i f-registeret blir flyttet. Avhengig av d. Hvis d = 0.

er destinasjonen W-registeret. Hvis d.= 1.er destinasjonen f-registeret.

d = 1. Er nyttig å bruke for å teste et f-register fordi status flagget Z

blir påvirket.

 

MOVWF f Flytter innholdet i W-registeret til f-registeret.

 

NOP No operation, brukes som en kort tidsforsinkelse.

 

RLF f,d Innholdet i f-registeret roteres en bit til venstre.(trough carry)

Hvis d. = 0.blir resultat plassert i W-registeret. Hvis d. = 1. Blir resultatet plassert tilbake i f-Registeret.

 

RRF f,d Innholdet i f-registeret roteres en bit til høyere.(trough carry)

Hvis d. = 0.blir resultat plassert i W-registeret. Hvis d. = 1. Blir resultatet plassert tilbake i f-Registeret.

 

SUBWF f,d Trekker W-registerets innhold fra f-registerets innhold. ( F - W )

Hvis d. = 0.blir resultat Plassert i W-registeret. Hvis d. = 1. Blir resultatet plassert tilbake i f-Registeret.

 

 

SWAPF f,d De 4 øverste og nederste bit'ene i f-registeret blir byttet om.(skifter plass)

Hvis d. = 0.blir resultat plassert i W-registeret. Hvis d. = 1. Blir resultatet plassert tilbake i f-Registeret.

 

XORWF f,d Exlusiv Or'er innholdet i W-registeret med f-registeret. Hvis d. = 0.blir

resultat plassert i W-register Hvis d. = 1. Blir resultatet plassert tilbake i f-Registeret.

 

 

BIT ORIENTERTE FILINSTRUKSJONER

 

BCF f,b Bit b. i f-registeret er satt til 0.

 

BSF f,b Bit b. i f-registeret er satt til 1.

 

BTFSC f,b Hvis bit b.i f-registeret = 1. Blir neste instruksjon utført. Hvis bit = 0.vil

den neste instruksjon ikke bli utført.

 

BTFSS f,b Hvis bit b.i f-registeret = 0. Blir neste instruksjon utført. Hvis bit = 1.vil

den neste instruksjon ikke bli utført.

 

KONTROLL INSTRUKSJONER

 

ADDLW k Innholdet i W-registeret blir addert med konstanten k. og resultatet blir

plassert i W-registeret.

 

ANDLW k Innholdet i W-registeret blir OG'et med konstanten k og resultatet blir

plassert i W-registeret.

 

CALL k Kaller opp subrutine.

 

CLRWDT Clear Watchdog Timer.

 

GOTO k Går til et sted i programmet, bestemt av konstanten k

 

 

IORLW k IOR'er W-registeret med konstanten k. Resultatet blir

Plassert i W-registeret.

 

 

MOVLW k Konstanten k. blir plassert i W-registeret.

 

RETFIE Returner fra en Interupt rutine.

 

RETLW k Returnerer fra en subrutine med konstanten k i w register, denne brukes

ofte i forbindelse med tabeller.

 

RETURN Returnerer fra en subrutine.

 

SLEEP Prosessor blir satt i sleep-mode.

 

SUBLW k W-registeret blir trekt fra konstanten k.

 

XORLW k Innholdet I W-registeret blir XOR'et med konstanten k.

Resultatet bli plassert i W-rgisteret.

 

 

Forklaringer til instruksjonssettet

Bokstaven f angir hvilket register instruksjonen skal gjøre noe med.

Bokstaven ,d angir hvor resultatet av instruksjonen skal lagres, er d = 0 så lagres resultatet i w -registeret,

er d = 1 så lagres resultatet i f -registeret.

Hvis man ikke skriver noe inn for d så settes den automatisk til 1, dvs. resultat lagres i f -register.

 

ADDWF

10,1

;Adderer w og register 10 svar legges i register 10

 

ADDWF

10,0

;Adderer w og register 10 svar legges i w -register

 

ADDWF

10

;Adderer w og register 10 svar legges i register 10

 

 

Bokstaven b angir hvilket bit instruksjonen skal gjøre noe med.

 

BSF

10,3

;Setter bit 3 i register 10 til 1

 

 

Bokstaven k betyr konstant, dvs. at konstanten er et tall man skriver inn i programmet som

alltid vil stå der for eks.

 

ADDLW

.5

;Adderer tallet 5 til w -registeret

 

GOTO

LOOP

;Gå til linjen merket LOOP

 

 

Equate

F -registerene har heksadesimale adresser, disse kan være vanskelige å holde styr på når det

blir mange av dem.

Vi kan gi registerene navn slik at det blir lettere å skille dem fra hveradre.

Dette gjøres i begynnelsen av programmet.

Register 10 vil vi kalle "teller", register 5 vil vi kalle porta og register 6 vil vi kalle portb :

teller

EQU

10

;Register 10 kalles teller

porta

EQU

05

;Register 5 kalles porta

portb

EQU

06

;Register 6 kalles portb

På denne måten er det lettere skrive programmet.

 

BSF

05,3

;Setter bit 3 på porta til 1 ( pinne 2 )

 

BSF

porta,3

;Setter bit 3 på porta til 1 ( pinne 2 )

 

 

 

Klikk her for å laste ned databladet med instruksjonssettet ( 1,1 M byte ) 

 

Tilbake