当前位置: 首页 > news >正文

嵌入式自学第四十二天

PWM:脉冲宽度调制,调节电压为方波。关键参数:占空比、周期。

UART:通用异步收发器。

参与通信的设备:主机host

通信的本质:数据的传递。

通信方式:

        单工:只能单向传递

        半双工:双向传递,但同时刻只能单向。

        全工:同时刻可双向

数据本身以电信号(二进制)方式存储在内存。

并行通信:两个设备间数据线有两根或以上进行数据传输。

关键参数:带宽(数据线个数),频率(每根数据线传输速率)。

串行通信:一位一位电信号传输。

usb统一串行总线。

UART串口:特殊串行通信方式,全双工。异步通信:无时钟线

两根数据线,一根收RXD,一根发TXD。

二者未通信时:高电平。

通信时有个起始位:低电平。

数据位:低位先行:bit0   LSB          bit7     MSB

校验位:奇偶校验

发送方统计数据位中 1 的个数。
② 根据奇/偶规则设置校验位(补 0 或 1 使总数满足奇/偶性)。
③ 接收方重新计算并比对校验位。

停止位:高电平

传输速率:波特率,bit per second   bit/s   每秒传输多少bit,常见:1200 2400 4800 9600 115200

9600 n 8  1 发960字节     n 无校验   e奇校验   o偶校验。

// 同步通信::I2C  半双工:  SDA数据线   SCL时钟线,用时钟线完成数据传输速率同步。

UART串口空闲时高电平(5V)。

不同的高低电平物理表现:

TTL:晶体管逻辑:通常指芯片引脚电压。

I电气电子工程师学会(IEEE),RS232规定 -3 ~  -15高电平, 3  ~ 15低电平

RS485:采用压差:高电平:+7 ~ +12   低电平: -7  ~   -12。双绞线传输远

程序下载:

  

ch340:串口信号转化为usb信号,windows识别串口comn。

UART里有个SBUF寄存器,包括两个缓冲区用于收发数据。

以下是添加注释后的代码,解释每个关键部分的含义:

初始化串口配置

void init_uart(void)
{// 配置串口控制寄存器SCON// 清除SM0和SM1位(模式选择位)SCON &= ~(3 << 6);// 设置为模式1(8位UART,可变波特率)并启用接收SCON |= (1 << 6) | (1 << 4);// 配置电源控制寄存器PCON// 确保SMOD0位为0(帧错误检测禁用)PCON &= ~(1 << 6);// 设置SMOD1位为1(波特率加倍)PCON |= (1 << 7);// 配置定时器1为模式2(8位自动重装)TMOD &= ~(0x0f << 4);TMOD |= (2 << 4);// 设置定时器1的初始值(波特率9600,晶振11.0592MHz)TL1 = 232;TH1 = 232;// 启动定时器1TCON |= (1 << 6);
}

发送单个字符

void send_char(char ch)
{// 将字符写入串口数据缓冲寄存器SBUFSBUF = ch;// 等待发送完成(检测TI标志位)while((SCON & (1 << 1)) == 0);// 清除发送中断标志位SCON &= ~(1 << 1);
}

发送缓冲区数据

void send_buffer(const char *p, unsigned int len)
{// 循环发送缓冲区中的每个字符while(len--){send_char(*p++);}
}

关键点说明

  • 波特率计算:当晶振为11.0592MHz时,定时器1重装值232对应9600波特率(SMOD1=1时加倍)。
  • 模式选择:SCON的SM0和SM1位组合选择串口工作模式(此处为模式1)。
  • 自动重装:定时器1模式2(8位自动重装)适合波特率生成。
  • TI标志:发送完成后需手动清除TI位,否则无法发送下一字节。

定义前加xdata的作用

在嵌入式系统中,xdata是Keil C51编译器中的一个存储类型修饰符,用于指定变量存储在外部RAM(Extended Data Memory)而非内部RAM中。内部RAM容量有限(通常为256字节),而外部RAM可扩展至64KB。通过xdata声明变量,可以避免内部RAM空间耗尽。

具体实现方法

直接使用xdata修饰变量定义:

xdata uint8_t buffer[1024];  // 将1024字节数组分配到外部RAM
xdata int sensor_value;      // 将整型变量分配到外部RAM

注意事项

  • 访问速度:外部RAM的访问速度比内部RAM慢,频繁操作的变量建议保留在内部RAM。
  • 硬件支持:需确保硬件已连接外部RAM芯片,且编译器配置正确(如XDATA段大小设置)。
  • 默认存储类型:未指定存储类型时,编译器可能根据内存模型(如Small/Compact/Large)自动分配,显式使用xdata可强制指定。

其他存储类型对比

  • data:直接寻址的内部RAM(0-127字节),访问最快。
  • idata:间接寻址的内部RAM(128-255字节)。
  • pdata:分页访问的外部RAM(256字节页)。

合理分配变量存储类型可优化性能和资源利用率。

定义前加xdata的作用

在嵌入式系统中,xdata是Keil C51编译器中的一个存储类型修饰符,用于指定变量存储在外部RAM(Extended Data Memory)而非内部RAM中。内部RAM容量有限(通常为256字节),而外部RAM可扩展至64KB。通过xdata声明变量,可以避免内部RAM空间耗尽。

具体实现方法

直接使用xdata修饰变量定义:

