📄 detectds2480stask.c
字号:
//-----------------------------------------------------------------------------
// DetectDS2480STask.c
//-----------------------------------------------------------------------------
// 版权所有 2008 黄晓斌, 空军雷达学院.
// http://blog.xiaobing.org
//
// 文件描述: TODO
//
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// 头文件调用
//-----------------------------------------------------------------------------
#include <C8051F200.h> // SFR declarations
#include "Data.h"
#include "DS2480B.h"
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// 函数原型申明
//-----------------------------------------------------------------------------
extern void ChangeState(unsigned char, unsigned char);
extern void WriteData(char *, unsigned int);
extern char ReadData(char *, unsigned int, unsigned int);
extern void Wakeup(unsigned char);
extern void ResetReceBuf(void);
extern void DelayMS(unsigned int);
extern void ReadROMIDTask(void);
//-----------------------------------------------------------------------------
void DetectDS2480STask()
{
unsigned char buf[8];
unsigned char pos;
ChangeState(DETECTDS2480STASK, RUNNING);
//Step 1. 发送Generated Reset Pulse命令码
pos = 0;
buf[pos++] = 0xC1;
buf[pos++] = 0xC1;
WriteData(buf, pos);
//Step 2. 延时2ms
DelayMS(2);
//Step 3. 发送配置命令
pos = 0;
// set the FLEX configuration parameters, default PDSRC = 1.37Vus
buf[pos++] = CMD_CONFIG | PARMSEL_SLEW | PARMSET_Slew1p37Vus;
// default W1LT = 10us
buf[pos++] = CMD_CONFIG | PARMSEL_WRITE1LOW | PARMSET_Write10us;
// pos DSO/WORT = 8us
buf[pos++] = CMD_CONFIG | PARMSEL_SAMPLEOFFSET | PARMSET_SampOff8us;
// construct the command to read the baud rate (to test command block)
buf[pos++] = CMD_CONFIG | PARMSEL_PARMREAD | (PARMSEL_BAUDRATE >> 3);
// also do 1 bit operation (to test 1-Wire block)
buf[pos++] = CMD_COMM | FUNCTSEL_BIT | SPEEDSEL_FLEX | BITPOL_ONE;
ResetReceBuf();
WriteData(buf, pos);
//Step 4. 读取响应码进行判断
if ( ReadData(buf, 5, 5*READTIMEOUT_PER_BYTE) &&
(buf[3] & 0xF1) == 0x00 && (buf[3] & 0x0E) == PARMSET_9600 &&
(buf[4] & 0xF0) == 0x90 && (buf[4] & 0x0C) == SPEEDSEL_FLEX )
{
//Step 5. 设置为命令模式,并以Reset命令结束
pos = 0;
buf[pos++] = 0xE3;
buf[pos++] = 0xC1;
WriteData(buf, pos);
ChangeState(DETECTDS2480STASK, SLEEPING);
}
else
ChangeState(DETECTDS2480STASK, READY);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -