实验五 串口通信.docx
- 文档编号:25633125
- 上传时间:2023-06-10
- 格式:DOCX
- 页数:13
- 大小:191.22KB
实验五 串口通信.docx
《实验五 串口通信.docx》由会员分享,可在线阅读,更多相关《实验五 串口通信.docx(13页珍藏版)》请在冰豆网上搜索。
实验五串口通信
实验五串口通信
一、实验目的
1.掌握MCS-51单片机的串行口工作原理。
2.学习编程实现MCS-51的UART通讯。
3.掌握CPU利用串口通讯的方法。
二、实验设备(仪器)
PC微机一台
三、实验原理
1、串行通讯基本概念
计算机与外界的信息交换称为通信。
常用通信方式有两种:
并行通信与串行通信,简称并行传送和串行传送。
并行传送具有传送速度快,效率高等优点,但传送多少数据位就需要多少根数据线,传送成本高;串行传送是按位顺序进行数据传送,最少仅需要一根传输线即可完成,传送距离远,但传送速度慢。
串行通信又分同步和异步两种方式。
这两种通信方式的区别在于发送设备时钟与接收设备时钟是否严格一致。
同步通信中,在数据传送开始时先用同步字符来指示(常约定1-2个),并由同时传送的时钟信号来实现发送端和接收端同步,即检测到规定的同步字符后,接着就连续按顺序传送数据。
这种传送方式对硬件结构要求较高。
异步通信中,接收器和发送器有各自的时钟,它们的工作是非同步的,异步通信用一帧来表示一个字符,其内容如下:
一个起始位,仅接着是若干个数据位,下图中传输45H的数据格式。
2、MCS-51单片机的串行接口
MCS-51单片机串行口寄存器结构如下图所示。
SBUF为串行口的收发缓冲器,它是一个可寻址的专用寄存器,其中包含了接收器和发送器寄存器,可以实现全双工通信。
但这两个寄存器具有同一地址(99H)。
MCS-51的串行数据传输很简单,只要向发送缓冲器写入数据即可发送数据。
而从接收缓冲器读出数据即可接收数据。
2.1、串行通信控制寄存器
控制MCS-51单片机串行口控制寄存器共有三个:
特殊功能寄存器SCON和PCON和中断允许寄存器IE。
SCON和PCON地址分别为98H和87H,SCON用于控制和监视串行口的工作状态,8可以位寻址,PCON没有位寻址功能。
与串行通信有关的控制寄存器主要是串行通信控制寄存器SCON。
SCON是8051的一个可以位寻址的专用寄存器,用于串行数据通信的控制。
SCON的单元地址98H,位地址9FH—98H。
寄存器内容及位地址表示如下:
SCON
位地址
9F
9E
9D
9C
9B
9A
99
98
位符号
SM0
SM1
SM2
REN
TB8
RB8
TI
RI
各位功能说明如下:
位符号
功能说明
SM0,SM1
SM0,SM1──串行口工作方式选择位:
SM0SM1工作方式功能
0008位数码传送,波特率固定,为f晶振/12。
01110位数码传送,波特率可变。
10211位数码传送,波特率固定,为f晶振/64或f晶振/32。
11311位数码传送,波特率可变。
SM2
SM2──多机通信控制位:
当串行口以方式2或方式3接收时,如SM2=1,则只有当接收到的第九位数据(RB8)为1,才将接收到的前8位数据送入接收SBUF,并使RI位置1,产生中断请求信号;否则将接收到的前8位数据丢弃。
而当SM2=0时,则不论第九位数据为0还是为1,都将前8位数据装入接收SBUF中,并产生中断请求信号。
对方式0,SM2必须为0,对方式1,当SM2=1,只有接收到有效停止位后才使RI位置1。
REN
REN──允许接收位,用于对串行数据的接收进行控制:
REN=0,禁止接收;REN=1,允许接收。
该位由软件置1或清零。
TB8
TB8──发送数据位8:
在方式2和方式3时,TB8是要发送的第9位数据。
RB8
RB8——接收数据位8:
在方式2和方式3中,RB8位存放接收到的第9位数据
TI
TI──发送中断标志:
当方式0时,发送完第8位数据后,该位由硬件置位。
在其它方式下,于发送停止位之前由硬件置位。
因此TI=1,表示帧发送结束。
其状态既可供软件查询使用,也可请求中断。
TI位由软件清0。
RI
RI──接收中断标志:
当方式0时,接收完第8位数据后,该位由硬件置1。
在其它方式下,当接收到停止位时,该位由硬件置位。
因此RI=1,表示帧接收结束。
其状态既可供软件查询使用,也可以请求中断。
RI位由软件清0。
PCON
D7
D6
D5
D4
D3
D2
D1
D0
SMOD
-
-
-
GF1
GF0
PD
IDL
电源控制寄存器PCON中SMOD位可影响串行口的波特率。
SMOD是串行口波特率倍增位,当SMOD=1时,串行口波特率加倍。
系统复位默认为SMOD=0。
实验中我们一般了不设置电源控制寄存器。
IE
D7
D6
D5
D4
D3
D2
D1
D0
EA
-
-
ES
ET1
EX1
ET0
EX0
中断允许寄存器IE中的ES位可选择串行口中断允许或禁止。
ES=0,禁止串行口中断;ES=1,允许串行口中断。
2.2、串行通信的四种工作方式
8051单片机的串行通信共有四种工作方式:
1.串行工作方式0
串行口为同步移位寄存器方式,波特率固定为f晶振/12。
该方式主要用于I/O口扩展等,方式0传送数据时,串行数据由RXD(P3.0)端输入或输出,而TXD(P3.1)此时仅作为同步移位脉冲发生器发出移位脉冲。
串行数据的发送和接收以8位为一帧,不设起始位和停止位,其格式如下:
D0
D1
D2
D3
D4
D5
D6
D7
2.串行工作方式1
(1)方式1传送的数据格式
方式1传送一帧为10位的串行数据,包括1位起始位,8位数据位和1位停止位。
其帧格式为:
起始
D0
D1
D2
D3
D4
D5
D6
D7
停止
(2)方式1的波特率的确定
方式1的波特率是可变的,计算公式为:
波特率=(2SMOD/32)×(T1溢出率)
其中SMOD为PCON寄存器最高位的值。
(3)方式1数据的发送和接收
方式1的数据发送由一条写入单片机发送寄存器SBUF指令启动。
8位数据在串行口由硬件自动加入起始位和停止位组成完整的帧格式。
在内部移位脉冲作用下,由TXD端串行输出。
发送完一帧数据后,使TXD输出端维持”1”状态并置使TI标志位置1以通知CPU发送下一个字符。
接收数据由接收单片机SCON中的REN置1开始,随后串行口不断采样RXD端电平,当采样到RXD端电平从1向0跳变时,就认定是接收信号并开始接收从RXD端输入的数据,并送入内部接收寄存器SBUF中,直到停止位到来之后,并使RI位置1,通知CPU从SBUF中取走接收到的一帧字符。
方式1传送数据时发送前应先清TI,接收前应先清RI。
3.串行工作方式2
方式2是11位为一帧的串行通信方式,即1位始位,9位数据位和1位停止位。
其中第9位数据既可作奇偶校验位,也可作控制位使用。
其帧格式为:
起始
D0
D1
D2
D3
D4
D5
D6
D7
D8
停止
附加第9位(D8)由软件置1或清零。
方式2发送时单片机自动将SBUF中8位数据加上SCON中TB8作为第9位数据进行发送。
接收时,单片机将接收到的前8位数据送入SBUF,而在SCON中RB8位中存放第9位数据。
方式2波特率只有两种,用公式表示:
波特率=(2SMOD/64)×f晶振
当SMOD=0,波特率为f晶振/64
当SMOD=1,波特率为f晶振/32
4.串行工作方式3
方式3通信过程与方式2完全相同。
区别仅在于方式3的波特率可通过设置定时的工作方式和初值来设定(与串行工作方式1波特率设定方法相同)。
顺便指出,由于方式1和方式3的波特率设置较为灵活,在单片机串行通信中得到广泛应用。
2.3、串行口的通信波特率
MCS-51单片机串行通讯的波特率随串行口工作方式选择不同而不同,它除了与系统的震荡频率fosc,电源控制寄存器PCON的SMOD位有关外,还与定时器T1的设置有关。
串行口的通信波特率反映了串行传输数据的速率。
通信波特率的选用,不仅和所选通信设备、传输距离和MODEM型号有关,还受传输线状况所制约。
用户应根据实际需要加以正确选用。
1、方式0的波特率
在方式0下,串行口的通信波特率是固定不变的,仅与系统震荡频率fosc有关,其值为fosc/12(fosc为主机频率)。
2、方式2的波特率
在方式2下,波特率也只有两种:
fosc/32或fosc/64。
用户可以根据PCON中SMOD位状态来驱使串行口在那个波特率下工作。
选定公式为:
波特率=
这就是说:
若SMOD=0,则所选波特率为fosc/64;若SMOD=1,则波特率为fosc/32。
3、方式1或方式3的波特率
在这两种方式下,串行口波特率是由定时器T1或T2(仅8052有)的溢出率和SMOD决定的,因此要确定波特率,关键是要计算定时器T1或T2的溢出率,T1或T2是可编程的,可选的波特率的范围很大,因此,这是很常用的工作方式。
8051系列单片机没有定时器T2,因此波特率只能由T1产生。
8052系列单片机,当专用寄存器T2CON的RCLK位为0时,接收波特率由T1产生,当RCLK=1时,由T2产生;当T2CON的TCLK=0时发送波特率由T1产生,当TCLK=1时,由T2产生。
以下只讨论由定时器T1产生波特率的情况。
定时器T1用作波特率发生器时,应禁止T1中断。
通常T1工作于定时方式(专用寄存器TMOD的D6=0),T1的计数脉冲为震荡频率的12分频信号。
这两种方式下,波特率的相应公式为:
波特率=
公式1
定时器T1溢出率可定义为:
定时器T1溢出率=定时器T1溢出次数/秒
定时器T1溢出率与定时器的操作模式有关,可通过改变片内特殊功能寄存器TMOD中定时器T1字段的M1、M0两位,即TMOD.5和TMOD.4位,可以使定时器T1工作在四种工作方式(定时器处于方式3时,相当于TR1=0,停止计数,故T1实际上只有0、1、2这三种方式)。
以下只讨论定时器T1处于方式2(M1M0=10,计数初值自动重装8位计数))时溢出率的计算。
定时器T1由两个8位计数器TH1和TL1构成,当T1处于方式2时,T1为8位自动装载定时器,它使用TL1计数,溢出后自动将TL1加1,当TL1增至FFH时,再增加1的话TL1就产生溢出。
可见,定时器T1的溢出率不仅与系统时钟频率fOSC有关,还与每次溢出后TL1的重装初值N有关,N越大,定时器T1的溢出率也就越大。
一种极限情况是:
若N=FFH,那么每隔12时钟周期,定时器T1就溢出一次。
对于一般情况,定时器T1溢出一次所需的时间为:
公式2
于是,定时器每秒所溢出的次数为公式2所示,式中K=8。
在实际计算时定时器T1的溢出率的计算公式为:
定时器T1溢出率=
公式3
因此,把式公式2代人公式1,便可得到方式1或方式3的波特率计算公式:
波特率=
式中:
K为定时器T1的位数,它和定时器T1的设定方式有关。
即:
若定时器T1设为方式0,则K=13
若定时器T1设为方式1,则K=16
若定时器T1设为方式2或3,则K=8
常用波特率和定时器T1的初值关系表
波特率
fosc
SMOD
定时器T1
所选方式
相应初值
串行口方式00.5M
6MHz
×
×
×
×
串行口方式2187.5K
6MHz
1
×
×
×
方式1或319.2K
6MHz
1
0
2
FEH
9.6K
6MHz
1
0
2
FDH
4.8K
6MHz
0
0
2
FDH
2.4K
6MHz
0
0
2
FAH
1.2K
6MHz
0
0
2
F4H
0.6K
6MHz
0
0
2
E8H
110
6MHz
0
0
2
72H
55
6MHz
0
0
1
FEEBH
其实,定时器T1通常采用方式2,因为定时器T1在方式2下工作时,当TL1从全“1”变为全“0”时,TH1自动重装TL1。
这种方式,不仅可使操作方便,也可避免因重装初值(时间常数初值)而带来的定时误差。
应当注意两点:
一是表中定时器T1的时间常数初值和相应波特率之间有一定误差(例如:
FDH的对应波特率的理论值是10416波特,与这个表中给出的9699波特相差816波特),消除误差可以通过调整单片机的主频fOSC实现,二是在定时器T1的方式1时的初值应考虑到它的重装时间(例如表中55波特下的情况)。
另外,我们通常在开发时使用11.0592M晶体是为了得到标准的无误差的波特率,那么为何呢?
计算一下就知道了。
如我们要得到9600的波特率,晶振为11.0592M和12M,定时器1为模式2,SMOD设为1,分别看看那所要求的TH1为何值。
代入公式:
11.0592M晶振时:
由9600=(2÷32)×((11.0592M/12)/(256-TH1))得
TH1=250
12M晶振时:
由9600=(2÷32)×((12M/12)/(256-TH1))得
TH1≈249.49
上面的计算可以看出使用12M晶体的时候计算出来的TH1不为整数,而TH1的值只能取整数,这样它就会有一定的误差存在不能产生精确的9600波特率。
当然一定的误差是可以在使用中被接受的,就算使用11.0592M的晶体振荡器也会因晶体本身所存在的误差使波特率产生误差,但晶体本身的误差对波特率的影响是十分之小的,可以忽略不计。
四、实验内容及步骤
编写两块单片机的串口通讯程序,每块单片机都有2位LED数码管显示其数值,其中一块单片机为发送端,另一块为接收端。
通信成功时两数码管显示相同。
1、用Protues设计两块单片机的串口通讯电路原理图,单片机选用AT89C51,P1口接LED字段a~h,P2.0与P2.1口接位选,发送单片机的TXD(P3.0)与接收单片机的RXD(P3.1)端口相连。
2、打开KeiluVision2仿真软件,首先建立本实验的项目文件,编写发送端与接收端两个源程序,进行编译,直到编译无误,生成HEX文件。
3、将HEX文件上载到Protues电路原理图中的两块的AT89C51中,并仿真成功。
4、实现双机通信,并且两块单片机数值显示相同。
四、流程图
要求发送端单片机每隔1秒转换一次数据,接收端单片机随其一起变化,去掉通信线,接收端单片机数据不变化。
发送程序流程图
接收程序流程图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验五 串口通信 实验 串口 通信