📄 current2.lst
字号:
256 {
257 1 switch(rbuffer[1])
258 1 {
259 2 case command: com_type();break;
260 2
261 2 case answer: R_ANSW=rbuffer[1];break;
262 2
263 2 case infor: {
264 3 switch(rbuffer[2])
265 3 {
266 4 case com_sector: {
267 5 nonce_sec=rbuffer[3];
268 5 in_sector=1;
269 5 new_sec=1;
270 5 }break;
271 4 case com_weld_simu: YOUHU=rbuffer[3];break;
272 4 case com_delt_switch: delt_state=rbuffer[3];break;
273 4 default: break;
274 4 }
275 3 }break;
276 2
277 2 case p_out_sec: receive_p_out=1;break;
278 2
279 2 case p_in_sec: {
280 3 nonce_sec=rbuffer[2];
281 3 receive_p_in=1;
282 3 }break;
283 2 default: break;
284 2 }
285 1 }
286
287 void answer_judge()
288 {
289 1 unsigned char c_err;
290 1 c_err=0;
291 1 resend: if(R_ANSW!=OK)
292 1 {
293 2 c_err++;
294 2 if(c_err<3)
295 2 {
296 3 TR_ans();
297 3 goto resend;
298 3 }
299 2 else
300 2 {
301 3 err=2;
302 3 // err_operate();
303 3 }
C51 COMPILER V7.06 CURRENT2 10/19/2005 14:43:02 PAGE 6
304 2 }
305 1 else
306 1 R_ANSW=0;
307 1
308 1 }
309
310 void start_t2()
311 {
312 1 TM2CON=0x8D; //16位溢出,分频系数8,f/12
313 1 EA=1;
314 1 TM2IR=0;
315 1 }
316
317 void EX0_INT (void) interrupt 0 //急停
318 {
319 1 EX0=0;
320 1 send_enable=1;
321 1 if(YOUHU)
322 1 {
323 2 current_enable=0; //关电源使能
324 2 con_hf=1; //关高频使能
325 2 }
326 1
327 1 while(err_ok==0)
328 1 {
329 2 if(called==1)
330 2 {
331 3 if(current_err==0)
332 3 {
333 4 ini_sbuf(M_main,answer,OK,0,0,0,0);
334 4 s_byte_nums=4;
335 4 TR_noans();
336 4 }
337 3 else
338 3 {
339 4 ini_sbuf(M_main,err_infor,M_current,err,0,0,0);
340 4 s_byte_nums=5;
341 4 TR_noans();
342 4 current_err=0;
343 4 err=0;
344 4 stop=1;
345 4 }
346 3 called=0;
347 3 }
348 2 }
349 1 urgent_stop=1;
350 1 c_cm2=0;
351 1 IEN1=IEN1|0x40;
352 1
353 1 }
354
355 void T0_INT (void) interrupt 1
356 {
357 1 c_t0++;
358 1
359 1 }
360
361 void EX1_INT(void) interrupt 2 //错误检测
362 {
363 1 unsigned char get_err;
364 1 EX1=0;
365 1
C51 COMPILER V7.06 CURRENT2 10/19/2005 14:43:02 PAGE 7
366 1 get_err=P5;
367 1 get_err=get_err&0x08;
368 1 if(get_err==0)
369 1 err=4;
370 1 else
371 1 {
372 2 get_err=P5;
373 2 get_err=get_err&0x10;
374 2 if(get_err==0)
375 2 err=5;
376 2 else
377 2 {
378 3 get_err=P5;
379 3 get_err=get_err&0x20;
380 3 if(get_err==0)
381 3 err=6;
382 3 else
383 3 {
384 4 get_err=P5;
385 4 get_err=get_err&0x30;
386 4 if(get_err==0)
387 4 err=8;
388 4 else
389 4 {
390 5 get_err=P5;
391 5 get_err=get_err&0x40;
392 5 if(get_err==0)
393 5 err=7;
394 5 }
395 4 }
396 3 }
397 2 }
398 1 if(err!=0)
399 1 {
400 2 current_err=1;
401 2 stop=0;
402 2 }
403 1 else
404 1 EX1=1;
405 1 }
406
407 void T1_INT (void) interrupt 3
408 {
409 1 c_t1++;
410 1 if(send==1)
411 1 {
412 2 if(c_t1==7)
413 2 {
414 3 S0BUF=sbuffer[POINTER0];
415 3 c_t1=0;
416 3 }
417 2 }
418 1 else
419 1 {
420 2 if(c_t1==100)
421 2 {
422 3 TR1=0;
423 3 overtime=1;
424 3 }
425 2 }
426 1 }
427
C51 COMPILER V7.06 CURRENT2 10/19/2005 14:43:02 PAGE 8
428 void TR_INT (void) interrupt 4 //串行口中断
429 {
430 1 EA=0; //关中断
431 1 if(TI==1) //发送完成
432 1 {
433 2 TI=0;
434 2 POINTER0++; //发送缓冲指针加1
435 2 if(POINTER0<s_byte_nums-1)
436 2 SSUM=SSUM+sbuffer[POINTER0]; //6个数据字节求和
437 2 else
438 2 sbuffer[s_byte_nums-1]=SSUM+sbuffer[0]; //数据和加地址生成校验码
439 2 if(POINTER0==s_byte_nums)
440 2 REN=1;
441 2 }
442 1
443 1 if(RI==1) //接收完成
444 1 {
445 2 RI=0;
446 2 POINTER1++; //接收缓冲指针加1
447 2 rbuffer[POINTER1-1]=S0BUF; //从接收缓冲读出数据
448 2 if(rbuffer[0]==M_current||rbuffer[0]==M_ALL||rbuffer[0]==M_current_RW)
449 2 {
450 3 SM2=0;
451 3 if(POINTER1==2) //获取字节个数
452 3 r_byte_nums=get_byte_nums(rbuffer[1]);
453 3 if(POINTER1<r_byte_nums)
454 3 RSUM=RSUM+rbuffer[POINTER1-1]; //生成校验码
455 3 else
456 3 {
457 4 SM2=1;
458 4 if(RSUM==rbuffer[r_byte_nums-1])
459 4 {
460 5 if(ans==0)
461 5 {
462 6 POINTER1=0;
463 6 RSUM=0;
464 6 }
465 5 S_ANSW=OK;
466 5 data_type();
467 5 }
468 4 else
469 4 {
470 5 S_ANSW=FAIL;
471 5 if(resend==0)
472 5 resend=1;
473 5 }
474 4 r_byte_nums=4;
475 4 }
476 3 }
477 2 else
478 2 POINTER1=0;
479 2 }
480 1 EA=1; //开中断
481 1 }
482
483 void S1_int (void) interrupt 5 //I2C
484 {
485 1 ES1=0;
486 1 if(S1STA==0x00)
487 1 {
488 2 FF=1;
489 2 S1CON=0xD5; //STA=0 STO=1 SI=0 AA=1
C51 COMPILER V7.06 CURRENT2 10/19/2005 14:43:02 PAGE 9
490 2 }
491 1 if(S1STA==0x08)
492 1 {
493 2 S1DAT=SLA;
494 2 S1CON=0xC5; //STA=0 STO=0 SI=0 AA=1
495 2 }
496 1 if(S1STA==0x10)
497 1 {
498 2 S1DAT=SLA;
499 2 S1CON=0xC5; //STA=0 STO=0 SI=0 AA=1
500 2 }
501 1 if(S1STA==0x18)
502 1 {
503 2 S1DAT=COMM;
504 2 S1CON=0xC5; //STA=0 STO=0 SI=0 AA=1
505 2 }
506 1 if(S1STA==0x20)
507 1 {
508 2 FF=1;
509 2 S1CON=0xD5; //STA=0 STO=1 SI=0 AA=1
510 2 }
511 1 if(S1STA==0x28)
512 1 {
513 2 S1CON=0xD5; //STA=0 STO=1 SI=0 AA=1
514 2 FF=1;
515 2 }
516 1 if(S1STA==0x30)
517 1 {
518 2 FF=1;
519 2 S1CON=0xD5; //STA=0 STO=1 SI=0 AA=1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -