小白一个,自写ds18b20时序,求大神指点哪错了

2019-07-18 09:29发布

#include<wendu.h>

void Delay1ms(u8 y)
{
u8 x;
for( ; y>0; y--)
{
  for(x=110; x>0; x--);
}
}

void delay1us(u8 i)
{
do{_nop_();}while(--i);
}
void delay25us(u8 i)
{
do{_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();}while(--i);
}
u8 ds18b20init()
{
DSPORT=0;
delay25us(25);
DSPORT=1;
delay25us(4);
if(!DSPORT)
   return 1;
else
  return 0;
}
void ds18b20write(u16 date)
{
   u8 i;
for(i=0;i<=7;i++)
{
    DSPORT=0;
    delay1us(3);
    DSPORT=DSPORT&0x01;
    delay25us(2);
   
    DSPORT=1;
    date>>=1;
}
}
u16 ds18b20read()
{
  u8 i;u16 date;
for(i=0;i<=7;i++)
{
   DSPORT=0;
   
   date>>=1;
    DSPORT=1;
   if(DSPORT)
    date|=0x80;
    delay25us(1);
   DSPORT=1;   
}
return date;
}
u16 ds18b20temp()
{
int temp = 0;
u16 tmh, tml;

delay1us(1);
ds18b20init();
ds18b20write(0xcc);
ds18b20write(0x44);  
  Delay1ms(1);
ds18b20init();
  Delay1ms(1);
ds18b20write(0xcc);
ds18b20write(0xbe);
tml= ds18b20read();
tmh= ds18b20read();
temp = tmh;
temp <<= 8;
temp |= tml;
return temp;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。