8.PWM(脉冲宽度调制)
定义:能够引脚产生一个方波,周期性的让引脚的电平发生翻转。
PWM 周期:一个方波所经历的时间(上升沿/下降沿到下一个上升沿/下降沿所经历的时间)。
PWM 占空比:在一个周期内高电平所占的比例。
应用:背光调节、蜂鸣器。
蜂鸣器原理:
声音 ➔ 声波 ➔ 音调 ➔ 频率。
有源蜂鸣器:存在震荡源,通电后蜂鸣器会发出持续固定频率的声音。
无源蜂鸣器:不存在震荡源,通电后不会发出声音,需要给定蜂鸣器一个震荡(方波)才能发声。
定时器 + PWM占空比 + 蜂鸣器(指定频率发声)
计算实例:
基础条件:51单片机工作频率:12MHz / 12 = 1MHz = 1000000Hz。单片机+1所需时间 = 1 / 1000000Hz = 0.000001s。
实例1:频率 200HZ,占空比 50%
周期时间:1 / 200HZ = 0.005s
半周期(高电平时间):0.005s / 2 = 0.0025s
计数次数:0.0025s / 0.000001s = 2500
初值:65535 - 2500 = 63035
实例2:频率 400HZ,占空比 50%
周期时间:1 / 400HZ = 0.0025s
半周期(高电平时间):0.0025s / 2 = 0.00125s
计数次数:0.00125s / 0.000001s = 1250
初值:65535 - 1250 = 64285
9. 通信协议基础
常见通信协议 :UART、I2C、SPI、CAN
UART定义 :Universal Async Receiver/Transmitter,通用异步收发器。特点:全双工、串行、异步 。
1)UART信号线
VCC:电源正极
GND:接地
TXD(Transmit Data):发送数据信号线
RXD(Receive Data):接收数据信号线
接线原则:一方的TXD接另一方的RXD,交叉连接。例如:51单片机与GPS传感器(ATGM336H-5N)通信。

2)通信方式分类
(1)单工通信:
数据的发送方和接收方是固定的。
数据传输通过一根信号线完成。
传输方向固定,只能从发送方到接收方。
(2)半双工通信(如I2C:VCC、GND、SDA、SCL)
通信双方既可以作为发送方,也可以作为接收方。
数据传输通过一根信号线实现。
传输方向可以是双向的,但同一时刻传输方向呈单一性。
(3) 全双工通信(如UART)
通信双方既可以作为发送方,也可以作为接收方。
数据传输通过两根信号线实现。
数据传输方向在任意时刻可以是双向的。
3)串行传输与并行传输区别
(1)串行
通过一根信号线,按照先后次序逐个bit逐个bit发送数据。
特点:
传输速率慢(只有一根线逐个bit去传输数据)
硬件成本低,实现简单
传输距离远,抗干扰性强(信号线少,干扰小,不存在多根线之间信号偏移 RS485 差分)
(2)并行
通过多根信号线同时去传输多个bit数据。
特点:
传输速率快(通过多根线同时发送多个bit数据)
硬件成本高,实现复杂
传输距离近,抗干扰性差(30米距离内,信号偏移、电磁波干扰、误差)
10.串口通信时序与参数
1)数据传输顺序
串口通信遵循LSB先行原则(低位先行),即先发送数据低位。
2)串口通信时序(帧结构)
空闲状态:高电平
起始位:发送1bit低电平代表起始位。
数据位:发送8bit数据位(先发低位)。
校验位:发送1bit校验位(低电平/高电平,奇校验/偶校验)。
停止位:发送1bit高电平代表停止位。
3)同步与异步通信概念
时钟线:约定双方的通信频率。
同步通信:通信双方有一根共享的时钟信号线来约定通信的频率。
异步通信:通信双方没有时钟线进行通信频率约定(UART属于此类,依靠波特率约定)。
4)波特率与通信参数
波特率:bits per second (bps),每秒传输bit数量。
常见值:2400bps、4800bps、9600bps、115200bps。
串口通信参数格式:9600 8 N 1
9600: 波特率
8: 8位数据位
N: None 无校验
1: 停止位1位
其他格式:2400 8 E 1(E: Even 偶校验);
4800 8 O 1 (O: Odd 奇校验)。
5)奇偶校验原理
(1) 奇校验
校验位为'1',若数据位中'1'的个数加上校验位的'1'保持'1'的总个数为奇数个,则代表奇校验通过。
(2) 偶校验
校验位为'0',若数据位中'1'的个数加上校验位的'0'保持'1'的总个数为偶数个,则代表偶校验通过。
例:字符 'A' ( 0100 0001 ),奇校验发送 :0100 0001 1 。

