📄 main.lst
字号:
1082 .LM130:
1083 0508 1192 st Z+,__zero_reg__
1085 .LM131:
1086 050a 8150 subi r24,lo8(-(-1))
1087 050c 87FF sbrs r24,7
1088 050e FCCF rjmp .L101
1089 /* epilogue: frame size=0 */
1090 0510 0895 ret
1091 /* epilogue end (size=1) */
1092 /* function clr_decode size 8 (7) */
1097 .Lscope6:
1100 .global test_hu
1102 test_hu:
291:main.c **** }
292:main.c ****
293:main.c **** //检测哪个分机拿起了听筒, 但不检测num 号机,
294:main.c **** uchar test_hu(uchar num) //若num为0则检查所有分机, 无返回0, 有返回分机号1-4
295:main.c **** {
1104 .LM132:
1105 /* prologue: frame size=0 */
1106 /* prologue end (size=0) */
296:main.c **** uchar i;
297:main.c **** for(i=0;i<4;i++) //检测有没有分机拿起
1108 .LM133:
1109 0512 40E0 ldi r20,lo8(0)
1110 0514 682F mov r22,r24
1111 0516 7727 clr r23
1112 0518 E0E0 ldi r30,lo8(hu)
1113 051a F0E0 ldi r31,hi8(hu)
1114 051c 20E0 ldi r18,lo8(0)
1115 051e 30E0 ldi r19,hi8(0)
1116 .L109:
298:main.c **** {
299:main.c **** if(hu[i]&&((i+1)!=num))
1118 .LM134:
1119 0520 8081 ld r24,Z
1120 0522 8823 tst r24
1121 0524 49F0 breq .L107
1122 0526 C901 movw r24,r18
1123 0528 0196 adiw r24,1
1124 052a 8617 cp r24,r22
1125 052c 9707 cpc r25,r23
1126 052e 21F0 breq .L107
300:main.c **** {
301:main.c **** return(i+1);
1128 .LM135:
1129 0530 4F5F subi r20,lo8(-(1))
1130 0532 842F mov r24,r20
1131 0534 9927 clr r25
1132 0536 0895 ret
1133 .L107:
1135 .LM136:
1136 0538 4F5F subi r20,lo8(-(1))
1137 053a 2F5F subi r18,lo8(-(1))
1138 053c 3F4F sbci r19,hi8(-(1))
1139 053e 3196 adiw r30,1
1140 0540 4430 cpi r20,lo8(4)
1141 0542 70F3 brlo .L109
302:main.c **** }
303:main.c **** }
304:main.c **** return 0; //返回分机号
1143 .LM137:
1144 0544 80E0 ldi r24,lo8(0)
1145 0546 90E0 ldi r25,hi8(0)
305:main.c **** }
1147 .LM138:
1148 0548 0895 ret
1149 /* epilogue: frame size=0 */
1150 /* epilogue: noreturn */
1151 /* epilogue end (size=0) */
1152 /* function test_hu size 28 (28) */
1157 .Lscope7:
1160 .global lock
1162 lock:
306:main.c ****
307:main.c **** void lock(uchar num) //封锁除num外的分机, 分机号为0则不取消封锁
308:main.c **** {
1164 .LM139:
1165 /* prologue: frame size=0 */
1166 /* prologue end (size=0) */
309:main.c **** if(num==0) //取消封锁
1168 .LM140:
1169 054a 8823 tst r24
1170 054c 29F4 brne .L113
310:main.c **** {
311:main.c **** PH1_s;
1172 .LM141:
1173 054e AD9A sbi 53-0x20,5
312:main.c **** PH2_s;
1175 .LM142:
1176 0550 C59A sbi 56-0x20,5
313:main.c **** PH3_s;
1178 .LM143:
1179 0552 C39A sbi 56-0x20,3
314:main.c **** PH4_s;
1181 .LM144:
1182 0554 C19A sbi 56-0x20,1
1183 0556 0895 ret
1184 .L113:
315:main.c **** }
316:main.c **** else if(num==1) //封锁2,3,4
1186 .LM145:
1187 0558 8130 cpi r24,lo8(1)
1188 055a 11F4 brne .L115
317:main.c **** {
318:main.c **** PH2_c;
1190 .LM146:
1191 055c C598 cbi 56-0x20,5
1192 055e 03C0 rjmp .L122
1193 .L115:
319:main.c **** PH3_c;
320:main.c **** PH4_c;
321:main.c **** }
322:main.c **** else if(num==2) //封锁1,3,4
1195 .LM147:
1196 0560 8230 cpi r24,lo8(2)
1197 0562 21F4 brne .L117
323:main.c **** {
324:main.c **** PH1_c;
1199 .LM148:
1200 0564 AD98 cbi 53-0x20,5
1201 .L122:
325:main.c **** PH3_c;
1203 .LM149:
1204 0566 C398 cbi 56-0x20,3
1205 .L123:
326:main.c **** PH4_c;
1207 .LM150:
1208 0568 C198 cbi 56-0x20,1
1209 056a 0895 ret
1210 .L117:
327:main.c **** }
328:main.c **** else if(num==3) //封锁1,2,4
1212 .LM151:
1213 056c 8330 cpi r24,lo8(3)
1214 056e 19F4 brne .L119
329:main.c **** {
330:main.c **** PH1_c;
1216 .LM152:
1217 0570 AD98 cbi 53-0x20,5
331:main.c **** PH2_c;
1219 .LM153:
1220 0572 C598 cbi 56-0x20,5
1221 0574 F9CF rjmp .L123
1222 .L119:
332:main.c **** PH4_c;
333:main.c **** }
334:main.c **** else if(num==4) //封锁1,2,3
1224 .LM154:
1225 0576 8430 cpi r24,lo8(4)
1226 0578 19F4 brne .L112
335:main.c **** {
336:main.c **** PH1_c;
1228 .LM155:
1229 057a AD98 cbi 53-0x20,5
337:main.c **** PH2_c;
1231 .LM156:
1232 057c C598 cbi 56-0x20,5
338:main.c **** PH3_c;
1234 .LM157:
1235 057e C398 cbi 56-0x20,3
1236 .L112:
1237 0580 0895 ret
1238 /* epilogue: frame size=0 */
1239 /* epilogue: noreturn */
1240 /* epilogue end (size=0) */
1241 /* function lock size 28 (28) */
1243 .Lscope8:
1245 .global main
1247 main:
339:main.c **** }
340:main.c **** }
341:main.c ****
342:main.c **** int main(void)
343:main.c **** {
1249 .LM158:
1250 /* prologue: frame size=0 */
1251 0582 C0E0 ldi r28,lo8(__stack - 0)
1252 0584 D0E0 ldi r29,hi8(__stack - 0)
1253 0586 DEBF out __SP_H__,r29
1254 0588 CDBF out __SP_L__,r28
1255 /* prologue end (size=4) */
344:main.c **** uchar i;
345:main.c **** uchar num=0; //num # 分机拿起
346:main.c **** uchar num1=0;
347:main.c **** uchar calln=0; //被叫机号
348:main.c ****
349:main.c **** s_ini();
1257 .LM159:
1258 058a 47DD rcall s_ini
1259 .L178:
350:main.c ****
351:main.c **** for(;;)
352:main.c **** {
353:main.c **** num=test_hu(0); //检查哪个分机拿起
1261 .LM160:
1262 058c 80E0 ldi r24,lo8(0)
1263 058e C1DF rcall test_hu
1264 0590 082F mov r16,r24
354:main.c ****
355:main.c **** if(num) //有分机拿起
1266 .LM161:
1267 0592 8823 tst r24
1268 0594 09F4 brne .+2
1269 0596 97C0 rjmp .L127
356:main.c **** {
357:main.c **** L_flash=3;
1271 .LM162:
1272 0598 83E0 ldi r24,lo8(3)
1273 059a 8093 0000 sts L_flash,r24
358:main.c **** L2_s;
1275 .LM163:
1276 059e C79A sbi 56-0x20,7
359:main.c **** lock(num); //封锁除num外的分机
1278 .LM164:
1279 05a0 802F mov r24,r16
1280 05a2 D3DF rcall lock
360:main.c **** // UDR=num;
361:main.c ****
362:main.c **** while(num==test_hu(0)) //直到放下听筒
1282 .LM165:
1283 05a4 85C0 rjmp .L180
1284 .L148:
363:main.c **** {
364:main.c **** if((decode[1]==8)&&(decode[0]>0&&decode[0]<5
1286 .LM166:
1287 05a6 8091 0000 lds r24,decode+1
1288 05aa 8830 cpi r24,lo8(8)
1289 05ac D9F5 brne .L130
1290 05ae 8091 0000 lds r24,decode
1291 05b2 8823 tst r24
1292 05b4 B9F1 breq .L130
1293 05b6 8091 0000 lds r24,decode
1294 05ba 8530 cpi r24,lo8(5)
1295 05bc 98F5 brsh .L130
1296 05be 8091 0000 lds r24,decode
1297 05c2 8017 cp r24,r16
1298 05c4 79F1 breq .L130
365:main.c **** &&decode[0]!=num)) //拨号条件, 不能打自己
366:main.c **** {
367:main.c **** calln=decode[0]; //保存被叫机号
1300 .LM167:
1301 05c6 1091 0000 lds r17,decode
368:main.c **** *(ringflag+(calln-1))=1; //响铃
1303 .LM168:
1304 05ca C12F mov r28,r17
1305 05cc DD27 clr r29
1306 05ce FE01 movw r30,r28
1307 05d0 E050 subi r30,lo8(-(ringflag-1))
1308 05d2 F040 sbci r31,hi8(-(ringflag-1))
1309 05d4 81E0 ldi r24,lo8(1)
1310 05d6 8083 st Z,r24
369:main.c **** L_flash=1; //LED闪烁
1312 .LM169:
1313 05d8 8093 0000 sts L_flash,r24
1314 .L131:
370:main.c **** while((num==test_hu(calln))&&(calln != test_hu(num))) //等等被叫接电话或主叫放下听筒
1316 .LM170:
1317 05dc 812F mov r24,r17
1318 05de 99DF rcall test_hu
1319 05e0 0817 cp r16,r24
1320 05e2 21F4 brne .L132
1321 05e4 802F mov r24,r16
1322 05e6 95DF rcall test_hu
1323 05e8 1817 cp r17,r24
1324 05ea C1F7 brne .L131
1325 .L132:
371:main.c **** {
372:main.c **** }
373:main.c **** *(ringflag+(calln-1))=0;//停止响铃
1327 .LM171:
1328 05ec C050 subi r28,lo8(-(ringflag-1))
1329 05ee D040 sbci r29,hi8(-(ringflag-1))
1330 05f0 1882 st Y,__zero_reg__
374:main.c ****
375:main.c **** clr_decode(); //清除解码阵列
1332 .LM172:
1333 05f2 87DF rcall clr_decode
376:main.c ****
377:main.c **** if(calln==test_hu(num)) //被叫接电话
1335 .LM173:
1336 05f4 802F mov r24,r16
1337 05f6 8DDF rcall test_hu
1338 05f8 1817 cp r17,r24
1339 05fa 59F4 brne .L134
378:main.c **** {
379:main.c **** L_flash=2; //LED慢速闪烁
1341 .LM174:
1342 05fc 82E0 ldi r24,lo8(2)
1343 05fe 8093 0000 sts L_flash,r24
1344 .L135:
380:main.c **** while(test_hu(0)) //等待通话完毕
1346 .LM175:
1347 0602 80E0 ldi r24,lo8(0)
1348 0604 86DF rcall test_hu
1349 0606 8823 tst r24
1350 0608 E1F7 brne .L135
381:main.c **** { //在这里加入多方通话功能
382:main.c **** }
383:main.c **** L_flash=3;
1352 .LM176:
1353 060a 83E0 ldi r24,lo8(3)
1354 060c 8093 0000 sts L_flash,r24
384:main.c **** L1_c;
1356 .LM177:
1357 0610 C698 cbi 56-0x20,6
1358
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -