目录
一、初识串口
1、串口基本知识
2、串口的特点
3、了解下全双工和半双工的区别
二、关于串口的电器标准和协议
1、RS-232
2、RS-422
3、RS-485
三、关于串口的电平
1、RS232 电平
2、TTL电平
四、串口通信
1、串口接线方式
2、串口编程要素
3、波特率
4、编程实现每秒发送数据给电脑
一、初识串口
1、串口基本知识
串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口)
串口是设备间接线通信的一种方式
2、串口的特点
(1)数据一位一位地顺序传送
(2)双向通信、全双工
(3)传送速度相对较慢
3、了解下全双工和半双工的区别
全双工好比两个人可以互相讲话
半双工好比两个人讲话时只能是一个人讲话,一个人听着
二、关于串口的电器标准和协议
串行接口按电气标准及协议来分包括RS-232-C、RS-422、RS485等。RS-232-C、RS-422与RS-485标准只对接口的电气特性做出规定,不涉及接插件、电缆或协议。USB是近年来开发的新接口标准,主要用于高速数据传输领域。
1、RS-232
也称标准 串口 ,最常用的一种 [ 串行通讯接口 , 比如我们的电脑主机的 9 针串口 ,最高速率为 20kb/s
RS-232 是为 点对点 (即只用一对收、发设备)通讯而设计的,其传送距离最大为约 15 米。所以 RS-232 适 合本地设备之间的通信
2、RS-422
由于接收器采用高输入阻抗和发送 驱动器 比 RS232 更强的 驱动能力 ,故允许在相同传输线上连接多个接 收 节点 ,最多可接 10 个节点。即一个主设备( Master ),其余为从设备( Slave ),从设备之间不能通 信,所以RS-422 支持点对多的双向通信。
RS-422 的最大传输距离为 1219 米,最大传输速率为 10Mb/s 。平衡双绞线的长度与传输速率成反比
3、RS-485
是从 RS-422 基础上发展而来的,无论四线还是二线连接方式总线上可多接到 32 个设备。
三、关于串口的电平
经常听说的 UART 异步串行是指UART ( Universal Asynchronous Receiver/Transmitter ),通用异步接收 / 发送。 UART包含 TTL 电平的 串口 和 RS232 电平的串口
1、RS232 电平
逻辑 1 为 -3~-15V 的电压 , 逻辑 0 为 3~15V 的电压
- 笔记本通过RS232电平和单片机通信
2、TTL电平
TTL是 Transistor-Transistor Logic ,即晶体管 - 晶体管逻辑的简称,它是计算机处理器控制的设备 内部各部分之间通信的标准技术。TTL 电平信号应用广泛,是因为其数据表示采用二进制规定,
+5V 等价于逻辑 ”1” , 0V 等价于逻辑 ”0” 。
数字电路中,由 TTL 电子元器件组成电路的电平是个电压范围,规定:
输出高电平 >=2.4V ,输出低电平 <=0.4V ;
输入高电平 >=2.0V ,输入低电平 <=0.8V
笔记本电脑通过TTL 电平与单片机通信
TX发送线(端口) 3.1(单片机端口)
RX接收线 ( 端口) 3.0(单片机端口)
USB 转 TTL ,使用 ch340 通信
上官一号
四、串口通信
1、串口接线方式
RxD:数据输入引脚,数据接收;STC89系列对应P3.0口,上官一号有单独引出
TxD:数据发送引脚,数据发送;STC89系列对应P3.1口,上官一号有单独引出
接线方式
2、串口编程要素
输入/输出数据缓冲器都叫做SBUF,是一个数据缓冲区,都用99H地址码,但是是两个独立的8位寄存器
代码体现为:
想要接收数据 char data_msg = SBUF;
想要发送数据 SBUF = data_msg;
3、波特率
回忆UART是异步串行接口,通信双方使用时钟不同,因为双方硬件配置不同,但是需要约定通信速度,叫做波特率
对于电脑来说,别人做好了软件,鼠标点点点就能配置好,而苦逼单片机的波特率配置需要我们写
代码点点点配置什么,我们代码也要配置对应参数
4、编程实现每秒发送数据给电脑
实验环境:一个上官一号开发板,然后直接连接电脑
#include "reg52.h"
sfr AUXR = 0x8E;
void UartInit(void) //9600bps@11.0592MHz
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
AUXR &= 0xBF; //定时器1时钟为Fosc/12,即12T
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xFD; //设定定时初值
TH1 = 0xFD; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
}
void Delay1000ms() //@11.0592MHz
{
unsigned char i, j, k;
i = 8;
j = 1;
k = 243;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
char data_msg = 'a';
//配置C51串口的通信方式
UartInit();
while(1){
Delay1000ms();
//往发送缓冲区写入数据,就完成数据的发送
SBUF = data_msg;
}
}
实现结果演示: