⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ancillary.asm

📁 PIC单片机的汇编源码合集,应用比较广泛,设计程序时可做子程序来用
💻 ASM
字号:
           IFNDEF      ANCILLARY1
            #DEFINE     ANCILLARY1
;*******************************
;下溢标志置1
SETFUN      BSF         FPFLAGS,FUN ;下溢标志置1
            BTFSS       FPFLAGS,SAT ;检测是否允许饱和
            RETLW       0xFF        ;带错误标志返回
            MOVLW       0x01        ;浮点数所能表示的最小值
            MOVWF       EXP1        ;0x 01 00 00
            CLRF        ARGBL1      
            CLRF        ARGBH1
            RLF         SIGN,F
            RRF         ARGBH1,F    ;得到合适的符号位
            RETLW       0xFF        
;********************************************************
;本程序实现设置IOV位
SETIOV      BSF         FPFLAGS,IOV ;IOV位置1
            BTFSS       FPFLAGS,SAT ;检测饱和允许位
            RETLW       0xFF        ;
            CLRF        ARGBH1      ;结果取饱和值
            BTFSS       SIGN,MSB    ;
            MOVLW       0xFF
            MOVWF       ARGBH1      ;SIGN = 0, 0x 7F FF
            MOVWF       ARGBL1      ;SIGN = 1, 0x 80 00
            RLF         SIGN,F
            RRF         ARGBH1,F
            RETLW       0xFF        ;返回错误标志
;***************************************************
;本程序实现设置FOV位
SETFOV      BSF         FPFLAGS,FOV ;上溢标志置1
            BTFSS       FPFLAGS,SAT ;检测饱和允许位
            RETLW       0xFF        
            MOVLW       0xFF
            MOVWF       EXP1        ;饱和数
            MOVWF       ARGBH1      ; 0x 7F FF FF
            MOVWF       ARGBL1      
            RLF         SIGN,F
            RRF         ARGBH1,F
            RETLW       0xFF        
;*****************************************************
;本程序实现将结果请0
RES024      CLRF        ARGBH1      ;结果为0
            CLRF        ARGBL1
            CLRF        EXP1
            RETLW       0
;*****************************************************
;本程序实现设置定义域错误标志
DOMERR24    BSF         FPFLAGS,DOM ;定义域错误
            RETLW       0xFF
;*****************************************************
;本程序实现设置FDZ位
SETFDZ      BSF         FPFLAGS,FDZ
            RETLW       0xFF
;*****************************************************
;本程序实现去掉最高位隐含的1
FIXSIGN24   BTFSS       SIGN,MSB
            BCF         ARGBH1,MSB	
            RETLW       0
;********************************************************
;多项式计算宏定义
POL	macro		COF,N,ROUND

;多项式计算。阶次N, 自变量AARG,系数COF,
;假定当N>1时,AARG已经复制到DARG中.
;结果在AARG中

;	ROUND = 0	no rounding is enabled; can be previously enabled
;	ROUND = 1	rounding is enabled
;	ROUND = 2	rounding is enabled then disabled before last add
;	ROUND = 3	rounding is assumed disabled then enabled before last add
;	ROUND = 4	rounding is assumed enabled and then disabled before last
;			add if DARGB3,RND is clear
;	ROUND = 5	rounding is assumed disabled and then enabled before last
;			add if DARGB3,RND is set

            local       i,j
	variable	i = N, j = 0

          if          ROUND == 1  ||  ROUND == 2
            BSF         FPFLAGS,RND
          endif

            MOVLW       COF#v(i)
            MOVWF       BEXP

          while       j <= 2
            MOVLW       COF#v(i)#v(j)
            MOVWF       BARGB#v(j)
	variable	j = j + 1
          endw
            CALL        FPM32
	variable	i = i - 1
            MOVLW       COF#v(i)
            MOVWF       BEXP
	variable	j = 0
          while       j <= 2
            MOVLW       COF#v(i)#v(j)
            MOVWF       BARGB#v(j)
	variable	j = j + 1
          endw
            CALL        FPA32
	variable	i = i - 1
       while       i >= 0
            MOVF        DEXP,W
            MOVWF       BEXP
            MOVF        DARGB0,W
            MOVWF       BARGB0
            MOVF        DARGB1,W
            MOVWF       BARGB1
            MOVF        DARGB2,W
            MOVWF       BARGB2
            CALL        FPM32
            MOVLW       COF#v(i)
            MOVWF       BEXP
	variable	j = 0
           while       j <= 2
            MOVLW       COF#v(i)#v(j)
            MOVWF       BARGB#v(j)
	variable	j = j + 1
           endw
         if          i == 0
           if          ROUND == 2
            BCF         FPFLAGS,RND
           endif
           if          ROUND == 3
            BSF         FPFLAGS,RND
           endif
           if          ROUND == 4
            BTFSS       DARGB3,RND
            BCF         FPFLAGS,RND
           endif
           if          ROUND == 5
            BTFSC       DARGB3,RND
            BSF         FPFLAGS,RND
           endif
         endif
            CALL        FPA32
	variable	i = i - 1
       endw
	endm
;**********************************************************************
POLL1	macro		COF,N,ROUND

;	32 bit evaluation of polynomial of degree N, PN(AARG), with coefficients COF,
;	with leading coefficient of one, and where AARG is assumed have been be saved
;	in DARG when N>1.  The result is in AARG.

;	ROUND = 0	no rounding is enabled; can be previously enabled
;	ROUND = 1	rounding is enabled
;	ROUND = 2	rounding is enabled then disabled before last add
;	ROUND = 3	rounding is assumed disabled then enabled before last add
;	ROUND = 4	rounding is assumed enabled and then disabled before last
;			add if DARGB3,RND is clear
;	ROUND = 5	rounding is assumed disabled and then enabled before last
;			add if DARGB3,RND is set

	local		i,j
	variable	i = N, j = 0

	variable	i = i - 1

	if	ROUND == 1  ||  ROUND == 2

		BSF		FPFLAGS,RND

	endif

		MOVLW		COF#v(i)
		MOVWF		BEXP

	variable	j = 0

	while		j <= 2

		MOVLW		COF#v(i)#v(j)
		MOVWF		BARGB#v(j)

	variable	j = j + 1

	endw

		CALL		FPA32

	variable	i = i - 1

	while		i >= 0

		MOVF		DEXP,W
		MOVWF		BEXP
		MOVF		DARGB0,W
		MOVWF		BARGB0
		MOVF		DARGB1,W
		MOVWF		BARGB1
		MOVF		DARGB2,W
		MOVWF		BARGB2

		CALL		FPM32

		MOVLW		COF#v(i)
		MOVWF		BEXP

	variable	j = 0

	while		j <= 2

		MOVLW		COF#v(i)#v(j)
		MOVWF		BARGB#v(j)

	variable	j = j + 1

	endw

	if	i == 0

		if	ROUND == 2

		BCF		FPFLAGS,RND

		endif

		if	ROUND == 3

		BSF		FPFLAGS,RND

		endif

		if	ROUND == 4

		BTFSS		DARGB3,RND
		BCF		FPFLAGS,RND

		endif

		if	ROUND == 5

		BTFSC		DARGB3,RND
		BSF		FPFLAGS,RND

		endif

	endif

		CALL		FPA32

	variable	i = i - 1

	endw

	endm
      ENDIF

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -