当前位置:首页 > 单片机 > 单片机
[导读]sbit DQ=P3^7; //DS18B20数据传输线接单片机的相应的引脚void delaymm(uint z){ uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}//向DS18B20读一字节数据 ,从低位开始读ReadOneChar(void) { unsigned char i=0;

 

sbit DQ=P3^7; //DS18B20数据传输线接单片机的相应的引脚

 

void delaymm(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

 

//向DS18B20读一字节数据 ,从低位开始读

ReadOneChar(void)

{

unsigned char i=0;

unsigned char dat=0;

for (i=8;i>0;i--)

{

DQ=1;

delay(1);

DQ=0;

dat>>=1; //把读到的左移一位,形成了一个字节

DQ=1;

if(DQ)

dat|=0x80; //如果最DQ是1的话,最高位置1

delay(4);

}

return(dat);

}

 

//向DS18B20写一字节数据,从最低位开始写

void WriteOneChar(unsigned char dat)

{

unsigned char i=0;

for(i=8;i>0;i--)

{

DQ=0;

DQ=dat&0x01; //如果最低位是1的话则写1

delay(5);

DQ=1;

dat>>=1; //左移一位,如把i = 8,经过比较,符合,i = 7是第一次左移一位,使之在下一个循环比较的是第二位&0X01

}

delay(4);

}

 

void Init_DS18B20(void)/*函数功能:DS18B20初始化子程序*/

{

unsigned char x=0;

DQ=1; //DQ先置高

delay(8); //延时

DQ=0; //发送复位脉冲

delay(85); //延时(>480ms)

DQ=1; //拉高数据线

delay(14); //等待(15~60ms)

}

 

//函数功能:向DS18B20读温度值

ReadTemperature(void)

{

Init_DS18B20(); //初始化

WriteOneChar(0xcc); //跳过读序列号的操作

WriteOneChar(0x44); //启动温度转换

delaymm(125); //转换需要一点时间,延时

Init_DS18B20(); //初始化

WriteOneChar(0xcc); //跳过读序列号的操作

WriteOneChar(0xbe); //读温度寄存器(头两个值分别为温度的低位和高位)

delaymm(125);

tempL=ReadOneChar(); //读出温度的低位LSB

tempH=ReadOneChar(); //读出温度的高位MSB

//温度转换,把高低位做相应的运算转化为实际温度

temperature=((tempH*256)+tempL)*0.0625;

delay(200);

return(temperature);

}

 

 

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