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

📄 fft.lst

📁 FFT asm version.A zip file of all the files is provided in FFT.ZIP
💻 LST
📖 第 1 页 / 共 4 页
字号:
41BA 90FDFF     =1   341            mov     dptr,#not 512
41BD E2         =1   342    scl2:   movx    a,@r0
41BE 08         =1   343            inc     r0
41BF B4CC00     =1   344            cjne    a,#-52,scl2a
41C2 5005       =1   345    scl2a:  jnc     scl3            ; < -52
41C4 B43400     =1   346            cjne    a,#52,scl2b
41C7 5008       =1   347    scl2b:  jnc     scl4            ; >= 52
41C9 A3         =1   348    scl3:   inc     dptr
41CA E583       =1   349            mov     a,dph
41CC 4582       =1   350            orl     a,dpl
41CE 70ED       =1   351            jnz     scl2
41D0 22         =1   352            ret
                =1   353    ;
41D1 0529       =1   354    scl4:   inc     sclfct
41D3 7800       =1   355            mov     r0,#low real
41D5 90FDFF     =1   356            mov     dptr,#not 512
41D8 E2         =1   357    scl6:   movx    a,@r0           ; get real data
41D9 A2E7       =1   358            mov     c,acc.7         ; arithmetic shift right ( hi bit unchanged)
41DB 13         =1   359            rrc     a
41DC F2         =1   360            movx    @r0,a
41DD 08         =1   361            inc     r0
41DE A3         =1   362            inc     dptr
41DF E583       =1   363            mov     a,dph
41E1 4582       =1   364            orl     a,dpl
41E3 70F3       =1   365            jnz     scl6
41E5 22         =1   366            ret
                     367    ;
                =1   368    $include(sysmpy.asm)            ; signed multiply
                =1   369    ; signed multiply a * b
                =1   370    ; save sign of result, make both positive
FFT                                                                                                           PAGE 6

                =1   371    ; multiply, set result sign, shift accuracy
                =1   372    ; return high order byte of result
41E6 FF         =1   373    mpy:    mov     r7,a            ; save multiplier
41E7 65F0       =1   374            xrl     a,b             ; xor signs
41E9 A2E7       =1   375            mov     c,acc.7
41EB C0D0       =1   376            push    psw             ; save result sign
41ED C3         =1   377            clr     c
41EE EF         =1   378            mov     a,r7            ; get multiplier
41EF 30E702     =1   379            jnb     acc.7,mpy2
41F2 F4         =1   380            cpl     a
41F3 04         =1   381            inc     a
41F4 C5F0       =1   382    mpy2:   xch     a,b
41F6 30E702     =1   383            jnb     acc.7,mpy3
41F9 F4         =1   384            cpl     a
41FA 04         =1   385            inc     a
41FB A4         =1   386    mpy3:   mul     ab              ; unsigned math
41FC D0D0       =1   387            pop     psw             ; get result sign
41FE 500A       =1   388            jnc     mpy1            ; result is positive
4200 F4         =1   389            cpl     a
4201 3400       =1   390            addc    a,#0            ; make result negative
4203 C5F0       =1   391            xch     a,b
4205 F4         =1   392            cpl     a
4206 3400       =1   393            addc    a,#0
4208 C5F0       =1   394            xch     a,b
420A 33         =1   395    mpy1:   rlc     a
420B C5F0       =1   396            xch     a,b
420D 33         =1   397            rlc     a               ; add 1 bit more of accuracy
420E 92E7       =1   398            mov     acc.7,c         ; insure sign
4210 22         =1   399            ret
                     400    ;               
                     401    ;============================================================================
4211 75D000          402    main:   mov     psw,#0          ; reg base 0
4214 111B            403            call    wave            ; create test signal
4216 754810          404            mov     radix,#16
4219 754902          405            mov     radsiz,#2
421C 124245          406            call    fft
421F 120112          407            call    ilprt
4222 5363616C        408            db      'Scale factor: ',0
4226 65206661   
422A 63746F72   
422E 3A2000     
4231 E529            409            mov     a,sclfct
4233 120115          410            call    prtrad
4236 12012D          411            call    crlf
                     412    ;       call    reorder
