解释这段代码void tmpwritebyte(uchar dat) { uint i; uchar j; bit testb; for(j=1;j<=8;j++) { testb=dat&0x01; dat=dat>>1; if(testb) { DS=0; i++;i++; DS=1; i=8;while(i>0)i--; } else { DS=0; i=8;while(i>0)i--; DS=1; i++;i++; } }} void tmpchange(void) { dsreset(); delay(1); tmpwritebyte(0xcc); tmpwritebyte(0x44); } uint tmp() //get the temperature { float tt; uchar a,b; dsreset(); delay(1); tmpwritebyte(0xcc); tmpwritebyte(0xbe); a=tmpread(); b=tmpread(); temp=b; temp<<=8; //two byte compose a int variable temp=temp|a; if(temp<0x07ff) { key=0; tt=temp*0.0625; } else { key=1; tt=(~temp+1)*0.0625; } temp=tt*10+0.5; //放大10倍 return temp; }
时间: 2024-04-28 22:22:09 浏览: 210
这段代码是一个嵌入式系统的驱动程序,主要作用是通过温度传感器获取环境温度并进行处理。其中,tmpwritebyte函数是用于向温度传感器发送命令或数据,tmpchange函数是用于发送温度转换命令,tmp函数是用于获取温度值并进行处理。
tmpwritebyte函数中,dat参数是要发送的数据,通过循环将dat数据的每一位发送出去,先将最低位发送出去,然后将dat右移一位,重复这个过程直到将dat的所有位发送出去。在发送每一位时,如果为1,则先拉低数据线,延时一段时间,然后再拉高数据线,反之则先拉低数据线,延时一段时间,然后再拉高数据线。通过这种方式向温度传感器发送数据或命令。
tmpchange函数中,首先进行dsreset函数,即将数据线拉低一段时间后再拉高,然后发送温度转换命令0x44,告诉温度传感器开始进行温度转换。
tmp函数中,首先进行dsreset函数,然后发送读取温度命令0xbe,接着读取温度传感器返回的两个字节数据,将其组合成一个整型变量temp。如果temp小于0x07ff,则key值为0,温度值tt为temp乘以0.0625,否则key值为1,温度值tt为(~temp+1)乘以0.0625。最后将处理后的温度值放大10倍并四舍五入存储在temp变量中,返回temp值。
相关问题
给出注释void tmpwritebyte(uchar dat) { uint i; uchar j; bit testb; for(j=1;j<=8;j++) { testb=dat&0x01; dat=dat>>1; if(testb) { DS=0; i++;i++; DS=1; i=8;while(i>0)i--; } else { DS=0; i=8;while(i>0)i--; DS=1; i++;i++; }
这是一个函数定义,函数名为tmpwritebyte,参数为一个无符号字符类型dat。该函数使用了三个局部变量:一个无符号整型i,一个无符号字符型j,一个位类型testb。
接下来是一个for循环,循环次数为8次。在每次循环中,先将dat的最低位取出来赋值给testb,然后将dat右移一位。如果testb为真(即为1),则将数据线DS置为0,等待一段时间,再将DS置为1,然后等待一段时间;如果testb为假(即为0),则将DS置为0,等待一段时间,然后将DS置为1,再等待一段时间。最后,分别执行两个while循环,将i的值重置为0。
该函数的功能是向DS18B20温度传感器写入一个字节的数据。
阅读全文