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

📄 dv336.asm

📁 基于VC33的关于铁路信号发送和处理的程序
💻 ASM
📖 第 1 页 / 共 5 页
字号:
        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
        subrf   1.5,r2
        mpyf    r2,r1
        rnd     r1,r0
        mpyf    r3,r0
        rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sub7: test_ ram
test_ram:
        ldi     2000h,ar0
        ldi     0,r0
        ldi     @FFFF,r1
	lsh     16,r1
        addi    @FFFF,r1
        ldi     1900h,rc
        lsh     4,rc
        rptb    testr
        ldi     *ar0,r3
        push    r3

        sti     r1,*ar0
        ldi     *ar0,r2
	cmpi    r1,r2
        bne     teste
	sti     r0,*ar0
        ldi     *ar0,r2
	cmpi    r0,r2
        bne     teste
        pop     r3
        sti     r3,*ar0++

testr:  nop
        br      testg
teste:
        ldi     1,ar6
        br      stop
testg:
        rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;comm subG: write_frequency
wfreq:                                 ;input: r7 float; ar7 word num.
                                       ;write addr. ar1; ar4 mpyf num.
        float   ar4,r6                 ;point position:ar5
        mpyf    r6,r7                  ;work unit:ar6,r6,r5
        addf    0.5,r7                 ;ar7,ar4,ar5 may continus use
        fix     r7
        ldi     0ffh,ar6
        and3    ar6,r7,r6              ;r6=low 8 bit
        lsh     8,ar6
        and3    ar6,r7,r5              ;r5=middle 8 bit
        lsh     -8,r5
        lsh     8,ar6
        and     ar6,r7
        lsh     -16,r7                 ;r7=hifh 8 bits

        sti     r6,*ar1++
        sti     r5,*ar1++
        cmpi    2,ar7
        beq     wfreq0
        sti     r7,*ar1++
wfreq0:
        sti     ar5,*ar1++
        rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;comm subH: write_amplitude
wamp:                                  ;input: r7 float; ar7 word num.
                                       ;write addr. ar1;
    	call    sqrt
        ldf     @XNUM,r6
    	mpyf    r6,r0
    	cmpi    1,r7
        beq     wamp0
        mpyf    r6,r0
        mpyf    2,r0
wamp0:  mpyf    1.2,r0
        fix     r0
        ldi     0ffh,ar4
        and3    ar4,r0,r1              ;r1=low 8 bit
        and     0ff00h,r0              ;r0=high 8 bit
        lsh     -8,r0
        sti     r1,*ar1++
        sti     r0,*ar1++
        rets
;--------------------------------------------------------------jljs
;--------------------------------------------------------------jljs
; 1: rdata   2: jfirlp  3: jprc   4: ifftj   5: half    6: jproc
; 7: jlimit  8: jrule   9: jddata A: jfindf  B: move    C: jdata
; D: jljsf   E: jamplh  F: jljs   G: jtest   H: jcode   I: jinit
; J: jljsdc
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;jljs sub1:cjljs
cjljs:  ldi     @JSDATA,ar0
        ldi     1536,rc
        ldf     0,r0
        rptb    cjljs0
cjljs0: stf     r0,*ar0++

        ldi     @JDATAS0,ar0
        ldi     8190,rc
        ldi     0,r0
        rptb    cjljs1
cjljs1: sti     r0,*ar0++
        rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;comm sub2: msamp
rdata:  ldi     @SAMNUM,BK
        ldi     @TDATA,ar2
        ldi     @CHNUM,ar0
        ldi     *ar0,r0
        subi    1,r0
        mpyi    4000h,r0
        addi    r0,ar6
        ldi     ar6,ar1

        ldi     1000h,ir0
        nop     *ar1--(ir0)%

        ldi     4094,rc
        float   *ar1++%,r0
        rptb    jsamp0
jsamp0: float   *ar1++%,r0
||      stf     r0,*ar2++
        stf     r0,*ar2
        rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;jljs sub3: jfirlp
jfirlp: ldi     @JSDATA,ar1
        ldi     @JINADDR,ar3
        ldi     1534,rc                ;2048-512-2=1534
	ldf     *ar1++,r0
        rptb    jfetc0
jfetc0: ldf     *ar1++,r0
||      stf     r0,*ar3++
        stf     r0,*ar3++

        ldi     N46,BK
        ldi     @SAR46,ar0
        ldi     *ar0,ar1
        ldi     ar1,ar7                ;57*9=513,data number=512
        ldi     6,ir0
        nop     *ar1++(ir0)%,
        sti     ar1,*ar0
        ldi     ar7,ar1
        ldi     @TDATA,ar2
        ldi     ar2,ar7
        addi    4096,ar7
        ldi     @H46,ar0
jfir0:  ldf     *ar2++,r0              ;use  ar2,ar7,ar0,ar1
        cmpi    ar2,ar7
        blt     jfir2
        stf     r0,*ar1++%
        ldi     @JPOINT,ar4  
        ldi     *ar4,r0
	addi    1,r0
        sti     r0,*ar4
	cmpi    1,r0
        beq     jfir1
        cmpi    JFNUM,r0
        ldige   0,r0
        sti     r0,*ar4
        br      jfir0

