单片机学习笔记.单总线one-wire协议(这里以普中开发板DS18B20为例)

硬件原理图:


DS18B20数据图:


首先根据原理图定义对应引脚:

cpp 复制代码
sbit OneWire_DQ=P3^7;

one-wire时序图:

one-wire初始化:

初始化时序分析:

cpp 复制代码
unsigned char OneWire_Init(void)
{
	unsigned char AckBit;
	OneWire_DQ=1;
	OneWire_DQ=0;
  Delay500us();
	OneWire_DQ=1;
	Delay70us();
	AckBit=OneWire_DQ;
	Delay500us();
	return AckBit;
}

one-wire读/写 1位:

one-wire读/写 1位 时序分析:


写一个位:

cpp 复制代码
//写一个位
void OneWire_SendBit(unsigned char Bit)
{
	OneWire_DQ=0;
	Delay14us();//10us
	OneWire_DQ=Bit;
	Delay54us();//50us
	OneWire_DQ=1;
}

接收一位:

cpp 复制代码
//接收一位
unsigned char OneWire_ReciveBit(void)
{
	unsigned char Bit;
	OneWire_DQ=0;
	Delay9us();//5us
	OneWire_DQ=1;
	Delay9us();//5us
	Bit=OneWire_DQ;
	Delay54us();//50us
	return Bit;
}

写入1个字节:

cpp 复制代码
//写入一个字节
void OneWire_SendByte(unsigned char Byte)
{
	unsigned char i;
	for(i=0;i<8;i++)
	{
		OneWire_SendBit(Byte&(0x01<<i));
	}
}

发送1个字节:

cpp 复制代码
//发送1个字节
unsigned char OneWire_ReciveByte(void)
{
	unsigned char Byte=0x00;
	unsigned char i;
	for(i=0;i<8;i++)
	{
		if(OneWire_ReciveBit()){Byte|=(0x01<<i);}
	}
	return Byte;
}

相关推荐
HERR_QQ9 分钟前
强化学习的数学原理 学习笔记
人工智能·笔记·学习·自动驾驶
省四收割者1 小时前
一文详解信号完整性(1)
python·嵌入式硬件·数学建模·信息与通信·信号处理·智能硬件
MartinYeung51 小时前
[论文学习]DP-Fusion:面向大语言模型的令牌级差分隐私推理-深度解析
人工智能·学习·语言模型
崇山峻岭之间2 小时前
单片机无感FOC驱动之ADC
单片机·嵌入式硬件
zwenqiyu2 小时前
非线性字符串数据结构串讲
数据结构·c++·学习·算法
Ligocious2 小时前
1.点亮一颗小小的LED
单片机·嵌入式硬件
MartinYeung53 小时前
[论文学习]SecureGate:通过令牌级门控学习何时安全地揭示PII-深度解析
学习·安全
文祐3 小时前
C语言用双向链表实现单调递减(递增)队列
c语言·开发语言·链表
大鱼>4 小时前
超参数调优进阶:Optuna/Bayesian/Early Stopping
人工智能·学习·机器学习·聚类
liuyicenysabel4 小时前
多服务上线日记二:
服务器·笔记·学习