[资料分享] ADS7841驱动-51单片机

[复制链接]
 楼主| xyz549040622 发表于 2019-12-26 16:16 | 显示全部楼层 |阅读模式
  1. /******************************************************************************
  2. *
  3. ** 函数原型:unsigned int ADS7841_Read_Data(unsigned char Channel);
  4. ** 功    能:SPI总线的A/D ADS7841 驱动程序
  5. ** 入口参数:unsigned char Channel   表示选择读取通道
  6. ** 出口参数:unsigned int   返回所读取得12位数据。
  7. ** 说    明:ADS7841为12位A/D,先对其进行设置:数据位D0---D7,其中D0---D1是
  8. **           设置ADC的功耗模式,D2是模拟输入通道设置,H为4个单通道,L为两个
  9. **           差分输入,D3为mode,当mode(pin)接地时为12位采样方式,接高电平时
  10. **           mode为1时8位采集,为0时12位采集,D4---D6为输入通道选择,D7为起始位
  11. ** 作   者: 绝鱼 nobody_008@163.com
  12. ** 日   期: 2006年11月11日
  13. **-----------------------------------------------------------------------------
  14. --------------------------
  15. ** 修 改 人: 绝鱼 nobody_008@163.com
  16. ** 日   期: 2006年11月06日
  17. *******************************************************************************
  18. /
  19. unsigned int ADS7841_Read_Data(unsigned char
  20. Channel)          //Channel=0:CH0;1:CH1;2:CH2;3:CH3;
  21. {
  22.         unsigned int ADCResult=0;
  23.         unsigned char DataInput=0;
  24.         unsigned char i,ADS7841_CHANNEL;
  25.         
  26.     switch (Channel)
  27.     {
  28.         case 0:ADS7841_CHANNEL=0x10;break;
  29.         case 1:ADS7841_CHANNEL=0x50;break;
  30.         case 2:ADS7841_CHANNEL=0x20;break;
  31.         case 3:ADS7841_CHANNEL=0x60;break;
  32.         default:ADS7841_CHANNEL=0x10;break;        
  33.     }
  34.     DataInput=ADS7841_S|ADS7841_CHANNEL|ADS7841_MODE|ADS7841_SGL_DIF|ADS7
  35. 841_POWER_DOWN;

  36.         DCLK=0;
  37.         DIN=0;
  38.         CS=VALID;
  39.         for(i=0; i<8; i++)
  40.         {
  41.           DIN=DataInput&0x80;
  42.           DataInput=DataInput<<1;
  43.           DCLK=0;
  44.           NOP;
  45.           DCLK=1;                       //模拟SPI串行接口 发送数据
  46.         }
  47.    NOP;
  48.    DCLK=0;
  49.               while(BUSY)
  50.               {
  51.    NOP;
  52.    DCLK=1;
  53.    NOP;
  54.    DCLK=0;
  55.              }  /*当BUSY脚由高变为低时,则开始数据输出*/
  56.               NOP;
  57.   for(i=0;i<12;i++)
  58.   {
  59.    DCLK=1;
  60.   ADCResult=(ADCResult<<1)|DOUT;    //模拟SPI串行接口 接收数据
  61.      DCLK=0;
  62.      NOP;
  63.    }
  64.    for(i=0;i<4;i++)
  65.   {
  66.    DCLK=1;
  67.    NOP;
  68.    DCLK=0;
  69.    NOP;
  70.   }
  71.         CS=INVALID;
  72.         return ADCResult;
  73. }


 楼主| xyz549040622 发表于 2019-12-26 16:17 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:qq群: 嵌入式系统arm初学者 224636155←← +→→点击-->小 i 精品课全集,21ic公开课~~←←→→点击-->小 i 精品课全集,给你全方位的技能策划~~←←

2841

主题

19330

帖子

110

粉丝
快速回复 在线客服 返回列表 返回顶部
个人签名:qq群: 嵌入式系统arm初学者 224636155←← +→→点击-->小 i 精品课全集,21ic公开课~~←←→→点击-->小 i 精品课全集,给你全方位的技能策划~~←←

2841

主题

19330

帖子

110

粉丝
快速回复 在线客服 返回列表 返回顶部