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

📄 main.lst

📁 tlc2543模数转换程序
💻 LST
字号:
C51 COMPILER V7.50   MAIN                                                                  11/23/2007 13:53:49 PAGE 1   


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

line level    source

   1          #include <reg52.h>
   2          #include <absacc.h>
   3          #define uchar unsigned char
   4          #define uint  unsigned int
   5          #define AdLenth  3 
   6          sbit  D_CLOCK =P1^0;
   7          sbit  D_IN    =P1^1;
   8          sbit  D_OUT   =P1^3;
   9          sbit  D_CS    =P1^4;
  10          uint AdBuff[];
  11          uint Read2543(uchar port);
  12          uint GetMidAd(uchar port);
  13          void AdMoveAverage(uchar Port);
  14          uint AdAverage(void);
  15          void Delay(uint i);
  16          //TI TLC2543 12位AD驱动程序,51晶振是11.0592MHz的。
  17          /*-----------------------------------------------------------------------------
  18          调用方式:uint Read2543(uchar port)
  19          函数说明:port是采样的通道号  0-----10
  20          -------------------------------------------------------------------------------*/
  21          //当前返回的测量值是上一次输入的结果。
  22          uint Read2543(uchar port) //从TLC1543读取采样值,形参port是采样的通道号
  23          {
  24   1       uchar mRetADHi,mRetADLo;  //返回的测量值的高位、8低位
  25   1       uchar mTemp;
  26   1       D_CLOCK=0;
  27   1       D_CS=0;
  28   1       mRetADHi=0;
  29   1       mRetADLo=0;
  30   1        //把通道号(4位)打入2543    **代码虽然麻烦,但编译后的执行速度很快**
  31   1       D_IN=(bit)(port&0x08);
  32   1       D_CLOCK=1;
  33   1       mTemp=(uchar)D_OUT;
  34   1       mRetADHi|=mTemp<<3;
  35   1       D_CLOCK=0;
  36   1       D_IN=(bit)(port&0x04);
  37   1       D_CLOCK=1;
  38   1       mTemp=(uchar)D_OUT;
  39   1       mRetADHi|=mTemp<<2;
  40   1       D_CLOCK=0;
  41   1       D_IN=(bit)(port&0x02);
  42   1       D_CLOCK=1;
  43   1       mTemp=(uchar)D_OUT;
  44   1       mRetADHi|=mTemp<<1;
  45   1       D_CLOCK=0;
  46   1       D_IN=(bit)(port&0x01);
  47   1       D_CLOCK=1;
  48   1       mTemp=(uchar)D_OUT;
  49   1       mRetADHi|=mTemp;
  50   1       D_CLOCK=0;
  51   1       //参数设定开始
  52   1       //注意:参数的设定只对下一周期的测量有效,对本次取样没有作用
  53   1       D_IN=0;
  54   1       D_CLOCK=1;
  55   1       mTemp=(uchar)D_OUT;
C51 COMPILER V7.50   MAIN                                                                  11/23/2007 13:53:49 PAGE 2   

  56   1       mRetADLo|=mTemp<<7;
  57   1       D_CLOCK=0;   //选择12位的数据长度
  58   1       D_IN=0;
  59   1       D_CLOCK=1;
  60   1       mTemp=(uchar)D_OUT;
  61   1       mRetADLo|=mTemp<<6;
  62   1       D_CLOCK=0;
  63   1       D_IN=0;
  64   1       D_CLOCK=1;
  65   1       mTemp=(uchar)D_OUT;
  66   1       mRetADLo|=mTemp<<5;
  67   1       D_CLOCK=0;  //高位在前输出
  68   1       D_IN=0;
  69   1       D_CLOCK=1;
  70   1       mTemp=(uchar)D_OUT;
  71   1       mRetADLo|=mTemp<<4;
  72   1       D_CLOCK=0;  //单极性输出
  73   1       //参数设定结束
  74   1       D_CLOCK=1;   //填充4个任意位
  75   1       mTemp=(uchar)D_OUT;
  76   1       mRetADLo|=mTemp<<3;
  77   1       D_CLOCK=0;
  78   1       D_CLOCK=1;
  79   1       mTemp=(uchar)D_OUT;
  80   1       mRetADLo|=mTemp<<2;
  81   1       D_CLOCK=0;
  82   1       D_CLOCK=1;
  83   1       mTemp=(uchar)D_OUT;
  84   1       mRetADLo|=mTemp<<1;
  85   1       D_CLOCK=0;
  86   1       D_CLOCK=1;
  87   1       mTemp=(uchar)D_OUT;
  88   1       mRetADLo|=mTemp;
  89   1       D_CLOCK=0;
  90   1       D_CS=1;
  91   1       return (uint)(mRetADHi*256+mRetADLo);
  92   1      }
  93          /*****************************************/
  94          uint GetMidAd(uchar port )
  95          {
  96   1              uint    FirstAd;
  97   1              uint    SecondAd;
  98   1              uint    ThirdAd;
  99   1              uint    Temp;
 100   1              Read2543(port);
 101   1              FirstAd=Read2543(port);
 102   1              Delay(20);
 103   1              SecondAd=Read2543(port);
 104   1              Delay(20);
 105   1              ThirdAd=Read2543(port);
 106   1              //由小到大排列
 107   1              if(FirstAd>=SecondAd)
 108   1              {
 109   2                      Temp=FirstAd;
 110   2                      FirstAd=SecondAd;
 111   2                      SecondAd=Temp;          
 112   2              }
 113   1              if(SecondAd>=ThirdAd)
 114   1              {
 115   2                      Temp=SecondAd;
 116   2                      SecondAd=ThirdAd;
 117   2                      ThirdAd=Temp;
C51 COMPILER V7.50   MAIN                                                                  11/23/2007 13:53:49 PAGE 3   

 118   2              }
 119   1              if(FirstAd>=SecondAd)
 120   1              {
 121   2                      Temp=FirstAd;
 122   2                      FirstAd=SecondAd;
 123   2                      SecondAd=Temp;          
 124   2              }
 125   1              //得到中值。
 126   1              return(SecondAd);
 127   1      }
 128          //*****************************************************************
 129          //移动平均
 130          void AdMoveAverage(uchar Port)
 131          {
 132   1              uint  TempAd;
 133   1              uchar i;
 134   1              TempAd=GetMidAd(Port);
 135   1              for(i=AdLenth;i>0;i--)
 136   1              {
 137   2                      AdBuff[i]=AdBuff[i-1];
 138   2              }
 139   1              AdBuff[0]=TempAd;
 140   1      }
 141          //****************************************************************
 142          uint AdAverage(void)
 143          {
 144   1              uchar i;
 145   1              uint  AdValue;
 146   1              unsigned long  Sum=0;                                                           
 147   1              for(i=0;i<AdLenth;i++)
 148   1              {
 149   2                      Sum+=AdBuff[i];
 150   2              }
 151   1              AdValue=Sum/AdLenth;                                                            
 152   1              return(AdValue);
 153   1      }
 154          //****************************************************************
 155          void Delay(uint i)
 156          {
 157   1              while(i--);
 158   1      }
 159          //****************************************************************
 160          void main(void)
 161          {
 162   1              uchar aa;
 163   1              while(1)
 164   1              {
 165   2              //      uint AdValue;
 166   2              //      AdMoveAverage(0);
 167   2              //      AdValue=AdAverage();
 168   2              aa=GetMidAd(0);
 169   2              }
 170   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    448    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      12
   IDATA SIZE       =   ----    ----
C51 COMPILER V7.50   MAIN                                                                  11/23/2007 13:53:49 PAGE 4   

   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 + -