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

相关推荐
学linux的QQ蛋1 分钟前
IMX6 嵌入式多传感器系统整体架构梳理
linux·嵌入式硬件·架构
kaixin_learn_qt_ing2 分钟前
QCommandLineParser 学习
学习
zhaoshuzhaoshu4 分钟前
什么是信号量?信号量的种类、使用方法与 STM32 案例
嵌入式硬件
雨田言炎10 分钟前
STM32之ADC--电压采集
stm32·单片机·嵌入式硬件
远翔调光芯片^1382879887217 分钟前
大型洗地机刷盘电机怎么驱动?轴向磁通电机+无感FOC方案解析
科技·单片机·嵌入式硬件·智能家居·能源
服务器硬件项目经理25 分钟前
第3章GPU vs CPU:为什么AI训练要用GPU
服务器·人工智能·嵌入式硬件·gru·硬件工程·硬件
小诗懂技术36 分钟前
V4L2视频采集流程复习笔记
笔记·mysql·音视频
minglie11 小时前
幂电枢与幂剩余
学习
优化Henry1 小时前
5G站点AAS-3设备故障排查与处理
运维·学习·5g·信息与通信
en.en..1 小时前
volatile 完整深度教程(C 代码 + 带注释 ARM 汇编 + 硬件中断原理 + 分步运行时序)
c语言·汇编·arm开发