解释这段代码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 11:22:09 浏览: 202
基于STC89C51单片机+DS18B20温度报警器设计软件源码+开发板硬件原理图.zip
5星 · 资源好评率100%
这段代码是一个嵌入式系统的驱动程序,主要作用是通过温度传感器获取环境温度并进行处理。其中,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值。
阅读全文