Sida 2 av 3
Re: Börjat pyssla med assambler och behöver lite tips.
Postat: 14 oktober 2009, 14:33:36
av bos
cosmox skrev:Jag har en fråga ang btfss. Kan den bara utföra check på enstaka bitar eller går det att göra på nibbles och bytes också?
Ja, och nej. Med btfss/-c kan du enbart kolla en bit. Vill du kolla om något är talet 123 (exempelvis) kan du använda xor:
Kod: Markera allt
movfw SOMETHING
xorlw .123 ; Check if SOMETHING is 123
btfsc STATUS, Z ; If it is, jump
goto yes
...
Det som händer här är att om SOMETHING är 123 så kommer W vara 0 efter operationen (ett tal xor sig självt blir alltid 0), annars är det något annat än 0. Därför kollar man Z-flaggan för att se om xor ger 0 eller inte, och utgår från det.
cosmox skrev:En annan fråga. Jag behöver använda en byte i GPR. GPR0...osv finns inte deklarerat i min .inc fil. Ska den göra det? Är det bra att ha GP registren där i? Hur lägger man till det på bästa sätt?
Har du provat GP0, GP1, osv?
Re: Börjat pyssla med assambler och behöver lite tips.
Postat: 14 oktober 2009, 14:37:02
av cosmox
Ok, tack
Har du provat GP0, GP1, osv?
Nej, jag har bara testat med "GPR0,1...". Jag kollade sedan i .inc-filen och såg att ingen av GP-registren finns med där.
EDIT: Stavning
Re: Börjat pyssla med assambler och behöver lite tips.
Postat: 14 oktober 2009, 14:39:37
av bos
De enda processorers portar jag sett indexeras med GP är PIC12. Du skriver att du använder 16F84, och utan att kolla i databladet tvivlar jag på att de heter GP på den processorn. Det är inte RA[0-7] / RB[0-7] du söker?
Re: Börjat pyssla med assambler och behöver lite tips.
Postat: 14 oktober 2009, 14:44:50
av cosmox
Nej, i boken står det att man ska använda sig av "gpr0" i ett exempel för en SWAPF. Denna fanns ju så klart inte med så jag gjorde en #define för att lösa det. Det är bara en gissning att GPR står för General Purpose Register. Borde inte det i så fall stå deklarerat i .inc?
Re: Börjat pyssla med assambler och behöver lite tips.
Postat: 14 oktober 2009, 14:57:26
av sodjan
> Är det normalt att ett sådant program blir ganska långt om man bara använder de instruktioner jag har lärt mig hittills?
Det där förstår jag inte alls. En PIC av din typ har ca 37 instruktioner. Använd dom.
Det finns noll anledning att begränsa dig till enbart några instruktioner.
> Jag har en fråga ang btfss. Kan den bara utföra check på enstaka bitar
Ja, är inte dokumentationen kristallklar på den punkten ?
> GPR0...osv finns inte deklarerat i min .inc fil.
Nej, därför de inte heter så ! Använd de korrekta namnen...
> Jag kollade sedan i .inc-filen och gåg att ingen av GP-registren finns med där.
Nej, självklart inte. Det finns inget som heter så på den processor du använder...
Re: Börjat pyssla med assambler och behöver lite tips.
Postat: 14 oktober 2009, 14:58:54
av bos
Ok, begreppsförvirring. Om det är du eller boken som förvirrat, och vem som förvirrat, vet jag inte. För att använda swapf använder du ett register, vilket som helst. Såhär:
Kod: Markera allt
movlw 0x24
movwf SOME_REG
swapf SOME_REG, f
SOME_REG innehåller nu 0x42. Jag förstår inte vad det är du försöker åstadkomma genom att leta upp det i nån include-fil. Troligen är det för att du blandat ihop GPR - General Purpose Register - med dataporten.
Re: Börjat pyssla med assambler och behöver lite tips.
Postat: 14 oktober 2009, 15:26:13
av cosmox
En PIC av din typ har ca 37 instruktioner. Använd dom.
Eftersom att författaren vill att man ska klara det på de instruktioner jag har till handa vill jag försöka göra det. Även om det är lite klumpigt.
Ja, är inte dokumentationen kristallklar på den punkten ?
Jo, efter att jag har tittat noggrannare så är den det. Boken gjorde mig lite förvirrad ett tag.
Anledningen till mina frågor om GPR0 var att boken hänvisar till att det är den man ska använda i ett exempel. Jag trodde att "gpr0" (med små bokstäver) var ett register (liknande W tex) som används för dessa typer av operationer. Men nu vet jag.
Bos: Om man gör på det sätt du skrivit, måste/"är det bra om" man definiera tex. "SOME_REG" eller liknande med ett #define i början av koden eller kan man göra det på "flygande fot" så att säga?
Re: Börjat pyssla med assambler och behöver lite tips.
Postat: 14 oktober 2009, 15:33:55
av sodjan
Författaren till boken gör jättemissen att inte använda INC filerna som
Microchip levererar med MPLAB. Som någon annan sa såkallas pinnarna
på PIC12 serien för GP0,1,2,3 o.s.v och registret heter GPIO. Men
på PIC16 så heter det alltid PORTA, PORTB o.s.v pinnarna RA0,1,2,
RB0,1,2,3 o.s.v.
Alltså, Du kan skriva "BSF PORTA, RA0" eller BSF PORTA, 0", det blir
samma resultat.
> Eftersom att författaren vill att man ska klara det på de instruktioner jag har till handa vill jag försöka göra det.
Aha, OK...

