汇编 64点FFT

发布于 2020-01-04  51 次阅读


;///
FFT64JS:	MOV       R8,DPL
		MOV       R9,DPH
		CALL      DATADX
		CALL      CLRXI
		CALL      DDJS1              ;第一次迭代(32个群)
		CALL      DDJS2		     ;第二次迭代(16个群)
		CALL      DDJS3		     ;第三次迭代(08个群)
		CALL      DDJS4		     ;第四次迭代(04个群)
		CALL      DDJS5		     ;第五次迭代(02个群)
		CALL      DDJS6		     ;第六次迭代(01个群)
		RET
;清虚部缓冲区
CLRXI:          CLR       A
		MOV       R2,#80H
		MOV       DPTR,#DATADXBUF_I
LCLRXI:		MOVX      @DPTR,A
		INC       DPL
		MOVX      @DPTR,A
		INC       DPL
		DJNZ      R2,LCLRXI
		RET
;
DATADX:		MOV       R1,#00H
LDATADX:	MOV       DPL,R8
		MOV       DPH,R9
		MOV       A,R1
		CALL      DXBP
		CLR       C
		RLC       A
		ADD       A,DPL
		MOV       DPL,A
		MOVX      A,@DPTR
		MOV       R2,A
		INC       DPL
		MOVX      A,@DPTR
		MOV       R3,A
		MOV       SFRPAGE,#00H
		MOV       A,R1                ;4*R1
		ADD       A,R1
		ADD       A,R1
		ADD       A,R1
		MOV       R0,A
		MOV       A,R2
		MOVX      @R0,A
		INC       R0
		MOV       A,R3
		MOVX      @R0,A
		INC       R0
		JB        ACC.7,DATADX1
		MOV       A,#00H
		MOVX      @R0,A
		INC       R0
		MOVX      @R0,A
		JMP       DATADX2
DATADX1:        MOV       A,#0FFH
		MOVX      @R0,A
		INC       R0
		MOVX      @R0,A
DATADX2:	INC       R1
		MOV       A,R1
		CJNE      A,#64,LDATADX
		RET
;///第一次迭代
DDJS1:		MOV       SFRPAGE,#03H
		MOV       R17,#00H
		MOV       WEIYIREG,#4               ;群内位移
LDD1:		MOV       R16,#1                    ;群内迭代循环次数  
		MOV       WN,#00H
		MOV       DPTR,#DATADXBUF_I
		MOV       A,R17
		MOV       B,#8
		MUL       AB
		ADD       A,DPL
		MOV       DPL,A
		MOV       R14,DPL
		MOV       R15,DPH
;
		MOV       DPTR,#DATADXBUF_R
		MOV       A,R17
		MOV       B,#8
		MUL       AB
		ADD       A,DPL
		MOV       DPL,A
		MOV       R12,DPL
		MOV       R13,DPH

LDD1_1:         CALL      QNDD1
		MOV       A,WN
		ADD       A,#0
		MOV       WN,A
		DJNZ      R16,LDD1_1
		INC       R17
		MOV       A,R17
       	        CJNE      A,#32,LDD1                ;32个群
		RET
;///第二次迭代
DDJS2:		MOV       SFRPAGE,#03H
		MOV       R17,#00H
		MOV       WEIYIREG,#8               ;群内位移
LDD2:		MOV       R16,#2                    ;群内迭代循环次数  
		MOV       WN,#00H
		MOV       DPTR,#DATADXBUF_I
		MOV       A,R17
		MOV       B,#16
		MUL       AB
		ADD       A,DPL
		MOV       DPL,A
		MOV       R14,DPL
		MOV       R15,DPH
;
		MOV       DPTR,#DATADXBUF_R
		MOV       A,R17
		MOV       B,#16
		MUL       AB
		ADD       A,DPL
		MOV       DPL,A
		MOV       R12,DPL
		MOV       R13,DPH

LDD2_1:         CALL      QNDD2
		MOV       A,WN
		ADD       A,#16
		MOV       WN,A
		DJNZ      R16,LDD2_1
		INC       R17
		MOV       A,R17
       	        CJNE      A,#16,LDD2                 ;16个群
		RET
;///第三次迭代
DDJS3:		MOV       SFRPAGE,#03H
		MOV       R17,#00H
		MOV       WEIYIREG,#16              ;群内位移
LDD3:		MOV       R16,#4                    ;群内迭代循环次数  
		MOV       WN,#00H
		MOV       DPTR,#DATADXBUF_I
		MOV       A,R17
		MOV       B,#32
		MUL       AB
		ADD       A,DPL
		MOV       DPL,A
		MOV       R14,DPL
		MOV       R15,DPH
