📄 vector.asm
字号:
NAME VECTOR
?C_INITSEG SEGMENT CODE
?BI?VECTOR SEGMENT BIT
?PR?timer0_interrupt?VECTOR SEGMENT CODE
?PR?int0_interrupt?VECTOR SEGMENT CODE
?PR?___delay?VECTOR SEGMENT CODE
?PR?soft_interrupt?VECTOR SEGMENT CODE
EXTRN DATA(jiffies)
EXTRN DATA(th1_val)
; EXTRN DATA(tl1_val)
EXTRN BIT (timerbh_pending)
EXTRN BIT (int0bh_pending)
EXTRN CODE (timer_bh)
EXTRN CODE (int0_bh)
RSEG ?PR?timer0_interrupt?VECTOR
USING 0
timer0_interrupt:
MOV TH0, #063H;9.6M TH0 = #63H,12M TH0 = #3CH
MOV TL0, #0B0H
INC jiffies
SETB timerbh_pending
RETI
RSEG ?PR?int0_interrupt?VECTOR
USING 0
int0_interrupt:
; PUSH ACC
CLR TR0
; MOV tl1_val, TL0
MOV th1_val, TH0
; CLR A
; MOV TH0, A
; MOV TL0, A
SETB TR0
SETB int0bh_pending
; POP ACC
RETI
RSEG ?BI?VECTOR
in_softint: DBIT 1
RSEG ?C_INITSEG
DB 0C1H, in_softint
RSEG ?PR?soft_interrupt?VECTOR
PUBLIC soft_interrupt
soft_interrupt:
USING 0
JB in_softint,out
CLR EA
JB timerbh_pending, ?do_softint?100
JNB int0bh_pending, out_sti
?do_softint?100:
SETB in_softint
?do_softint?restart:
SETB EA
PUSH ACC
PUSH B
PUSH DPH
PUSH DPL
PUSH PSW
MOV PSW,#00H
PUSH AR0
PUSH AR1
PUSH AR2
PUSH AR3
PUSH AR4
PUSH AR5
PUSH AR6
PUSH AR7
USING 0
JBC timerbh_pending, call_timer_bh
SJMP do_softint?1
call_timer_bh:
LCALL timer_bh
do_softint?1:
JBC int0bh_pending, call_int0_bh
SJMP do_softint?2
call_int0_bh:
LCALL int0_bh
do_softint?2:
POP AR7
POP AR6
POP AR5
POP AR4
POP AR3
POP AR2
POP AR1
POP AR0
POP PSW
POP DPL
POP DPH
POP B
POP ACC
CLR EA
JB timerbh_pending,?do_softint?restart
JB int0bh_pending,?do_softint?restart
CLR in_softint
out_sti:
SETB EA
out:
RET
; $IF 0
RSEG ?PR?___delay?VECTOR
PUBLIC ___delay
___delay:
USING 0
MOV A,AR7
JNZ __delay?2
__delay?1:
MOV A,AR6
JZ __delay?3
DEC AR6
__delay?2:
DJNZ R7,__delay?2
LJMP __delay?1
__delay?3:
RET
; $ENDIF
CSEG AT 00003H
LCALL int0_interrupt
LJMP soft_interrupt
CSEG AT 0000BH
LCALL timer0_interrupt
LJMP soft_interrupt
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -