关河 发表于 2013-5-6 13:47:10

新手一枚,请教大虾们18b20的一些问题

为什么我的18b20无法读入温度示数呢?
代码如下:
#include <reg51.h>
#include <1602.h>
#define        uchar unsigned char
#define dataport P3
sbit RS=P2^0;
sbit RW=P2^1;
sbit E=P2^2;
sbit bf=P3^7;
void delay500();
uchar read_18b20();
void delay60();
bit reset(void);
void write_byte();       
sbit data_line=P2^3;
sbit flag1=P2^4;
uchar temp;
void main()
{
flag1=0;
while(flag1==0)
{reset();}       //若无响应则重新复位
//temp=0x20;
//write_byte();
read_18b20();
                   //以下为1602液晶的程序
init_1602();
read_state_1602();
write_data_1602(temp);
//write_commend_1602(0xc0);
//read_data_1602();
while(1);
}

/*<<<<<<<复位>>>>>>>>>>*/
bit reset(void)
{
uchar i;
data_line=0;   //拉低
delay500();
data_line=1;   //拉高等待响应
for(i=0;i<13;i++)
{
if(data_line==0)
{flag1=1;}      //有响应           延时(5i+2)us
}
if(data_line==1)
{
flag1=0;      //无响应
}
delay500();   //延时一段时间
data_line=1;// 拉高结束
return flag1;
}

/**********************************写位******************************/
void write_byte()        //写位,有严格的时序要求
{
uchar i,j;
for(i=0;i<8;i++)
{
data_line=0;        //拉低
for(j=2;j>0;j--);//延时4us
data_line=temp&0x01; //将最低位赋值给data_line
delay60();
data_line=1;
temp=temp>>1;    //带进位的右移
}
}
/**************************************读示数***********************/
uchar read_18b20()
{
      uchar i,j;
      temp = 0;
      for (i=8;i>0;i--)
                {       data_line= 0;       // 给脉冲信号
                temp>>=1;
                                for(j=2;j>0;j--);//延时4us
                data_line= 1;      // 给脉冲信号
                                for(j=4;j>0;j--);//延时8us
                if(data_line)
                { temp|=0x80;}
                delay60();
                                data_line=1;
      }
      return(temp);

}
void delay500()
{
uchar i;
for(i=0;i<166;i++);   //延时(3i+2)us

}

void delay60()
{
uchar i;
for(i=0;i<20;i++);   //延时(3i+2)us
}

关键是写和读示数都没有反应,网上也找别人的实例看了,但是自己仿照他们的程序写了,却是无法运行。。。纠结啊。。。。求大神帮忙看一看。

关河 发表于 2013-5-6 13:49:31

求各位大虾帮帮忙,这个搞了一个多星期,纠结死了。。主要是帮帮看看18b20的问题,1602 液晶的部分应该没问题,因为仿真的时候液晶是工作的,就是没有数据的原因。

关河 发表于 2013-5-6 13:54:54


以上的是仿真图,仿真有问题么?

mo_fish 发表于 2013-5-6 15:21:36

DS18B20引脚2接上拉电阻

绿茶山人 发表于 2013-5-6 16:00:53

楼主代码风格要注意!

关河 发表于 2013-5-6 21:32:56

绿茶山人 发表于 2013-5-6 16:00 static/image/common/back.gif
楼主代码风格要注意!

谢谢指导,不过该注意些什么呢?

关河 发表于 2013-5-6 21:38:51

mo_fish 发表于 2013-5-6 15:21 static/image/common/back.gif
DS18B20引脚2接上拉电阻

哦,谢谢,我忘记了。

绿茶山人 发表于 2013-5-7 08:01:08

关河 发表于 2013-5-6 21:32 static/image/common/back.gif
谢谢指导,不过该注意些什么呢?

有几个函数没缩进,逻辑不直观。
页: [1]
查看完整版本: 新手一枚,请教大虾们18b20的一些问题