📄 main.lst
字号:
249 2 break;
250 2 case 186:
251 2 menu_caozuo();
252 2 break;
253 2 //-----------chenjw-------s----
254 2
255 2 case 95: alarm_message1();break;
256 2 case 97: alarm_message2();break;
257 2 case 98: alarm_message3();break;
258 2
259 2 case 100: trip_alarm_dis1();break;
260 2 case 105: trip_alarm_dis1();break;
261 2
262 2 case 110: notrip_alarm_dis();break;
263 2
264 2 case 113:
265 2 case 115:
266 2 case 117:
267 2 case 119:
268 2 case 121:
269 2 case 163:
270 2 case 165: fault_message_dis();break;
271 2
272 2 case 124:
273 2 case 127:
274 2 case 130:
275 2 case 133:
276 2 case 136:
277 2 case 139:
278 2 case 142:
279 2 case 145:
280 2 case 148:
281 2 case 151:
282 2 case 154:
283 2 case 157:
284 2 case 167:
285 2 case 160: fault_dis();break;
286 2 case 185: menu_guzhangjl_zero();break;
287 2
288 2 case 9: //添加允许分断电流的特殊处理
289 2 case 54:
290 2 case 55:
291 2 case 56:
292 2 case 57:
293 2 case 58:
294 2 case 59:
295 2 case 60:
296 2 case 61:
297 2 case 62:
298 2 case 63:
299 2 case 64:
C51 COMPILER V7.01 MAIN 12/21/2003 15:17:23 PAGE 6
300 2 case 65:
301 2 case 66:
302 2 case 67:
303 2 case 68:
304 2 case 69:
305 2 case 70:
306 2 case 71:
307 2 case 72:
308 2 case 73:
309 2 case 74:
310 2 case 75:
311 2 case 76:
312 2 case 77:
313 2 case 78:
314 2 case 79:
315 2 case 80:
316 2 case 81:
317 2 case 82:
318 2 case 83:
319 2 case 84:
320 2 case 85:
321 2 case 86:
322 2 case 87:
323 2 case 89:
324 2 case 31:
325 2 case 88: set_set_dis();break;
326 2 case 90: protect_set_dis();break;
327 2 //------------------chenjw ----------e---------
328 2
329 2 //-----------------jyj
330 2 case 170: io_set(); break;
331 2
332 2 case 173: io_state();break;
333 2 case 174: di_display();break;
334 2 case 175: do_display();break;
335 2 case 176:
336 2 case 178: parameter_set();break;
337 2
338 2 case 250: alone_dis1();break;
339 2
340 2
341 2
342 2 default: break;
343 2 }
344 1 }
345
346 /*--------------------------------------- 界面显示程序结束 ----------------------------------------*
-/
347
348
349 /*--------------------------------------- 通讯控制程序开始 ----------------------------------------*
-/
350
351
352
353 /********************************************************************
354 *
355 * 名称: remote_build
356 * 说明: 试用不同波特率,发送特殊报文取设备动态地址.
357 * 功能: 通讯建立
358 * 调用: 1,由通讯初始化程序;
359 2,通讯失败10次后由接收中断程序
C51 COMPILER V7.01 MAIN 12/21/2003 15:17:23 PAGE 7
360 * 输入: 无
361 * 返回值: remote_type_address=1;
362 ***********************************************************************/
363 void remote_build(void)
364 {//通讯建立程序
365 1 remote_type_address=1;
366 1 remote_sign_built=0;
367 1 while(remote_sign_built==0)
368 1 { //单机/首次工作模式执行一次;联机工作模式则始终搜索设备
369 2 if(program_state==1) return;
370 2
371 2 //22.1184MHz
372 2 if((PCON&0x80)==0)
373 2 { //不加倍
374 3 if(TH1==0xf4){TH1=0xfa;TL1=0xfa;} //4.8K->9.6K
375 3 else if(TH1==0xfa){TH1=0xfd;TL1=0xfd;} //9.6K->19.2K
376 3 else {PCON|=0x80;TH1=0xfd;TL1=0xfd;} //19.2K->38.4K
377 3 }
378 2 else
379 2 {PCON&=0x7f;TH1=0xf4;TL1=0xf4;} //38.4K->4.8K
380 2
381 2 //12MHz //for debug
382 2
383 2
384 2
385 2
386 2 //通讯故障,显示通讯故障
387 2 trbuf[0]=0x68;
388 2 trbuf[1]=0x00;
389 2 trbuf[2]=0x00;
390 2 trbuf[3]=0x68;
391 2 trbuf[4]=0xd0; //特殊报文校验码
392 2 read_trbuf_p=trbuf; //指向发送缓存
393 2 TxdLength=5; //发送缓存使用长度
394 2 receive_byte_number=5; //接收字节数
395 2 Txded_Number=0; //发送缓存读计数清零
396 2 REN=0;
397 2 Current_Message_End=1;
398 2 CLK=1;
399 2 SBUF=*read_trbuf_p; //起动发送
400 2
401 2 WaitTime=0;
402 2 while((remote_sign_built!=1)&&(WaitTime<200))
403 2 WD_SDA=~WD_SDA;
404 2 if(alone_user==1){remote_sign_built=1;}//单机模式,建立通讯只执行一次
405 2 //remote_sign_built=1;//for debug
406 2 }
407 1 }//remote_build
408
409 void GetData(void)
410 {
411 1 unsigned char i;
412 1 unsigned char j;
413 1 value_message_count=0;
414 1 for(i=0;i< message_count[dis_number];i++)
415 1 {
416 2 again:
417 2 if(program_state==1) return;
418 2 if(value_message_count==0)
419 2 { //于首条报文
420 3 value_message_p = &dis_message_tab[0][0] + dis_number * long_dis_message; //发送报文的首地址
421 3 write_rebuf_p=union_vlaue.revalue_buf;//指向其接收缓存
C51 COMPILER V7.01 MAIN 12/21/2003 15:17:23 PAGE 8
422 3 RxdPointBak=write_rebuf_p;
423 3 }
424 2 trbuf[0]=address_device;
425 2 trbuf[1]=0x03;
426 2 for(j=0;j<4;j++) //取报文数据
427 2 trbuf[j+2]=*(value_message_p+value_message_count*4+j); //[行][列]*(p+i*long_dis_message+j)
428 2
429 2 receive_byte_number=5+(*(read_trbuf_p+5))*2; //计算条报文接收字节数(支持到256)
430 2 RemoteTypeBak=3;
431 2
432 2 /*debug*/ if(receive_byte_number>37) //接收长度出错可能导致系统有问题.
433 2 return;
434 2
435 2 //---------故障记录区读取的特殊处理--s-------
436 2 if((trbuf[3]!=0xb3)&&(TripLogState==1)) //非接地类型地址,地址偏移,0xb3为接地保护方式
437 2 {
438 3 trbuf[3]+=0x8e; //(570h-454h)/2=8e.
439 3 }
440 2 //---------故障记录区读取的特殊处理--s------- receive_byte_number=37;
441 2
442 2
443 2 TxdLength=6;//实际发送缓存有效长度
444 2 crc_account(); //crc计算
445 2 Txded_Number=0; //发送缓存读计数清零,接收缓存清零在发送结束时清零. //发送缓存读计数清零
446 2 Current_Message_End=1;
447 2 REN=0; //启动发送 //起动输出
448 2 CLK=1;
449 2 RI=0;
450 2 RxdPointBak=write_rebuf_p;//
451 2 SBUF=trbuf[0];
452 2 WaitTime=0;
453 2 //Current_Message_End=0;//for debug
454 2 while((Current_Message_End!=0)&&(WaitTime<150))
455 2 WD_SDA=~WD_SDA;
456 2 //Current_Message_End=0;//for debug
457 2 if(Current_Message_End!=0)
458 2 {
459 3 if(++remote_fault_count>10)
460 3 {
461 4 remote_fault_count=0;
462 4 old_dis_number=dis_number;
463 4 ComunicationFault();
464 4 remote_build();
465 4 dis_number=old_dis_number;
466 4 // key=nokey;
467 4 // display();
468 4 }
469 3
470 3 write_rebuf_p=RxdPointBak;
471 3 goto again;
472 3 }
473 2 else
474 2 {
475 3 value_message_count++;//报文计数加一
476 3 remote_fault_count=0;
477 3 }
478 2 }
479 1 }
480 void WriteData(void)
481 {
482 1
483 1 again:
C51 COMPILER V7.01 MAIN 12/21/2003 15:17:23 PAGE 9
484 1 if(program_state==1) return;
485 1 trbuf[0]=address_device;
486 1 trbuf[1]=0x06;
487 1 trbuf[2]=set_addh;
488 1 trbuf[3]=set_addl;
489 1 trbuf[4]=set_valueh;
490 1 trbuf[5]=set_valuel;
491 1 TxdLength=6;//实际发送缓存有效长度
492 1 receive_byte_number=8; //06功能码接收总字节数
493 1 RemoteTypeBak=1;
494 1
495 1 crc_account(); //crc计算
496 1 Txded_Number=0; //发送缓存读计数清零,接收缓存清零在发送结束时清零. //发送缓存读计数清零
497 1 Current_Message_End=1;
498 1 REN=0; //启动发送 //起动输出
499 1 CLK=1;
500 1 RI=0;
501 1
502 1 SBUF=trbuf[0];
503 1 WaitTime=0;
504 1 //Current_Message_End=0;//for debug
505 1 while((Current_Message_End!=0)&&(WaitTime<100))
506 1 WD_SDA=~WD_SDA;
507 1 if(Current_Message_End!=0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -