For loop i ASM?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Nickeh
Inlägg: 82
Blev medlem: 9 augusti 2006, 00:41:37
Ort: Linköping
Kontakt:

For loop i ASM?

Inlägg av Nickeh »

Sitter och försöker få igång en slags for loop på min PIC16F628A

Tanken är att jag ska skriva ut varje biti en byte på min LCD
Lätt tänkte jag och skrev ihop följande

Kod: Markera allt

DUMP_BIN
	bsf	PORTA,LCD_RS		;Prepare for char out
	movwf	t1
	movlw	7
	movwf	t0		; Put counter in temporary file
L0	movlw	b'0011'		;first part of byte (numbers all begin with 0011
	call	LCDSENDNIB	;Send first nib
	movlw	b'0000'		;Assume zero
	btfsc	t1,t0		;if not set to one
		movlw b'0001'		
	call	LCDSENDNIB
	decfsz	t0
		goto L0
	call	DELAY500
	return
Så jag använder alltså t0 som index och den minskar med 1 per loop. Problemet är att btfsc t1,t0 alltid ger resultat därav får jag bara en massa ettor....

Testat att byta ut t0 mot fasta värden och då fungerar btfsc som det skall och hoppar över om biten är 0.

Har jag missat något här? Hur skall jag göra för att ha en variabel som visar vilken bit jag är intresserad utav?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Hur skall jag göra för att ha en variabel som visar vilken bit jag är intresserad utav?

Det går inte.
Vad i beskrivningen av BTFSC/BTFSS fick dig att tro att du kan det ?

Tips, skifta ut byte'en genom carry och gör BTFSC STATUS, C istället...
Nickeh
Inlägg: 82
Blev medlem: 9 augusti 2006, 00:41:37
Ort: Linköping
Kontakt:

Inlägg av Nickeh »

Well, det är lätt att förutsätta då man skrivit i C tidigare. Och när man väl fått för sig att det borde fungera så brukar databladet kunna vara lätt att misstolka. Men då vet jag iaf vad som gäller. Ska kolla över det hela och skriva om det.
Tack för tipset
bearing
Inlägg: 11677
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Inlägg av bearing »

Raden "btfsc t1,t0" betyder: "kontrollera bit <adressen för t0> i register t1, skippa om 0"

Jag föreslår att du roterar t1 åt vänster och kollar om Carry är 1 istället.

E: sent ute...
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Om du kollar beskrivningen av BTFSC (sidan 118) så ser du att
parametern "b" (bit-numret som ska testas) kodas in som tre
bitar i instruktionen (där det står "bb b") vid "assembly-time".
Alltså kan de inte ändras *efter* assembleringen (vid "run-time").

För övrigt gäller samma sak BSF/BCF, vilket ofta kan upplevas som lite "synd".
Nickeh
Inlägg: 82
Blev medlem: 9 augusti 2006, 00:41:37
Ort: Linköping
Kontakt:

Inlägg av Nickeh »

Nu när jag läser och vet vad som gäller känns det solklart! Fick ordning på det hela nu iaf. tack för snabbt svar!

Joo, det känns som att det är just synd men det handlar ju mest bara om att man är van att göra på ett visst sätt från andra språk och när man sen ska skriva i lågnivåspråk får man helt plötligt tänka om.
Men man får se det som en utmaning helt enkelt.
Skriv svar