Hallo,

Voor school probeer ik een looplichtje te maken (als tussen fase) om te testen hoe de bitshift werkt.

Ik heb een PIC16F73 een handje vor weerstanden en led's.
Nu heb ik via de PIC tutorial het knipperlichtje van het politie project gemaakt.
Deze heb ik toen aangepast met een bit shift.

Nu werkt dit niet en ik weet niet waarom.
Ik heb het zelfs zo simpel gemaakt door eenmaal een bitshift commande (RRF) in de code te plaatsen maar er gebeurd helemaal niks (geen klipperend ledje, helemaal niks).

Ergens gaat het fout bij de RRF maar ik weet niet waarom.
Zonder de RRF werkt alles prima en knipperen 2 ledjes.
Welke fout maak ik?

code:

#include <p16f73.inc>
instelporta	EQU	85h
porta		EQU	05h
teller		EQU	40h
teller2 	EQU	41h

		ORG	00h		;beginadres kiezen

		BSF	03,5		;kies bank 1
		CLRF	instelporta	;alles pinnen poort A uitgang maken
		BCF	03,5		;kies bank 0

knipper 	MOVLW	03h		;laad 01h in W
		MOVWF	porta		;zet de waarde van W
					;in porta, oftewel zet de led aan
		RRF	porta,1

		MOVLW	0FFh		;laad 0FFh in W
		MOVWF	teller2
verder		MOVLW	0FFh
		MOVWF	teller
opnieuw 	DECFSZ	teller, 1
		GOTO	opnieuw
		DECFSZ	teller2, 1
		GOTO	verder

		MOVLW	00h		;laad 00h in W
		MOVWF	porta		;zet de waarde van W
					;in porta, oftwel doe de led uit

		MOVLW	0FFh		;1 cycle
		MOVWF	teller2 	;1 cycle
again		MOVLW	0FFh		;1 cycle
		MOVWF	teller		;1 cycle
again2		DECFSZ	teller, 1	;1 cycle
		GOTO	again2		;2 cycles
		DECFSZ	teller2, 1
		GOTO	again

		GOTO	knipper
		END

Je kunt beter een RAM-register gebruiken voor het schuiven van je bits, en dat na het schuiven naar de uitgangspoort kopiëren. Je hebt waarschijnlijk last van het Read-Modify-Write probleem, een bekend probleem bij zwaar belaste poorten op PICs.

Het zal wel schelen als je porta op digitaal zet... (is default analoog). Tevens doet een RRF een rotate-through-carry, dus of de led aan of uit gaat is afhankelijk van wat er toevallig in het carry-bit staat...

Verder de gebruikelijke opmerkingen: Gebruik de 'gewone' registernamen uit de include file, en niet bsf 03,5; dat begrijpt geen hond zonder het eerst op te moeten zoeken in de datasheet...
Porta is al gedefinieerd in de include file.

Nee, PORTA is gedefineerd in de include, porta niet. Al had ik het persoonlijk dan anders gedaan: porta EQU PORTA.

Je moet ook altijd case sensitivity uitzetten bij de compiler...

Thx, Door eerst de status van porta naar een ander stuk geheugen te schrijven werkte het wel (zoals fuzzbass zei).

Je kunt beter het probleem zelf oplossen, door de poort op digitaal te zetten...