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

📄 sample_a.asm

📁 同事写的一个内核
💻 ASM
字号:
; sample for k51 based application
; by geweidong, 2005-11-28
;-------------------------------------------------------------------------------

extrn data (k51_int_nest)
extrn code (k51_tick, k51_int_exit)

extrn code (isr_timer0, isr_timer1)

;-------------------------------------------------------------------------------
; isr frame for timer0-intr
cseg at 0bh
t0_intr_entry:
    inc     k51_int_nest        ; this variable should inc by 1 intr-entry
    ljmp    t0_intr

; isr frame for timer1 intr.
cseg at 1bh
    inc     k51_int_nest        ; this variable should inc by 1 intr-entry
    ljmp    t1_intr

;-------------------------------------------------------------------------------

seg_t0_intr     segment code
rseg seg_t0_intr

t0_intr:
    push    psw
    push    acc
    push    b
    push    dpl
    push    dph                 ; these registers must push to stack

    mov     a,      r0
    push    acc
    mov     a,      r1
    push    acc
    mov     a,      r2
    push    acc
    mov     a,      r3
    push    acc
    mov     a,      r4
    push    acc
    mov     a,      r5
    push    acc
    mov     a,      r6
    push    acc
    mov     a,      r7
    push    acc                 ; if a c function called, 
                                ; r0-r7 should save to stack.
                                ; if use assembly, these may be not necessary

    lcall   isr_timer0          ; c function called

    ; lcall   k51_tick            ; k51_tick() can be called at any level

    pop     acc
    mov     r7,     a
    pop     acc
    mov     r6,     a
    pop     acc
    mov     r5,     a
    pop     acc
    mov     r4,     a
    pop     acc
    mov     r3,     a
    pop     acc
    mov     r2,     a
    pop     acc
    mov     r1,     a
    pop     acc
    mov     r0,     a           ; restore r0-r7

    lcall   k51_int_exit        ; this function must called at this level
                                ; for correct stack frame.

    pop     dph
    pop     dpl
    pop     b
    pop     acc
    pop     psw
    reti

seg_t1_intr     segment code
rseg seg_t1_intr

t1_intr:
    push    psw
    push    acc
    push    b
    push    dpl
    push    dph                 ; these registers must push to stack

    mov     a,      r0
    push    acc
    mov     a,      r1
    push    acc
    mov     a,      r2
    push    acc
    mov     a,      r3
    push    acc
    mov     a,      r4
    push    acc
    mov     a,      r5
    push    acc
    mov     a,      r6
    push    acc
    mov     a,      r7
    push    acc                 ; if a c function called, 
                                ; r0-r7 should save to stack.
                                ; if use assembly, these may be not necessary

    lcall   isr_timer1          ; c function called

    pop     acc
    mov     r7,     a
    pop     acc
    mov     r6,     a
    pop     acc
    mov     r5,     a
    pop     acc
    mov     r4,     a
    pop     acc
    mov     r3,     a
    pop     acc
    mov     r2,     a
    pop     acc
    mov     r1,     a
    pop     acc
    mov     r0,     a           ; restore r0-r7

    lcall   k51_int_exit        ; this function should be called before isr exit.

    pop     dph
    pop     dpl
    pop     b
    pop     acc
    pop     psw
    reti


end

⌨️ 快捷键说明

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