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

相关推荐
草莓熊Lotso2 分钟前
PyCharm 从入门到高效:安装教程 + 快捷键速查表
开发语言·ide·经验分享·笔记·其他
一位搞嵌入式的 genius9 分钟前
ES6 核心特性详解:从变量声明到函数参数优化
前端·笔记·学习
lingran__24 分钟前
C语言制作扫雷游戏(拓展版赋源码)
c语言·算法·游戏
序属秋秋秋25 分钟前
《C++进阶之STL》【set/map 使用介绍】
开发语言·c++·笔记·leetcode·stl·set·map
zgc124536729 分钟前
51单片机基础day3
单片机·嵌入式硬件·51单片机
竹照煜_ysn40 分钟前
STM32——WDG看门狗
stm32·单片机·嵌入式硬件
77qqqiqi1 小时前
学习结构体
c语言·学习
学习噢学个屁1 小时前
基于STM32智能阳台监控系统
c语言·stm32·单片机·嵌入式硬件
肥肠可耐的西西公主1 小时前
后端(fastAPI)学习笔记(CLASS 1):扩展基础
笔记·学习·fastapi
對玛祷至昏2 小时前
算法学习路径
学习·算法·排序算法