51单片机学习笔记_单片机sendbyte干嘛用的

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

如果你需要这些资料,可以戳这里获取

主机将总线拉低至少480us,然后释放总线,等待15 ~ 60us后,存在的从机会拉低总线60 ~ 240us响应主机,之后从机释放总线;分为两个部分:复位和响应。

/\*\*
 \* @brief 主机将总线拉低至少480us,然后释放总线,等待15 ~ 60us后,
 存在的从机会拉低总线60 ~ 240us响应主机,之后从机释放总线;
 分为两个部分:复位和响应。
 \* @param 
 \* @retval 
 \*/
unsigned char OneWire\_Init()
{
	unsigned char i;
	unsigned char AckBit;
	
	OneWire_DQ = 1;
	OneWire_DQ = 0;										// 拉低总线

	i = 247;
	while (--i);											// Delay 500us
	
	OneWire_DQ = 1;										// 释放总线
	
	i = 32;
	while (--i);											// Delay 70us
	
	AckBit = OneWire_DQ;							// 获取从机响应
	
	i = 247;
	while (--i);											// Delay 500us
	
	return AckBit;
}

发送一位

主机将总线拉低60 ~ 120us,释放总线,表示发送0;主机将总线拉低1 ~14us,释放总线,表示发送1。从机将在主机拉低30us后读取电平,整个时间片应该大于60us。


/\*\*
 \* @brief 主机将总线拉低60 ~ 120us,释放总线,表示发送0;
 主机将总线拉低1 ~ 14us,释放总线,表示发送1。
 从机将在主机拉低30us后读取电平,整个时间片应该大于60us。
 在10us附近判断是否释放总线即可
 \* @param 
 \* @retval 
 \*/
void OneWire\_SendBit(unsigned char Bit)
{
	OneWire_DQ = 0;									  // 拉低总线
	unsigned char i;
	
	i = 4;
	while (--i);											// Delay 10us
	
	OneWire_DQ = Bit;
	
	i = 24;
	while (--i);											// Delay 50us
	
	OneWire_DQ = 1;
}


接收一位

主机将总线拉低1 ~ 15us, 然后释放总线,并在拉低后15us内读取总线电平(尽量贴近15us末尾),读取低电平接收0,读取高电平接收1,整个时间片应该大于60us。

/\*\*
 \* @brief 主机将总线拉低1 ~ 15us, 然后释放总线,并在拉低后15us内读取总线电平(尽量贴近15us末尾),
 读取低电平接收0,读取高电平接收1,整个时间片应该大于60us。

 \* @param 
 \* @retval 
 \*/
unsigned char OneWrie\_ReceiveBit()
{
	unsigned char Bit;
	unsigned char i;
	
	OneWire_DQ = 0;
	
	i = 2;
	while (--i);											// Delay 5us
	
	OneWire_DQ = 1;
	
	i = 2;
	while (--i);											// Delay 5us
	
	Bit = OneWire_DQ;
	
	i = 24;
	while (--i);											// Delay 50us
	
	return Bit;
}

发送和接收一个字节
/\*\*
 \* @brief 发送一个字节
 \* @param Byte 发送的字节
 \* @retval 
 \*/
void OneWire\_SendByte(unsigned char Byte)
{
	unsigned char i;
	for(i = 0; i < 8; i++){
		OneWire\_SendBit(Byte&(0x01<<i));
	}
}
/\*\*
 \* @brief 接收一个字节
 \* @param 
 \* @retval 接收的数据
 \*/
unsigned char OneWire\_ReceiveByte()
{
	unsigned char i;
	unsigned char Byte = 0x00;
	for(i = 0; i < 8; i++){
		if(OneWire\_ReceiveBit()){
			Byte |= (0x01<<i);
		}
	}
	return Byte;
}

DS18B20操作流程
  • 初始化:从机复位,主机判断从机是否响应
  • ROM操作:ROM指令 + 本指令需要的读写操作
    在这里插入图片描述

ROM:

SEARCH ROM : 搜寻
READ ROM : 读
MATCH ROM : 匹配寻址
SKIP ROM :跳过,当接一个设备时使用
ALARM SEARCH :告警搜索

功能指令:

CONVERT T :温度变换
WRITE SCRATCHPAD:写
READ SCRATCHPAD:读暂存器内容
COPY SCRATCHPAD: 复制
RECALL E2:覆盖
READ POWER SUPPLY:响应供电方式,独立、寄生供电

  • 功能操作:功能指令 + 本指令需要的读写操作
DS18B20数据帧
  • 温度变化:初始化—>跳过ROM—>开始温度变换
  • 温度读取:初始化—>跳过ROM—>读暂存器—>连续的读操作

直流电机驱动

电机驱动电路
  • 大功率期间直接驱动
    不能调换正负方向
  • H桥驱动
    可以调控旋转方向
PWM电机调速

PWM 脉冲宽度调制,在具有惯性的系统中,可以通过对脉冲的宽度进行调制
在这里插入图片描述

代码实现

实现思路:通过定时器+中断+标志实现模拟出PWM

/\*\*
 \* @brief 中断处理
 \* @desc 通过定时器控制频率,Counter和Compare的比较控制占空比
 \* @param 无
 \* @retval 无
 \*/
void Timer0\_Routine() interrupt 1
{
	static unsigned int T0Count;
	TL0 = 0x9C;
	TH0 = 0xFF;
	Counter++;
	Counter%=100;
	if(Counter < Compare){
		LED = 1;
	} else {
		LED = 0;
	}
}

IIC总线

IIC概述

IIC百科
SPI、UART、RS232、RS485、IIC 5种嵌入式经典通信总线协议精讲

IIC时序结构
Start

起始条件:SCL高电平期间,SDA从高电平切换到低电平

在这里插入图片描述

/\*\*
 \* @brief 起始
 \* @param 
 \* @retval 
 \*/
void I2C\_Start(void)
{
	I2C_SDA = 1;
	I2C_SCL = 1;
	I2C_SDA = 0;
	I2C_SCL = 0;
}

Stop

终止条件:SCL高电平期间,SDA从低电平切换到高电平

在这里插入图片描述

/\*\*
 \* @brief 终止
 \* @param 
 \* @retval 
 \*/
void I2C\_Stop(void)
{
	I2C_SDA = 0;
	I2C_SCL = 1;
	I2C_SDA = 1;
}

发送一个字节

SCL低电平期间,主机将数据位一次放到SDA先上(高位在前)
拉高SCL电平,从机在SCL高电平期间读取数据位
如此循环8次即可读一个字节

在这里插入图片描述

/\*\*
 \* @brief 发送一个字节
 \* @param 
 \* @retval 
 \*/
void I2C\_SendByte(unsigned char Byte)
{
	unsigned char i;
	for(i = 0; i < 8; i++){
		I2C_SDA = Byte & (0x80 >> i);
		I2C_SCL = 1;
		I2C_SCL = 0;
	}
}

接收一个字节

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

如果你需要这些资料,可以戳这里获取

i);
I2C_SCL = 1;
I2C_SCL = 0;
}
}


##### 接收一个字节


[外链图片转存中...(img-5gZA8JxI-1715835488595)]
[外链图片转存中...(img-yegJNbhV-1715835488595)]

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新**

**需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)**

**[如果你需要这些资料,可以戳这里获取](https://bbs.youkuaiyun.com/topics/618679757)**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值