;*************************Two's complement in ASCII*********************************************** ; Hexdezi used two highregister And 5 Low registers ;aa = r16 , r6,r7,r8,r9,r10 ;r6-r7 Hex Bcd wandlung ; zu wandelnder Wert in aa .include "2313def.inc" .def aa = R16 ;input two's complement .def temp = R17 ; scratch space ; Ergebnis in .def dezv =R08 ;dezimal ausgabe in ascii .def dezh =R09 ; .def dezl =R10 ; ;************************************************************************ rjmp RESET ; Reset Handle ;************************************************************************ RESET: ldi zl,Low(RAMEND) ;Stack setzen out SPL,zl rcall hexdezi loop: rjmp loop ;***************************************************************************** ; aa = two's complement number hexdezi: ;wenn negativ 2 zahlen + vorz. sonst 3 sbrc aa,7 ;Bit 7 gesetzt dann neg. - test auf negative Zahl rjmp negaz ;test auf größer 99 bin2bcdh: clr temp ;Clear result msd bBCD83: subi aa,100 ;Input = Input -100 brcs bBCD84 ;abort If carry Set inc temp rjmp bBCD83 bBCD84: subi aa,-100 mov dezv,temp rcall bin2bcd rcall bcdasc mov dezh,r6 mov dezl,r7 mov aa,dezv rcall bcdasc mov dezv,r7 ret ;************************************************************************** negaz: neg aa ; negative Zahl ist zweiercomplement rcall bin2bcd rcall bcdasc ldi temp,'-' ; minus ascii mov dezv,temp mov dezh,r6 mov dezl,r7 ret ;************************************************************************** ; 8Bit Binär in packed Bcd - wert in aa - ergebnis in aa ! bin2bcd: clr temp ;Clear result msd bBCD81: subi aa,10 ;Input = Input -10 brcs bBCD82 ;abort If carry Set subi temp,-$10 ;für packed Bcd rjmp bBCD81 bBCD82: subi aa,-10 add aa,temp ret ;*************************************************************************** ; Bcd - zahlen in 2 ASCII char --- wert in aa - ergebnis in r6 und r7 h/l Byte ; bcdasc: mov temp,aa ; aa aufheben lsr temp lsr temp lsr temp lsr temp ;Msb ins Lsb schieben ori temp,0x30 ;$30 dazuodern erzeugt ascii 30 -39 da nur zahl 0-9 mov r6,temp andi aa,0x0f ;löschen des Msb ori aa,0x30 mov r7,aa ret