📄 jhpwm.asm
字号:
AL EQU 20H
AH EQU 21H
AX EQU 20H
CL EQU 24H
CH EQU 25H
DL EQU 26H
DH EQU 27H
FLAG EQU 30H
HSO0_HIGH EQU 32H
HSO0_LOW EQU 34H
HSO1_HIGH EQU 36H
HSO1_LOW EQU 38H
PI EQU 0E800H ;低8位开关地址
ORG 2006H ;HSO中断向量地址
DW HSO_INT
ORG 2080H
LD SP,#60H
DI ;关中断
CLRB INTPEN ;清中断挂号寄存器
ORB INTMAS,#08H ;允许HSO中断
LDB IOC0,#05H
LDB HSOCOM,#30H ;允许HSO0触发负电平
;中断方式
ADD HSOTIM,TIMER1,#0030H
NOP
NOP
LDB HSOCOM,#31H ;允许HSO1触发负电平
;中断方式
ADD HSOTIM,TIMER1,#0100H
NOP
NOP
LDB FLAG,IOS0
EI ;开中断
LDB DL,#4H
SJMP INIT
READKEY:LDB DL,PI
ANDB DL,#07H
XORB DH,DL
JE READKEY
INIT: LDB DH,DL
LDB AL,DL
CLRB AH
PUSH AX
MUL AX,#100H
LD HSO0_HIGH,AX
POP AX
MUL AX,#50H
LD HSO1_HIGH,AX
LDB AL,DL
XORB AL,#07H
CLRB AH
PUSH AX
MUL AX,#100H
LD HSO0_LOW,AX
POP AX
MUL AX,#50H
LD HSO1_LOW,AX
SJMP READKEY
HSO_INT:PUSHF ;HSO中断子程序
LDB CL,IOS0 ;读当前HSO状态
LDB CH,CL
XORB CL,FLAG ;与原状态比较
LDB FLAG,CH
JBC CL,0,HSO1 ;HSO0无跳变转HSO1
JBS FLAG,0,LOW0
LDB HSOCOM,#30H ;允许HSO0触发正电平
;中断方式
ADD HSOTIM,TIMER1,HSO0_HIGH
NOP
NOP
SJMP HSO1
LOW0:
LDB HSOCOM,#10H ;允许HSO0触发负电平
;中断方式
ADD HSOTIM,TIMER1,HSO0_LOW
NOP
NOP
HSO1: JBC CL,1,EXIT ;HSO1无跳变转EXIT
JBS FLAG,1,LOW1
LDB HSOCOM,#31H ;允许HSO1触发正电平
;中断方式
ADD HSOTIM,TIMER1,HSO1_HIGH
NOP
NOP
SJMP EXIT
LOW1:
LDB HSOCOM,#11H ;允许HSO1触发负电平
;中断方式
ADD HSOTIM,TIMER1,HSO1_LOW
NOP
NOP
EXIT: POPF
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -