;INT0和INT1中斷練習程式, INT1中斷優先 ;平時 LED 閃爍 ;INT0中斷 LED 左旋一圈 ;INT1中斷 LED 右旋一圈 ORG 0H JMP START ORG 03H JMP INT0_INT ORG 13H JMP INT1_INT START: MOV IE,#10000101B ;設定允許INT0和INT1中斷 MOV IP,#00000100B ;設定INT1中斷優先 MOV SP,#6FH ;將堆疊指標位址移到6F MOV A,#0Fh FLASH: MOV P2,A MOV R5,#15 CALL DELAY CPL A JMP FLASH INT0_INT: PUSH ACC ;將累加器內的值存到堆疊 PUSH PSW ;將PSW內的值存到堆疊(因以下2指令會影響到PSW內的值) SETB RS0 ;使用暫存器庫1 CLR RS1 MOV R4,#8 MOV A,#11111110B SHIFT_L: MOV P2,A MOV R5,#20 CALL DELAY RL A DJNZ R4,SHIFT_L POP PSW POP ACC RETI ;中斷程式結束,返回主程式 INT1_INT: PUSH ACC ;將累加器內的值存到堆疊 PUSH PSW ;將PSW內的值存到堆疊(因以下2指令會影響到PSW內的值) SETB RS1 CLR RS0 ;使用暫存器庫2 MOV R4,#8 MOV A,#01111111B SHIFT_R: MOV P2,A MOV R5,#25 CALL DELAY RR A DJNZ R4,SHIFT_R POP PSW POP ACC RETI ;中斷程式結束,返回主程式 DELAY: MOV R6,#200 DEL: MOV R7,#200 DJNZ R7,$ DJNZ R6,DEL DJNZ R5,DELAY RET END