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

📄 dzbms.asm

📁 铁路数字编码信号解码软件
💻 ASM
📖 第 1 页 / 共 2 页
字号:
dzbm:
        ldi     *ar0++,r0
        ldi     *ar0++,r1
        and     0ffh,r0
        and     0fh,r1
        lsh     8,r1
        addi    r1,r0
        lsh     6,r0
        ldi     @DZBMF1,ar1
        sti     r0,*ar1

        ldi     @PORT2,ar0
        ldi     *ar0,r2                ;F0C
        and     0fh,r2
        ldi     @F0C,ar1
        sti     r2,*ar1
        ldi     1700,r0
        cmpi    2,r2
        ldieq   2000,r0
        cmpi    3,r2
        ldieq   2300,r0
        cmpi    4,r2
        ldieq   2600,r0

        float   r0
        ldf     r0,r1
        call    outputf
        call    dzinit

idend:  rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
outputf:
        mpyf    @SINGFXS,r0
        addf    0.5,r0
        fix     r0
        mpyf    @SINGFXS,r1
        addf    0.5,r1
        fix     r1

        ldi     0fh,r6
        lsh     16,r6
        and3    r6,r0,r5
        lsh     -16,r5
        ldi     @DDSD1,ar0
        sti     r5,*ar0
        sti     r0,*ar0
        ldi     @DDSC1,ar0
        ldi     8h,r5
        sti     r5,*ar0
        and3    r1,r6,r5
        lsh     -16,r5
        ldi     @DDSD1,ar0
        sti     r5,*ar0
        sti     r1,*ar0
        ldi     @DDSC1,ar0
        ldi     9h,r5
        sti     r5,*ar0
        rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
outputf1:
        cmpi    3,r4
        blt     ef1
        call    cinitt1
        br      ef1e
ef1:
        ldi     @F1,ar0
        ldi     *ar0,r0
        float   r0
        mpyf    0.1,r0
        mpyf    0.1,r0
        call    invf
        mpyf    @T1XS,r0
        addf    0.5,r0
        fix     r0
        ldi     r0,r4
        call    initt1
ef1e:   rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;dzbm subE: crc
;VERITY: VCODE = &H6F: I = 27
;VALOOP: IF I < 1 THEN GOTO VEND
;        IF A(I) = 0 THEN I = I - 1: GOTO VALOOP
;        K = 0: FOR J = 0 TO 6: K = K + A(I - J) * 2 ^ (6 - J): NEXT J
;        I = I - 7
;VLOOP:  IF I < 0 THEN GOTO VEND
;        VLIU = K XOR VCODE
;VBLOOP: K = VLIU
;        IF I < 1 THEN GOTO VEND
;VCLOOP: IF K < 64 THEN K = K * 2 + A(I): I = I - 1
;        IF K < 64 AND I > 0 THEN GOTO VCLOOP
;        GOTO VLOOP
;VEND:   A(1) = 1 AND K: A(2) = (2 AND K) / 2: A(3) = (4 AND K) / 4
;        A(4) = (8 AND K) / 8: A(5) = (16 AND K) / 16: A(6) = (32 AND K) / 32

crc:    ldi     27,ar7                 ;1-27 bits
        ldi     6fh,ar6                ;VCODE
        ldi     @DZBMF1,ar0
        addi    26,ar0
valoop: cmpi    1,ar7
        blt     vend
        ldi     *ar0,r0
        cmpi    0,r0
        bne     valoop0
        subi    1,ar0
        subi    1,ar7
        br      valoop
valoop0:ldi     0,r6                   ;r6=K
        ldi     6,r0
        ldi     6,rc
        rptb    valoop1
        ldi     *ar0--,r1
        lsh     r0,r1
        subi    1,r0
valoop1:addi    r1,r6
        subi    7,ar7
vloop:  cmpi    0,ar7
        blt     vend
        xor     ar6,r6
        cmpi    1,ar7
        blt     vend
vcloop: cmpi    64,r6
        bge     vloop
        mpyi    2,r6
        addi    *ar0--,r6
        subi    1,ar7
        cmpi    64,r6
        bge     vloop
        cmpi    0,ar7
        bgt     vcloop
