我的时序没错啊,为什么在PROTEUS仿真上就是显示不出来呢,求解,谢谢!
uchar reset()
{
uchar i;
uchar presencesignal;
ds18s20_DQ=0;
for(i=240;i>0;i--); //延时480um
ds18s20_DQ=1;
for(i=40;i>0;i--);
presencesignal=ds18s20_DQ;
for(i=200;i>0;i--);
return(presencesignal);
}
void writedata(char val)
{
uchar i,j;
for(i=8;i>0;i--)
{
ds18s20_DQ=0;
for(j=2;j>0;j--);//yanshi
ds18s20_DQ=val&0x01;
for(j=30;j>0;j--);//yanshi
ds18s20_DQ=1;
val>>=1;
}
}
uchar readdata()
{
uchar i,j;
uchar ds1820_rdat;
for(i=8;i>0;i--)
{
ds1820_rdat>>=1;
ds18s20_DQ=0;
for(j=5;j>0;j--);//yanshi
ds18s20_DQ=1;
for(j=4;j>0;j--);//yanshi
if(ds18s20_DQ==1)
ds1820_rdat|=0x80;
for(j=30;j>0;j--);
ds18s20_DQ=1;
}
return(ds1820_rdat);
}
int readtemperature()
{
uchar data temperature[2];
uchar i;
int temp;
reset();
writedata(0xcc);
writedata(0x44);
reset();
writedata(0xcc);
writedata(0xbe);
for(i=0;i<2;i++)
{
temperature[i]=readdata();
}
reset();
temp=(WORD)temperature[1]*256+temperature[0];
return(temp);
} |