;
		MOV       DPTR,#DATADXBUF_R
		MOV       A,R17
		MOV       B,#32
		MUL       AB
		ADD       A,DPL
		MOV       DPL,A
		MOV       R12,DPL
		MOV       R13,DPH

LDD3_1:         CALL      QNDD2
		MOV       A,WN
		ADD       A,#08H
		MOV       WN,A
		DJNZ      R16,LDD3_1
		INC       R17
		MOV       A,R17
       	        CJNE      A,#8,LDD3                 ;8个群
		RET
;///第四次迭代
DDJS4:		MOV       SFRPAGE,#03H
		MOV       R17,#00H
		MOV       WEIYIREG,#32              ;群内位移
LDD4:		MOV       R16,#8                    ;群内迭代循环次数  
		MOV       WN,#00H
		MOV       DPTR,#DATADXBUF_I
		MOV       A,R17
		MOV       B,#64
		MUL       AB
		ADD       A,DPL
		MOV       DPL,A
		MOV       R14,DPL
		MOV       R15,DPH
;
		MOV       DPTR,#DATADXBUF_R
		MOV       A,R17
		MOV       B,#64
		MUL       AB
		ADD       A,DPL
		MOV       DPL,A
		MOV       R12,DPL
		MOV       R13,DPH

LDD4_1:         CALL      QNDD2
		MOV       A,WN
		ADD       A,#04H
		MOV       WN,A
		DJNZ      R16,LDD4_1
		INC       R17
		MOV       A,R17
       	        CJNE      A,#4,LDD4                  ;4个群
		RET
;///第五次迭代
DDJS5:		MOV       SFRPAGE,#03H
		MOV       R17,#00H
		MOV       WEIYIREG,#64               ;群内位移
LDD5:		MOV       R16,#16                    ;群内迭代循环次数  
		MOV       WN,#00H
		MOV       DPTR,#DATADXBUF_I
		MOV       A,R17
		MOV       B,#128
		MUL       AB
		ADD       A,DPL
		MOV       DPL,A
		MOV       R14,DPL
		MOV       R15,DPH
;
		MOV       DPTR,#DATADXBUF_R
		MOV       A,R17
		MOV       B,#128
		MUL       AB
		ADD       A,DPL
		MOV       DPL,A
		MOV       R12,DPL
		MOV       R13,DPH

LDD5_1:         CALL      QNDD2
		MOV       A,WN
		ADD       A,#02H
		MOV       WN,A
		DJNZ      R16,LDD5_1
		INC       R17
		MOV       A,R17
       	        CJNE      A,#2,LDD5
		RET
;///第六次迭代
DDJS6:		MOV       SFRPAGE,#03H
		MOV       R17,#00H
		MOV       WEIYIREG,#128		     ;群内位移
		MOV       R16,#32                    ;群内迭代循环次数  
		MOV       WN,#00H
		MOV       DPTR,#DATADXBUF_I
		MOV       R14,DPL
		MOV       R15,DPH
;
		MOV       DPTR,#DATADXBUF_R
		MOV       R12,DPL
		MOV       R13,DPH
;
LDD6_1:	        CALL      QNDD2
		INC       WN
		DJNZ      R16,LDD6_1
		RET
;//群内迭代(第一种方式16X16)
QNDD1:		MOV       DPL,R12            ;X(0)R
		MOV       DPH,R13
		MOVX      A,@DPTR
       	        MOV       R0,A
		INC       DPL
		MOVX      A,@DPTR
       	        MOV       R1,A
;
		MOV       DPTR,#FFTX0R       ;32位寄存器
		MOV       A,R0
		MOVX      @DPTR,A
		INC       DPL
		MOV       A,R1
		MOVX      @DPTR,A
;
		MOV       DPL,R14           ;X(0)I
		MOV       DPH,R15
		MOVX      A,@DPTR
       	        MOV       R0,A
		INC       DPL
		MOVX      A,@DPTR
       	        MOV       R1,A
;
		MOV       DPTR,#FFTX0I      ;32位寄存器
		MOV       A,R0
		MOVX      @DPTR,A
		INC       DPL
		MOV       A,R1
		MOVX      @DPTR,A
;
		MOV       A,R12              ;X(NEXT)R
		ADD       A,WEIYIREG
		MOV       DPL,A
		MOV       DPH,R13
		MOVX      A,@DPTR
       	        MOV       R0,A
		INC       DPL
		MOVX      A,@DPTR
       	        MOV       R1,A
;
		MOV       DPTR,#FFTX1R      ;32位寄存器
		MOV       A,R0
		MOVX      @DPTR,A
		INC       DPL
		MOV       A,R1
		MOVX      @DPTR,A
