Presentation is loading. Please wait.

Presentation is loading. Please wait.

第5章 MCS----51单片机的串行通信 教学要点 5.1 项目九单片机与单片机的通信 5.2 知识连接

Similar presentations


Presentation on theme: "第5章 MCS----51单片机的串行通信 教学要点 5.1 项目九单片机与单片机的通信 5.2 知识连接"— Presentation transcript:

1 第5章 MCS----51单片机的串行通信 教学要点 5.1 项目九单片机与单片机的通信 5.2 知识连接
项目九单片机与单片机的通信 知识连接 知识拓展:单片机的多机通信 返回

2 第5章 MCS----51单片机的串行通信 教学要点: 串行通信的基本知识 MCS -51单片机的串行通信设置
查询与中断方式串行通行的程序结构 返回

3 第5章 MCS----51单片机的串行通信 5. 1项目九单片机与单片机的通信 5. 1 .1项目要求
两个单片机均带有8个按钮与三位数码显示器,设计硬件与程序,两个单片机能够进行通信,将本单片机的按键值传送到另外一个单片机,并按十进制在另外一个单片机上显示出来。 下一页 返回

4 第5章 MCS----51单片机的串行通信 5. 1 .2任务分析
硬件资源分配:本项目中每个单片机需要接8个开关,三位数码管,串行通信需要用到RXD, TXD两位端口线,51单片机共有4个端口,32位I/0端口线,硬件资源够用。 上一页 下一页 返回

5 第5章 MCS----51单片机的串行通信 考虑到需要显示的是8个开关组成的开关键值,8个开关最好安排在一个端口,这样读端口时可以获得一个字节的数,选择P1端口外接八位开关;显示如果用静态显示,三位7段数码管每位需要21位I/ 0端口线,但这21位端口线需要分布在三个端口,串行通信需要占用P3端口的RXD和TXD ; P3只能提供6位供显示用,这样三位数码管中必然有1位数码的7段管需要分接到两个端口,编程较为复杂为此,三位数码管的显示采用动态扫描,选择PO端口外接共阳极数码管(这样PO端口无需外接上拉电阻)的段位,选择P2端口的低八位作为数码管的位选择控制。 上一页 下一页 返回

6 第5章 MCS----51单片机的串行通信 5. 1. 3电路设计 按照上述分析,单片机的硬件分配如下: 8位开关接P1端口;
PO端口的P0. 0 ~ P0. 6接数码管的a ~g段; P2端口的P2. 2 ~ P2. 0接百位、十位、个位数码管的公共端,采用共阳极数码管,用Proteus仿真软件设计的硬件电路如图5.1.1。 上一页 下一页 返回

7 第5章 MCS----51单片机的串行通信 5. 1 .4编程及调试
两个单片机通信需要编写两个独立的程序,每个单片机运行其中的一个程序为此,用Keil C51建立两个工程项目。 编程思想: 按照项目功能要求,每个单片机都应包含扫描开关、延时、发送、接收、显示几个功能,为了编写与调试程序的方便,我们先将功能简化为主从通信方式,将左面的单片机作为主机,主机只负责将按键值用串口定时发送到右面的从机,从机将接收到的数据在从机的数码管上显示。 上一页 下一页 返回

8 第5章 MCS----51单片机的串行通信 第一步:编写调试串行通信程序
主机定时发送数据,发送采用查询方式,这样主机的程序流程图如图 初始化包括定义变量、设置通信方式、波特率等。 假定单片机的时钟频率为 MHz,设定通信方式1,波特率为2400b/s,考虑到将来主机也需要接收数据,将SOON设置为接收允许,但不开放串行通信中断,串行通信的初始化程序如下: SCON=0x50: TMOD=0x20; TH1=0xf4; TR1=1; 上一页 下一页 返回

9 第5章 MCS----51单片机的串行通信 发送数据包括将要发送的数据写入SBUF,等待发送完成,清发送标志位等发送数据的程序如下:
SBUF=P1; while(TI==0); TI=0; 从机接收数据是随机的,同时考虑最后从机也需要在主程序中循环发送数据,从机接收数据采用中断方式,从机的显示放在主程序中,从机的程序流程如图 ,初始化包括定义变量、设置通信方式、波特率等,由于接收采用中断方式,从机的初始化要开放相应的中断,初始化程序如下: 上一页 下一页 返回

