habe ich oben doch schon geschrieben:
(100/65536)* wert * 100 -->> das ist doch 1Byte * ~1,52...
ausgabe = wert *1.5258
habe ich oben doch schon geschrieben:
(100/65536)* wert * 100 -->> das ist doch 1Byte * ~1,52...
ausgabe = wert *1.5258
Problem: "wert" (bei mir oben "eingabe") ist, wie ich vorgerechnet habe, eben nicht 1 Byte (Kein uint8_t).
>>ch habe einen Integer Wert, der den Bereich -255 bis 255 abdecken sollte
und das ist Signum + uint8
;Berechnung Ausgabe = Eingabe * (10^5 / 65536)
;
;Float
;Speicherbedarf 621 Bytes
;Takte 293 Cyclen
;Tabelle
;Speicherbedarf 544 Bytes
;Takte 23 Cyclen
;
HW_FPU EQU 0 ;keine FPU
; EinWert wird in DPTR als sign.Int übergeben
; AusWert wird in DPTR als unsigniert INT übergeben, Signum in A
;---------------------------------------------
cond 1
Mov A, DPH
Push A ;signum merken
CLR A.7
Mov DPH, A
Call _uint2fs
PutA
PushFC 1.525878906 ;10^5 / 65536
GoSub _fsmul_A
Call _round_A
Pop A ;signum dazu
ANL A, #80H
RET
include Float_s.inc
Else
;---------------------------------------------
Mov A, DPL
Add A, #TABELLE
Mov DPL, A
Mov A, DPH
Push A ;signum merken
CLR A.7
AddC A, #TABELLE >> 8
Mov DPH, A
CLR A
MovC A, @A+DPTR
Push A
Mov A,#1
MovC A, @A+DPTR
Mov DPL, A
POP DPH
POP A
ANL A, #80H
RET
TABELLE: DS 512
EndC
;---------------------------------------------
END
Lesezeichen