硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2421|回复: 2
收起左侧

买的模块采用51单片机运行AD7606数据全部为0

[复制链接]

1

主题

1

回帖

4

积分

新手上路

积分
4
发表于 2019-6-21 17:30:44 | 显示全部楼层 |阅读模式
   #include <reg52.h>
   #include <string.h>
   #include <intrins.h>
   #define uchar unsigned char
   #define uint unsigned int
  #define ulong unsigned long
   #define DELAY_TIME 50
  sbit OS0=P1^1;
  sbit OS1=P1^2;
  sbit OS2=P1^3;
  sbit AD_DoutA=P1^4;  //DB7,串行模式用到,输出数据Dout A
   sbit AD_DoutB=P1^5;  //DB8,串行模式用到,输出数据Dout B
  sbit RD_SCK=P1^6;
  sbit ADC_CS=P1^7;

sbit RANGE=P2^0;
  sbit ADC_RST=P2^1;
  sbit ConvstA=P2^2;
  sbit ConvstB=P2^3;


  
  sbit Busy=P3^2;


   
  int i;

uint DoutA[4];
uint DoutB[4];

/* AD数据采集缓冲区 */

/* 供外部调用的函数声明 */
void ad7606_Reset(void);
void ad7606_StartConv(void);
void AD7606C(uchar acch);
void DELAY(uint t);
   void init_serialcomm(void) ;
  
  void AD7606_init();
   void DELAY(uint t) /*延时函数*/
    {
        while(t!=0)
            t--;
    }
  /*
*********************************************************************************************************
* 函 数 名: ad7606_Reset
* 功能说明: 硬件复位AD7606
* 形    参:无
* 返 回 值: 无
*********************************************************************************************************
*/
/*
*****************************************************************************
*        函 数 名: ad7606_Reset
*        功能说明: 硬件复位AD7606
*        形    参:无
*        返 回 值: 无
*****************************************************************************
*/
void ad7606_Reset(void)
{
         /* AD7606是高电平复位,要求最小脉宽50ns */
         
        ADC_RST=0;
         
        ADC_RST=1;
         ADC_RST=1;
         ADC_RST=1;
         ADC_RST=1;
  DELAY(2000);
      //   Delay1ms(1);
         ADC_RST=0;
}
/*
*********************************************************************************************************
*        函 数 名: ad7606_StartConv
*        功能说明: 启动AD7606的ADC转换
*        形    参:无
*        返 回 值: 无
*********************************************************************************************************
*/
void ad7606_StartConv(void)
{
         /* 上升沿开始转换,低电平持续时间至少25ns  */
         ConvstA=0;
   ConvstB=0;
         ConvstA=0;
ConvstB=0;
         ConvstA=0;        /* 连续执行2次,低电平约50ns */
   ConvstB=0;
         DELAY(20);
// Delayus(10);
         ConvstA=1;
  DELAY(20);
   ConvstB=1;
   DELAY(200);
   DELAY(200);
        // Delayus(100);
        // Delayus(100);
  }
//******************************************************************************//
void AD7606_init()
{
       //  Delay1ms(1);
DELAY(2000);
        ad7606_Reset();
        OS2=0;OS1=0;OS0=0;  //设定过采样
         ADC_CS=1;
         RD_SCK=1;
         ConvstA=1;
  ConvstB=1;
         RANGE=0; //选择+/- 5V 输入         
       //  HBEN=0;   //DB14,选择输出:1=先输出高8位,后输出低8位
}

//***************************************************************************
void AD7606C(uchar acch)//(unsigned int *adcdat)
{
         
          uint i,n;
         uchar TempAH,TempBH,TempAL,TempBL;

     //   OS2=1;OS1=1;OS0=0;  //设定过采样
     //    RANGE=0; //选择+/- 5V 输入   
     if (acch==1)  AD_DoutA=1;
    else AD_DoutB=1;
      //  select_CH(acch );
       //  P51=1; P35=0;
        // Delay1ms(50);
DELAY(2000);
       // for(j=0;j<100;j++)
  //{
                    
                ad7606_StartConv();        //启动AD7606的ADC转换
                   while(Busy){;}
                 ADC_CS=0;
                 TempAH=0;  TempBH=0;
                 TempAL=0;  TempBL=0;

                for(n=0;n<4;n++)
                 {
                         TempAH=TempAH<<1;
                        TempBH=TempBH<<1;
                         RD_SCK=0;  
                         if(AD_DoutA)TempAH|=0x01;
                         if(AD_DoutB)TempBH|=0x01;                                 
                         RD_SCK=1;
                        for(i=0;i<7;i++)
                         {               
                                RD_SCK=0;         
                                 RD_SCK=1;         
                                TempAH=TempAH<<1;
                                TempBH=TempBH<<1;
                                 if(AD_DoutA)TempAH|=0x01;                                
                                if(AD_DoutB)TempBH|=0x01;                                                                                          
                         }
                         for(i=0;i<8;i++)
                         {               
                                RD_SCK=0;         
                                 RD_SCK=1;         
                                TempAL=TempAL<<1;
                                TempBL=TempBL<<1;
                                 if(AD_DoutA)TempAL|=0x01;                                
                                 if(AD_DoutB)TempBL|=0x01;                                                                                          
                         }
                        if(AD_DoutA) DoutA[n]=TempAH*256+TempAL; //
                        if(AD_DoutB)DoutB[n]=TempBH*256+TempBL;
                 }
                 //..............................................
                 ADC_CS=1;         
        // }
}

   void init_serialcomm(void)               /*初始化串口   */
        {SCON  = 0x50;       /*SCON: serail mode 1, 8-bit UART, enable ucvr      */
         TMOD = 0x20;       /*TMOD: timer 1, mode 2, 8-bit reload         */
         PCON = 0x00;       /*SMOD=0;         */
         TH1   = 0xFd;
         TL1   = 0xfd;        /*Baud:9600  fosc=11.0592MHz    */
         TR1   = 1;          /* timer 1 run        */
      //   P3=0xff;
         TL0=0X66;
         TH0=0XFC;
         TR0=1;
         ET0=1;
   
     
     
     
         ES=1;
        // PT0=1;
         t_disabled = 0;
         en_r_flag=0;
         EA=1;
         enablebit=0;
             }
  
   main()
        {
     uchar ucRefresh = 0;
         uchar ucFifoMode = 0;
          init_serialcomm();  //初始化串口      
        
         AD7606_init();
   

      DELAY(DELAY_TIME);
        
        
            while(1)
           {
    if( t_disabled==1){
   
   
  
   /* 处理数据 */
  AD7606C(0);
     
      AD7606C(1);
   
   temp= DoutA[0];
     if (temp>0 ){      
    sendadc[0]=temp/10000+0x30;
    temp=temp%10000;
     sendadc[1]=temp/1000+0x30;
    temp=temp%1000;   
     sendadc[2]=temp/100+0x30;
    temp=temp%100;  
        sendadc[3]=temp/10+0x30;
    sendadc[4]=temp%10+0x30;   
         
          t_disabled =0;
       DELAY(20000);
   
   }   

   
     
             }
         }

回复

使用道具 举报

1

主题

1

回帖

4

积分

新手上路

积分
4
 楼主| 发表于 2019-6-21 17:31:52 | 显示全部楼层
Busy信号不对,数据全部为0,请大侠指导一下。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115717
QQ
发表于 2019-6-21 17:41:36 | 显示全部楼层
如果是购买的我们的模块,联系旺旺解决。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-14 01:56 , Processed in 0.213394 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表