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

📄 main.lst

📁 开发的一个温控仪完整代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   MAIN                                                                  03/06/2007 20:40:55 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: E:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          //korfi make this file
   2          //Updata:
   3          //korfi,13/09/2006:修改第一次验收时的缺点
   4          //korfi,14/09/2006:添加模糊自整定pid算法
   5          //korfi,15/09/2006:修正了校准办法
   6          //korfi,20/09/2006:第一次实物调试后的修改,比较大的改动
   7          
   8          
   9          #include "TempCtrl.h"
  10          
  11          sfr T2MOD  = 0xC9;
  12          
  13          #define __EEPROM_DEBUG__        0//调试用1,每次复位重新装载初始值到EEPROM
  14                                                                   //产品用0,     除了第一次装载初始值外不在覆盖设定值
  15          /////////////////////////////////////////
  16          void main()
  17          {
  18   1      
  19   1      
  20   1              /////////////////////////////////////////////
  21   1      //EEPROM操作
  22   1      
  23   1              DataTemp=Read(EP_FT);
  24   1              if((DataTemp!=0xaa)||__EEPROM_DEBUG__)
  25   1              {//将初始化数据拷贝到EEPROM中
  26   2                      
  27   2                      PassWordLock=0;
  28   2      
  29   2                      Write(  EP_FT,  0xaa);//EEPROM 标记
  30   2                      Write(  EP_Sr,  2000);//初始密码
  31   2                      Write(  EP_Sv,  Setted_Temperature);//设定值
  32   2                      Write(  EP_SH,  UpperLimit);
  33   2                      Write(  EP_SL,  LowerLimit);
  34   2                      Write(  EP_oH,  42);//全开时间:s
  35   2                      Write(  EP_oL,  (unsigned int)MinOutputLimit);//最小输出时间:分辨率0.01s
  36   2                      Write(  EP_P,   000);//P-->Kp*10,分辨率0.01
  37   2                      Write(  EP_I,   500);//I-->Ti*10,分辨率0.01
  38   2                      Write(  EP_d,   400);//d-->Td*10,分辨率0.01
  39   2                      Write(  EP_db,  (unsigned int)DeathZone);//闸位死区
  40   2                      Write(  EP_Fd,  100);//分度号
  41   2      
  42   2                      Write(EP_FrMin,0);
  43   2                      Write(EP_FrMax,0);
  44   2                      Write(EP_FF1,LineA);
  45   2                      Write(EP_FF2,LineB);
  46   2                      Write(EP_FF3,LineC);
  47   2                      Write(EP_FF4,LineD);
  48   2                      
  49   2                      PassWordLock=1; 
  50   2                      
  51   2              } 
  52   1              else
  53   1              {
  54   2                      //EEPROM 标记
  55   2                      //初始密码
C51 COMPILER V7.50   MAIN                                                                  03/06/2007 20:40:55 PAGE 2   

  56   2                                      
  57   2                      Setted_Temperature=Read(EP_Sv);//设定值
  58   2      
  59   2                      UpperLimit=Read(EP_SH);//上限
  60   2                      LowerLimit=Read(EP_SL);
  61   2                      MinOutputLimit=Read(EP_oL);//
  62   2      
  63   2                      DeathZone=Read(EP_db);
  64   2                      LineA=Read(EP_FF1);
  65   2                      LineB=Read(EP_FF2);
  66   2                      LineC=Read(EP_FF3);
  67   2                      LineD=Read(EP_FF4);
  68   2              }
  69   1      
  70   1              UpdatePid();
  71   1              UpdateFrZero();
  72   1      /////////////////////////////////////////////
  73   1              TMOD=0x15;//T0 16bit 计数器,
  74   1              TH0=0x00; TL0=0x00;//
  75   1              //T2  16bit 定时器
  76   1              TH1=0xf6; TL1=0x3c;//T=(65536-X)*12/fosc,X=65536-T*fosc/12,T=2.5ms
  77   1              ET1=1;TR1=1; 
  78   1      //      T2MOD=0x00;     //2.5ms         0.01s   0.1s    max=0.131s
  79   1              RCAP2H=0xec;//0xfb              0xec            0x3c
  80   1              RCAP2L=0x78;//0x1e              0x78            0xb0
  81   1              TR2=1;
  82   1              ET2=1;
  83   1              
  84   1              ET0=1;
  85   1              TR0=1;
  86   1      
  87   1              P1=Channel[0];//0x1f;//ch0
  88   1      
  89   1              KeySta=0x00;
  90   1              P_KEY=1;
  91   1              EA=1;
  92   1              AdmitFlag=1;
  93   1              DataTemp=Read(EP_Sv);
  94   1              InputTemp=DataTemp;
  95   1              
  96   1              while(1)
  97   1              {
  98   2                      Monitor();//监视按键,完成相应动作,因电路特定,显示亦在其中
  99   2      
 100   2                      if(SampleFlag)
 101   2                      {
 102   3                              ///TODO
 103   3                              IdTimeCnt+=1;
 104   3                              if(IdTimeCnt>=5)
 105   3                                      IdTimeCnt=0;
 106   3                              SamplingProcess();
 107   3                      
 108   3                              //显示切换
 109   3                              if(DlySecond>0)//&&(AdmitFlag==0))
 110   3                                      DlySecond-=1;
 111   3                              else
 112   3                                      PassWordLock=1;
 113   3                              if((DlySecond==1)&&(MeterSta!=STA_MAN))
 114   3                              {//更新一次显示
 115   4                                      LedH(Temperature);
 116   4                                      DPA();
 117   4      
C51 COMPILER V7.50   MAIN                                                                  03/06/2007 20:40:55 PAGE 3   

 118   4                                      DataTemp=Read(EP_Sv);
 119   4                                      InputTemp=DataTemp;
 120   4                                      InputLimit=5001; //400.0 degree is upper limit
 121   4                                      LedL(DataTemp);
 122   4                                      DPB();
 123   4                                      MeterSta=STA_AUTO;
 124   4                                      AdmitFlag=1;//允许上排数据更新
 125   4                              }
 126   3                              
 127   3                              if(CloseOpenTimeCnt>0)
 128   3                              {
 129   4                                      Output=100;
 130   4                                      CloseOpenTimeCnt-=1;
 131   4                              }
 132   3                              else if(CloseOpenTimeCnt<0)
 133   3                              {
 134   4                                      Output=-100;
 135   4                                      CloseOpenTimeCnt+=1;
 136   4                              }
 137   3                              ///END TODO
 138   3                              SampleFlag=0;
 139   3                      }
 140   2                      else
 141   2                              for(i=0;i<50;i++);//改变此数值以改变亮度
 142   2              }
 143   1      
 144   1      }
 145          
 146          //////////////////////////////////////////////////////////////////////////
 147          void timer0()interrupt 1 using 2        //溢出记录
 148          {//测频
 149   1              TF0=0;
 150   1              OverCnt+=1;     
 151   1              TH0=00;
 152   1              TL0=0x00;
 153   1              LedBuf[0]=LedCode[C_o];
 154   1              LedBuf[1]=LedCode[C_o];
 155   1              LedBuf[2]=LedCode[C_o];
 156   1              LedBuf[3]=LedCode[C_o];
 157   1      }
 158          
 159          void timer2()interrupt 5 using 3//定时0.01s 可以加长

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -