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

📄 ext1.lst

📁 一个分选系统的软件:用SmallRtos操作系统
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   EXT1                                                                  05/25/2004 14:50:46 PAGE 1   


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

stmt level    source

   1          /*********************************************************************************************************
   2          **                                                             Small RTOS(51)
   3          **                                   The Real-Time Kernel(For Keil c51)
   4          **
   5          **                                  (c) Copyright 2002-2003, chenmingji
   6          **                                           All Rights Reserved
   7          **
   8          **                                                  V1.12.0
   9          **
  10          **
  11          **--------------文件信息--------------------------------------------------------------------------------
  12          **文   件   名: ext1.c
  13          **创   建   人: 陈明计
  14          **最后修改日期: 2002年12月30日
  15          **描        述: ext1源代码。
  16          **
  17          **--------------历史版本信息----------------------------------------------------------------------------
  18          ** 创建人: 陈明计
  19          ** 版  本: V0.50
  20          ** 日 期: 2002年2月22日
  21          ** 描 述: 原始版本
  22          **
  23          **------------------------------------------------------------------------------------------------------
  24          ** 修改人: 陈明计
  25          ** 版  本: V1.11.0
  26          ** 日 期: 2003年12月2日
  27          ** 描 述: 删除TaskD代码
  28          **
  29          **------------------------------------------------------------------------------------------------------
  30          ** 修改人: 陈明计
  31          ** 版  本: V1.12.0
  32          ** 日 期: 2003年12月2日
  33          ** 描 述: 无变化
  34          **
  35          **--------------当前版本修订------------------------------------------------------------------------------
  36          ** 修改人: 
  37          ** 日 期:
  38          ** 描 述:
  39          **
  40          **------------------------------------------------------------------------------------------------------
  41          ********************************************************************************************************/
  42          
  43          #include "config.h"
  44          void config();
  45          /*********************************************************************************************************
  46          ** 函数名称: ConfigMe
  47          ** 功能描述: 系统配置如果是第一次使用将所有参数初始化,DA置为0
  48          ** 输 入:   无
  49          ** 输 出:   无
  50          ** 全局变量: 
  51          ** 调用模块: OSSemPend OSSemPost
  52          **
  53          ** 作 者: 刘宝贵
  54          ** 日 期: 2004年5月23日
C51 COMPILER V7.06   EXT1                                                                  05/25/2004 14:50:46 PAGE 2   

  55          **-------------------------------------------------------------------------------------------------------
  56          ** 修改人:
  57          ** 日 期:
  58          **-------------------------------------------------------------------------------------------------------
  59          *********************************************************************************************************/
  60          void ConfigMe()//manual config
  61          {
  62   1          uint8 code buftemp[]={"Coslight~LiuBG"};
  63   1          uint8 data i;
  64   1          bit first_use = 0;
  65   1          for(i=0;i<14;i++)
  66   1          {
  67   2              if(OSSemPend(IICSem,50)==OS_SEM_OK)
  68   2              {
  69   3                  if(buftemp[i] != EepromReadByte(CoslightIICBase+i) )
  70   3                  {
  71   4                      first_use=1;
  72   4                      EepromWriteByte(CoslightIICBase+i,buftemp[i]);
  73   4                  }
  74   3                  OSSemPost(IICSem);
  75   3              }
  76   2              
  77   2          }
  78   1          if(first_use)
  79   1          {
  80   2      
  81   2              if(OSSemPend(IICSem,50)==OS_SEM_OK)
  82   2              {
  83   3                  for(i=0;i<24*8;i++)
  84   3                  {
  85   4                      EepromWriteWord(CellParaIICBase+i*2,5000);
  86   4                  }
  87   3                  OSSemPost(IICSem);
  88   3              }
  89   2          }
  90   1          ClearDA();
  91   1          SumWorkStep     = EepromReadByte(SumWorkStepIICBase);
  92   1          CurrentWorkStep = EepromReadByte(CurrentWorkStepIICBase);
  93   1          EepromWriteByte(SumWorkStepIICBase,SumWorkStep);
  94   1          for(i=1;i<=SumWorkStep;i++)
  95   1          {
  96   2              WorkStep[i].type  = EepromReadByte(WorkStepIICBase + i*7 + 0);
  97   2              WorkStep[i].i     = EepromReadWord(WorkStepIICBase + i*7 + 1);
  98   2              WorkStep[i].limit = EepromReadWord(WorkStepIICBase + i*7 + 3);
  99   2              WorkStep[i].t     = EepromReadWord(WorkStepIICBase + i*7 + 5);
 100   2          }
 101   1          WorkStepCheck();
 102   1          for(i=0;i<24;i++)
 103   1          {
 104   2              Cell[i].c = EepromReadWord(Cell_CIICBase+i*4+0);
 105   2              Cell[i].c = Cell[i].c<<16;
 106   2              Cell[i].c |=EepromReadWord(Cell_CIICBase+i*4+2);
 107   2              
 108   2              Cell[i].t = EepromReadWord(Cell_TIICBase + i*2);
 109   2      
 110   2              Cell[i].s = EepromReadWord(Cell_SIICBase + i);
 111   2          }
 112   1      }
 113          /*********************************************************************************************************
 114          ** 函数名称: 给所有DA通道赋值
 115          ** 功能描述: 系统配置如果是第一次使用将所有参数初始化,DA置为0
 116          ** 输 入:   无
C51 COMPILER V7.06   EXT1                                                                  05/25/2004 14:50:46 PAGE 3   

 117          ** 输 出:   无
 118          ** 全局变量: DAIBuf[] DAUBuf[] WorkStep[] CurrentWorkStep
 119          ** 调用模块: OSSemPend OSSemPost EepromReadWord
 120          **
 121          ** 作 者: 刘宝贵
 122          ** 日 期: 2004年5月23日
 123          **-------------------------------------------------------------------------------------------------------
 124          ** 修改人:
 125          ** 日 期:
 126          **-------------------------------------------------------------------------------------------------------
 127          *********************************************************************************************************/
 128          void SetupDA(void)
 129          {
 130   1          uint8 data i;
 131   1          uint32 xdata temp32;
 132   1          for(i=0;i<24;i++)
 133   1          {
 134   2              temp32 = WorkStep[CurrentWorkStep].i;
 135   2              temp32 *= 4096;
 136   2              temp32 /= 2500;
 137   2      
 138   2              OSSemPend(IICSem,0);
 139   2              temp32 *= EepromReadWord(CellParaIICBase+i*2+6);
 140   2              OSSemPost(IICSem);
 141   2      
 142   2              temp32 /= 5000;
 143   2              DAIBuf[i] = (uint16)temp32;
 144   2      
 145   2              temp32 = 4096 * 2100 / 2500;
 146   2      
 147   2              OSSemPend(IICSem,0);
 148   2              temp32*=EepromReadWord(CellParaIICBase+i*2+4);
 149   2              OSSemPost(IICSem);
 150   2      
 151   2              temp32/=5000;
 152   2              DAUBuf[i] = (uint16)temp32;
 153   2          }
 154   1      }
 155          /*********************************************************************************************************
 156          ** 函数名称: main
 157          ** 功能描述: 主函数
 158          ** 输 入:   无
 159          ** 输 出:   无
 160          ** 全局变量: 
 161          ** 调用模块: OSStart() config()
 162          **
 163          ** 作 者: 刘宝贵
 164          ** 日 期: 2004年5月23日
 165          **-------------------------------------------------------------------------------------------------------
 166          ** 修改人:
 167          ** 日 期:
 168          **-------------------------------------------------------------------------------------------------------
 169          *********************************************************************************************************/
 170          void main(void)
 171          {
 172   1          config();//auto config
 173   1          ConfigMe();
 174   1          TR0 = 1;
 175   1          Address=1;
 176   1          OSStart();
 177   1      }
 178          /*********************************************************************************************************
C51 COMPILER V7.06   EXT1                                                                  05/25/2004 14:50:46 PAGE 4   

 179          ** 函数名称: TaskADDA
 180          ** 功能描述: AD DA
 181          ** 输 入:   无
 182          ** 输 出:   无
 183          ** 全局变量: AdBuf Cell 
 184          ** 调用模块: midst OSWait
 185          **
 186          ** 作 者: 刘宝贵
 187          ** 日 期: 2004年4月28日
 188          **-------------------------------------------------------------------------------------------------------
 189          ** 修改人:
 190          ** 日 期:
 191          **-------------------------------------------------------------------------------------------------------
 192          *********************************************************************************************************/
 193          void TaskAD(void)
 194          {
 195   1          uint8  data i;
 196   1          uint16 xdata u_ad_para[24];
 197   1          uint16 xdata i_ad_para[24];
 198   1          for(i=0;i<240;i++)
 199   1          {
 200   2              ADBuf[i]=0;
 201   2          }
 202   1          if(OSSemPend(IICSem,0)==OS_SEM_OK)
 203   1          {
 204   2              for(i=0;i<24;i++)
 205   2              {
 206   3                  u_ad_para[i] = EepromReadWord(CellParaIICBase+i*2+0);
 207   3                  i_ad_para[i] = EepromReadWord(CellParaIICBase+i*2+2);
 208   3              }
 209   2              OSSemPost(IICSem);
 210   2          }
 211   1          OSWait(K_SIG,0);//每采一圈由中断发信号,处理一次。
 212   1          while (1)
 213   1          {
 214   2              for(i=0;i<24;i++)
 215   2              {
 216   3                  uint32 xdata temp32;
 217   3                  OS_ENTER_CRITICAL();
 218   3                  temp32    = (midst(&ADBuf[i*5],5)*u_ad_para[i])/5000;
 219   3                  Cell[i].u = 4100+i;//(uint16)(temp32>>16);
 220   3                  temp32    = (midst(&ADBuf[i*5],5)*i_ad_para[i])/5000;
 221   3                  Cell[i].i = 1000;//(uint16)(temp32>>16);
 222   3                  OS_EXIT_CRITICAL();
 223   3              }
 224   2              OSWait(K_SIG,0);//每采一圈由中断发信号,处理一次。
 225   2          } 
 226   1      }
 227          /*********************************************************************************************************
 228          ** 函数名称: TaskWorkStep
 229          ** 功能描述: 工步处理
 230          ** 输 入:   无
 231          ** 输 出:   无
 232          ** 全局变量: 
 233          ** 调用模块: ClearDA
 234          **
 235          ** 作 者: 刘宝贵
 236          ** 日 期: 2004年4月28日
 237          **-------------------------------------------------------------------------------------------------------
 238          ** 修改人:
 239          ** 日 期:
 240          **-------------------------------------------------------------------------------------------------------
C51 COMPILER V7.06   EXT1                                                                  05/25/2004 14:50:46 PAGE 5   

 241          *********************************************************************************************************/
 242          void TaskWorkStep(void)
 243          {
 244   1          uint8 i;
 245   1          OSSemCreate(IICSem,1);       //实现IIC总线的互斥
 246   1          OSSemCreate(StartWorkStepSem,1);//工步报文下发与工步执行同步
 247   1          while (1)
 248   1          {
 249   2      TaskWorkStepBegin:
 250   2              OSSemPend(StartWorkStepSem,0);
 251   2              for(;CurrentWorkStep <= SumWorkStep; CurrentWorkStep++)
 252   2              {
 253   3                  switch(WorkStep[CurrentWorkStep].type)
 254   3                  {
 255   4                      case 0://停止
 256   4                      {
 257   5                          ClearDA();
 258   5                          WorkStepInit(STOP);
 259   5                          goto TaskWorkStepBegin;
 260   5                      }break;
 261   4                      case 1://静置
 262   4                      {
 263   5                          ClearDA();
 264   5                          WorkStepInit(HALT);
 265   5                          while(WorkStep[CurrentWorkStep].t > Second)
 266   5                              OSWait(K_TMO,(50*OS_TICKS_PER_SEC)/1000);
 267   5                      }break;
 268   4                      case 2://充电
 269   4                      {

⌨️ 快捷键说明

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