11.电气特性与电平标准
TTL 电平:
1(高电平):5V
0(低电平):0V
RS232 电平:负逻辑
1(高电平):-3V ~ -15V
0(低电平):3V ~ 15V
RS485 电平:差分
1(高电平):2V ~ 6V
0(低电平):-2V ~ -6V
CH340 芯片:电平转换芯片(用于单片机与电脑USB通信时的电平转换)。
12.51单片机UART寄存器配置
1)核心寄存器说明
(1)SCON(串口控制寄存器):
bit6和bit7清0,bit6置1:配置串口工作方式为8位UART波特率可变。
bit4置1:允许串口接收数据。

(2)PCON**(电源控制寄存器)**:
bit6清零:SMOD0=0,可以通过SCON寄存器中的bit6和bit7指定串口工作方式。
bit7置1:波特率翻倍。
(3)TMOD(定时器模式寄存器) :
高4位清0,bit5置1:配置定时器1为8位自动重装载模式。
(4)TCON(定时器控制寄存器):
bit6置1:打开定时器1,开启计数。
(5)IE(中断允许寄存器):
bit7和bit4置1:开启串口中断 + CPU总中断。

2)波特率产生(定时器1初值)
2400波特率如何产生?使用定时器1(8位自动重装载模式)。
初值计算公式:
12MHz晶振:初值 230
11.0592MHz晶振:初值 232
TL和TH寄存器:8位自动重装载模式下,TL和TH都赋值为230(对应255-25的溢出)。

3)数据缓冲区(SBUF)
SBUF:串口接收/发送缓冲区(物理上为两个独立的寄存器,共用一个地址)。
接收缓冲区:xxxx xxxx(用于读取接收到的数据)。
发送缓冲区:dat(用于写入要发送的数据,如 SBUF = 'a';)。
4)初始化流程图逻辑
配置串口工作方式(SCON bit6/7)
允许串口接收数据(SCON bit4)
配置PCON(SMOD0=0, bit7=1翻倍)
配置定时器1模式(TMOD高4位清0,bit5置1)
设置定时器1初值(TL1=TH1=230或232)
打开定时器1,开启计数(TCON bit6=1)
开启串口中断+CPU总中断(IE bit7=1, bit4=1)
5)数据发送与接收代码逻辑
发送:轮询(主循环中)
while(1)
{
send_char();
}
// 字符串发送 puts
while (*p != '\0')
{
putchar(*p);
p++;
}
接收:中断(在中断服务函数中处理)。
6)存储类型关键字
data:将变量的存储位置放到芯片内部RAM(256byte)。
xdata:将变量的存储位置放到芯片外部扩展RAM(64KB)。
13.串口应用层协议(Modbus任务)
1)主从应答机制
主机(Windows):永远是发起通信的一方,拥有对通信的绝对控制。
从机(51单片机):无法发起通信,只能根据主机下发的指令完成对应的控制,并给主机回复应答。
任务描述:主机向从机发送Modbus协议格式指令,从机解析指令,根据指令完成对应功能并向从机回复应答。
2)Modbus协议帧格式
格式顺序:
起始位 | 地址码 | 功能码 | 数据1 | 数据2 | 校验位 | 结束位
功能码(实现的具体功能):
0x01:控制LED灯
0x02:数码管显示
0x03:蜂鸣器控制
0x04:温度采集
校验方式:累加和校验(或CRC校验,应用层提及)。
3)数据帧交互实例
主机 -> 从机:0xAA 0x01 0x01 0x00 0x42 0xEE 0xBB
从机 -> 主机:0xAA 0x01 0x81 0x00 0x42 0x6E 0xBB
注意:回复时,功能码最高位置1(如0x01变为0x81),代表这是从机的应答。
数据流向位:0代表数据从主机到从机;1代表数据从从机到主机(体现在功能码的最高位)。
4)从机解析与执行流程
(1)接收主机发过来的数据。
(2)解析数据,获得功能码。
(3)根据功能码完成对应的控制(数据位)。
(4)向主机回复应答。