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

📄 ldfxmain.lst

📁 一个分选系统的软件:用SmallRtos操作系统
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.06   LDFXMAIN                                                              06/06/2005 16:32:36 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE LDFXMAIN
OBJECT MODULE PLACED IN .\output\ldfxmain.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ldfxmain.C OPTIMIZE(6,SPEED) BROWSE ORDER DEBUG OBJECTEXTEND PRINT(.\output
                    -\ldfxmain.lst) OBJECT(.\output\ldfxmain.obj)

stmt level    source

   1          /*********************************************************************************************************
   2          **锂电分选系统 软件设计:刘宝贵,硬件设计:刘宝贵 调试:刘宝贵
   3          **本系统使用编译器为 keil c51.exe V7.06
   4          **本系统使用汇编器为 keil A51.exe V7.07
   5          **本系统使用联接器为 keil BL51.exe V5.03
   6          **本系统使用Small RTOS51 V1.12.0
   7          **如果等程序有问题或者是Bug请与作者联系
   8          **与作者联系方法:邮箱:baoguiliu@163.com,baoguiliu@sohu.com 电话:0451-86649609
   9          **
  10          **
  11          **VER1.0
  12          **--------------文件信息--------------------------------------------------------------------------------
  13          **文   件   名: ldfxmain.c
  14          **创   建   人: 刘宝贵
  15          **最后修改日期: 
  16          **描        述: ldfxmain.c源代码。
  17          **
  18          **--------------历史版本信息----------------------------------------------------------------------------
  19          ** 修改人: 
  20          ** 版  本: 
  21          ** 日 期: 
  22          ** 描 述: 
  23          **
  24          **--------------当前版本修订------------------------------------------------------------------------------
  25          ** 修改人: 
  26          ** 日 期:
  27          ** 描 述:
  28          **
  29          **------------------------------------------------------------------------------------------------------
  30          ********************************************************************************************************/
  31          
  32          #include "config.h"
  33          void config();
  34          /*********************************************************************************************************
  35          ** 函数名称: main
  36          ** 功能描述: 主函数
  37          ** 输 入:   无
  38          ** 输 出:   无
  39          ** 全局变量: 
  40          ** 调用模块: OSStart() config()
  41          **
  42          ** 作 者: 刘宝贵
  43          ** 日 期: 2004年5月23日
  44          **-------------------------------------------------------------------------------------------------------
  45          ** 修改人:
  46          ** 日 期:
  47          **-------------------------------------------------------------------------------------------------------
  48          *********************************************************************************************************/
  49          void main(void)
  50          {
  51   1          config();//auto config
  52   1          ConfigMe();
  53   1          TR0 = 1;
  54   1          OSStart();
C51 COMPILER V7.06   LDFXMAIN                                                              06/06/2005 16:32:36 PAGE 2   

  55   1      }
  56          /*********************************************************************************************************
  57          ** 函数名称: TaskADDA
  58          ** 功能描述: AD DA
  59          ** 输 入:   无
  60          ** 输 出:   无
  61          ** 全局变量: AdBuf Cell 
  62          ** 调用模块: midst OSWait
  63          **
  64          ** 作 者: 刘宝贵
  65          ** 日 期: 2004年4月28日
  66          **-------------------------------------------------------------------------------------------------------
  67          ** 修改人:
  68          ** 日 期:
  69          **-------------------------------------------------------------------------------------------------------
  70          *********************************************************************************************************/
  71          void TaskAD(void)
  72          {
  73   1          uint8  data i,j;
  74   1          uint16 xdata u_ad_para[24],temp16a,temp16b;
  75   1          uint16 xdata i_ad_para[24];
  76   1          uint16 xdata ADIBuf[240];  //AD采样滤波所用的缓冲区
  77   1          uint16 xdata ADUBuf[240];  //AD采样滤波所用的缓冲区
  78   1          uint8  code adchannel[48]=
  79   1          {
  80   1              0x70,0x50,0x30,0x10,0x71,0x51,0x31,0x11,0x72,0x52,0x32,0x12,
  81   1      //        0x73,0x53,0x33,0x13,0x74,0x54,0x34,0x14,0x75,0x55,0x35,0x15,
  82   1              0x15,0x35,0x55,0x75,0x14,0x34,0x54,0x74,0x13,0x33,0x53,0x73,
  83   1              0x60,0x40,0x20,0x00,0x61,0x41,0x21,0x01,0x62,0x42,0x22,0x02,
  84   1      //        0x63,0x43,0x23,0x03,0x64,0x44,0x24,0x04,0x65,0x45,0x25,0x05,
  85   1              0x05,0x25,0x45,0x65,0x04,0x24,0x44,0x64,0x03,0x23,0x43,0x63,
  86   1          };//每一路模拟采样对应通道控制字:控制CD4051的A,B,C(高四位)和C8051F020片内的AD通道选择(低四位)
  87   1            //adchannel[0~~~23]对应U0~~U23    adchannel[24~~~48]对应I0~~I23
  88   1          for(i=0;i<240;i++)
  89   1          {
  90   2              ADIBuf[i]=0;
  91   2              ADUBuf[i]=0;
  92   2          }
  93   1          AdParaChanged = 1;
  94   1          i = 0;
  95   1          j = 0;
  96   1          while (1)
  97   1          {
  98   2              //以下是对AD通道的处理
  99   2              i++;
 100   2              if(i == 48)
 101   2              {
 102   3                  if(AdParaChanged)
 103   3                  {
 104   4                      if(OSSemPend(IICSem,0)==OS_SEM_OK)
 105   4                      {
 106   5                          for(i=0;i<24;i++)
 107   5                          {
 108   6                              do
 109   6                              {
 110   7                                  temp16a = EepromReadWordA(CellParaIICBase+i*16+0*2);
 111   7                                  temp16b = EepromReadWordA(CellParaIICBase+i*16+0*2);
 112   7                              }while(temp16a !=temp16b);
 113   6                              u_ad_para[i] = temp16a;
 114   6                              if(u_ad_para[i] > PARAMETER_MAX || u_ad_para[i] < PARAMETER_MIN)
 115   6                              {
 116   7                                  u_ad_para[i] = 10000;
C51 COMPILER V7.06   LDFXMAIN                                                              06/06/2005 16:32:36 PAGE 3   

 117   7                                  EepromWriteWordA(CellParaIICBase+i*16+0*2,10000);
 118   7                              }
 119   6      
 120   6                              do
 121   6                              {
 122   7                                  temp16a = EepromReadWordA(CellParaIICBase+i*16+2*2);
 123   7                                  temp16b = EepromReadWordA(CellParaIICBase+i*16+2*2);
 124   7                              }while(temp16a !=temp16b);
 125   6                              i_ad_para[i] = temp16a;
 126   6                              if(i_ad_para[i] > PARAMETER_MAX || i_ad_para[i] < PARAMETER_MIN)
 127   6                              {
 128   7                                  i_ad_para[i] = 10000;
 129   7                                  EepromWriteWordA(CellParaIICBase+i*16+2*2,10000);
 130   7                              }
 131   6                          }//for(i=0;i<24;i++)
 132   5                          OSSemPost(IICSem);
 133   5                      }//if(OSSemPend(IICSem,0)==OS_SEM_OK)
 134   4                      AdParaChanged = 0;
 135   4                  }//if(AdParaChanged)
 136   3                  j++;
 137   3                  j%=9;
 138   3                  for(i=0;i<24;i++)
 139   3                  {
 140   4                      uint32 xdata temp32;
 141   4                      temp32    = midst(&ADUBuf[i*9],9);
 142   4                      temp32   *= 50000;
 143   4                      temp32   /= 12750;//4095*3
 144   4                      temp32   *= u_ad_para[i];
 145   4                      temp32   /=10000;
 146   4                      OS_ENTER_CRITICAL();
 147   4                      Cell[i].u = (uint16)temp32;
 148   4                      OS_EXIT_CRITICAL();
 149   4      
 150   4                      temp32    = midst(&ADIBuf[i*9],9);
 151   4                      temp32   *=30380;
 152   4                      temp32   /=12285;//4095*3
 153   4                      temp32   *=i_ad_para[i];
 154   4                      temp32   /=10000;
 155   4                      OS_ENTER_CRITICAL();
 156   4                      Cell[i].i = (uint16)(temp32);
 157   4                      OS_EXIT_CRITICAL();
 158   4                  }
 159   3                  i=0;
 160   3              }
 161   2              AD_CS=(bit)(adchannel[i]<<1 & 0x80);
 162   2              AD_BS=(bit)(adchannel[i]<<2 & 0x80);
 163   2              AD_AS=(bit)(adchannel[i]<<3 & 0x80);
 164   2              AMX0SL=adchannel[i]&0x0f;//channel select 
 165   2              OSWait(K_TMO,(5*OS_TICKS_PER_SEC)/1000);
 166   2              AD0INT=0;
 167   2              AD0BUSY=1;
 168   2              do
 169   2              {
 170   3                  OSWait(K_TMO,(5*OS_TICKS_PER_SEC)/1000);
 171   3              }while(AD0INT==0);
 172   2              if(i<24)
 173   2              {
 174   3                  
 175   3                  uint32 xdata temp32;
 176   3                  ADUBuf[i*9+j]=ADC0H*256+ADC0L;
 177   3                  temp32    =  ADUBuf[i*9+j];
 178   3                  temp32   *= 5000;
C51 COMPILER V7.06   LDFXMAIN                                                              06/06/2005 16:32:36 PAGE 4   

 179   3                  temp32   /= 455;
 180   3                  temp32   *= u_ad_para[i];
 181   3                  temp32   /=9310;
 182   3                  OS_ENTER_CRITICAL();
 183   3                  CellCheckU[i] = (uint16)temp32;
 184   3                  OS_EXIT_CRITICAL();
 185   3              }
 186   2              else
 187   2                  ADIBuf[(i-24)*9+j]=ADC0H*256+ADC0L;
 188   2          }
 189   1      }
 190          /*********************************************************************************************************
 191          ** 函数名称: TaskWorkStep
 192          ** 功能描述: 工步处理
 193          ** 输 入:   无
 194          ** 输 出:   无
 195          ** 全局变量: 
 196          ** 调用模块: ClearDA
 197          **
 198          ** 作 者: 刘宝贵
 199          ** 日 期: 2004年4月28日
 200          **-------------------------------------------------------------------------------------------------------
 201          ** 修改人:
 202          ** 日 期:
 203          **-------------------------------------------------------------------------------------------------------
 204          *********************************************************************************************************/
 205          void TaskWorkStep(void)
 206          {
 207   1          uint8 i;
 208   1          OSSemCreate(IICSem,1);           //实现IIC总线的互斥
 209   1          OSSemCreate(StartWorkStepSem,0); //工步执行报文下发与工步执行同步
 210   1          OSSemCreate(StopWorkStepSem, 0); //工步停止报文下发与工步停止同步
 211   1          while (1)
 212   1          {
 213   2      TaskWorkStepBegin:
 214   2              if(CurrentWorkStep == 0)//CurrentWorkStep==0表示停止
 215   2              {
 216   3                  OSSemPend(StartWorkStepSem,0);
 217   3              }
 218   2              for(;CurrentWorkStep <= SumWorkStep; CurrentWorkStep++)
 219   2              {
 220   3                  switch(WorkStep[CurrentWorkStep].type)
 221   3                  {
 222   4                      case 0://停止
 223   4                      {
 224   5                          da(0,0);
 225   5                          da(0,1);
 226   5                          P4 |=0xFF;
 227   5                          P5 |=0x0F;
 228   5                          P2 |=0xF0;
 229   5                          P1 |=0xFF;//所有DA_EN脚均为1,使所有398处于采样状态,把所有DA清为0
 230   5                          JDQ = 1;
 231   5                          CurrentWorkStep = 0;
 232   5                          WorkStepInit(STOP);                    
 233   5                          goto TaskWorkStepBegin;
 234   5                      }break;

⌨️ 快捷键说明

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