打印
[技术问答]

求大神帮忙

[复制链接]
1559|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
潇潇穆语|  楼主 | 2014-11-28 21:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面是我的DS18B20的驱动程序,在仿真中可以用,但为什么在电路板上显示的就是0度呢?请帮我看看程序有什么问题吗?
void delayfor(uchar i)
{
  for(i;i>0;i--);
}
void delay11us(uint k)
{
  while(k--);
}
/**ds18b20**/
void  ds18b20_init(void)
{   
   unsigned char x=0;
   DQ=1;
   delayfor(8);
   DQ=0;
   delayfor(80);  //80改60
   DQ=1;
   delayfor(4);
    x=DQ;            //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
   delayfor(20);
}
/**ds18b20读一个字节**/
uchar ds18b20_readchar(void)
{
          uchar i=0;
        uchar dat = 0;
        for(i=8;i>0;i--)
         {
                  DQ = 0; // 给脉冲信号
                  dat>>=1;
                  DQ = 1; // 给脉冲信号
                  if(DQ)
                  dat|=0x80;
                  delay11us(10);
         }
        return(dat);
}
/**ds18b20写一个字节**/
ds18b20_writechar(uchar dat)
{
uchar i=0;
for (i=8; i>0; i--)
  {
    DQ = 0;
    DQ = dat&0x01;
    delay11us(10);
    DQ = 1;
    dat>>=1;
  }
}
/**读出温度**/
uint readtemperature()
{
        uchar a=0;
        uchar b=0;
        uint  t=0;
        ds18b20_init();
        ds18b20_writechar(0xCC); // 跳过读序号列号的操作
        ds18b20_writechar(0x44); // 启动温度转换
        delay11us(100);
        ds18b20_init();
        ds18b20_writechar(0xCC); //跳过读序号列号的操作
        ds18b20_writechar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
        delay11us(100);
        a=ds18b20_readchar();
        b=ds18b20_readchar();
        if((b*256+a)>63488)       
          {
                          t=~(b*256+a)+1; t=t*25;flag1820=1;//取反加1
           }  
        else
          {
                         t = (b*256+a)*25;flag1820=0;
          }       
        return(t);
}
/**温度数值处理**/
void gettemperature()
{
           uint realtemp;
        realtemp=readtemperature();
        temp[0]=realtemp/1000;         
        temp[1]=(realtemp/100)%10;
}       
  #endif
沙发
骗子的片子| | 2014-11-28 22:03 | 只看该作者
绝壁时许问题

使用特权

评论回复
板凳
潇潇穆语|  楼主 | 2014-11-29 15:55 | 只看该作者
骗子的片子 发表于 2014-11-28 22:03
绝壁时许问题

是时序问题吗?那我的程序那里有问题?

使用特权

评论回复
地板
zxf0168| | 2014-11-29 16:53 | 只看该作者
一般贴上一大段程序是最讨厌的了,自己的程序自己最了解,别人看不懂的

使用特权

评论回复
5
wangch_sh| | 2014-11-30 15:55 | 只看该作者
用什么仿真的?
对照时序图看波形。

使用特权

评论回复
6
373810773| | 2014-11-30 20:45 | 只看该作者
zxf0168 发表于 2014-11-29 16:53
一般贴上一大段程序是最讨厌的了,自己的程序自己最了解,别人看不懂的

这倒是事实,帮顶一下

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
潇潇穆语 + 2 神马都是浮云
7
zxf0168| | 2014-12-11 11:08 | 只看该作者
373810773 发表于 2014-11-30 20:45
这倒是事实,帮顶一下

:lol

使用特权

评论回复
8
373810773| | 2014-12-11 12:05 | 只看该作者
zxf0168 发表于 2014-12-11 11:08

别笑了,你就帮帮人家呗

使用特权

评论回复
9
zxf0168| | 2014-12-18 16:54 | 只看该作者
373810773 发表于 2014-12-11 12:05
别笑了,你就帮帮人家呗

我在努力

使用特权

评论回复
10
373810773| | 2014-12-20 19:52 | 只看该作者
zxf0168 发表于 2014-12-18 16:54
我在努力

一同努力:lol

使用特权

评论回复
11
gaoyang9992006| | 2014-12-21 15:47 | 只看该作者
你先找个网上现成好用的18B20程序,然后移植到这个芯片上。

使用特权

评论回复
12
zxf0168| | 2014-12-28 17:59 | 只看该作者
gaoyang9992006 发表于 2014-12-21 15:47
你先找个网上现成好用的18B20程序,然后移植到这个芯片上。

好多人移植都懒得做

使用特权

评论回复
13
骗子的片子| | 2015-1-26 15:57 | 只看该作者
潇潇穆语 发表于 2014-11-29 15:55
是时序问题吗?那我的程序那里有问题?

时序问题,是不是

使用特权

评论回复
14
lovecat2015| | 2015-1-29 12:39 | 只看该作者
一般是时序或者延时的问题

使用特权

评论回复
15
mintspring| | 2015-2-28 07:35 | 只看该作者
延时问题(O_O)

使用特权

评论回复
16
lovecat2015| | 2015-3-25 20:28 | 只看该作者
楼主,谁有功夫给你看这么大段的程序啊

使用特权

评论回复
17
598330983| | 2015-3-31 07:24 | 只看该作者
楼主自己对着时序图排查一下,然后用示波器观察一下

使用特权

评论回复
18
598330983| | 2015-3-31 07:24 | 只看该作者
如果延时不再时序要求内,就修改

使用特权

评论回复
19
598330983| | 2015-3-31 07:25 | 只看该作者
一般经过几次修改都可以做出来

使用特权

评论回复
20
598330983| | 2015-3-31 07:25 | 只看该作者
我第一次用这个也是自己写的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

11

帖子

0

粉丝