hi
温度试验的源程序:
void read_ds1820() //读 { uchar delay,i,j,k,temp,temph,templ; j=2; //读2位字节数据 do { for(i=8;i>0;i--) //一个字节分8位读取 { temp>>=1; //读取1位右移1位 TMDAT=0; //数据线置低电平 delay=1; while(--delay); //延时2us TMDAT=1; //拉高总线 delay=4; while(--delay); //延时8us if(TMDAT)temp|=0x80; //读取1位数据 delay=25; while(--delay); //读取1位数据后延时50us } if(j==2)templ=temp; //读取的第一字节存templ else temph=temp; //读取的第二字节存temph }while(--j); f=0; //初始温度标志为正 if((temph&0xf8)!=0x00) //若温度为负的处理,对二进制补码的处理 { f=1; //为负温度f置1 temph=~temph; templ=~templ; k=templ+1; // 下面几行代码应该在判断是否溢出,当templ取反恰好等于255时,加1将溢出,此时templ将为零 templ=k;
//我觉得是否可以根据PSW.Cy来判断溢出,if (CY != 0)作为判断条件 if(k>255) // 当k>255时判断为溢出情况,所以k似乎应该声明为short型 { temph++; } } tempdf=templ&0x0f; //将读取的数据转换成温度值,整数部分存tempint,小数部分存tempdf,这里可以看出,小数部分是低字节的低4位 templ>>=4; temph<<=4; tempint=temph|templ; // 温度整数部分是高字节的低4位在加上低字节的高4位 } |