永发信息网

用AVR单片机驱动ds18b20的程序,总是读不出温度。

答案:2  悬赏:50  手机版
解决时间 2021-02-26 10:01
#define data 3
void tepdelay(unsigned int a)
{
while(a--);
}
unsigned char Init_DS18B20()
{
unsigned char i=0;
DDRC|= (1< PORTC&=~(1< tepdelay(100);
PORTC|=(1< tepdelay(40);
DDRC&=~(1 < tepdelay(40);
if(PINC&0x08)
{
tepdelay(60);
return 0;
}
else
{
tepdelay(50);
return 1;
}
}
unsigned char ReadOneChar()
{
unsigned char i=0;
unsigned char dat = 0;
for(i=8;i>0;i--)
{ dat>>=1;DDRC|=(1 <
PORTC&=~(1< tepdelay(10);
PORTC|=(1< DDRC &= ~(1 < if(PORTC&=~(0x01< dat|=0x80;
tepdelay(10);
}
return(dat);
}
void WriteOneChar(unsigned char dat)//写一个字节
{
unsigned char i=0;
for(i=8;i>0;i--)
{
DDRC|=(1 < PORTC&=~(1< if(dat&0x01)
{
PORTC|=(1< }
else
{
PORTC&=~(1< }
tepdelay(10);
PORTC|=(1< dat>>=1;
//tepdelay(10);
}
}
unsigned int Readtemp()//读取温度
{
unsigned char a=0;
unsigned char b=0;
unsigned int t=0;
float tt=0;
Init_DS18B20();
WriteOneChar(0xCC); // 跳过读序号列号的操作
WriteOneChar(0x44); // 启动温度转换
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0xBE); //读取温度寄存器
a=ReadOneChar(); //连续读两个字节数据 //读低8位
b=ReadOneChar(); //读高8位
t=b;
t<<=8;
t=t|a; //两字节合成一个整型变量。
tt=t*0.0625;
t= tt*10+0.5;
return(t);
}
最佳答案
主要是延迟,把时间搞准就可以了。 多用示波器看波形。

if(PORTC&=~(0x01<
注意:读端口引脚状态,是读PINC,不是读PORTC
全部回答
通常读不出温度都是因为通讯的时序不对,楼主可以百度一下读ds18b20时序,最好是自己通过示波器查看信号的时序
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
伊犁州友谊医院-肠道门诊我想知道这个在什么
韵达同城到付要多少?
英文译成中文(星2)When you are reading in
邓二姐肥肠米线宣威店地址有知道的么?有点事
怎么从达拉然去德拉诺
意林好段摘抄不少于300字
去趟日本秋叶原大概要多少钱?
电能表上标有3000转/(kwh)的字样,一同学为测
晋ays369,这个车牌好吗?至多少钱?
县航运管理站这个地址在什么地方,我要处理点
孙庄镇中心幼儿园地址有知道的么?有点事想过
求莫道不销魂的我的校花老婆
蜀都丝绸坊在哪里啊,我有事要去这个地方
曾几何时的天魔黑兔男主喜欢谁
女孩起名欣字带个属金的字
推荐资讯
临终的临是什么意思
问您下成考高起专的难不难啊,我学的都忘了现
百变佳人NO.4地址在什么地方,想过去办事
预约了小米4 16g可以更换成64g吗
交通违章在哪里查询最权威最快
Love all,trust a few,do wrong to none.
河南工程学院-圣源餐厅地址在什么地方,想过
为什么景区牌子上会有韩文而不是法文或西班牙
洛克王国冒顿第三步打伊芙利特吗
梦见朋友给送来一车煤无烟挺好烧怎么回事
中央型肺癌伴纵隔肺门多发淋巴结肿大最常见于
微信语音聊天没声音,是不是把什么软件删除了
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?