实验五 串口通信.doc_第1页
实验五 串口通信.doc_第2页
实验五 串口通信.doc_第3页
实验五 串口通信.doc_第4页
实验五 串口通信.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验五 串口通信一、实验目的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,位地址9FH98H。寄存器内容及位地址表示如下:SCON位地址9F9E9D9C9B9A9998位符号SM0SM1SM2RENTB8RB8TIRI各位功能说明如下:位符号 功 能 说 明SM0,SM1SM0,SM1串行口工作方式选择位: SM0 SM1 工作方式 功 能 0 0 0 8位数码传送,波特率固定,为f晶振/12。 0 1 1 10位数码传送,波特率可变。 1 0 2 11位数码传送,波特率固定,为f晶振/64或f晶振/32。 1 1 3 11位数码传送,波特率可变。SM2SM2多机通信控制位: 当串行口以方式2或方式3接收时,如SM21,则只有当接收到的第九位数据(RB8)为1,才将接收到的前8位数据送入接收SBUF,并使RI位置1,产生中断请求信号;否则将接收到的前8位数据丢弃。而当SM20时,则不论第九位数据为0还是为1,都将前8位数据装入接收SBUF中,并产生中断请求信号。对方式0,SM2必须为0, 对方式1,当SM2=1,只有接收到有效停止位后才使RI位置1。RENREN允许接收位,用于对串行数据的接收进行控制: REN0, 禁止接收;REN1,允许接收。该位由软件置1或清零。TB8TB8发送数据位8:在方式2和方式3时,TB8是要发送的第9位数据。RB8RB8接收数据位8:在方式2和方式3中,RB8位存放接收到的第9位数据TITI发送中断标志:当方式0时,发送完第8位数据后,该位由硬件置位。在其它方式下,于发送停止位之前由硬件置位。因此TI1,表示帧发送结束。其状态既可供软件查询使用,也可请求中断。 TI位由软件清0。RIRI接收中断标志:当方式0时,接收完第8位数据后,该位由硬件置1。在其它方式下,当接收到停止位时,该位由硬件置位。因此RI1,表示帧接收结束。其状态既可供软件查询使用,也可以请求中断。RI位由软件清0。PCOND7D6D5D4D3D2D1D0SMOD-GF1GF0PDIDL电源控制寄存器PCON中SMOD位可影响串行口的波特率。SMOD是串行口波特率倍增位,当SMOD=1时,串行口波特率加倍。系统复位默认为SMOD=0。实验中我们一般了不设置电源控制寄存器。IED7D6D5D4D3D2D1D0 EA - - ES ET1 EX1 ET0 EX0中断允许寄存器IE中的ES位可选择串行口中断允许或禁止。 ES0,禁止串行口中断; ES1,允许串行口中断。2.2、串行通信的四种工作方式8051单片机的串行通信共有四种工作方式: 1 串行工作方式0 串行口为同步移位寄存器方式,波特率固定为f晶振/12。该方式主要用于I/O口扩展等,方式0传送数据时,串行数据由RXD(P3.0)端输入或输出,而TXD(P3.1)此时仅作为同步移位脉冲发生器发出移位脉冲。 串行数据的发送和接收以8位为一帧,不设起始位和停止位,其格式如下: D0D1D2D3D4D5D6D7 2串行工作方式1(1) 方式传送的数据格式方式传送一帧为10位的串行数据,包括1位起始位,8位数据位和1位停止位。其帧格式为:起始D0 D1D2D3D4D5 D6D7停止(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位数据既可作奇偶校验位,也可作控制位使用。其帧格式为:起始 D0D1D2D3 D4D5D6D7D8停止 附加第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有关,其值为fosc12(fosc为主机频率)。2、方式2的波特率 在方式2下,波特率也只有两种:fosc32或fosc64。用户可以根据PCON中SMOD位状态来驱使串行口在那个波特率下工作。选定公式为: 波特率 = 这就是说:若SMOD=0,则所选波特率为fosc64;若SMOD=1,则波特率为fosc32。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的初值关系表波特率foscSMOD定时器T1所选方式相应初值串行口方式0 0.5M6MHz串行口方式2 187.5K6MHz1方式1或3 19.2K6MHz102FEH 9.6K6MHz102FDH 4.8K6MHz002FDH 2.4K6MHz002FAH 1.2K6MHz002F4H 0.6K6MHz002E8H 1106MHz00272H 556MHz001FEEBH其实,定时器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(232)(11.0592M/12)/(256-TH1) 得TH125012M晶振时:由 9600(232)(12M/12)/(256-TH1) 得TH1249.49上面的计算可以看出使用12M晶体的时候计算出来的TH1不为整数,而TH1的值只能取整数,这样它就会有一定的误差存在不能产生精确的9600波特率。当然一定的误差是可以在使用中被接受的,就算使用11.0592M的晶体振荡器也会因晶体本身所存在的误差使波特率产生误差,但晶体本身的误差对波特率的影响是十分之小的,可以忽略不计。四、实验内容及步骤编写两块单片机的串口通讯程序,每块单片机都有2位LED数码管显示其数值,其中一块单片机为发送端,另一块为接收端。通信成功时两数码管显示相同。1、用Protues设计两块单片机的串口通讯电路原理图,单片机选用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论