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