⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.lst

📁 基于AVR单片机的程近期电话交换机源程序,可实现一拖四(一外线,四内线).
💻 LST
📖 第 1 页 / 共 5 页
字号:
 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 + -