PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Binär--> Ascii Converter Routine in asm?



Import-Script
22.04.2002, 11:19
Wer kann mir helfen? Ich habe da einen AVR und ein <BR>LCD Display. Text anzeigen funktioniert.Jetzt Ich m&ouml;chte eine signed Integer Zahl an einem diesem <BR>LCD Display anzeigen und br&auml;uchte dazu eine <BR>Routine die mir die se bin&auml;re zahl in Ascii Zeichen umwandelt. Die Routine sollte in Assembler geschrieben sein. Kann mir da jemand helfen? <BR>Karl

Import-Script
22.04.2002, 13:32
Ne Zahl zwischen 0 und 9 kannst du einfach mit 48 addieren fertig dann m&uuml;sstest du noch abfragen ob die Zahl gr&ouml;&szlig;er als 9 ist <BR>Ist aber meiner Meinung nach nicht allzu schwer zu coden <BR>Viel Erfolg

Import-Script
22.04.2002, 13:33
<A HREF="http://progshop.com/elektronik/diskussion/messages/2066/2068.html?1012055136" TARGET="_top">http://progshop.com/elektronik/diskussion/messages/2066/2068.html?1012055136</A>

Import-Script
22.04.2002, 16:50
Sorry, aber das hilft mir nicht viel weiter. Ich <BR>br&auml;uchte das ganze f&uuml;r ein signed 16Bit Integer <BR>und f&uuml;r einen AVR90S2333

Import-Script
22.04.2002, 19:05
Hi <BR> <BR>evtl. mal einen Blick in die Sourcen der printf&#40;&#41;-Routine des SDCC werfen. Ist dann aber auch 51er Code. Vieleicht hilft auch der Blick in die Sourcen des AVR-GCC. <BR> <BR>Matthias

Import-Script
23.04.2002, 10:26
Hallo Matthias, <BR> <BR>ich glaube, Karl will alles aufm Silbertablett geliefert haben, d.h. genau passend und ganz ohne nachdenken. <BR> <BR>Alle 3 Methoden sind ja in dem Link zu finden und ein bisschen Anpassungsarbeit &#40;unsigned-&#62;signed, 8051-&#62;AVR&#41; hilft doch nur zu verstehen, was man da macht. <BR> <BR>Hinter die Kulisssen von printf&#40;&#41; zu sehen, sollte aber auch die meisten Profis erschlagen, ob der Unmenge von Funktionen. <BR> <BR> <BR>Hallo Karl, <BR> <BR>ich bin mir sicher, mit Google findest Du auch das genau passende. <BR>Also entweder suchen oder nachdenken, ganz ohne Arbeit gehts nun mal nicht. <BR> <BR> <BR>Peter

Import-Script
24.04.2002, 15:59
Hi, <BR>Das ganze ist eigentlich ganz einfach: <BR>Zahl 16-Bit kann nur Werte bis 65535 annehmen. Die Decodierung geht dann nach Folgendem rezept: <BR> <BR>Pr&uuml;fen, ob Zahl &#62;= 10000; wenn nicht -&#62;Ende <BR>1000 abziehen und ein Merkregister inkrementieren <BR>Gehe zum Anfang der Schleife. <BR> <BR>merkregister mit 48 addieren und ins Display schreiben. Generiert wurde das ASCII-Zeichen der 10000 Stelle. <BR> <BR>Das ganze dann nochmal mit <BR>1000 <BR>100 <BR>10 <BR>durchf&uuml;hren. <BR>Anschlie&szlig;dend die Verbleibende Zahl &#40;Einerstelle&#41; ebenfalls mit 48 Addieren und ausgeben. <BR>Da die Ausgabe auf dem Display von links nach rechts geschrieben wird, erh&auml;lt man eine korrekte Darstellung. F&uuml;hrende Nullen werden bei dieser Methode mitausgageben: <BR>Aus 1234 wird auf dem Display 01234. <BR>Das sorgt f&uuml;r konstante Darstellungsbreite. Die F&uuml;hreden Nullen kann man entweder unterdr&uuml;cken oder durch Lehrzeichen ersetzen. <BR> <BR>Viel Spa&szlig; beim schreiben der Funktion <BR> <BR>Gru&szlig; <BR>Elmar

Import-Script
24.04.2002, 16:00
Ups, hab ich noch vergessen: das merkregister mu&szlig; selbstverst&auml;ndlich vor decodierung der einzelnen Stellen auf 0 gesetzt werden!

Import-Script
25.04.2002, 08:28
Hallo Elmar, <BR> <BR>ja, das ist z.B. die Subtraktionsmethode. <BR>Sie ist immer die schnellste, wenn der Mikrokontroller keinen passenden Divisionsbefehl hat. <BR> <BR>Ich verwende die auch, allerdings etwas modifiziert. Ich subtrahiere immer solange, bis das Carry-Flag gesetzt ist, d.h. einmal mehr. Das spart den extra Vergleich und ist dadurch fast doppelt so schnell. <BR> <BR> <BR>Peter

