51的AD转换电路,要好使的

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/10 06:58:48

51的AD转换电路,要好使的
51的AD转换电路,要好使的

51的AD转换电路,要好使的

可以用ADC0832,函数程序

//

//读取ADC0832转换值函数

//入口函数:channel选择通道

uchar ADC0832_Read(uchar channel)

{

 uchar i = 0; 

 uchar tmp = 0; //高字节数据

 uchar tmp1 = 0; //低字节数据

 

 //开始标志位

 ADC0832_DODI = 1;

 _nop_();  _nop_();

 ADC0832_CS = 0;  //片选信号 

 ADC0832_CLK = 1;

 _nop_();  _nop_();

 ADC0832_CLK = 0;

 _nop_();  _nop_();

 //选择通道

 switch(channel)

 {

  case 0:  //通道0

   ADC0832_DODI = 1; //SGL = 1;

   _nop_();  _nop_();

   ADC0832_CLK = 1;

   _nop_();  _nop_();

   ADC0832_CLK = 0;

   _nop_();  _nop_();

   ADC0832_DODI = 0; //ODD = 0;

   _nop_();  _nop_();

    ADC0832_CLK = 1;

    _nop_();  _nop_();

   ADC0832_CLK = 0;

   _nop_();  _nop_();

   break;

  case 1:  //通道1

   ADC0832_DODI = 1; //SGL = 1;

   _nop_();  _nop_();

   ADC0832_CLK = 1;

   _nop_();  _nop_();

   ADC0832_CLK = 0;

   _nop_();  _nop_();

   ADC0832_DODI = 0; //ODD = 1;

   _nop_();  _nop_();

    ADC0832_CLK = 1;

    _nop_();  _nop_();

   ADC0832_CLK = 0;

   _nop_();  _nop_();

   break;

   

  default:

   break;  

 }

 ADC0832_DODI = 1;

 _nop_();  _nop_();

 //读取8位转换数值

 for(i=0;i<8;i++)

 {

  ADC0832_CLK = 1;    //产生同步时钟

  _nop_();  _nop_();

  ADC0832_CLK = 0;

  _nop_();  _nop_();

  if(ADC0832_DODI)   //按位获取8位数据

  {

   tmp |= 0x01;   //从低位获取

  }

  else

  {

   tmp &= 0xfe;

  }

  if(i<7)

  {

   tmp <<= 1;    //移位

  }     

 }

 tmp1 =  tmp & 0x01;

 tmp1 <<= 6;

 for(i=0;i<7;i++)    //获取7位校验数据

 {

  ADC0832_CLK = 1;

  _nop_();  _nop_();

  ADC0832_CLK = 0;

  _nop_();  _nop_();

  if(ADC0832_DODI)

  {

   tmp1 |= 0x80;

  }

  else

  {

   tmp1 &= 0x7f;

  }

  if(i<6)

  {

   tmp1 >>= 1;

  }  

 }

 ADC0832_CS = 1;  //禁止ADC0832

 if(tmp == tmp1) //当高字节与低字节相同时,该值有效

 {

  return tmp; //返回数值

 }

}