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

📄 dv336.asm

📁 基于VC33的关于铁路信号发送和处理的程序
💻 ASM
📖 第 1 页 / 共 5 页
字号:
        ldi     @DASNUM,ar0
        ldi     *ar0,ar2
        addi    ar1,ar2
        cmpi    4096,ar2
        bge     tjl0
        sti     ar2,*ar0
        br      tjl2

tjl0:   subi    4096,ar2
        sti     ar2,*ar0
        ldi     @DAGN,ar0
        ldi     *ar0,ar1
        cmpi    1,ar1
        ldieq   -1,ar1
        ldine   1,ar1
        sti     ar1,*ar0

tjl2:   ldi     @MCTL,ar0
        ldi     MBUS3,ar1
        sti     ar1,*ar0

        push    r0
        pushf   r0
        push    r1
        pushf   r1
        ldi     @SINTAB,ar0
        addi    ar2,ar0
        ldf     *ar0,r0
        float   07ffh,r1               ;dpx???
        mpyf    r1,r0
        addf    0.5,r0
        fix     r0
        ldi     @DAGN,ar0
        ldi     *ar0,r1
        mpyi    r1,r0
        addi    2048,r0
        ldi     @DAADDR,ar0
        sti     r0,*ar0
        popf    r1
        pop     r1
        popf    r0
        pop     r0

        ldi     @MCTL,ar0
        ldi     MBUS1,ar1
        sti     ar1,*ar0

n_da:   ldi     ar4,ar0
        and     7h,ar0
        cmpi    1,ar0
        bne     t_ende

;--------------------------------------
        ldi     @CMODE,ar0
        ldi     *ar0,ar1
        cmpi    4,ar1
        bne     t_ende

        ldi     @SJNUM,ar0
        ldi     *ar0,ar2
        addi    1,ar2
        sti     ar2,*ar0
        absi    ar2

        ldi     @JDNUM,ar0
        ldi     *ar0,ar0
        ldi     @JCND,ar1
        addi    ar0,ar1
        ldi     *ar1,ar0
        cmpi    ar0,ar2
        blt     t_ende
        ldi     0,ar3
        ldi     @SJNUM,ar0
        sti     ar3,*ar0

        ldi     @MCTL,ar3              ;INIT MAIN BUS
        ldi     MBUS7,ar0
        sti     ar0,*ar3

        ldi     @JDNUM,ar0
        ldi     *ar0,ar4
        addi    1,ar4
        cmpi    12,ar4
        ldige   0,ar4
        sti     ar4,*ar0

        ldi     @JDATAS,ar0
        addi    ar4,ar0
        ldi     *ar0,ar1
        mpyi    S25,ar1

        ldi     0,ar2
        ldi     @DDS_FREQ0H,ar0
        sti     ar2,*ar0
        ldi     @DDS_FREQ0L,ar0
        sti     ar1,*ar0

        ldi     @DDS_FREQ1H,ar0
        sti     ar2,*ar0
        ldi     @DDS_FREQ1L,ar0
        sti     ar1,*ar0

        ldi     @DDS_PHASE0,ar0
        sti     ar2,*ar0
        ldi     @DDS_PHASE1,ar0
        sti     ar2,*ar0
        ldi     @DDS_PHASE2,ar0
        sti     ar2,*ar0
        ldi     @DDS_PHASE3,ar0
        sti     ar2,*ar0
;---------------------------------------
t_ende: ldi     @MCTL,ar3
        ldi     @MCTLS,ar0
        ldi     *ar0,ar0
        sti     ar0,*ar3

        pop     ir0
        pop     ar4
        pop     ar3
        pop     ar2
        pop     ar1
        pop     ar0
        pop     st
        reti                          
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;time_sub ebd!!
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;comm sub2: msamp
msamp:  ldi     @SAMNUM,BK
        ldi     @INADDR,ar2
        ldi     @SADDR,ar0            
        ldi     *ar0,ar1
        ldi     @CHNUM,ar0
        ldi     *ar0,r0
        subi    1,r0
        mpyi    4000h,r0
        addi    r0,ar1
        ldi     DLENTH0,rc
        subi    2,rc
        float   *ar1++%,r0
        rptb    samp0