;
		MOV       A,R14              ;X(NEXT)I
		ADD       A,WEIYIREG
		MOV       DPL,A
		MOV       DPH,R15
		MOVX      A,@DPTR
       	        MOV       R0,A
		INC       DPL
		MOVX      A,@DPTR
       	        MOV       R1,A
;
		MOV       DPTR,#FFTX1I      ;32位寄存器
		MOV       A,R0
		MOVX      @DPTR,A
		INC       DPL
		MOV       A,R1
		MOVX      @DPTR,A
;///
		MOV       DPTR,#FFTX0R       ;X(0)R
		MOVX      A,@DPTR
		MOV       R0,A
		INC       DPL
		MOVX      A,@DPTR
		MOV       R1,A
;
		MOV       DPTR,#FFTX1R       ;X(0)R+X(NEXT)R
		MOVX      A,@DPTR
		ADD       A,R0
		MOV       R0,A
		INC       DPL
		MOVX      A,@DPTR
		ADDC      A,R1
		MOV       R1,A
;
		MOV       A,R1
		JNB       ACC.7,QNDD1_1
		MOV       MAC0ACC3,#0FFH
		MOV       MAC0ACC2,#0FFH
		JMP       QNDD1_2

QNDD1_1:	MOV       MAC0ACC3,#00H
		MOV       MAC0ACC2,#00H
QNDD1_2:	MOV       MAC0ACC1,R1
		MOV       MAC0ACC0,R0
		MOV       R2,#15
LQNDD1_2:	MOV       MAC0CF,#20H
		NOP
		DJNZ      R2,LQNDD1_2
;
		MOV       DPL,R12               ;存G(0)R=X(0)R+X(NEXT)R
		MOV       DPH,R13
		MOV       A,MAC0ACC0
		MOVX      @DPTR,A
		INC       DPL
		MOV       A,MAC0ACC1
		MOVX      @DPTR,A
		INC       DPL
		MOV       A,MAC0ACC2
		MOVX      @DPTR,A
		INC       DPL
		MOV       A,MAC0ACC3
		MOVX      @DPTR,A
;
		MOV       DPTR,#FFTX0R       ;X(0)R
		MOVX      A,@DPTR
		MOV       R0,A
		INC       DPL
		MOVX      A,@DPTR
		MOV       R1,A
;
		MOV       DPTR,#FFTX1R       ;-X(NEXT)R
		MOVX      A,@DPTR
		CPL       A
		ADD       A,#01H
		MOV       R2,A
		INC       DPL
		MOVX      A,@DPTR
		CPL       A
		ADDC      A,#00H
		MOV       R3,A
;
		MOV       A,R0                ;X(0)R-X(NEXT)R
		ADD       A,R2
		MOV       R0,A
		MOV       A,R1
		ADDC      A,R3
		MOV       R1,A
;
		MOV       A,R1
		JNB       ACC.7,QNDD1_3
		MOV       MAC0ACC3,#0FFH
		MOV       MAC0ACC2,#0FFH
		JMP       QNDD1_4

QNDD1_3:	MOV       MAC0ACC3,#00H
		MOV       MAC0ACC2,#00H
QNDD1_4:	MOV       MAC0ACC1,R1
		MOV       MAC0ACC0,R0
		MOV       R2,#15
LQNDD1_4:	MOV       MAC0CF,#20H
		NOP
		DJNZ      R2,LQNDD1_4
;	
		MOV       A,R12            ;X(NEXT)R=X(0)R-X(NEXT)R
		ADD       A,WEIYIREG
		MOV       DPL,A
		MOV       DPH,R13
		MOV       A,MAC0ACC0
		MOVX      @DPTR,A
		INC       DPL
		MOV       A,MAC0ACC1
		MOVX      @DPTR,A
		INC       DPL
		MOV       A,MAC0ACC2
		MOVX      @DPTR,A
		INC       DPL
		MOV       A,MAC0ACC3
		MOVX      @DPTR,A
;
		MOV       A,R12
		ADD       A,#04H
		MOV       R12,A
		MOV       A,R14
		ADD       A,#04H
		MOV       R14,A
		RET

;//群内迭代(第二种方式32X16)
QNDD2:		MOV       DPL,R12            ;X(0)R
		MOV       DPH,R13
		MOVX      A,@DPTR
       	        MOV       R0,A
		INC       DPL
		MOVX      A,@DPTR
       	        MOV       R1,A
		INC       DPL
		MOVX      A,@DPTR
       	        MOV       R2,A
		INC       DPL
		MOVX      A,@DPTR
       	        MOV       R3,A
;
		MOV       DPTR,#FFTX0R       ;32位寄存器
		MOV       A,R0
		MOVX      @DPTR,A
		INC       DPL
		MOV       A,R1
		MOVX      @DPTR,A
		INC       DPL
		MOV       A,R2
		MOVX      @DPTR,A
		INC       DPL
		MOV       A,R3
		MOVX      @DPTR,A
