找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2251|回复: 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;就不行。
回复

使用道具 举报

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,时序就错乱套了。
回复

使用道具 举报

ID:462827 发表于 2020-2-29 00:48 | 显示全部楼层
用循环来延时,循环变量是8位还是16位的数据变量,所耗的时间是不一样的!
回复

使用道具 举报

ID:511168 发表于 2020-2-29 16:03 | 显示全部楼层
好的,谢谢明白了
回复

使用道具 举报

ID:700218 发表于 2020-2-29 17:26 | 显示全部楼层
一个整型数据,一个是字符型数据,字符型的A是数字是65,两者的处理时间不一样
回复

使用道具 举报

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

使用道具 举报

ID:159575 发表于 2020-2-29 18:08 来自手机 | 显示全部楼层
加长延时就好了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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