串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接收字节的通信方式。可以将接收来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接收的串行数据流转换为并行的数据字符供给CPU的器件。
串行通信技术是指通信双方按位进行,遵守时序的一种通信方式。串行通信中,将数据按位依次传输, 每位数据占据固定的时间长度,即可使用少数几条通信线路就可以完成系统间交换信息。
二、串口通信和串行通信的特点不同
串口通信是指外设和计算机间,通过数据信号线 、地线、控制线等,按位进行传输数据的一种通讯方式。这种通信方式使用的数据线少,在远距离通信中可以节约通信成本。
串行通信节省传输线,这是显而易见的。尤其是在远程通信时,此特点尤为重要。这也是串行通信的主要优点。
三、串口通信和串行通信的所属类型不同
串行通信是指一比特一比特的收发数据,包括I2C,包括SPI等等。
串口通信是一种通信手段,是相对于以太网方式、红外方式、蓝牙方式等而言,是一种比较低级的通信手段。
参考资料来源:百度百科-串行通信
参考资料来源:百度百科-串口通信
人类生存于世,少不了沟通。沟通使人类互相认知,传递信息,提升生活品质。但然单片机也需要,不然单单一个机器,无法构成一个系统,发挥更大的力量。只有单片机与外围设备传递信息,互相反馈才会有一个完美的系统。串行口通信就被发明出来,下面来了解串行口通信(uart)。
为了能更好理解串行口通信,在介绍它之前,先来看看几个概念,补充知识,方便深入明白uart工作原理。
串行通信有两种,一位异步串行通信,二为同步串行通信。
异步串行通信 :异步串行通信是指通信双方以一个字符(包括特定附加位)作为数据传输单位且发送方传送字符的间隔时间不一定,具有不规则数据段传送特性的串行数据传输。
同步串行通信 :所谓同步通信是指在约定的通信速率下,发送端和接收端的时钟信号频率和相位始终保持一致(同步),这就保证了通信双方在发送和接收数据时具有完全一致的定时关系。
两种串行通信不同就只有时间,在发送字符时,异步可以是不同时间间隔发送,但同步只能以固定的时间间隔发送。
波特率 :波特率表示每秒钟传送的二进制位数,是衡量数据传送速率的指标,它用单位时间内载波调制状态改变的次数来表示。
相互通信的甲乙双方必须具有相同的波特率,不然无法成功完成串行通信。
52单片机具有一个全双工串行通信口。一个全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单片机与微机之间的串行通信;片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。最佳振荡频率为6M—12M。管脚RXD( P30),TXD(P31)与串口通信有关。波特率可以设置。
串行口通信与三个寄存器有关,分别是:
这个寄存器只有SMOD位与串行口通信有关。系统复位默认为SMOD=0。当为用52单片机的定时器2产生波特率时,波特率不受SMOD影响。用定时器1产生波特率时,不去设置,就默认为0,波特率正常,设置为1时,波特率加倍。
串行口为10位通用异步接口。发送或接收一帧数据信息为10位,包括1位起始位“0”、8位数据位、1位停止位“1”。发送数据:数据从TXD端口输出,当数据写入发送缓冲器SBUF时,就启动发送器发送。发送完一帧数据后,置中断标志TI=1,申请中断,通知CPU可以发送下一个数据了。接收数据:首先使REN=1(允许接收数据),串行口从RXD接收数据,当采样到1至0跳变时,确认是起始位“0”,就开始接收一帧数据,当接收完一帧数据时,置中断标志RI=1,申请中断,通知CPU从SBUF取走接收到的数据 。
溢出速率即溢出频率,只要算出定时器每溢出一次所需要的时间T,那溢出率就是1/T。计算在没有波特率加倍(SMOD=0)的情况下,波特率为9600bps时怎样赋值计数器。这里说明一下,由于波特率是需要很精确的,不然通信会出错。如果采用定时器工作模式1,采用人工重载,会有较大误差,因为进入中断函数也需要时间,累积时间就会出错。所以这里运用工作模式2,8位自动重装。计数器自动重装不需人工干预,减少误差。
对照上面公式,波特率不加倍,SMOD=0,工作模式2,那n=8,波特率=9600,就可以算出x=253,十六进制为fd。
范例1是将接受的数据原封不动发送出去。采用查询法,故不需要打开串口中断,不用中断函数。只需不断查询TI,RI的值,就知道数据接收发送情况。
与范例1如出一撤,就不详细注释。
在串口通信中,方式1是最常用的,要认真理解方式1。串行数据一位一位的已经不用处理了,52单片机已经有一个模块处理完了。只要知道接收一个数据,产生一次接收中断,要软件置0,发送一个数据会产生一次发送中断,也要软件置0。自行置0,处理好数据就OK。下一篇将介绍其他三种方式,欢迎关注。
右键我的电脑--属性--计算机名--在计算机描述(D)里(任意、随你喜欢,两台要输入不一样的)输入名字--更改--计算机名(C)里(任意、随你喜欢、两台要输入不一样的)输入名字
点击隶属于下的工作组(W)(重要的一步)
然后在工作组里(两台要输入一个样的)工作组的名字(比如>
1 初始化串口通讯
2 定义发送函数和接收函数
这里有一个我做的两个串口的利用单片机做交换机做聊天工具的代码片段,希望你有用
初始化函数
void Serial()
{
TMOD=0x20;TH1=0xFD;TL1=TH1;
SCON=0x50;TR1=1;ES=1;EA=1;
BRT=0xFD;S2CON=0x50;AUXR=0x11;IE2=0x01;
}
发送函数
void Send1(unsigned char SByte)
{
ES=0;
IE1=0;
TI=0;SBUF=SByte;
while(!TI);
TI=0;
IE1=1;
ES=1;
}
void Send2(unsigned char SByte)
{
unsigned char temp;
IE2=0;
S2CON=S2CON&0xfd;
S2BUF=SByte;
do
{
temp=S2CON;temp=temp&0x02;
}
while(temp==0);
S2CON=S2CON&0xfd;
IE2=1;
}
接收函数
void Read1() interrupt 4
{
if(RI)
{
RI=0;
}
if(SBUF=='$') {R1[0]='$';cnt1=1;}
else if(cnt1>0&&SBUF=='@') {
R1[cnt1++]='@';flag1=1;
}
else if(cnt1>0) R1[cnt1++]=SBUF;
else cnt1=0;
}
void Read2() interrupt 8
{
unsigned char k;
k=S2CON;k=k&0x01;
if(k==1)
{
S2CON=S2CON&0xfe;
}
if(S2BUF=='$'){ R2[0]='$';cnt2=1;}
else if(cnt2>0&&S2BUF=='@') {
R2[cnt2]='@';
cnt2++;flag2=1;
}
else if(cnt2>0) R2[cnt2++]=S2BUF;
else cnt2=0;
}
事实上,串口通信所用的函数就这几个,至少格式都一样,应用的时候只需要更改一点点就行了。
以上就是关于串口通信和串行通信有什么区别全部的内容,包括:串口通信和串行通信有什么区别、串行口通信(一)、实现两台计算机之间串口通信的步骤等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)