;
		MOV       DPL,R14           ;X(0)I
		MOV       DPH,R15
		MOVX      A,@DPTR
       	        MOV       R0,A
		INC       DPL
		MOVX      A,@DPTR
       	        MOV       R1,A
		INC       DPL
		MOVX      A,@DPTR
       	        MOV       R2,A
		INC       DPL
		MOVX      A,@DPTR
       	        MOV       R3,A
;
		MOV       DPTR,#FFTX0I      ;32位寄存器
		MOV       A,R0
		MOVX      @DPTR,A
		INC       DPL
		MOV       A,R1
		MOVX      @DPTR,A
		INC       DPL
		MOV       A,R2
		MOVX      @DPTR,A
		INC       DPL
		MOV       A,R3
		MOVX      @DPTR,A
;
		MOV       A,R12              ;X(NEXT)R
		ADD       A,WEIYIREG
		MOV       DPL,A
		MOV       DPH,R13
		MOVX      A,@DPTR
       	        MOV       R0,A
		INC       DPL
		MOVX      A,@DPTR
       	        MOV       R1,A
		INC       DPL
		MOVX      A,@DPTR
       	        MOV       R2,A
		INC       DPL
		MOVX      A,@DPTR
       	        MOV       R3,A
		MOV       DPTR,#FFTX1R      ;32位寄存器
		MOV       A,R0
		MOVX      @DPTR,A
		INC       DPL
		MOV       A,R1
		MOVX      @DPTR,A
		INC       DPL
		MOV       A,R2
		MOVX      @DPTR,A
		INC       DPL
		MOV       A,R3
		MOVX      @DPTR,A
;
		MOV       A,R14              ;X(NEXT)I
		ADD       A,WEIYIREG
		MOV       DPL,A
		MOV       DPH,R15
		MOVX      A,@DPTR
       	        MOV       R0,A
		INC       DPL
		MOVX      A,@DPTR
       	        MOV       R1,A
		INC       DPL
		MOVX      A,@DPTR
       	        MOV       R2,A
		INC       DPL
		MOVX      A,@DPTR
       	        MOV       R3,A
		MOV       DPTR,#FFTX1I      ;32位寄存器
		MOV       A,R0
		MOVX      @DPTR,A
		INC       DPL
		MOV       A,R1
		MOVX      @DPTR,A
		INC       DPL
		MOV       A,R2
		MOVX      @DPTR,A
		INC       DPL
		MOV       A,R3
		MOVX      @DPTR,A
;
		MOV       A,WN
		ADD       A,WN
		MOV       DPTR,#TABCOS       ;COS
		ADD       A,DPL
		MOV       DPL,A
		MOV       A,DPH
		ADDC      A,#00H
		MOV       DPH,A
		CLR       A
		MOVC      A,@A+DPTR
		MOV       COSREG_H,A
		INC       DPTR
		CLR       A
		MOVC      A,@A+DPTR
		MOV       COSREG_L,A
;
		MOV       DPTR,#FFTX1R
		MOVX      A,@DPTR
		MOV       R0,A
		INC       DPL
		MOVX      A,@DPTR
		MOV       R1,A
		INC       DPL
		MOVX      A,@DPTR
		MOV       R2,A
		INC       DPL
		MOVX      A,@DPTR
		MOV       R3,A
;	
		MOV       R8,COSREG_L        ;X(NEXT)R*COS
		MOV       R9,COSREG_H
		CALL      FFTMUL32X16        ;32位乘16位(带符号)
		MOV       DPTR,#FFTREG1 
		MOV       A,R4
		MOVX      @DPTR,A
		INC       DPL
		MOV       A,R5
		MOVX      @DPTR,A
		INC       DPL
		MOV       A,R6
		MOVX      @DPTR,A
		INC       DPL
		MOV       A,R7
		MOVX      @DPTR,A
;
		MOV       A,WN
		ADD       A,WN
		MOV       DPTR,#TABSIN       ;X(NEXT)I*SIN
		ADD       A,DPL
		MOV       DPL,A
		MOV       A,DPH
		ADDC      A,#00H
		MOV       DPH,A
		CLR       A
		MOVC      A,@A+DPTR
		MOV       SINREG_H,A
		INC       DPTR
		CLR       A
		MOVC      A,@A+DPTR
		MOV       SINREG_L,A
;
		MOV       DPTR,#FFTX1I
		MOVX      A,@DPTR
		MOV       R0,A
		INC       DPL
		MOVX      A,@DPTR
		MOV       R1,A
		INC       DPL
		MOVX      A,@DPTR
		MOV       R2,A
		INC       DPL
		MOVX      A,@DPTR
		MOV       R3,A