jfir1:  ldf     0,r0
        ldf     0,r2
        rpts    N46-1
	mpyf3   *ar0++(1)%,*ar1++(1)%,r0
||      addf    r0,r2
	addf    r0,r2   
        stf     r2,*ar3++
        br      jfir0

jfir2:  ldf     0,r0                 
        ldi     2047,rc                 
        rptb    jfetc3
jfetc3: stf     r0,*ar3++               ;IMAG PART CLEAR end

        ldi     @JINADDR,ar1
        addi    512,ar1
        ldi     @JSDATA,ar3
        ldi     1534,rc
	ldf     *ar1++,r0
        rptb    jfetc2
jfetc2: ldf     *ar1++,r0
||      stf     r0,*ar3++
        stf     r0,*ar3
        rets
;SUB12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;jljs sub4: jrcout
jrcout: ldi     @MCTL,ar3              ;INIT MAIN BUS
        ldi     MBUS3,ar1
        sti     ar1,*ar3
        ldi     @MCTLS,ar0
        sti     ar1,*ar0

        ldi     @PORT232,ar1
        addi    1,ar1
        ldi     35,r0
        sti     r0,*ar1++              ;1
        ldi     @RAX,ar0
        ldi     *ar0,r0
        sti     r0,*ar1++              ;2

        ldi     @SMODE,ar0
        ldi     *ar0,r1
        ldi     @GMODE,ar0
        ldi     *ar0,r0
        lsh     4,r0
        or      r1,r0
        sti     r0,*ar1++              ;3

        ldi     @JSORT,ar0
        ldi     *ar0,r6
        sti     r6,*ar1++              ;4

        ldi     @JLFLAG,ar0
        ldi     *ar0,r0
        sti     r0,*ar1++              ;5    F0

        ldi     0ffh,r1
        ldi     0ff00h,r2
        ldi     @JSUM,ar0              ;6-7
        ldf     *ar0,r0
        mpyf    10.0,r0
        addf    0.5,r0
        fix     r0
        and3    r1,r0,r4
        and3    r2,r0,r5
        lsh     -8,r5
        sti     r4,*ar1++
        sti     r5,*ar1++
        ;----------------------------------
        ldi     @JCYSUMZ,ar3
        ldi     *ar3,r1
        lsh     -1,r1
        ldi     0ffh,r4
        ldi     0ff00h,r5
	and3    r4,r1,r6
	and     r5,r1
	lsh     -8,r1
        sti     r6,*ar1++              ;8
        sti     r1,*ar1++              ;9
	
        ldi     ar2,ar0
        ldi     *ar0++,r1
        sti     r1,*ar1++              ;10  first code "1" or "0"
jtemp1: ldi     11,rc                  ;11-34  12*2=24
        rptb    jrcout0
        ldi     *ar0++(2),r1
	and3    r4,r1,r6               ;r6=low 8 bit
	and     r5,r1                  ;r1=high 8 bit
	lsh     -8,r1
        sti     r6,*ar1++              
jrcout0:sti     r1,*ar1++
;--------------------------------------
        ldi     @CHNUM,ar0
        ldi     *ar0,r1
        sti     r1,*ar1++              ;35

        ldi     @PORT232,ar1
        ldi     55h,r0
        sti     r0,*ar1

        ldi     @MCTL,ar3
        ldi     MBUS1,ar1
        sti     ar1,*ar3
        ldi     @MCTLS,ar3
        sti     ar1,*ar3
        rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;subA: save data of 25,50 and 75hz
move:   ldi     @JINADDR,ar0           ;move fft data from 20 to 171
        ldi     @SAVE,ar1
	addi    20,ar0
        ldi     ar0,ar2
	addi    20,ar1
        ldi     ar1,ar3
        ldi     151,rc
	rptb    move1
	ldf     *ar0++,r1
move1:  stf     r1,*ar1++
        addi    JDLENTH,ar2
	addi    100h,ar3
        ldi     151,rc
	rptb    move2
	ldf     *ar2++,r1
move2:  stf     r1,*ar3++
	rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sub9: find f0
jfindf:
        ldi     J_S1,r4
        ldi     J_S2,ar7
        subi    r4,ar7
        ldi     @PWADDR,ar0
        ldi     J_R5,r5
        ldi     @JRESULT,ar2
        ldi     ar2,ar6
        addi    2,ar6                 
	ldf     0,r2                  
jcomp0  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    jcomp1                ;ar5 save ar0
	cmpf    *ar5++,r0             
	ldflt   *-ar5(1),r0           ;r1 save active addr.
jcomp1  ldilt   ar5,r1
	subi    1,r1
        ldi     r1,ar5
	subi    r5,ar5
        ldi     r5,rc
	lsh     1,rc                  
	rptb    jcomp2
