Das könnte des Rätsels Lösung sein:
Code:
	movf	TRISC,0
	iorlw	0x0C
	movwf	TRISC	; Hier ist der Befehl zum Umschalten ...
	movf	PORTC,0	; ... der aber hier noch nicht fertig ausgeführt ist !
	andlw	0x0C
	btfss	_Z
	goto	@Out	; Hier springst Du zur Routine ...
	call	@Out	; ... und hier ruft Du sie als Unterprogramm auf ?
			; ... Was steht am Ende der Routine: return ?


	movwf	TRISC	; So sollte es funktionieren: Befehl zum Umschalten
	nop		; Hier kann die Richtung umgeschaltet werden
	movf	PORTC,0	; Hier ist die Richtung umgeschaltet
3 mal oder 8 mal oder wieviel mal auch immer ein NOP reinzusetzen, kann es ja nicht sein. Es handelt sich um einen µC, der absolut logisch arbeitet und niemals Alzheimer bekommt

PS: Beim 16F87x z.B. sind die TRIS-Register in Bank 1. Da können die beiden Befehle für TRIS und PORT nicht direkt hintereinander stehen, dazwischen muß erst auf die Bank umgeschaltet werden. Bis dahin ist die Richtung umgeschaltet.