ORG 0000H ; main 跳转
LJMP main
ORG 0003H ; INT0 中断向量
AJMP TriINT0
ORG 0013H ; INT1 中断向量
AJMP TriINT1
ORG 0030H ; 中断子程序
TriINT0:
; A 触发子程序
A1If:
MOV C, 20H.3
JNC A3Set
; 如 D3 != 1 则跳过 清零程序
A2Clr:
CLR 20H.3
CLR 20H.2
CLR 20H.1
; 清零程序
A3Set:
CLR 20H.0 ; A识别位 --- 0
SETB 20H.1 ; A触发标志位 = 1
A4If:
MOV C, 20H.1
ANL C, 20H.2
JNC A6ret
; 如果 (D1 and D2) != 1 则跳过 D3 置1程序
A5Set:
SETB 20H.3
; D3 置1程序
A6ret:
RETI
; INT0 中断程序返回
TriINT1:
; C 触发子程序
B1If:
MOV C, 20H.3
JNC B3Set
; 如 D3 != 1 则跳过 清零程序
B2Clr:
CLR 20H.3
CLR 20H.2
CLR 20H.1
; 清零程序
B3Set:
SETB 20H.0 ; C识别位 --- 1
SETB 20H.2 ; C触发标志位 = 1
B4If:
MOV C, 20H.1
ANL C, 20H.2
JNC B6ret
; 如果 (D1 and D2) != 1 则跳过 D3 置1程序
B5Set:
SETB 20H.3
; D3 置1程序
B6ret:
RETI
; INT0 中断程序返回
ORG 0100H
main:
SETB EA ; 总中断允许 = 1 (开)
SetINT0:
SETB IT0 ; INT0 触发方式 = 1 (下降沿触发)
SETB PX0 ; INT0 优先级 = 1 (高)
SETB EX0 ; INT0 中断允许 = 1 (开)
; INT0 控制位
SetINT1:
SETB IT1 ; INT1 触发方式 = 1 (下降沿触发)
SETB PX1 ; INT1 优先级 = 1 (高)
SETB EX1 ; INT1 中断允许 = 1 (开)
; INT1 控制位
OutPut:
MOV C, 20H.3
Loop0:
JNC Loop0
; 对D3轮询 如 D3 = 1 则跳转到 "If"
C0If:
MOV C, 20H.0
JC right
JNC lift
; D0 = 1 跳转到right D0 = 0 跳转到lift
right:
SETB P1.0
CLR P1.1
SJMP LOOP
; 右转程序
lift:
SETB P1.1
CLR P1.0
SJMP LOOP
; 左转程序
LOOP:
SJMP OutPut
END