Moin...
Das folgende Programm soll aus einer Zahl, die an Port 0 eingegeben wird, die Wurzel berechnen, die Vorkommastellen in den Speicherbereich 70-72 schreiben, die ersten 5 Nachkommastellen in den Speicherbereich 73-77.
Die Wurzel berechnen klappt soweit. Die Zahl vor dem Komma wird auch korrekt eingetragen. Nur bei den Nachkommastellen hab ich irgendwie ein Problem, welches sich in einem riesigen '?' offenbart.
Im Register 2 werden ja die Vorkommastellen binär gespeichert. im Register R0 'anscheinend' der "Rest". Nur wie krieg ich diesen Rest dann als BCD-Nachkommastellen hin? Irgendwo hab ich nen Denkfehler...
(CPU ist ein normaler 8051, KEIL-Compiler)
Code:ISEG AT 70H ErgebnisBCD: DS 3 ISEG AT 73H ErgebnisBCDKomma: DS 5 CSEG AT 0 ;NUMH = R0 ;NUML = R1 ;SQRT = R2 ;SUB = R3 ;CNTR = R4 ;WURZEL BERECHNEN init: MOV R0,#0 MOV R1,P0 MOV R2,#0 MOV R4,#4 BCK: MOV A,R2 CLR C RLC A SETB C RLC A MOV R3,A CLR C MOV A,R1 RLC A MOV R1,A MOV A,R0 RLC A MOV R0,A CLR C MOV A,R1 RLC A MOV R1,A MOV A,R0 RLC A MOV R0,A CLR C SUBB A,R3 JC Skip MOV 0,A SKIP: MOV A,R2 CPL C RLC A MOV R2,A DJNZ R4,BCK ;AB HIER AUFLÖSEN NACH BCD, VORKOMMAANTEIL BCDStart: MOV R1,#(ErgebnisBCD+2) MOV R5,#3 MOV A,R2 BCDLoop1: Call BCDDiv10 MOV @R1,B DEC R1 DJNZ R5,BCDLoop1 JMP BCDStartNext BCDDiv10: MOV B,#10 DIV AB RET BCDStartNext: MOV A,#0 MOV R1,#(ErgebnisBCD+2) ADD A,@R1 DEC R1 ADD A,@R1 DEC R1 ADD A,@R1 ;AB HIER AUFLÖSEN NACH BCD, DEZIMALSTELLEN [...?...] JMP INIT ENDE: JMP ENDE END







Zitieren

Lesezeichen