找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2243|回复: 8
打印 上一主题 下一主题
收起左侧

单片机+DS18B20的初始化的问题?

[复制链接]
跳转到指定楼层
楼主
ID:511168 发表于 2020-2-28 16:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
关于DS18B20的初始化,这么写就能初始化成功(其他函数的时序都没毛病,芯片:STC89C52)!
bit Initialization(void)    //函数初始
{
    uint test1=0;
    DQ = 0;
    test1=103;while(test1>0)test1--;
    DQ = 1;
    for(test1=0;test1<4;test1++);  //等待15-60us
    for(test1=0;test1<12;test1++); //信号拉低60-240us
    if(DQ) return 1;   //DS18B20准备好
    else   return 0;   //DS18B20没有准备好
}

但是我为了节省空间,把“uint test1=0;”改成“uchar test1=0;”的话,初始化就失败了。
我想知道为什么uchar test1=0;就不行。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:511168 发表于 2020-2-28 16:38 | 只看该作者
补充一下:上边的初始化程序是用11.0592MHz晶振
回复

使用道具 举报

板凳
ID:699551 发表于 2020-2-28 17:16 | 只看该作者
uint 是16位元
uchar  是8位元
所以程式執行時間不同, uchar 執行時間會短一些, 應該要將delay count 加長
建議程式更改如下,

bit Initialization(void)    //函数初始
{
    uint test1=0;
    DQ = 0;
    test1=103;while(test1>0)test1--;
    DQ = 1;
    for(test1=0;test1<12;test1++);  //等待15-60us
    for(test1=0;test1<36;test1++); //信号拉低60-240us
    if(DQ) return 1;   //DS18B20准备好
    else   return 0;   //DS18B20没有准备好
}
回复

使用道具 举报

地板
ID:213173 发表于 2020-2-28 17:38 | 只看该作者
CPU处理不同数据类型的数据所耗时间不同,楼主在这里把uint test1=0;改成uchar test1=0;,那么for循环延时时间只有原来时间的1/4,时序就错乱套了。
回复

使用道具 举报

5#
ID:462827 发表于 2020-2-29 00:48 | 只看该作者
用循环来延时,循环变量是8位还是16位的数据变量,所耗的时间是不一样的!
回复

使用道具 举报

6#
ID:511168 发表于 2020-2-29 16:03 | 只看该作者
好的,谢谢明白了
回复

使用道具 举报

7#
ID:700218 发表于 2020-2-29 17:26 | 只看该作者
一个整型数据,一个是字符型数据,字符型的A是数字是65,两者的处理时间不一样
回复

使用道具 举报

8#
ID:400250 发表于 2020-2-29 18:02 | 只看该作者
uchar是无符号字符整数,8比特,最大到十位数字的255;uint是无符号整数,16比特,最大到65535。
一般数字比较小的就用uchar,节省空间。
回复

使用道具 举报

9#
ID:159575 发表于 2020-2-29 18:08 来自手机 | 只看该作者
加长延时就好了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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