4239 316B            413            call    power
423B 124373          414            call    ppg             ; plot power graph
423E 754810          415    done:   mov     radix,#16
4241 754902          416            mov     radsiz,#2
4244 22              417            ret                     ; back to monitor
                     418    ;============================================================================
                     419            
4245 120112          420    fft:    call    ilprt
4248 6666743A        421            db      'fft:',cr,lf,0
424C 0D0A00     
                     422    
                     423    ; initialize data areas
424F 752900          424            mov     sclfct,#0
FFT                                                                                                           PAGE 7

                     425    
                     426    ; clear imag array
4252 905400          427    clrimg: mov     dptr,#imag
4255 7800            428            mov     r0,#0
4257 E4              429            clr     a
4258 F0              430    clri10: movx    @dptr,a
4259 A3              431            inc     dptr
425A D8FC            432            djnz    r0,clri10
                     433    
                     434    ; move input data into real array
425C 905300          435            mov     dptr,#real
425F 75A052          436            mov     p2,#high inpd
4262 7800            437            mov     r0,#low inpd            ; all arrays are on page boundary
4264 7A00            438            mov     r2,#0
4266 E2              439    movdi:  movx    a,@r0                   ; get input data
4267 C3              440            clr     c
4268 9480            441            subb    a,#80h                  ; convert to 2's compliment
426A F0              442            movx    @dptr,a                 ; put to real
426B A3              443            inc     dptr
426C 08              444            inc     r0
426D DAF7            445            djnz    r2,movdi
                     446    ;
                =1   447    $include(permute.asm)           ; decimation in time
                =1   448    ; decimation in time - reorder data
                =1   449    ; pre-transform bit swap
                =1   450    ; this appears to be working properly.
                =1   451    ; the bits are being reversed and 
                =1   452    ; a swap is done on no carry
426F            =1   453    permute:
426F 75A053     =1   454            mov     p2,#high real
4272 7900       =1   455            mov     r1,#low real            ; 'L'
4274 1103       =1   456    perm2:  call    bitrev
4276 E9         =1   457            mov     a,r1                    ; get L
4277 B50000     =1   458            cjne    a,0,brv2                ; cmp with E
427A 4006       =1   459    brv2:   jc      swp1
427C E3         =1   460    swapem: movx    a,@r1
427D FA         =1   461            mov     r2,a
427E E2         =1   462            movx    a,@r0
427F F3         =1   463            movx    @r1,a
4280 EA         =1   464            mov     a,r2
4281 F2         =1   465            movx    @r0,a
4282 09         =1   466    swp1:   inc     r1                      ; inc 'L'
4283 E9         =1   467            mov     a,r1
4284 70EE       =1   468            jnz     perm2
                     469    ;
                     470    ; FFT first pass
                     471    ;
4286 31B5            472    Pass1:  call    scale
4288 905300          473            mov     dptr,#real
428B E0              474    Pa1:    movx    a,@dptr
428C FA              475            mov     r2,a            ; put 'C'
428D 0582            476            inc     dpl
428F E0              477            movx    a,@dptr
4290 FB              478            mov     r3,a            ; put 'B'
4291 1582            479            dec     dpl
4293 2A              480            add     a,r2            ; B + C
4294 F0              481            movx    @dptr,a
4295 EA              482            mov     a,r2            ; get 'C'
FFT                                                                                                           PAGE 8

4296 C3              483            clr     c
4297 9B              484            subb    a,r3            ; C - B
4298 0582            485            inc     dpl
429A F0              486            movx    @dptr,a
429B 0582            487            inc     dpl
429D E582            488            mov     a,dpl
429F 70EA            489            jnz     Pa1
                     490    ;
                     491    ; computation of fft pass 2 thru n.
                     492    ;
42A1 7440            493    fpass:  mov     a,#64           ; 90 degrees
42A3 F525            494            mov     celnum,a
42A5 F528            495            mov     delta,a
42A7 7402            496            mov     a,#2
42A9 F526            497            mov     pairnm,a
42AB F527            498            mov     celdis,a
                     499    ;
42AD 31B5            500    Npass:  call    scale
42AF 852524          501            mov     celct,celnum
                     502    
                     503    ; initialize data pointers
42B2 E4              504            clr     a
42B3 F54B            505            mov     rlpt1,a
42B5 F54C            506            mov     rlpt2,a
42B7 F54D            507            mov     impt1,a
42B9 F54E            508            mov     impt2,a
                     509    ;