;
		MOV       R8,SINREG_L
		MOV       R9,SINREG_H
		CALL      FFTMUL32X16        ;32位乘16位(带符号)
;
		CLR       C                  ;X(NEXT)R*COS-X(NEXT)I*SIN
		MOV       DPTR,#FFTREG1
		MOVX      A,@DPTR
		SUBB      A,R4
		MOVX      @DPTR,A
		INC       DPL
		MOVX      A,@DPTR
		SUBB      A,R5
		MOVX      @DPTR,A
		INC       DPL
		MOVX      A,@DPTR
		SUBB      A,R6
		MOVX      @DPTR,A
		INC       DPL
		MOVX      A,@DPTR
		SUBB      A,R7
		MOVX      @DPTR,A
;
		MOV       DPTR,#FFTX0R
		MOVX      A,@DPTR
		MOV       R0,A
		INC       DPL
		MOVX      A,@DPTR
		MOV       R1,A
		INC       DPL
		MOVX      A,@DPTR
		MOV       R2,A
		INC       DPL
		MOVX      A,@DPTR
		MOV       R3,A
;	
		MOV       DPTR,#FFTREG1       ;G(0)R=X(0)R+X(NEXT)R*COS-X(NEXT)I*SIN
		MOVX      A,@DPTR
		ADD       A,R0
		MOV       R0,A
		INC       DPL
		MOVX      A,@DPTR
		ADDC      A,R1
		MOV       R1,A
		INC       DPL
		MOVX      A,@DPTR
		ADDC      A,R2
		MOV       R2,A
		INC       DPL
		MOVX      A,@DPTR
		ADDC      A,R3
		MOV       R3,A
;
		MOV       DPL,R12               ;存G(0)R
		MOV       DPH,R13
		MOV       A,R0
		MOVX      @DPTR,A
		INC       DPL
		MOV       A,R1
		MOVX      @DPTR,A
		INC       DPL
		MOV       A,R2
		MOVX      @DPTR,A
		INC       DPL
		MOV       A,R3
		MOVX      @DPTR,A
;
		MOV       DPTR,#FFTREG1        ;-[X(NEXT)R*COS-X(NEXT)I*SIN]
		MOVX      A,@DPTR
		CPL       A
		ADD       A,#01H
		MOV       R0,A
		INC       DPL
		MOVX      A,@DPTR
		CPL       A
		ADDC      A,#00H
		MOV       R1,A
		INC       DPL
		MOVX      A,@DPTR
		CPL       A
		ADDC      A,#00H
		MOV       R2,A
		INC       DPL
		MOVX      A,@DPTR
		CPL       A
		ADDC      A,#00H
		MOV       R3,A
;
		MOV       DPTR,#FFTX0R     ;X(0)R-[X(NEXT)R*COS-X(NEXT)I*SIN]
		MOVX      A,@DPTR
	        ADD       A,R0
       	        MOV       R0,A
		INC       DPL
		MOVX      A,@DPTR
		ADDC      A,R1
       	        MOV       R1,A               
		INC       DPL
		MOVX      A,@DPTR 
                ADDC      A,R2
       	        MOV       R2,A
		INC       DPL
		MOVX      A,@DPTR
		ADDC      A,R3
       	        MOV       R3,A
;	
		MOV       A,R12            ;X(NEXT)R=X(0)R-[X(NEXT)R*COS-X(NEXT)I*SIN]
		ADD       A,WEIYIREG
		MOV       DPL,A
		MOV       DPH,R13
		MOV       A,R0
		MOVX      @DPTR,A
		INC       DPL
		MOV       A,R1
		MOVX      @DPTR,A
		INC       DPL
		MOV       A,R2
		MOVX      @DPTR,A
		INC       DPL
		MOV       A,R3
		MOVX      @DPTR,A
;////
		MOV       DPTR,#FFTX1R       ;X(NEXT)R 32位寄存器
		MOVX      A,@DPTR
		MOV       R0,A
		INC       DPL
		MOVX      A,@DPTR
		MOV       R1,A
		INC       DPL
		MOVX      A,@DPTR
		MOV       R2,A
		INC       DPL
		MOVX      A,@DPTR
		MOV       R3,A
;
		MOV       R8,SINREG_L        ;X(NEXT)R*SIN
		MOV       R9,SINREG_H
		CALL      FFTMUL32X16        ;32位乘16位(带符号)
		MOV       DPTR,#FFTREG1
		MOV       A,R4
		MOVX      @DPTR,A
		INC       DPL
		MOV       A,R5
		MOVX      @DPTR,A
		INC       DPL
		MOV       A,R6
		MOVX      @DPTR,A
		INC       DPL
		MOV       A,R7
		MOVX      @DPTR,A
