嵌入式自学第四十二天

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

UART:通用异步收发器。

参与通信的设备:主机host

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

通信方式:

单工:只能单向传递

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

全工:同时刻可双向

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

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

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

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

usb统一串行总线。

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

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

二者未通信时:高电平。

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

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

校验位:奇偶校验

发送方统计数据位中 1 的个数。

② 根据奇/偶规则设置校验位(补 01 使总数满足奇/偶性)。

③ 接收方重新计算并比对校验位。

停止位:高电平

传输速率:波特率,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校验

相关推荐
国科安芯3 小时前
ASP4644芯片低功耗设计思路解析
网络·单片机·嵌入式硬件·安全
充哥单片机设计3 小时前
【STM32项目开源】基于STM32的智能厨房火灾燃气监控
stm32·单片机·嵌入式硬件
CiLerLinux10 小时前
第四十九章 ESP32S3 WiFi 路由实验
网络·人工智能·单片机·嵌入式硬件
时光の尘10 小时前
【PCB电路设计】常见元器件简介(电阻、电容、电感、二极管、三极管以及场效应管)
单片机·嵌入式硬件·pcb·二极管·电感·三极管·场效应管
Lu Zelin10 小时前
单片机为什么不能跑Linux
linux·单片机·嵌入式硬件
宁静致远202111 小时前
stm32 freertos下基于hal库的模拟I2C驱动实现
stm32·嵌入式硬件·freertos
Wave84516 小时前
STM32--智能小车
stm32·单片机·嵌入式硬件
wdfk_prog18 小时前
[Linux]学习笔记系列 -- lib/timerqueue.c Timer Queue Management 高精度定时器的有序数据结构
linux·c语言·数据结构·笔记·单片机·学习·安全
充哥单片机设计1 天前
【STM32项目开源】基于STM32的智能家居环境(空气质量)检测系统
stm32·单片机·嵌入式硬件
夜月yeyue1 天前
ART 加速器、流水线与指令预测的关系详解
linux·服务器·c语言·单片机·嵌入式硬件·性能优化·嵌入式高阶技巧