金沙js5线路(中国)有限公司

技术热线: 4007-888-234

10位AD转换成三位BCD码的程序

更新时间: 2019-03-26
阅读量:2169

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

 



XML 地图