Gast
#3325
Hi, komm einfach nicht drauf, vielleicht hat jemand einen Tip für mich... Möchte z.B. 10 sek. lang eine Port-Abfrage-Schleife durchlaufen lassen und dann - wenn sich an den Ports nix getan hat - zum Ende wechseln. Sollte in den 10 sek. der Portabfrage ein Bit gesetzt (Taster) sein, dann wird kurz was ausgeführt und wieder an den Anfang der 10-sek.-Port-Abfrage-Schleife gesprungen, welche dann erneut 10 sek. lang läuft. Funktioniert irgendwie nicht, wenn ich ein Register mit einem sehr hohen Wert lade um diesen jeden Schleifendurchlauf zu decrementieren und vergleiche bis ich null habe und zum Ende springen kann. Springt irgendwie immer gleich zum Ende. Bei 4Mhz dauert 1 Schleifendurchlauf ca. 1,75 µsek. (stimmts??) Macht dann für 10 sekunden ca. 5714286 Durchläufe. Kann ich so einen hohen Wert überhaupt in ein Register laden? Anfang: ldi temp,(sehr hoher Wert) ;bei 4Mhz Wert für 10s. lang Schleife ldi temp1,0 ;eine Null zum Vergleichen 10-sek-Port-Abfrage-Schleife: sbis PINB,2 ;wenn Bit is set, rjmp kurzwasanderesausführen1 ;dann hierhin u. dann zum Anfang sbis PINB,3 rjmp kurzwasanderesausführen2 sbis PINB,4 rjmp kurzwasanderesausführen3 dec temp ;(sehr hohen Wert) decrementieren cpse temp, temp1 ;vergl. u. springe zu Ende wenn 0 rjmp 10-sek-Port-Abfrage-Schleife ;wenn nicht 0 dann wieder von vorn rjmp Ende Merci, Andi.