打印
[51单片机]

ad7705单片读数据求助

[复制链接]
2356|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liwanxi|  楼主 | 2014-11-25 11:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我写的程序也是参考网上前辈的人,可AD7705_DRDY为什么一直处于高电平,希望懂得帮我说一下,谢谢。
#include<reg52.h>
#include<intrins.h>
sbit lcd_rs=P2^6;
sbit lcd_rw=P2^5;
sbit lcd_e=P2^7;
sbit led=P0^7;
sbit led1=P0^5;

sbit AD7705_CLK=P1^0;
sbit AD7705_CS=P2^1;
sbit AD7705_DRDY=P1^3;
sbit AD7705_DATA=P1^2;
sbit AD7705_DATAin=P1^1;

//sbit AD7705_DATA1=P2^0;

#define lcd_db P0
#define uchar unsigned char
#define uint unsigned int
float T_Voltage;
unsigned int MSB_Data,LSB_Data,temp0,temp1,temp2,temp3,temp4,temp5;

uchar str1[]={"wellcome to"};
uchar str2[]={'0','1','2','3','4','5','6','7','8','9'};
void AD7705_Read();
void AD7705_init();

void delay(ms)
{
uchar i;
while(ms--)
{for(i=0;i<250;i++)
{_nop_();_nop_();_nop_();_nop_();}
}
}
void write_cmd(cmd)//写入指令
{
lcd_rs=0;
lcd_rw=0;
lcd_e=0;
delay(1);
lcd_e=1;
lcd_db=cmd;
delay(1);
lcd_e=0;
}

uchar lcd_buzy()//查看是否在忙
{
uchar temp;
lcd_rs=0;
lcd_rw=1;
lcd_e=1;
temp=lcd_db;
delay(2);
lcd_e=0;
return temp;
}
void write_dat(uchar str)//写数据
{
while(lcd_buzy()&0x80);
lcd_rs=1;
lcd_rw=0;
lcd_e=0;
delay(1);
lcd_e=1;
lcd_db=str;
delay(1);
lcd_e=0;
}

void write_cusor(uchar addr)//写坐标的位置
{
write_cmd(addr|0x80);
}

void write_lcd(uchar *str)//写显示
{
while(*str!='\0')
{
  write_dat(*str++);
}
}

void lcd_init()//LCD初始化
{
  write_cmd(0x38);
  write_cmd(0x0c);
  write_cmd(0x06);
  write_cmd(0x01);
}

main()
{
  lcd_init();
  AD7705_DRDY=1;
  AD7705_DATAin=1;
  AD7705_init();
  AD7705_CS=0;
  while(lcd_buzy()&0x80);
  write_cusor(0);
  write_lcd(str1);
  write_cusor(0x40);
  //write_lcd(str2);
  delay(10);
  while(1)
  {
    led1=0;
        while(AD7705_DRDY==1);
        led1=1;
        AD7705_Read();
    write_cusor(0x40);
        //write_dat(str2[1]);
        write_dat(str2[temp2]);
        write_cusor(0x41);
        write_dat(str2[temp3]);
        write_cusor(0x42);
        write_dat(str2[temp4]);
        write_cusor(0x43);
        write_dat(str2[temp5]);
        //while(!AD7705_DRDY);
  }
}

/////////////////////////ad7705///////读取处理部分
void AD7705_Write_Reg(unsigned char Data_byte)//写寄存器
{
unsigned char i;

AD7705_CS = 0;
AD7705_CLK = 1;
  _nop_();
  _nop_();
for(i = 0; i < 8; i++)
{
     
  AD7705_CLK = 0;
  _nop_();
  _nop_();
  _nop_();
  AD7705_DATAin = (bit)(Data_byte & 0x80);
   _nop_();
  _nop_();
  _nop_();
  AD7705_CLK = 1;
  Data_byte <<= 1;
}
  _nop_();
  AD7705_DATA =1;
  AD7705_CS = 0;
}
unsigned char AD7705_Read_Reg()//读寄储器
{
unsigned char i,Data_read;

AD7705_CS = 0;
AD7705_CLK = 1;
     _nop_();
for(i = 0; i < 16; i++)
{
     AD7705_CLK = 0;
        _nop_();
     _nop_();
  Data_read <<= 1;
  if(AD7705_DATA)
  Data_read=Data_read+1;
  _nop_();
  _nop_();
        AD7705_CLK = 1;
        _nop_();
     _nop_();
}
   _nop_();
  AD7705_CS = 0;
  //AD7705_DRDY = 1;
  return(Data_read);
}


void AD7705_Reset(void)//复位
{
uchar i;
AD7705_CLK=1;
AD7705_DATAin=1;    // DIN端口连续写40个周期的高电平,保证复位
for(i=0;i<40;i++)
  {
    AD7705_CLK=0;
        _nop_();
   
    AD7705_CLK=1;
        _nop_();
  }
  delay(10);             // 复位之后等待1MS         
}
void AD7705_init()
{
AD7705_Reset();
AD7705_Write_Reg(0x20);//通道1 ,下一个写时钟寄存器
AD7705_Write_Reg(0x0c);//写时钟寄存器设置更新速率为20Hz
AD7705_Write_Reg(0x10);//通道1 ,下一个写设置寄存器
AD7705_Write_Reg(0x44);//写设置寄存器,设置成双极性、无缓冲、增益为1、滤波器工作、自校准
}

void AD7705_Read()
{

  led=0;
  //while(AD7705_DRDY);// 写数据的时候不需要判断忙,只有读数据的时候才需要
  AD7705_Write_Reg(0x38);//读第一个通道


delay(5);
led=1;
MSB_Data = AD7705_Read_Reg();
//MSB_Data =45;
LSB_Data = AD7705_Read_Reg();
//LSB_Data =12;
T_Voltage =(float)MSB_Data;
T_Voltage = T_Voltage*100;
T_Voltage = T_Voltage + (float)LSB_Data;
temp0 = T_Voltage/100000;
temp1 = ((T_Voltage-temp0*100000)/10000);
temp2 = ((T_Voltage-temp0*100000-temp1*10000)/1000);
temp3 = ((T_Voltage-temp0*100000-temp1*10000-temp2*1000)/100);
temp4 = (T_Voltage-temp0*100000-temp1*10000-temp2*1000-temp3*100)/10;
temp5 = (T_Voltage-temp0*100000-temp1*10000-temp2*1000-temp3*100-temp4*10);
}

相关帖子

沙发
coody| | 2014-11-25 14:50 | 只看该作者
时钟正常了没有?初始化正常了没有?

使用特权

评论回复
板凳
liwanxi|  楼主 | 2014-11-25 15:27 | 只看该作者
谢谢您的回答,时钟正常是用4。95哪种时钟,标准的。现在就是数据读出来乱七八糟的。

使用特权

评论回复
地板
ningling_21| | 2014-11-25 16:46 | 只看该作者
liwanxi 发表于 2014-11-25 15:27
谢谢您的回答,时钟正常是用4。95哪种时钟,标准的。现在就是数据读出来乱七八糟的。 ...

先确认一下硬件有没有问题

使用特权

评论回复
5
liwanxi|  楼主 | 2014-11-27 09:55 | 只看该作者
谢谢您的回答,硬件没在问题.

使用特权

评论回复
6
liwanxi|  楼主 | 2014-11-27 09:57 | 只看该作者
用单片机和模块的。

使用特权

评论回复
7
wujh| | 2014-12-2 22:52 | 只看该作者
这个芯片很早用过,现在多忘了

使用特权

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

本版积分规则

2

主题

14

帖子

0

粉丝