jcomp2: stf     r2,*ar5++
	subi    ar0,r1               
	addi    r4,r1                  ;r4=first f
        lsh     -1,r1
	sti     r1,*ar2++
	cmpi    ar6,ar2
	blt     jcomp0
	rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sub2: jprc
jprc:   call    ifftj
        call    half
        call    jproc
        call    jlimit
        call    jrule
        call    jddata
        call    jdata
        call    jamplh
        call    jljs
        rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sub3: ifftj
ifftj:
        ldi     JS25,r0
        ldi     @JINADDR,ar1
        ldi     JDLENTH,rc
	ldf     0,r2
	lsh     1,rc
	subi    1,rc
	rptb    ift0
ift0:   stf     r2,*ar1++

        ldi     @SAVE,ar0
        ldi     @JINADDR,ar1
        ldi     JDLENTH,r1
	addi3   r1,ar1,ar2
	subi    r0,ar2
	addi    r0,ar0
	addi    r0,ar1
	
        ldi     25,r6  
        ldi     r6,rc
	rptb    ift1
	ldf     *ar0++,r1
	stf     r1,*ar1++
ift1:   stf     r1,*ar2--

        ldi     @SAVE,ar0
        ldi     @JINADDR,ar1
	addi    r0,ar0
	addi    100h,ar0
        ldi     JDLENTH,r1
	addi    r1,ar1
	addi3   r1,ar1,ar2
	subi    r0,ar2
	addi    r0,ar1
        ldi     r6,rc
	rptb    ift2
	ldf     *ar0++,r1
	negf    r1,r2
	stf     r1,*ar1++
ift2:   stf     r2,*ar2--

        ldi     @INADDRD,ar0
        ldi     @JINADDR,r0     
	sti     r0,*ar0
        ldi     @LOGFFT,ar0           ;ar0 save 09--512,0b--2048
        ldi     JLOGNUM,r0
	sti     r0,*ar0

	call    ifft
	rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sub4: half
half:
        ldi     @JINADDR,ar1
        ldi     2047,rc                 
	ldf     0,r3
        rptb    half0
	ldf     *ar1++,r2
half0:  addf    r2,r3
        mpyf    @XNUM,r3
	
        ldi     @JINADDR,ar1
        ldi     JDLENTH,rc
	subi    1,rc
        rptb    half1
	ldf     *ar1,r2
        subf    r3,r2                  ;r2=r2+m(i)
        cmpf    0,r2
        ldflt   0,r2
half1:  stf     r2,*ar1++
        rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sub5: jproc
jproc:
        ldi     @JINADDR,ar1
        ldi     @JINADDR,ar0
        ldi     0,r6
jproc0:
        ldf     *ar1++,r0
        ldi     44,rc
        rptb    jproc1
jproc1: addf    *ar1++,r0
        mpyf    JX45,r0
        stf     r0,*ar0++
        ldi     ar0,ar1
        addi    1,r6
        cmpi    2003,r6
        blt     jproc0

        ldi     @JINADDR,ar1
        ldi     @JINADDR,ar0
        ldi     0,r6
jproc2:
        ldf     *ar1++,r0
        ldi     44,rc
        rptb    jproc3
jproc3: addf    *ar1++,r0
        mpyf    JX45,r0
        stf     r0,*ar0++
        ldi     ar0,ar1
        addi    1,r6
        cmpi    1958,r6
        blt     jproc2
        rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sub6: jlimit
jlimit:
        ldi     @JINADDR,ar1
        ldi     1957,rc                 
        ldf     0,r4
        rptb    jlimi0
jlimi0: addf    *ar1++,r4
        mpyf    @XNUM,r4

        ldf     0,r5
        ldf     0,r0
        ldi     @JINADDR,ar1
	ldf     *ar1++,r2
        ldi     1957,rc
        rptb    jlimi1
	cmpf    r4,r2
        ble     jlimi1
	addf    r2,r5
        addf    1.0,r0
jlimi1: ldf     *ar1++,r2
	call    invf
	mpyf    r0,r5
        subf3   r4,r5,r0
        mpyf    JCIFF,r0
        addf    r0,r4
        ldi     @JLIANG,ar0
        stf     r4,*ar0
        rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sub7: jrule
jrule:
        ldi     @JDATAS0,ar1
        ldi     @JDATAD,ar0
        ldi     *ar1++,r0
        ldi     5117,rc                ;1024X7=7168, 7168-2048-1=5119
        rptb    jrule0
jrule0: ldi     *ar1++,r0
||      sti     r0,*ar0++
        sti     r0,*ar0++

        ldi     @JLIANG,ar1
        ldf     *ar1,r7

        ldi     @JINADDR,ar2           ;5120+1958=7078
        ldi     1957,rc
        rptb    jrule1
        ldi     0,r0
        cmpf    *ar2++,r7
        ldile   1,r0
jrule1: sti     r0,*ar0++

        ldi     @JDATAS0,ar1
        ldi     @JDATAD,ar0
        addi    512,ar0
        ldi     *ar0++,r0

⌨️ 快捷键说明

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