嵌入式自学第四十二天

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校验

相关推荐
木子单片机2 小时前
基于STM32电子密码锁
stm32·单片机·嵌入式硬件·proteus
郦7773 小时前
MO+内核32位普冉单片机PY32F003开发板
单片机·嵌入式硬件
iCxhust6 小时前
使用 Visual Studio 创建安装包的完整指南
ide·单片机·嵌入式硬件·microsoft·c#·visual studio
深圳市尚想信息技术有限公司8 小时前
意法STM32F103C8T6 单片机ARM Cortex-M3 国民MCU 电机控制到物联网专用
arm开发·stm32·单片机
技术流浪者8 小时前
PCB设计实践(三十六)PCB设计新手系统性注意事项总结
单片机·嵌入式硬件·硬件工程·pcb设计
小智学长 | 嵌入式8 小时前
Arduino入门教程:10、屏幕显示
单片机·嵌入式硬件·arduino
GodKK老神灭9 小时前
STM32 实现PID
stm32·单片机·算法·c
heater4049 小时前
【STM32 HAL库】使用HAL库操作FLASH
stm32·单片机
西北丰10 小时前
键盘 AK35I Pro V2 分析
单片机·嵌入式硬件·计算机外设