10 第5章 MCS----51单片机的串行通信 SCON=0x50; TMOD=0x20; TH1=0xf4; EA=1; ES=1;
TR1=1; 由于暂存器是主函数与中断服务函数中进行数据联系而共享的存储器,定义为全局变量(假定用变量sju )。 上一页 下一页 返回

11 第5章 MCS----51单片机的串行通信 为了调试串行通信,暂时将程序简化为直接把收到的数据直接送到PO口,控制七段码,主机的每位开关控制从机数码管的一段,即在串行通信中断服务函数中直接把收到的数据赋值给PO端口,运行程序如下: 上一页 下一页 返回

12 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

13 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

14 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

15 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

16 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

17 第5章 MCS----51单片机的串行通信 在本设计中,由于采用共阴极数码管,P2端口初始化为高电平,三位数码管同时显示,并且显示相同的内容,暂不做处理Proteus仿真运行效果如图 第二步:编写从机显示程序 在保证串行通信正常的情况下编写从机显示程序,主机的8位开关状态组成一个8位二进制数,用十进制表示,范围为0~255 ,需要三位数码管显示其百位、十位、个位,需要将数的百位、十位、个位取出来(数据拆分)分别显示,采用除10取余的方法,为了便于用循环的方法进行数据拆分与动态显示,需要将百位、十位、个位存放在三个连续的存储单元,所以定义一个包含三个元索的数组,拆分数据的函数如下: 上一页 下一页 返回

18 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

19 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

20 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

21 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

22 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

23 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

24 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

25 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

26 第5章 MCS----51单片机的串行通信 Proteus仿真运行效果如图5. 1. 5。目前,两个单片机实现了单向通信,并能正确显示。
第三步:实现双向通信 实现双向通信,每个单片机既是主机,又是从机在前面设计的基础上实现双向通信,需要考虑下面几个问题: (1)前面的单向通信中,发送采用查询方式,接收采用中断方式在双向通信中,每个单片机都需要进行接收与发送,而MCS - 51单片机的串行通信发送与接收共用一个中断源,不能单独将发送或接收设为中断或查询方式,也就是说,如果将串行通信设置为中断方式,当数据发送完毕后发送中断标志位为1,CPU也会响应中断,执行中断服务函数因此,在串行通信中断服务函数中需要识别是发送中断还是接收中断,并进行不同的处理。 上一页 下一页 返回

27 第5章 MCS----51单片机的串行通信 (2)端口识别与动态扫描的矛盾对每一个单片机而言,为了及时识别到P1端口开关状态的变化,CPU需要快速地、反复地读取端口的状态(端口扫描),并且将端口的状态发送给对方单片机还需要显示对方发送来的数据(动态扫描),在我们的设计中,数据显示采用动态扫描显示方式,CPU需要快速地、反复地向数码管发送段码、位码,中间还需要延时 (3)解决方案发送采用查询方式,接收采用中断方式,在定时器TO的中断服务函数中完成动态扫描,显不主函数中拆分后的三位数字,每中断一次显示一位数字,程序流程如图 所示。 上一页 下一页 返回

28 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

29 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

30 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

31 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

32 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

33 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

34 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

35 第5章 MCS----51单片机的串行通信 仿真运行效果如图5.1.7,实现了任务要求的功能。 上一页 返回

36 第5章 MCS----51单片机的串行通信 5. 2知识链接 5. 2. 1串行通信的ll木概念
通信是一种信息交换,除了传统意义的语音、文字、图形图像的通信以外,在自动控制领域,设备之间要协调工作,各个设备需要知道其他设备的运行状态,设备之间的信息传输需要通信,甚至需要多个设备之间形成通信网络。 1.数据通信的种类 下一页 返回

37 第5章 MCS----51单片机的串行通信 CPU与其他设备之间的通信有并行通信与串行通信两种方式,以一个字节为例,并行通信是将一个字节的八位二进制数通过八条数据线和一条地线同时传输的通信方式,而串行通信是按照顺序将八位二进制数一位一位分时传输的通信方式,如图 所示在单片机内部CPU与存储器之间的数据传输都是并行通信方式;计算机的鼠标、键盘都是采用串行通信方式,计算机与打印机之间的通信有串行通信方式(USB接口),也有并行通信方式(LPT方式)显然并行通信的通信速度快但需要较多的数据线,适合近距离的数据传输;而串行通信的数据传输速度慢但需要的数据线较少,适合于较远距离的数据传输。 上一页 下一页 返回

