Genau so ist es: Alles zwischen "If...then" und "end if" wird nur ausgeführt, wenn die Bedingung erfüllt ist, und übersprungen, wenn sie es nicht ist.

Ein paar Fehlerchen sind mir noch aufgefallen:

1. Die Hauptschleife kennzeichnet man am besten mit "Do" und "Loop" anstatt mit Main und Goto main.

2. Diese Zeilen:
Code:
Portc.3 = Pind.0                                            'Richtung X
Portc.0 = Pind.2                                            'Richtung Y
Portd.6 = Pind.4                                            'Richtung Z

Portd.7 = Pind.1                                            'Takt X
Portc.1 = Pind.3                                            'Takt Y
Portc.4 = Pind.5                                            'Takt Z
müssen unbedingt in die Hauptschleife - sonst wird der Eingangs-Status ja nur ein einziges mal auf die Ausgänge weitergegeben, und alle Änderungen an den Eingängen würden ins leere laufen.

3. Interrupt-Routinen sollten eigentlich immer hinter dem "Loop" stehen

4. Damit der Timer-Überlauf-Interrupt ausgeführt werden kann, musst Du

a. definieren, wie die Timer-ISR heißt
b. den speziellen Timer-Interrupt freigeben, und
c. die Interrupts allgemein freigeben.

Und das ganze am Besten VOR der Do-Loop-Schleife. In Code sähe das etwa so aus:

Code:
Config Timer1 = timer, Prescaler = 8
On Timer1 Timer1_ISR          'so heißt die Timer1-ISR. Kann auch jeder andere Name sein!
Enable Timer1                'aktiviert NICHT den Timer, sondern den Timer-Interrupt!!
Enable Interrupts       'aktiviert Interrupts allgemein

Das ganze Schritt für Schritt zu programmieren ist sicher eine gute Idee - erstmal bei fest stehenden Enables die Eingangssignale auf den Ausgängen auszugeben, und dann Funktion für Funktion dazuprogrammieren.

Gutes Gelingen - bin gespannt auf feedback!

Gruß,

Daniel