;
		MOV       DPTR,#FFTX1I       ;X(NEXT)I 32位寄存器
		MOVX      A,@DPTR
		MOV       R0,A
		INC       DPL
		MOVX      A,@DPTR
		MOV       R1,A
		INC       DPL
		MOVX      A,@DPTR
		MOV       R2,A
		INC       DPL
		MOVX      A,@DPTR
		MOV       R3,A
;
		MOV       R8,COSREG_L        ;X(NEXT)I*COS
		MOV       R9,COSREG_H
		CALL      FFTMUL32X16        ;32位乘16位(带符号)
;
		MOV       DPTR,#FFTREG1      ;X(NEXT)R*SIN+X(NEXT)I*COS
		MOVX      A,@DPTR
		ADD       A,R4
		MOVX      @DPTR,A
		INC       DPL
		MOVX      A,@DPTR
		ADDC      A,R5
		MOVX      @DPTR,A
		INC       DPL
		MOVX      A,@DPTR
		ADDC      A,R6
		MOVX      @DPTR,A
		INC       DPL
		MOVX      A,@DPTR
		ADDC      A,R7
		MOVX      @DPTR,A
;
		MOV       DPTR,#FFTX0I       ;X(0)I 32位寄存器
		MOVX      A,@DPTR
		MOV       R0,A
		INC       DPL
		MOVX      A,@DPTR
		MOV       R1,A
		INC       DPL
		MOVX      A,@DPTR
		MOV       R2,A
		INC       DPL
		MOVX      A,@DPTR
		MOV       R3,A
;	
		MOV       DPTR,#FFTREG1      ;G(0)I=X(0)I+X(NEXT)R*SIN+X(NEXT)I*COS
		MOVX      A,@DPTR
		ADD       A,R0
		MOV       R0,A
		INC       DPL
		MOVX      A,@DPTR
		ADDC      A,R1
		MOV       R1,A
		INC       DPL
		MOVX      A,@DPTR
		ADDC      A,R2
		MOV       R2,A
		INC       DPL
		MOVX      A,@DPTR
		ADDC      A,R3
		MOV       R3,A
;
		MOV       DPL,R14              ;存G(0)I
		MOV       DPH,R15
		MOV       A,R0
		MOVX      @DPTR,A
		INC       DPL
		MOV       A,R1
		MOVX      @DPTR,A
		INC       DPL
		MOV       A,R2
		MOVX      @DPTR,A
		INC       DPL
		MOV       A,R3
		MOVX      @DPTR,A
;
		MOV       DPTR,#FFTREG1        ;-[X(NEXT)R*SIN+X(NEXT)I*COS]
		MOVX      A,@DPTR
		CPL       A
		ADD       A,#01H
		MOV       R0,A
		INC       DPL
		MOVX      A,@DPTR
		CPL       A
		ADDC      A,#00H
		MOV       R1,A
		INC       DPL
		MOVX      A,@DPTR
		CPL       A
		ADDC      A,#00H
		MOV       R2,A
		INC       DPL
		MOVX      A,@DPTR
		CPL       A
		ADDC      A,#00H
		MOV       R3,A
;
		MOV       DPTR,#FFTX0I     ;X(0)I-[X(NEXT)R*SIN+X(NEXT)I*COS]
		MOVX      A,@DPTR
	        ADD       A,R0
       	        MOV       R0,A
		INC       DPL
		MOVX      A,@DPTR
		ADDC      A,R1
       	        MOV       R1,A               
		INC       DPL
		MOVX      A,@DPTR 
                ADDC      A,R2
       	        MOV       R2,A
		INC       DPL
		MOVX      A,@DPTR
		ADDC      A,R3
       	        MOV       R3,A
;	
		MOV       A,R14            ;X(NEXT)I=X(0)I-[X(NEXT)R*SIN+X(NEXT)I*COS]
		ADD       A,WEIYIREG
		MOV       DPL,A
		MOV       DPH,R15
		MOV       A,R0
		MOVX      @DPTR,A
		INC       DPL
		MOV       A,R1
		MOVX      @DPTR,A
		INC       DPL
		MOV       A,R2
		MOVX      @DPTR,A
		INC       DPL
		MOV       A,R3
		MOVX      @DPTR,A
;
		MOV       A,R12
		ADD       A,#04H
		MOV       R12,A
		MOV       A,R14
		ADD       A,#04H
		MOV       R14,A
		RET
;/////
XBHLJS:		MOV       SFRPAGE,#03H
		MOV       A,R3
		JB        ACC.7,XBHLJSR1
		MOV       MAC0OVR,#00H
		JMP       XBHLJSR2
XBHLJSR1:	MOV       MAC0OVR,#0FFH
XBHLJSR2:	MOV       MAC0ACC0,R0
		MOV       MAC0ACC1,R1
		MOV       MAC0ACC2,R2
		MOV       MAC0ACC3,R3
		MOV       R2,#15
