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

📄 currentmodule.lst

📁 该程序完成了c8051外围电路的驱动和串口协议的编写。希望能给大家学习51单片机带来帮助
💻 LST
字号:
C51 COMPILER V7.10   CURRENTMODULE                                                         09/18/2008 14:09:29 PAGE 1   


C51 COMPILER V7.10, COMPILATION OF MODULE CURRENTMODULE
OBJECT MODULE PLACED IN CurrentModule.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 20progress\CurrentModule.c BROWSE DEBUG OBJECTEXTEND PRINT(.\CurrentModule.
                    -lst) OBJECT(CurrentModule.obj)

line level    source

   1          //*******************************************************************************
   2          //Copyright (c) 2007,派利斯电子(北京)有限公司 硬件部
   3          //文件名称: CurrentModule.c
   4          //摘    要: 本文件主要包含PT2060程序中电流计算、输出和标定等操作
   5          //当前版本: D-1 
   6          //作    者:  佟文杰
   7          //完成日期: 4/19/2007
   8          //******************************************************************************* 
   9          #define CURRENTMODULE_C
  10          #include "currentmodule.h"
  11          xdata struct Current CurrentModule;
  12          //-------------------------------------------------------------------------
  13          //函数名称:void SetDAZero(unsigned char uchChannel, unsigned int uiDAZero)
  14          //功    能:由通道的选择设置DA 4mA对应的参数
  15          //输入参数:通道号 ,DA 4mA对应的值      
  16          //返    回:无                           
  17          //完成日期:4/16/2007
  18          //-------------------------------------------------------------------------
  19          void SetDAZero(unsigned char uchChannel, unsigned int uiDAZero)
  20          {
  21   1              CurrentModule.uiDAZero[uchChannel - 1] = uiDAZero;
  22   1      }
  23          
  24          //-------------------------------------------------------------------------
  25          //函数名称:void SetDAFull(unsigned char uchChannel, unsigned int uiDAFull)
  26          //功    能:由通道的选择设置DA 20mA对应的参数
  27          //输入参数:通道号,DA 20mA对应的值
  28          //返    回:无
  29          //完成日期:4/16/2007
  30          //-------------------------------------------------------------------------
  31          void SetDAFull(unsigned char uchChannel, unsigned int uiDAFull)
  32          {
  33   1              CurrentModule.uiDAFull[uchChannel - 1] = uiDAFull;
  34   1      }
  35          
  36          //--------------------------------------------------------------------------------------------------------
             ---
  37          //函数名称:void OutputCurrentValue(unsigned char uchChannel, int iCurrentValue)
  38          //功    能:根据电流值输出对应的电流值
  39          //输入参数:通道号,给定的电流值×100
  40          //返    回:无
  41          //完成日期:4/16/2007
  42          //--------------------------------------------------------------------------------------------------------
             ---
  43          void OutputCurrentValue(unsigned char uchChannel, int iCurrentValue)
  44          {
  45   1              long xdata fTempVariable;
  46   1      
  47   1              if (iCurrentValue >= 2300)
  48   1              {
  49   2                      iCurrentValue = 2300;
  50   2              }
  51   1              fTempVariable = (long)(iCurrentValue - 400);
  52   1              fTempVariable = fTempVariable * (CurrentModule.uiDAFull[uchChannel - 1] - CurrentModule.uiDAZero[uchChann
C51 COMPILER V7.10   CURRENTMODULE                                                         09/18/2008 14:09:29 PAGE 2   

             -el - 1]);
  53   1              fTempVariable = fTempVariable / 1600;                             //16 * 100 
  54   1              fTempVariable = fTempVariable + CurrentModule.uiDAZero[uchChannel - 1];
  55   1      
  56   1              if (fTempVariable < 0)
  57   1              {
  58   2                      fTempVariable = 0;
  59   2              }
  60   1              if (fTempVariable > 4095)
  61   1              {
  62   2                      fTempVariable = 4095;
  63   2              }
  64   1              DirectCurrentOutput(uchChannel, (unsigned int)fTempVariable);
  65   1      }
  66          
  67          //------------------以下为电流标定的部分-----------------------------------------
  68          
  69          //------------------------------------------------------------------------------
  70          //函数名称:void SetCalibCurrentZero(unsigned char uchChannel, unsigned int uiCalibCurrentZero)
  71          //功    能:由通道的选择得到上位机传下来的电流值的零点
  72          //输入参数:通道号,DA标定零点的电流值                     乘以了100后传过来的
  73          //返    回:无
  74          //完成日期:4/16/2007
  75          //------------------------------------------------------------------------------
  76          void SetCalibCurrentZero(unsigned char uchChannel, unsigned int uiCalibCurrentZero)
  77          {
  78   1              CurrentModule.uiCalibCurrentZero[uchChannel - 1] = uiCalibCurrentZero;
  79   1      }
  80          
  81          //--------------------------------------------------------------------------------------
  82          //函数名称:void SetCalibCurrentFull(unsigned char uchChannel, unsigned int uiCalibCurrentFull)
  83          //功    能:由通道的选择得到上位机传下来的电流值的满度
  84          //输入参数:通道号,DA标定满度的电流值                     乘以了100后传过来的
  85          //返    回:无
  86          //完成日期:4/16/2007
  87          //---------------------------------------------------------------------------------------
  88          void SetCalibCurrentFull(unsigned char uchChannel, unsigned int uiCalibCurrentFull)
  89          {
  90   1              CurrentModule.uiCalibCurrentFull[uchChannel - 1] = uiCalibCurrentFull;
  91   1      } 
  92          
  93          //--------------------------------------------------------------------------------------------------
  94          //函数名称:void CalculateCalibrateZeroValue(unsigned char uchChannel, unsigned char uchCountFlag)
  95          //功    能:计算每个通道标定的零点AD值和满量程AD值
  96          //输入参数:通道号,计算标志     0:表示计算零点  1:表示计算满度  0xff:表示计算全体
  97          //返    回:无
  98          //完成日期:4/16/2007
  99          //--------------------------------------------------------------------------------------------------
 100          void CalculateCalibrateValue(unsigned char uchChannel, unsigned char uchCountFlag)
 101          {
 102   1              unsigned long xdata ulTempVariable;
 103   1      
 104   1              if (uchCountFlag == 0)
 105   1              {
 106   2                      ulTempVariable = CurrentModule.uiCalibCurrentFull[uchChannel - 1] - CurrentModule.uiCalibCurrentZero[uch
             -Channel - 1];
 107   2                      ulTempVariable = 327000 / ulTempVariable;  //(3700 - 430)*100
 108   2                      ulTempVariable = ulTempVariable * (400 - CurrentModule.uiCalibCurrentZero[uchChannel - 1]);
 109   2                      ulTempVariable = ulTempVariable / 100;
 110   2                      CurrentModule.uiDAZero[uchChannel - 1] = ulTempVariable + 430;                  //400mA对应的AD值                                               
 111   2                      SetDAZeroCountResultMain(uchChannel, CurrentModule.uiDAZero[uchChannel - 1]);   //存储电流DA值
 112   2                      DirectCurrentOutput(uchChannel, CurrentModule.uiDAZero[uchChannel - 1]);                //显示电流值
C51 COMPILER V7.10   CURRENTMODULE                                                         09/18/2008 14:09:29 PAGE 3   

 113   2              }
 114   1              else if (uchCountFlag == 1)
 115   1              {
 116   2                      ulTempVariable = 5232000 / (CurrentModule.uiCalibCurrentFull[uchChannel - 1] - CurrentModule.uiCalibCurr
             -entZero[uchChannel - 1]);             //((3700 - 430) * 16 * 100)     
 117   2                      CurrentModule.uiDAFull[uchChannel - 1] = ulTempVariable + CurrentModule.uiDAZero[uchChannel - 1];                                               
 118   2                      SetDAFullCountResultMain(uchChannel, CurrentModule.uiDAFull[uchChannel - 1]);
 119   2                      DirectCurrentOutput(uchChannel, CurrentModule.uiDAFull[uchChannel - 1]);
 120   2              }
 121   1              else if (uchCountFlag == 0xff)
 122   1              {
 123   2                      ulTempVariable = CurrentModule.uiCalibCurrentFull[uchChannel - 1] - CurrentModule.uiCalibCurrentZero[uch
             -Channel - 1];
 124   2                      ulTempVariable = 327000 / ulTempVariable;  //(3700 - 430)*100
 125   2                      ulTempVariable = ulTempVariable * (400 - CurrentModule.uiCalibCurrentZero[uchChannel - 1]);
 126   2                      ulTempVariable = ulTempVariable / 100;
 127   2                      CurrentModule.uiDAZero[uchChannel - 1] = ulTempVariable + 430;
 128   2                      ulTempVariable = 5232000 / (CurrentModule.uiCalibCurrentFull[uchChannel - 1] - CurrentModule.uiCalibCurr
             -entZero[uchChannel - 1]);             //((3700 - 430) * 16 * 100)     
 129   2                      CurrentModule.uiDAFull[uchChannel - 1] = ulTempVariable + CurrentModule.uiDAZero[uchChannel - 1];
 130   2                      SetDAZeroCountResultMain(uchChannel, CurrentModule.uiDAZero[uchChannel - 1]);
 131   2                      SetDAFullCountResultMain(uchChannel, CurrentModule.uiDAFull[uchChannel - 1]);   
 132   2              }
 133   1              else
 134   1              {
 135   2                      return;
 136   2              }
 137   1              FeedDog();
 138   1      }
 139          
 140          //--------------------------------------------------------------------------------------------------
 141          //函数名称:void InitCalibrationPara(unsigned char uchChannel)
 142          //功    能:初始化标定的电流值            放在初始化程序中
 143          //输入参数:通道号
 144          //返    回:无
 145          //完成日期:4/16/2007
 146          //--------------------------------------------------------------------------------------------------
 147          void InitCalibrationPara(unsigned char uchChannel)
 148          {
 149   1      /*      unsigned long xdata ulTempData;
 150   1      
 151   1              if (CurrentModule.uiDAZero[uchChannel - 1] > 430)
 152   1              {
 153   1                      ulTempData = 1600 * ((unsigned long)CurrentModule.uiDAZero[uchChannel - 1] - 430);
 154   1                      ulTempData = ulTempData / (CurrentModule.uiDAFull[uchChannel - 1] - CurrentModule.uiDAZero[uchChannel - 
             -1]);
 155   1                      ulTempData = 400 - ulTempData;
 156   1                      SetCalibCurrentZero(uchChannel, ulTempData);     //放置默认的参数
 157   1              }                
 158   1              else
 159   1              {
 160   1                      SetCalibCurrentZero(uchChannel, 400);    //放置默认的参数       
 161   1              }
 162   1      //      SetCalibCurrentZero(uchChannel, 250);    //放置默认的参数
 163   1              if (CurrentModule.uiDAFull[uchChannel - 1] < 3700)
 164   1              {
 165   1                      ulTempData = 1600 * (3700 - (unsigned long)CurrentModule.uiDAFull[uchChannel - 1]);
 166   1                      ulTempData = ulTempData / (CurrentModule.uiDAFull[uchChannel - 1] - CurrentModule.uiDAZero[uchChannel - 
             -1]);        
 167   1                      ulTempData = ulTempData + 2000;
 168   1                      SetCalibCurrentFull(uchChannel, ulTempData);     //放置默认的参数
 169   1              }
C51 COMPILER V7.10   CURRENTMODULE                                                         09/18/2008 14:09:29 PAGE 4   

 170   1              else
 171   1              {
 172   1                      SetCalibCurrentFull(uchChannel, 2000);   //放置默认的参数
 173   1              }
 174   1      //      SetCalibCurrentFull(uchChannel, 2130);   //放置默认的参数                  */
 175   1      
 176   1              float xdata fTempData;
 177   1      
 178   1              if (CurrentModule.uiDAZero[uchChannel - 1] > 430)
 179   1              {
 180   2                      fTempData = 1600 * ((unsigned long)CurrentModule.uiDAZero[uchChannel - 1] - 430);
 181   2                      fTempData = fTempData / (CurrentModule.uiDAFull[uchChannel - 1] - CurrentModule.uiDAZero[uchChannel - 1]
             -);
 182   2                      fTempData = 400 - fTempData;
 183   2                      SetCalibCurrentZero(uchChannel, fTempData);      //放置默认的参数
 184   2              }                
 185   1              else
 186   1              {
 187   2                      SetCalibCurrentZero(uchChannel, 400);    //放置默认的参数       
 188   2              }
 189   1      //      SetCalibCurrentZero(uchChannel, 250);    //放置默认的参数
 190   1              if (CurrentModule.uiDAFull[uchChannel - 1] < 3700)
 191   1              {
 192   2                      fTempData = 1600 * (3700 - (unsigned long)CurrentModule.uiDAFull[uchChannel - 1]);
 193   2                      fTempData = fTempData / (CurrentModule.uiDAFull[uchChannel - 1] - CurrentModule.uiDAZero[uchChannel - 1]
             -);        
 194   2                      fTempData = fTempData + 2000;
 195   2                      SetCalibCurrentFull(uchChannel, fTempData);      //放置默认的参数
 196   2              }
 197   1              else
 198   1              {
 199   2                      SetCalibCurrentFull(uchChannel, 2000);   //放置默认的参数
 200   2              }
 201   1      
 202   1      //20080417
 203   1      
 204   1      }
 205          
 206          
 207          
 208          
 209          
 210          
 211          
 212          
 213          
 214          
 215          
 216          
 217          
 218          
 219          
 220          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1550    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =     16      12
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       4
   IDATA SIZE       =   ----    ----
C51 COMPILER V7.10   CURRENTMODULE                                                         09/18/2008 14:09:29 PAGE 5   

   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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