38 第5章 MCS----51单片机的串行通信 MCS - 51单片机的四个端口均可工作在并行通信模式,其内部也设计了一个可编程控制的串行通信端可,利用P3端口的P3. 0 , P3. 1作为单片机与外部设备串行通信的输入输出接口。 按每次发送字符的多少,串行通信又分为同步串行通信和异步串行通信方式同步串行通信一次传输由同步字符、数据字符、校验字符构成的一帧信息,同步串行通信数据传输速率高,但要求收发双方的时钟严格同步异步串行通信每次发送由起始位、数据位、校验位、停止位四部分构成的一个字符帧,其结构如图5.2.2 上一页 下一页 返回

39 第5章 MCS----51单片机的串行通信 (1)空闲位是数据线上没有数据传输时数据线的状态,为高电平,其长度没有限制。
(2)起始位指不一个字符帧的开始,为低电平,占一位的时间间隔,用于告知接收端发送端开始发送一帧字符信息。 (3)数据位是紧跟在起始位之后的数据信息,低位在前,高位在后,用户可以自己定义数据位的长度。 (4)校验位(可编程位)用来表不串行通信中的校验信息的,位于数据位之后,仅占一位,可以是奇偶校验,也可以设定为无校验位。 (5)停止位是用来表征字符帧结束的位,高电平,通常为1位、1. 5位或2位。 上一页 下一页 返回

40 第5章 MCS----51单片机的串行通信 2.串行通信的速率
串行通信的速率用波特率(baud rate)表示,每秒传输二进制码的位数叫做波特率,单位是位/秒(bit/s , b/s ),串行通信常用的波特率为1200的整数倍,如1200, 2400, 9600b/s等波特率反映了串行通信的传输速度,是串行通信的重要指标。 3.通信协议 为了保证串行通信的可靠接收,通信双方在字符帧格式、波特率、电平格式、校验方式等方面应采用统一的标准,这个标准就是收发双方需要共同遵守的通信协议。 上一页 下一页 返回

41 第5章 MCS----51单片机的串行通信 5. 2. 2MCS -51单片机的串行通信接口 1. MCS -51单片机的串行通信接口结构
上一页 下一页 返回

42 第5章 MCS----51单片机的串行通信 MCS -51单片机内部包含一个可编程的准双向串行通信端口,串行通信有两个地址独立、名字相同的接收、发送缓冲器SBUF,单片机通过写入SBUF一个字节启动发送过程,由T1定时器的溢出产生的移位脉冲将发送缓冲器SBUF中的数据从TXD逐位移出,并自动添加起始位、校验位和停止位,当发送完成后将发送中断标志位TI置1;当CPU检测到RXD上的起始位后,由T1定时器的溢出产生的移位脉冲将RXD上的数据逐位移入接收缓冲器SBUF,当接收完成后自动将接收中断标志位RI置1通过设置T1的定时时间可以设定串行通信的波特率。 上一页 下一页 返回

43 第5章 MCS----51单片机的串行通信 MCS -51单片机的串行通信可以采用查询方式,通过查询TI的状态来判断是否发送完一个字符帧,通过查询RI的状态确定是否收到一个字符帧MCS -51单片机的串行通信也可以采用中断方式,MCS - 51单片机的发送与接收共用一个中断源,当一个字符帧发送完成(TI变为1)或收到一个完整的字符帧(RI变为1)都会向CPU中请中断,需要注意的是在串行通信的中断服务函数中需要依据TI和RI的状态来确定该中断是接收中断还是发送中断,以便进行相应的操作。 在串行通信过程中,每当发送或接收完一个字符,都应将相应的中断标志用软件清零,以便发送或接收下一个字符。 2. MCS -51单片机的串行通信控制 上一页 下一页 返回

44 第5章 MCS----51单片机的串行通信 MCS -51单片机与串行通信工作相关的特殊功能寄存器有数据缓冲器SBUF,串行口控制寄存器SOON、电源及波特率选择寄存器PCON当然,串行通信还与定时器T1、中断控制等相关。 (1 )数据缓冲器SBUF (0X99) 。MCS -51单片机有两个独立的发送、接收缓冲器SBUF,一个用于存放由RXD收到的数据,一个用于存放要通过TX D发送的数据,两个缓冲器共用相同的地址(0x99 )和相同的名称(SBUF),通过对SBUF的读写操作来区分是对发送缓冲器还是接收缓冲器进行操作,要发送一个字符时就将这个字符写入SBUF,操作对象是发送数据缓冲器要把数据缓冲器数据读出时的操作对象是接收缓冲器. 上一页 下一页 返回

