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

📄 ds18b20.c

📁 使用C8051F实现脉搏及血氧饱和度测量 包括均值滤波
💻 C
字号:
#include <c8051f020.h>                    
#include <intrins.h>
sbit DataPortDS1820 = P3^6;   
void Delay1us(unsigned char us)  //延时
{
	while (us)
	{
		_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
		--us;
	}
}
void Delay15us(void)  
{
	Delay1us(15);                  //延时15秒
}
void Delay10us(void)
{	
	Delay1us(10);
}
bit RstDS1820(void)		//返回0-有设备连接1-无设备连接
{
	unsigned char i;
	bit RstFlag;
	RstFlag=1;	
	DataPortDS1820=0;
	for (i=0;i<40;i++)      	//480us 延时
		Delay15us(); 
	DataPortDS1820=1;
	for(i=0;i<4;i++)			//15us-60us 延时
	{
		Delay15us();
	}
	for (i=0;i<16;i++)			//60us-240us 延时
	{
		Delay15us();
		if (DataPortDS1820==0) RstFlag=0;
	}
	for (i=0;i<16;i++)			//240us
	{
		Delay15us();
	}
	return RstFlag;	
}
void WriteDS1820(unsigned char ch)
{
unsigned char i;
	DataPortDS1820=1;
	Delay1us(1);
	for (i=0;i<8;i++)
	{
		EA=0;
		DataPortDS1820=0;
		Delay15us();
		DataPortDS1820=ch&0x1;
		EA=1;
		Delay15us();Delay15us();Delay15us();
		DataPortDS1820=1;
		ch=ch>>1;
		Delay1us(1);
	}
}
unsigned char ReadDS1820(void)
{
	unsigned char i,ch;
	ch=0;
	DataPortDS1820=1;
	Delay1us(1);
	for (i=0;i<8;i++)
	{
		EA=0;
		DataPortDS1820=0;
		Delay10us();
		DataPortDS1820=1;
		Delay1us(2);
		ch=ch>>1;
		if (DataPortDS1820==1)
		{
			ch=ch+0x80;
		}
		EA=1;
		Delay15us();Delay15us();Delay15us();
	}	
	return ch;
}
void SkipROMCode(void)       //主机发跳过读序列号的操作命令:0xcc
{
	RstDS1820();
	WriteDS1820(0xcc);
}
void StartADC(void)
{
	RstDS1820();			//复位
	WriteDS1820(0xcc);		//广播
	WriteDS1820(0x44);		//启动温度转换转换 12bit700ms
}
unsigned int GetTempValue(void)//读取温度值的程序
{
	unsigned char i,j;        
	unsigned int T;
	SkipROMCode();
	WriteDS1820(0xBE);  //发布读取温度值的命令(0xBE)
	i=ReadDS1820();
	j=ReadDS1820();
	StartADC();
	T=i+j*256;
	return T;
}

		

⌨️ 快捷键说明

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