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

📄 ds2401.c

📁 dallas ID号芯片DS2401的读取
💻 C
字号:

#include "sys.h"
//******************************DS2401初始化*************************

unsigned char DS2401Init(void)
{
	unsigned char result;
	DelayNus(G);
	DS2401IO = 0; // Drives DQ low
	DelayNus(H);
	DS2401IO = 1; // Releases the bus
	DelayNus(I);
	if(DS2401IO==0)
	result = 1;
	else 
	result = 0;
	DelayNus(J); // Complete the reset sequence recovery
	return result; // Return sample presence pulse result
	//1代表初始化成功,0代表失败
}

//******************************发送读写命令*************************
void SendOrderToDS2401(unsigned char order)
{
	unsigned char Temp = 8;
	while(Temp)
		{
		if(order&0x80)
			{
			DS2401IO = 0;
			DelayNus(4);//拉低10us
			DS2401IO = 1;//拉高
			DelayNus(200);
			}
		else
			{
			DS2401IO = 0;
			DelayNus(100);//拉低100us
			DS2401IO = 1;//拉高
			DelayNus(200);
			}
		Temp--;
		order<<=1;
		}
 
}

//*****************************对2401写一位数据**********************
void DS2401WriteBit(bit b)
{
	if (b)
	{
	// Write '1' bit
	DS2401IO = 0; // Drives DQ low
	DelayNus(A);
	DS2401IO = 1; // Releases the bus
	DelayNus(B); // Complete the time slot and 10us recovery
	}
	else
	{
	// Write '0' bit
	DS2401IO = 0; // Drives DQ low
	DelayNus(C);
	DS2401IO = 1; // Releases the bus
	DelayNus(D);
	}
}

//*****************************对2401读一位数据**********************

unsigned char  DS2401ReadBit(void)
{
	unsigned char result;
	DS2401IO = 0; // Drives DQ low
	DelayNus(A);
	DS2401IO = 1; // Releases the bus
	DelayNus(E);
	result = DS2401IO ;; // Sample the bit value from the slave
	DelayNus(F); // Complete the time slot and 10us recovery
	return result;
}
//*****************************对2401写一个字节数据**********************

void OWWriteByte(int value)
{
	unsigned char loop;
	for (loop = 0; loop < 8; loop++)
	{
	DS2401WriteBit(value & 0x01);
	value >>= 1;
	}
}
//*****************************对2401读一个字节数据**********************

unsigned char OWReadByte(void)
{
	unsigned char loop, result=0;
	for (loop = 0; loop < 8; loop++)
	{
	result >>= 1;
	if (DS2401ReadBit())
	result |= 0x80;
	}
	return result;
}

//******************************读DS2401 ID 号*************************
void ReadDS2401ID(void)
{
	
	unsigned char Temp=0;
	while(1)
		{
		if(DS2401Init())
			{
			DS2401WorkOK = 1;//表示DS2401初始化成功
			break;
			}
		else Temp++;
		if(Temp>=10)
			{
			DS2401WorkOK=0;//初始化10次失败的化,表示DS2401工作不正常
			break;
			}
		}
	if(DS2401WorkOK)
		{
		OWWriteByte(0x33);//发送读命令码
		for (Temp=0;Temp<8;Temp++)
			{
			IDCode[Temp] = OWReadByte();//读一个字节,总共8个
			}
		}
 
}



































⌨️ 快捷键说明

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