完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
参照网上的资料和DATESHEET写了一个DS18B20的程序,单片机为ATMEL128,晶振为8M,但是温度一直显示为255,从早上开始找原因,没有找到。现在把源代码发上来,各位能帮我分析一下原因吗?(程序未完整,只是发了温度部分,显示部分就不发了,调试是成功了)
#include #include #include til/delay.h> #include #include #define FREQ 8 //芯片工作频率 #define uchar unsigned char #define uint unsigned int /*******************温度设定********************/ #define DQ_H PORTA|= (1< #define DQ_IN DDRA&=~(1< static uchar *table[10]={"0","1","2","3","4","5","6","7","8","9",}; /******延时函数********/ void delay_nms(uint n) { uint i=0 ; for (i=0 ;i } /********************************************************/ /* */ /* y*us延时函数 */ /* */ /********************************************************/ void delay(uint y) { _delay_loop_2(2*y); } /***************************DS18B20复位程序**************************/ void reset(void) { uchar flag; flag=1; while(flag) { DQ_L; delay(600); //拉低总线600us,发送复位命令 DQ_H; DQ_IN; delay(60); //等待回应 if(PINA&_BV(PA3)) delay(350); //延时后继续复位 else flag=0; //跳出复位 } delay(350);//初始化完成,恢复高电平 DQ_OUT; delay(2); } /**********************向DS18B20发送数据(从低位到高位)*******************/ void send_date1(uchar date) { uchar temp,i; for(i=8;i>0;i--) { temp=(date&0x01); //检测date第一位是否为1 DQ_L; delay(15);//产生发送时序 if(temp) DQ_H; else DQ_L; //发送数据 delay(60); //等待DS18B20采样 DQ_H; delay(2); //结束发送,进入下一个字节发送 date=(date>>1); } } /********************从DS18B20读数据(高位到低位)***********/ uchar read_date1(void) { uchar date,i; date=0x00; for(i=8;i>0;i--) { DQ_L; delay(1); //产生读时序 date=(date>>1); DQ_H; //发送读取命令 DQ_IN; delay(3);//释放总线 if((DQ_R&=(1< delay(60); //一个读周期 DQ_H; //恢复总线 DQ_OUT; delay(1); } return(date); } /**********************************温度函数**********************/ unsigned int readtemp(void) { uchar TVL,TVH; unsigned int tempvalue,temp; tempvalue=0; temp=0; reset(); send_date1(0xCC); //忽略RAM匹配 send_date1(0x44); //发送温度查询命令 reset(); //复位 send_date1(0xCC); send_date1(0xBE); //读取暂存器上的温度数据 TVL=read_date1(); //温度低8位 TVH=read_date1(); //温度高8位 // TVL=0x55; // TVH=0x02; temp=TVH; temp=(temp<<8); tempvalue=(temp|TVL); tempvalue=(tempvalue*0.0625); return tempvalue; } |
|
相关推荐
3个回答
|
|
#define DQ_data PORTC.7
#define DQ_bus(x) DDRC.7 = x void DS18B20_Init() { uint i = 0; DQ_bus(1); DQ_data = 1; DQ_data = 0; delay_us(640); DQ_data =1; DQ_bus(0); // delay_us(60); while(PINC.7) { delay_us(60); i++; if(i >= 10000) { flag = 1; break; } } delay_us(480); DQ_bus(1); DQ_data = 1; } void DS18b20_Write(uchar dat) { uchar m; DQ_bus(1); for(m = 0;m < 8; m++) { DQ_data = 0; delay_us(15); if(dat &(1 << m)) { DQ_data = 1; delay_us(15); delay_us(15); delay_us(15); } else { DQ_data = 0; delay_us(15); delay_us(15); delay_us(15); delay_us(15); } DQ_data = 1; } DQ_bus(1); DQ_data = 1; } uchar DS18b20_Read() { uchar n,temp,k; temp = 0; // IO_In; for(n = 0;n < 8;n++) { DQ_bus(1); DQ_data = 1; delay_us(2); DQ_data = 0; delay_us(6); DQ_data = 1; delay_us(4); DQ_bus(0); k = (PINC & (1 << 7)); if(k) { temp |= (1 << n); } else { temp &= ~(1 << n); } delay_us(30); // DQ_bus(1); } return (temp); } void Gettemp() { uint w; // uchar i; DS18B20_Init(); DS18b20_Write(0xcc); DS18b20_Write(0x44); delay_ms(100); DS18B20_Init(); DS18b20_Write(0xcc); DS18b20_Write(0xbe); templ = DS18b20_Read(); temph = DS18b20_Read(); // uint w; // uchar i; // Gettemp(); w = temph; w = w << 8; w = w | templ; if(w < 0x0fff) sign1 = 1; else { w = ~w + 1; sign1 = 0; } w = w * (0.625) - 40; e[0] = w / 1000 + 0x30; e[1] = w % 1000 / 100 + 0x30; e[2] = w % 100 / 10 + 0x30; e[3] = w % 10 +0x30; } |
|
|
|
这个程序我测试过了,你自己对一下吧
|
|
|
|
谢谢分享
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-使用AHT20进行环境监测之AHT20传感器介绍
828 浏览 0 评论
824 浏览 0 评论
861 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
836 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
1292 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11824 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-29 18:36 , Processed in 1.180902 second(s), Total 81, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号