25: RL A ; 左移一位
26: DJNZ R0, LOOP2 ; 判断移动位数
27: MOV R0,#07 ; 设置右移位数
28: LOOP3:RR A ; 右移一位
29: MOV P1, A ; 输出至P1
30: LCALL DELAY ; 调延时子程序
31: DJNZ R0, LOOP3 ; 右移7 位? 左右
32: DJNZ R3,LOOP1 ; 左右移3次? 移
33: POP PSW ; 从堆栈取回PSW值 恢复 EXT0
34: POP ACC ; 从堆栈取回值 A值 现场 中断子
35: RETI ; 返回主程序 程序
36: EXT1: PUSH ACC ; 将A值压入堆栈
37: PUSH PSW ; 将 PSW值压入堆栈
38: SETB RS1 ; 设工作组2 ,RS1=1 保护
39: CLR RS0 ; RS0=0 现场
40: MOV R3,#04 ;左右移4次
41: LOOP4:MOV R0, #06 ; 设置左移位数
42: MOV A ,#0FCH ; 设置左移初值
43: LOOP5:MOV P1, A ; 输出至P1
44: ACALL DELAY ; 调延时子程序
45: RL A ; 左移一位
46: DJNZ R0, LOOP5 ; 判断移动位数
47: MOV R0,#06 ; 设置右移位数
48: LOOP6:RR A ; 右移一位
49: MOV P1, A ; 输出至P1
50: LCALL DELAY ; 调延时子程序
51: DJNZ R0, LOOP6 ; 判断 左右
52: DJNZ R3,LOOP4 ; 左右移4次? 移
53: POP PSW ; 从堆栈取回PSW值 恢复 EXT1
54: POP ACC ; 从堆栈取回值 A值 现场 中断子
55: RETI ; 返回主程序 程序
56: DELAY:MOV R5, #20 ; 延时0.2秒子程序
57: DLY1: MOV R6, #20 ;
58: DLY2: MOV R7, #248 ;
59: DJNZ R7, $ ;
60: DJNZ R6, DLY2 ;
61: DJNZ R5, DLY ; 延时子
62: RET ; 程序
63: END ; 程序结束