Die Sache ist halt so gedacht:

Jede LED und damit jedes Bit an PortC hat seine eigene Regelmäßigkeit.
Bit2 z.B. so
2 x aus
2 x an
4 x aus
2 x an
8 x aus
Danach geht es wieder von vorne los. Dies sind 18 Zustände. Bit2_max wird daher auf 18 gesetzt. Im Bit2_array ist diese Sequenz abgelegt. Bit2 ist der Zeiger auf die aktuelle Position in diesem Array.
Zur Bestimmung des nächsten Zustands wird folgendes gemacht:
Incr Bit2 setzt den Zeiger auf die nächste Position
If Bit2 > Bit2_max Then Bit2 = 1 Falls der Zeiger über das letzte Element hinaus geht, fängt er wieder von vorne an, also bei 1.
Port_c.2 = Bit2_array(Bit2) setzt die Hilfsvariable für den PortC Bit 2 auf den Status, also da, was im Array an der Zeigerposition steht, 0 oder 1. Damit die LEDs nicht nacheinander angehen, habe ich Hilfsvariable benutzt.

Der Timer ermöglicht dir, die Waitms zu vermeiden. Wenn du noch irgendetwas anderes in deinem Programm machen möchtest, geht dies nun. Change_state wird also jede halbe Sekunde vom Timer auf 1 gesetzt. Im Mainloop wird auf 1 geprüft, dann auf 0 zurückgesetzt (damit er dies nicht direkt noch mal macht) und dann der neue Zustand der Bits berechnet.

Was meinst du mit:

wobei mir beim Bitarry die Bedeutung der Klammer nicht klar ist