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