Hi! Ich betreibe zwei Analogports am ATMEGA16, und kann diese erfolgreich einlesen. Nun hab ich einen 10-Bit großen Wert, den ich ja in zwei Register, oder in den SRAM oder sonst wo einlesen kann. Wie kann ich mit diesem Wert nun weiterarbeiten? In C gibts dafür ja Variablen, und einfache Rechnungen, aber in Assembler hänge ich gerade total fest. Ziel ist es einen Ausgang so lange auf "1" zu lassen bis der Wert z.B. 500 erreicht hat. Danke im voraus für eure Antworten
Hallo, dann nimm doch einfach "C". Geht viel besser.... C
Irgendwo gab es hier einen Thread "rechnen in Assembler" oder so ähnlich. Suchen hilft. Von ASM habe ich fast keine Ahnung (mir fehlen da ein paar Vokabeln...)
Du hast den 10-Bit Wert in zwei Registern stehen. Sagen wir, deine 500 steht in den Registern R10 und R11, wobei R10 das lowbyte enthält, und R11 das highbyte. Außerdem entspricht (dezimal)500 (hexadezimal)0x1F4. Du brauchst nun das lowbyte (also R10) nur mit 0xF4 zu vergleichen, sowie das highbyte mit 0x01. Wenn beide kleiner sind, lässt du den Ausgang auf 1, sonst setzt du ihn auf 0.
Hallo, ein Tutorial gibt es dort: http://www.avr-asm-tutorial.net/ ab Seite 43 steht viel über Zahlenumwandlung mit Beispielen, der Quellcode steht ab Seite 45. Mir hat das sehr geholfen, meinen Dank an Gerhard Schmidt. Es grüsst, Arno
In den ATMEL-Appnotes findet man auch allerhand Hinweise zur 16-Bit-Arithmetik. ...
@ C++ Ein Problem gegen ein anderes eintauschen, ist das der Vorschlag? @ Arno Dank angekommen und freundlich begrüsst ... mfg gerd
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.