(高分求助)DS18b20仿真正确了,但拷入单片机后数码管始终显示255,不能正确读出温度。

来源:百度知道 编辑:UC知道 时间:2024/05/26 14:47:47
void main(void)
{
InitTS();
GetTempTS();
while(1)
{
display();
}

}
void delay(uchar a)
{
unsigned i,j;
for(i=0;i<a;i++)
for(j=0;j<200;j++);
}

void Delay100ms()
{
uchar i,j,k;
for(i=0;i<8;i++)
for(j=0;j<25;j++)
for(k=0;k<250;k++);
}

void Delay15()
{
uchar i;
for(i=0;i<8;i++);
}

void Delay60()
{
uchar i;
for(i=0;i<30;i++);
}

void Write0TS()
{
TSOR=1;
TSOR=0;
Delay15();
Delay15();
Delay15();
Delay15();
TSOR=1;
_nop_();
_nop_();
}

void Write1TS()
{
TSOR=1;
TSOR=0;
_nop_();
_nop_();
_nop_();
TSOR=1;

时序有问题,程序没有什么错误。

我好迷茫啊

时序的问题吧,仿真能读出温度吗?

仿真真的是不能信.最好不用.你用KILE软件单步测试下程式,会不会是别的原因.
18B20换一个

绝对能用
//这是一个温度采集模块的驱动程序。
//--------------delay.c--------------------
void delay(unsigned int delay_time) //延时子程序
{for(;delay_time>0;delay_time--)
{}
}
//------------DS18B20控制命令-----------------------------
#define T_CONVER 0x44 //开始温度转换
#define T_CONFIG 0x5f //11位转换
#define T_READ 0xbe //读暂存器
#define T_WRITE 0x4e //写暂存器
#define T_ROM_JMP 0xcc //忽略64ROM地址
#define T_COPY_E2 0x48 //将温度上下限数值写到E2ROM
#define T_RECALL_E2 0xb8 //将E2中存储的温度上下限数值复制到上下限寄存器中。
#define T_cont 0.0625 //温度转换常数
//------------------------------------------------------
sbit DQ=P3^3; //DS18B20数据输出端
bit REC_suc=0; //DS18B20成功复位标志位
bit T_sign; //温度正负符号
float temp=0; //转换好的温度数值
signed char temp_TH=25,temp_TL=18; //温度上下限
unsigned char t_bai,t_shi,t_ge,t_feng; //温度转换好的各个位
void DS18B20_