xdata uint8_t buffer[1024];  // 将1024字节数组分配到外部RAM
xdata int sensor_value;      // 将整型变量分配到外部RAM

注意事项

  • 访问速度:外部RAM的访问速度比内部RAM慢,频繁操作的变量建议保留在内部RAM。
  • 硬件支持:需确保硬件已连接外部RAM芯片,且编译器配置正确(如XDATA段大小设置)。
  • 默认存储类型:未指定存储类型时,编译器可能根据内存模型(如Small/Compact/Large)自动分配,显式使用xdata可强制指定。

其他存储类型对比

  • data:直接寻址的内部RAM(0-127字节),访问最快。
  • idata:间接寻址的内部RAM(128-255字节)。
  • pdata:分页访问的外部RAM(256字节页)。

合理分配变量存储类型可优化性能和资源利用率。

定义前加xdata的作用

在嵌入式系统中,xdata是Keil C51编译器中的一个存储类型修饰符,用于指定变量存储在外部RAM(Extended Data Memory)而非内部RAM中。内部RAM容量有限(通常为256字节),而外部RAM可扩展至64KB。通过xdata声明变量,可以避免内部RAM空间耗尽。

具体实现方法

直接使用xdata修饰变量定义:

xdata uint8_t buffer[1024];  // 将1024字节数组分配到外部RAM
xdata int sensor_value;      // 将整型变量分配到外部RAM

注意事项

  • 访问速度:外部RAM的访问速度比内部RAM慢,频繁操作的变量建议保留在内部RAM。
  • 硬件支持:需确保硬件已连接外部RAM芯片,且编译器配置正确(如XDATA段大小设置)。
  • 默认存储类型:未指定存储类型时,编译器可能根据内存模型(如Small/Compact/Large)自动分配,显式使用xdata可强制指定。

其他存储类型对比

  • data:直接寻址的内部RAM(0-127字节),访问最快。
  • idata:间接寻址的内部RAM(128-255字节)。
  • pdata:分页访问的外部RAM(256字节页)。

合理分配变量存储类型可优化性能和资源利用率。

定义前加xdata的作用

在嵌入式系统中,xdata是Keil C51编译器中的一个存储类型修饰符,用于指定变量存储在外部RAM(Extended Data Memory)而非内部RAM中。内部RAM容量有限(通常为256字节),而外部RAM可扩展至64KB。通过xdata声明变量,可以避免内部RAM空间耗尽。

具体实现方法

直接使用xdata修饰变量定义:

xdata uint8_t buffer[1024];  // 将1024字节数组分配到外部RAM
xdata int sensor_value;      // 将整型变量分配到外部RAM

注意事项

  • 访问速度:外部RAM的访问速度比内部RAM慢,频繁操作的变量建议保留在内部RAM。
  • 硬件支持:需确保硬件已连接外部RAM芯片,且编译器配置正确(如XDATA段大小设置)。
  • 默认存储类型:未指定存储类型时,编译器可能根据内存模型(如Small/Compact/Large)自动分配,显式使用xdata可强制指定。

其他存储类型对比

  • data:直接寻址的内部RAM(0-127字节),访问最快。
  • idata:间接寻址的内部RAM(128-255字节)。
  • pdata:分页访问的外部RAM(256字节页)。

合理分配变量存储类型可优化性能和资源利用率。

扩展内存有随机数。

上位机 pc控制多个下位机采取总线连接。上位机发送指令,发生应答的是下位机,主从应答。

校验码:末尾字节校验,结束码,主机发送指令格式如下,则从机以相同格式上报结果。

功能位最高位0表示主机发送,1表示从机上传。

crc校验

http://www.lryc.cn/news/571897.html

相关文章:

  • 介绍下分布式ID的技术实现及应用场景
  • 轻量化分布式AGI架构:基于区块链构建终端神经元节点的互联网智脑
  • 【AI Study】第三天,NumPy(3)- 基础知识
  • 英一真题阅读单词笔记 13年
  • 从0开始学习R语言--Day27--空间自相关
  • 爬虫技术:数据挖掘的深度探索与实践应用
  • 榕壹云外卖跑腿系统:基于Spring Boot的开源生活服务平台技术解析
  • python打卡day54@浙大疏锦行
  • 如何高效实现公司文件管理
  • 精通现代开发栈:Python、Git与Docker实战指南
  • 警惕GO的重复初始化
  • RabbitMQ七种工作模式
  • Redission实现的分布式锁的可重入性
  • Web安全性测试--超详细用例CASE整理总结
  • leetcode-3405 统计恰好有k个相等相邻数组的个数
  • C2远控篇CC++InlineHook挂钩动态API调用突破内存加密导入表检测
  • JSX 详解:React 的核心语法
  • Meta V-JEPA 2:革命性的视频联合的世界模型
  • OpenStack体验
  • 深入理解 MySQL 事务:保障数据操作的原子性与一致性
  • MySQL 库操作和表操作
  • 【51单片机】8. 矩阵LED显示自定义图案、动画
  • Mac m1 通过docker镜像安装kafka
  • 【GateWay】和权限验证
  • RKNN开发环境搭建3-RKNN Model Zoo 板载部署以Whisper为例
  • 【AI作画】用comfy ui生成漫画风图画
  • spring-webmvc @InitBinder 典型用法
  • 架构优化——submodule转为subtree
  • ES 索引加载 vs BulkLoad
  • ArcGIS中利用泰森多边形法分析站点与流域占比