45 第5章 MCS----51单片机的串行通信 图5. 2. 4 SCON各位的定义 1) SMO, SM1:串行通信方式选择控制位
(2 )串行口控制寄存器SCON(0x98)。SXON是用来控制串行通信的工作模式的控制寄存器,包括串行通信的工作方式、多机通信控制、发送接收中断标志等,SaoN允许进行位操作,具体各位的控制功能如图 图 SCON各位的定义 1) SMO, SM1:串行通信方式选择控制位 MCS一51单片机通过SMO, SM1的组合可以设置四种串行通信方式,各种通信方式的功能如表 上一页 下一页 返回

46 第5章 MCS----51单片机的串行通信 2)SM2:多机通信接收允许标志位只有方式2和方式3适合多机通信
3)RE N:允许接收控制位,可由软件清零或置位,清零后禁止接收,置位后允许接收。 4) TB8:在通信方式2和方式3中发送的第9位数据,可由软件置位或清 零该位由用户自己定义,可以作为奇偶校验位,也可以在多机通信中作为数据、地址标志位,该位在发送完一个字符后自动发送。 5) RB8:在通信方式2和方式3时,如果一个字符帧接收成功,则将发送端的第9位数据装入RB8。 上一页 下一页 返回

47 第5章 MCS----51单片机的串行通信 6) TI:发送中断标志位,用于标志一个字符帧发送完成数据发送完成之后由硬件自动置位TI,通知CPU发送完成,以便CPU查询,或者向CPU中请中断,TI必须由软件清零在中断方式下,CPU响应中断后必须用软件将TI清零,否则会连续执行中断服务函数。 7) RI:接收中断标志位用于标识成功接收一个字符帧当把RXD的数据 装入SBUF后硬件自动将RI置位,供软件查询或向CPU中请中断,要求CPU及时取走数据RI必须及时用软件清零,以便正确接收下一个字节。 需要注意的是RI和TI两个中断标志位共用一个中断源和一个中断服务函数,因而在串行通信中断服务函数中应依据TI和RI进行判断是发送中断还是接收中断,以便清除相应的标志位及进行相应的处理。 上一页 下一页 返回

48 第5章 MCS----51单片机的串行通信 3. MCS - 51单片机串行口的工作方式
MCS - 51单片机有四种串行通信方式可供用户依据实际情况进行选择,但单片机在同一时刻只能工作在一种工作方式MCS - 51单片机的工作方式由串行通。信控制寄存器的M SO和MS1确定 (1)方式0: 8位移位寄存器方式,以机器周期作为移位脉冲(固定波特率),没有起始位与停止位,适合与外部移位寄存器进行数据传输,如图5.2.5所示,其中74 LS164是8位串入并出的移位寄存器,74 LS165是8位并入串出的移位寄存器。 上一页 下一页 返回

49 第5章 MCS----51单片机的串行通信 在TI为0时,将数据写入发送缓冲器SBUF时,串口数据从TXD引肚P以蛛丫12的波特率由低位到高位依次输出,同时在RXD引脚输出相应频率的移位脉冲,供外接移位寄存器做移位脉冲使用,发送完毕后将中断标志TI置1,向CPU请求中断或供CPU查询,在再次发送数据之前,必须用软件将TI清零。 在RE N为1且RI为0时,串行口在TX引脚的移位脉冲的作用下将RXD引脚的数据依次由低位到高位移入接收缓冲器SBUF,收完8位数据后将RI中断标志置1,向CPU请求中断或供CPU查询,在再次接收数据之前,必须用软件将RI清零。 上一页 下一页 返回

