Läsa data från register nr x
-
- Inlägg: 2436
- Blev medlem: 28 januari 2007, 18:45:40
- Ort: Kungsbacka
Läsa data från register nr x
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!
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!
-
- Inlägg: 2436
- Blev medlem: 28 januari 2007, 18:45:40
- Ort: Kungsbacka
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.
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.
-
- Inlägg: 2436
- Blev medlem: 28 januari 2007, 18:45:40
- Ort: Kungsbacka
-
- Inlägg: 2436
- Blev medlem: 28 januari 2007, 18:45:40
- Ort: Kungsbacka
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
* 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
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.
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.