使用MDU16库中的FCASTL出现符号丢失 | 好像没问题了
$NOMOD51
NAME FCASTL
/**********************************************************************************************
* float R4R5R6R7fcastl(long R4R5R6R7);//低在先!!!
* result = value1 // long-->float
* R4R5R6R7 = R4R5R6R7
*32位 long-->32位 float
* float R4R5R6R7fcastl(int R4R5); !
* result = value1 // int-->float
* R6R7 = R4R5R6R7
*16位 int-->32位 float
* float R4R5R6R7fcastl(char R4);
* result = value1 // char-->float
* R7 = R4R5R6R7
*8位 char-->32位 float
*用 途:STC8系列MCU
*作 者:许意义
*版 本:2.00
*日 期:2022-12-12
**********************************************************************************************/
LD_MD MACRO BYTE_X, INC_DPTR
MOV A,BYTE_X
MOVX @DPTR,A
IFINC_DPTR
INC DPTR
ENDIF
ENDM
ST_MD MACRO BYTE_X, INC_DPTR
MOVX A,@DPTR
MOV BYTE_X,A
IFINC_DPTR
INC DPTR
ENDIF
ENDM
WAIT MACRO
MOV A,#0x01
MOVX @DPTR,A
MOVX A,@DPTR
JB ACC.0,$-1
ENDM
//NOMOD51 SET (SMALL) DEBUG EP
//SET (SMALL) DEBUG EP
; 特殊功能寄存器和位
P_SW2 DATA 0BAH ; Bit7: EAXFR
ACC DATA 0E0H
B DATA 0F0H
PSW DATA 0D0H
SP DATA 81H
DPL DATA 82H
DPH DATA 83H
IE DATA 0A8H
OV BIT 0D0H.2
P BIT 0D0H.0
F0 BIT 0D0H.5
F1 BIT 0D0H.1
RS1 BIT 0D0H.4
RS0 BIT 0D0H.3
AC BIT 0D0H.6
CY BIT 0D0H.7
EA BIT 0A8H.7
; MODE= 1, 右移(clock:3-18);MODE= 2, 左移(clock:3-18);MODE= 3, 数据规格化(clock:3-20)
; MODE= 4, 16位乘法(clock:10);MODE= 5, 16位除法(clock:9);MODE= 6, 32位/16位(clock:17)
ARCON DATA 0FCF6H ; Bit: MODE, Bit: SC
OPCON DATA 0FCF7H ; Bit6: MDOV,Bit1: RST,Bit0: ENOP
MD3 DATA 0FCF0H
MD2 DATA 0FCF1H
MD1 DATA 0FCF2H
MD0 DATA 0FCF3H
MD5 DATA 0FCF4H
MD4 DATA 0FCF5H
?PR?_FCASTL?FCASTL SEGMENT CODE
EXTRN CODE (?C?LNEG)
PUBLIC ?C?FCASTL
PUBLIC ?C?FCASTI
PUBLIC ?C?FCASTC
RSEG?PR?_FCASTL?FCASTL
?C?FCASTL:
MOV B, #0x20+0x7E // long-->float
SJMP FCASTC_002_
?C?FCASTI:
MOV B, #0x10+0x7E // int-->float
SJMP FCASTC_001_
?C?FCASTC:
MOV B, #0x08+0x7E // char-->float
MOV R5, #0x00
FCASTC_001_:
MOV R6, #0x00
MOV R7, #0x00
FCASTC_002_:
RLC A
MOV F0, C
JNB F0, FCASTC_003_
LCALL ?C?LNEG
FCASTC_003_:
PUSH IE
CLR EA
PUSH P_SW2
ORL P_SW2,#0x80
MOV DPTR, #MD3
LD_MD R4, 1
LD_MD R5, 1
LD_MD R6, 1
LD_MD R7, 0
MOV DPTR, #ARCON
LD_MD #0x60, +1 // 32位规格化左移(clock:3-20)
WAIT
MOV DPTR, #ARCON
MOVX A, @DPTR
ANL A, #0x1F
XCH A, B
CLR C
SUBB A, B // 指数 --> R4
MOV C, F0
RRC A
MOV R4, A
MOV DPTR, #MD3 // 小数 --> R5R6R7
MOVX A, @DPTR
MOV ACC.7, C
MOV R5, A
INC DPTR
ST_MD R6,+1
ST_MD R7,0
POP P_SW2
POP IE
RET
END
这是官方给的使用MDU16加速的整数转单精度程序,在主函数和中断同时使用这个程序会导致输出结果符号丢失。
这里看到符号保存在中断保护之前 浮点转整数好像也有一样的问题 如果仅简单应用
变量符号可否分开保存 请从此处下载官方LIB库
深圳国芯人工智能有限公司-库函数
王昱顺 发表于 2026-6-30 18:21
请从此处下载官方LIB库
深圳国芯人工智能有限公司-库函数
原来还有最新版的,好像是没问题了
页:
[1]