
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
||
|
' --------------------------------------------------------------------------- ' 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 |