?? 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 + -