个是10AD的转换程序;
;入口参数是原二进数,ADRESH,ADRESL,
;出口参数:转换完成数是存放在,RLT,SOUH,SOU中,
;程序默认的是SELECT AN0口
;相当于二字节二进制转换成3字节BCD码
;
;
LIST P=16F877;
INCLUDE
TEMP1 EQU 21H;
TEMP2 EQU 22H;
TEMP3 EQU 23H;
CNT EQU 50H;
SOU EQU 76H;
SOUH EQU 77H;
RLT EQU 78H;
BANK3 MACRO ;
BSF STATUS,RP0 ;
BSF STATUS,RP1 ;
ENDM ;
BANK2 MACRO ;
BCF STATUS,RP0 ;
BSF STATUS,RP1 ;
ENDM ;
BANK1 MACRO ;
BSF STATUS,RP0 ;
BCF STATUS,RP1 ;
ENDM ;
BANK0 MACRO ;
BCF STATUS,RP0 ;
BCF STATUS,RP1 ;
ENDM ;
ORG 0000
NOP;
GOTO AAAA
MIAN
BANK1;
MOVLW B'00000010' ;左对齐方式,标准,RA全部口为模拟的,RE口为数字口
MOVWF ADCON1 ;
BANK0 ;选择体零
MOVLW B'01000001' ;选择FOSC/8,允许ADC工作,但还没有开始转换
MOVWF ADCON0 ;
BSF ADCON0,GO ;START ADC GO
BTFSS PIR1,ADIF;
GOTO $-1;
MOVF ADRESH,0;
MOVWF SOUH;
BANK1;
MOVF ADRESL,0;
MOVWF SOU;
BANK0;
AAAA
CLRF SOU;
CLRF SOUH;
MOVLW 56H;
MOVWF SOU;
MOVLW 3FH;
MOVWF SOUH;
CALL DBTBCD;
GOTO $
;********************DBTBCD********************
;本程序实现双字节二进制数转化为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
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;