专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
8051单片机串行口及串行通信
2019-04-15 19:23
发布
生成海报
站内文章
/
PIC单片机
14592
0
1737
8051
单片机串行口及串行通信
一、串行通信的基础知识
CPU
与其他外部设备要进行信息交换,一台计算机与其他计算机之间有时也要交换信息,这些信息交换就称为通信。通信有并行通信和串行通信两种。
1
、并行通信
并行通信是将数据字节的各位用多条数据线同时进行传送。
并行通信控制简单、传输速度快;由于传输线较多,长距离传送时成本高且接收方的各位同时接受存在困难。
2
、串行通信
串行通信是将数据字节分成一位一位的形式在一条传输线上逐个地传送。
串行通信传输线少,长距离传送时成本低,且可以利用电话网等现成的设备,但数据的传送控制要比并行通信复杂。
串行通信又可以分为异步通信与同步通信。
1
)异步通信
异步通信是指通信的发送设备与接受设备使用各自的时钟控制数据的发送和接受过程。为使双方的收发协调,要求发送和接受设备的时钟尽可能一致。
异步通信是以字符(构成的帧)为单位进行传输,字符与字符之间的间隙(时间间隔)是任意的,但每个字符中的各位是以固定的时间传送的,字符之间是异步的,而同一字符内的各位是同步的。
异步通信的数据格式
:
异步通信的特点:不要求收发双方时钟的严格一致,实现容易,设备开销较小,但每个字符要附加
2~3
位用于起止位,各帧之间还有间隔,因此传输效率不高。
2
)同步通信
同步通信是要建立发送方时钟对接收方时钟的直接控制,使双方达到完全同步。此时,传输数据的位之间的距离均为“位间隔”的整数倍,同时传送的字符间间不留间隙,及位同步且字符同步。发送方对接收方的同步可以通过两种方法实现。
外同步:是指对同步字符的检测在串行
I/O
接口芯片外部进行,当外部硬件电路检测到同步信号时,就给串行接口发送一个同步信号
SYNC
。当串行
I/O
接口芯片收到同步信号后,立即进行数据传送。
自(内)同步:是指同步字符的检测和同步控制是在串行
I/O
接口芯片内部进行的。自(内)同步又可分为单同步(只有一个字节的同步字符)和双同步(有两个字节的同步字符)。
二、
8051
的串行口
1
、
8051
串行口的结构
有两个物理上独立的接受、发送缓冲器
SBUF
,它们占用同一个地址
99H
;接收器是双缓冲结构;因为发送时
CPU
是主动的,因而不会产生重叠错误。
2
、
8051
串行口的控制寄存器
SCON
是个特殊功能寄存器,用以设定串行口的工作方式、接收
/
发送控制以及设置状态标志:
SM0
和
SM1
为工作方式选择位,可选择四种工作方式:
SM2
多机通信控制位
REN
允许串行接受位
由软件设置
REN=1,
允许接受;
REN=0
,禁止接受。
TB8
在方式
2
或方式
3
中,是发送数据的第九位,可以用软件规定其作用。可以用作数据的奇偶校验位,或在多机通信中,作为地址帧
/
数据帧的标志位。
RB8
在方式
2
或方式
3
中,是接收到数据的第九位,作为奇偶校验位或地址帧
/
数据帧的标志位。在方式
1
时,若
SM2=0
,则为接受到的停止位。
TI
发送中断标志位
RI
接受中断标志位
寄存器
PCON
中只有一位
SMOD
与串行口工作有关:
SMOD
波特率倍增位
三、串行口的工作方式
1
、方式
0
工作在方式
0
时,串行口为同步移位寄存器的输入输出方式。主要用于扩展并行输入或输出口。数据由
RXD
(
P3.0
)引脚输入或输出,同步移位脉冲由
TXD(P3.1)
引脚输出。发送和接收均为
8
位数据,低位在先,高位在后。波特率固定为
fosc/12
。
1
)方式
0
输出
2
)方式
0
的输入
方式
0
发送和接收电路
2
、方式
1
方式
1
是
10
位数据的异步通信接口。
TXD
为数据发送引脚,
RXD
为数据接收引脚,传送一帧数据的格式如图所示。其中
1
位起始位,
8
位数据位,
1
位停止位。
3
、方式
2
和方式
3
方式
2
或方式
3
为
11
位数据的异步通信口。
TXD
为数据发送引脚,
RXD
为数据接收引脚。
方式
2
和方式
3
一帧包括
1
位起始位,
9
位数据位,
1
位停止位。方式
2
的波特率固定为晶振频率的
1/64
或
1/32
,方式
3
波特率由定时器
T1
的溢出率决定。
四、波特率的计算
在串行通信中,收发双方对发送或接收数据的速率要有约定。通过软件可对单片机串行口编程为四种工作方式,其中方式
0
和方式
2
的波特率是固定的,方式
1
和方式
3
的波特率是可变的,由定时器
T1
的溢出率决定。
方式
0
的波特率
=fosc/12
方式
2
的波特率
=(2SMOD/64)
·
fosc
方式
1
的波特率
=
(2SMOD/32)
·(
T1
溢出率)
方式
3
的波特率
=
(2SMOD/32)
·(
T1
溢出率)
当
T1
作为波特率发生器时,常用是使
T1
工作在自动再装入的
8
位定时方式(方式
2
)
T1
溢出率
=fosc/(12*(256-TH1))
常用波特率表
五、原理图
其中
U2
为发送设备,
U1
为接受设备
六、程序设计
本程序的功能是实现
U2
每隔
50MS
向
U1
发送数据,
U1
一直处于接受状态,当
U2
有数据接受时,则接数据传到
P2
口,形成流水灯。
发送设备程序:
#include
void Delay(int n)
//
延时
1ms
子程序
{
int x,y;
for(x=0;x<110;x++)
for(y=0;y
}
void main ()
{
int i;
TMOD=0x20;
//
设置定时器
1
工作在方式
2
TH1=250;
//
设置波特率为
9600kps=(2*/32)*12M/(12(256-250))
TL1=250;
TR1=1;
//
启动定时器
1
SCON=0x50;
//
串行口工作在方式
1
PCON=0x80;
//SMOD=1
while(1)
for(i=0;i<8;i++)
{
SBUF=~(1<
//
发送数
Delay(50);
}
}
接收设备程序:
#include
void main ()
{
TMOD=0x20;
//
设置定时器
1
工作在方式
2
TH1=250;
//
设置波特率为
9600kps=(2*/32)*12M/(12(256-250))
TL1=250;
TR1=1;
//
启动定时器
1
SCON=0x50;
//
串行口工作在方式
1
PCON=0x80;
//SMOD=1
REN=1;
//
允许接受
EA=1;
//
开总中断
ES=1;
//
开串行接收中断
while(1);
}
void Serial() interrupt 4
//
溢出中断服务子程序
{
//
软件清零
RI=0;
P2=SBUF;
}
Ta的文章
更多
>>
免费开源的电路图和PCB绘图软件KiCAD
0 个评论
8051单片机串行口及串行通信
0 个评论
[IMX6DL][Android4.4] 电池低电量告警提示
0 个评论
热门文章
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