42BB 754F00          510    Ncell:  mov     sinpt,#0
42BE 85262E          511            mov     lctr1,pairnm            ; loop counter 1
                     512    ;
42C1 E54B            513    Nc1:    mov     a,rlpt1
42C3 2527            514            add     a,celdis
42C5 F54C            515            mov     rlpt2,a
42C7 F54E            516            mov     impt2,a
                     517    ;
42C9 758351          518            mov     dph,#high stadr
42CC 854F82          519            mov     dpl,sinpt
42CF E0              520            movx    a,@dptr
42D0 F52A            521            mov     sine,a
42D2 7440            522            mov     a,#64           ; 90 degrees
42D4 93              523            movc    a,@a+dptr
42D5 F52B            524            mov     cosine,a
                     525    ;
42D7 758353          526            mov     dph,#high real
42DA 854C82          527            mov     dpl,rlpt2
42DD E0              528            movx    a,@dptr
42DE F5F0            529            mov     b,a
42E0 C0F0            530            push    b
42E2 E52B            531            mov     a,cosine
42E4 31E6            532            call    mpy
42E6 F52C            533            mov     treal,a         ; tr = rn * cos(z)
42E8 D0F0            534            pop     b
42EA E52A            535            mov     a,sine
42EC 31E6            536            call    mpy
42EE F52D            537            mov     timag,a         ; tr = rn * sin(z)
                     538    ;
42F0 758354          539            mov     dph,#high imag
42F3 854E82          540            mov     dpl,impt2
FFT                                                                                                           PAGE 9

42F6 E0              541            movx    a,@dptr 
42F7 F5F0            542            mov     b,a
42F9 C0F0            543            push    b
42FB E52A            544            mov     a,sine
42FD 31E6            545            call    mpy             ; a = in * sin(z)
42FF 252C            546            add     a,treal
4301 F52C            547            mov     treal,a         ; tr = rn*cos + in*sin
4303 D0F0            548            pop     b
4305 E52B            549            mov     a,cosine
4307 31E6            550            call    mpy
4309 C3              551            clr     c
430A 952D            552            subb    a,timag
430C F52D            553            mov     timag,a         ; ti = in*cos - rn*sin  
                     554    ;
430E 758353          555            mov     dph,#high real
4311 854B82          556            mov     dpl,rlpt1
4314 E0              557            movx    a,@dptr
4315 FA              558            mov     r2,a
4316 252C            559            add     a,treal
4318 F0              560            movx    @dptr,a                 ; rl1 = rl0 + treal
4319 EA              561            mov     a,r2
431A C3              562            clr     c
431B 952C            563            subb    a,treal
431D 854C82          564            mov     dpl,rlpt2
4320 F0              565            movx    @dptr,a                 ; rl2 = rl0 - treal
                     566    ;
4321 758354          567            mov     dph,#high imag
4324 854D82          568            mov     dpl,impt1
4327 E0              569            movx    a,@dptr
4328 FA              570            mov     r2,a
4329 252D            571            add     a,timag
432B F0              572            movx    @dptr,a                 ; im1 = im0 + timag
432C EA              573            mov     a,r2
432D C3              574            clr     c
432E 952D            575            subb    a,timag
4330 854E82          576            mov     dpl,impt2
4333 F0              577            movx    @dptr,a                 ; im2 = im0 - timag
                     578    ;
4334 E54F            579            mov     a,sinpt
4336 2528            580            add     a,delta
4338 F54F            581            mov     sinpt,a
433A 054B            582            inc     rlpt1
433C 054D            583            inc     impt1
433E 152E            584            dec     lctr1
4340 E52E            585            mov     a,lctr1
4342 6002            586            jz      Nc2
4344 41C1            587            jmp     Nc1     
                     588    ;
4346 E54B            589    Nc2:    mov     a,rlpt1
4348 2527            590            add     a,celdis
434A F54B            591            mov     rlpt1,a
434C F54D            592            mov     impt1,a
434E 1524            593            dec     celct
4350 E524            594            mov     a,celct
4352 6002            595            jz      Np1
4354 41BB            596            jmp     Ncell
                     597    ;
                     598    ; change parameters for next pass

⌨️ 快捷键说明

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