vend:   ldi     @DZBMF1,ar0
        ldi     r6,r0
        and     1,r0
        sti     r0,*ar0++
        ldi     r6,r0
        and     2,r0
        lsh     -1,r0
        sti     r0,*ar0++
        ldi     r6,r0
        and     4,r0
        lsh     -2,r0
        sti     r0,*ar0++
        ldi     r6,r0
        and     8,r0
        lsh     -3,r0
        sti     r0,*ar0++
        ldi     r6,r0
        and     16,r0
        lsh     -4,r0
        sti     r0,*ar0++
        ldi     r6,r0
        and     32,r0
        lsh     -5,r0
        sti     r0,*ar0
        rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
dzinit: ldi     @DZBMF1,ar0
        ldi     *ar0,r0
        ldi     1,r2
        ldi     0,r1
        ldi     @DZBMF1,ar2
        ldi     26,rc
        rptb    dzi0
        lsh3    r1,r2,r5
        and3    r5,r0,r3
        negi    r1,r4 
        lsh     r4,r3
        addi    1,r1
dzi0:   sti     r3,*ar2++
        ldi     1,r1
        sti     r1,*ar2

        call    crc

        ldi     @FIK0,ar0
        ldi     @FK,ar1
        ldi     @DZBMF1,ar2
        ldi     27,rc
        rptb    dzi1
        ldf     *ar0++,r0
        ldi     *ar2++,r1
        cmpi    0,r1
        ldfeq   0,r0
dzi1:   stf     r0,*ar1++
        rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;INTERRUPT SERVER;;;;;;;;;;;;;;;;;;;;;;sub2: timer0
timer0: push    st
	push    r0
	pushf   r0
        push    r1
        pushf   r1
        push    r2
        pushf   r2
	push    ar0
        push    ar1
        push    ar2
        push    BK

        push    ar3
        push    ar4
        push    ar7

        ldf     0,r2
        ldi     @FK,ar0
        ldi     @DZBMF1,ar1
        ldi     @DFIK,ar2
        ldi     @FRXS,ar3 
        ldi     0,ar7
        subi    1,ar0
        subi    1,ar2
        subi    1,ar3

sdzl:   ldi     *ar1++,r0
        cmpi    0,r0
        beqd    sdzbm0
        addi    1,ar0
        addi    1,ar2
        addi    1,ar3

        addf3   *ar0,*ar2,r0
        ldf     r0,r1
        subf    @PMAX,r1
        cmpf    0,r1
        ldfge   r1,r0
        stf     r0,*ar0
        fix     r0
        ldi     @COSIN,ar4
        addi    r0,ar4
        mpyf3   *ar4,*ar3,r0
        addf    r0,r2
sdzbm0: addi    1,ar7
        cmpi    28,ar7
        blt     sdzl

        mpyf    @PXS,r2
        addf    0.5,r2
        fix     r2
        and     0fffh,r2
        ldi     0,r0
        ldi     @DDSD1,ar0
        sti     r0,*ar0
        sti     r2,*ar0++
        ldi     0ah,r0
        sti     r0,*ar0

        pop     ar7
        pop     ar4
        pop     ar3
        br      t_end
;---------------------------------------
t_end:  pop     BK
        pop     ar2
        pop     ar1
	pop     ar0
        popf    r2
        pop     r2
        popf    r1
        pop     r1
	popf    r0
	pop     r0
	pop     st
	reti                          
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ddsinit
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	.data
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;COMMON,NO CHANG
FS              .SET     727H          ;FS=8192Hz
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ADRR
SAMP            .WORD    6010H         ;3 words
;---------------------------------------
SGAMP           .WORD    6020H
F0C             .WORD    6022H
JYAMP           .WORD    6023H
F1              .WORD    6026H
SFLAG           .WORD    6029H
;--------------------------------------------------------------------------
FK              .WORD    6040H         ;28 WORDS
DZBMF1          .WORD    6060H         ;28 WORDS

MCTL            .WORD    808064H
STCK            .word    809E00H
;------------------------------------------------------------SPECIER ADDR.
PORT2           .word    0c00000H       ;SEND DATA
;------------------------------------------------------------------DDS
DDSS            .WORD    810002H

⌨️ 快捷键说明

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