本帖最后由 bmfw 于 2009-11-25 21:33 编辑
再次请问一下,为什么我的程序在16度以下不能正确解码16度以上却没有问题?有关程序如下
uchar TAB_IntToBcd[]={
0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,
0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,
0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,
0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,
0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,
0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,
0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,};
TempL = DS18B20_ReadByte();//读取温度值低位字节(其中低4 位为二进制的"小数"部分)
TempH = DS18B20_ReadByte();//读取温度值高位字节(其中高5位为符号位)
if (TempH^3==0) //正温度
{
TemSigned = 0x00; //温度的符号位,0为正温度,1为负温度
}
else //负温度
{
TemSigned = 0x01;
TempL=256-TempL; //负温度用补码表示,即反码加1
TempH=255-TempH; //也就是255-Temp+1
}
//TempH的低四位和TempL的高四位是整数部分,TempL的低四位是小数部分
TemHigh = TAB_IntToBcd[(TempH<<4)|(TempL>>4)];
TemLow = TAB_IntToBcd[(TempL&0x0f)*625/100];//小数部分*625/100转换成整数 |