Sida 1 av 1
Läsa data från register nr x
Postat: 13 augusti 2008, 21:40:27
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!
Postat: 13 augusti 2008, 21:44:56
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.
Postat: 13 augusti 2008, 21:45:51
av johano
Ehm, skulle väl underlätta något om du skrev vilken processor(familj) du använder...
/johan
Postat: 13 augusti 2008, 21:53:53
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.
Postat: 13 augusti 2008, 22:14:53
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.
Postat: 13 augusti 2008, 22:49:54
av victor_passe
Hur underlättar det?
Postat: 13 augusti 2008, 23:11:15
av sodjan
Tänk: kopiera data mellan två buffrar.
Postat: 13 augusti 2008, 23:38:40
av victor_passe
Okej. Men man kan ju bara använda en temp variabel. Men det har säkert sina fördelar.
Postat: 14 augusti 2008, 00:04:57
av sodjan
OK, du får nog fundera lite till...

Postat: 14 augusti 2008, 09:23:21
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
Postat: 14 augusti 2008, 17:35:12
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.