50 第5章 MCS----51单片机的串行通信 (2)方式1:单机通信方式由一位起始位、8位数据位和一位停止位构成字符帧,没有可编程位,其字符帧帧格式如图 所示波特率由定时器T1和SMOD位确定。 在TI = 0时,写入发送缓冲器SBUF即启动发送,当发送完一个字符帧时硬件将中断标志TI置1,通知CPU发送完成在发送下一个字符之前,一定要将TI软件清零。 在接收允许标志位REN = 1时,串行端口采样RXD位,采样到RXD由1到0的跳变时确认为起始位0,开始接收一个字符帧,当RI = 0,且停止位为1或SM2 = 0时硬件置位中断标志位RI,否则该字符帧将被丢弃,重新检测RXD从0到1的负跳变,准备接收下一帧信息因而每次收到一个字符时都应将RI软件清零,否则会丢失数据。 上一页 下一页 返回

51 第5章 MCS----51单片机的串行通信 MCS - 51单片机串行通信工作在方式1时的波特率取决于定时器T1的溢出率和PCON的SMOD位。 (3)方式2:由一位起始位、8位数据位、1位可编程位和一位停止位构成字符帧,其字符帧格式如图5.2.7。 与方式1相比,方式2多了一位可编程位,该位用来实现奇偶校验或作为多机通信的数据、地址信息标志发送时可编程位装入SOON的TB8位,根据需要。 上一页 下一页 返回

52 第5章 MCS----51单片机的串行通信 装入“0”或.. l 该位可以由软件清零或置位,在发送完数据位后紧接着发送TB8;接收时如果收到一帧信息时,如果同时满足RI = 0和M S2为0或收到的第九位数据为1两个条件,则将8位数据送入SBUF,将收到的可编程位送入SOON的RB8位,否则丢弃该帧信息。 (4)方式3:方式3的波特率与方式2不同,字符帧的格式、发送与接收过 程都相同。 4.电源及波特率选择寄存器PCON 上一页 下一页 返回

53 第5章 MCS----51单片机的串行通信 PCON的低七位DO一D6用于80 CS 1 /80 C31单片机系列进行电源控制,最高位D7用于串行通信方式1, 2, 3下的波特率加倍控制,该位为1时加倍,为0时不加倍由于PCON不可以进行位操作,为了在不改变其他位的条件下设置SMOD,可以用下面的方式置位或复位SMOD: 置位SMOD:PCON I=OXBf; 复位SMOD. PCON&=OX7f; 波特率的设置: 上一页 下一页 返回

54 第5章 MCS----51单片机的串行通信 波特率是串行通信的重要技术指标,反应了串行通信的数据传输速率,收发双方必须使用相同的波特率进行通信,收发双方的波特率误差越大,通信的误码率就越高,可传输的距离也越短波特率可以通过软件设定,四种工作方式下的波特率设置如下: 上一页 下一页 返回

55 第5章 MCS----51单片机的串行通信 (1)方式0下的波特率是固定的,为主机时钟频率的1/12,即 。
(1)方式0下的波特率是固定的,为主机时钟频率的1/12,即 。 (2)方式2下的波特率也是固定的,为主机时钟频率的1/64,可以通过置位SMOD加倍为 。 (3)方式1和方式3的波特率是可变的,同时受定时器T1的溢出率和SMOD的控制,具体关系如下: 在实际工作中通常将定时器T1设置为模式2,即自动重载的8位定时器,初值保存在TH1中,波特率与TH1的初值、时钟频率。SMOD之间的关系为: 表5.2.2列出了常用破特率及对应的时钟频率、TH1初值、SMOD 上一页 下一页 返回

56 第5章 MCS----51单片机的串行通信 5. 2. 3单片机的双机通信 1.单片机与单片机之间的双机通信
如果参与通信的两台单片机之间的距离较近,由于单片机之间具有相同的电平标准,可以将两个单片机的串行口直接相连,如图 所示。 2. MCS - 51单片机与PC机的通信8051单片机串口使用的是TTL电平,PC机使用的是RS232电平,单片机与PC机之间不能直接连接,通常需要在单片机端通过MAX232芯片将电平转换为RS232电平格式 上一页 下一页 返回

57 第5章 MCS----51单片机的串行通信 PC机的串行通信端日采用DB9封装的COM接口,对PC机而言,其2脚为数据输出引脚,3脚为数据输入端,PC机COM口与单片机、MAX232之间的连接关系如图5.2.9所示。 3. RS232串行数据接口标准 RS232是由电子工业协会制订的一种串行数据接口标准,用于在点对点低速率串行通信中增加通信距离RS232信号电平在TTL电平与RS232电平之间摆动,无信号传输时,线上为TTL电平,有数据传输时线上电平为RS232电平RS232发送的正电平为+5V~+15V,负电平为~15V~-5V; RS232接收正电平为+3V~+12V,接收负电平为~12V ~ -3VRS232的最大传输距离大约为15米,最高速率为20 Kb/s。 上一页 下一页 返回

