功能说明:
主程序将P1的8个LED作左移右移,中断时(按INT0时)使P1的8个LED闪烁5次。
硬件原理图

**********************外部中断(INT0/INT1)实验源程序**********************
| ORG 0000H | ;起始地址 | |
| JMP START | ;跳到主程序START | |
| ORG 0003H | ;INT0中断子程序起始地址 | |
| JMP EXT0 | ;中断子程序 | |
| START: | MOV IE,#10000001B | ;INT0中断使能 |
| MOV IP,#00000001B | ;INT0中断优先 | |
| MOV TCON,#00000000B | ;INT0为电平触发 | |
| MOV SP,#70H ; | ;设定堆栈指针 | |
| LOOP: | MOV A,#0FFH | ;左移初值 |
| CLR C | ;C=0 | |
| MOV R2,#08 | ;设定左移8次 | |
| LOOP1: | RLC A | ;含C左移一位 |
| MOV P1,A | ;输出至P1 | |
| CALL DELAY | ;延时0.2秒 | |
| DJNZ R2,LOOP1 | ;左移8次 | |
| MOV R2,#07 | ;设定右移7次 | |
| LOOP2: | RRC A | ;含C右移一位 |
| MOV P1,A | ;输出至P1 | |
| CALL DELAY | ;延时0.2秒 | |
| DJNZ R2,LOOP2 | ;左移7次 | |
| JMP LOOP | ;重复 | |
| EXT0: | PUSH ACC | ;将累加器的值压入堆栈保存 |
| PUSH PSW | ;将PSW的值压入堆栈保存 | |
| SETB RS0 | ;设定工作寄存器组1 | |
| CLR RS1 | ||
| MOV A,#00 | ;为使P1全亮 | |
| MOV R2,#10 | ;闪烁5次(全亮,全减10次) | |
| LOOP3: | MOV P1,A | ;将A输出至P1 |
| CALL DELAY | ;延时0.2秒 | |
| CPL A | ;将A的值取反 | |
| DJNZ R2,LOOP3 | ;闪烁5次(亮减10次)? | |
| POP PSW | ;从堆栈取回PSW的值 | |
| POP ACC | ;从堆栈取回A的值 | |
| RETI | ;返回主程序 | |
| DELAY: | MOV R5,#20 | ;0.2秒 |
| D1: | MOV R6,#20 | ;10毫秒 |
| D2: | MOV R7,#248 | ;0.5毫秒 |
| DJNZ R7,$ | ||
| DJNZ R6,D2 | ||
| DJNZ R5,D1 | ||
| RET | ||
| END |