[STC单片机] 关于PCF8591 AD转换的问题

[复制链接]
1662|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

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