Informiere Dich mal über Bits und Bytes sowie Bitmanipulation. Dann
schau Dir mal im Datenblatt des Tiny13 die I/O-Register portb, ddrb und
pinb an. Da wirst Du sehen, dass Du die Portpins auch als Gruppe
ansprechen kannst. Auch bei der Initialisierung kannst Du auf das
Config-Geraffel verzichten und einfach schreiben:
DDRB=&b00001111 'PB0...PB3 als Ausgang, PB4...PB7 als Eingang
PORTB=&b00010000 'mit PB4 den internen PullUp einschalten
Beim Zuweisen der Bitmuster wird dann immer PB4 mit gesetzt, damit der
PullUp aktiv bleibt.
Um auf einen Tastendruck nur einmal zu reagieren, solltest Du den Wert
des letzten Tastendrucks speichern und die neue Tastenabfrage auf
Änderung (Unterschied zur letzten Abfrage) testen. Die Reaktion erfolgt
dann auf die Änderung von unbetätigt zu betätigt, also von 1 zu 0 im
Bit4 von PINB. Wenn es zuverlässig werden soll, dann muss da noch eine
Entprellung rein, denn mechanische Schalter und Taster prellen
nunmal.
Ich hänge Dir mal ein paar Beispiele von Rundumleuchten
(Endlos-Lauflichter) an. Da gibt es zwar keine Tastenabfrage, aber Du
siehst, wie man die Portzugriffe effizienter machen kann.
...