Ja gör det då, du frågade ju...
> måste/"är det bra om" man definiera tex. "SOME_REG" eller liknande med ett #define i början
Menar du PORTA, STATUS o.s.v ? Man ska **ALDRIG** göra det !
Re: Börjat pyssla med assambler och behöver lite tips.
Postat: 14 oktober 2009, 15:36:01
av bos
Ingen #define behövs alls. Här har du en fullt simulerbar exempelkod som visar hur swapf används med ett register:
Kod: Markera allt
list p=16F84A
#include <p16f84a.inc>
errorlevel -302
;***** VARIABLE DEFINITIONS
udata_shr
SOME_REG res 1
;**********************************************************************
MAIN CODE 0x000
movlw 0x24
movwf SOME_REG
swapf SOME_REG, f
loop
goto loop
end
Re: Börjat pyssla med assambler och behöver lite tips.
Postat: 14 oktober 2009, 15:36:23
av cosmox
Nej, jag menade inte de register som redan finns utan som bos skrev i sitt exempel. Om man vill ge ett tal ett namn.
Re: Börjat pyssla med assambler och behöver lite tips.
Postat: 14 oktober 2009, 15:36:54
av cosmox
Tack bos, det hjälpte!
Re: Börjat pyssla med assambler och behöver lite tips.
Postat: 14 oktober 2009, 15:38:15
av cosmox
Jag ser nu också att du använder
Istället för "org 0"
Finns det någon särskild fördel med det (förutom att det uppenbarligen ser tydligare ut)
Re: Börjat pyssla med assambler och behöver lite tips.
Postat: 14 oktober 2009, 15:43:40
av sodjan
Re: Börjat pyssla med assambler och behöver lite tips.
Postat: 14 oktober 2009, 15:45:28
av bos
Min kod är skriven för "relocatable" mode, medan din (bokens) är "absolute". Det första är att föredra. Alltid. Det finns ingen vits med att skriva absolut kod, såvida det inte handlar om ett par rader.
Kortfattat innebär det bland annat att du inte behöver bry dig ett smack om vilken adress ett visst register ligger på, länkaren sköter allt sånt åt dig. Relocatable innebär i princip att du säger "jag behöver tre register där alla är en byte stor", och länkaren fixar det. Absolute innebär "jag har tre register som ligger på minnesplats A, B och C".
Den inbyggda hjälpen i MPLAB berättar mer.
EDIT: Sodjans hann före med sina länkar. De har nog bättre information än den inbyggda hjälpen, iallafall på din nivå.
Re: Börjat pyssla med assambler och behöver lite tips.
Postat: 14 oktober 2009, 17:33:34
av persika
Mitt inlägg om kommentarer var menat som ett tips, ingen sågning.