Der Nachfolger des WDR-Computerclub mit Wolfgang Back und Wolfgang Rudolph - ...und immer ein Bit übrigbehalten!


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 DEMO: Temperaturwert in °C mit Nachkommastellen Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von Dietmar, Homepage - 25.11.2017 0:43)
Dietmar nutzt:  Open-Micro, Open-Mini, Open-Midi, Open-Macro, Open-Maxi, Open-Mini M-Unit, Open-Mini Station
' ---------------------------------------------------------------------------
' PT1000-Meßmodul: Temperaturwert in °C mit Nachkommastellen umwandeln
' mittels "Grundrechenarten in 32 Bit" auf allen OM-Controllern
' von Dietmar Harlos am 24. November 2017
' ---------------------------------------------------------------------------

'INCLUDE "omac.def"              'Definitionen fuer die Open-Macro
INCLUDE "omax.def"              'Definitionen fuer die Open-Maxi

' ---------------------------------------------------------------------------

DEFINE a  AS LONG   'Erster  32-Bit-Akkumulator (1. Operand & Rechenergebnis)
DEFINE b  AS LONG   'Zweiter 32-Bit-Akkumulator (2. Operand)
DEFINE c  AS LONG   'Dritter 32-Bit-Akkumulator (temp. fuer DIV und PRINT32)

DEFINE a1 AS BYTE[1] OF a   'LSB    'fuer den Zugriff in BASIC
DEFINE a2 AS BYTE[2] OF a
DEFINE a3 AS BYTE[3] OF a
DEFINE a4 AS BYTE[4] OF a   'MSB

DEFINE b1 AS BYTE[1] OF b           'fuer den Zugriff in BASIC
DEFINE b2 AS BYTE[2] OF b
DEFINE b3 AS BYTE[3] OF b
DEFINE b4 AS BYTE[4] OF b

DEFINE t  AS LONG                   'Zwischenspeicher
DEFINE t1 AS BYTE[1] OF t
DEFINE t2 AS BYTE[2] OF t
DEFINE t3 AS BYTE[3] OF t
DEFINE t4 AS BYTE[4] OF t

DIM stellen BYTE                    'Zähler für dezimale Stellen

' ---------------------------------------------------------------------------

' Demo: Das Meßmodul liefert Werte zwischen 12000 und 55000, was einer
'   Temperatur von -68.5°C bis +603.375°C entspricht. Die Rechenvorschrift
'   dafür lautet: Wert / 64 - 256.

' 17772=$0000456C -> 21.6875

a4=&h00
a3=&h00
a2=&h45
a1=&h6C

' 55000=$0000D6D8 -> 603.375

' a4=&h00
' a3=&h00
' a2=&hd6
' a1=&hd8

' 12000=$00002EE0 -> -68.5

' a4=&h00
' a3=&h00
' a2=&h2e
' a1=&he0

' Geeignet (mit dem Faktor 32768) skalieren:

' 2147483647/55000=39045.15722, also 32768

b4=&h00
b3=&h00
b2=&h80
b1=&h00

multiplizieren

' Durch 64 rechnen:

' /64

b4=&h00
b3=&h00
b2=&h00
b1=64

dividieren

' Minus 256, dabei Skalierung beachten:

' 256*32768=8388608=$00800000

b4=&h00
b3=&h80
b2=&h00
b1=&h00

subtrahieren

' Negatives Ergebnis behandeln:

IF a4 AND &h80 THEN
  SYS negate_a
  PUT ASC("-")
END IF

' A in T retten:

t1=a1
t2=a2
t3=a3
t4=a4

' Vorkommaanteil ausgeben, dabei Skalierung beachten:

' 710656/32768=21.6875

b4=&h00
b3=&h00
b2=&h80
b1=&h00

dividieren

print32
PUT ASC(".")

' A aus T zurückholen:

a1=t1
a2=t2
a3=t3
a4=t4

' Auf Nachkommaanteil reduzieren, dabei Skalierung beachten:

b4=&h00
b3=&h00
b2=&h80
b1=&h00

modulo

' Nachkommaanteil ausgeben:

FOR stellen=1 TO 4

  ' *10

  b4=&h00
  b3=&h00
  b2=&h00
  b1=10

  multiplizieren

  t1=a1
  t2=a2
  t3=a3
  t4=a4

  b4=&h00
  b3=&h00
  b2=&h80
  b1=&h00

  dividieren

  print32

  a1=t1
  a2=t2
  a3=t3
  a4=t4

  ' MOD 32768
 
  b4=&h00
  b3=&h00
  b2=&h80
  b1=&h00

  modulo

NEXT stellen

PRINT "°C"

' Programmende

End2Host=ON
END

' ---------------------------------------------------------------------------

INCLUDE "32BITASM.PRO"    'INCLUDE-Datei für 32-Bit-Arithmetik

' ---------------------------------------------------------------------------

INCLUDE "OM_FW.PRO"       'INCLUDE-Datei für Firmwareroutinen

' ---------------------------------------------------------------------------


Meine Homepage: http://ccintern.dharlos.de

 Antwort schreiben

Bisherige Antworten:

Der finale Code (von Dietmar - 28.11.2017 17:23)
Dezi zu Hex (von Norbert - 25.11.2017 19:03)
    Re: Dezi zu Hex (von Dietmar - 25.11.2017 20:02)
        Re: Dezi zu Hex (von Norbert - 26.11.2017 1:41)
            Re: Dezi zu Hex (von Dietmar - 26.11.2017 1:51)
                Re: Dezi zu Hex (von Norbert - 26.11.2017 2:28)
        Vereinfachung bei Open-Macro und Open-Maxi (von Dietmar - 26.11.2017 1:40)
            Re: Vereinfachung bei Open-Macro und Open-Maxi (von Norbert - 26.11.2017 11:37)
                IEEEFP.BAS(158): Adressierungsart nicht erlaubt (von Dietmar - 26.11.2017 16:52)
                    Re: IEEEFP.BAS(158): Adressierungsart nicht erlaubt (von Norbert - 26.11.2017 18:58)
                       Zweierkomplement (von Dietmar - 26.11.2017 20:33)
Übrigens (von Dietmar - 25.11.2017 3:35)