搜索
bottom↓
回复: 7

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

[复制链接]

出0入0汤圆

发表于 2013-5-6 13:47:10 | 显示全部楼层 |阅读模式
为什么我的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
}

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

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

 楼主| 发表于 2013-5-6 13:49:31 | 显示全部楼层
求各位大虾帮帮忙,这个搞了一个多星期,纠结死了。。主要是帮帮看看18b20的问题,1602 液晶的部分应该没问题,因为仿真的时候液晶是工作的,就是没有数据的原因。

出0入0汤圆

 楼主| 发表于 2013-5-6 13:54:54 | 显示全部楼层

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-5-6 15:21:36 | 显示全部楼层
DS18B20引脚2接上拉电阻

出70入0汤圆

发表于 2013-5-6 16:00:53 | 显示全部楼层
楼主代码风格要注意!

出0入0汤圆

 楼主| 发表于 2013-5-6 21:32:56 | 显示全部楼层
绿茶山人 发表于 2013-5-6 16:00
楼主代码风格要注意!

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

出0入0汤圆

 楼主| 发表于 2013-5-6 21:38:51 | 显示全部楼层
mo_fish 发表于 2013-5-6 15:21
DS18B20引脚2接上拉电阻

哦,谢谢,我忘记了。

出70入0汤圆

发表于 2013-5-7 08:01:08 | 显示全部楼层
关河 发表于 2013-5-6 21:32
谢谢指导,不过该注意些什么呢?

有几个函数没缩进,逻辑不直观。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 12:56

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表