habe mal eine Struktur daraus gemacht, wie es im Programm aussehen könnte. Noch nicht getestet.
Code:
Dim Vorzeichen As Integer
Dim Exponent As Integer
Dim Ergebnis As Single
Dim Fertig As Bit
Dim Zähler As Byte '***** Feldzähler
Dim Zeichen(4) As Byte
Dim Temp As Byte
Dim Sendeanforderung As String * 1
Const True = 1
Const False = 0
On Urxc Hole_bytes
Enable Interrupts
Main:
Sendeanforderung = "!"
Do
'..
'..
'**** Aufforderung zum Senden
Printbin Sendeanforderung '**** ohne Chr(10) und Chr(13)
'**** Sender sendet nun
'***** eventuell nur temporär einschalten, falls noch andere Interrupts laufen
'enable urxc
i=1 '**** Feldzähler initialisieren
While Fertig = True
'***** geht in Bascom nicht in einer Zeile!
'***** braucht man wahrscheinlich Integer-Variablen für die Zwischenwerte
'***** muss ich noch klären
Ergebnis = Zeichen(2) * 65535 + Zeichen(3) * 256 + Zeichen(4)
Ergebnis = Ergebnis / 8388480 '**** warum?
Ergebnis = Ergebnis * 2 ^ Exponent
Ergebnis = Ergebnis * Vorzeichen
Print Ergebnis
Fertig = False
Wend
'disable urxc
Loop
End
Hole_bytes:
Temp = Udr '**** 1 Zeichen aus Register empfangen, ist ascii
Select Case Zähler
Case 1
If Temp.7 = 1 Then '**** größer 128
Vorzeichen=-1
Exponent = Temp - 128
Exponent = Exponent * 2
else
Vorzeichen = 1
Exponent = Temp * 2
endif
Zeichen(zähler) = Temp
Incr Zähler
Case 2
If Temp.7 = 1 Then
Incr Exponent
Else
Zeichen(Zähler) = Temp + 128 '**** du hast chr(..), warum?
End If
Exponent = Exponent - 128
Incr Zähler
Case 3 To 4
Zeichen(zähler) = Temp
Incr Zähler
Fertig = True
End Select
Return
Auf dieser Basis lässt sich vielleicht weiterarbeiten.
Lesezeichen