samp0:  float   *ar1++%,r0
||      stf     r0,*ar2++
        stf     r0,*ar2++

        ldf     0.0,r0                 
        ldi     DLENTH0,rc             ;SET DATA LENGTH          
        subi    1,rc
        rptb    samp1
samp1:  stf     r0,*ar2++              ;IMAG PART CLEAR end
        rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;comm sub3: HAMING_windows
haming: ldi     @INADDR,ar0
        ldi     8192,ar7            
        ldi     @SINTAB,ar6            ;SET SINTAB ADDER
        addi    17ffh,ar6              ;97,11
        ldi     ar7,r5
        lsh     -1,r5
        subi    1,r5
        ldi     ar7,rc                 ;SET REPEAT LEN.
        subi    1,rc
        rptb    ham
        ldf     *ar0,r2              
        cmpi    r5,rc                  ;1fffh-1000h 1 part
        blt     part2
        beq     mid                    ;0fffh-0     2 part
        ldf     *ar6--,r6
        br      nom
mid:    nop     *ar6++
part2:  ldf     *ar6++,r6
nom:    addf    1.0,r6
    	mpyf    0.46,r6
        addf    0.08,r6
    	mpyf    r6,r2
ham:    stf     r2,*ar0++        
    	rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;comm sub4: sudc
sudc:   ldi     @INADDR,ar1
        ldi     ar1,ar6
        ldf     0,r6
        ldf     0,r3
        ldi     8191,rc
        rptb    sudc1
sudc1:  addf    *ar1++,r3
        mpyf    @XNUM,r3
        mpyf    0.25,r3

        ldf     0,r5
        ldi     0,r0
        ldi     ar6,ar1
        ldi     8191,rc
        rptb    sudc10
        ldf     *ar1++,r2
        cmpf    r3,r2
        blt     sudc10
        subf    r3,r2
        addf    r2,r5
        addi    1,r0
sudc10: nop
        float   r0
        call    invf
        mpyf    r0,r5

        mpyf    @SUMUILT,r5
        absf    r5
        ldi     @T_AMP,ar1
        stf     r5,*ar1
        rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;comm sub5: subak
subak:  ldi     @INADDR,ar0
        ldi     464,r0                 ;464Hz
        addi    r0,ar0                 ;real part
        ldi     ar0,ar1
        addi    DLENTH0,ar1            ;iamg part
        ldi     @SBAK,ar2
        ldi     ar2,ar3
        addi    500,ar3
        ldi     471,rc                 ;936-464=472
        rptb    sbak0
        ldf     *ar0++,r0
||      ldf     *ar1++,r1
sbak0:  stf     r0,*ar2++
||      stf     r1,*ar3++

ubak:   ldi     @INADDR,ar0
        addi    1660,ar0               ;1660Hz
        ldi     ar0,ar1                
        addi    DLENTH0,ar1            ;iamg part
        ldi     @UBAK,ar2
        ldi     ar2,ar3
        addi    1000,ar3               ;2640-1660=980Hz
        ldi     979,rc
        rptb    ubak0
        ldf     *ar0++,r0
||      ldf     *ar1++,r1
ubak0:  stf     r0,*ar2++
||      stf     r1,*ar3++
        rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;comm sub6: spc1
spc1:   ldi     @PWADDR,ar2            ;interface:ar0,ar1
        subi3   ar0,ar1,rc             ;          ar0:real part addr.
        addi3   r0,ar0,ar1             ;          output addr. PWADDR
        rptb    sends                  ;use:PWADDR DLENTH
        ldf     *ar1++,r1              ;use:ar0-ar2,r0,r1,rc
||      ldf     *ar0++,r0
        mpyf    r0,r0
        mpyf    r1,r1
        addf    r1,r0
sends:  stf     r0,*ar2++
        rets
