十年專注單片機方案開發的方案公司英銳恩,分享用匯編實現二進制數轉BCD碼。英銳恩現提供服務產品涉及主控芯片:8位單片機、16位單片機、32位單片機及各類運算放大器等。
BIN_L EQU 10H ;要進行二進制轉換的 低字節 BIN_H EQU BIN_L+1 ;要進行二進制轉換的 高字節 GE_B EQU BIN_L+2 ;轉換后的 個位 SHI_B EQU BIN_L+3 ;轉換后的 十位 BAI_B EQU BIN_L+4 ;轉換后的 百位 QIAN_B EQU BIN_L+5 ;轉換后的 千位 WAN_B EQU BIN_L+6 ;轉換后的 萬位
; **********************說明************************ ; * 入口:BIN_L BIN_H * ; * 出口:GE_B SHI_B BAI_B QIAN_B WAN_B * ; * 轉換子程序: CONVERT_2_10 * ; **************************************************
ORG 00H JISUAN: MOVLW 0FFH ;驗證程序 MOVWF BIN_H MOVLW 0FFH MOVWF BIN_L CALL CONVERT_2_10 GOTO $ ;-------------------------------------------------------------------------------------
CONVERT_2_10: ;二進制轉換十進制子程序 CLRF WAN_B CLRF QIAN_B CLRF BAI_B CLRF SHI_B CLRF GE_B BIN_L_PR ;二進制低字節進行十進制轉換程序 MOVF BIN_L,F BTFSC STATUS,Z GOTO BIN_H_PRO BAI_B_PRO_L: MOVLW 64H SUBWF BIN_L,W BTFSS STATUS,C GOTO SHI_B_PRO_L MOVWF BIN_L INCF BAI_B,F GOTO BAI_B_PRO_L SHI_B_PRO_L: MOVLW 0AH SUBWF BIN_L,W BTFSS STATUS,C GOTO GE_B_PRO_L MOVWF BIN_L INCF SHI_B GOTO SHI_B_PRO_L
GE_B_PRO_L: MOVF BIN_L,W MOVWF GE_B GOTO BIN_H_PRO BIN_H_PRO ;二進制高字節進行十進制轉換程序 MOVF BIN_H,F BTFSC STATUS,Z GOTO CONVERT_END GE_B_PRO_H: MOVLW 6H ADDWF GE_B,F MOVLW 0AH SUBWF GE_B,W BTFSS STATUS,C GOTO SHI_B_PRO_H ;個位<10,則直接到十位轉換程序 MOVWF GE_B INCF SHI_B,F ;個位>=10,則進位 GOTO SHI_B_PRO_H SHI_B_PRO_H: MOVLW 5H ADDWF SHI_B,F MOVLW 0AH SUBWF SHI_B,W BTFSS STATUS,C GOTO BAI_B_PRO_H ;十位<10,則直接到百位轉換程序 MOVWF SHI_B INCF BAI_B,F ;十位>=10,則進位 GOTO BAI_B_PRO_H BAI_B_PRO_H: MOVLW 2H ADDWF BAI_B,F MOVLW 0AH SUBWF BAI_B,W BTFSS STATUS,C GOTO QIAN_B_PRO_H ;百位<10,則直接到千位轉換程序 MOVWF BAI_B INCF QIAN_B ;百位>=10,則進位 GOTO QIAN_B_PRO_H QIAN_B_PRO_H: MOVLW 0AH SUBWF QIAN_B,W BTFSS STATUS,C GOTO WAN_B_PRO_H ;千位<10,則直接到萬位轉換程序 MOVWF QIAN_B INCF WAN_B ;千位>=110,則進位 GOTO WAN_B_PRO_H WAN_B_PRO_H: DECFSZ BIN_H,F GOTO GE_B_PRO_H GOTO CONVERT_END CONVERT_END: NOP RETLW 0H ;------------------------------------------------------------------------------------- ORG 1FFH GOTO JISUAN END