完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
请教各位大侠AD7705的DRDY一直为高电平的问题,以下是关于AD7705的程序,是在网上找的,号称完美版,看了datersheet也找不出什么问题,不知为什么呢?
/*--------------------------------------------------------- 7705接口定义 ----------------------------------------------------------*/ ***it sclk = P2^4; ***it drdy = P2^5; ***it din = P2^6; ***it dout = P2^7; 省去其他的部分 /*********************************************************** 延时子程序,延时时间以12M晶振为准,延时时间为10us×time ***********************************************************/ void delay(unsigned char time) { unsigned char n; for(n=0;n } /* AD7705通信端口复位 */ void Reset7705(void) { unsigned char i; sclk=1; for(i=0;i<40;i++) //*多于连续32个 din=1 使串口复位 { sclk=0; din =1; sclk=1; } delay(100); } //写入寄存器8位数据 void Write(unsigned char dat) { unsigned char i; for(i=0;i<8;i++) { din=(bit)(dat&0x80); sclk=1; sclk=0; sclk=1; dat<<=1;//保证t13延时 } din=1; //为保证不乱写程序,此语句非常重要,否则试验表明很不稳定 } //从数据寄存器中读出16位数据 unsigned int Read(void) //低电平拉下t5后出数据 { unsigned rtval=0; unsigned char i; for(i=0;i<16;i++) { sclk=0; rtval<<=1;//i=0时,此操作不妨碍 rtval+=(0x0001&(unsigned int)dout); sclk=1; //程序执行完后sclk仍为高电平 } din=1; //为保证不乱写程序,此语句非常重要,否则试验表明很不稳定 return rtval; } /***************************************************** 此函数测试用,用于读8位的寄存器 通过修改Write();中的参数值可选择不同的寄存器 *****************************************************/ unsigned Read8bit(void) //从寄存器中读出8位数据 //低电平拉下t5后出数据 { unsigned char rtval=0; unsigned char i; while(drdy==1); Write(0x28); //修改此处值可从不同寄存器中读数 sclk=1; for(i=0;i<8;i++) { sclk=0; rtval<<=1; //if(dout)rtval|=0x01; rtval+=(0x01&(unsigned)dout);//保证t5 sclk=1; //程序执行完后sclk仍为高电平 } sclk=1; din=1; return rtval; } ////////////////////////////////////////////////////// void Adc7705Init(unsigned char range) { range<<=3; // Reset7705(); //复位 //写时钟寄存器 Write(0x20); //0x20:00100000 下一个时钟寄存器;写;正常工作模式;通道AN1 Write(0x02); //0x07:00000010 主时钟打开;晶振2.4576M;不分频;100Hz; //Write(0x07); //0x07:00000111 主时钟打开;晶振2M;不分频;500Hz; //写设置寄存器 Write(0x10); //0x10:00010000 下一个设置寄存器;写;正常工作模式;通道AN1 Write(0x46|range); //0x46:01000110 自校准;单极性;接缓冲,允许处理高阻电源;非复位;增益为1 } //返回一次采样值 unsigned int Adc7705(void) ` { while(drdy==1);//程序一直在这里循环 Write(0x38); //0x38:00111000 下一个16位数据寄存器;读;正常工作模式;通道AN1 // while(drdy==1); return Read(); } Reset7705(); Adc7705Init(0); temp =Adc7705(); 但是调试发现一直出不来,可不可以分享一些宝贵的经验,不吝赐教。感激万分! |
|
相关推荐
2个回答
|
|
呵呵呵
|
|
|
|
亲,解决了吗,能否说下
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
503 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1756 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
1183 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
1053 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
1287 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12020 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 17:25 , Processed in 0.763205 second(s), Total 74, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号