⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds18b20.c

📁 使用51单片机作为控制器
💻 C
字号:
//////////////////////////////////温度检测DS18B20////////////////////////////////////
//晶振由原来的11.059M变为32M
#include<at89x52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint  unsigned int

sbit TMPort=P3^4;
uchar TempH,TempL,TempInt,TempDec;

unsigned char code TemTab[16]={0,0,1,1,2,3,3,4,5,5,6,6,7,8,8,9}; 

bit flag;
void TempDelay (uchar us)
{
  while(us--);
}

void Init18b20 (void)
{
	 EA=0;
     flag=0;
     do
     {
		 TMPort=1;       //拉高数据线TMPort
	     _nop_(); _nop_(); _nop_();//保持一个周期
		 TMPort=0;       //发送530us的低电平复位脉冲
		 TempDelay(154);   //delay 530 uS
		 TMPort=1;        //释放TMPort
		 TempDelay(29);   //delay 100 uS
		
		 if(TMPort==0)        //如果TMPort为低电平则复位成功
		  flag = 1;   //detect 1820 success!
		 else
		  flag = 0;    //detect 1820 fail!
		 TempDelay(34); //应答脉冲时间140us
		 TMPort = 1;
     }
     while(!flag);
	 EA=1;
}

uchar ReadByte (void)     //读取单字节
{
	 uchar i,u=0;
	 EA=0;
	 for(i=0;i<8;i++)
	 {
		  TMPort = 0;          //保持低电平1us以上
		  u >>= 1;
		  TMPort = 1;          //释放总线
          TempDelay (6);       //在15us以后18B20输出才有效
		  if(TMPort==1)
		  u |= 0x80;
		  TempDelay (10);       //读时候间隔
		  EA=1;
	 }
	 return(u);
}

void WriteByte (uchar wr)  //单字节写入
{
	 uchar i;
     EA=0;
	 for (i=0;i<8;i++)
	 {
		  TMPort = 0;
		  _nop_();_nop_();_nop_();
		  TMPort=wr&0x01;
		  TempDelay(21);   //delay 45 uS //5
		  TMPort=1;
		  wr >>= 1;
	 }
	 EA=1;
}
void convert(void)    //启动温度检测
{
	Init18b20();
    WriteByte(0xCC);//跳过ROM
    WriteByte(0x44);//温度转换 
}

void readtemp(void)
{
	Init18b20();
    WriteByte(0xCC);//跳过ROM
    WriteByte(0xbe);//读取温度
    TempL=ReadByte();//温度低字节,(低4位为二进制的小数部分)
    TempH=ReadByte();//温度高字节,(高5位为符合位)
}

void tempconform(void)
{  
	TempInt=(TempL>>4&0x0f)|(TempH<<4&0xf0);//整数部分   
    TempDec=TemTab[TempL&0x0f];
}

void TempDetect(void)                  //测量温度函数
{
   convert();
   readtemp();
   tempconform();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -