英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流

标题: 16进制转10进制函数。 [打印本页]

作者: winnie    时间: 2009-4-26 10:21
标题: 16进制转10进制函数。
A/D采样后的值是16进制(<0xFFFF),通过什么函数能转为10进制(或什么方法),以便于送到数码管显示。
作者: winnie    时间: 2009-4-26 10:22
;16位二进制数换算位DCD码==========

;============================================
;16位二进制数换算位DCD码==========
;********************************************************************
;                  Binary To BCD Conversion Routine      
;      This routine converts a 16 Bit binary Number to a 5 Digit        
; BCD Number. This routine is useful since PIC16C55 & PIC16C57         
; have  two 8 bit ports and one 4 bit port ( total of 5 BCD digits)     
;                                                                       
;       The 16 bit binary number is input in locations ACCBHI and      
; ACCBLO with the high byte in ACCBHI.                                 
;       The 5 digit BCD number is returned in R0, R1 and R2 with R0     
; containing the MSD in its right most nibble.                          
;                                                                       
;   Performance :                                                      
;               Program Memory  :       35                              
;               Clock Cycles    :       885                             
;
;********************************************************************
;               Test Program
;*********************************************************************
;main    movlw   0FF
; movwf   ACCBHI
; movwf   ACCBLO          ; The 16 bit binary number = FFFF
; call    B2_BCD          ; After conversion the Decimal Number
;                               ; in R0,R1,R2 = 06,55,35   
;*******************************************************************;
B2_BCD  bcf     STATUS,0                ; clear the carry bit
movlw   .16
movwf   count
clrf    R0
clrf    R1
clrf    R2
loop16  rlf     ACCBLO,1
rlf     ACCBHI,1
rlf     R2,1
rlf     R1,1
rlf     R0,1
;
decfsz  count,1
goto    adjDEC
RETLW   0
;
adjDEC  movlw   R2
movwf   FSR
call    adjBCD
;
movlw   R1
movwf   FSR
call    adjBCD
;
movlw   R0
movwf   FSR
call    adjBCD
;
goto    loop16
;
adjBCD  movlw   3
addwf   0,W
movwf   TEMP
btfsc   TEMP,3          ; test if result > 7
movwf   0
movlw   30
addwf   0,W
movwf   TEMP
btfsc   TEMP,7          ; test if result > 7
movwf   0               ; save as MSD
RETLW   0
;
作者: winnie    时间: 2009-4-26 10:22
X为要显示的16进制数

万位=X/10000

千位=(X%10000)/1000

百位=(X%1000)/100

十位=(X%100)/10

个位=X%10




欢迎光临 英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 (http://www.enroobbs.com/) Powered by Discuz! X3.2