实用子程序.rar本子程序库对《单片机应用程序设计技术》一书附录中的子程序库作了重大修订

源代码在线查看: 字节浮点数转换为定点整数.txt

软件大小: 64 K
上传用户: xiaochonghan
关键词: 程序库 程序 单片机
下载地址: 免注册下载 普通下载 VIP

相关代码

				;【校验举例1】 19531(十进制)
				;化为十六进制数:4C4B0FH 
				;结果:4C4BH
				;4.2  3字节浮点数转换为定点整数
				;子程序的转换结果将采用补码表示。其转换数值范围:-32768~32767,
				;入口条件和出口条件如下:
				;入口条件:ACCBHI、ACCBLO、EXPB
				;出口条件:ACCBHI、ACCBLO
				 ;   以下为子程序的清单。由于程序所需调用的子程序和所需通用寄存器
				;单元地址和定点数转换为浮点数子程序相同,在此省略。使用时,将前面介绍
				;的子程序拷入此处即可。
				    LIST            p=16f877
				    INCLUDE        p16f877.inc
				ACCBLO         EQU     23h        ;存放被转换的双字节整数低8位
				ACCBHI         EQU     24h        ;存放被转换的双字节整数高8位
				ACCCLO         EQU     26h        ;存放5位BCD码
				ACCCHI         EQU     27h
				ACCDLO         EQU     28h
				ACCDHI         EQU     29h
				TEMP         EQU     2Ah        ;临时寄存器
				SIGN         EQU     2Bh        ;被转换数符号寄存器
				EXPB         equ     2ch
				NEG_B        EQU     2DH 
				    ORG            0X0000
				
				
				
				MAIN        MOVLW        0X4B        ;被转换数4C4BH送ACCB
				    MOVWF        ACCBLO
				    MOVLW        0X4C
				    MOVWF        ACCBHI
				    MOVLW        0X0F
				    MOVWF        EXPB
				        CALL        FtoD            ;调用定点数至浮点数转换子程序
				   GOTO  $
				
				FtoD    CLRF         SIGN            ;清结果符号寄存器
				    MOVF         ACCBHI,0
				    BTFSS         ACCBHI,7    ;被转换数是否为负?
				    GOTO         D1
				    BSF             SIGN,7        ;是,SIGN.7置1
				    CALL         NEG_B        ;被转换数取补
				D1    BTFSS         EXPB,7        ;被转换数为正,再判阶码为负否?
				    GOTO         D2
				    CLRF         ACCBHI        ;为负,被转换数小于1,无法用定点数表示
				    CLRF         ACCBLO
				    RETLW         0
				D2    MOVLW         .16            ;被转换数阶码减16(十进制数)
				    SUBWF         EXPB,0
				    BTFSS         STATUS,C    ;阶码小于16?
				    GOTO         D3
				        MOVLW         0XFF            ;阶码大于等于16,置ACCB为最大,返回
				    MOVWF         ACCBHI
				    MOVWF         ACCBLO
				    RETLW         01
				D3    CALL         FTOW3        ;调用子程序将浮点数转换为定点数
				    BTFSC         SIGN,7        ;定点数为负?
				    CALL         NEG_B        ;是,取补
				    RETLW         0            ;否,返回
				;****************************************
				FTOW3    MOVLW         .15            ;EXPB=15(十进制数)?
				    SUBWF         EXPB,0
				    BTFSC         STATUS,Z
				    RETLW         0            ;是,返回
				    BCF             STATUS,C    ;否,ACCB继续右移,EXPB加1
				    RRF             ACCBHI
				    RRF             ACCBLO
				    INCF         EXPB
				    GOTO         FTOW3        ;重新判断EXPB=15?
				
				
				
				
				
				    END
							

相关资源