Mal einige Anmerkungen zum source. Wenn du schon Kommentierst, dann bitte richtig . Bei movwf TRISIO setzt du alle Pins auf Output und nicht input. Dass verwirrt, wenn man schnell den source überfliegt.

Also:

1. GPIO.3: ist gleichzeitig der MCLR-Pin und TRISIO.3 wird immer als 1 ausgelesen (also kann es NUR als ein Input oder MCLR-Pin genutzt werden).

2. Oscillator: Also, ich weiß nicht... ich muss zugeben, ich hab noch nie mit einem PIC dieser Bauart gearbeitet, aber, dass du den internen Oscillator aktivierst, aber NICHT angibts, welchen er benutzten soll (schätz mal, HFINTOSC) find ich mehr als seltsam. Könnte aber auch richtig sein, ka.

2. I/O-Pins: bei 500 KHz ist es erlich gesagt kein wunder, wenn du nichts siehst (vielleicht außer, du hast nen Speicher-Osci). Jeder bin wird mit einer Frequenz von 100 KHz (es sind 5 Befehe zwischen an und aus) angetrieben, viel zu schnell für das menschliche Auge. Wie gesagt, ohne nen Digital-Analyser oder nem Speicher-Osci wird das so nicht. Hau verzögerungen zwischen den Befehlen hinein, dann wird es gehen (4 nops = 2 goto = 1 call OHNE das return).

Ach, ja, das bcf und bsf setzten und löschen Bits, da wird an dem restlichen Inhalt des Registers nichts verändert .
MfG
Mobius

P.S.: statt D'0' in zwei Befehlen in den Trisio zu laden, kannst du in einem Befehl (clrf TRISIO) den Inhalt des Registers löschen. Ist schneller und verbraucht weniger Speicher

P.P.S.: Ach, ja nur zur Verdeutlichung, wie schnell 100KHz sind... Da sind 10µS zwischen einem High und eine Low auf dem besagten Pin. Ich glaube, du wirst net schnell genug sein, um den Tastkopf zwischen den einzelnen Pins hin und her zu bewegen