串口也就是接口,称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。用来进行数据一位一位地顺序传送。其特点是通信线路简单,只要一对传输线就可以实现双向通信(全双工)(可以直接利用电话线作为传输线),从而大大降低了成本,特别适用于远距离通信,但传送速度较慢。
分类:按电气标准及协议来分包括RS-232-C、RS-422、RS485等。
RS232:常见的9针串口,最高速率为20Kb/s,传输最大距离15m。如下图所示。
RS422:最多可接10个节点。即一个主设备,其余为从设备,从设备之间不能通信。最大传输距离为1219m,最大传输速率为10Mb/s。
RS485:就是RS422的拓展,可以连接更多的设备
串口电平:
笔记本怎样和上官一号之间进行通信喃?
一、
二、
不仅要配置SBUF寄存器,还需要配置波特率,要2个设备之间的波特率一样,才能进行数据的传输
PC机的接收方波特率我们配置位9600,无校验位和停止位。
而单片机的波特率的配置,代码比较麻烦,我们先用软件自动生成,然后参考它配置了那些东西在进行学习。
-
生成的代码如下:
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
}
2给设备都配置好后,我们开始编写剩余代码向PC机发送数据
#include
#include "intrins.h"//nop()函数的头文件
sfr AUXR = 0X8E;//reg52.h里面没有定义AUXR的地址,所以我们自己查看手册定义
void Delay1000ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
i = 8;
j = 1;
k = 243;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
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 main()
{
int data_sj = 'A';
UartInit();
while(1)
{
Delay1000ms();
SBUF = data_sj;//给SBUF写入数据,完成了数据的发送,这行代码主要体现的是将SBUF里面的数据输出
}
}
SBUF = data_sj;主要表达的如下图是输出SBUF的这一过程。而不是写入SBUF这一过程,
如图:PC机每隔1s接收到一个字符A。