📄 ledcontrol.lst
字号:
396 void command(uchar cmd)
397 {
398 1 switch (cmd)
399 1 {
400 2 uchar i;
401 2 case ORD_BCOM : //begin the communcation
402 2 ET0 = 0 ; //turn off the interrupt of PCF8563
403 2 COMBUF.flag_time = (uchar)0;
404 2 COMBUF.flag_char = (uchar)0;
405 2 com_packet_ud(RES_OK_W);
406 2 break;
407 2
408 2 case ORD_ECOM : //finish the communcation
409 2 if (COMBUF.flag_time == (uchar)1)
C51 COMPILER V7.02a LEDCONTROL 05/26/2005 13:15:53 PAGE 8
410 2 {
411 3 set_time(COMBUF.time);
412 3 }
413 2 if (COMBUF.flag_char == (uchar)1)
414 2 {
415 3 store_c_code(COMBUF.charbuf,CHARLEN);
416 3 }
417 2 com_packet_ud(RES_OK_W);
418 2 break;
419 2
420 2 case ORD_SETT: //setting time and data
421 2 for(i=0; i<TIMELEN; i++)
422 2 {
423 3 COMBUF.time[i] = RECBUF.databuf[i+2];
424 3 }
425 2
426 2 com_packet_ud(RES_OK_W);
427 2 break;
428 2
429 2 case ORD_DISC : //display char
430 2 for (i=0; i<CHARLEN; i++)
431 2 {
432 3 COMBUF.charbuf[i] = RECBUF.databuf[i+2];
433 3 }
434 2 put_char_dispbuf(COMBUF.charbuf, CHARLEN);
435 2 com_packet_ud(RES_OK_W);
436 2 break;
437 2
438 2 case ORD_GETC:
439 2 get_time(COMBUF.time);
440 2 com_packet_d(RES_OK_W, COMBUF.charbuf,8);
441 2 break;
442 2
443 2
444 2 default :
445 2 com_packet_ud(RES_ERR_D);
446 2
447 2 break;
448 2 }
449 1
450 1 }
451
452
453 bit com_judge_ud(void) //judge the frame is the 4-length frame or 36-length frame
454 {
455 1 if (RECBUF.len == LENGTH_ND)
456 1 {
457 2 delay60(); //delay 120us
458 2 delay60();
459 2 if (RECBUF.len == LENGTH_ND)
460 2 {
461 3 return(True); //is no data frame
462 3 }
463 2 else
464 2 {
465 3 RECBUF.flag = (uchar)0;
466 3 return(False);
467 3 }
468 2 }
469 1 return(True); //is data frame
470 1
471 1 }
C51 COMPILER V7.02a LEDCONTROL 05/26/2005 13:15:53 PAGE 9
472
473
474 bit com_crc_verify (void)
475 {
476 1 uint crc;
477 1 crc = com_cal_crc(RECBUF.databuf, RECBUF.len-2);
478 1 if (crc == Makeword(RECBUF.databuf[3], RECBUF.databuf[4]))
479 1 {
480 2 return(True);
481 2 }
482 1 else
483 1 {
484 2 return(False);
485 2 }
486 1 }
487
488
489 bit com_packet_ud(uchar cmd)
490 {
491 1 uint crc;
492 1 if (SEDBUF.flag )
493 1 {
494 2
495 2 SEDBUF.databuf[0] = FRM_BE;
496 2 SEDBUF.databuf[1] = cmd;
497 2 crc = com_cal_crc(SEDBUF.databuf, 2);
498 2 SEDBUF.databuf[2] = Hbyte(crc);
499 2 SEDBUF.databuf[3] = Lbyte(crc);
500 2 SEDBUF.len = 4;
501 2 SBUF = FRM_BE;
502 2 return(True);
503 2 }
504 1 return(False);
505 1 }
506 // len is length of data wanted to send
507 bit com_packet_d(uchar cmd, uchar *ptr, uchar len)
508 {
509 1 uchar i;
510 1 uint crc;
511 1 if (SEDBUF.flag)
512 1 {
513 2 SEDBUF.databuf[0] = FRM_BE;
514 2 SEDBUF.databuf[1] = cmd;
515 2 for (i=0; i<len; i++)
516 2 {
517 3 SEDBUF.databuf[i+2] = *(ptr+i);
518 3 }
519 2 crc = com_cal_crc(SEDBUF.databuf, len+2);
520 2 SEDBUF.databuf[len+2] = Hbyte(crc);
521 2 SEDBUF.databuf[len+3] = Lbyte(crc);
522 2 SEDBUF.len = 36;
523 2 SEDBUF.loc = 0;
524 2 SEDBUF.flag = False;
525 2 SBUF= FRM_BE;
526 2 return(True);
527 2 }
528 1 return(False);
529 1 }
530
531 uint com_cal_crc(uchar *ptr, uchar len)
532 {
533 1 uint crc;
C51 COMPILER V7.02a LEDCONTROL 05/26/2005 13:15:53 PAGE 10
534 1 uchar da;
535 1
536 1 static uint crc_ta[16]={
537 1 0x0000,0x1021,0x2042,0x3063,0x4084,0x50a5,0x60c6,0x70e7,
538 1 0x8108,0x9129,0xa14a,0xb16b,0xc18c,0xd1ad,0xe1ce,0xf1ef,
539 1 };
540 1 crc=0;
541 1 while(len--!=0)
542 1 {
543 2 da=((uchar)(crc/256))/16;
544 2 crc<<=4;
545 2 crc^=crc_ta[da^(*ptr/16)];
546 2 da=((uchar)(crc/256))/16;
547 2 crc<<=4;
548 2 crc^=crc_ta[da^(*ptr&0x0f)];
549 2 ptr++;
550 2 }
551 1 return(crc);
552 1 }
553
554
555
556
557
558 void timer0_process(void ) interrupt 1 using 1 // time for 500ms
559 {
560 1
561 1 ET0=0;
562 1 TL0=0x00;
563 1 TH0=0x4c;
564 1 fd_dog++;
565 1 if(flag_begin)
566 1 {
567 2 if(++count_sec == 10) //Is one second?
568 2 {
569 3 count_sec = 0;
570 3 if(++count_min == 30) //Is 30second?
571 3 {
572 4 count_min = 0;
573 4 flag_30sec = True;
574 4 }
575 3
576 3 }
577 2 }
578 1 ET0=1;
579 1
580 1 }
581
582
583
584
585
586
587
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2534 ----
CONSTANT SIZE = 560 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 46 48
C51 COMPILER V7.02a LEDCONTROL 05/26/2005 13:15:53 PAGE 11
IDATA SIZE = 86 ----
BIT SIZE = 3 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -