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

📄 gsm-

📁 GSM室温监控系统
💻
字号:
/*DS18B20命令:
READ ROM                33H	 读rom
MATCH ROM		       			55H	 匹配rom
SKIP ROM                CCH	 跳过rom
SEARCH ROM              F0H	 搜索rom
ALARM ROM               ECH	 警告rom
WRITE SCRATCHPAD        4EH	 写暂存器
READ SCRATCHPAD         BEH	 读暂存器
COPY SCRATCHPAD					48H	 复制暂存器
COVERT T                44H	 温度转换开始
RECALL E2               B8H	 重调用E2存储器
READ POWER SUPPLY       B4H	 读供电方式
*/

#ifndef DS18B20_H
#define DS18B20_H
#include "common.h"

sbit DS18B20=P2^0;	//自已定义IO口

unsigned char L_18B20,H_18B20; //分别存放低八位 高八位的数据;
unsigned char fg=0,zhengshu,xiaoshu1,xiaoshu2;	//fg为负数标志位,zhengshu是温度的整数部分,xiaoshu1是十分位,xiaoshu2是百分位


void Reset_18B20(void);				//ds18b20复位程序
void Wait_18B20();					//等待程序,等待ds18b20应答
bit Readbit_18B20(void);			//读取一个bit的数据
unsigned char Readbyte_18B20(void); 	//读取一个字节的数据
void Writebyte_18B20(unsigned char b);	//写一个字节(控制字)
void Convert(void);						//开始转换
void Read_18B20(void);					//读取ds18b20


void Reset_18B20(void)//ds18b20复位程序
{
	unsigned char i;
	DS18B20=0;	 //拉低总线
	i=110;		  //等待
	while(i>0)i--;
	DS18B20=1;	  //释放
	i=6;
	while(i>0)i--;
}

void Wait_18B20()//等待程序,等待ds18b20应答
{
	unsigned char i=255;
	while(DS18B20)
	{
		i--;
		if(i==0)	return;	//超时
	}
	while(~DS18B20)
	{
		i--;
		if(i==0)	return;//超时

	}
	i=6;
	while(i>0)i--;
}

bit Readbit_18B20(void)	//读取一个bit的数据
{
	unsigned char i;
	bit b;
	DS18B20=0;//拉低总线电平
	i++;i++;   //一微妙延时
	DS18B20=1;	//拉高总线
	i++;i++;i++;i++;i++; //持续40us
	b=DS18B20;//读取总线电平
	i=13;
	while(i>0)i--;////持续40us
	return b;
}

unsigned char Readbyte_18B20(void) //读取一个字节的数据
{
	unsigned char i,j,b;
	b=0;
	for(i=1;i<=8;i++)
	{
		j=Readbit_18B20();
		b=(j<<7)|(b>>1);	//又玩野
	}
	return b;
}

void Writebyte_18B20(unsigned char b)//写一个字节(控制字)
{
   unsigned char j,i;
	bit temp;
	for(j=1;j<=8;j++)
	{
		temp=b&0x01;
		b=b>>1;
		if(temp) // 写“1”
		{
			DS18B20=0; //拉低总线
			i++;i++;i++;i++;i++; //延时 
			DS18B20=1; //释放总线
			i=13;
			while(i>0)i--;
		}
		else	 //写“0”
 		{
			DS18B20=0;
 			i=13;
			while(i>0)i--;
			DS18B20=1;
			i++;i++;i++;i++;i++;  
 		}	
	}
}

void Convert(void)				//开始转换
{
	Reset_18B20(); //复位
	Wait_18B20();						//等待应答脉冲
 	Writebyte_18B20(0xcc);	//跳过序列号脉冲,跳过ROM
	Writebyte_18B20(0x44);	//转换命令
}


void Read_18B20(void) //读取ds18b20
{	
	Convert(); //转换,
	Reset_18B20();//复位
	Wait_18B20(); //等待应答脉冲
 	Writebyte_18B20(0xcc);		//跳过ROM
	Writebyte_18B20(0xbe);  	//发送读取命令
	L_18B20=Readbyte_18B20();	//读取低八位数据
	H_18B20=Readbyte_18B20();	//读取高八位数据
	if(H_18B20>0x7f)      //最高位为1时温度是负
	{
		 L_18B20=~L_18B20;         //补码转换,取反加一
		 H_18B20=~H_18B20+1;       
		 fg=1;      //读取温度为负时fg=1
   }
	zhengshu=L_18B20/16+H_18B20*16; //整数部分
	xiaoshu1=(L_18B20&0x0f)*10/16; //小数第一位
	xiaoshu2=(L_18B20&0x0f)*100/16%10;//小数第二位

}

#endif


















⌨️ 快捷键说明

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