ds2401.c

来自「LPC213x系列启动代码,支持ADS1.2编译器,已成功运行」· C语言 代码 · 共 118 行

C
118
字号
#include "config.h"

UCHAR ucUnique[8];

void DelayUS(UWORD x)
{
	UWORD i,j;
	
	x = x + x / 30;
	for(i = 0; i < x; i++) 
	{
		for(j = 0; j < 6; j++) ;
	}
}//void DelayUS(WORD x)

void WriteOne(void)
{
	SET_LINE_OUT();
	
	SET_LINE_LOW();
	DelayUS(6);
	
	SET_LINE_HIGH();
	DelayUS(64);	
}//void WriteOne(void)

void WriteZero(void)
{
	SET_LINE_OUT();
	
	SET_LINE_LOW();
	DelayUS(64);
	
	SET_LINE_HIGH();
	DelayUS(6);
}//void WriteZero(void)

CHAR ReadBit(void)
{
	CHAR temp;
	
	SET_LINE_OUT();
	
	SET_LINE_LOW();
	DelayUS(6);
	
	SET_LINE_HIGH();
	DelayUS(9);
	
	SET_LINE_IN();
	if(READ_LINE_DATA()) temp = 1; else temp = 0;
	DelayUS(64);
	
	return temp;
}//CHAR ReadBit(void)

CHAR ResetDS2401(void)
{
	CHAR temp;
	
	SET_LINE_OUT();
	
	SET_LINE_LOW();
	DelayUS(480);
	
	SET_LINE_HIGH();
	DelayUS(70);
	
	SET_LINE_IN();
	if(READ_LINE_DATA()) temp = 1; else temp = 0;
	
	return temp;
}//CHAR ResetDS2401(void)

void SendReadCmd(void)
{
	CHAR temp;
	CHAR i;
	
	temp = 0x33;
	for(i = 0; i < 8; i++)
	{
		if(temp & 0x01) WriteOne(); else WriteZero();
		temp = temp >> 1;
	}
}//void SendReadCmd(void)

void ReadUnique(void)
{
	UCHAR i,j,temp;
	
	for(i = 0; i < 8; i++)
	{
		temp = 0;
		for(j = 0; j < 8; j++)
		{
			if(ReadBit()) temp |= (1 << j); else temp &= ~(1 << j);			
		}
		ucUnique[i] = temp;
	}
}//void ReadUnique(void)

void ReadDS2401(void)
{
	if(ResetDS2401() == 0)
	{
		DelayUS(410);
		SendReadCmd();
		ReadUnique();
	}
}//void ReadDS2401(void)






⌨️ 快捷键说明

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