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

📄 ad7705_va.lst

📁 AD7705的驱动程序,二通道,可用于检测小电压变化的传感器
💻 LST
字号:
C51 COMPILER V7.50   AD7705_VA                                                             04/26/2007 11:38:56 PAGE 1   


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

line level    source

   1          #include "mylib.h"
   2          
   3          unsigned char ad7705timer;
   4          
   5          unsigned int READ7705(void);
   6          void WRITE7705(unsigned char n);
   7          void INI7705(void);
   8          bit START_CH1(void);
   9          unsigned int READ_CH1(void);
  10          bit START_CH2(void);
  11          unsigned int READ_CH2(void);
  12          bit ERR7705(void);
  13          
  14          unsigned int READ7705(void)
  15               {
  16   1           char i,j;
  17   1           unsigned int ctemp=0;
  18   1           CS_7705=0;
  19   1           DOUT_7705=1;
  20   1           for(i=0;i<16;i++)
  21   1               {
  22   2                  SCLK_7705=0;
  23   2                  ctemp=ctemp<<1;
  24   2                  for(j=0;j<20;j++) 
  25   2                        __nop_();
  26   2                  SCLK_7705=1;
  27   2              for(j=0;j<20;j++) 
  28   2                        __nop_();
  29   2              if(DOUT_7705)
  30   2              {
  31   3                ctemp++;
  32   3              }
  33   2               }
  34   1           CS_7705=1;
  35   1           return(ctemp);
  36   1      }
  37          
  38          void WRITE7705(unsigned char n)
  39               {
  40   1           char i,j;
  41   1           CS_7705=0;
  42   1           for(i=0;i<8;i++)
  43   1               {
  44   2              DIN_7705=(n & 0x80);
  45   2              for(j=0;j<20;j++)
  46   2                     __nop_();
  47   2              SCLK_7705=0;
  48   2                 __nop_();
  49   2                 __nop_();
  50   2              for(j=0;j<20;j++) 
  51   2                         __nop_();
  52   2                  SCLK_7705=1;
  53   2                  n=(n<<1);
  54   2              for(j=0;j<20;j++) 
  55   2                         __nop_();
C51 COMPILER V7.50   AD7705_VA                                                             04/26/2007 11:38:56 PAGE 2   

  56   2           }
  57   1           CS_7705=1;
  58   1      }
  59          
  60          void INI7705(void)
  61               {
  62   1           WRITE7705(0xff);
  63   1           WRITE7705(0xff);
  64   1           WRITE7705(0xff);
  65   1           WRITE7705(0xff);
  66   1           WRITE7705(0xff);
  67   1           }
  68          /*
  69                 AD7705寄存器
  70          1:通信寄存器
  71             DRDY  RS2  RS1  RS0  R/W   STBY   CH1  CH0
  72          DRDY:写操作时此位为0。
  73          RS2、RS1、RS0:选择寄存器。000:通信寄存器; 001:设置寄存器; 010:时钟寄存器。
  74          R/W:0写操作;  1读操作.
  75          STBY:等待模式。0正常工作模式.
  76          CH1 CH0:通道选择。
  77          
  78          2:设置寄存器
  79             MD1  MD0  G2 G1 G0 B/U BUF FSYNC
  80          MD1 MD0:校准模式选择。00正常模式; 01自校准模式; 10 零刻度校准模式; 11全刻度校准模式.
  81          G2 G1 G0:增益选择位。
  82          B/U:单极性与双极性选择。0双极,1单极。
  83          BUF:缓冲。1缓冲,0无缓冲。
  84          FSYNC:同步过滤器。
  85          
  86          3:时钟寄存器
  87             ZER0  ZER0  ZER0  CLKDIS  CLKDIV  CLK  FS1  FS0
  88          ZER0:0必须写进该位,才能保证7705的运转正确。
  89          CLKDIS:主时钟禁止位。"1"禁止MCLKOUT脚输出。
  90          CLKDIV:时钟分频位。"1"主时钟二频; "0"不分频。
  91          CLK:时钟位。2.4576M/4.9152M时对应CLK=1;1M/2M时对应CLK=0.
  92          FS0 FS1:数据刷新选择位。应与CLK结合来决定数据刷新速度。
  93          */
  94          
  95          bit START_CH1(void)
  96               {
  97   1           bit temp=0;
  98   1           INI7705();
  99   1           WRITE7705(0x20);//00100000 选择时钟寄存器,第1通道。
 100   1           WRITE7705(0x06);//00000110 数据刷新速度为250Hz,主时钟不分频,晶振为2.4576M.  
 101   1           WRITE7705(0x10);//00010000 选择设置寄存器,第1通道。
 102   1           WRITE7705(0x40);//01000000 自校准模式,增益为1,双极性   
 103   1           ad7705timer=0;
 104   1           while(ad7705timer<50)
 105   1               {
 106   2               if(DRDY_7705)
 107   2                 {
 108   3                 temp=1;
 109   3                 ad7705timer=51;
 110   3                 }
 111   2               }
 112   1           if(!temp) 
 113   1                   return(0);
 114   1           ad7705timer=0;
 115   1           while(ad7705timer<50)
 116   1               {
 117   2               if(!DRDY_7705)
C51 COMPILER V7.50   AD7705_VA                                                             04/26/2007 11:38:56 PAGE 3   

 118   2                 {
 119   3                 return(1);
 120   3                 }
 121   2               }
 122   1           return(0);
 123   1           }
 124          
 125          unsigned int READ_CH1(void)
 126               {
 127   1           idata unsigned int y;
 128   1           START_CH1();
 129   1           ad7705timer=0;
 130   1           while(ad7705timer<50)
 131   1               {
 132   2               if(DRDY_7705)
 133   2                 {
 134   3                 ad7705timer=51;
 135   3                 }
 136   2               }
 137   1           ad7705timer=0;
 138   1           while(ad7705timer<50)
 139   1               {
 140   2               if(!DRDY_7705)
 141   2                 {
 142   3                 ad7705timer=51;
 143   3                 }
 144   2               }
 145   1           WRITE7705(0x38);//00111000选择数据寄存器,读第一通道.
 146   1           y=READ7705();
 147   1           return y;
 148   1            }
 149          
 150           bit START_CH2(void)
 151               {
 152   1           bit temp=0;
 153   1           INI7705();
 154   1           WRITE7705(0x21);
 155   1           WRITE7705(0x0a);      
 156   1           WRITE7705(0x11);
 157   1           WRITE7705(0x44);
 158   1      
 159   1           ad7705timer=0;
 160   1           while(ad7705timer<50)
 161   1               {
 162   2               if(DRDY_7705)
 163   2                 {
 164   3                 temp=1;
 165   3                 ad7705timer=51;
 166   3                 }
 167   2               }
 168   1           if(!temp) return(0);
 169   1      
 170   1           ad7705timer=0;
 171   1           while(ad7705timer<50)
 172   1               {
 173   2               if(!DRDY_7705)
 174   2                 {
 175   3                 return(1);
 176   3                 }
 177   2               }
 178   1           return(0);
 179   1           }
