最近为10位AD转BCD码的事困了几天。网上查了很多资料,也看不出个究竟,申明小弟是初小者。 ;本程序实现双字节二进制数转化为3字节压缩BCD码。 ;入口参数:原二进制数在SOUH:SOU中。 ;出口参数:结果在RLT:SOUH:SOU中。 ;占用资源:W,STATUS,FSR,023H,024H,025H,026H,028H,029,02AH,两重堆栈。
DBTBCD MOVF SOU,W MOVWF TEMP2 MOVF SOUH,W MOVWF TEMP3 CLRF SOU CLRF SOUH CLRF RLT BCF STATUS,C MOVLW .16 MOVWF CNT LOOPC1 RLF TEMP2,F 从这里以下就看不懂了,帮一下小弟了! RLF TEMP3,F 这里带C左移是不是全乱了???? RLF SOU,F RLF SOUH,F RLF RLT,F DECFSZ CNT,F GOTO ADJDEC1 RETURN ;整个子程序结束 ADJDEC1 MOVLW SOU MOVWF FSR CALL ADJBCD1 ;调整RLT MOVLW SOUH MOVWF FSR CALL ADJBCD1 ;调整RLTH MOVLW RLT MOVWF FSR CALL ADJBCD1 ;调整TEMP1 GOTO LOOPC1 ;********************调整BCD******************** ADJBCD1 MOVLW 03H ADDWF INDF,W ;低四位加3 MOVWF TEMP1 ;暂存 BTFSC TEMP1,3 ;结果大于7, MOVWF INDF ;则存起来 MOVLW 30H ADDWF INDF,W ;高四位加3 MOVWF TEMP1 BTFSC TEMP1,7 ;结果大于7, MOVWF INDF ;则存起来 RETURN END;
请给出详解,小弟不堪感激!找了很多资料都末能颔悟。。 |