INFO - FAQ - CC2-Forum - CCPro-Forum |
|
' ============================================================================ ' Demoprogramm: Rechnen mit einer Quadratischen Gleichung in 32-Bit II ' In OCBASIC 1.12a_e1 für Open-Maxi von Dietmar Harlos am 20. Mai 2022 ' ============================================================================ ' Es wird eine Quadratische Gleichung mittels 32-Bit-Festkommaarithmetik ' berechnet. Dabei wird die Systemerweiterung "Komfortable 32-Bit-Arithmetik ' auf der Open-Maxi" verwendet. Dieses Programm ist gut kommentiert, so daß ' es keine Schwierigkeiten macht, eine ähnliche Rechnung in einem eigenen ' Programm umzusetzen. Es ist beschrieben, worauf man bei der Berechnung ' mittels 32-Bit-Festkommaarithmetik achten muß. ' Zum Rechnen unter Windows eignet sich gut das Computeralgebrasystem ' "MuPAD Light 2.5.3". Hier in unserem Forum gibt es folgenden Downloadlink: ' http://ccintern.dharlos.de/forum/lesen.php?eintrag=17192 ' --- Definitionen für das System -------------------------------------------- INCLUDE "omax.def" 'Definitionen für die Open-Maxi OPTION 32BIT '32-Bit freischalten (ab OCBASIC Version 1.12) ' --- Definitionen des Anwenders --------------------------------------------- DIM l LONG 'Eine 32-Bit-LONG-Variable DEFINE ll AS WORD[1] OF l 'LSW \ High- und Low-Word der DEFINE lh AS WORD[2] OF l 'MSW / 32-Bit-LONG-Variable DIM bitarray BYTE 'ein Bitarray DIM debug BIT[1] OF bitarray 'ist HIGH, wenn Debugging aktiv DIM messung WORD 'ein Meßwert vom AD-Wandler DIM ergebnis WORD 'das Ergebnis der Berechnung DEFINE adinput AD[1] 'Eingang des Analog-Digital-Wandlers ' --- System-Erweiterungen einbinden (müssen vor dem ersten Befehl stehen) --- INCLUDE "omax32.iia" '32-Bit-Erweiterung einbinden ' --- Das Hauptprogramm ------------------------------------------------------ #main RunOnErr=ON 'Fehler-Handling aktivieren End2Host=ON IF ERR THEN 'Fehler-Handling (siehe Doku) WHILE TRUE ?"Fehler Nr. ";err PrintHex=ON ?"Adresse: $";erradr-UPROGBASE PrintHex=OFF PAUSE 25 WEND END IF URTok=ON '32-Bit-Erweiterung aktivieren ' Titel: PRINT "Quadratische Gleichung II" PRINT "=========================" ' Initialisierungen: debug=ON 'OFF 'ON 'Zwischenschritte anzeigen ' Die AD-Ports liefern standardmäßig gerundete 8-Bit-Werte zwischen 0 und 255 ' zurück, was den Spannungswerten 0 Volt bis 5 Volt entspricht. Mit folgendem ' Befehl wird auf gerundete 10 Bit umgeschaltet. ADC1CFG=&b01001000 'AD-Wandler auf gerundete 10 Bit ' Hauptschleife des Programms: WHILE NOT RXD messung=adinput messung=1000 '1023 'Beispiel ? ?"messung="messung IF debug THEN ? ?"Zwischenschritte:" END IF ' Ab hier die Formel "32000-1.34*messung+0.000125*messung^2" mittels 32-Bit-Festkommaarithmetik berechnen 'Der AD-Wandler liefert 10-Bit-Werte zurück. Sie liegen also im Wertebereich ' zwischen 0 und 2^10-1. Gehen also bis 1023. 1023^2 ist 1046529. Dieser Wert ' kann nicht in einer 16-Bit-Variable (Typ: WORD) gespeichert werden, denn er ' ist zu groß. Es würde ein Überlauf auftreten. 'Die Lösung ist 32-Bit-Arithmetik. Eine 32-Bit-Variable (Typ: LONG) kann ' Zahlen zwischen -2147483648 bis 2147483647 speichern. Demnach kann kein ' Überlauf auftreten und es darf in 32-Bit gerechnet werden. 'Die Multiplikation mit 1.34 wird durch 134/100 ersetzt. Es wird also mit ' der Zahl 100 skaliert, die Multiplikation durchgeführt und zum Schluß ' durch 100 dividiert, um das Ergebnis zu erhalten. 'Die Multiplikation mit der Zahl 0.000125 kann einfacher durch eine Division ' mit dem Kehrwert 8000 durchgeführt werden. 'Zu beachten ist, daß keine Überläufe auftreten, und es muß beachtet werden, ' daß während der 32-Bit-Arithmetik nur vier Einträge auf dem Rechenstack ' verfügbar sind. Weiteres steht in der INFO.TXT-Datei der 32-Bit-Arithmetik. l=32000-134*messung/100+messung*messung/8000 IF debug THEN ?"32000-1.34*messung+0.000125*messung^2=";l ? END IF 'Das Ergebnis steht in der unteren WORD-Hälfte von der LONG-Variablen "l". ergebnis=ll ?"ergebnis="ergebnis PAUSE 50 WEND ?:?"Programmende." END 'Zurück in den Hostmodus. Neustart mit RETURN-Taste. ' --- Programmende ---------------------------------------------------------- Passender Link: Infosite zu den OM-Mikrocontrollern Meine Homepage: http://ccintern.dharlos.de |
Antwort schreiben |