Sida 1 av 2
GOTO + * /...?
Postat: 6 maj 2016, 19:11:39
av Erik M
Kod: Markera allt
INCF Counter
MOVW Counter
GOTO $ + 1 + W * 2
NOP ; går hit då Counter = 0
NOP
NOP ; går hit då Counter = 1
NOP
NOP ; går hit då Counter = 2
...
Funkar detta?
Att nyttja GOTO på detta vis.
MPLAB X protesterar inte, men det betyder ju inte, som vi alla vet, att koden gör vad det är tänkt....

Re: GOTO + * /...?
Postat: 6 maj 2016, 19:41:06
av TomasL
Nej det kan du inte.
Eftersom GOTO måste ha ett fast konstant värde som hårdkodas, så kan du inte använda beräkningar som argument
Möjligtvis om GOTO är ett assemblermackro, annars går det
Re: GOTO + * /...?
Postat: 6 maj 2016, 19:42:41
av lillahuset
Jag tvivlar starkt men du kan ju försöka.
Läs på om instruktionuppsättningen. Minimal ansträngning.
Re: GOTO + * /...?
Postat: 6 maj 2016, 19:46:50
av TomasL
Och i den står det att GOTO skall ha en konstant som argument, dvs värdet måste vara känt vid assembleringen.
Re: GOTO + * /...?
Postat: 6 maj 2016, 20:43:43
av lillahuset
Jag misstänkte det. Har inte PIC någon instruktion som hoppar med W som offset?
Re: GOTO + * /...?
Postat: 6 maj 2016, 20:54:20
av TomasL
Nej, det går inte på de minsta PICarna, inte utan att man modifierar PC/PCLATH och laddar den med adresserna.
Re: GOTO + * /...?
Postat: 6 maj 2016, 20:55:54
av Erik M
Då blir det alltså till att nyttja PCL.
Kod: Markera allt
main_loop ... ...
CALL Check_Table
... ...
... ...
... ...
GOTO main_loop ; PC « 0x200
ORG 0x200
Check_Table MOVLW 0x6 ; PC = 0x200
ADDWF Counter ; PC = 0x201
MOVFW Counter, W ; PC = 0x202
ADDLW 0x200 ; PC = 0x203
MOVWF PCL ; PC = 0x204
NOP ; PC = 0x205
counter_at_0x06 NOP ; PC = 0x206
NOP ; PC = 0x207
NOP ; PC = 0x208
NOP ; PC = 0x209
NOP ; PC = 0x20A
RETURN ; PC = 0x20B
counter_at_0x0C NOP ; PC = 0x20C
NOP ; PC = 0x20D
NOP ; PC = 0x20E
NOP ; PC = 0x20F
NOP ; PC = 0x210
RETURN ; PC = 0x211
counter_at_0x12 NOP ; PC = 0x212
NOP ; PC = 0x213
NOP ; PC = 0x214
NOP ; PC = 0x215
NOP ; PC = 0x216
RETURN ; PC = 0x217
counter_at_0x18 NOP ; PC = 0x218
NOP ; PC = 0x219
NOP ; PC = 0x21A
NOP ; PC = 0x21B
NOP ; PC = 0x21C
RETURN ; PC = 0x21D
...
Re: GOTO + * /...?
Postat: 6 maj 2016, 20:59:51
av Erik M
Eller använda CALLW.
...och där tog frågan slut.
...eller möjligen så RETLW (om man använder någon äldre PIC).

Re: GOTO + * /...?
Postat: 6 maj 2016, 21:22:44
av Erik M
"Nej, man gör såhär..."
Re: GOTO + * /...?
Postat: 6 maj 2016, 23:05:38
av sodjan
Allt detta finns i databladen. Det finns även separat app.note kring det.
Nyare PIC1x1xxx modeller har dessutom annan funktionalitet.
Re: GOTO + * /...?
Postat: 7 maj 2016, 10:41:03
av Erik M
Jag förstår att vissa inte begriper lärande och förmedling av kunskap. Liksom att vissa inte förstår skillnaden mellan kan och lär. Vanligen samma vissa. Ständigt samma visa.
Om ens ständiga bidrag är RTFM så bör man titta över sin attityd till andras kunskap och förmåga.
Re: GOTO + * /...?
Postat: 7 maj 2016, 11:06:05
av lillahuset
Erik M: Om man inte kan förmå sig att läsa datablad är man troligen inte intresserad av att lära sig.
Re: GOTO + * /...?
Postat: 7 maj 2016, 11:13:02
av SeniorLemuren
Erik M skrev:Jag förstår att vissa inte begriper lärande och förmedling av kunskap. Liksom att vissa inte förstår skillnaden mellan kan och lär. Vanligen samma vissa. Ständigt samma visa.
Om ens ständiga bidrag är RTFM så bör man titta över sin attityd till andras kunskap och förmåga.
Haha, följer alltid trådar skapade av E.M. med stort intresse. Brukar slå vad med mig själv om hur många inlägg det hinner bli innan E.M börjar kasta skit på andra för att han inte gillar svaren.

