GOTO + * /...?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Erik M
Inlägg: 1380
Blev medlem: 23 februari 2012, 18:34:39
Ort: Göteborg

GOTO + * /...?

Inlägg 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.... :vissla:
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46963
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: GOTO + * /...?

Inlägg 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
Användarvisningsbild
lillahuset
Gått bort
Inlägg: 13969
Blev medlem: 3 juli 2008, 08:13:14
Ort: Norrköping

Re: GOTO + * /...?

Inlägg av lillahuset »

Jag tvivlar starkt men du kan ju försöka.

Läs på om instruktionuppsättningen. Minimal ansträngning.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46963
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: GOTO + * /...?

Inlägg 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.
Användarvisningsbild
lillahuset
Gått bort
Inlägg: 13969
Blev medlem: 3 juli 2008, 08:13:14
Ort: Norrköping

Re: GOTO + * /...?

Inlägg av lillahuset »

Jag misstänkte det. Har inte PIC någon instruktion som hoppar med W som offset?
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46963
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: GOTO + * /...?

Inlägg av TomasL »

Nej, det går inte på de minsta PICarna, inte utan att man modifierar PC/PCLATH och laddar den med adresserna.
Senast redigerad av TomasL 6 maj 2016, 20:55:56, redigerad totalt 1 gång.
Erik M
Inlägg: 1380
Blev medlem: 23 februari 2012, 18:34:39
Ort: Göteborg

Re: GOTO + * /...?

Inlägg 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
		...			
Erik M
Inlägg: 1380
Blev medlem: 23 februari 2012, 18:34:39
Ort: Göteborg

Re: GOTO + * /...?

Inlägg av Erik M »

Eller använda CALLW.
...och där tog frågan slut. :mrgreen:

...eller möjligen så RETLW (om man använder någon äldre PIC). :humm:
Erik M
Inlägg: 1380
Blev medlem: 23 februari 2012, 18:34:39
Ort: Göteborg

Re: GOTO + * /...?

Inlägg av Erik M »

"Nej, man gör såhär..."
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: GOTO + * /...?

Inlägg av sodjan »

Allt detta finns i databladen. Det finns även separat app.note kring det.
Nyare PIC1x1xxx modeller har dessutom annan funktionalitet.
Erik M
Inlägg: 1380
Blev medlem: 23 februari 2012, 18:34:39
Ort: Göteborg

Re: GOTO + * /...?

Inlägg 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.
Användarvisningsbild
lillahuset
Gått bort
Inlägg: 13969
Blev medlem: 3 juli 2008, 08:13:14
Ort: Norrköping

Re: GOTO + * /...?

Inlägg 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.
Användarvisningsbild
SeniorLemuren
Inlägg: 8426
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: GOTO + * /...?

Inlägg 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. :D
Erik M
Inlägg: 1380
Blev medlem: 23 februari 2012, 18:34:39
Ort: Göteborg

Re: GOTO + * /...?

Inlägg 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.
Användarvisningsbild
Icecap
Inlägg: 26647
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: GOTO + * /...?

Inlägg 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.
Skriv svar