Hallo zusammen,
vielleicht hat ja hier jemand eine Lösung um den Schönheitsfehler zu verbessern.
Bleibt leider immer noch der Schönheitsfehler mit dem Minuszeichen,
welches nicht direkt vor dem Wert steht. Außer natürlich es ist ein
hunderter Wert.
Ach, übrigens - auch wenn am Ende, bzw. überhaupt kein RET-Befehl steht,
ist diese Routine mit einem RCALL,- oder CALL-Befehl aufzurufen.
Seht evtl. auch hier nach :Code:;************************************************************************/ ;* */ ;* Display values on LCD */ ;* */ ;* Author: Peter Dannegger */ ;* danni@specs.de */ ;* mit Aenderungen f. Temperatursensor ( DS18B20 ) von Unbekannt */ ;************************************************************************/ ;************************************************************************/ ;------------------------------------------------------------------------- ; Anzeige ohne fuehrende Nullen ;------------------------------------------------------------------------- ;input: a = value 0..255 ;used: a, b, c ; _dec_out: tst a ;Negativer Wert ? brpl _positiv ;Nein -> springen mov c,a ;Wert sichern ldi a,$10 ;Cursor einen nach links um bei Minus Anzeige.. rcall _lcd_cmd ;..noch formatiert zu bleiben ldi a,'-' rcall _dou4 ;Zeichen ausgeben mov a,c ;gesicherten Wert zurueck holen neg a ;In positives Aquivalent umwandeln _positiv: mov c, a ;Wert f. weiterverarbeitung kopieren subi c, 100 ;Hunderter ermitteln brcc _hunderter ;if > = 100, die hunderter Stelle auswerten.. ldi a,' ' ;..ansonsten die hunderter Stelle durch Space ersetzen.. clt ;Keine Hunderter vorhanden rjmp _dou2 ;..und dies ausgeben _hunderter: set ;Hunderter vorhanden mov c, a ;Wert wieder neu laden und.. ldi a, '0' - 1 ;..Hunderter zaehlen.. _dou1: inc a ;..wobei die Ziffer in ASCII umgewandelt wird subi c, 100 ;100 subtrahieren brcc _dou1 ;< 100 -> Nein -> weiter zaehlen _dou2: rcall _dou4 ;output hundrets _zehner: ldi a, '0' +10 ;Zehnerstelle in ASCII umwandeln.. _dou3: dec a ;..und ASCII rueckwaerts von '9' subi c, -10 ;Zehner x +10 brcs _dou3 ;Zehner gezaehlt ? NEIN -> weiter zaehlen rcall _dou5 ;output tens subi c,-'0' ;Einerstelle in ASCII uberfuehren mov a, c ;output ones _dou4: rjmp _lcd_data ;ASCII-Zeichen ausgeben _dou5: cpi a, '0' ;Ist die Zehnerziffer eine Null ?.. brne _dou4 ;..Nein -> Zehnerziffer ausgeben.. brts _dou4 ;Waren vorher Hunderter vorhanden ? Ja -> Null ausgeben ldi a,' ' ;..Nein -> Null durch Space ersetzen und.. rjmp _dou4 ;..jetzt ausgeben ;------------------------------------------------------------------------------
https://www.mikrocontroller.net/topic/6516#6909211
Beziehungsweise überhaupt beim Ursprung :
https://www.mikrocontroller.net/topic/6516#41903
Bernd_Stein







Zitieren


Lesezeichen