📄 daima25.asm
字号:
ORG 2006H
DCW HSOINT
ORG 2080H
MAIN: LD SP,#00C0H
CLRB INT_PENDING
LDB INT_MASK,#08H ;开HSO中断
ORG 200AH
DCW SOFTINT
ORG 2080H
LD SP,#00C0H
DI
CLRB INT_PENDING
LDB INT_MASK,#20H ;允许软件定时器中断
LDB REG1,REG2 ;软件定时器0的溢出次数赋给REG1
LDB REG3,REG4 ;软件定时器2的溢出次数赋给REG3
LDB HSO_COMMAND,#38H ;允许软件定时器0中断
ADD HSO_TIME,TIMER1,#5000
NOP
NOP
LDB HSO_COMMAND,#3AH ;允许软件定时器2中断
ADD HSO_TIME,TIMER1,#0FFFFH
NOP
NOP
EI
LDB P2,##21H
HERE: SJMP HERE
SOFTINT:NOP ;软件中断子程序
LDB REG5,IOS1
JBS REG5,0,STIMER0
JBS REG5,2,STIMER2
SJMP RETURN
STIMER0:DI
LDB HSO_COMMAND,#38H
ADD HSO_TIME,TIMER1,#5000
DJNZ REG1,ENAB
LDB REG1,REG2
XORB P2,#01H
SJMP ENAB
STIMER2:DI
LDB HSO_COMMAND,#3AH
ADD HSO_TIME,TIMER1,#0FFFFH
DJNZ REG3,ENAB
LDB REG3,REG4
XORB P2,#20H
ENAB: EI
RETURN: RET
END
HSO两个软件定时器同时运行,程序中,用P2.0和P2.5引脚上接的LED状态变化来表示软件定时器0和软件定时器2的定时时刻已到。程序运行后,软件定时器0和软件定时器2同时工作,由于所有的软件定时器的中断入口是共用的,因此,在中断服务程序中,要先检测IOS1寄存器,以判别是哪一个软件定时器产生了中断。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -