📄 play.lst
字号:
513 //*********************************************************************
514 //IIC
515 //I2C函数*******************************************
516 //START()
517 void start (void)
518 {
519 1 SCL=0;
520 1 delay4us();
521 1 SDA=1;
522 1 delay4us();
523 1 SCL=1;
524 1 delay4us();
525 1 SDA=0;
526 1 delay4us();
527 1 SCL=0;
528 1 delay4us();
529 1 SDA=1;
530 1 delay4us();
531 1 }
532 //STOP()
533 void stop (void)
534 {
535 1 SCL=0;
536 1 delay4us();
537 1 SDA=0;
538 1 delay4us();
539 1 SCL=1;
540 1 delay4us();
541 1 SDA=1;
542 1 delay4us();
543 1 SCL=0;
544 1 delay4us();
545 1 }
546 //**********************
547 //ACK()
548 void ack (void)
549 {
550 1 SCL=0;
C51 COMPILER V7.07 PLAY 04/24/2003 17:03:47 PAGE 10
551 1 delay4us();
552 1 SDA=0;
553 1 delay4us();
554 1 SCL=1;
555 1 delay4us();
556 1 SCL=0;
557 1 delay4us();
558 1 SDA=1;
559 1 delay4us();
560 1 }
561 //NACK()
562 void nack (void)
563 {
564 1 SCL=0;
565 1 delay4us();
566 1 SDA=1;
567 1 delay4us();
568 1 SCL=1;
569 1 delay4us();
570 1 SCL=0;
571 1 delay4us();
572 1 }
573 //CACK()
574 bit cack (void)
575 {
576 1 bit flag;
577 1 SCL=0;
578 1 delay4us();
579 1 SDA=1;
580 1 delay4us();
581 1 SCL=1;
582 1 delay4us();
583 1 flag=SDA;
584 1 delay4us();
585 1 SCL=0;
586 1 delay4us();
587 1 return (flag);
588 1 }
589 //transbyte
590 void transmitbyte (uchar txdata)
591 {
592 1 uchar i;
593 1 for(i=8;i>0;i--)
594 1 {
595 2 SCL=0;
596 2 delay4us();
597 2 txdata<<=1;
598 2 SDA=CY;
599 2 delay4us();
600 2 SCL=1;
601 2 delay4us();
602 2 }
603 1 SCL=0;
604 1 delay4us();
605 1 SDA=1;
606 1 delay4us();
607 1 }
608 //
609 uchar receiverbyte (void)
610 {
611 1 uchar i;
612 1 uchar rdata=0x00;
C51 COMPILER V7.07 PLAY 04/24/2003 17:03:47 PAGE 11
613 1 SCL=0;
614 1 delay4us();
615 1 SDA=1;
616 1 delay4us();
617 1 for(i=8;i>0;i--)
618 1 {
619 2 SCL=1;
620 2 delay4us();
621 2 rdata=(rdata<<1)|SDA;
622 2 delay4us();
623 2 SCL=0;
624 2 delay4us();
625 2 }
626 1 SDA=1;
627 1 delay4us();
628 1 return(rdata);
629 1 }
630 //I2C end***************************************************
631 //*********************************************************************
632 //interrupt function
633 void EXT0() interrupt 0//断水
634 {
635 1 WDTCN=0xDE;//先关看门狗
636 1 WDTCN=0xAD;
637 1 ALARM(NOWATERALM);
638 1 WRITEAI(0x15,12);//关808P表
639 1 while(1){}
640 1 }
641 //*************************
642 //clear the WDT and alarm the water is bad
643 void T0_INT() interrupt 1//此函数主要是清狗和键盘扫描
644 {
645 1 float temppower;
646 1 TL0=0x7F;
647 1 TH0=0x60;//这样T0就在20ms内中断一次
648 1 //*********************
649 1 WDTCN=0xA5;//clear WDT
650 1 //**********************
651 1 kbscan();//获得键值
652 1 //**********************
653 1 if(KEY=='M')//判断M键按下的情况
654 1 {
655 2 if(MANFLG)
656 2 {
657 3 AUTO_MAN=~AUTO_MAN;
658 3 MANFLG=0;
659 3 }
660 2 }
661 1 else
662 1 {
663 2 MANFLG=1;
664 2 }
665 1 //***********************
666 1 AD0BUSY=1;//启动ADC0进行转换
667 1 //***********************
668 1 if(ES0)
669 1 {
670 2 AITIME++;
671 2 if(AITIME==20)
672 2 {
673 3 REN0=0;
674 3 ES0=0;
C51 COMPILER V7.07 PLAY 04/24/2003 17:03:47 PAGE 12
675 3 AIOVERFLG=1;
676 3 TIMEFLG=1;
677 3 }
678 2 }
679 1 //************************
680 1 if(PIDEN)
681 1 {
682 2 temppower=1000.0*(((float)GY[GYNUM].power[SEGMENT]-(float)GY[GYNUM].power[SEGMENT-1])/(float)GY[GYNUM].t
-ime[SEGMENT]*TEMPTIME+(float)GY[GYNUM].power[SEGMENT-1]);
683 2 PID(temppower);
684 2 }
685 1 }
686 //*************************
687 /*void EXT1() interrupt 2//行程开关到
688 {
689 WDTCN=0xDE;//先关看门狗,初始化完成之后再开
690 WDTCN=0xAD;//
691 delay5ms();
692 if(!HDISTANCE)
693 {
694 MOTORSTOP;
695 delay200ms();
696 TPFCOFF;
697 }
698 }*/
699 //*************************
700 void UART0_INT() interrupt 4//串口0中断函数,主要是用来接收AI808P的数据的中断
701 {
702 1 RI0=0;
703 1 AIBUF[AIDATNUM]=SBUF0;
704 1 AIDATNUM++;
705 1 if(AIDATNUM==10)
706 1 {
707 2 REN0=0;
708 2 ES0=0;
709 2 AIOVERFLG=1;
710 2 }
711 1 }
712 //*************************
713 void ADC0WINDOW() interrupt 8//ADC0窗口比较中断,主要用来检测压力传感器的
714 {
715 1 WDTCN=0xDE;//先关看门狗
716 1 WDTCN=0xAD;
717 1 AD0WINT=0;//该位必须软件清零
718 1 ALARM(POWERERROR);
719 1 WRITEAI(0x15,12);//关808P表
720 1 while(1){}
721 1 }
722 //*************************
723 void T3_INT() interrupt 14//T3 interrupt is 1S interval
724 {
725 1 TF3=0;//该位必须软件清零
726 1 T3TIME++;
727 1 if(T3TIME >= 31)
728 1 {
729 2 SAMPLEN=1;
730 2 T3TIME=0;
731 2 }
732 1 }
733 //*************************
734 void ADC0_INT() interrupt 15
735 {
C51 COMPILER V7.07 PLAY 04/24/2003 17:03:47 PAGE 13
736 1 uint ad;
737 1 AD0INT=0;//该位必须软件清零
738 1 ad=(ADC0H & 0x0F)*256+ADC0L;
739 1 if(ad >= 0x0355)
740 1 {
741 2 REALPOWERF=72.802944*ad-49069.184256;
742 2 if(REALPOWERF/1000.0 > 254.9999999)
743 2 {
744 3 REALPOWER=255;
745 3 }
746 2 else
747 2 {
748 3 REALPOWER=(uchar)(REALPOWERF/1000.0);
749 3 }
750 2 }
751 1 else
752 1 {
753 2 REALPOWERF=13000;
754 2 REALPOWER=13;
755 2 }
756 1 }
757 //*********************************************************************
758 void SYSINIT(void)
759 {
760 1 //*****************************************************************
761 1 SFRPAGE=CONFIG_PAGE;
762 1 //OSC Select*******************************************************
763 1 OSCICN=0xC3;//使用内部频率24.5MHz,不分频
764 1 //*****************************************************************
765 1 //I/O define*******************************************************
766 1 XBR0 = 0x04;//select UART0
767 1 XBR1 = 0x14;//select INT0 and INT1
768 1 XBR2 = 0x04;//选择弱上拉,并且选择UART1
769 1 XBR2 = 0x44;//使能交叉开关
770 1 //*****************************************************************
771 1 P0MDOUT = 0x45; // Output configuration for P0
772 1 P1MDOUT = 0x80; // Output configuration for P1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -