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

相关推荐
c7699 分钟前
【文献笔记】ARS: Automatic Routing Solver with Large Language Models
人工智能·笔记·语言模型·自然语言处理·llm·论文笔记·cvrp
2301_7931210429 分钟前
基于单片机的猪舍空气环境监测系统设计
单片机·嵌入式硬件
宴之敖者、31 分钟前
数组——初识数据结构
c语言·开发语言·数据结构·算法
青小莫34 分钟前
c语言-数据结构-二叉树OJ
c语言·开发语言·数据结构·二叉树·力扣
Tracy97341 分钟前
A316-Mini-V1:超小尺寸USB高清音频解码器模组技术探析
嵌入式硬件·音视频·智能硬件·xmos 模组
cherishSpring1 小时前
Redis学习笔记
redis·笔记·学习
★YUI★1 小时前
学习游戏制作记录(战斗系统简述以及击中效果)7.22
学习·游戏
亿道电子Emdoor2 小时前
[ARM]MDK出现报错error: A\L3903U的解决方法
arm开发·stm32·单片机·arm
CC呢2 小时前
基于单片机智能消毒柜设计
stm32·单片机·嵌入式硬件·消毒柜
悲伤小伞2 小时前
Linux_Ext系列文件系统基本认识(一)
linux·运维·服务器·c语言·编辑器