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