LXBHLJSR2:	MOV       MAC0CF,#30H
		DJNZ      R2,LXBHLJSR2
		NOP
		MOV       MAC0CF,#01H
		MOV       MAC0AH,MAC0ACC1
		MOV       MAC0AL,MAC0ACC0
		MOV       MAC0BH,MAC0ACC1
		MOV       MAC0BL,MAC0ACC0
		NOP
		NOP
		MOV       R4,MAC0ACC0
		MOV       R5,MAC0ACC1
		MOV       R6,MAC0ACC2
		MOV       R7,MAC0ACC3
;
		MOV       R0,R8
		MOV       R1,R9
		MOV       R2,R10
		MOV       R3,R11
		MOV       A,R3
		JB        ACC.7,XBHLJSI1
		MOV       MAC0OVR,#00H
		JMP       XBHLJSI2
XBHLJSI1:	MOV       MAC0OVR,#0FFH
XBHLJSI2:	MOV       MAC0ACC0,R0
		MOV       MAC0ACC1,R1
		MOV       MAC0ACC2,R2
		MOV       MAC0ACC3,R3
		MOV       R2,#15
LXBHLJSI2:	MOV       MAC0CF,#30H
		DJNZ      R2,LXBHLJSI2
		NOP
		MOV       MAC0CF,#01H
		MOV       MAC0AH,MAC0ACC1
		MOV       MAC0AL,MAC0ACC0
		MOV       MAC0BH,MAC0ACC1
		MOV       MAC0BL,MAC0ACC0
		NOP
		MOV       B,R5
		MOV       A,R4
		ADD       A,MAC0ACC0
		MOV       R5,A
		MOV       A,B
		ADDC      A,MAC0ACC1
		MOV       R4,A
		MOV       A,R6
		ADDC      A,MAC0ACC2
		MOV       R3,A
		MOV       A,R7
		ADDC      A,MAC0ACC3
		MOV       R2,A
		CALL      SQUAR
;
		MOV       00H,03H
		MOV       01H,02H
		MOV       R2,R12
		MOV       R3,R13
		CALL      MUL16X16
		RET
;//缓冲区数据倒序 
;///码位倒读
DXBP:        	JB        ACC.0,DXBP1_1
		MOV       C,ACC.5
		CLR       ACC.5
		MOV       ACC.0,C
		JMP       DXBP2
DXBP1_1:        MOV       C,ACC.5
		SETB      ACC.5
		MOV       ACC.0,C
DXBP2:          JB        ACC.1,DXBP2_1
		MOV       C,ACC.4
		CLR       ACC.4
		MOV       ACC.1,C
		JMP       DXBP3
DXBP2_1:        MOV       C,ACC.4
		SETB      ACC.4
		MOV       ACC.1,C
DXBP3:          JB        ACC.2,DXBP3_1
		MOV       C,ACC.3
		CLR       ACC.3
		MOV       ACC.2,C
		RET
DXBP3_1:        MOV       C,ACC.3
		SETB      ACC.3
		MOV       ACC.2,C
		RET
;////////////
FFTMUL32X16:    MOV       A,R3
		CLR       F0
		JNB       ACC.7,FFTMUL32X16_1
		SETB      F0
		MOV       A,R0
		CPL	  A
		ADD       A,#01H
		MOV       R0,A
		MOV       A,R1
		CPL	  A
		ADDC      A,#00H
		MOV       R1,A
		MOV       A,R2
		CPL	  A
		ADDC      A,#00H
		MOV       R2,A
		MOV       A,R3
		CPL	  A
		ADDC      A,#00H
		MOV       R3,A
;
FFTMUL32X16_1:  MOV       A,R9
		CLR       F1
		JNB       ACC.7,FFTMUL32X16_2
		SETB      F1
		MOV       A,R8
		CPL       A
		ADD       A,#0H
		MOV       R8,A
		MOV       A,R9
		CPL       A
		ADDC      A,#00H
		MOV       R9,A
FFTMUL32X16_2:  PUSH      02H
		PUSH      03H
		MOV       R2,R8
		MOV       R3,R9
		CALL      MUL16X16
		POP       01H
		POP       00H
		PUSH      04H
		PUSH      05H
		PUSH      07H
		PUSH      06H
		MOV       R2,R8
		MOV       R3,R9
		CALL      MUL16X16
		POP       ACC
		ADD       A,R4
		MOV       R4,A
		POP       ACC
		ADDC      A,R5
		MOV       R5,A
		MOV       A,R6
		ADDC      A,#00H
		MOV       R6,A
		MOV       A,R7
		ADDC      A,#00H
		MOV       R7,A
		POP       09H
		POP       08H
