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

📄 detectds2480stask.c

📁 DS2480芯片是实现1-wire协议的芯片。本驱动使用C8051F206单片机与DS2480芯片进行交互
💻 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 + -