Hjälp med att ta mig ur en loop

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Spket
Inlägg: 81
Blev medlem: 22 mars 2009, 02:19:50

Hjälp med att ta mig ur en loop

Inlägg av Spket »

Hej!
Skulle behöva ha hjälp med att ta mig ur denna loop när min application har räknat färdigt. Det jag har är 8st lysdioder och jag räknar upp binärt dvs, 00000000, 00000001, 00000010, 00000011 osv. Men hur tar jag mig ur denna loop när målet 11111111 är färdigt?

Försökte göra så här tidigare

Kod: Markera allt

Lightsup
	movf	Display,w
	movwf	PORTD
	incf	Display,f
	call	Delay2
	btfss	Display,7
	goto	Lightsup
men då räknade den bara upp till 01111111 å så fortsatte den vidare med programmet.

Tacksam för hjälp
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Hjälp med att ta mig ur en loop

Inlägg av sodjan »

Kanske :

Kod: Markera allt

Lightsup
   movf   Display,w
   movwf   PORTD
   call   Delay2
   incf   Display,f
   btfss   STATUS, Z
   goto   Lightsup
?
Spket
Inlägg: 81
Blev medlem: 22 mars 2009, 02:19:50

Re: Hjälp med att ta mig ur en loop

Inlägg av Spket »

Funka utmärkt! Tackar
thomasa88
Inlägg: 122
Blev medlem: 9 februari 2008, 22:01:31

Re: Hjälp med att ta mig ur en loop

Inlägg av thomasa88 »

Varför inte: :)

Kod: Markera allt

..
incfsz Display,f
goto   Lightsup
..
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Hjälp med att ta mig ur en loop

Inlägg av jesse »

tja.... inte så konstigt om man vet varför man skriver btfss STATUS, Z
När sätts Z-flaggan?

Flaggor är ofta väldigt kortlivade och om man gör ett call-anrop som innehåller en massa okända instruktioner så kommer den (alltså Z flaggan i det här fallet) garanterat att vara ändrad och därmed förlorar man syftet med btfss. Nu vet inte jag vad just den instruktionen gör (har aldrig programmerat PIC), men jag antar att den gör olika saker beroende på hur Z flaggan är ställd. Detta beror i sin tur på den operation man gjorde senast som påverkar Z.

Google säger: Depending on a bit status in 'f' register that is being tested, instructions skip or don't skip over the next program instruction.

Det var väl det jag misstänkte.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Hjälp med att ta mig ur en loop

Inlägg av sodjan »

> Varför inte:

Ja, varför inte ? Två flugor i en smäll... :-)

incfsz = incf + btfss (på Z-flaggan), så klart...
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Hjälp med att ta mig ur en loop

Inlägg av jesse »

äsch... jag blandade ihop thomas88:s inlägg med koden i det första (läste lite slarvigt).... vad jag svarade på var förstås varför inte den första koden fungerade... ursäkta... lite stressad just nu.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Hjälp med att ta mig ur en loop

Inlägg av sodjan »

> vad jag svarade på var förstås varför inte den första koden fungerade...

Och det var inte heller rätt... :-) Det har inte med Z flaggan att göra
eftersom testen var på bit 7 i ett vanlig register ("Display"). Och att
koden fungerar så som beskrevs i första-inlägget är ju ganska klart.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Hjälp med att ta mig ur en loop

Inlägg av jesse »

Ska nog hålla mig till AVR trådarna i fortsättningen :vissla:
Skriv svar