C51 COMPILER V7.50   AD7705_VA                                                             04/26/2007 11:38:56 PAGE 4   

 180          
 181          
 182          unsigned int READ_CH2(void)
 183               {
 184   1           idata unsigned int y;
 185   1           START_CH2();
 186   1           ad7705timer=0;
 187   1           while(ad7705timer<50)
 188   1               {
 189   2                 if(DRDY_7705)
 190   2                 {
 191   3                    ad7705timer=51;
 192   3                 }
 193   2               }
 194   1           ad7705timer=0;
 195   1           while(ad7705timer<50)
 196   1               {
 197   2                 if(!DRDY_7705)
 198   2                 {
 199   3                    ad7705timer=51;
 200   3                 }
 201   2               }
 202   1           WRITE7705(0x39); //选择数据寄存器
 203   1           y=READ7705();
 204   1          return y;
 205   1           }
 206          /*
 207          STC看门狗介绍WDT_CONTR:
 208              --  --  EN_WDT CLR_WDT IDLE_WDT  PS2 PS1 PS0
 209          EN_WDT:看门狗允许位,设置为1时看门狗启动。
 210          CLR_WDT:看门狗清0位,设置为1时看门狗重新计数,硬件将自动清0此位
 211          IDLE_WDT:当设置为1时看门狗定时器在空闲模式下计数;
 212                    当设置为0时看门狗定时器在空闲模式下不计数.
 213          PS2 PS1 PS0:看门狗定时器分频值。
 214          
 215          */
 216          
 217          bit ERR7705(void)       //
 218          {    unsigned int n;
 219   1      //     WDT_CONTR=0x3c;
 220   1           INI7705();
 221   1           WRITE7705(0x20);
 222   1           WRITE7705(0x0a);           //SH1
 223   1           WRITE7705(0x10);
 224   1           WRITE7705(0x44);    
 225   1           n=0;
 226   1           while(DRDY_7705)
 227   1               {
 228   2                  WDT_CONTR=0x3c; 
 229   2                      n++;
 230   2                      if(n>0xfff)
 231   2                      {
 232   3                         return 1;
 233   3                      }
 234   2               }
 235   1           n=0;
 236   1           while(!DRDY_7705)
 237   1               {
 238   2                  WDT_CONTR=0x3c;
 239   2                  n++;
 240   2                      if(n>0xfff)
 241   2                      {
C51 COMPILER V7.50   AD7705_VA                                                             04/26/2007 11:38:56 PAGE 5   

 242   3                         return 1;
 243   3                      }
 244   2               }
 245   1      
 246   1           INI7705();
 247   1           WRITE7705(0x21);
 248   1           WRITE7705(0x0a);           //SH2
 249   1           WRITE7705(0x11);
 250   1           WRITE7705(0x44);    
 251   1           n=0;
 252   1           while(DRDY_7705)
 253   1               {
 254   2                  WDT_CONTR=0x3c;
 255   2                  n++;
 256   2                      if(n>0xfff)
 257   2                        return 1;
 258   2                }//00111100
 259   1           n=0;
 260   1           while(!DRDY_7705)
 261   1               {
 262   2                   WDT_CONTR=0x3c; 
 263   2                       n++;
 264   2                       if(n>0xfff)
 265   2                       return 1;
 266   2               }
 267   1           return 0;
 268   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    484    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1    ----
   IDATA SIZE       =   ----       4
   BIT SIZE         =   ----       2
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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