Wieso machst du ds eigentlich mit einer Interrupt routine?

Klar, Timer sind besser, bei delays rechnet die CPU andauernd, bei Timern nicht da dies ein externes Modul am die ist und unabhängig von der cpu läuft. Am besten eine Timer machen, der alle 100ms einen Interrupt auslöst, diese Interrupts mit einer static variable mitzählen und je nach Zählerstand handeln (nach 10x100ms => 1s Rot aus, Gelb ein; nach 16x100ms => 1.6s Gelb aus, usw), wenn man dann einmal durch ist mit dem Ampelprogramm Variable zurücksetzten und das Spiel beginnt von neuem