hab noch kosmetische Vorschläge.

die print cht(xy) gefallen mir nicht so recht, find printbin oder
die interruptbasierende Ringpuffervariante mit schreiben
ind UDR-Register schöner, aber das ist Geschmackssache.
Brintbin wär etwas übersichtlicher denk ich.
hinter dem letzten Print die 100ms brauchste eigentlich
nicht, du hast ja den loop dahinter.
ich verwende in Programmen gern die Alias Funktion,
da kann man schön bei jeder Aktion sehen was da
bewirkt werden soll, das macht die Programme schöner
lesbar fürs Debuggen im nachhinein.
Du belegst für mindestens 120ms nach dem senden des letzten
Steuerzeichens den Bus, das könnte etwas zu lang sein,
weil für n µC ist das ne Ewigkeit. versuch mal kürzere Zeiten,
bzw. mach die 100ms mal raus.
In der Mainloop versteh ich den Sinn der For - Next Schleife nicht
für die Debounce-Pinabfrage