58 第5章 MCS----51单片机的串行通信 MAX232是MAXIM公司生产的单电源、双路RS232发送接收器,MAX232内部有一个电源电压变换器,可以把输入的+5V电压变换成RS232需要的士10V电压,因而只需要+5V单电源供电图 是MAX232内部逻辑框图及具体应用时所需的外部辅助电路及元件参数。 如果两台单片机之间的距离较远,也可以在每个单片机电路上增加MAX232电平转换电路,电路连接关系如图 将单片机发送端的TTL电平转换为RS232,接收端再将RS232电平转换为TTL电平RS232的通信距离在15m之内当然也可以采用RS485等通信标准在使用STC系列的单片机时,利用MAX232还可以实现程序在线下载。 上一页 下一页 返回

59 第5章 MCS----51单片机的串行通信 4.双机通信的程序设计
为了确保通信成功,必须设计一个通信规则和处理机制,这个约定称为通信协议由于双机通信是点对点通信,对通信的每一方来说,数据的来源与去向都是唯一的,不涉及地址问题,编程相对简单在设计双机通信的通信协议时主要考虑以下几个问题: (1)数据格式与波特率通信双方必须使用相同的波特率,最好使用相同的数据格式。 上一页 下一页 返回

60 第5章 MCS----51单片机的串行通信 (2)采用查询方式还是中断方式MCS一51单片机在发送完成或接收到一个完整的字符帧时会自动将中断标志位TI或RI置为1, CPU在处理过程中必须通过识别TI是否为1来决定可否向发送缓冲器写入下一个字符,通过识别RI来决定可否读取接收缓冲器,否则就会发生错误。 查询方式下发送与接收程序的编写模式: 发送无符号字符型数组a中的前四个元索的程序形式: 上一页 下一页 返回

61 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

62 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

63 第5章 MCS----51单片机的串行通信 由以上程序可以看出,在查询方式下,CPU要不断地判断标志位以便确定发送完成或接收到数据,CPU的利用率比较低,尤其对于传输的数据较多的情况当一个单片机既要发送又要接收时情况更为严重,收发不能同时进行,尤其在发送过程中,CPU在等待TI变为1的过程中会因为没有及时读取接收缓冲器造成数据丢失。 如果采用中断方式,CPU的利用率较高,但由于MCS - 51单片机的发送与接收共用一个中断源,在中断服务函数中必须通过TI和RI来区分是发送中断还是接收中断,以便进行相应的处理在通信过程中,由于发送数据是程序事先可以确定的,在需要发送的时候将要发送的数据写入SBUF即可,数据发送采用查询方式数据的接收是随机的,更适合用中断方式,基于这种考虑的程序形式如下: 上一页 下一页 返回

64 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

65 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

66 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

67 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

68 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

69 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

70 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

71 第5章 MCS----51单片机的串行通信 参与通信的双方收发不一定要用相同的方式。 3.数据的校验与纠错
在通信过程中,由于干扰、波特率差异、程序设计不合理等因索,不可避免地会发生数据传输出错的情况,影响通信的可靠性误码率是数字通信中衡量通信可靠性的重要指标。 检错(校验)是识别通信中的错误,纠错是纠正通信中的发生的错误 校验的简单方法有奇偶校验、求和校验等纠错的简单方法有出错重发、无应答定时重发等方式。 图 为一个采用求和纠错、有错重发的主机程序流程图,图 为从机程序流程图。 上一页 下一页 返回

72 第5章 MCS----51单片机的串行通信 在这个程序中,通信采用主从方式,主机在需要发送数据时通过发送呼叫信号,当从机有应答时才发送数据,从机不会主动发送数据主机首先发送数据长度,然后发送数据,最后发送数据和从机在主函数中等待主机的呼叫信号,收到呼叫信号后开放接收中断,后续数据采用中断方式接收,第一次执行中断服务函数收到的数为数据长度,后续收到的是有效数据,在接收有效数据期间计算有效数字的累积和,以便在主函数中与最后收到的校验和进行比较,依次来判断数据在传输过程中可能发生的错误当数据接收完毕后关闭串行通信中断,设置接收完成标志供主函数识别主函数识别到接收完成标志后比较校验和和累积和,依据比较结果向主机回馈相应的确认信号,并准备下一次接收。 上一页 下一页 返回

