org 0000h      ;开始
sjmp start
org 0003h      ; 中断入口（P3.2）
sjmp ext0              ;到中断子程序
start:  mov ie,#10000001b      ;中断使能
mov ip,#00000001b      ;中断优先
mov tcon,#0000000b     ;中断为电平触发
mov sp,#70h            ;堆栈指针
loop:   mov a,#01h             ;左移动初值
mov r2,#07             ;左移动7次
loop1:  mov p1,a               ;输出到P1口
acall delay             ;延时
rl a                   ;左移动一位
djnz r2,loop1          ;左移动7次了吗？
mov r2,#07             ;设定右移7次
loop2:  rr a 
mov p1,a
acall delay
djnz r2,loop2          ;右移动7次了吗？ 
sjmp loop
ext0:   push acc               ;把a压入堆栈
push psw               ;保存现场
setb rs0               ;设定工作寄存器1
clr rs1
mov a,#0FFH            ;使P1全亮一次
mov r2,#10             ;闪烁5次（亮灭共10次，小心了）
loop3:  mov p1,a               ;输出到P1
acall delay
cpl a
djnz r2,loop3          ;10次到了么？没有继续否则完成
pop psw                ;恢复现场
pop acc
reti
delay:  mov r5,#20             ;延时200MS
d1:     mov r6,#20
d2:     mov r7,#250
djnz r7,$
djnz r6,d2
djnz r5,d1
ret
end
