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.
>Kann ich so einen hohen Wert überhaupt in ein Register laden?
nein, dazu musst du 3 register nehmen...
für sonne lange zeit würde ich aber dein timer nehmen... mit nem hohen
prescaler sollte das gut gehen.
Hallo, schau mal bei der Codesammlung, da ist ein Beispiel für einen Timer der alle 50ms ein Register dekrementiert. Wenn du den Code ein wenig anpasst, sollte sich dein Problem damit lösen lassen. Gruß, Axel
Habs jetzt doch mit drei Registern, die hochgezählt werden gelöst, mit dem Timer hab ichs net hingekriegt! Andi.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.