INCLUDE 89C51.MC ;*----------------------------------------------------------- ;* ;* bin6bcd - routine compute from binary value to bcd ;* ;* Entry: reg_e:d - binary value (24 bit) ;* ;* Exit: reg_e:d - 8 bcd digits (0000:0000-1677:7215) ;* ;*----------------------------------------------------------- H1 EQU 08H H2 EQU 09H H3 EQU 0AH D1 EQU 0BH D2 EQU 0CH D3 EQU 0DH D4 EQU 0EH TMP1 EQU 0FH TMP2 EQU 10H TMP3 EQU 11H TMP4 EQU 12H POINTER EQU 13H HOLD EQU 14H MOV H1,#F2H ;020A1B HEX MOV H2,#ABH MOV H3,#FFH MOV D1,#00H MOV D2,#00H MOV D3,#00H MOV D4,#00H MOV TMP1,#00H MOV TMP2,#00H MOV TMP3,#00H MOV TMP4,#00H ;------------------------------------------------------------------------------------- BIN6BCD: MOV SP,#20H MOV A,H3 FOR R0 = #01H TO #08H CLR C RRC A MOV HOLD,A JNC DOWN MOV A,R0 RL A RL A MOV POINTER,A CALL ADDITION DOWN: MOV A,HOLD NEXT R0 MOV A,H2 FOR R0 = #01H TO #08H CLR C RRC A MOV HOLD,A JNC DOWNH2 MOV A,R0 ADD A,#08H RL A RL A MOV POINTER,A CALL ADDITION DOWNH2: MOV A,HOLD NEXT R0 MOV A,H1 FOR R0 = #01H TO #08H CLR C RRC A MOV HOLD,A JNC DOWNH3 MOV A,R0 ADD A,#10H RL A RL A MOV POINTER,A CALL ADDITION DOWNH3: MOV A,HOLD NEXT R0 BBBB: JMP BBBB ;------------------------------------------------------------------------------------- ADDITION: MOV DPTR,#BINBCDTAB DEC POINTER MOV A,POINTER MOVC A,@A+DPTR MOV TMP1,A MOV A,POINTER DEC A MOVC A,@A+DPTR MOV TMP2,A MOV A,POINTER DEC A DEC A MOVC A,@A+DPTR MOV TMP3,A MOV A,POINTER DEC A DEC A DEC A MOVC A,@A+DPTR MOV TMP4,A ;-------------- DO ADDITION TMP1 ------------------- CLR C MOV A,TMP1 ADD A,D4 DA A MOV D4,A MOV A,TMP2 ADDC A,D3 DA A MOV D3,A MOV A,TMP3 ADDC A,D2 DA A MOV D2,A MOV A,TMP4 ADDC A,D1 DA A MOV D1,A CLR C RET ;------------------------------------------------------------------------------------- HETE: JMP HETE BINBCDTAB: DB 00H,00H,00H,01H ; bit 0 DB 00H,00H,00H,02H ; bit 1 DB 00H,00H,00H,04H ; bit 2 DB 00H,00H,00H,08H ; bit 3 DB 00H,00H,00H,16H ; bit 4 DB 00H,00H,00H,32H ; bit 5 DB 00H,00H,00H,64H ; bit 6 DB 00H,00H,01H,28H ; bit 7 DB 00H,00H,02H,56H ; bit 8 DB 00H,00H,05H,12H ; bit 9 DB 00H,00H,10H,24H ; bit 10 DB 00H,00H,20H,48H ; bit 11 DB 00H,00H,40H,96H ; bit 12 DB 00H,00H,81H,92H ; bit 13 DB 00H,01H,63H,84H ; bit 14 DB 00H,03H,27H,68H ; bit 15 DB 00H,06H,55H,36H ; bit 16 DB 00H,13H,10H,72H ; bit 17 DB 00H,26H,21H,44H ; bit 18 DB 00H,52H,42H,88H ; bit 19 DB 01H,04H,85H,76H ; bit 20 DB 02H,09H,71H,52H ; bit 21 DB 04H,19H,43H,04H ; bit 22 DB 08H,38H,86H,08H ; bit 23