Läsa data från register nr x

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
victor_passe
Inlägg: 2436
Blev medlem: 28 januari 2007, 18:45:40
Ort: Kungsbacka

Läsa data från register nr x

Inlägg av victor_passe »

Hej, jag har 2 variabler, pointer och data kan vi kalla dem.

Om jag först kör denna kod:
movlw 0xff
movwf 0x20
Om pointer innehåller 0x20 så vill jag att data ska få värdet 0xff.

Finns det något fiffigt sätt att göra detta på?
Kan det vara detta som är "indirekt adressering"?
Om det underlättar något behöver jag bara komma åt register >0x20 alltså.

Tack på förhand!
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Du kanske ska förklara lite om vilken processor du tänker på?

Jag ser av mnemonics att det är PIC och där har du INDF till att indexera, kolla i databladet om det register.
johano
Inlägg: 1943
Blev medlem: 22 januari 2008, 10:07:45
Ort: Stockholm

Inlägg av johano »

Ehm, skulle väl underlätta något om du skrev vilken processor(familj) du använder...

/johan
victor_passe
Inlägg: 2436
Blev medlem: 28 januari 2007, 18:45:40
Ort: Kungsbacka

Inlägg av victor_passe »

pic menar jag.

Och jag googlade lite och hittade svaret:
Ja, indf och fsr är exakt jag jag letar efter

Om någon moderator vill så får tråden gärna tas bort.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Varför i jösse namn ska den tas bort !?
Det var väl en helt rellevant frågeställning.

Man kan tillägga att om det är PIC *16* så finns det
*1* indexregister. Om det är PIC *18* däremot, så
finns det *3* indexregister vilket underlättar mycket
i vissa lägen. En av de större skillnanderna mellan
PIC16 och PIC18, för övrigt.
victor_passe
Inlägg: 2436
Blev medlem: 28 januari 2007, 18:45:40
Ort: Kungsbacka

Inlägg av victor_passe »

Hur underlättar det?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Tänk: kopiera data mellan två buffrar.
victor_passe
Inlägg: 2436
Blev medlem: 28 januari 2007, 18:45:40
Ort: Kungsbacka

Inlägg av victor_passe »

Okej. Men man kan ju bara använda en temp variabel. Men det har säkert sina fördelar.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

OK, du får nog fundera lite till... :-)
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

victor_passe: lite hjälp med funderingen:
* 1 st indexeringspekare:
1: Ställ in från-adress i temp-register#1
2: Ställ in till-adress i temp-register#2
3: Ställ antal bytes i temp-register#3
4: W = temp-register#1
5: FRS = W
6: W = INDF
7: temp-register#4 = W
8: W = temp-register#2
9: FSR = W
10: W = temp-register#4
11: INDF = W
12: inkrement temp-register#1
13: inkrement temp-register#2
14: Dekrement temp-register#3
15: Om temp-register#3 > 0 gå till punkt 4

Med 2 eller fler indexpekare:
1: Ställ in från-adress i pekare#1
2: Ställ in till-adress i pekare#2
3: Ställ antal bytes i temp-register#1
4: W = pekare#1
7: pekare#2 = W
8: inkrement pekare#1
9: inkrement pekare#2
10: Dekrement temp-register#1
11: Om temp-register#3 > 0 gå till punkt 4
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7487
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Inlägg av Marta »

Det är till och med ännu enklare i PIC18, med reservtion för at det finns variation mellan olika modeller.

Varje indexpekare har vardera tre register för data-acess. Ett som bara läser/skriver, ett som inkrementerar pekaren efteråt och ett som dekrementerar den.

Med 2 eller fler indexpekare och autoinkrement:
1: Ställ in från-adress i pekare#1
2: Ställ in till-adress i pekare#2
3: Ställ antal bytes i temp-register#1
4: W = (pekare#1-autoinkrement)
7: (pekare#2-autoinkrement) = W
10: Dekrement temp-register#1
11: Om temp-register#3 > 0 gå till punkt 4

Därmed blir det endast 4 rader som kommer att exekveras i loopen.
Skriv svar