Sida 1 av 1

assemblerprogramering av PIC

Postat: 8 december 2010, 23:51:08
av SeniorLemuren
Har just börjat lära om assemblerprogrammering av PIC. Jag använder MPLAB IDE ver 8,6. Har börjat med en PIC16F84A. Jag har hittat en tutorial på nätet som verkar ok. Det kommer emellertid upp ett och annat frågetecken då och då.
Det första jag har stött på var att i testprogrammet har man skrivit

addwf Spot1,W

och förklarat följande:

Notice the ‘,W’ on the add and subtract instructions. These instructions can store the result either into the W register, or the original memory location. If we had wanted the result to go back into the file register, we would have used ‘,F’ instead of ‘,W’.

Om man läser i databladet för 16f84 kan man läsa att syntaxen är:

addwf f,d

där d är:

Destination select; d = 0: store result in W,
d = 1: store result in file register f.
Default is d = 1


Om man kan använda W eller F i stället för 0 resp. 1 så gör ju det att det blir enklare att läsa programmet, men eftersom man inte kan utläsa det i databladet så antar jag att det är kompilatorn som översätter W till 0 osv. Jag antar att det kommer att dyka upp fler sådana fall med andra opkoder, så min fråga är : Vart hittar man informationen om vad som gäller. Det måste ju finnas någon fil i MPLAB som hanterar detta.

Re: assemblerprogramering av PIC

Postat: 8 december 2010, 23:59:58
av sodjan
Trevligt ! :-)

Ja, det finns symboler i MPASM för "W" och "F" som har rätt värde (d.v.s
0 eller 1, jag minns aldrig vilket som är vilket, och det behöver man
igentligen inte veta heller, det är enklare att komma ihåg "W" resp "F").

Om du tittar i din MPLAB installationen och öppnar P16F84A.INC (som du
sannolikt även gör "#include" på i ditt program) så ser du bl.a dessa rader :

Kod: Markera allt

;==========================================================================
;       Register Definitions
;==========================================================================

W                            EQU     H'0000'
F                            EQU     H'0001'
...
...
Det är därför som det fungerar med "w" resp "f" i instruktionerna !

Sen så vet jag inte om du redan vet det, men just 16F84A är en ganska
gammal modell. Visst, den är enkel i sin arkitektur och kanske därför lite
enklare att komma igång med, men den saknas mycket som moderna
PIC's har.

Vad har du tänkt att köra för programmerare ?
"PICkit2 Starter Kit" från ELFA (73-344-18) är ett bra köp.
Där får du även en PIC som är modern och som det finns många
som använder (just därför att den följer med just det kitet).

Re: assemblerprogramering av PIC

Postat: 9 december 2010, 00:10:34
av sodjan
Ett litet tillägg...

Det har alltså ingenting med att göra att de två symbolerna kallas just "w" resp "f".

Om det stog så här i INC filen :

Kod: Markera allt

;==========================================================================
;       Register Definitions
;==========================================================================

SPARA-I-WREG                      EQU     H'0000'
TILLBAKA-TILL-REGISTRET           EQU     H'0001'
...
så skulle du kunna skriva din ADDWF instruktion så här

Kod: Markera allt

   addwf Spot1, spara-i-wreg
eller

Kod: Markera allt

   addwf Spot1, tillbaka-till-registret
Det är enbart helt vanlig symbol-substitution, ingenting annat...

Re: assemblerprogramering av PIC

Postat: 9 december 2010, 00:18:32
av sodjan
Ytterligare en liten, liten detalj... :-)

Normalt kallar man inte MPASM för en "kompilator". En kompilator översätter
en "högnivåspråk" (C, Fortran, COBOL o.s.v) till (vanligtsvis) just assemblerkod.
Sedan låter man assemblern/assemblatorn fixa en maskinkod av det hela.

I detta fall är det enklast att kalla det för just MPASM så blir det inga
missförstånd kring vad som avses.

Re: assemblerprogramering av PIC

Postat: 9 december 2010, 00:35:11
av SeniorLemuren
Tack, jag hittade filen. Att jag använder 16F84 beror dels på att ja hade en liggandes i lådan och att det finns en uppsjö av exempel på nätet med just den.

Jag köpte en Willem Universal, China-klon på ebay för 10 pund. Har testat och den verkar funka ok. och tar det mesta.