⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 play.lst

📁 基于c8051f单片机的工控机的开发
💻 LST
📖 第 1 页 / 共 5 页
字号:
 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 + -