单片机学习笔记.单总线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;
}

相关推荐
是上好佳佳佳呀1 分钟前
【LangChain|Day02】LangChain Prompt 提示词工程笔记
笔记·langchain·prompt
wuminyu1 分钟前
Java锁膨胀机制之偏向锁到轻量级锁源码剖析
java·linux·c语言·jvm·c++
智码看视界2 分钟前
老梁聊全栈系列:Vue2与Vue3核心区别及学习路线指南
前端·vue.js·学习
jinxindeep2 分钟前
Dexterity-BEV:跨本体&跨相机&Action三维空间对齐,推动通用机器人策略学习
数码相机·学习·机器人
十月的皮皮5 分钟前
C语言学习笔记20260611-水仙花数(2种解法)
c语言·笔记·学习
Alphapeople6 分钟前
策略学习笔记
笔记·学习
AI_零食8 分钟前
HarmonyOS ArkTS 类型转换机制深度解析
学习·华为·harmonyos·鸿蒙
vortex59 分钟前
苏格拉底学习法:通过提问驱动的深度思考
学习
XINVRY-FPGA11 分钟前
XC7A100T-2CSG324I AMD Xilinx Artix-7 FPGA
arm开发·人工智能·嵌入式硬件·神经网络·fpga开发·硬件工程·fpga
Cloud_Shy61812 分钟前
解读《Effective Python 3rd Edition》:从练气到老魔(第五章 Item 36 - 39)
开发语言·人工智能·笔记·python