当前位置: 首页 > 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校验

相关文章:

  • Java八股文——计算机网络「应用层篇」
  • 京东618带火四大消费 即时零售和生活服务迎来爆发
  • 一个.Net开发的功能强大、易于使用的流媒体服务器和管理系统
  • Redis 五种数据结构
  • keil新建工程文件结构和每个文件的作用解析(标准库版本)
  • 零知开源——STM32F4实现ILI9486显示屏UI界面系列教程(一):电子书阅读器功能
  • uniapp实现聊天中的接发消息自动滚动、消息定位和回到底部
  • QTableView为例:Qt模型视图委托(MVD)(Model-View-Delegate)
  • C# CSharpScript 的原理与应用
  • python校园拼团系统
  • Uniapp 中根据不同离开页面方式处理 `onHide` 的方法
  • uniapp的video遮盖了popup
  • Web安全性测试--超详细用例CASE整理总结
  • linux unix socket 通信demo
  • 理解RocketMQ顺序消息的全局有序消息和分区有序消息、延迟消息、事务消息
  • 英一真题阅读单词笔记 13年
  • JS数据类型检测方法总结
  • 大数据学习(140)-数仓概述分析
  • 你的下一把量化“瑞士军刀”?KHQuant适用场景全解析【AI量化第32篇】
  • FastAdmin退出登录不提示的修改方法
  • 国外素材网站推荐/长沙建设网站制作
  • 夺宝网站制作/中国十大电商平台排名
  • 怎么给自己网站做推广/网络营销推广的基本手段
  • 做网站用什么web服务器/百度统计数据
  • 外贸独立建站哪里比较好/google search
  • 专业做包包的网站/北京优化网站公司