在psoc creator里写的读取ds18b20温度数据的程序,显示的值总是00A0,求帮忙看一下哪错了 
 
#include <project.h> 
#define uint unsigned int 
uint temp; //定义整型的温度数据 
float f_temp; 
 
void delay(uint z)//延时 
{ 
        uint x,y; 
        for(x=z;x>0;x--) 
                for(y=110;y>0;y--); 
} 
void dsreset(void) //复位函数 
{ 
        uint i; 
        Pin_1_Write(0); 
        i=103; 
        while (i>0) i--; 
        Pin_1_Write (1); 
        i=4; 
        while (i>0)i--; 
} 
int tempreadbit(void)//读一位数据 
{ 
        uint i; 
        int dat; 
        Pin_1_Write(0);i++; 
        Pin_1_Write(1);i++;i++; 
        dat=Pin_1_Read(); 
        i=8;while(i>0)i--; 
        return (dat); 
} 
uint tempread(void)//读一个字节 
{ 
        uint i,j,dat; 
        dat=0; 
        for(i=1;i<=8;i++) 
        { 
                j=tempreadbit(); 
                dat=(j<<7)|(dat>>1);//读出的数据最低位在最前面,这样刚好一个字节在dat里 
        } 
        return (dat); 
} 
 
 
void tempwritebyte(uint dat)//向DS18B20写一个字节数据函数 
{ 
        uint i; 
        uint j; 
        int testb; 
        for(j=1;j<=8;j++) 
        { 
                testb=dat&0x01; 
                dat=dat>>1; 
                if(testb)  //写1 
                { 
                        Pin_1_Write(0); 
                        i++;i++; 
                        Pin_1_Write(1); 
                        i=8;while(i>0)i--; 
                } 
                else  
                { 
                        Pin_1_Write(0); //写0 
                        i=8;while(i>0)i--; 
                        Pin_1_Write(1); 
                        i++;i++; 
                } 
        } 
} 
 
void tempchange(void) //DS18B20开始获取温度并转换 
{ 
        dsreset(); 
        delay(1); 
        tempwritebyte(0xcc); //写跳过读ROM指令 
        tempwritebyte(0x44); //写温度转换指令 
} 
uint get_temp()     //读取寄存器中存储的温度数据 
{ 
        uint a,b; 
        dsreset(); 
        delay(1); 
        tempwritebyte(0xcc); 
        tempwritebyte(0xbe); 
        a=tempread();       //读低8位 
        b=tempread();       //读高8位 
        temp=b; 
        temp<<=8;  //两个字节组合为一个字 
        temp=temp|a; 
        f_temp=temp*0.0625; //温度在寄存器中为12位,分辨率为0.0625 
        temp=f_temp*10+0.5; //乘以10表示小数点后面只取1位,加0.5是四舍五入 
        f_temp=f_temp+0.05; 
        return temp;    //temp是整型 
} 
 
 
int main() 
{ 
        LCD_Start(); 
        LCD_PrintString("Temperature: "); 
        while(1) 
        { 
     tempchange(); 
         LCD_Position(1u, 0u); 
     LCD_PrintInt16(get_temp()); 
        } 
} |   
     
  
 |