“中断服务” 在未结束前,降低自己的优先级。 如不要嵌套可这样写: ORG 0023H JBC RI, SUB_RX JBC TI, SUB_TX INT_RET: IRET NOP ;--------------------- ORG 0050H sub_rx: ;不要嵌套 的 MOV BUF_SBUF, SBUF CLR ES ; 停本中断源, 不要嵌套 ACALL INT_RET ; 降低自己的优先级 ; “中断服务”还继续。。。。。 XCH A, R1 ANL A, #1FH ORL A, #60H ; IN_BUF: 60H -7FH XCH A, R1 XCH A, BUF_SBUF MOV @R1, A INC R1 INC IN_LEN MOV A, BUF_SBUF SETB ES ; 开本中断源 ; 中断相关指令,下一 "ret" 之前不会被中断打断, RET ; (在就是Intel的高明!!!)及时出栈 ;------------------------------------------------------------ SUB_TX: ;下面为 嵌套 的 ACALL INT_RET ; 降低自己的优先级 XCH A, OUT_LEN JZ SUB_TX_EX ;-------------------------- XCH A, OUT_INDEX ANL A, #1FH ORL A, #40H ; OUT_BUF: 40H TO 5FH XCH A, R0 XCH A, @R0 MOV SBUF, A MOV A, @R0 XCH A, R0 INC A XCH A, OUT_INDEX DEC A SUB_TX_EX: XCH A, OUT_LEN RET ;----------------------------
|