73 第5章 MCS----51单片机的串行通信 在这个通信协议中,主机的发送与接收都使用查询方式,因此没有串行通信中断服务函数从机的发送都采用查询方式,对应答信号的接收也是采用查询方式,对数据长度、有效数字、校验和的接收都是采用中断方式。程序设计举例:主机首先呼叫从机,当收到从机的应答信号后发送数组sju的长度,然后将数组sju中的元索依次发送到从机,最后发送累积和,发送完毕后等待从机的确认信号,收到正确确认信号,程序结束,收到错误确认信号则重新呼叫从机,重新开始发送;从机将收到的数组元索存放到数组sju中,同时计算收到数据的累积和,最后和接收到的累积和进行比较,如果相等,认为数据正确,发送接收正常确认信号,否则发送错误信号,并回到等待呼叫状态,重新开始接收。 根据双方通信的应答,设定简单的握手信号如下: 上一页 下一页 返回

74 第5章 MCS----51单片机的串行通信 为了便于调试程序,在程序中添加显示功能,及时将主、从机发送、接收的数据在数码管上显示出来,能够看到程序运行的过程与结果,便于理解程序的运行过程。 仿真电路可以利用图5.串行通信的电路 上一页 下一页 返回

75 第5章 MCS----51单片机的串行通信 由于主机、从机在采用查询式发送、接收过程中需要等待TI或RI为1,主程序中不能安排动态扫描程序,在这里使用定时器TO实现动态扫描的方法。 上一页 下一页 返回

76 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

77 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

78 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

79 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

80 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

81 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

82 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

83 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

84 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

85 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

86 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

87 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

88 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

89 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

90 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

91 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

92 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

93 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

94 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

95 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

96 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

97 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

98 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

99 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

100 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

101 第5章 MCS----51单片机的串行通信 上一页 下一页 返回

102 第5章 MCS----51单片机的串行通信 上一页 返回

103 第5章 MCS----51单片机的串行通信 5. 3知识拓展:单片机的多机通信 5. 3. 1 M C S - 51单片机多机通信的系统连接
多机通信是指两台以上的计算机之间的通信由于单片机多用于较小区域的控制领域,多个单片机之间构成的通信网络结构比较简单,多采用主从方式,由MCS -51单片机构成的主从式总线方式多机通信系统如图 所示图中主机的TXD端与所有从机的RXD端相连,每个从机都可接收主机发送的数据主机的RXD端与所有从机的TXD端相连,主机可以收到每个从机发送的数据。 主从式多机通信中,各从机之间不能直接通信,只有主机可以向各个从机发送信息,只有主机可以接收各从机发送的信息,从机之间必须通过主机才能通信。 下一页 返回

104 第5章 MCS----51单片机的串行通信 5. 3. 2主从结构总线方式多机通信的通信机制与方法 在总线方式下通信主要需要考虑4个问题
1.从机的识别问题 为了能够识别各从机,给各从机设定一个唯一的身份识别代码,称为该从机的地址。 上一页 下一页 返回

105 第5章 MCS----51单片机的串行通信 主机在向某从机发送数据时,先通过TXD向所有从机发送该从机的地址,作为呼叫信号,各个从机在收到这个地址后和自己的地址进行比较,以确认主机的通信目标,如果某从机收到的地址与自己的地址相同,就做好接收主机后续发送过来数据的准备,并接收和处理接收到的数据,这个过程相当于双机通信过程,直到本次通信结束;其他从机发现接收到的地址与本机地址不同,对后面主机发送的数据不予理睬,直到收到下一个呼叫信号(地址与本机地址相同)。 从机向主机发送数据时需要先发送本机地址作为呼叫信号,然后发送数据。以便主机识别数据来源。 上一页 下一页 返回

