打印
[STC单片机]

关于PCF8591 AD转换的问题

[复制链接]
1063|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wupin12345|  楼主 | 2016-9-24 14:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 wupin12345 于 2016-9-24 14:05 编辑

/*------------------------------------------------
             读AD转值程序
输入参数 Chl 表示需要转换的通道,范围从0-3
返回值范围0-255
------------------------------------------------*/
unsigned char ReadADC(unsigned char Chl)
{
   unsigned char Val;
   Start_I2c();               //启动总线
   SendByte(AddWr);             //发送器件地址 0x90
     if(ack==0)return(0);
   SendByte(0x40|Chl);            //发送器件子地址 Chl 是0
     if(ack==0)return(0);     
    //红色部分能不能直接去掉,直接读取0x91不行吗?
   Start_I2c();
   SendByte(AddWr+1);            
      if(ack==0)return(0);
   Val=RcvByte();
   NoAck_I2c();                 //发送非应位
   Stop_I2c();                  //结束总线
  return(Val);
}
/*------------------------------------------------

下面这段读值程序有没有问题


/*----------------------------------------------------------------
                 字节数据传送函数               
函数原型: unsigned char  RcvByte();
功能:  用来接收从器件传来的数据,并判断总线错误(不发应答信号),
     发完后请用应答函数。  
------------------------------------------------------------------*/        
unsigned char  RcvByte()
{
  unsigned char retc;
  unsigned char BitCnt;
  
  retc=0;
  SDA=1;             //置数据线为输入方式
  for(BitCnt=0;BitCnt<8;BitCnt++)
      {
        _Nop();           
        SCL=0;       //置时钟线为低,准备接收数据位
        _Nop();
        _Nop();      //时钟低电平周期大于4.7us
        _Nop();
        _Nop();
        _Nop();
        SCL=1;       //置时钟线为高使数据线上数据有效
        _Nop();
        _Nop();
        retc=retc<<1;
        if(SDA==1)retc=retc+1; //读数据位,接收的数据位放入retc中
        _Nop();
        _Nop();
      }
  SCL=0;   
  _Nop();
  _Nop();
  return(retc);
}

相关帖子

沙发
ningling_21| | 2016-9-24 18:11 | 只看该作者
不能去掉

使用特权

评论回复
板凳
wupin12345|  楼主 | 2016-9-24 18:58 | 只看该作者
能解释一下吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

8

帖子

0

粉丝