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.... :vissla:

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. :mrgreen:

...eller möjligen så RETLW (om man använder någon äldre PIC). :humm:

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. :D

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.