Dom M. schrieb:
> Jetzt ist es aber so, dass ich erst alle X-Werte mit Taster 1
> durchdrücken muss, bevor ich mit Taster 2 die Y-Werte ändern kann.
Logisch.
Du hast ja auch überall lauter
1 | while((Wartepin & (1<<Wartebit))); //warte auf Taste1
|
drinnen.
> Bin leider gerade etwas ratlos, in der Schule konnte mir auch niemand
> helfen und das Internet hat mich auch nicht weiter gebracht.
Nicht?
Hier die Quintessenz.
Du musst deine Denkweise umstellen.
Deine Denkweise darf nicht sein
1 | Ich warte darauf dass etwas passiert
|
sondern deine Denkweise muss sein
1 | while( 1 ) {
|
2 |
|
3 | wenn taste 1 gedrückt wurde, dann
|
4 | mache etwas
|
5 |
|
6 | wenn taste 2 gedrückt wurde, dann
|
7 | mache was anderes
|
8 |
|
9 | wenn taste 3 gedrückt wurde, dann
|
10 | ....
|
11 | }
|
mit anderen Worten. Du prüfst reihum und laufend ob irgendein Ereignis
eingetreten ist, auf das du reagieren musst. Bei dir zum Beispiel ist es
dann eben das eine Taste gedrückt wurde und die Reaktion darauf ist, ein
OCR Register zu erhöhen oder erniedrigen.
Man nennt das 'Event getriebenes Programmieren'. Das Auftreten eines
Ereignisses löst eine Reaktion im Programm aus. Dein µC Programm prüft
reihum viele tausend male pro Sekunde, ob irgendeines der möglichen
Ereignisse eingetreten ist. Und weil dein µC das viele tausend male pro
Sekunde kann, kommt es dir als langsamen Mensch so vor, als ob die
Reaktion sofort erfolgt wäre. Aber: die Ereignisse können bunt gemischt
auftretem und trotzdem wird jedesmal der entsprechende Zweig in deinem
Programm ausgeführt. Du als Programmierer musst dann eben dafür sorgen,
dass diese Reaktionen auch korrekt sind, wenn es da Abhängigkeiten
zwischen den Reaktionen gibt.