已回答假定已回答

各位工程师,请帮我看看AD7888怎么通道1怎么老是没有数据

dengjiaxin 在 2015-5-25 詢問的問題
最後回覆由hpkamen於2015-5-27提供

各位工程师,我在做AD7888实验时使用的是单片机控制AD7888的转换。端口定义在P0.0-P0.3。Measure函数就是AD7888的输入和输出函数,函数简单。Main函数就是把转换出来的值给发出来。很简单的测试程序就是出不来。请各位工程师帮忙看下。

附上程序:

#include<reg51.h>                   

#include<intrins.h>

#define uint unsigned int

#define uchar unsigned char

sbit SCLK=P0^0;

sbit DOUT=P0^1;

sbit DIN=P0^2;

sbit CS=P0^3;

uint getdata=0x0000;

uchar buf[2];

void delay(uint z) 

{

  uint i,j;

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

  for(j = 0; j < 110; j++) ;

}

void measure()            

{

      uchar i,j;

      uint ADDR=0x0400;  //工作模式

      CS=0;

     SCLK=1;

      for(i=0;i<8;i++)        //前8位   

      {

 

          SCLK=0;     

           _nop_();_nop_();

 

 

 

          if(ADDR&0x8000)  

          DIN=1;

           else    DIN=0;

 

           ADDR<<=1;

 

            SCLK=1;

            _nop_();_nop_();

 

 

         if(DOUT)

        getdata=getdata|0x0001;

 

         getdata<<=1;

 

 

       }

      for(i=0;i<8;i++)       //后八位    

      {

          SCLK=0;     

           _nop_();_nop_();

 

 

        SCLK=1;

        _nop_();_nop_();

 

 

        if(DOUT)

        getdata=getdata|0x0001;

 

        getdata<<=1;

       }

 

 

       CS=1; 

  

}

void main()

{

  uchar i;

  CS=1;

  TMOD=0X20;

  TL1=0XFD;

  TH1=0XFD;

  SCON=0X50;

  PCON=0X00;

  TR1=1;

  ES=1;//

  EA=1;

  while(1)

  {              

  ES=0;

  measure();

  buf[1]=getdata;

  buf[0]=getdata>>8;

 

  for(i=0;i<2;i++)//发出来到电脑上显示

  {

  SBUF=buf[i];

  while(TI==0);

  TI=0;

  delay(1000);

  }

  ES=1;

 

 

  }

}    

 

結果