org 0000h                     ;开始
sjmp start                     ;跳到主程序
org 0003h                     ;int0中断入口（p3.2）
sjmp ext0                      ;到中断子程序
start: mov ie,#10000001b            ;中断使能
mov ip,#00000001b             ;中断优先
mov tcon,#0000000b            ;中断为电平触发
mov sp,#70h                   ;堆栈指针
main:                               ;主程序循环点亮
mov p1,#0FFh                  ;全亮
lcall delay                   ;延时一段时间
mov a,#01h                    ;每次只亮一个灯。
loop: mov p1,a                      ;输出到p1
lcall delay                   ;延时
rl a                          ;循环左移
ajmp loop                     ;跳转main继续循环
ext0: push acc                      ;把A的值压入堆栈，保存A）
push psw                      ;（保存现场）
cpl p3.3                      ;小喇叭响
acall deL                     ;小喇叭响的速率
pop psw                       ;恢复现场
pop acc
reti
delay:mov r5,#20                    ;延时子程序1闪烁灯调用
d1:   mov r6,#20
d2:   mov r7,#250
djnz r7,$
djnz r6,d2
djnz r5,d1
ret
del:  mov r4,#250                     ;延时子程序2小喇叭调用
djnz r4,$
ret
end
