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寄存器,包括两个缓冲区用于收发数据。
以下是添加注释后的代码,解释每个关键部分的含义:
初始化串口配置
c
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;
// 启动定时器1
TCON |= (1 << 6);
}
发送单个字符
c
void send_char(char ch)
{
// 将字符写入串口数据缓冲寄存器SBUF
SBUF = ch;
// 等待发送完成(检测TI标志位)
while((SCON & (1 << 1)) == 0);
// 清除发送中断标志位
SCON &= ~(1 << 1);
}
发送缓冲区数据
c
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
修饰变量定义:
c
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
修饰变量定义:
c
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
修饰变量定义:
c
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
修饰变量定义:
c
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校验