;--------------------------------------;comm sub7: spc10
spc10:  ldi     @PWADDRB,ar2           ;interface:ar0,ar1
        subi3   ar0,ar1,rc             ;          ar0:real part addr.
        addi3   r0,ar0,ar1             ;          output addr. PWADDR
        rptb    sendb                  ;use:PWADDR DLENTH
        ldf     *ar1++,r1              ;use:ar0-ar2,r0,r1,rc
||      ldf     *ar0++,r0
        mpyf    r0,r0
        mpyf    r1,r1
        addf    r1,r0
sendb:  stf     r0,*ar2++
        rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
s50hz:
        ldi     @PWADDRB,ar0
        addi    36,ar0                 ;10+36=46
        ldf     *ar0++,r0
        addf    *ar0++,r0
        addf    *ar0++,r0
        addf    *ar0++,r0
        addf    *ar0++,r0
        addf    *ar0++,r0
        addf    *ar0++,r0
        addf    *ar0++,r0
        addf    *ar0++,r0
        addf    *ar0++,r0
        call    sqrt
        mpyf    @XNUM1,r0
        mpyf    @SUMUILT,r0
        ldi     @S50HZ,ar0
        stf     r0,*ar0
        rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;comm sub8: F_sort
csort:  ldi     ar0,ar1                ;ar0 is source           
        addi    1,ar1                  ;ar6 is object
        ldi     r7,ar7                 ;r7 is  sort number
        lsh     1,ar7
        subi    1,r7                   
        ldi     r7,r5
        addi    1,r5
csort0: ldi     ar7,r2                        
        ldf     *ar0++,r1
        ldf     *ar0++,r0
        ldi     ar1,ar2
        ldi     r7,rc                        
        rptb    csort1
        ldf     *ar2++(2),r3
        cmpf    r3,r0
        bgt     csort1
        subi    2,r2     
csort1: nop
        ldi     ar6,ar5
        addi    r2,ar5
        stf     r1,*ar5++
        stf     r0,*ar5++
        subi    1,r5
        cmpi    0,r5
        bgt     csort0                   ;sort end
        rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;comm sub9: A_rsort
rsort:  ldi     ar0,ar1                ;ar0 is source           
        ldi     r7,ar7                 ;r7 is  sort number
        lsh     1,ar7                  ;ar6 is object
        subi    1,r7                   
        ldi     r7,r5
        addi    1,r5
rsort0: ldi     ar7,r2                        
        ldf     *ar0++,r0
        ldf     *ar0++,r1
        ldi     ar1,ar2
        ldi     r7,rc                        
        rptb    rsort1
        ldf     *ar2++(2),r3
        cmpf    r3,r0
        blt     rsort1
        subi    2,r2     
rsort1: nop
        ldi     ar6,ar5
        addi    r2,ar5
        stf     r0,*ar5++
        stf     r1,*ar5++
        subi    1,r5
        cmpi    0,r5
        bgt     rsort0
        rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;comm subA: comp
comp:   ldi     ar2,ar4               ;ar4 save souce addr.
        ldi     ar2,ar6               ;use ar0-ar7,r0-r6
        ldi     r7,r2
        lsh     1,r2
        addi    r2,ar6                ;use: MODIFY MAX            ***12
        ldf     0,r2                  ;interface:input ar0,ar2,ar7,r3,r4,r5     
comp0:  ldf     r5,r6                 ;interface:input ar0,ar2,ar7,r3,r4,r5
        ldi     ar0,ar5               ;ar0 is pwaddr,input data first addr.
        ldi     ar7,rc                ;use init value: ar2 ar0 ar7 
        subi    1,rc                  ;ar2 is result addr.
        ldf     *ar5++,r0             ;ar7 data number
        ldi     ar5,r1                ;ar6 result end addr.
        rptb    comp1                 ;ar5 save ar0
        cmpf    *ar5++,r0             ;r5 set mpyi factor
        ldflt   *-ar5(1),r0           ;r1 save active addr.
comp1:  ldilt   ar5,r1
        subi    1,r1
        ldi     r1,ar5
        mpyf    5,r6                   
        fix     r6
        subi    r6,ar5
        lsh     1,r6                  ;r6=r6*2
        ldi     r6,rc
        rptb    comp2
