- Modernes Energiemessgeraet    Werbung      
Ergebnis 1 bis 10 von 11

Thema: AVR8-Assembler lernen

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter-Spezialist Avatar von Bernd_Stein
    Registriert seit
    19.09.2008
    Ort
    Deutschland : Nordrhein-Westfalen ( NRW )
    Alter
    55
    Beiträge
    407
    Die Rüge ist schon gerechtfertigt, denn den uC-Artikel hatte ich ja selbst dort vorher verlinkt und daraufhin die Vermutung, dass das S-Flag nur die Befehle
    BRGE & BRLT bedient und ansonsten uninteressant ist angestellt, aber den Verweis auf uC.net hat man ja nicht richtig durchgelesen - wenn überhaupt.

    https://www.mikrocontroller.net/topic/295439#6853179

    Hier gabs dann doch noch eine befriedigende Antwort :

    https://www.mikrocontroller.net/topic/295439#6879714


    Bernd_Stein
    CRS Robotics A255, TRONXY X3A, TinkerCAD, c´t-Lab, ProfiLab Expert, AVR8 Assembler

  2. #2
    Erfahrener Benutzer Roboter-Spezialist Avatar von Bernd_Stein
    Registriert seit
    19.09.2008
    Ort
    Deutschland : Nordrhein-Westfalen ( NRW )
    Alter
    55
    Beiträge
    407
    Hallo zusammen,

    vielleicht hat ja hier jemand eine Lösung um den Schönheitsfehler zu verbessern.

    Bild  

    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.

    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
     ;------------------------------------------------------------------------------
    Seht evtl. auch hier nach :

    https://www.mikrocontroller.net/topic/6516#6909211

    Beziehungsweise überhaupt beim Ursprung :

    https://www.mikrocontroller.net/topic/6516#41903



    Bernd_Stein
    CRS Robotics A255, TRONXY X3A, TinkerCAD, c´t-Lab, ProfiLab Expert, AVR8 Assembler

Ähnliche Themen

  1. Programieren lernen C++ oder eher Arduino eigene Sprache lernen?
    Von PsychoElvis64 im Forum Arduino -Plattform
    Antworten: 6
    Letzter Beitrag: 17.12.2013, 09:34
  2. C für mikrocontroller lernen
    Von dannyboy1994 im Forum Software, Algorithmen und KI
    Antworten: 11
    Letzter Beitrag: 24.08.2010, 20:16
  3. Assembler lernen
    Von Attiny im Forum Assembler-Programmierung
    Antworten: 52
    Letzter Beitrag: 09.10.2008, 06:35
  4. Assembler richtig lernen ?
    Von Ferdinand im Forum Assembler-Programmierung
    Antworten: 12
    Letzter Beitrag: 10.06.2008, 22:44
  5. fusebit für avr8 mit 16mhz
    Von pebisoft im Forum AVR Hardwarethemen
    Antworten: 3
    Letzter Beitrag: 27.02.2005, 16:18

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

    Werbung      Labornetzteil AliExpress