Ja, ne, beides. Auch normale LEDs soll man wie Fotodioden verwenden können. Habe ich nur noch nie versucht.
Also, das Grundgerüst steht ja bereits, du hast die On* Unterprogramme.
Diese kann man jetzt direkt mit Interrupts verknüpfen.
Also: Jetzt läuft deine Main ja ständig durch und fragt ab ob eine Bedienung erfüllt ist. Wir wollen es aber jetzt so haben dass die Main (nahezu) gar nichts mehr macht und nur noch die Unterroutinen vom Controller selbst gestartet werden, bei Bedarf eben.
Prinzipiell sind dazu 4 Schritte nötig:
1.: Die Routine für den Interrupt erstellen - hast du schon.
2.: Bascom sagen welche Routine den Interrupt behandeln soll
3.: Die jeweiligen Interrupts scharf stellen (Enable)
4.: Interrupts generell aktivieren.
2 - 4 gehören dementsprechend in den Init Teil deiner Anwendung, vorzugsweise am Ende, also direkt vor die Main Loop.
Für den Uart wäre es:
On Urxc OnUartRx
Enable Urxc
Für den Timer1 wäre es:
On Timer1 OnTimer1Overflow
Enable Timer1
Für den Taster (angeschlossen an INT0):
On INT0 OnKey1Pressed
Enable INT0
Und wegen Punkt 4:
Enable Interrupts
In der Main stehen ja jetzt nur noch die 3 If's drin. Die sind dann komplett unnötig. Die Teilprogramme führt der Controller bei Bedarf selbst aus.
Also: Löschen oder (besser) erst mal auskommentieren.
So läuft es vom Prinzip ab. Da Bascom bei mir nicht mehr will ist das jetzt ungetestet, aber es geht ja auch eher um das Prinzip.
Sollte aber eigentlich so gehen.
Falls du möchtest kannst du ja mal den Stromverbrauch vom Controller messen wo er jetzt noch mit Polling arbeitet. Und später, wenn es läuft mit Interrupts, kümmern wir uns um Sleep. Danach kannste noch mal messen
(Strom messen natürlich ohne dass die LEDs angeschlossen sind)