comp2:  stf     r2,*ar5++
        stf     r0,*ar2++
        subi    ar0,r1               
        float   r1,r1
        mpyf    r3,r1               
        addf    r4,r1                  ;r4=first f

        mpyf    @MODIFY,r1
        stf     r1,*ar2++
        cmpi    ar6,ar2
        bz      comp3
        br      comp0                  ;find end

comp3:  ldi     ar4,ar0
        ldi     ar4,ar6
        addi    10h,ar6
        ldi     ar0,ar1
        addi    1,ar1
        ldi     r7,r5
comp4:  ldi     r7,r2
        lsh     1,r2
        ldf     *ar0++,r1
        ldf     *ar0++,r0
        ldi     ar1,ar2
        ldi     r7,rc
        subi    1,rc
        rptb    comp5
        ldf     *ar2++(2),r3
        cmpf    r3,r0
        bgt     comp5
        subi    2,r2     
comp5:  nop
        ldi     ar6,ar5
        addi    r2,ar5
        stf     r1,*ar5++
        stf     r0,*ar5++
        subi    1,r5
        cmpi    0,r5
        ble     comend
        br      comp4                     ;sort end
comend: rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;comm subC: tcxb
tcqxb:
        ldi     @INADDR,ar0
        ldi     446,r0
        addi    r0,ar0
        ldi     ar0,ar1
        addi    DLENTH0,ar1

        ldf     0,r2
        ldi     23,rc
        rptb    tcqxb1
        ldi     ar0,ar2
        ldi     ar1,ar3
        ldi     8,r7
tcqxb0: stf     r2,*ar2++
||      stf     r2,*ar3++
        subi    1,r7
        cmpi    0,r7
        bgt     tcqxb0
        addi    100,ar0
tcqxb1: addi    100,ar1
        rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;comm subD: initt0
initt0: ldi     0,r0                  
        ldi     808h,ar0
        lsh     12,ar0
        addi    20h,ar0
        sti     r0,*+ar0(4)            ;COUNTER CLEAR
        ldi     FS,r0
        sti     r0,*+ar0(8)
        ldi     3c1h,r0                ;RUN TIMER0
        sti     r0,*ar0
        rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;comm subE: invf
invf:   ldf     r0,r3                  ;use r0,r1,r2,r3
        absf    r0                     ;input & output use r0
        pushf   r0
        pop     r1
        ash     -24,r1
        negi    r1
        subi    1,r1
        ash     24,r1
        push    r1
        popf    r1
        mpyf    r1,r0,r2
        subrf   2.0,r2
        mpyf    r2,r1
        mpyf    r1,r0,r2
        subrf   2.0,r2
        mpyf    r2,r1
        mpyf    r1,r0,r2
        subrf   2.0,r2
        mpyf    r2,r1
        mpyf    r1,r0,r2
        subrf   2.0,r2
        mpyf    r2,r1
        rnd     r1
        mpyf    r1,r0,r2
        subrf   1.0,r2
        mpyf    r1,r2
        addf    r2,r1
        rnd     r1,r0
        negf    r0,r2
        ldf     r3,r3
        ldfn    r2,r0
        rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;comm subF: sqrt
sqrt:   ldf     r0,r3                  ;use r0,r1,r2,r3
        retsle                         ;input & output use r0
        pushf   r0
        pop     r1
        ash     -24,r1
        addi    1,r1
        ash     -1,r1
        negi    r1,r1
        ash     24,r1
        push    r1
        popf    r1
        mpyf    0.5,r0
        mpyf3   r1,r1,r2
        mpyf    r0,r2
        subrf   1.5,r2
        mpyf    r2,r1
        rnd     r1,r1
        mpyf3   r1,r1,r2
        mpyf    r0,r2
        subrf   1.5,r2
        mpyf    r2,r1
        rnd     r1,r1
        mpyf3   r1,r1,r2
        mpyf    r0,r2

⌨️ 快捷键说明

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