Sida 1 av 1

Hjälp med att ta mig ur en loop

Postat: 18 juni 2009, 21:38:20
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

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

Postat: 18 juni 2009, 22:18:30
av sodjan
Kanske :

Kod: Markera allt

Lightsup
   movf   Display,w
   movwf   PORTD
   call   Delay2
   incf   Display,f
   btfss   STATUS, Z
   goto   Lightsup
?

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

Postat: 19 juni 2009, 09:25:16
av Spket
Funka utmärkt! Tackar

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

Postat: 10 augusti 2009, 16:15:28
av thomasa88
Varför inte: :)

Kod: Markera allt

..
incfsz Display,f
goto   Lightsup
..

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

Postat: 10 augusti 2009, 20:04:22
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.

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

Postat: 10 augusti 2009, 20:44:06
av sodjan
> Varför inte:

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

incfsz = incf + btfss (på Z-flaggan), så klart...

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

Postat: 10 augusti 2009, 21:35:27
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.

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

Postat: 10 augusti 2009, 22:00:09
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.

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

Postat: 12 augusti 2009, 10:23:31
av jesse
Ska nog hålla mig till AVR trådarna i fortsättningen :vissla: