個是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;