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.
Lesezeichen