Re: GOTO + * /...?
Postat: 7 maj 2016, 12:21:44
av Erik M
Nej, man kan inte använda GOTO på det viset. GOTO-adressen är hårdkodad.
Man kan exempelvis göra såhär för att nå den sökta effekten:
Kod: Markera allt
ORG 0x0
main loop MOVLW 0x3 ; PC = d00
ADDWF Counter ; PC = d01
MOVF Counter, W ; PC = d02
ADDWF PCL ; PC = d03
NOP ; PC = d04
NOP ; PC = d05
GOTO main loop ; PC = d06 & Counter = d03
NOP ; PC = d07
NOP ; PC = d08
GOTO main loop ; PC = d09 & Counter = d06
NOP ; PC = d10
NOP ; PC = d11
GOTO main loop ; PC = d12 & Counter = d09
NOP ; PC = d13
NOP ; PC = d14
GOTO main loop ; PC = d15 & Counter = d12
NOP ; PC = d16
NOP ; PC = d17
GOTO main loop ; PC = d18 & Counter = d18
NOP ; PC = d19
NOP ; PC = d20
GOTO main loop ; PC = d21 & Counter = d21
NOP ; PC = d22
NOP ; PC = d23
GOTO main loop ; PC = d24 & Counter = d24
NOP ; PC = d25
NOP ; PC = d26
GOTO main loop ; PC = d27 & Counter = d27
NOP ; PC = d28
NOP ; PC = d29
GOTO main loop ; PC = d30 & Counter = d30
Om du gör på det viset kan du göra villkorade GOTO.
(Det är en intressant
tes du framför där SeniorLemuren. Som vanligt har den inte så mycket med verkligheten att göra. Ditt användande av "kasta skit på andra" följer samma mönster. Liksom användandet av "inte gillar svaren". Vi har alla förstått att detta är hur du är, men det är du - inte andra.)
lillahuset - Det handlar inte om "inte kan förmå sig att läsa datablad" (och det är fånigt försöka få det till något dylikt). Det handlar om att
lära sig hitta, tolka och förstå vad det står i databladen. Vilket är varför jag blir så jädra irriterad när folk kör med RTFM.
Att hänvisa till RTFM, och endast det, är enbart förolämpande och oförskämt.
Att hänvisa till var i databladet det man söker finns och visa hur man gör för att få till effekten -
det är hjälpsamt och ökar kunskaperna - särskilt om det åtföljs av varför vad fungerar eller ej.
TomasL - Tack för förklaringen att GOTO är hårdkodad. Det var hjälpsamt och informativt.
Att k används för både literal, constant och label gör att det inte blir omedelbart uppenbart.
Med hjälp hittar man att finna och se skillnaderna, utan hjälp blir det väldigt krångligt.
Tack för hjälpen.
Re: GOTO + * /...?
Postat: 7 maj 2016, 12:25:55
av Icecap
Jo, E.M. tar sig friheten att bli stött å andras vägnar en hel del.
Hade SEF varit en klass/utbildningscentral kunde jag fatta oviljan mot att kolla saker själv men detta är en samling av folk som ger och tar, vi har inte alla all tid i världen till att häcka och kolla upp frågor från andra när väl svaret finns lätt tillgängligt i t.ex. databladet.
Jag lärde barnen mycket tidigt (~3 år) att de inte kan få hjälp med något de inte gör - men gör de något och det går fel eller de frågar kan jag hjälpa i 3 evigheter om det behövs. Men tydligen är det en del som inte klarar sig utan curling-föräldrar.