资源描述
PC机与单片机串行通信课程设计
———————————————————————————————— 作者:
———————————————————————————————— 日期:
2
个人收集整理 勿做商业用途
课程名称:监控系统课程设计
设计题目:PC机与单片机串行通信
院 系:
专 业:
年 级:
姓 名:
指导教师:
XX大学XX区
xx年 xx月xx日
课 程 设 计 任 务 书
专 业: 姓 名 学 号
开题日期: 年 月 日 完成日期:年 月 日
题 目 :PC机与单片机的串行通信
一、设计的目的
串行通信技术是单片机系统开发中常用的技术之一,串行口也是单片机常规内部集成的功能.设计PC机与单片机进行串行通信硬件电路及软件流程,本设计通过定时器来设定通信的波特率,通过设置几个寄存器来设定工作方式.PC机与单片机之间则由RS—232C接口相连。
二、设计的内容及要求
1、查阅资料,学习PC与 一个或多个单片机串口通信设计;
2、硬件设计,给出原理框图,并简要介绍各组成部分;
3、软件设计,给出程序流程图和程序清单,并说明各部分程序要实现;
4、总结,结出结论
三、指导教师评语
四、成 绩
指导教师 (签章)
年月日
1 设计意义
单片机由于性价比高、使用灵活等优点而广泛应用于各种电子系统、自动
控制系统,但是存储容量小.处理的数据量不大。为了克服这一缺点,可以将单
片机连接到PC机上,由单片机采集数据,然后将数据汇总到PC机,再进行各种数
据处理。单片机与PC机之间的通讯是其中的关键技术之一,PC机与单片机间一般
采用的是串行通信,由于51系列单片机中一般集成了双全工的串行端口,只要配
以电平转换的驱动电路、隔离电路就可组成一个简单可行的通信接口.
2 硬件设计
2.1 整体设计
在PC系统中都装有异步通信适配器,利用它可以实现异步串行通信。适配器的核心元件是可编程的intel8251芯片,它使PC有能力与其他具有RS-232标准的接口的计算机或设备进行通信,而MCS—51单片机本身具有一个双全工的串行口,因此只要配上电平转换电路就可以和RS-232接口组成一个简单的通信通道。
简单的PC与单片机通信只要3根线就可以了,单片机的TXD、RXD与PC的RXD、TXD分别相连,连接地线。由于51系列单片机的串行口使用的是TTL电平,因此在PC和单片机间要有RS—232电平转换电路,图1所示为PC与单片机的通信图.
图1 PC机与单片机的通信图
2。2 芯片选择
(1)MCS—51单片机[1]
MCS-51单片机内部具有一个采用UART工作方式的全双工的串行通信接口。该接口不仅可以同时进行数据的接受和发送,也可以作为同步移位寄存器使用。该接口有4种工作方式,其中字符格式有8位、10位、11位,并可以以不同的波特率工作。
1〉串行口的内部结构
MCS-51单片机的串行接口结构如图2所示:
图2 MCS—51单片机的串行接口图
该接口有两根串行通信传输线RXD(P3。0)和TXD(P3。1),以串行形式与外部逻辑接口。数据的接收和发送就是通过这两根信号线来实现的。
在物理上存在两个互相独立的接收、发送缓冲器SBUF,属于特殊功能寄存器,这样可以同时进行数据的接收和发送,实现全双工传送。
2>串行口的控制寄存器
①串行口数据缓冲器SBUF
两个互相独立的接收、发送缓冲器SBUF公用一个地址99H对应着2个寄存器:发送寄存器和接收寄存器.发送缓冲器用于存放要发送的数据,只能写入,不能读出.接收缓冲器用于存放接收到的数据,只能读出,不能写入。通过辨认对SBUF的指令是读指令还是写指令来区别是对接收缓冲器还是对发送缓冲器进行操作。
读SBUF,比如MOV A,SBUF指令,就是读接收缓冲器的内容;
写SBUF,比如MOV SBUF,A指令,就是修改发送缓冲器的内容.
②串行控制寄存器SCON
SCON可用于确定串行通信的工作方式和控制串行通道的某些功能,监视和控制串行口的工作状态,也可用于存放要发送和接收到的第9个数据(TB9、RB8),并没有接收和发送中断标志RI和TI。
表1 SCON的格式
SM0
SM1
SM2
REN
TB8
RB8
TI
RI
SM0、SM1:串行口操作模式选择位,指定了串行通信的工作方式。串行接口有4种工作方式。各种工作方式的区别在于功能、数据格式和波特率的不同.
表2 串行口的各种工作方式
SM0
SM1
工作方式
功能
波特率
0
0
0
8位同步移位寄存器
f/12
0
0
0
10位UART
可变
1
0
2
11位UART
f/64或f/32
1
1
3
11位UART
可变
在任务6中,就是使用了MOV SCON,#40H(01000000B)指令来设置单片机串行口的工作方式为方式1的。
SM2:多机通信控制位.主要用于方式2和方式3 中(数据为9位).
在方式2和方式3处于接收状态时,如SM2=1,REN=1,且接收到的第9位数据RB8是0,则RI(接收中断标志位)不会被置1。只有在接收到的第9位数据RB8是1,则RI才会被置1.
在方式2和方式3处于接收状态时,如SM2=0,无论接收到的第9位数据RB8时0还是1,RI都会被置1。
在方式1中,如SM2=1,只有在接收到有效停止位时,则RI才会被置1.
在模式0中,SM2必须为0。
REN:允许串行接收控制位。由软件置1或清除。REN=1,允许接收。启动串行口的RXD,开始接收数据;REN=0,禁止接收.
在任务6中就是用指令SETB REN来允许乙机的串行口接收的。
TB8:在方式2 和方式3时,它就是要发送的第9个数据位,一般是程控位2。按需要由软件进行置1或清0。如在多处理通信中,用于表示是地址桢还是数据桢。在模式9中.此位不用。
RB8:接收数据位8。在方式2和3时,它是接收到的第9个数据位。在模式1中,如SM2=0,RB8时接收到的停止位;在模式0中,此位不用。
TI:发送中断标志位。在模式0中,当发送完第8位数据时,由硬件置1;在其他模式中,在发送停止位前,由硬件置1。TI=1时,申请中断,CPU响应中断后,发送下一桢数据。
RI:接收中断标志位。在模式0中,接收第8位结束时,由硬件置1;在其他模式中,在接收停止位的半中间,由硬件置1.RI=1时,申请中断,要求CPU取走数据。但在模式一中,SM2=1时,如未接收到有效的停止位,则不会对RI置位.
在任何模式中,CPU响应中断后,都必须用软件来清除RI和TI。
在任务6中,在甲机发送和乙机接收程序中,都有JBC这样一条指令,就是用来清除TI和RI标志的。
③特殊功能寄存器PCON
PCON主要是为CHMOS型单片机的电源控制而设置的SFR,在HMOS的MCS—51单片机中,除了最高位SMOD位外,其他位都是虚设的。
表3 PCON的格式
SMOD
GF1
GF0
PD
IDL
SMOD是串行口波特率选择位,只有这一位和串行通信有关。方式0的波特率固定,当使SMOD=1时,则使方式1、方式2、方式3的波特率加倍。当SMOD=0时,各工作方式的波特率不加倍。
3〉串行口的工作方式
MCS-51单片机的串行接口有四种工作方式,用户可以通过SCON中的SM1、SM0位来选择。
①方式0
方式0为同步移位寄存器方式,其波特率是固定的,为振荡频率f的1/12,数据由RXD(P3。0脚)端输入,同步移位脉冲由TXD(P3。1脚)端输出,发送、接收的是8位数据,低位在前.
发送:
当一个数据写入串行口发送缓冲器SBUF时,串行口将8位数据以fosc/12的波特率从RXD引脚输出(低位在前),发送完置中断标志TI为1,请求中断。在再次发送数据之前,必须由软件清TI为0。具体接线图如图3所示.其中,74LS164为串入并出移位寄存器。
图3 方式0 的发送接线图
接收:
在满足REN=1和RI=0的条件下,串行口即开始从RXD端以fosc/12的波特率输入数据(低位在前),当接收完8位数据后,置中断标志RI为1,请求中断。在再次接收数据之前,必须由软件清RI为0。具体接线图如图4所示.其中,74LS165为并入串出移位寄存器。
图4 方式0 的接收接线图
串行控制寄存器SCON中的TB8和RB8在方式0中未用。值得注意的是,每当发送或接收完8位数据后,硬件会自动置TI或RI为1,CPU响应TI或RI中断后,必须由用户用软件清0.方式0时,SM2必须为0。
②方式1
在方式1状态下,串行口为8位异步通信接口.一桢信息为10位,包括1位起始位(0),8位数据位(低位在前)和1位停止位(1)。如图5所示
图5 方式1的信息格式
TXD为发送端,RXD为接收端.波特率不变。方式1是单片机与PC机串行通信最常用的方式。
发送:
发送时,数据从TXD端输出,当数据写入发送缓冲器SBUF后,启动发送器发送。当发送完一帧数据后,置中断标志TI为1。方式1所传送的波特率取决于定时器1的溢出率和PCON中的SMOD位。
接收:
接收时,由REN置1,允许接收,串行口采样RXD,当采样由1到0跳变时,确认是起始位“0",开始接收一帧数据。当RI=0,且停止位为1或SM2=0时,停止位进入RB8位,同时置中断标志RI;否则信息将丢失。所以,方式1接收时,应先用软件清除RI或SM2标志。
③方式2
方式2下,串行口为11位UART,传送波特率与SMOD有关.发送或接收一帧数据包括1位起始位0,8位数据位,1位可编程位(用于奇偶校验)和1位停止位1。其帧格式如图6所示。
图6 方式2 的信息帧格式
发送:
发送时,先根据通信协议由软件设置TB8,然后用指令将要发送的数据写入SBUF,启动发送器.写SBUF的指令,除了将8位数据送入SBUF外,同时还将TB8装入发送移位寄存器的第9位,并通知发送控制器进行一次发送.一帧信息即从TXD发送,在送完一帧信息后,TI被自动置1,在发送下一帧信息之前,TI必须由中断服务程序或查询程序清0。
接收:
当REN=1时,允许串行口接收数据。数据由RXD端输入,接收11位的信息。当接收器采样到RXD端的负跳变,并判断起始位有效后,开始接收一帧信息。当接收器接收到第9位数据后,若同时满足以下两个条件:RI=0和SM2=0或接收到的第9位数据为1,则接收数据有效,8位数据送入SBUF,第9位送入RB8,并置RI=1。若不满足上述两个条件,则信息丢失。
④方式3
方式3为波特率可变的11位UART通信方式,除了波特率以外,方式3和方式2完全相同。
4>MCS-51串行口的波特率
在串行通信中,收发双方对传送的数据速率,即波特率要有一定的约定。MCS-51单片机的串行口通过编程可以有4种工作方式。其中,方式0和方式2的波特率是固定的,方式1和方式3的波特率可变,由定时器1的溢出率决定,下面加以分析。
①方式0和方式2
在方式0中,波特率为时钟频率的1/12,即fosc/12,固定不变。
在方式2中,波特率取决于PCON中的SMOD值,当SMOD=0时,波特率为fosc/64;当SMOD=1时,波特率为fosc/32。
②方式1和方式3
在方式1和方式3下,波特率由定时器1的溢出率和SMOD共同决定.即:方式1和方式3的波特率=·定时器1溢出率
其中,定时器1的溢出率取决于单片机定时器1的计数速率和定时器的预置值.计数速率与TMOD寄存器中的C/位有关.当C/=0时,计数速率为fosc/12;当C/=1时,计数速率为外部输入时钟频率.
下表列出了各种常用的波特率及获得办法。
表4定时器1产生的常用波特率
波特率(b/s)
f/MHz
SMOD
定时器1
C/T
模式
初始值
方式0:1
12
*
*
*
*
方式2:375k
12
1
*
*
*
方式1、3:62.5k
12
1
0
2
FFH
19.2k
11.059
1
0
2
FDH
9.6k
11.059
0
0
2
FDH
4。8k
11。059
0
0
2
FAH
2。4k
11.059
0
0
2
F4H
1。2k
11。059
0
0
2
E8H
137。5k
11.986
0
0
2
1DH
110
6
0
0
2
72H
110
12
0
0
1
FEEBH
2.3 RS-232接口简介
(1)信息格式
PC 的主板上通常都预留有一个或两个九针(DB一9)全双工串行接口(COM1、COi2),其电气标准遵循RS一232C标准.
RS-232是使用最早、应用最多的一种异步串行通信总线标准,它是美国电子工业协会1962年公布,1969年最后修订而成的。其中RS表示recommended standard,232是该标准的识别号。RS—232主要用来定义各电路数据终端之间的电气性能。RS-232接口总线适用于设备之间的通信距离不大于15米,传输速度最大为20Kbit/s。
RS—232采用标准的异步通信串行数据格式,即信息的开始为起始位,信息的结束为停止位1,信息本身可以是5、6、7、8位,可根据需要再加上一位奇偶校验位,如果两个信息之间有间隔,加上空闲位1.如图7所示
图7 RS—232的信息格式
在通常的异步串行通信中只使用其中三个引脚,即引脚2(接收RXD)、引脚3(发送TXD)、引脚5(信号地SG).各引脚功能如图8所示.
图8 九针串口引脚功能图
(2)RS—232C的接口信号
RS—232C规标准接口有25条线,4条数据线、11条控制线、3条定时线、7条备用和未定义线。
常用的只有9根,它们是:
①联络控制信号线:
数据装置准备好(Data set ready-DSR)——有效时(ON)状态,表明MODEM处于可以使用的状态.
数据终端准备好(Data set ready—DTR)—-有效时(ON)状态,表明数据终端可以使用。这两个信号有时连到电源上,一上电就立即有效。这两个设备状态信号有效,只表示设备本身可用,并不说明通信链路可以开始进行通信了,能否开始进行通信要由下面的控制信号决定。
请求发送(Request to send—RTS)—-用来表示DTE请求DCE发送数据,即当终端要发送数据时,使该信号有效(ON状态),向MODEM请求发送.它用来控制MODEM是否要进入发送状态。
允许发送(Clear to send—CTS)-—用来表示DCE准备好接收DTE发来的数据,是对请求发送信号RTS的响应信号。当MODEM已准备好接收终端传来的数据,并向前发送时,使该信号有效,通知终端开始沿发送数据线TxD发送数据。
这对RTS/CTS请求应答联络信号是用于半双工MODEM系统中发送方式和接收方式之间的切换。在全双工系统中作发送方式和接收方式之间的切换。在全双工系统中,因配置双向通道,故不需要RTS/CTS联络信号,使其变高。
接收线信号检出(Received Line detection-RLSD)—-用来表示DCE已接通通信链路,告知DTE准备接收数据.当本地的MODEM收到由通信链路另一端(远地)的MODEM送来的载波信号时,使RLSD信号有效,通知终端准备接收,并且由MODEM将接收下来的载波信号解调成数字两数据后,沿接收数据线RxD送到终端。此线也叫做数据载波检出(Data Carrier dectection-DCD)线.
振铃指示(Ringing—RI)——当MODEM收到交换台送来的振铃呼叫信号时,使该信号有效(ON状态),通知终端,已被呼叫。
②数据发送与接收线:
发送数据(Transmitted data-TxD)--通过TxD终端将串行数据发送到MODEM,(DTE→DCE)。
接收数据(Received data—RxD)——通过RxD线终端接收从MODEM发来的串行数据,(DCE→DTE)。
③地线
有两根线SG、PG——信号地和保护地信号线,无方向。
上述控制信号线何时有效,何时无效的顺序表示了接口信号的传送过程。例如,只有当DSR和DTR都处于有效(ON)状态时,才能在DTE和DCE之间进行传送操作。若DTE要发送数据,则预先将DTR线置成有效(ON)状态,等CTS线上收到有效(ON)状态的回答后,才能在TxD线上发送串行数据.这种顺序的规定对半双工的通信线路特别有用,因为半双工的通信才能确定DCE已由接收方向改为发送方向,这时线路才能开始发送。
2个数据信号:发送TXD;接收RXD。
1个信号地线:SG.
6个控制信号:
DSR��;数传机(即modem)准备好,Data Set Ready。
DTR��数据终端(DTE,即微机接口电路,如Intel8250/8251,16550)准备好,Data Terminal Ready。
RTS�;�DTE请求DCE发送(Request To Send)。
CTS��DCE允许DTE发送(Clear To Send),该信号是对RTS信号的回答。
DCD��数据载波检出,Data Carrier Detection当本地DCE设备(Modem)收到对方的DCE设备送来的载波信号时,使DCD有效,通知DTE准备接收, 并且由DCE将接收到的载波信号解调为数字信号, 经RXD线送给DTE。
RI��振铃信号 Ringing当DCE收到交换机送来的振铃呼叫信号时,使该信号有效,通知DTE已被呼叫。
表5 RS—232C的接口信号
232引脚
CCITT
Modem
名称
说明
用途
异步
同步
1
101
AA
保护地
设备外壳接地
PE
PE√
2
103
BA
发送数据
数据送Modem
TXD
3
104
BB
接收数据
从Modem接收数据
RXD
4
105
CA
请求发送
在半双工时控制发送器的开和关
RTS
5
106
CB
允许发送
Modem允许发送
CTS
6
107
CC
数据终端准备好
Modem准备好
DSR
7
102
AB
信号地
信号公共地
SG
SG√
8
109
CF
载波信号检测
Modem正在接收另一端送来的信号
DCD
9
空
10
空
11
空
12
接收信号检测(2)
在第二通道检测到信号
√
13
允许发送(2)
第二通道允许发送
√
14
118
发送数据(2)
第二通道发送数据
√
15
113
DA
发送器定时
为Modem提供发送器定时信号
√
16
119
接收数据(2)
第二通道接收数据
√
17
115
DD
接收器定时
为接口和终端提供定时
√
18
空
19
请求发送(2)
连接第二通道的发送器
√
20
108
CD
数据终端准备好
数据终端准备好
DTR
21
空
22
125
振铃
振铃指示
RI
23
111
CH
数据率选择
选择两个同步数据率
√
24
114
DB
发送器定时
为接口和终端提供定时
√
25
空
(3)RS—232电平转换器-MAX232
RS—232规定了自己的电气标准,由于它是在TTL电路之前研制的,因此它的电平不是+5V和地,而是采用负逻辑,即逻辑“0”:+5V~—5V,逻辑“1”:—5V~-15V.因此RS—232不能和TTL电平直接相连,必须进行电平转换。本设计选用MAX232。
MAX232的引脚图如下所示:
图9 MAX232的引脚图
管脚说明如下
①C0+、C0-、C1+、C1-是外接电容端;
②R1IN、R2IN是2路RS-232C电平信号接收输入端;
③RlOUT、R2OUT是2路转换后的TTL电平接收信号输出端,送8051的RXD接收端;
④TlIN、T2IN是2路TTL电平发送输入端,接8051的TxD发送端;
⑤TlOUT、T2OUT是2路转换后的发送RS-232C电平信号输出端,接传输线;
⑥V+经电容接电源+5V;
⑦V—经电容接地.
这种连接的传输介质一般采用双绞线,通信距离一般不超过15m,传输率小于20kB/s。
(4)RS—232总线规定[2]
RS—232标准总线为25根,采用标准的D型25芯插头座。引脚及功能如图10所示
图10 RS-232C引脚图
在最简单的全双工系统中,仅有发送数据、接收数据和信号地三根线即可。
对于MCS-51单片机。利用其RXD线、TXD线和一根地线.就可以构成符合RS—232接口标准的全双工串行通信口,这是PC机和单片机最简单的零调制经济型连接,是进行全双工通信所必须的最少线路。
图11给出了采用MAX232芯片的PC机与单片机串行通信接口电路,与PC机相连采用PC机的9芯标准插座。
图11 PC机与单片机串行通信接口电路
3 软件编程
将PC机键盘的输入发送给单片机,单片机收到PC机发来的数据后,回送同一数据给PC机,并在屏幕上显示出来。只要屏幕上显示的字符和所键入的字符相同,说明两者之间的通信正常.[3]
双方约定:波特率为2400bit/s,通信格式为8个数据位,一个停止位,无奇偶校验位.
3.1 单片机通讯软件.单片机通过中断方式接收PC机发送的数据,并回送。根据信息格式,可以设定单片机的串行口工作在方式1。在串行口方式1中,波特率是由定时器T1产生的.如晶振为6MHZ,波特率为2400bit/s,这时T1工作在方式2(自动重新装入初值).经计算,T1的初始值应为F3H,SMOD=1.
程序框图如图12、13所示:
图12 主程序流程图
图13 中断服务子程序流程图
程序设计如下:
ORG 0000H
LJMP START ;主程序入口
ORG 0023H
LJMP INTS ;串行口中断入口
ORG 0100H
START:MOV TMOD,#20H ;初始化定时器1为方式2
MOV TL1,#0F3H ;与2400波特率相应的定时器初值
MOV TH1,#0F3H
SETB TR1 ;启动定时器1
MOV SCON,#50H ;串行口工作在方式1,允许接收
MOV PCON,#80H ;SMOD=1
SETB EA ;开串行口中断
SETB ES ;允许中断
LOOP: SJMP LOOP ;等待数据接收
INTS: CLR EA ;禁止中断
CLR RI ;清除中断标志RI
MOV A,SBUF ;从SBUF取接收到的数据
MOV SBUF,A ;回送
WAIT: JNB TI,WAIT ;判断回送是否完毕
CLR TI ;清除TI标志
POP A ;发送完,恢复现场
POP DPH
POP DPL
SETB EA ;允许中断,准备接收新的数据
RETI ;中断返回
END
3.2 PC机通信软件
PC机方面的通信程序用汇编语言编写.
程序如下:
stack Segment para stack ’code'
Db 256 dup(0)
Stack ends
Code Segment para public ’code’
Start proc far
Assume cs:code,ss:stack
PUSH DS
MOV AX,0
PUSH AX
CLI
INPUT: MOV AL,80H ;置DLAB=1
MOV DX,3FBH ;写入通信线控制寄存器
OUT DX,AL
MOV AL,30H ;置产生2400 b/s波特率除数低位
MOV DX,3F8H
OUT DX,AL ;写入除数锁存器低位
MOV AL,00H ;置产生2400 b/s波特率除数高位
MOV DX,3F9H
OUT DX,AL ;写入除数锁存器高位
MOV AL,03H ;设置数据格式
MOV DX,3FBH ;写入通信线路控制寄存器
OUT DX,AL
MOV AL,00H ;禁止所有中断
MOV DX,3F9H
OUT DX,AL
WAIT1: MOV DX,3FDH ;发送保持寄存器不空则循环等待
IN AL,DX
TEST AL,20H
JZ WAIT1
WAIT2: MOV AH,1 ;检查键盘缓冲区,无字符则循环等待
INT 16H
JZ WAIT2
MOV AH,0 ;若有,则取键盘字符
INT 16H
SEND: MOV DX,3F8H ;发送键入的字符
OUT DX,AL
RECE: MOV DX,3FDH ;检查接收数据是否准备好
IN AL,DX
TEST AL,01H
JZ RECE
TEST AL,1AH ;判断接收到的数据是否出错
JNZ ERROR
MOV DX,3F8H
IN AL,DX ;读取数据
AND AL,7EH ;去掉无效位
PUSH AX
MOV BX,0 ;显示接收字符
MOV AH,14
INT 10H
POP AXCMP AL,0DH ;接到的字符若不是回车则返回
JNZ WAIT1
MOV AL,0AH ;是回车则回车换行
MOV BX,0
MOV AH,14H
INT 10H
JMP WAIT1
ERROR: MOV DX,3F8H ;读接收寄存器,清除错误字符
IN AL,DX
MOV AL, ’?' ;显示‘?’号
MOV BX,0
MOV AH,14H
INT 10H
JMP WAIT1 ;继续循环
Start ends
Code ends
end start
5 参考文献
[1] 辛友顺,胡永生,薛小铃. 单片机原理与应用及C51程序设计,2009。7
[2]
展开阅读全文