106 第5章 MCS----51单片机的串行通信 2.地址与数据的识别问题
数据有可能与某从机的地址相同,当主机向从机发送数据时,地址与该数据相同的从机会认为是主机对自己的呼叫信号,因此参与通信的各个单片机应该能够区分数据和地址解决这个问题的最简单方法就是使用串行通信方式2或方式3,采用9位数据通信方式,比如在发送地址信息时将TB8置位,发送数据信息时将TB8清零接收端通过识别收到数据时RB8的状态来区分地址和数据。 3.总线冲突问题 由于各从机的发送端TXD全部连接到主机的接收端RXD上,从机向主机发送信息时必须使用该总线,如果多个从机同时向主机发送数据就会造成总线冲突,所以要设定一种机制,让某个时刻或某段时间只能有一个从机获得对该总线的使用权。 上一页 下一页 返回

107 第5章 MCS----51单片机的串行通信 一种方式是主机呼叫方式,当主机需要获得某从机的信息时先呼叫该从机,被呼叫的从机才能向主机发送信息,这种方式从机完全处于被动状态,不利于及时发现并处理从机的信息。 另一种方式是中请发送方式,当没有从机向主机发送信息时,主机以广播的方式通知各从机“总线空闲”,当有从机需要向主机发送信息时,向主机发送“中请发送”请求,主机通过广播向所有从机发送“总线忙”的信息,然后主机再向需要发送信息的从机发出呼叫,收到呼叫的从机获得总线使用权发送信息,其他从机处于不可以发送信息,当信息传输完毕后主机再以广播的方式通知各个从机“总线空闲”,从机只有在“总线空闲”的状态下才可以中请总线使用权,当有多个从机提出发送中请时主机口可以对中请进行排队。 上一页 下一页 返回

108 第5章 MCS----51单片机的串行通信 4.数据与指令的问题
在串行通信时,有时单片机发送的是数据信息,比如温度、压力等,有时发送的是指令信息,比如“总线空闲”“呼叫请求”等,不管是数据还是指令,就像地址与数据一样,在单片机内部都是二进制编码,会造成混淆的现象。 一种方法是把指令编为数据中不会出现的代码,也可以采用多个字符按照固定的顺序进行组合,形成帧结构,比如图 所示的一种帧结构示意图,如果数据类型是数据,接收端将后续的数据按数据处理,如果数据类型是指令,接收端将按指令的方式处理后续的数据。 上一页 下一页 返回

109 第5章 MCS----51单片机的串行通信 采用帧结构的串行通信方式较为通用,可以通过增加帧兀索涵盖更多的信息,这种方式同时解决了地址与数据的问题在实际编程时可以定义一个数组,将各个帧元素按照一定的顺序放在数组中,通过串行端口依次发送出去由于帧结构中各个元素表征的意义不同,数据类型可能也不同,使用C语言中的结构体与联合体更为方便。 上一页 返回

110 图 行通信的帧结构举例 返回

111 图5. 3. 1主从结构总线方式的单片机多机通信系统框图
返回

112 图5. 2. 13主从通信和校睑、有错重发的从机主程序流程图
返回

113 图5. 2. 12主从通信和校睑、有错重发的主机主程序流程图
返回

114 图 单片机之间采用RS232通信的连接示意图 返回

115 图 MAX232逻辑电路图 返回

116 图 单片机与计算机点对点通信的硬件连接示 返回

117 表5.2.2常用波特率对应的串口设置参数(1) 下一页 返回

118 表5.2.2常用波特率对应的串口设置参数(2) 上一页 返回

119 图 异步串行通信方式2的字符帧结构 返回

120 图 异步串行通信方式1的字符帧结构 返回

121 图5. 2. 5 MCS一51串行通信方式0硬件电路连接示例图
返回

122 表 MCS-51单片机的串行通信方式 返回

123 图5.2.4SCON各位的定义 返回

124 图 MCS-51单片机串口结构示意图 返回

125 图 异步串行通信的字符帧格式 返回

126 图 并行通信与串行通信示意图 返回

127 图 双机互相发送、接收并显示仿真效果图 返回

128 图 主从机接收显示流程图 返回

129 图 显示接收数信的Proteus仿真效果 返回

130 图 直接显示接收数据的仿真效果图 返回

131 图5.1.3从机程序流程图 返回

132 图5.1.2主机程序流程图 返回

133 图5.1.1串行通信的仿真电路 返回

134 图 MCS-51单片机之间双机通信的电路连接 返回


Download ppt "第5章 MCS----51单片机的串行通信 教学要点 5.1 项目九单片机与单片机的通信 5.2 知识连接"

Similar presentations


Ads by Google