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