微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 关于数据移位问题

关于数据移位问题

时间:10-02 整理:3721RD 点击:
小弟51单片机初学者,最近写了个DS18B20的测温程序,结果在向感温管发送指令时发现了个奇怪的问题,请各位大神瞧瞧咋回事。代码如下:
void Ds18b20WriteByte(uchar dat)  //向DS18B20写字节函数
{
        uchar i;  //无符号字符型
        for(i=0;i<8;i++)
        {
                DS18B20_DQ=0; //感温管数据线拉低电平
                _nop_(); _nop_();

//                DS18B20_DQ=(dat>>i) & (0x01);  //代码A:用这句来向感温器传递数据,程序下载到单片后无法正常工作
           
                DS18B20_DQ=dat & 0x01;        //代码B:把代码A替换为这一句,并加上下面的 “dat>>1”;就可以正常工作
                delay9us(5);   //此处再延时61us
                DS18B20_DQ=1;  

                dat>>=1; //代码B:这一句加上上面的 “DS18B20_DQ=dat & 0x01”,可正常工作;

                _nop_();_nop_();
        }
}

在debug对代码A、B分别进行跟踪调试,发现两种代码发送给DS18B20_DQ的内容是一样的,但代码A下载后就只显示个-000.05,无法正常工作,代码B就正常显示实际温度。鼓捣了半天了也没搞明白。

记得以后问题贴要选“问答”类别哦

不知道,可以学习,学习

DS18B20读逻辑0/1的步骤如下:
1.在读取的时候单片机拉低电平大约1us
2.单片机释放总线,然后读取总线电平。
3.这时候DS18B20会拉低/高电平。
4.读取电平过后,延迟大约40~45微妙
其中第4步,讲到延时大约40~45微妙,小编延时了61us,可以试下是否有问题(网上搜的,没有用过);还有就是,小编要先确定后面的解码处理没问题哦,希望能帮到你

不知道,可以学习,学习

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top