Börjat pyssla med assambler och behöver lite tips.

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
bos
Inlägg: 2314
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Re: Börjat pyssla med assambler och behöver lite tips.

Inlägg 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?
cosmox
EF Sponsor
Inlägg: 3856
Blev medlem: 6 januari 2004, 02:11:54
Ort: Hjälteby - Tjörn

Re: Börjat pyssla med assambler och behöver lite tips.

Inlägg 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
Senast redigerad av cosmox 14 oktober 2009, 15:27:16, redigerad totalt 1 gång.
bos
Inlägg: 2314
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Re: Börjat pyssla med assambler och behöver lite tips.

Inlägg 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?
cosmox
EF Sponsor
Inlägg: 3856
Blev medlem: 6 januari 2004, 02:11:54
Ort: Hjälteby - Tjörn

Re: Börjat pyssla med assambler och behöver lite tips.

Inlägg 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?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Börjat pyssla med assambler och behöver lite tips.

Inlägg 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...
Senast redigerad av sodjan 14 oktober 2009, 14:59:50, redigerad totalt 1 gång.
bos
Inlägg: 2314
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Re: Börjat pyssla med assambler och behöver lite tips.

Inlägg 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.
cosmox
EF Sponsor
Inlägg: 3856
Blev medlem: 6 januari 2004, 02:11:54
Ort: Hjälteby - Tjörn

Re: Börjat pyssla med assambler och behöver lite tips.

Inlägg 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?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Börjat pyssla med assambler och behöver lite tips.

Inlägg 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 !
bos
Inlägg: 2314
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Re: Börjat pyssla med assambler och behöver lite tips.

Inlägg 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
cosmox
EF Sponsor
Inlägg: 3856
Blev medlem: 6 januari 2004, 02:11:54
Ort: Hjälteby - Tjörn

Re: Börjat pyssla med assambler och behöver lite tips.

Inlägg 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.
cosmox
EF Sponsor
Inlägg: 3856
Blev medlem: 6 januari 2004, 02:11:54
Ort: Hjälteby - Tjörn

Re: Börjat pyssla med assambler och behöver lite tips.

Inlägg av cosmox »

Tack bos, det hjälpte!
cosmox
EF Sponsor
Inlägg: 3856
Blev medlem: 6 januari 2004, 02:11:54
Ort: Hjälteby - Tjörn

Re: Börjat pyssla med assambler och behöver lite tips.

Inlägg av cosmox »

Jag ser nu också att du använder

Kod: Markera allt

MAIN    CODE    0x000
Istället för "org 0"

Finns det någon särskild fördel med det (förutom att det uppenbarligen ser tydligare ut)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Börjat pyssla med assambler och behöver lite tips.

Inlägg av sodjan »

Se :

http://www.jescab.se/Relocmode.html
http://www.jescab.se/abs_reloc.html

Se RES och mina exempelprogram för allokering av variabler.
bos
Inlägg: 2314
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Re: Börjat pyssla med assambler och behöver lite tips.

Inlägg 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å.
Användarvisningsbild
persika
EF Sponsor
Inlägg: 1541
Blev medlem: 31 juli 2006, 22:14:37
Ort: Österlen, Skåne

Re: Börjat pyssla med assambler och behöver lite tips.

Inlägg av persika »

Mitt inlägg om kommentarer var menat som ett tips, ingen sågning.
Skriv svar