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

📄 mcp3004.lst

📁 ADC3004采样程序
💻 LST
字号:
C51 COMPILER V7.01  MCP3004                                                                08/31/2007 09:13:57 PAGE 1   


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

stmt level    source

   1          #include <reg51.h>
   2          #include <intrins.h>
   3          
   4          #define uchar unsigned char
   5          #define uint  unsigned int
   6          
   7          void long_delay(void);                    //长延时
   8          void short_delay(void);                   //短延时
   9          void delay500ms(void);           //延时10ms
  10          void write7279(uchar cmd,uchar dta);             //写入7279
  11          uchar read7279(uchar command);                   //读Hb7279
  12          void send_byte(uchar out_byte);                   //发送一字节
  13          uchar receive_byte(void);               //接收一字节
  14          
  15          sbit    cs =P1^1;
  16          sbit    clk=P1^2;
  17          sbit    dat=P1^3;
  18          sbit    key=P3^4;
  19          bit     key_flag;                          //按键标志
  20          
  21          sbit pAD_SCS    = P1^7;                         //MCP3004
  22          sbit pAD_SCK    = P1^4;
  23          sbit pAD_SDI    = P1^6;
  24          sbit pAD_SDo    = P1^5;
  25          
  26          
  27          #define  CMD_RESET 0xa4                    //复位
  28          #define  DECODE1 0xc8                      //方式1译码指令
  29          #define  CMD_READ 0x15                     //读键盘指令
  30          #define  UNDECODE 0x90                         // 不译码指令
  31          #define  ACTCTL  0X98          //消隐控制命令
  32          
  33          uchar key_number,i;
  34          uint  tmr;
  35          uchar code www[8]={0xBF,0XDF,0XEF,0XF7,0XFB,0XFD,0XFE,0X7F};
  36          
  37          
  38          
  39          #define  uchar  unsigned char
  40          #define  uint   unsigned int
  41          //unsigned char AD7416_SystemError;
  42          //unsigned int Temperature; //温度
  43          
  44          
  45          sbit  ADC_CLOCK =P1^4;  //   启动一次转换,并在转换进行时对转换的每一位进行时钟输出
  46          sbit  ADC_IN    =P1^6;     //  将通道配置数据装入器件
  47          sbit  ADC_OUT   =P1^5;  //    将ADC转换的结果输出,在转换进行时,数据将总是在每个时钟的下降沿变化
  48          sbit  ADC_CS    =P1^7;  //为低启动器件,为高终止器件。在转换与转换之间引脚必须拉高。
  49          
  50          uint data ADC_data[4]={600,700,800,900};    //假设4个通道的报警点
  51          uint read3004(uchar port);
  52          void Delay(uchar k);
  53          uint Read3004(uchar ChNum);
  54          /**     
  55          用采样点电阻分压值计算需要的报警点ADC值于读取采样值比较
C51 COMPILER V7.01  MCP3004                                                                08/31/2007 09:13:57 PAGE 2   

  56          **/
  57          void main(void)
  58          {
  59   1      uchar i;
  60   1      uint  j;
  61   1      delay500ms();
  62   1      while(1)
  63   1      {
  64   2      for(i=0;i<4;i++)
  65   2      {
  66   3          j=Read3004(i);
  67   3          write7279(DECODE1+3,j/1000);                //将编辑的数据发送出去
  68   3              write7279(DECODE1+2,j%1000/100);
  69   3              write7279(DECODE1+1,j%1000%100/10);
  70   3              write7279(DECODE1+0,j%1000%100%10);
  71   3        j=0;
  72   3        delay500ms();
  73   3      delay500ms();
  74   3      delay500ms();
  75   3      delay500ms();
  76   3      }
  77   2      }
  78   1      }
  79          
  80          void write7279(uchar cmd,uchar dta)
  81           {
  82   1         send_byte  (cmd);
  83   1         send_byte  (dta);
  84   1        }
  85          
  86          unsigned char read7279(uchar command)
  87           {
  88   1         send_byte (command);
  89   1         return(receive_byte());
  90   1        }
  91          
  92          void send_byte( uchar out_byte)
  93           {
  94   1        uchar j;
  95   1        cs=0;
  96   1        long_delay();
  97   1        for (j=0;j<8;j++)
  98   1         {
  99   2           if (out_byte&0X80)
 100   2                 {
 101   3                   dat=1;
 102   3                 }
 103   2                 else
 104   2                 {
 105   3                   dat=0;
 106   3                      }
 107   2                      clk=1;
 108   2                      short_delay();
 109   2                      clk=0;
 110   2                      short_delay();
 111   2                      out_byte=out_byte*2;
 112   2                      }
 113   1                      dat=0;
 114   1               }
 115          
 116          uchar receive_byte(void)
 117           {
C51 COMPILER V7.01  MCP3004                                                                08/31/2007 09:13:57 PAGE 3   

 118   1        uchar j,in_byte;
 119   1        dat=1;
 120   1        long_delay();
 121   1        for(j=0;j<8;j++)
 122   1         {
 123   2          clk=1;
 124   2              short_delay();
 125   2              in_byte=in_byte*2;
 126   2              if(dat)
 127   2              {
 128   3               in_byte=in_byte|0x01;
 129   3               }
 130   2              clk=0;
 131   2              short_delay();
 132   2         }
 133   1          dat=1;
 134   1              return(in_byte);
 135   1        }
 136          
 137          void long_delay(void)
 138           {
 139   1         uchar j;
 140   1         for(j=0;j<0x30;j++);
 141   1         }
 142          
 143          void short_delay(void)
 144           {
 145   1         uchar j;
 146   1         for(j=0;j<8;j++);
 147   1         }
 148          
 149          void delay500ms(void)
 150           {
 151   1         uchar j,k,t;
 152   1         for(j=15;j>0;j--)
 153   1          for(k=202;k>0;k--)    
 154   1            for(t=81;t>0;t--);
 155   1         }
 156          
 157          
 158          //CS拉高再拉低启动器件
 159          uint read3004(uchar port) //从3004读取采样值,形参port是采样的通道号
 160          {
 161   1      uint  data ad=0;
 162   1      uchar data i;
 163   1      //uchar data al=0,ah=0;
 164   1      if(port>3)        //3004 为4通道10位ADC
 165   1      {
 166   2       port=3;
 167   2      }
 168   1      ADC_CS=0;
 169   1      ADC_CLOCK=0;  Delay(3);//Start
 170   1      ADC_IN=1;
 171   1      ADC_CLOCK=1;  Delay(3); 
 172   1      ADC_CLOCK=0;  Delay(3);
 173   1      ADC_IN=1;    //决定采用单端还是差分输入模式
 174   1      ADC_CLOCK=1;    Delay(3);   
 175   1      
 176   1      port<<=5;
 177   1      for (i=0;i<3;i++) //把通道号打入3004,D1和D0译码通道号
 178   1      {
 179   2      ADC_CLOCK=0; Delay(3);
C51 COMPILER V7.01  MCP3004                                                                08/31/2007 09:13:57 PAGE 4   

 180   2      ADC_IN=(bit)(port&0x80);
 181   2      ADC_CLOCK=1; Delay(3);
 182   2      port<<=1;
 183   2      }
 184   1      
 185   1      
 186   1      ADC_CLOCK=0;   Delay(3);//采样与保持周期
 187   1      ADC_CLOCK=1;   Delay(3);     //输出一个低空位
 188   1      ADC_CLOCK=0;   Delay(3);
 189   1      ADC_CLOCK=1;   Delay(3);
 190   1      for (i=0;i<10;i++) //ADC转换取B9,B8,
 191   1      {
 192   2      ADC_CLOCK=0; Delay(3);
 193   2      if (ADC_OUT) 
 194   2      {
 195   3       ad|=0x0001;
 196   3      }
 197   2      ADC_CLOCK=1; Delay(3);
 198   2      if(i<9)
 199   2      ad<<=1;
 200   2      } 
 201   1      ADC_CLOCK=0; Delay(3);
 202   1      ADC_CLOCK=1; Delay(3);
 203   1      ADC_CLOCK=0; Delay(3);
 204   1      ADC_CS=1;
 205   1      return (ad);
 206   1      }
 207          /*
 208          for (i=0;i<8;i++) //取B7---B0位
 209          {
 210          
 211          ADC_CLOCK=0; Delay(3);
 212          if (ADC_OUT) 
 213          {
 214           al|=0x01;
 215          }
 216          
 217          ADC_CLOCK=1; Delay(3);
 218          al<<=1;
 219          }
 220          ADC_CLOCK=0; Delay(3);
 221          ADC_CS=1;
 222          ad=(uint)ah;
 223          ad<<=8;
 224          ad|=al;     //得到ADC值
 225          return (ad);
 226          }
 227          */
 228          void Delay(uchar k)             //延时
 229          {
 230   1              uchar i;
 231   1              for(i=0;i<k;i++);
 232   1      }
 233          /*
 234          uint Read3004(uchar ChNum)
 235          {
 236                  uchar i; uint ADResult=0;
 237          
 238                  pAD_SCS=0;
 239                  for(i=0; i<5; i++)
 240                  {
 241                          pAD_SCK=0;
C51 COMPILER V7.01  MCP3004                                                                08/31/2007 09:13:57 PAGE 5   

 242                          if((ChNum<<i)&0x80)
 243                                  pAD_SDI=1;
 244                          else
 245                                  pAD_SDI=0;
 246                          Delay(4); pAD_SCK=1;
 247                          Delay(4);
 248                  }
 249          
 250                  pAD_SCK=0; Delay(4);
 251                  pAD_SCK=1; Delay(4);
 252                  pAD_SCK=0; Delay(4);
 253                  pAD_SCK=1; Delay(4);
 254           
 255                  for(i=0; i<10; i++)                                             //10位分辩率
 256                  {
 257                          pAD_SCK=0; Delay(4);
 258                          if(pAD_SDo)
 259                                  ADResult=(ADResult<<1)|0x0001;
 260                          else
 261                                  ADResult=(ADResult<<1)&0x03fe;
 262                          pAD_SCK=1; Delay(4);
 263                  }
 264                  pAD_SCK=0; Delay(4);
 265                  pAD_SCK=1; Delay(4);
 266                  pAD_SCK=0; pAD_SCS=1;
 267                  return(ADResult);
 268          }
 269          */


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    500    ----
   CONSTANT SIZE    =      8    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     12      12
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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