📄 lll.lst
字号:
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 1
MCS-51 Family Cross Assembler A S E M - 5 1 V 1.2
=====================================================
Source File: LLL.ASM
Object File: LLL.HEX
List File: LLL.LST
Line I Addr Code Source
1: ;*****************************************************************************
2: ;*****************************************************************************
3: ;*****************************************************************************
4: ; 05楼宇毕业设计
5: ;项目:8层电梯模拟控制
6: ;设计成员:周强 设计时间:3月20日至今
7: ;设计地点:江西应用工程职业学院实验单片机开发室
8: ;指导老师:饶裕
9: N 0000 ORG 0
10: B 00A0 XIANWEI EQU P2.0 ; 红外接收
11: B 00A1 DOWN EQU P2.1 ; 电动机反转
12: B 00A2 UP EQU P2.2 ; 正转
13: B 00A3 JINGGAO EQU P2.3 ; 报警
14: B 00A4 MEN EQU P2.4 ; 门
15: B 00A5 RS EQU P2.5
16: B 00A6 RW EQU P2.6
17: B 00A7 E EQU P2.7
18: B 00B0 DOOR EQU P3.0 ; 门开关
19: B 00B1 CHECK EQU P3.1 ; 检修开关
20: B 00B7 BAOHU EQU P3.7 ; 断电保护红外接收
21: 0000 7A 00 MOV R2,#00H ; 电梯状态寄存器
22: 0002 75 80 01 MOV P0,#01H ; 1602B初始化
23: 0005 71 A9 ACALL ENABLE ; 清除屏幕
24: 0007 75 80 38 MOV P0,#38H
25: 000A 71 A9 ACALL ENABLE ; 8位点阵方式
26: 000C 75 80 08 MOV P0,#08H
27: 000F 71 A9 ACALL ENABLE ; 显示光标不闪烁
28: 0011 75 80 06 MOV P0,#06H
29: 0014 71 A9 ACALL ENABLE ; 显示顺序设置(左到右)
30: 0016 75 80 80 MOV P0,#80H
31: 0019 71 A9 ACALL ENABLE ; 显示位置
32: 001B 51 23 ACALL DISP ; 显示当前楼层信号
33: 001D 75 80 0C MOV P0,#0CH
34: 0020 71 A9 ACALL ENABLE
35: 0022 D2 A3 SETB JINGGAO
36: 0024 30 B7 09 LPP: JNB BAOHU,MAIN ; 断电保护
37: 0027 C2 A1 CLR DOWN ; 下行
38: 0029 20 B7 F8 JB BAOHU,LPP ; 再次判断
39: 002C 01 30 AJMP MAIN ; 主程序
40: N 000B ORG 0BH ; 定时器0入口地址
41: 000B 02 03 65 LJMP TT0
42: N 0030 ORG 30H
43: 0030 D2 A1 MAIN: SETB DOWN ; 停止下行
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 2
Line I Addr Code Source
44: 0032 78 20 MOV R0,#20H ; 20地址送R0
45: 0034 7B 5F MOV R3,#5FH ; 循环次数送R3
46: 0036 75 90 FF MOV P1,#0FFH
47:
48: 0039 76 00 CLER: MOV @R0,#00H ; 00H送R0的内容地址
49: 003B 08 INC R0 ; 对RAM中20H~~7FH单元清0
50: 003C DB FB DJNZ R3,CLER
51: 003E D2 7F SETB 7FH ; 门关闭信号为1
52: 0040 75 89 01 MOV TMOD,#01H ; 定时器设为方式1
53: 0043 75 A8 82 MOV IE,#82H ; 开中断总允许
54: 0046 7B 64 MOV R3,#100 ; DELAY1循环次数
55: 0048 75 8C 3C MOV TH0,#3CH ; 50MS定时初值
56: 004B 75 8A B0 MOV TL0,#0B0H
57: 004E 75 30 01 MOV 30H,#1 ; 楼层信号指针
58: 0051 D2 A4 SETB MEN ; 模拟门限位开关
59: 0053 D2 B0 SETB DOOR ; 保持门关
60: 0055 7A FF MOV R2,#0FFH ; 电梯状态寄存器
61: 0057 75 80 01 MOV P0,#01H ; 1602B初始化
62: 005A 71 A9 ACALL ENABLE ; 清除屏幕
63: 005C 75 80 38 MOV P0,#38H
64: 005F 71 A9 ACALL ENABLE ; 8位点阵方式
65: 0061 75 80 08 MOV P0,#08H
66: 0064 71 A9 ACALL ENABLE ; 显示光标不闪烁
67: 0066 75 80 06 MOV P0,#06H
68: 0069 71 A9 ACALL ENABLE ; 显示顺序设置(左到右)
69: 006B 75 80 80 MOV P0,#80H
70: 006E 71 A9 ACALL ENABLE ; 显示位置
71: 0070 51 23 ACALL DISP ; 显示当前楼层信号
72: 0072 75 80 0C MOV P0,#0CH
73: 0075 71 A9 ACALL ENABLE
74: 0077 D2 A3 setb jinggao
75: 0079 51 A7 SCAN: ACALL KEYBORDSCAN ; 键盘扫描
76: 007B 20 A3 02 JB JINGGAO,LOOP1 ; 警告判断
77: 007E 21 4C AJMP ERR ; 报警
78: 0080 78 21 LOOP1: MOV R0,#21H ; 送楼层指针给R0
79: 0082 B6 01 04 CJNE @R0,#1H,LOOP ; 判断1楼是否有请求信号
80: 0085 C2 A4 CLR MEN ; 开电梯门
81: 0087 C2 7F CLR 7FH
82: 0089 76 00 LOOP: MOV @R0,#0
83: 008B 75 31 00 MOV 31H,#00H
84: 008E 78 22 MOV R0,#22H ; 送楼层指针给R0
85: 0090 B6 00 06 LP: CJNE @R0,#0,BBC ; 楼层请求信号判断
86: 0093 08 INC R0 ; 下一层
87: 0094 B8 29 F9 CJNE R0,#29H,LP ; 没到最顶层时返回继续判断下一层
88: 0097 80 E0 SJMP SCAN ; 无请求返回继续扫描
89: 0099 30 7F DD BBC: JNB 7FH,SCAN ; 门是否关闭,没关闭继续接受请求信号
90: 009C D2 A4 NEXT2: SETB MEN
91: 009E 76 00 MOV @R0,#0 ; 清除请求信号
92: 00A0 D2 8C SETB TR0 ; 开定时中断
93: 00A2 D2 A1 SETB DOWN ; 关闭电梯向下信号
94: 00A4 C2 A2 CLR UP ; 开启电梯向上信号
95: 00A6 7A 11 MOV R2,#11H ; 送电梯运行信号到R2
96: 00A8 51 23 ACALL DISP ; 显示当前运行状态
97: 00AA 51 A7 ACALL KEYBORDSCAN ; 读取键盘信号
98: 00AC 20 A3 02 JB JINGGAO,NEXT3
99: 00AF 21 4C AJMP ERR
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 3
Line I Addr Code Source
100: 00B1 E5 30 NEXT3: MOV A,30H ; 送当前楼层指针信号到A
101: 00B3 24 30 ADD A,#30H ; 加30H取当前楼层信号
102: 00B5 F8 MOV R0,A ; 保存当前楼层信号
103: 00B6 B6 FF 2E CJNE @R0,#0FFH,NEXT1 ; 比较当前楼层信号是否需要乘坐电梯
104: 00B9 76 00 MOV @R0,#00H ; 停止后将请求信号清除
105: 00BB E8 MOV A,R0 ; 当前楼层信号指针送到A
106: 00BC 94 10 SUBB A,#10H ; 减10H求得当前楼层
107: 00BE F8 MOV R0,A ; 当前楼层信号送R0
108: 00BF 76 00 MOV @R0,#0 ; 清除当前楼层请求信号
109: 00C1 D2 A2 SETB UP ; 关闭电动机
110: 00C3 C2 8C CLR TR0 ; 关闭定时器
111: 00C5 7A FF MOV R2,#0FFH ; 送停止信号到信号指针R2
112: 00C7 51 23 ACALL DISP ; 显示当前状态
113: 00C9 7B 32 MOV R3,#50
114: 00CB D2 7F SETB 7FH
115: 00CD C2 A4 CLR MEN ; 开电梯门
116: 00CF 51 A7 WAIT: ACALL KEYBORDSCAN ; 读取键盘信号
117: 00D1 20 A3 02 JB JINGGAO,WWW
118: 00D4 21 4C AJMP ERR
119: 00D6 30 7F 0A WWW: JNB 7FH,AK
120: 00D9 71 D5 ACALL DELAY1 ; 调延时子程序
121: 00DB 71 D5 ACALL DELAY1 ; 等待
122: 00DD DB F0 DJNZ R3,WAIT ; 等待
123: 00DF 7B 32 MOV R3,#50 ; 等待
124: 00E1 D2 A4 SETB MEN ; 关闭电梯门
125: 00E3 E5 30 AK: MOV A,30H ; 将当前楼层信号送A
126: 00E5 24 30 ADD A,#30H ; 加30H求当前楼层信号指针
127: 00E7 B4 38 B2 NEXT1: CJNE A,#38H,NEXT2 ; 比较判断是否到达最高层
128: 00EA D2 A2 SETB UP ; 是则短暂停留
129: 00EC C2 8C CLR TR0 ; 关闭定时器
130: 00EE 7A FF MOV R2,#0FFH ; 送停止信号到显示指针
131: 00F0 51 23 ACALL DISP ; 显示当前楼层信号
132: 00F2 51 A7 ACALL KEYBORDSCAN ; 读取键盘信号
133: 00F4 7A 00 NTXT11: MOV R2,#00H ; 送向下信号到R2
134: 00F6 C2 A1 CLR DOWN ; 启动电动机返回向下
135: 00F8 D2 8C SETB TR0 ; 开启定时器
136: 00FA 51 23 ACALL DISP ; 显示当前运行信号
137: 00FC 51 A7 ACALL KEYBORDSCAN ; 读取键盘信号
138: 00FE 20 A3 02 JB JINGGAO,NEXT22
139: 0101 21 4C AJMP ERR
140: 0103 E5 30 NEXT22: MOV A,30H ; 将当前楼层信号送A
141: 0105 24 30 ADD A,#30H ; 加30H求当前楼层请求信号指针
142: 0107 F8 MOV R0,A ; 转存到R0
143: 0108 B6 FF 2C CJNE @R0,#0FFH,GODOWN ; 判断当前楼层是否有电梯请求信号
144: 010B 76 00 MOV @R0,#00H ; 是则将当前信号清除
145: 010D E8 MOV A,R0 ; 将当前楼层请求信号指针送A
146: 010E 94 10 SUBB A,#10H ; 减10H求当前楼层信号指针
147: 0110 F8 MOV R0,A ; 信号指针送R0
148: 0111 76 00 MOV @R0,#0 ; 清除当前楼层请求信号
149: 0113 D2 A1 SETB DOWN ; 关闭电动机
150: 0115 7A FF MOV R2,#0FFH ; 送停止信号到R2
151: 0117 C2 8C CLR TR0 ; 关闭定时器
152: 0119 51 23 ACALL DISP ; 显示当前信号
153: 011B C2 A4 CLR MEN ; 开电梯门
154: 011D D2 7F SETB 7FH
155: 011F 51 A7 WAIT1: ACALL KEYBORDSCAN ; 读取键盘信号
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 4
Line I Addr Code Source
156: 0121 20 A3 02 JB JINGGAO,GGG
157: 0124 21 4C AJMP ERR
158: 0126 30 7F 0A GGG: JNB 7FH,AKK
159: 0129 71 D5 ACALL DELAY1 ; 等待
160: 012B 71 D5 ACALL DELAY1 ; 等待
161: 012D DB F0 DJNZ R3,WAIT1 ; 等待
162: 012F 7B 32 MOV R3,#50 ; 恢复初值
163: 0131 D2 A4 SETB MEN ; 关闭电梯门
164: 0133 E5 30 AKK: MOV A,30H ; 当前楼层信号送A
165: 0135 24 30 ADD A,#30H ; 加30H求当前楼层请求信号指针
166: 0137 B4 31 BA GODOWN: CJNE A,#31H,NTXT11 ; 判断是否到达最底层
167: 013A D2 A1 SETB DOWN ; 是则关闭电动机
168: 013C C2 8C CLR TR0 ; 关闭定时器
169: 013E 7A FF MOV R2,#0FFH ; 送停止信号到R2
170: 0140 E8 MOV A,R0 ; 送当前楼层请求信号指针到A
171: 0141 94 10 SUBB A,#10H ; 减10H求当前楼层信号指针
172: 0143 F8 MOV R0,A ; 转存R0
173: 0144 76 00 MOV @R0,#0 ; 清除当前楼层请求信号
174: 0146 D2 7F SETB 7FH
175: 0148 51 23 ACALL DISP ; 显示当前信号
176: 014A 01 79 AJMP SCAN ; 返回键盘扫描
177: ;=======================================检修主程序
178: 014C D2 A2 ERR: SETB UP ; 关闭电动机
179: 014E D2 A1 SETB DOWN
180: 0150 7A 33 MOV R2,#33H ; 送检修信号
181: 0152 51 23 ACALL DISP ; 显示当前
182: 0154 75 80 08 MOV P0,#08H ; 关显示
183: 0157 71 A9 ACALL ENABLE
184: 0159 71 CC ACALL DELAY ; ...
185: 015B 71 CC ACALL DELAY
186: 015D 71 CC ACALL DELAY ; ...
187: 015F 71 CC ACALL DELAY
188: 0161 71 CC ACALL DELAY
189: 0163 71 CC ACALL DELAY
190: 0165 71 CC ACALL DELAY
191: 0167 75 80 0C MOV P0,#0CH ; 开显示
192: 016A 71 A9 ACALL ENABLE
193: 016C 20 B1 DD JB CHECK,ERR ; 检修键是否按下
194: 016F 71 CC ACALL DELAY
195: 0171 20 B1 D8 JB CHECK,ERR
196: 0174 71 CC ACALL DELAY
197: 0176 51 23 ERR3: ACALL DISP ; 显示当前
198: 0178 75 80 08 MOV P0,#08H ; 关显示
199: 017B 71 A9 ACALL ENABLE
200: 017D 71 CC ACALL DELAY ; ...
201: 017F 71 CC ACALL DELAY
202: 0181 71 CC ACALL DELAY ; ...
203: 0183 71 CC ACALL DELAY
204: 0185 71 CC ACALL DELAY
205: 0187 71 CC ACALL DELAY ; ...
206: 0189 71 CC ACALL DELAY
207: 018B 75 80 0C MOV P0,#0CH ; 开显示
208: 018E 71 A9 ACALL ENABLE
209: 0190 30 B1 E3 JNB CHECK,ERR3 ; 等待键松开
210: 0193 75 65 FF MOV 65H,#0FFH ; 送警告标志到65H
211: 0196 D2 A4 SETB MEN ; 关闭电梯门
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 5
Line I Addr Code Source
212: 0198 D2 A3 SETB JINGGAO ; 关闭生光报警
213: 019A E5 30 MOV A,30H
214: 019C 24 20 ADD A,#20H
215: 019E B4 21 02 CJNE A,#21H,ERRR
216: 01A1 21 A7 AJMP ERR2
217: 01A3 C2 A1 ERRR: CLR DOWN ; 向下运行
218: 01A5 D2 8C SETB TR0 ; 开启定时器
219: 01A7 51 23 ERR2: ACALL DISP ; 显示当前
220: 01A9 75 80 08 MOV P0,#08H ; 关显示
221: 01AC 71 A9 ACALL ENABLE
222: 01AE 71 CC ACALL DELAY ; ...
223: 01B0 71 CC ACALL DELAY
224: 01B2 71 CC ACALL DELAY ; ...
225: 01B4 71 CC ACALL DELAY
226: 01B6 71 CC ACALL DELAY
227: 01B8 71 CC ACALL DELAY ; ...
228: 01BA 71 CC ACALL DELAY
229: 01BC 75 80 0C MOV P0,#0CH ; 开显示
230: 01BF 71 A9 ACALL ENABLE
231: 01C1 E5 30 MOV A,30H
232: 01C3 24 20 ADD A,#20H
233: 01C5 B4 21 DF CJNE A,#21H,ERR2 ; 是否到达最低层
234: 01C8 D2 A1 SETB DOWN ; 关闭电梯
235: 01CA C2 8C CLR TR0 ; 关闭定时器
236: 01CC 75 30 64 MOV 30H,#100
237: 01CF 51 23 ERR1: ACALL DISP ; 显示当前
238: 01D1 75 80 08 MOV P0,#08H ; 关显示
239: 01D4 71 A9 ACALL ENABLE
240: 01D6 71 CC ACALL DELAY ; ...
241: 01D8 71 CC ACALL DELAY
242: 01DA 71 CC ACALL DELAY ; ...
243: 01DC 71 CC ACALL DELAY
244: 01DE 71 CC ACALL DELAY
245: 01E0 71 CC ACALL DELAY ; ...
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -