專注差異化嵌入式產(chǎn)品解決方案 給智能產(chǎn)品定制注入靈魂給予生命
提供開發(fā)工具、應(yīng)用測(cè)試 完善的開發(fā)代碼案例庫分享
從全面的產(chǎn)品導(dǎo)入到強(qiáng)大技術(shù)支援服務(wù) 全程貼心伴隨服務(wù),創(chuàng)造無限潛能!
提供新的芯片及解決方案,提升客戶產(chǎn)品競(jìng)爭(zhēng)力
提供最新的單片機(jī)資訊,行業(yè)消息以及公司新聞動(dòng)態(tài)
十年專注單片機(jī)方案開發(fā)的方案公司英銳恩,分享定點(diǎn)數(shù)轉(zhuǎn)浮點(diǎn)數(shù)的程序。英銳恩現(xiàn)提供服務(wù)產(chǎn)品涉及主控芯片:8位單片機(jī)、16位單片機(jī)、32位單片機(jī)及各類運(yùn)算放大器等。
定點(diǎn)數(shù)轉(zhuǎn)換成浮點(diǎn)數(shù)
本子程序的功能是將雙字節(jié)定點(diǎn)整數(shù)(十六進(jìn)制)轉(zhuǎn)換為3字節(jié)浮點(diǎn)數(shù),其轉(zhuǎn)換數(shù)值范圍:-32768~32767,入口條件和出口條件如下:
入口條件:ACCBHI、ACCBLO
出口條件:ACCBHI、ACCBLO、EXPB
以下為定點(diǎn)整數(shù)轉(zhuǎn)換成浮點(diǎn)數(shù)的程序清單。
LIST p=16f877
INCLUDE p16f877.inc
ACCBLO EQU 23 ;存放定點(diǎn)整數(shù)和轉(zhuǎn)換后浮點(diǎn)數(shù)的尾數(shù)
ACCBHI EQU 24
EXPB EQU 25 ;存放轉(zhuǎn)換后浮點(diǎn)數(shù)的階碼
ACCCLO EQU 26 ;臨時(shí)寄存器
ACCCHI EQU 27 ;臨時(shí)寄存器
ACCDLO EQU 28 ;臨時(shí)寄存器
ACCDHI EQU 29 ;臨時(shí)寄存器
SIGN EQU 2B ;存放被轉(zhuǎn)換數(shù)的符號(hào)
ORG 0X0000
START GOTO MAIN
ORG 0X0100
;*********雙字節(jié)定點(diǎn)整數(shù)到浮點(diǎn)數(shù)轉(zhuǎn)換子程序***********
DtoF CLRF SIGN ;根據(jù)被轉(zhuǎn)換數(shù)確定結(jié)果的符號(hào),對(duì)負(fù)數(shù)取補(bǔ)
BTFSS ACCBHI,7
GOTO INTF1
BSF SIGN,7
CALL NEG_B
INTF1 MOVLW .15 ;初始化EXPB
MOVWF EXPB
CLRF ACCCHI
CLRF ACCCLO
CALL F_norm ;對(duì)ACCB進(jìn)行規(guī)格化
BTFSS SIGN,7 ;結(jié)果為負(fù)?
GOTO DtoF1
CALL NEG_B ;是,求補(bǔ)
DtoF1 RETURN
;**************浮點(diǎn)數(shù)規(guī)格化子程序**************
F_norm MOVF ACCBHI ;ACCB=0?
BTFSS STATUS,Z
GOTO C_norm
MOVF ACCBLO
BTFSC STATUS,Z
RETLW 0 ;是,不需規(guī)格化,返回
C_norm BTFSC ACCBHI,7 ;否。ACCB為負(fù)?
GOTO C_norm2
C_norm1 BTFSC ACCBHI,6 ;為正。規(guī)格化完畢?
RETLW 0 ;ACCBHI.6=1,規(guī)格化結(jié)束
CALL SHFTSL ;否。ACCB左移
DECF EXPB ;EXPB減1
GOTO C_norm1 ;重新判斷規(guī)格化完畢否?
C_norm2 BTFSS ACCBHI,6 ;ACCB為負(fù)。規(guī)格化完畢否?
RETLW 0 ;ACCBHI.6=0,規(guī)格化結(jié)束
BCF STATUS,C
CALL SHFTSL ;否,ACCB左移
BSF ACCBHI,7 ;加符號(hào)
DECF EXPB ;EXPB減1
GOTO C_norm2 ;重新判斷規(guī)格化完畢否?
SHFTSL BCF STATUS ,C ;ACCB左移子程序
RLF ACCCLO
RLF ACCCHI
RLF ACCBLO
RLF ACCBHI
RETLW 0
【校驗(yàn)舉例1】 19531(十進(jìn)制)
化為十六進(jìn)制數(shù):4C4BH
結(jié)果:4C4B0FH
【校驗(yàn)舉例2】 2622(十進(jìn)制)
化為十六進(jìn)制數(shù): 0A3EH
結(jié)果:51F00CH
【例程】
MAIN MOVLW 0X4B ;被轉(zhuǎn)換數(shù)4C4BH送ACCB
MOVWF ACCBLO
MOVLW 0X4C
MOVWF ACCBHI
CALL DtoF ;調(diào)用定點(diǎn)數(shù)至浮點(diǎn)數(shù)轉(zhuǎn)換子程序
END