📄 ds2401.c
字号:
#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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -