基于RS-232C的串口通信设计毕业论文

上传人:红** 文档编号:182574031 上传时间:2023-01-25 格式:DOC 页数:37 大小:811.13KB
返回 下载 相关 举报
基于RS-232C的串口通信设计毕业论文_第1页
第1页 / 共37页
基于RS-232C的串口通信设计毕业论文_第2页
第2页 / 共37页
基于RS-232C的串口通信设计毕业论文_第3页
第3页 / 共37页
点击查看更多>>
资源描述
基于RS-232C的串口通信摘 要随着计算机系统的应用和微机网络的发展,通信功能越来越显的重要。通信既包括计算机与外部设备之间,也包括计算机和计算机之间的信息交换。由于串行通信是在一根传输线上一位一位的传送信息,所用的传输线少,并且可以借助现成的电话网进行信息传送,因此,特别适合于远距离传输。串口接口RS-232C实现较为简单,可以实现全双工的实时通信。因此,它作为一种标准,目前已在微机通信接口中广泛采用。PC机与单片机之间传送数据可通过RS-232C接口实现。PC机可以作为上位机,单片机作为从机进行串口通信。PC机在Windows平台上,利用Visual Basic编程语言中的 mscomm控件可以开发串口通信程序界面,进行串口通信的实时观测,并利用MAX232进行电平转换与单片机相连。通过单片机编写通信协议就可以实现PC机与单片机之间的数据传送,从而实现基于RS-232C的串口通信控制。关键词: 单片机 MAX232 RS-232C 串口通信 Visual BasicSerial Port Communication Based on RS-232C AbstractAlong with the application of computer system and the development of microcomputer network, Communication is more and more important .It can be exchange information between computer and the peripheral equipments , and between computer and the other computers .Because the serial communication is transmitted the information with bit by bit ,it only uses a few line and also can use the ready-made telephone line .So it suits to the long-distance transmission .the RS-232C realization is simple and the communication is duplex and real-time. Therefore it is looked as a kind of standard and used in microcomputer communication widely .The realization of data communication between PC and single-chip can use RS-232C. During the communication PC is a upper machine and single-chip is host machine .In the windows platform ,using mscomm control in Visual Basic software to develop the surface of serial port communication and carry on real-time observation .Using MAX232 to realize the level conversion and connect with single-chip .Programming in the single-chip to realize the communication protocol and it can complete the data transmission.Key words: single-chip; MAX232;RS-232C; Serial port communication; Visual Basic 目 录1引言12 Visual Basic与单片机实现串口通信的总体设计方案22.1 Visual Basic与单片机串口通信功能的实现方法22.2 MAX232的结构与功能32.3 MAX232实现PC机与单片机的联调33 Visual Basic开发串口通信程序设计53.1mscomm控件实现串口通信的方法53.2 Visual Basic开发串口通信程序界面设计84单片机开发串口通信程序设计154.1 MCS-51单片机的串口结构与功能154.2波特率的产生与通信协议的制定184.3单片机程序设计205结论23谢辞24参考文献25附录26外文资料35 1引言不同的独立系统经由线路相互交换数据便是通信。通信的形式可以区分为两种,一种是并行传输方式的通信,另一种则为串行传输方式的通信。所谓并行通信是指一次传输8位(1个字节);而串行通信一次只传输1位。计算机与计算机或计算机与终端之间的数据传送可以采用串行通信和并行通信二种方式。由于串行通信方式具有使用线路少、成本低,特别是在远程传输时,避免了多条线路特性的不一致而被广泛采用。 在串行通信时,要求通讯双方都采用一个标准接口,使不同的设备可以方便地连接起来进行通信。 RS-232C接口(又称 EIA RS-232-C)是目前最常用的一种串行通信接口。RS-232C标准是美国EIA(电子工业联合会)与BELL等公司一起开发的1969年公布的通信协议。它适合于数据传输速率在020000b/s范围内的通信。这个标准对串行通信接口的有关问题,如信号线功能、电器特性都作了明确规定。大多数通信设备厂商都生产与RS-232C制式兼容的通信设备。RS-485也是一种常用的通信标准,在要求通信距离为几十米到上千米时,广泛采用RS-485 串行总线标准。RS-485采用平衡发送和差分接收,因此具有抑制共模干扰的能力。但RS-232C由于实现较为简单,而且价格上也便宜很多,可以实现全双工的实时通信。因此,它作为一种标准,目前已在微机通信接口中被广泛采用。 PC机与单片机相结合在工业监控、数据采集和实时控制系统中应用广泛。其中,单片机系统作为从机进行数据采集和执行控制,而PC机作为主机进行发送命令、实时检测、数据存储、动态显示等工作。利用Visual Basic中的mscomm 控件可实现与单片机的串行通信。其中可利用VB开发串口通信程序,单片机编写通信协议就可实现双方数据的传送与接收。2 Visual Basic与单片机实现串口通信的总体设计方案 2.1 Visual Basic与单片机串口通信功能的实现方法串行通信的数据是逐位传送的,发送方发送的每一位都具有因定的时间间隔,这就要求接收方也要按照发送方同样的时间间隔来接收每一位。不仅如此,接收方还要确定一个信息组的开始和结束。为此,串行通信对传送数据的格式作了严格的规定。不同的串行通信方式具有不同的数据格式。常用的两种基本串行通信方式有同步通信和异步通信。所谓同步通信是指在约定的通信速率下,发送端和接收端的时钟信号频率和相信始终保持一致(同步),这就保证了通信双方在发送和接收数据时具有完全一致的定时关系。同步通信传送信息的位数几乎不受限制,通常一次通信传的数据有几十到几千个字节,通信效率较高。但它要求在通信中保持精确的同步时钟,所以其发送器和接收器比较复杂,成本也较高,一般用于传送速率要求较高的场合。 异步通信是指通信中两个字符之间的时间间隔是不固定的,而在一个字符内各位的时间间隔是固定的。异步通信规定字符由起始位(start bit)、数据位(data bit)、奇偶校验位(parity)和停止位(stop bit)组成。起始位表示一个字符的开始,接收方可用起始位使自己的接收时钟与数据同步。停止位则表示一个字符的结束。这种用起始位开始,停止位结束所构成的一串信息称为帧(frame)。比较适合于远距离串行通信。 常用于数据通信的传输方式有单工、半双工、全双工。单工方式:数据仅按一个固定方向传送。因而这种传输方式的用途有限,常用于串行口的打印,数据传输与简单系统间的数据采集。半双工方式:数据可实现双向传送,但不能同时进行,实际的应用是采用某种协议实现收/发开关转换。全双工方式:允许双方同时进行数据双向传送,可以实时通信。本设计采用的是PC机与单片机的全双工异步通信方式。具体方案如下:(1)Visual Basic是一种可视化的编程语言,利用Visual Basic中的控件建立一个用户端的界面,供用户进行选择进入主程序界面。(2)在Visual Basic主界面程序中添加mscomm控件,开发串口通信程序。(3)通过MCS-51系列单片机编写串口通信协议。(4)单片机进行数码管接口扩展,数码管显示PC机发送的数据,并且将PC机发送的数据通过单片机回传给PC机。即通过PC机的VB串口通信程序界面,从PC机键盘发送一个数传给单片机则单片机控制的数码管则可以显示该数,并且将发送的数据传回PC机,若接受到的数据与发送的数据相同且与数码管显示的数据相同则表示发送成功。(5)由于RS-232接口与单片机的电气特性不同,可通过MAX232芯片进行电平转换,联调单片机与PC机进行串口通信。2.2 MAX232的结构与功能MAX232 芯片是MAXIM 公司生产的,包含两路接收器和驱动器的IC 芯片。RS-232C采用的是EIA电平,其规定如下:在TXD、RXD上规定逻辑1时,电压为-3V -15V,逻辑0时,为+3V +15V。而单片机所用的是TTL+5V逻辑电平。MAX232 芯片内部有一个电源电压转换器,可以把输入的+ 5V 电压变换为RS-232 输出电平所需的-10 +10V 电压。所以采用此芯片接口串行通信系统只需单一的 + 5V 电源就可以了。对于没有- 12 + 12V 的场合,其适应性更强。加之其价格适中,硬件接口简单,所以被广泛采用。其芯片引脚图如下:图1 MAX232引脚结构其中引脚11,12为TTL电平接口的收发引脚。13,14为RS-232C接口的收发引脚。2.3 MAX232实现PC机与单片机的联调目前较为常用的RS-232C 9针串口在通信距离较近时,仅需3根线便可在两个数字设备之间全双工的传送数据,即需要TXD、RXD、GND即可完成。RS-232针脚的功能如下:TXD(pin 3):串口数据输出RXD(pin 2):串口数据输入RTS(pin 7):发送数据请求CTS(pin 8):清除发送DSR(pin 6):数据发送就绪DCD(pin 1):数据载波检测DTR(pin 4):数据终端就绪GND(pin 5):地线RI (pin 9):载波侦测连线方式如下图所示:MCS-51 P3.0 P3.1 图2 PC机与单片机连线方法3 Visual Basic开发串口通信程序设计 3.1mscomm控件实现串口通信的方法一般说来,计算机都有一个或多个串行端口,它们依次为Com1,Com2,这些串口还提供了外部设备与PC机进行数据传输和通信的通道,这些串口在CPU和外设之间充当解释器的角色。当字符数据从CPU发送给外设时,这些字符数据将被转换成串行比特流数据;当接收数据时,比特流数据被转换为字符数据传递给CPU。而Visual Basic 是一种可视化的,面向对象和采用事件驱动方式的结构化高级程序设计语言,可用于开发Windows 环境下的各类应用程序。Visual Basic的版本分为普及版,企业版,专业版。可以进行串口通信程序开发的串行通信组件包含在企业版及专业版中。Visual Basic企业版及专业版中提供了串行端口控制mscomm来为应用程序提供串行通信。该控件屏蔽了通信过程中的底层操作,可以设置、监视mscomm控件的属性和事件,结合Timer控件即可完成对串行口的初始化和数据的输入输出工作。由于Visual Basic的mscomm控件不会主动出现在工具箱中,因此可在Visual Basic工程界面中的工具箱中空白处单击鼠标右键选择部件选项,在弹出的对话框中选择添加Microsoft Comm Control 6.0 控件。 mscomm控件的主要属性如下:(1)Commport 设置并返回通讯端口号。端口号可以设置为116的任何数,如mscomm.Commport=2表示设置当前通讯端口为COM2。(2)Setting 设置并返回波特率、奇偶校验、数据位、停止位。格式为mscomm.Setting=String。String是一个包含四部分的字符串:第一部分为波特率;第二部分为奇偶校验,N表示不校验,M表示符号校验,E表示偶校验,O表示奇校验,S表示空格校验;第三部分为数据位数,其可选值为4,5,6,7,8;第四部分为停止位位数,其可选值为1,1.5,2。例如Setting属性的缺省值为“1200,N,8,1”。该属性中各含义如下:波特率:是一个衡量通信速度的参数。它表示每秒钟传送的bit的个数。例如200波特表示每秒钟发送200个bit。当提到时钟周期时,就是指波特率。例如如果协议需要9600波特率,那么时钟是9600Hz。这意味着串口通信在数据线上的采样率为9600Hz。数据位:是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7和8位。如何设置取决于要传送的信息。比如,标准的ASCII码是0127(7位)。扩展的ASCII码是0255(8位)。如果数据使用简单的文本(标准 ASCII码),那么每个数据包使用7位数据。每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。停止位:用于表示单个包的最后一位。典型的值为1,1.5和2位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。奇偶校验位:在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。如果是奇校验,校验位位1,这样就有3个逻辑高位。高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步。(3)Portopen 设置并返回通讯端口的状态,也可以打开和关闭端口。(4)Input 从接收缓冲区返回和删除字符。该属性在运行时为只读。(5)InputLen 设置并返回每次Input属性从接收缓冲区中读取的字符数。InputLen属性的缺省值为0。设置InputLen为0时,Input将读取接收缓冲区的全部字符。(6)Output 向传送缓冲区写数据。要传送的数据可是文本数据或二进制数据。(7)CommEvent 返回最近的通讯事件或错误。只要有通讯错误或事件发生错误时就会产生Oncomm事件。CommEvent属性中存有该错误或事件的数值代码。在VB开发串口程序时需多次用到Timer控件,其主要属性如下:(1)Enabled 返回或设置一个值,该值用来确定一个窗体或控件否能够对用户产生的事件作出反应。通过把Enabled设置为“False”来使Timer控件成为无效,将取消由控件的Interval属性所建立的倒计时数。(2)Interval 返回或设置对Timer控件的计时事件调用间的毫秒数。Timer控件的Enabled属性决定该控件是否对时间的推移作出响应。将Enabled设置为“False”会关闭Timer控件,设置为“True”则打开Timer控件。当Timer控件置为有效时,倒计时总是从其Interval属性设置值开始。创建Timer事件程序。可通知VB在每次Interval到时该做什么。Timer控件和Enabled属性设置为“True”时,VB将在Interval时间到后自动访问Timer_Timer过程。为实现通信程序,须在VB开发环境下设置一个用做控制通信的窗体。窗体上主要有通信控件mscomm和Timer控件。VB的特点是事件驱动,定时器控件会定时触发相应事件的驱动程序。通信程序如下:(1)在添加的mscomm控件的属性中选择CommPort的端口号为1。(若Comm1口被占用可选择Comm2口)此属性也可以通过代码设置其程序如下:mscomm1.Commport1=1(2)设置握手协议即mscomm的HandShanking为0-ComNone (3)设置传输速度参数属性Setting 为“1200,N,8,1”其意义(即通信协议)表示为所使用的通信端口是以每秒1200Bit的速度传输,不作字符校验,每次数据位是8个Bit,而停止位是1个Bit。(4)设置两个文本框TEXT1,TEXT2用于接收与发送数据。在添加一个Timer控件控制自动侦测接受数据。Timer控件的Interval属性值为20。(5)打开通信端口:mscomm1.PortOpen = True(6)接收数据程序的实现方法:Private Sub Command4_Click()Dim Buf$Buf = Trim(MSCOMM1.Input)If Len(Buf) = 0 ThenText1.Text = ElseText1.Text = BufEnd IfEnd Sub(7)启动自动侦测读取数据的程序:Private Sub Command5_Click()Timer1.Enabled = Not Timer1.EnabledEnd SubPrivate Sub Timer1_Timer()If mscomm1.InBufferCount 0 ThenText1.Text = Text1.Text + mscomm1.InputEnd IfEnd Sub(8)发送程序的实现方法:Private Sub Command1-Click()Comm1. Output = Text1. Text ;将发送区文本框中的内容放入End Sub(9)清空接收区显示数据Private Sub Command6_Click()Text1.Text = End sub(10)结束Private Sub Command 3-Click()Comm1. PortOpen = False End Sub3.2 Visual Basic开发串口通信程序界面设计1、封面1的设计:(1)打开一个新的Visual Basic工程,在新建工程选项框中选择标准EXE。在Form 属性中的Picture中选择添加图片。这样就完成了显示屏幕中出现图片的效果。初始化代码为:Private Sub Form_Load()Set ball.Picture = LoadPicture(D:04计通1图片00.jpg)X = 10Y = 10 ;定义添加图片出现的起始位置 a = 30 b = 50End Sub (2)动态图片的设计:在Form界面中添加一个Timer控件,设其Interval属性值为20,enable属性为Ture 。这样就实现了封面中类似屏保的图片的移动。在Timer事件中的图片动态显示程序代码:Private Sub Timer1_Timer()ball.Move X, YX = X + aY = Y + bIf X = Form2.Width - ball.Width Then a = -50If Y = Form2.Height - ball.Height Then b = -20If X = 0 Then a = 10If Y 30 Then X = 1If Y 15 Then Y = 1Label1.ForeColor = QBColor(Y)Label1.FontSize = XEnd Sub (2)同理在在Form界面中添加一个计时器Timer( Timer3)控件,设其Interval属性值为100。添加一个标签Label2设Caption属性为“欢迎点击进入” 此标签用于提示进入主界面。程序代码为:Dim X, Y, a, b As SinglePrivate Sub Timer3_Timer()Static X, YY = Y + 1X = X + 1If X 40 Then X = 1If Y 15 Then Y = 1Label2.ForeColor = QBColor(Y)Label2.FontSize = XEnd Sub(3)移动图片实现的方案:添加1个计时器Timer (Timer1)控件设其Interval属性值为100。添加Image1,Image2 ,Image3, Image4, Image5, Image6控件,Stretch属性均为Ture, Image1,Image2加载PC机图片,Image4, Image5添加单片机图片。Image1,Image2,Image4, Image5的visible为False。这样可以实现图片从屏幕左边逐渐右移并循环移动的效果。程序代码为:Private Sub Timer1_Timer()If Image3.Left frmSplash.ScaleWidth ThenImage3.Left = frmSplash.ScaleLeft - 200End IfImage3.Left = Image3.Left + 350If Image3.Picture = Image1.Picture ThenImage3.Picture = Image2.PictureElseImage3.Picture = Image1.PictureEnd IfIf Image6.Left frmSplash.ScaleWidth ThenImage6.Left = frmSplash.ScaleLeft - 200End IfImage6.Left = Image6.Left + 350If Image6.Picture = Image1.Picture ThenImage6.Picture = Image5.PictureElseImage6.Picture = Image4.PictureEnd IfEnd Sub图4 界面1 3、选项对话框的设计在工具箱中空白处单击鼠标右键选择部件选项,在弹出的对话框中选择添加Sstab 控件。在该控件的属性中分别设置标题为“通用”、“缓存”、“硬件”。在每一个标题下添加命令按钮用以三个标题的切换。选项对话框可以使得用户随时查看串口通信的参数信息。程序如下:Private Sub command1_Click()Dialog.Visible = FalseEnd SubPrivate Sub Command2_Click()Dialog.Visible = FalseEnd SubPrivate Sub Command3_Click()Dialog.Visible = FalseEnd Sub图5 选项对话框4、主界面的设计(1)菜单的设计:新建一个form界面。通过工具栏的菜单编辑器选项编辑菜单,设计标题为“启动程序”、“字体”、“颜色”、“选项”然后通过菜单的Click事件调用各个程序。在工具箱中空白处单击鼠标右键选择部件选项,在弹出的对话框中选择添加2个CommonDiolag控件。单击“字体”、“颜色”、“选项”后可以调出各个对话框。程序代码如下:颜色对话框程序代码:Private Sub color_Click()CommonDialog1.Flags = 1CommonDialog1.color = BackColorCommonDialog1.Action = 3Text2.ForeColor = CommonDialog1.colorEnd Sub字体对话框程序代码:Private Sub Fontname_Click()CommonDialog2.Flags = 3CommonDialog2.ShowFontText2.fontname = CommonDialog2.fontnameText2.FontSize = CommonDialog2.FontSizeText2.FontBold = CommonDialog2.FontBoldText2.FontItalic = CommonDialog2.FontItalicText2.FontUnderline = CommonDialog2.FontUnderlineText2.FontStrikethru = CommonDialog2.FontStrikethruEnd Sub(2)动态字幕的实现方案在主界面中添加一个picture 控件和一个Label标签与一计时器控件。Label标签的Caption属性为“ 基于RS-232的单片机与PC机串口通信实验演示” Timer 控件设其Interval属性值为100。将Label标签添加在picture 控件中,这样实现了字幕自左端向右循环移动的效果。程序代码为:Dim thetitle As String, counter1 As IntegerPrivate Sub Timer2_Timer()Dim str As Stringstr = Mid(thetitle, 1, counter1)If Len(str) = Len(thetitle) Thencounter1 = 0End IfLabel3.Caption = strcounter1 = counter1 + 1End Sub(3)图片交替显示的实现方案:在主界面中添加Image1 ,Image2, Image3控件,Stretch属性均为TureImage1,加载PC机图片Image2添加单片机图片。在加入一个Timer控件设其Interval属性值为300。这样实现单片机图片与PC机图片交替出现的效果。程序代码如下:Private Sub Timer4_Timer()If Image3.Left Form1.ScaleWidth ThenImage3.Left = Form1.ScaleLeft - 200End IfImage3.Left = Image3.Left + 300If Image3.Picture = Image1.Picture ThenImage3.Picture = Image2.PictureElseImage3.Picture = Image1.PictureEnd IfEnd Sub通过以上程序就可以完成Visual Basic实现串口通信的设计。图6 主界面4单片机开发串口通信程序设计4.1 MCS-51单片机的串口结构与功能MCS-51单片机的主要结构包含以下几个部分:1、中央处理器(CPU):MCS-51的CPU能处理8位二进制数或代码。2、内部数据存储器(RAM):8051芯片共有256个RAM单元,其中后128单元被专用寄存器占用,能作为寄存器供用户使用的只是前128单元,用于存放可读写的数据。因此通常所说的内部数据存储器就是指前128单元,简称内部RAM。地址范围为00HFFH(256B)。是一个多用多功能数据存储器,有数据存储、通用工作寄存器、堆栈、位地址等空间。3、内部程序存储器(ROM): 8051内部有4KB的ROM,用于存放程序、原始数据或表格。4、定时器/计数器:8051共有2个16位的定时器/计数器,以实现定时或计数功能,并以其定时或计数结果对计算机进行控制。定时时靠内部分频时钟频率计数实现,做计数器时,对P3.4(T0)或P3.5(T1)端口的低电平脉冲计数。5、并行I/O口:MCS-51共有4个8位的I/O口(P0、P1、P2、P3)以实现数据的输入输出。6、串行口:MCS-51有一个全双工的串行口,以实现单片机和其它设备之间的串行数据传送。该串行口功能较强,既可作为全双工异步通信收发器使用,也可作为移位器使用。RXD( P3.0)脚为接收端口,TXD(P3.1)脚为发送端口。7、中断控制系统:MCS-51单片机的中断功能较强,以满足不同控制应用的需要。共有5个中断源,即外中断2个,定时中断2个,串行中断1个,全部中断分为高级和低级共两二个优先级别。8、时钟电路:MCS-51芯片的内部有时钟电路,但石英晶体和微调电容需外接。时钟电路为单片机产生时钟脉冲序列。系统允许的晶振频率为12MHZ。 MCS-51单片机内部有一个全双工的串行通信口,即串行接收和发送缓冲器(SBUF),这两个在物理上独立的接收发送器,既可以接收数据也可以发送数据。但接收缓冲器只能读出不能写入,而发送缓冲器则只能写入不能读出,这个通信口既可以用于网络通信,亦可实现串行异步通信,还可以构成同步移位寄存器使用。如果在串行口的输入输出引脚上加上电平转换器,就可方便地构成标准的RS-232C接口. 该串行口功能较强,既可作为全双工异步通信收发器使用,也可作为移位器使用。RXD( P3.0)脚为接收端口,TXD(P3.1)脚为发送端口。MCS-51单片机串行口寄存器结构图7所示。SBUF为串行口的收发缓冲器,它是一个可寻址的专用寄存器,其中包含了接收器和发送器寄存器,可以实现全双工通信。MCS-51的串行数据传输很简单,只要向发送缓冲器写入数据即可发送数据。从接收缓冲器读出数据即可接收数据。其内部结构如下:图7 MCS-51单片机串行口寄存器结构串行口控制寄存器(SCON)结构如下: 表1串行口控制寄存器(SCON) D7 D6 D5 D4 D3 D2 D1 D0SMOSM1SM2RENTB8RB8TIRI各控制位功能介绍如下: (1)SM0、SM1:串行口工作方式控制位。 SM0、SM1:工作方式 00 方式0 01 方式1 10 方式2 11 方式3 (2)SM2:多机通信控制位。 多机通信是工作于方式2和方式3,SM2位主要用于方式2和方式3。接收状态,当串行口工作于方式2或3,以及SM2=1时,只有当接收到第9位数据(RB8)为1时,才把接收到的前8位数据送入SBUF,且置位RI发出中断申请,否则会将接受到的数据放弃。当SM2=0时,就不管第位数据是0还是1,都难得数据送入SBUF,并发出中断申请。 工作于方式0时,SM2必须为0。 (3)REN:允许接收位。 REN用于控制数据接收的允许和禁止,REN=1时,允许接收,REN=0时,禁止接收。 (4)TB8:发送接收数据位8。 在方式2和方式3中,TB8是要发送的即第9位数据位。在多机通信中同样亦要传输这一位,并且它代表传输的地址还是数据,TB8=0为数据,TB8=1时为地址。 (5)RB8:接收数据位8。 在方式2和方式3中,RB8存放接收到的第9位数据,用以识别接收到的数据特征。 (6)TI:发送中断标志位。 可寻址标志位。方式0时,发送完第8位数据后,由硬件置位,其它方式下,在发送或停止位之前由硬件置位,因此,TI=1表示帧发送结束,TI可由软件清“0”。 (7)RI:接收中断标志位。 可寻址标志位。接收完第8位数据后,该位由硬件置位,在其他工作方式下,该位由硬件置位,RI=1表示帧接收完成。PCON主要是为CHMOS型单片机的电源控制而设置的专用寄存器,单元地址是87H, SMOD=1则波特率加倍。其结构格式如下: 表2电源管理寄存器结构PCOND7D6D5D4D3D2D1D0位符号SMOD-GF1GF0PDIDL中断允许寄存器IE: ES为串行中断允许控制位,ES=1允许串行中断,ES=0,禁止串行中断。 表3中断允许寄存器结构位符号EA-ESET1EX1ET0EX0位地址AFHAEHADHACHABHAAHA9HA8H因为预先设置传输数据时是8个数据位,1个停止位。所以可设置串口工作方式1,方式1是一个8位的异步串行通信接口。SCON控制寄存器的初值为: 表4 SCON控制寄存器的初值 D7 D6 D5 D4 D3 D2 D1 D0SMOSM1SM2RENTB8RB8TIRI01010010串口的初始化程序为:mov scon, #52h ;串口工作在方式14.2波特率的产生与通信协议的制定MCS-51的单片机内有两个16位可编程的定时/计数器,它们具有四种工作方式,其控制字和状态字均在相应的特殊功能寄存器中,通过对控制寄存器的编程,就可方便地选择适当的工作方式。MCS-51单片机内部的定时/计数器的结构中,定时器T0是由特性功能寄存器TL0(低8位)和TH0(高8位)构成,定时器T1由特性功能寄存器TL1(低8位)和TH1(高8位)构成。特殊功能寄存器TMOD控制定时寄存器的工作方式,TCON则用于控制定时器T0和T1的启动和停止计数,同时管理定时器T0和T1的溢出标志等。程序开始时需对TL0、TH0、TL1和TH1进行初始化编程,以定义它们的工作方式和控制T0和T1的计数。 TMOD和TCON这两个特殊功能寄存器的格式参见下表:TMOD用于控制T0、T1的工作方式: 表5 TMOD寄存器结构D7D6D5D4D3D2D1D0GATAC/TM1M0GATAC/TM1M0T1方式字段T0方式字段其中低四位用于T0,高四位用于T1。M1、M0是工作方式的控制位,当M1M0=10时为工作方式2(为常数自动重装入的8为定时/计数器)GATE=0时,只要用软件TR0或TR1置1就可以启动定时器,而GATE=1时只有INT0或INT1引脚为高电平且由软件使TR0或TR1置1时才能启动定时器。C/T=0时为定时方式,C/T=1时为计数方式。定时器控制积存器TCON,字节地址为88H,位地址为88H8FH,其格式如表6: 表6TCON结构D7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0IT0TR1由软件置位和清零来启动或关闭T1。当GATE=0时,TR1=1时,允许T0计数,当GATE=1时,仅当TR1=1时且INT0为高电平时才可启动TR0计数。当M1M0=10时,定时/计数器处于工作方式2.此时定时器的等效电路如图8所示。图8 定时/计数器工作方式2的等效电路工作方式0和工作方式1的最大特点就是计数溢出后,计数器为全0,因而循环定时或循环计数应用时就存在反复设置初值的问题,这给程序设计带来许多不便,同时也会影响计时精度,工作方式2就针对这个问题而设置,它具有自动重装载功能,即自动加载计数初值,所以也有的文献称之为自动重加载工作方式。在这种工作方式中,16位计数器分为两部分,即以TL0为计数器,以TH0作为预置寄存器,初始化时把计数初值分别加载至TL0和TH0中,当计数溢出时,不再象方式0和方式1那样需要“人工干预”,由软件重新赋值,而是由预置寄存器TH以硬件方法自动给计数器TL0重新加载。 程序初始化时,给TL0和TH0同时赋以初值,当TL0计数溢出时,置位TF0的同时把预置寄存器TH0中的初值加载给TL0,TL0重新计数。如此反复,这样省去了程序不断需给计数器赋值的麻烦,而且计数准确度也提高了。但这种方式也有其不利的一面,就是这样一来的计数结构只有8位,计数值有限,最大只能到255。所以这种工作方式很适合于那些重复计数的应用场合。例如我们可以通过这样的计数方式产生中断,从而产生一个固定频率的脉冲。也可以当作串行数据通信的波特率发送器使用。当M1M0=10时,定时/计数器处于工作方式2在种情况下,定时/计数器1通常作为串行口的波特率发生器使用,以确定串行通信的速率。当作波特率发生器使用时,只需设置好工作方式,即可自动运行。本设计使用定时/计数器1。预设数据传送速率为1200b/s。 SMOD=0计算定时器1工作方式2初值的公式为X=256-fos*(SMOD+1)/384*波特率。Foc=6.144MHZ,定时器处值为X=0F3H。定时器产生波特率的其程序代码为:mov tmod, #20h ;定时器1设为工作方式2 mov th1,#0f3h ;定时器处值 mov tl1,#0f3h ;8位重装值SETB TR1 ;启动定时器1该程序设置了数据传送速率为1200b/s。4.3单片机程序设计在设置好串口工作方式与波特率的基础上,把PC机发送的数据传给数码管可以显示发送的数据,并且回传给PC机。通过观察数码管的显示与回传的数据进行比较是否一致就可以验证串口通信的正确性。通过P3.3、P3.4口的位选控制2位数码管显示数据。主要程序流程图: 开始 串口初始化 启动定时器 N Ri是否为1 Y 清除RI,接收数据 发送数据 将接收数据进行显示 图9 主程序流程图程序源代码如下:st_addr equ 4000hport equ 1b30h org st_addr ljmp mainmain: clr p3.4 ;清p3.4 clr p3.3 ;清p3.3 mov tmod, #20h ;定时器1工作方式2 mov scon, #52h ;串口工作方式1 mov th1,#0f3h ;定时器处值波特率1200b/s mov tl1,#0f3h setb tr1 ;启动定时器 jnb ri,load1 ;判断RI是否为1load: clr ri ;清RI clr p3.3 ;清p3.3 clr p3.4 ;清p3.4 mov a,sbuf ;传输数据 mov r0,a ;数据显示 mov sbuf,a ;回传数据 jnb ti,$ ; 判断TI是否为1 clr ti load1:mov a,r0 swap a ;高字节与低字节交换内容 anl a,#0fh ;屏蔽高四位 mov dptr,#table2 movc a,a+dptr ;查表 mov p1,a ;送数码管显示 setb p3.4 ;P3.4置1 lcall delay ;调用延时子程序 clr p3.4 ;清P3.4 mov a,r0 anl a,#0fh ;取高四位 mov dptr,#table2 movc a,a+dptr ;查表 mov p1,a ;送于数码管显示 setb p3.3 lcall delay ;调用延时子程序 clr p3.3 mov a,r0 jnb ri,load1 ; jmp loaddelay:mov r7,#0ffh ;延时程序ys1: mov r6,#0ffh djnz r6,$ djnz r7,ys1 rettable2:db 3fh,06h,5bh,4fh,66h,6dh db 7dh,07h,7fh,6fh,77h,7ch,39h,5eh,79h,71h end5结论通过Visual Basic中的mscomm控件开发的串口通信程序,并通过单片机编写的通信协议在进行电平转换的基础上就可以实现串口通信。PC机作为上位机发送一个数据后,经过串口传送给单片机,单片机将数据再通过P1口传给数码管,通过位选使得两位数码管显示数据。单片机再将数据回传给PC机,回传的数据与发送的数据和数码管显示一致,说明基于RS-232C的串口通信成功。谢辞毕业设计是一项实践性很强的工作,对动手能力和自学能力要求很高,由于本人缺乏这方面的锻炼,在设计过程中遇到了很多困难,而指导教师师给予了我很大的帮助,老师及时地、耐心地解答了我们在设计过程中遇到的各种问题,使我受益匪浅,并且在学习能力方面得到了很大的提高。这也是我人生中一次重要的锻炼老师亲切随和,治学严谨,在我的心里留下深刻的影响。在整个毕业设计中当我们遇到问题时,吕老师一直是很热情的在给予指导。在此我要向吕老师表示我衷心的感谢与敬意。参考文献1李华. MCS51系列单片机实用接口技术M . 北京北京航空航天大学出版社, 19932朱明宇,武峰. 8031单片机主从式数据采集系统设计3求实科技,仵浩, 齐燕杰等. Visual Basic 串口通信工程开发实例导航M. 北京: 人民邮电出版社, 2002.4范逸之, 陈立元, 孙德营等. 利用Visual Basic 实现串并行通信技术M. 北京: 清华大学出版社, 2001.5李肇庆,韩涛. 串行端口技术M . 北京:国防工业出版社,2004.6美Evangelos Petroutsos 著. 邱仲潘译. Visual Basic 6 从入门到精通M. 北京: 电子工业出版社, 1999.7范逸之. Visual Basic 与RS232 串行
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 其他分类 > 期刊论文


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!