Import-Script
25.04.2002, 12:31
Hallo Peter, <BR>nat&uuml;rlich gibt es immer eine Methode, die schneller, besser und bunter ist, aber da es sich offensitlich um einen Anwender handelt, der mit dieser Art von verfahren nicht vertraut ist, ist das enfachste Verfahren besser geeignet weil lehrreich. Nat&uuml;rlich d&uuml;rfen verbesserungsvorschl&auml;ge nicht fehlen, f&uuml;r dijenigen gedacht, die schon etwas erfahrener sind. Aus diesem Grunde gebe ich grunds&auml;tzlich nur Theorie und Grundlagen an. Fertige Programme verschicke ich dann nur auf Anfrage. Selberdenken macht schlau! <BR> <BR>Die &#34;einmahl mehr subtraktion&#34; bringt auch keinen vorteil, da der CJNE - Befehl, mit keiner Sprungadresse angegeben das Carrybit passend setzt. Damit hat man dann die Abbruchbedingung und Wiederholung der Schleife durch J&#40;N&#41;C. Mu&szlig; man die zuvielgemachte subtraktion r&uuml;ckg&auml;ngig machen, so spart man nicht, sondern braucht sogar 1 Maschinentakt &#40;1&micro;s&#41; pro Durchgang mehr! <BR>Vielleicht denke ich aber auch in die falsche richtung... <BR> <BR>Gru&szlig; <BR>Elmar

Import-Script
25.04.2002, 13:11
Hallo Elmar, <BR> <BR>das sollte keine Kritik sein. Ich wollte nur erkl&auml;ren, warum meine Routine &#40;siehe obigen Link&#41; auch zur Subtraktionsmethode z&auml;hlt, obwohl der Vergleich fehlt. <BR> <BR>Die nachtr&auml;gliche Addition spare ich, indem ich abwechselnd bei einem Digit subtrahiere und beim n&auml;chsten addiere. <BR> <BR>Schlu&szlig;endlich subtrahiere ich ja garnicht, ich addiere dann nur eine negative Zahl. Das spart das L&ouml;schen des Carry-Bits. <BR> <BR> <BR>Peter

Import-Script
25.04.2002, 13:15
Mit den &#34;fertigen Programmen&#34; hast Du v&ouml;llig recht, es bringt nichts. <BR>Wenn man es nicht versteht, kommt meistens auch was falsches raus, weil man es falsch einsetzt. <BR> <BR> <BR>Peter

Import-Script
25.04.2002, 13:45
Hi <BR> <BR>ein fertiger Sourcecode bringt aber was wenn mal schnell was nachschauen will. Ich bin grade an nem FAT32-HDD-Treiber f&uuml;r den 80C320 dran und dann ist es nicht &uuml;bel wenn man mal schnell in einen bestehenden und funktionierenden Sourcecode kucken kann. Mann mu&szlig; allerdings verstehen was da gemacht wird. <BR> <BR>Matthias

Import-Script
25.04.2002, 19:28
Hi, <BR>das sollte nat&uuml;rlich keine Kritik sein. Wenn jemand es eilig hat, so sollte er auch darauf hinweisen. Dann kann er eine schnelle Hilfe bekommen und die Erkl&auml;rungen k&ouml;nnen dann auf Anfrage erfolgen. Hat man die Programmierung als Hobby, so geht es ja ums lernen und Spa&szlig; haben. Wer das nicht m&ouml;chte, kann schlie&szlig;lich fertigbaus&auml;tze kaufen. Dieses Diskussionsforum ist ein guter Weg, Wissen auszutauschen. Ich selber habe in diesem Forum schon viele Anregungen und Probleml&ouml;sungen gefunden, auch f&uuml;r Dinge, die ich <I>noch</I> nicht brauche. <BR> <BR>@Peter: <BR>Habe das mal mit einem Registerrechner durchprobiert. Das ganze spart nat&uuml;rlich etwas aufwand, aber den methematischen Beweis, da&szlig; es <B>immer</B> richtigrechnet bekomme ich nicht hin. Dann bleibt nur noch ausprobieren.... Da sieht man mal wieder: Da habe ich was tolles gelernt, was ich in Zukunft brauchen kann. Deine Methode ben&ouml;tigt tats&auml;chlich viel weniger ROM und ist um ca. 5% schneller. Alle achtung! <BR> <BR>Gru&szlig; <BR>Elmar

Import-Script
26.04.2002, 08:42
Hallo Elmar, <BR> <BR>es sind ja 4 v&ouml;llig voneinander unabh&auml;ngige Schleifen. <BR>D.h. um zu beweisen, da&szlig; es geht, brauchst Du nicht alle 65536 Zahlen durchzuprobieren. Es reicht, wenn man jedes Digit separat von 0 ... 9 testet. <BR> <BR>Die Routine ist von unten nach oben gewachsen. D.h. man kann sie bequem auf 24 oder 32 Bit aufbohren. <BR> <BR> <BR>Das mit den 5% glaube ich nicht ganz, da die Zeit ja werteabh&auml;gig ist. Deine Routine braucht bei 59990 am l&auml;ngsten, meine bei 60900. <BR> <BR> <BR>Peter

Import-Script
28.04.2002, 13:33
Hi, <BR>@Peter: <BR>Ich habe die Routine, wie ich sie mir vorgestellt habe auf einem MC getestet. Dazu wird die Zahl via Hyperterminal eingegeben. Beim Returnzeichen werden die Ziffern passend umgewandelt und gespeichert. Bevor die Routine aufgerufen wird wird ein Timer gestartet. Die Routine wandelt die Werte um und speichert sie in verschiedenen Registern. Dann wird der Timer gestoppt. Danach erfolgt die Ausgabe der Ergebnisse via RS232 mit umgewandelter Zahl und Zeitangabe. Im mittel hat sie 5% Geschwindigkeitsvorteil, die Ergebnisse waren bei allen 10 Zahlen richtig. Vielleicht habe ich auch irgendwo was falsch gemacht. Aber warscheinlich bei beiden Routinen gleich falsch. Da kann man eine Diplomarbeit draus machen, um rauszufinden, ob alles mit rechten Dingen zugeht. Das ganze habe ich in 5 Minuten auf die Beine gestellt, also nichts besonders seri&ouml;ses. <BR> <BR>Gru&szlig; <BR>Elmar