📄 定点数转换成浮点数.txt
字号:
;【校验举例1】 19531(十进制)
;化为十六进制数:4C4BH
;结果:4C4B0FH
;4.1 定点数转换成浮点数
;本子程序的功能是将双字节定点整数(十六进制)转换为3字节浮点数,
;其转换数值范围:-32768~32767,入口条件和出口条件如下:
;入口条件:ACCBHI、ACCBLO
;出口条件:ACCBHI、ACCBLO、EXPB
;以下为定点整数转换成浮点数的程序清单。
LIST p=16f877
INCLUDE p16f877.inc
ACCBLO EQU 23h ;存放定点整数和转换后浮点数的尾数
ACCBHI EQU 24h
EXPB EQU 25h ;存放转换后浮点数的阶码
ACCCLO EQU 26h ;临时寄存器
ACCCHI EQU 27h ;临时寄存器
ACCDLO EQU 28h ;临时寄存器
ACCDHI EQU 29h ;临时寄存器
SIGN EQU 2Bh ;存放被转换数的符号
START GOTO MAIN
ORG 0X0100
;*********双字节定点整数到浮点数转换子程序***********
DtoF CLRF SIGN ;根据被转换数确定结果的符号,对负数取补
BTFSS ACCBHI,7
GOTO INTF1
BSF SIGN,7
CALL NEG_B
NEG_B DECF ACCBLO ;
COMF ACCBLO
BTFSC STATUS,Z
DECF ACCBHI
COMF ACCBHI
OVER RETURN ;子程序返回
INTF1 MOVLW .15 ;初始化EXPB
MOVWF EXPB
CLRF ACCCHI
CLRF ACCCLO
CALL F_norm ;对ACCB进行规格化
BTFSS SIGN,7 ;结果为负?
GOTO DtoF1
CALL NEG_B ;是,求补
DtoF1 RETURN
;**************浮点数规格化子程序**************
F_norm MOVF ACCBHI ;ACCB=0?
BTFSS STATUS,Z
GOTO C_norm
MOVF ACCBLO
BTFSC STATUS,Z
RETLW 0 ;是,不需规格化,返回
C_norm BTFSC ACCBHI,7 ;否。ACCB为负?
GOTO C_norm2
C_norm1 BTFSC ACCBHI,6 ;为正。规格化完毕?
RETLW 0 ;ACCBHI.6=1,规格化结束
CALL SHFTSL ;否。ACCB左移
DECF EXPB ;EXPB减1
GOTO C_norm1 ;重新判断规格化完毕否?
C_norm2 BTFSS ACCBHI,6 ;ACCB为负。规格化完毕否?
RETLW 0 ;ACCBHI.6=0,规格化结束
BCF STATUS,C
CALL SHFTSL ;否,ACCB左移
BSF ACCBHI,7 ;加符号
DECF EXPB ;EXPB减1
GOTO C_norm2 ;重新判断规格化完毕否?
SHFTSL BCF STATUS ,C ;ACCB左移子程序
RLF ACCCLO
RLF ACCCHI
RLF ACCBLO
RLF ACCBHI
RETLW 0
MAIN MOVLW 0X4B ;被转换数4C4BH送ACCB
MOVWF ACCBLO
MOVLW 0X4C
MOVWF ACCBHI
CALL DtoF ;调用定点数至浮点数转换子程序
goto $
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -