51单片机ds18b20

温度传感器是比较简单的外设之一,学习51单片机都会学习ds18b20来学习51的ad转换。

ds18b20是通过iic总线来进行通行的,属于比较简单的模块之一,这里贴出ds18b20的驱动程序,调用时只要直接读取对应地址的数据即可。

 #include"temp.h"

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

uchar Ds18b20Start()
{
 uchar i;
 DSPORT=0;
 i=70;
 while(i--);
 DSPORT=1;
 i=0;
 while(DSPORT)
 {
  Delay1ms(1);
  i++;
  if(i>5)
  {return 0;}
 }
 return 1;
}

void Ds18b20WriteByte(uchar dat)
{
 uchar i,j;
 for(j=0;j<8;j++)
 {
  DSPORT=0;
  i++;
  DSPORT=dat&0x01;
  i=6;
  while(i--);
  DSPORT=1;
  dat>>=1;
 }
}

uchar Ds18b20ReadByte()
{
 uchar bi,byte;
 uint i,j;
 for(j=8;j>0;j--)
 {
  DSPORT=0;
  i++;
  DSPORT=1;
  i++;
  i++;
  bi=DSPORT;
  byte=(byte>>1)|(bi<<7);
  i=4;
  while(i--);
 }
 return byte;
}

void Ds18b20ChangeTemp()
{
 Ds18b20Start();
 Delay1ms(1);
 Ds18b20WriteByte(0xcc);
 Ds18b20WriteByte(0x44);
}

void Ds18b20ReadTempCom()
{
 Ds18b20Start();
 Delay1ms(1);
 Ds18b20WriteByte(0xcc);
 Ds18b20WriteByte(0xbe);
}

int Ds18b20ReadTemp()
{
 uchar tmh,tml;
 int temp=0;
 Ds18b20ChangeTemp();
 Ds18b20ReadTempCom();
 tml=Ds18b20ReadByte();
 tmh=Ds18b20ReadByte();
 temp=tmh;
 temp<<=8;
 temp|=tml;
 return temp;
}

你可能感兴趣的:(51单片机ds18b20)