打印

我的ADS7841转换为什么都是显示1呢?

[复制链接]
2112|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
欧阳青云|  楼主 | 2010-8-8 16:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用12位的ADS7841进行模数转换,采用通道CH0进行采样,模拟输入电压我用数控电源直接输入,为了简单点我把BUSY端口直接接地,转换完后的二进制数据用1602进行显示,但我显示的数据全为1,这是为什么啊?想了很久了都解决不了,所以请大家帮帮忙,谢谢。
主程序如下:
#include"reg52.h"
#include<LCD1602.h>
#include<ADS7841.H>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uint  temp1,temp2;
uint voltage;
sbit P04=P0^4;
main()
{
      uchar i;
      uchar j;
      clear_LCD();
      init_LCD();
      P04=0;
      i=0;
      j=0;
      while(1)
      {
             temp1=ReadADS(0x94);
             if(j==0)               //为了显示第一次采集回来的数据,第二次就暂时不理它了。
            {
                    temp2=temp1;
            }
            voltage=temp2&&(0x8000>>i);
            gotoxy(0,i);                        //1602中的函数,1602头文件我没给出
            display_LCD_number(voltage);
            i=i<15?i+1:0;
            if(temp2!=0)
            {
                 P04=1;              //用来测试用的,如果转换后数据不为0则为1,否则反之
            }
            j=1;
}

AD转换头文件程序如下:
/*********************************************************************************************************
** 函数名称:    ReadADS()      
** 功能描述:    读取ADS7841的转换值
********************************************************************************************************/
#ifndef __ADS7841_H__
#define __ADS7841_H__
#include <intrins.h>
#define uchar unsigned char
#define uint  unsigned int
sbit DCLK =P0^0; //ADC0832 clock signal
sbit DIN =P0^1; //ADC0832 data in
sbit DOUT =P0^2; //ADC0832 data out
void delay(uchar i)
{
       while(i--);
}
uchar i=0;
uchar j;
uint dat=0;
//采集并返回
unsigned int ReadADS(uchar control)   
{
//写控制命令
          for(i=0;i<8;i++)
          {
                  DCLK=1;
                  delay(5);  
                  DIN=(control<<i)&0x80;
                  DCLK=0;
                  delay(4);
          }
          delay(10);
          for(i=0;i<12;i++)
         {
               if(i==0)                //第一次不左移
                      dat=dat|DOUT;
               else
                      dat=(dat<<1)|DOUT;//收数据
               DCLK=1;
               delay(5);
               DCLK=0;
               delay(4);
          }
          return(dat);            //return ad data
}
#endif

}

相关帖子

沙发
欧阳青云|  楼主 | 2010-8-8 19:20 | 只看该作者
:L

使用特权

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

本版积分规则

47

主题

378

帖子

0

粉丝