Hallo zusammen, ich möchte einer 16 Bit Zahl immer bis dezimal 9999 hochzählen lassen (für eine Zeitmessung mit AVR 4433). Gibt es eine kürzere Möglichkeit wie in meinen Beispielprogramm? Danke im Voraus. Norbert
Das erhöhen get so einfacher: add ZahlLow, eins adc ZahlHigh, null (natürlich müssen vorher noch ein Register mit 0 und 1 geladen werden). Am Ende dann überprüfen ob das Ergebnis 10000 beträgt. fertig.
Hallo, Das Addieren in 16-Bit Breite geht mit nur einem Befehl, wenn man eines der Doppelregister X, Y, oder Z verwendet. z.B. adiw r24,1 erhöht r25:r24 um eins, r24 ist dabei das untere Byte. Carry wird intern behandelt. Der Befehl benötigt zwei Taktzyklen. SBIW ist der entsprechende Befehl zur Subtraktion. Gruß
Das mit ADIW scheint noch besser zu sein. Habe das Programm gleich geändert, hoffe das der 16-Bit Compare funktioniert. Die Anweisung hab ich von Atmel (http://www.atmel.com/dyn/resources/prod_documents/DOC0937.PDF). Kann ihn aber gedanklich nicht ganz nachvollziehen.
Warum zählst du nicht rückwärts? Dann brauchst du nur 0 auszuwerten.
Hier das ganze stark vereinfacht mit rückwärts zählen: .def Time1L = r24 .def Time1H = r25 HAUPT: ldi Time1L,low(10000) ;Counter auf 10000 (low-byte in r24) setzen ldi Time1H,high(10000) ;Counter auf 10000 (high-byte in r25) setzen ZAEHL: sbiw Time1L,1 ;16-Bit Counter um 1 verringern brne ZAEHL ;und solange widerholen solange <> 0 OVER: rjmp HAUPT ;Das ganze von vorne Mach es Dir doch einfacher in dem Du die Anweisungen low und high verwendest dann brauchst Du das nicht immer auszurechnen. Gruß Andi
Mist, wegen der Textformatierung sieht das jetzt ein bißchen unübersichtlich aus. Oben noch mal als Text-File. Gruß Andi
Danke Andi und natürlich alle anderen die geholfen haben, die Version werde verwenden. Gruß Norbert
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.