📄 zd02.lst
字号:
A51 MACRO ASSEMBLER ZD02 01/08/2007 11:46:44 PAGE 1
MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN ZD02.OBJ
ASSEMBLER INVOKED BY: C:\Keil7.06\C51\BIN\A51.EXE ZD02.ASM SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;文件名:ZD02.ASM
2 ;程序功能:多级外部中断控制灯移动
0000 3 ORG 00H ; 主程序起始地址
0000 8013 4 JMP START ;跳到主程序START
0003 5 ORG 03H ;INT0中断子程序起始地址
0003 8026 6 JMP EXT0 ; 中断子程序
7
0013 8 ORG 13H ; INT1中断子程序起始地址
0013 803C 9 JMP EXT1
10
0015 75A885 11 START: MOV IE, #10000101B ; INT0中断使能
0018 75B804 12 MOV IP, #00000100B ; INT0中断优先
001B 758800 13 MOV TCON, #00000000B ; INT0为电平触发
001E 758170 14 MOV SP, #70H ;设定堆栈指针
15
0021 7400 16 MOV A, #00H ; A存有P1口欲显值
0023 F590 17 LOOP: MOV P1,A ; P1端口灯亮
0025 120077 18 LCALL DELAY ; 调延时1秒子程序
0028 F4 19 CPL A ;将A的值反相
0029 80F8 20 JMP LOOP
21
002B C0E0 22 EXT0: PUSH ACC ;将累加器的值压入堆栈保存
002D C0D0 23 PUSH PSW ;将 PSW的值压入堆栈保存
002F D2D3 24 SETB RS0 ;设定工作寄存器组1
0031 C2D4 25 CLR RS1 ;
26
0033 7B03 27 MOV R3,#03
0035 7808 28 LOOP1: MOV R0, #08
29 ;设置左移位数
0037 74FE 30 MOV A ,#0FEH ;设置左移初值
0039 F590 31 LOOP2: MOV P1, A ;输出至P1
003B 1177 32 ACALL DELAY ;调延时1秒子程序
003D 23 33 RL A ;左移一位
003E D8F9 34 DJNZ R0, LOOP2 ;判断移动位数
35
0040 7807 36 MOV R0,#07 ;设置右移位数
0042 03 37 LOOP3: RR A ;右移一位
0043 F590 38 MOV P1, A ;输出至P1
0045 120077 39 LCALL DELAY ;调延时1秒子程序
0048 D8F8 40 DJNZ R0, LOOP3
004A DBE9 41 DJNZ R3,LOOP1
004C D0D0 42 POP PSW ;从堆栈取回PSW的值
004E D0E0 43 POP ACC ;从堆栈取回值 A的值
0050 32 44 RETI ;返回主程序
45
0051 C0E0 46 EXT1: PUSH ACC ;将累加器的值压入堆栈保存
0053 C0D0 47 PUSH PSW ;将 PSW的值压入堆栈保存
0055 D2D4 48 SETB RS1 ;设定工作寄存器组1
0057 C2D3 49 CLR RS0 ;
0059 7B03 50 MOV R3,#03
005B 7806 51 LOOP4: MOV R0, #06 ;设置左移位数
005D 74FC 52 MOV A ,#0FCH ;设置左移初值
005F F590 53 LOOP5: MOV P1, A ;输出至P1
0061 1177 54 ACALL DELAY ;调延时1秒子程序
0063 23 55 RL A ;左移一位
0064 D8F9 56 DJNZ R0, LOOP5 ;判断移动位数
57
0066 7806 58 MOV R0,#06 ;设置右移位数
A51 MACRO ASSEMBLER ZD02 01/08/2007 11:46:44 PAGE 2
0068 03 59 LOOP6: RR A ;右移一位
0069 F590 60 MOV P1, A ;输出至P1
006B 120077 61 LCALL DELAY ;调延时1秒子程序
006E D8F8 62 DJNZ R0, LOOP6
0070 DBE9 63 DJNZ R3,LOOP4
0072 D0D0 64 POP PSW ;从堆栈取回PSW的值
0074 D0E0 65 POP ACC ;从堆栈取回值 A的值
0076 32 66 RETI ;返回主程序
67
0077 7D14 68 DELAY: MOV R5, #20 ; 延时1秒子程序
0079 7E14 69 DLY1: MOV R6, #20 ;
007B 7FF8 70 DLY2: MOV R7, #248 ;
007D DFFE 71 DJNZ R7, $ ;
007F DEFA 72 DJNZ R6, DLY2 ;
0081 DDF6 73 DJNZ R5, DLY1 ;
0083 22 74 RET ;
75 END ; 程序结束
A51 MACRO ASSEMBLER ZD02 01/08/2007 11:46:44 PAGE 3
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
ACC. . . . . . . . D ADDR 00E0H A
DELAY. . . . . . . C ADDR 0077H A
DLY1 . . . . . . . C ADDR 0079H A
DLY2 . . . . . . . C ADDR 007BH A
EXT0 . . . . . . . C ADDR 002BH A
EXT1 . . . . . . . C ADDR 0051H A
IE . . . . . . . . D ADDR 00A8H A
IP . . . . . . . . D ADDR 00B8H A
LOOP . . . . . . . C ADDR 0023H A
LOOP1. . . . . . . C ADDR 0035H A
LOOP2. . . . . . . C ADDR 0039H A
LOOP3. . . . . . . C ADDR 0042H A
LOOP4. . . . . . . C ADDR 005BH A
LOOP5. . . . . . . C ADDR 005FH A
LOOP6. . . . . . . C ADDR 0068H A
P1 . . . . . . . . D ADDR 0090H A
PSW. . . . . . . . D ADDR 00D0H A
RS0. . . . . . . . B ADDR 00D0H.3 A
RS1. . . . . . . . B ADDR 00D0H.4 A
SP . . . . . . . . D ADDR 0081H A
START. . . . . . . C ADDR 0015H A
TCON . . . . . . . D ADDR 0088H A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -