标题: 单片机+DS18B20的初始化的问题? [打印本页]

作者: SXP210624    时间: 2020-2-28 16:24
标题: 单片机+DS18B20的初始化的问题?
关于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;就不行。

作者: SXP210624    时间: 2020-2-28 16:38
补充一下:上边的初始化程序是用11.0592MHz晶振
作者: hahayachan    时间: 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没有准备好
}

作者: wulin    时间: 2020-2-28 17:38
CPU处理不同数据类型的数据所耗时间不同,楼主在这里把uint test1=0;改成uchar test1=0;,那么for循环延时时间只有原来时间的1/4,时序就错乱套了。
作者: hantu    时间: 2020-2-29 00:48
用循环来延时,循环变量是8位还是16位的数据变量,所耗的时间是不一样的!
作者: SXP210624    时间: 2020-2-29 16:03
好的,谢谢明白了
作者: sunyuanxin    时间: 2020-2-29 17:26
一个整型数据,一个是字符型数据,字符型的A是数字是65,两者的处理时间不一样
作者: ccczzz    时间: 2020-2-29 18:02
uchar是无符号字符整数,8比特,最大到十位数字的255;uint是无符号整数,16比特,最大到65535。
一般数字比较小的就用uchar,节省空间。
作者: lyl44    时间: 2020-2-29 18:08
加长延时就好了




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1