计算机串行通信系统设计.docx
- 文档编号:4380960
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:19
- 大小:222.48KB
计算机串行通信系统设计.docx
《计算机串行通信系统设计.docx》由会员分享,可在线阅读,更多相关《计算机串行通信系统设计.docx(19页珍藏版)》请在冰豆网上搜索。
计算机串行通信系统设计
毕业论文
课题名称:
计算机串行通信系统设计
院系名称
专业
班级
学生姓名
学号
指导教师
完成日期:
摘要
在自动化控制和智能仪器仪表中,单片机的应用越来越广泛,由于单片机的运算功能较差,往往需要借助计算机系统,因此单片机和PC机进行远程通信更具有实际意义,通信的关键在于互传数据信息。
本设计介绍51系列单片机和PC机进行串口通信硬件电路的设计原理及通信软件的设计原理和方法,并给出硬件原理图及通信软件程序。
关键词:
串行通信;软件设计;VisualC++
ABSTRACT
Inautomaticcontrolandintelligentinstrumentation,themicrocontrolleriswidelyapplied,duetopoorfunctionofthemicrocontrolleroperation,oftenrequiretheuseofcomputersystems,remotemicrocontrollerandPC,moremeaningfulcommunication,communicationisthekeytopasseachotherData.DescribesthedesignandPC-51seriesserialcommunicationhardwarecircuitdesignprinciplesandcommunicationsoftwaredesignprinciplesandmethods,andgiveshardwareschematicsandcommunicationsoftware
Keywords:
SerialCommunication,SoftwareDesign,VisualC++
目录
摘要2
ABSTRACT2
目录3
一、引 言4
二、串行通信的基本知识4
2.1串口通信的概述4
2.2串行口结构5
2.2.1内部结构5
2.2.2特殊功能寄存器5
2.3串行通信接口7
2.4串行口的波特率8
2.4.1波特率的定义8
2.4.2波特率的计算8
2.4.3波特率的误差调整9
2.5串行口的4种工作方式10
2.5.1方式010
2.5.2方式111
2.5.3方式213
2.5.4方式314
2.6多机通信14
三、通信软件的设计15
3.1PC机上通信软件的设计15
3.1.1打开串口17
3.1.2设置串口17
3.1.3设置缓冲区大小18
3.1.4清除缓冲区18
3.1.5从串口接收数据18
3.1.6从串口发送数据18
3.1.7关闭串口18
3.2单片机收发软件设计19
3.2.1发送程序的设计19
3.2.2接收程序的设计19
四、总结20
4.1硬件方面的总结20
4.2软件方面的总结21
4.3整体设计和调试的总结21
五、致谢22
参考资料22
一、引 言
在现代生活和科学领域中,单片机的应用越来越广泛,由于单片机的运算功能较差,往往需要借助计算机系统,因此单片机和PC机进行远程通信更具有实际意义,通信的关键在于互传数据信息。
51系列单片机内部的串行口具有通信的功能,该串行口可以作为通信接口,利用该串行口与PC机的串行口COM1或COM2进行串行通信,将单片机采集的数据传送到PC机中,由PC机的高级语言或数据库语言对数据进行整理及统计等复杂处理就能满足实际的应用需要。
二、串行通信的基本知识
2.1串口通信的概述
1、串行通信:
指一个信息帧的各位数据被逐位地按顺序传输的通信方式。
串行通信通过串行口实现。
根据通信的同步性,串行通信可分为异步通信和同步通信。
根据信息的传输方向,串行通信又可分为单工通信、双工通信和半双工通信。
2、并行通信:
指一个信息帧的各位数据同时传输的通信方式。
并行通信依靠并行I/O接口实现。
MCS-51单片机中的并行I/O口就是并行通信
3、异步串行通信(UART):
就是通信的收/发双方不是通过共同的同步时钟信号来控制双方数据的传输,而是靠双方各自的时钟来控制双方数据的传输。
即双方有各自的控制时钟,双方传输数据不同步。
异步通信用起始位“0”表示字符的开始,然后从低位到高位逐位传送数据,最后用停止位“1”表示字符的结束。
4、同步串行通信:
就是通信的收/发双方依靠共同的同步时钟信号来控制双方数据的传输。
即双方拥有共同的同步控制时钟,双方传输数据同步。
在同步串行通信中,每一数据块开头时先发送1到2个同步字符,使发送与接收双方取得同步。
收双方的波特率相同。
5、单工通信:
指信息只能单方向传送。
6、半双工通信:
指信息能双向传送但不能同时双向传送。
7、全双工通信:
指信息能同时双向传送。
8、信息帧:
一个字符称一帧信息。
一般情况下,一帧信息包括1位起始位、8位数据位和1位停止位。
当然,数据位也可以是9位,此时,第9位数据D8可作奇偶校验位用,也可作地址/数据帧标志位用,D8=1表该帧信息传输的是地址,D8=0则表该帧信息传输的是数据。
9、波特率:
指发送脉冲和接收脉冲的频率,或每秒传送数据的位数。
2.2串行口结构
MCS-51单片机拥有的是一个全双工的异步串行通信口。
2.2.1内部结构
串行通信口的内部结构有两个物理上独立的接收、发送缓冲器SBUF,可同时接收、发送数据。
接收SBUF只能接收数据,发送SBUF只能发送数据。
虽然它们的字节地址都是99H,但属两个不同的寄存器。
T1充当波特率发生器。
2.2.2特殊功能寄存器
1、串行口控制寄存器(SCON)
图1串行口控制寄存器
SM1、SM0:
串行口工作方式选择位。
00-------方式0,同步移位寄存器方式,用于扩展I/O口;
01-------方式1,8位异步收/发方式,波特率可变,由T1确定;
10-------方式2,9位异步收/发方式,波特率为fosc/64或fosc/32;
11-------方式3,9位异步收/发方式,波特率可变,由T1确定;
图2串行口的内部结构
SM2:
多机通信控制位。
多机通信是在方式2和方式3下进行的,在方式0和方式1下不能进行多机通信。
在方式2和方式3下,若SM2=1,则只有当接收到的第9位数据位(RB8)为1时,硬件才将接收到的前8位数据送入SBUF,并置1RI,产生中断请求;当接收到的第9位数据位(RB8)为0时,则硬件将接收到的前8位数据丢弃。
若SM2=0,无论接收到的第9位数据位(RB8)为1还是0,硬件都将接收到的前8位数据送入SBUF,并置1RI,产生中断请求。
在方式1时,若SM2=1,则只有收到有效的停止位时才会激活RI。
在方式0时,SM2必须为0。
REN:
允许串行接收控制位。
由软件置1或清0。
REN=1,允许串行接收数据。
REN=0,禁止串行接收数据。
TB8:
第9位数据位发送位。
在方式2和方式3下,通过由软件置1或清0TB8位来发送第9位数据位。
在双机通信时,TB8一般作为奇偶校验位使用。
在多机通信时,TB8一般作为地址/数据帧标志位用,用来判断主机发送过来的数据是地址帧还是数据帧,TB8=1为地址帧,TB8=0为数据帧。
RB8:
第9位数据位接收位。
在方式2和方式3下,硬件会自动把接收到的第9位数据位放到RB8的。
我们只要读取RB8的内容就可知接收到的第9位数据位的内容。
在方式1时,如果SM2=0,RB8接收到的是停止位。
在方式0时,不使用RB8位。
TI:
发送中断标志位,由硬件置1。
当一帧数据发送结束时,硬件自动置1TI。
可供软件查询,也可申请中断。
CPU响应中断后,必须由软件清0TI,同时,在中断服务程序中向SBUF写入要发送的下一帧数据。
RI:
接收中断标志位,由硬件置1。
当一帧数据接收完毕时,硬件自动置1RI。
可供软件查询,也可申请中断。
CPU响应中断后,在
中断服务程序中应从接收SBUF中把数据取走,同时,由软件清0RI。
2、串行口电源控制寄存器(PCON)
字节地址为87H,不能位寻址。
图3串行口电源控制寄存器
SMOD:
波特率选择位。
方式1或方式3波特率的计算公式:
波特率=2SMOD*T1的溢出率
2.3串行通信接口
常用PC机串行接口有3种:
PS/2接口用于连接键盘和鼠标;RS232C串行接口一般用来实现PC机与较低速外部设备之间的远距离通信;USB通用串行总线接口是现在比较流行的接口,它最大的好处在于能支持多达127个外设,外设可以独立供电,也可以通过USB接口从主板上获得500mA@+5V的电流,并且支持热拔插,真正做到即插即用。
PC机的3种串行接口都可以用于与外设之间的数据通信,PS/2接口由于是专用于键盘和鼠标,在PC机的编程处理上要麻烦一些,而且在多数情况下,其他外设还不能占用。
USB接口有着功能强大、传输速度高、连接外设数量多,可向外设提供电源等特点,其应用越来越广,但是与RS232C串行接口比较,USB接口的上位机(即PC机)程序的开发有着开发难度大、涉及知识面广、开发周期长等特点,同时在下位机(即单片机)硬件设计时必须选用带有USB接口的单片机或扩展专门的USB接口芯片,这必然会给下位机的软硬件系统设计增加难度并提高了软硬件成本。
所以,USB接口通常用于对传输速度要求高、传输功能复杂、或需上位机提供电源的外设和装置上。
RS232C串行通信接口主要特点是技术成熟、结构简单,只需3条普通导线就可以进行双向通信,传输距离较远,一般可达10m以上。
现在流行的高级语言都支持对串口的直接操作,常用的单片机也把串行通讯口作为一个标准接口集成在单片机内,开发者在进行单片机应用系统设计时只需增加1片RS232C与TL电平转换芯片就可以构成一个单片机与PC机之间的RS232C串行通讯接口。
因此RS232C串行通讯接口的开发具有开发周期短,对开发者的软硬件水平要求不高等特点。
为了提高串行通信的可靠性,增大通信距离,一般采用标准串行接口、RS2232C、RS2422A等标准接口来进行串行通信。
EIARS2232C是异步串行通信中应用最广泛的标准总线,它包括了按位串行传输的电气和机械方面的规定。
在微机通信中,通常使用RS2232C接口即PC机的COM口。
PC机的COM口,输入输出为RS2232C电平,而51单片机串行口的输入输出均为TTL电平。
由于TTL电平和RS2232C电平互不兼容,所以两者接口时,必须进行电平转换。
电平转换最常用的芯片是传送线驱动器MC1488和接收器MC1489,其作用除了电平转换外,还实现正负逻辑电平转换。
图4是单片机与RS2232标准接口电路。
图4 RS2232C接口引脚定义
2.4串行口的波特率
2.4.1波特率的定义
波特率:
指串行口每秒钟发送/接收数据的位数。
2.4.2波特率的计算
对于方式0和方式2,其波特率固定:
方式0的波特率=fosc/12
方式2的波特率=2SMOD/64×fosc
对于方式1和方式3,其波特率可变且与T1的溢出率有关,计算如下:
波特率=2SMOD/32×T1的溢出率
T1的溢出率=fosc/(12×(溢出值-初值))
因此,波特率=(2SMOD/32)×[fosc/(12×(溢出值-初值))]
在实际设定波特率时,T1常设置为工作方式2(8位自动重装初值方式),这样可以避免因重装初值而带来定时误差。
对于8位的T1,其溢出值为256,对于13位的T1,其溢出值为8192,对于16位的T1,其溢出值为65536。
2.4.3波特率的误差调整
1、在使用的时钟振荡频率为6MHz或12MHz时,当计算某一波特率时的初值不为整数,若通过四舍五入的方法处理,必将使计算出的波特率产生误差。
为消除误差,可通过调整时钟振荡频率fosc来实现。
如可采用时钟振荡频率11.0592MHz的石英。
如:
对于8051单片机,串行口工作方式3,石英为12MHz,确定T1工作方式2为波特率发生器,SMOD=0。
若要求波特率为2400bit/s,则初值X为:
2400=1/32×[(12×106)/(12×(256-X))]→X=256–13.02083333333333,若取X=256–13,则波特率将产生误差。
若改石英为11.0592MHz,则初值X为:
2400=1/32×[(11.0592×106)/(12×(256-X))]→X=256–12=244。
2、在实际设定波特率时,若T1设置为工作方式1或方式3时,由于响应中断需要时间及在中断服务程序中执行重赋初值的指令需要时间,这样也会使波特率产生误差。
为消除误差,可通过在中断服务程序中改变初值的方法来加以调整。
如:
对于8051单片机,串行口工作方式3,石英为11.0592MHz,确定T1工作方式1为波特率发生器,SMOD=0。
若要求波特率为2400bit/s,则初值X为
2400=1/32×[(11.0592×106)/(12×(65536-X))]→X=65536–12=65524。
则为消除波特率误差,在重赋初值时,可改变X=65520。
至于X具体为何值,要通过分析执行重赋初值的指令需要时间来确定。
(考虑)一般情况下,波特率发生器尽可能使用T1方式2。
2.5串行口的4种工作方式
2.5.1方式0
作用:
同步移位寄存器输入/输出方式。
用于外接移位寄存器,以扩展并行I/O口。
不作串行通信口用。
数据帧格式:
8位数据为一帧,不设起始位和结束位。
从最低位开始发送或接收。
波特率:
固定为fosc/12。
数据的发送:
发送数据时,当CPU执行一条将数据写入发送缓冲器SBUF的指令时,即执行MOVSBUF,A指令,单片机硬件就会产生1个正脉冲,在这个正脉冲的作用下,串行口开始把发送缓冲器SBUF中的8位数据以固定波特率fosc/12从RXD引脚上串行输出,低位在先。
同时,TXD引脚上输出同步移位
脉冲。
当发送完8位数据时,硬件置1中断标志TI。
方式0工作时序如图5所示。
图5方式0发送数据工作时序
数据的接收:
接收数据时,REN为串行口允许接收控制位。
REN=0时,禁止接收,REN=1时,允许接收。
当写SCON置串行口工作于方式0且REN被置1同时RI=0时,单片机硬件会产生一个正脉冲,此时,串行口即可开始接收数据。
RXD为数据输入端,TXD为移位脉冲信号输出端,接收器也以fosc/12的固定波特率采用RXD引脚上的数据信号。
当接收器接收到8位数据时置1中断标志位RI,表一帧数据接收完毕,可读取接收到的数据,即执行MOVA,SBUF指令,同时可进行下一帧数据接收。
方式0数据的接收时序如图6所示。
图6方式0发送数据工作时序
注意,在方式0下,SCON中的TB8和RB8位没用到,发送或接收完8位数据时,硬件会自动置1中
断标志位TI或RI。
CPU响应中断后,TI或RI位必须由用户在中断服务程序中用软件来清0。
方式0时,
SM2位必须为0。
2.5.2方式1
作用:
8位异步收/发方式。
真正用于数据的串行发送和接收。
TXD引脚用于数据的发送,RXD引脚用于数据的接收。
数据帧格式:
1位起始位(0)+8位数据位+1位停止位
(1)=1帧数据。
数据位从最低位开始发送或接收。
波特率:
可变。
公式为方式1波特率=2SMOD/32×T1溢出率。
数据的发送:
发送数据时,数据位从TXD端输出,发送1帧信息为10位。
当CPU执行一条把数据写入发送SBUF的指令时,如:
MOVSBUF,A,单片机就启动了串行口数据的发送。
此时,由T1产生的TX时钟的频率就是发送数据的波特率。
发送开始时,内部发送控制信号/SEND有效,将起始位由TXD引脚先发送,此后,每经1个TX时钟,便产生一个移位脉冲,TXD上就输出一位数据,如此等等。
数据位就按此频率从TXD上一位一位输出。
当8位数据位全部发送完毕时,单片机硬件自动置1中断标志TI,然后控制信号/SEND失效。
方式1数据发送的时序如图7所示。
图7方式1数据发送的时序
数据的接收:
接收数据时,REN=1,数据从RXD引脚上输入。
当硬件检测到起始位的负跳变时,则开始接收数据。
接收时,定时控制信号有2种,一是接收移位时钟RX,它的频率与发送的波特率相同。
另一种是位检测器的采样脉冲,它的频率是RX时钟频率的16倍。
也就是说,在一个移位脉冲期间,有16个采样脉冲连续3次对输入RXD脚上的一位数据进行采样,取其中2次相同的值为有效,以保证接收到的数据的准确性。
当然,这些操作都是由硬件自动完成的,无需用户操心。
当一帧数据接收完毕,必须同时满足以下2条件,这次接收数据才算有效。
(1)RI=0,即在上一帧数据接收完毕时,RI=1,发出的中断请求已被响应,SBUF中的数据已被取走,
同时用户已用软件清0中断标志位RI,表明此时的接收SBUF已空。
(2)SM2=0或接收到的停止位为1(方式1时,停止位已进入RB8),也即RB8=1,则将接收到的数据
装入SBUF和RB8(RB8中装人停止位)中,且置1中断标志位RI。
若上两条件不同时满足,则接收到的数据不能装人到SBUF当中,这也就意味着该帧信息接收失败,数据将丢失。
数据接收的时序如图8所示。
图8方式1数据接收的时序
2.5.3方式2
作用:
9位异步收发方式。
用于数据的串行发送和接收。
TXD引脚用于数据的发送,RXD引脚用于数据的接收。
数据帧格式:
1位起始位(0)+8位数据位+1位可程控为0或1的第9位+1位停止位
(1)=1帧数据。
数据位从最低位开始发送或接收。
波特率:
可变。
公式为方式2波特率=2SMOD/64×fosc。
数据的发送:
发送数据前,先根据通信协议由软件设置TB8(双机通信时,TB8为奇偶校验位,多机通信时,TB8为地址/数据标志位)。
然后将要发送的数据写入SBUF中,硬件将自动启动数据发送过程。
串行口硬件会自动把TB8中的内容取出,并装人到信息帧的第9位数据位的位置,再逐一发送出去。
发送完毕,硬件把TI位置1。
方式2数据发送的时序如图9所示。
图9方式2和方式3数据发送时序
数据的接收:
接收数据时,REN=1,数据从RXD引脚上输入。
接收过程与方式1类似。
当接收完9位数据时,同样需要同时满足两个条件,才能将接收到的数据送入SBUF中。
(1)RI=0,即接收SBUF为空;
(2)SM2=0或RB=1。
当以上条件同时满足时,接收到的数据装人SBUF,同时将第9位数据位送入RB8,并置1中断标志位RI。
若不满足,则接收到的数据将丢失。
方式2数据接收的时序如图8-7所示。
2.5.4方式3
作用和数据帧格式同方式2基本相同,只是波特率不同。
方式3波特率=2SMOD/32×T1溢出率。
方式3的收发数据的时序如图10所示。
图10方式2和方式3数据接收时序
2.6多机通信
1﹥特点:
多机通信是一主多从式的通信,由主机控制多机间的通信,从机间的通信只能通过主机才能实现。
多机通信主要适用于串口通信方式2和方式3时接收数据情况下。
2﹥多机通信原理:
在串行口工作于方式2或方式3的接收情况时,
若SM2=1,则:
当接收到的第9位数据位为1时,接收到的数据装人SBUF中,并置1中断标志位RI,向CPU发出中断请求;
当接收到的第9位数据位为0时,接收到的数据将抛弃,不产生中断标志,不向CPU发出中断请求。
若SM2=0,则接收到的第9位数据位不论是0还是1,都将接收到的数据装人SBUF中,并置1中断标志位RI,向CPU发出中断请求。
3﹥多机通信过程
1、各从机初始化时都允许串行口中断,并将串行口编程为方式2或方式3接收(9位异步通信方式),同时置1SM2位和REN位,使各从机只处于多机通信且接收地址帧的状态。
2、在主机与某一从机通信之前,主机先将某一从机的地址发送给各从机系统。
主机发出的地址帧的第9位数据位为1。
当主机向各从机发送地址时,各从机由于SM2=1,各从机都接收来自主机的第9位数据位为1的地址帧信息,并置1中断标志位RI。
各从机响应中断,并在中断服务程序中判断主机送来的地址与本地址是否相一致。
若为本机地址,则清0该从机的SM2位,准备接收主机发来的数据或命令;若地址与本从机地址不符,则仍保持SM2=1状态。
3、接着,主机发送数据或命令。
此时,各从机接收到的数据的RB8=0,只有与前面主机发送地址相一致的从机才能接收数据并置1中断标志位RI,请求中断,从而进入中断服务程序,在中断服务程序中接收主机发来的数据或命令。
其它从机因SM2仍保持为1且接收到的RB8=0,不能激活RI,不能产生中断请求,硬件会自动把接收到的数据抛弃不作处理,从而保证了主从机间通信的正确性。
三、通信软件的设计
PC机和单片机在进行通信时,首先分别对各自的串行口进行初始化、确定串行口工作方式、设定波特率、传输数据长度等,然后才开始数据传输,这些工作是由软件来完成的,因此对PC机和单片机均需设计相应的通信软件。
3.1PC机上通信软件的设计
DOS环境下,串行通信一般用中断方式来实现,用户对通信端口进行完全控制。
而在Windows环境下,系统禁止应用程序直接对硬件进行操作。
在Windows环境下提供了完备的API应用程序接口函数,程序员通过这些函数与通信硬件接口。
通信函数是中断驱动的:
发送数据时,先将其放入缓存区,串口准备好后,就将其发送出去;传来的数据迅速申请中断,使Windows接收它并将其存入缓冲区,以供读取。
接收方式主要有查询和中断方式。
采用查询方式时,CPU要不断测试串口是否有数据,以防接收串口数据时出现错误、效率低;而采用中断方式则无需测试串口,一旦有数据传至,CPU终止当前任务,由中断服务程序完成操作。
因此,中断方式具有效率高、接收准确、编程简单等特点。
图5 MC1488引脚示意图
图6 MC1489引脚示意图
图7 单片机与RS2232标准接口电路
开始通信前,首先要初始化串口,包括选串口、设置串口掩码、设置缓冲区、设置波特率、创建同步事件、创建线程并让辅助线程处于发信号状态等。
用户通过调用API提供的函数来完成。
Win32对I/O口,如串口、并口等进行操作需通过“文件”方式实现,串口的打开、关闭、读取和写入所用的函数和操作文件的方式相似。
3.1.1打开串口
可使用CreateFile()函数,其格式如下:
HANDLECreateF
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 串行 通信 系统 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)