;
		CLR       C
		MOV       A,R8
		RLC       A
		MOV       A,R9
		RLC       A
		MOV       A,R4
		RLC       A
		MOV       R4,A
		MOV       A,R5
		RLC       A
		MOV       R5,A
		MOV       A,R6
		RLC       A
		MOV       R6,A
		MOV       A,R7
		RLC       A
		MOV       R7,A
;
		JB        F0,FFTMUL32X16_3
		JB        F1,FFTMUL32X16_4
FFTMUL32X16RET:	RET
FFTMUL32X16_3:  JB        F1,FFTMUL32X16RET
FFTMUL32X16_4:	MOV       A,R4
		CPL	  A
		ADD       A,#01H
		MOV       R4,A
		MOV       A,R5
		CPL	  A
		ADDC      A,#00H
		MOV       R5,A
		MOV       A,R6
		CPL	  A
		ADDC      A,#00H
		MOV       R6,A
		MOV       A,R7
		CPL	  A
		ADDC      A,#00H
		MOV       R7,A
		RET
;////////////
FFT1MUL32X16:   MOV       A,R3
		CLR       F0
		JNB       ACC.7,FFT1MUL32X16_1
		SETB      F0
		MOV       A,R0
		CPL	  A
		ADD       A,#01H
		MOV       R0,A
		MOV       A,R1
		CPL	  A
		ADDC      A,#00H
		MOV       R1,A
		MOV       A,R2
		CPL	  A
		ADDC      A,#00H
		MOV       R2,A
		MOV       A,R3
		CPL	  A
		ADDC      A,#00H
		MOV       R3,A
;
FFT1MUL32X16_1: MOV       A,R9
		CLR       F1
		JNB       ACC.7,FFT1MUL32X16_2
		SETB      F1
		MOV       A,R8
		CPL       A
		ADD       A,#0H
		MOV       R8,A
		MOV       A,R9
		CPL       A
		ADDC      A,#00H
		MOV       R9,A
FFT1MUL32X16_2: PUSH      02H
		PUSH      03H
		MOV       R2,R8
		MOV       R3,R9
		CALL      MUL16X16
		POP       01H
		POP       00H
		PUSH      04H
		PUSH      05H
		PUSH      07H
		PUSH      06H
		MOV       R2,R8
		MOV       R3,R9
		CALL      MUL16X16
		POP       ACC
		ADD       A,R4
		MOV       R4,A
		POP       ACC
		ADDC      A,R5
		MOV       R5,A
		MOV       A,R6
		ADDC      A,#00H
		MOV       R6,A
		MOV       A,R7
		ADDC      A,#00H
		MOV       R7,A
;
		MOV       06H,04H
		MOV       07H,05H
		POP       05H
		POP       04H
;
		JB        F0,FFT1MUL32X16_3
		JB        F1,FFT1MUL32X16_4
FFT1MUL32X16RET:RET
FFT1MUL32X16_3: JB        F1,FFT1MUL32X16RET
FFT1MUL32X16_4:	MOV       A,R4
		CPL	  A
		ADD       A,#01H
		MOV       R4,A
		MOV       A,R5
		CPL	  A
		ADDC      A,#00H
		MOV       R5,A
		MOV       A,R6
		CPL	  A
		ADDC      A,#00H
		MOV       R6,A
		MOV       A,R7
		CPL	  A
		ADDC      A,#00H
		MOV       R7,A
		RET
;/////
tabcos:
DW 07FFFH,07F62H,07D8AH,07A7DH,07642H,070E3H,06A6EH,062F2H
DW 05A82H,05134H,0471DH,03C57H,030FCH,02528H,018f9H,00C8CH
DW 00000H,0F374H,0E707H,0DAD8H,0CF04H,0C3A9H,0B8E3H,0AECCH 
DW 0A57EH,09D0EH,09592H,08F1DH,089BEH,08583H,08276H,0809EH

tabsin:
DW 00000H,00C8CH,018F9H,02528H,030FCH,03C57H,0471DH,05134H
DW 05A82H,062F2H,06A6EH,070E3H,07642H,07A7DH,07D8AH,07F62H
DW 07FFFH,07F62H,07D8AH,07A7DH,07642H,070E3H,06A6EH,062F2H
DW 05A82H,05134H,0471DH,03C57H,030FCH,02528H,018F9H,00C8CH


 

 

测试 或某个程序段的运行时间可用 1AH中断调用 。

在进入某一过程 之 前 , 用下 列程序段将微机系统板上的 计时器 的脉冲数置 零

MOV    AH, 1
MOV    CX, 0
MOV    DX, 0
INT       1AH

 

喜欢这篇文章吗,不妨分享给朋友们吧!

科学是第一生产力