版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、项目八 串行口通信 项目八 串行口通信 8.1 项目说明项目说明 8.2 基础知识基础知识 8.3 项目实施项目实施 8.4 项目评价项目评价 8.5 拓展与提高拓展与提高项目八 串行口通信 8.1 项项 目目 说说 明明 项目任务项目任务利用2个hot-51单片机实验板实现双机通信,一个作为发送方,另一个作为接收方。将发送方实验板上矩阵式键盘中的16个按键均设置为数字键,当检测到有键闭合时,将闭合键的键号显示在接收方实验板的数码管上。项目八 串行口通信 知识培养目标知识培养目标(1) 掌握基本通信方式、串行通信方式及制式。(2) 掌握51单片机串行口的结构及工作方式。(3) 掌握51单片机串
2、行口波特率的设置。(4) 掌握方式0的应用。(5) 掌握双机通信。项目八 串行口通信 能力培养目标(1) 能利用所学知识画出实现该任务的原理图。(2) 能利用所学知识正确地实现双机通信连接。(3) 能利用keil c编写实现双机通信任务的源程序。(4) 培养解决问题的能力。(5) 培养沟通表达、团队协作的能力。项目八 串行口通信 8.2 基基 础础 知知 识识8.2.1 串行通信概述串行通信概述1. 通信概述通信概述在单片机控制系统中,单片机与外部设备、单片机与单片机或者计算机与单片机之间经常要进行信息交换,这些信息交换称为通信。基本的通信方式有并行通信和串行通信两种。项目八 串行口通信 (1
3、) 并行通信:待传送n位数据用n条数据线同时传送(发送或接收)的通信方式。在并行通信中,一个并行数据占多少位二进制数,就要用多少根传输线,此外还需要一条地线和若干条控制信号线。这种方式的特点是通信速度快,但传输线较多,成本较高,仅适用于短距离的数据传输。图8-1所示为传送8位数据11110100时并行通信示意图。项目八 串行口通信 图8-1 并行通信 项目八 串行口通信 图8-2 串行通信 项目八 串行口通信 (2) 串行通信:待传送数据的各位在一条数据线上按一定的顺序分时传送(发送或接收)。串行通信中不管传送多少位二进制数,都只需1条数据线,再加上1条公共信号地线或若干条控制信号线,故在远距
4、离传输数据时比较经济,但由于它每次只能传送1位二进制数,故传送速度较慢。图8-2所示为传送8位数据11110100时串行通信示意图。51单片机内有4个并行i/o口用于并行通信、一个全双工uart(异步串行通信接口)用于串行通信。项目一项目七中主要介绍并行口p0p3的应用,本项目主要介绍串行口的应用。项目八 串行口通信 2. 串行通信方式串行通信方式串行通信有异步串行通信和同步串行通信两种方式。1) 异步串行通信异步串行通信是指通信的发送方与接收方使用各自的时钟控制数据的发送和接收,为使双方收、发协调,要求发送和接收设备的时钟尽可能一致。异步通信时只需要一条通信线路就可以实现从一方到另一方的数据
5、传送,两条线路则可以实现数据的双向传输。项目八 串行口通信 在异步通信中,数据通常是以字符为单位进行传送的,1个字符完整的通信格式,通常称为帧或帧格式。发送端逐帧发送,接收端逐帧接收。异步串行通信中帧格式一般由起始位、数据位、奇偶校验位和停止位四部分组成,如图8-3所示。异步通信时,发送方先发送1位起始位“0”,然后是58位数据,规定低位在前,高位在后,其后是奇偶校验位(可无),最后是停止位“1”。从起始位开始到停止位结束,构成完整的1帧字符。项目八 串行口通信 图8-3 异步串行通信数据格式 项目八 串行口通信 (1) 异步串行通信各位的作用。起始位:起始位在一帧数据的开始位置,占1位,为低
6、电平“0”,用于表示1帧数据的开始。通信线上没有数据传送时,为高电平1,接收端不断检测通信线的状态,当连续若干个“1”之后检测到一个“0”时,就知道发送方发送了一个新的字符,准备接收。数据位:起始位之后的若干位就是数据位。数据位可以是5、6、7或8位(不同计算机的规定不同)。传送时先是低位,后是高位。 项目八 串行口通信 奇偶校验位:数据位之后是奇偶校验位,占1位。奇偶校验是通过对数据进行奇偶性检查,来判断字符传送的正确性。有奇校验、偶校验、无校验三种选择,用户可根据需要选择(在有的格式中,该位可省略)。通信双方须事先约定是采用奇校验,还是偶校验。停止位:一帧字符的末尾是停止位,用于表示一帧字
7、符的结束。停止位是高电平“1”,占用1位、1.5位或2位,不同计算机的规定有所不同。这里的“位”对应于一定的发送时间,因此可以有半位。项目八 串行口通信 异步串行通信是逐帧进行数据传输的,一帧中各位之间的时间间隔应该相同,所以必须保证两个单片机之间有相同的传输波特率,如果传输波特率不同,则时间间隔不同,当误差超过5%时,就不能正常进行通信;但是由于在信息传输时,各字符可以连续传送,也可以断续传送,因而帧与帧之间的时间间隔可以是不固定的,帧与帧之间是高电平。项目八 串行口通信 (2) 异步串行通信的主要特点。异步串行通信的各单片机时钟相互独立,其时钟频率可以不相同,在通信时不要求有同步时钟信号,
8、易实现;异步串行通信以帧为单位进行传输,而帧有固定格式,通信双方只须按约定的帧格式来发送和接收数据,因此,硬件结构比同步串行通信方式简单;此外,它还能利用校验位检测错误,所以在单片机与单片机、单片机与计算机之间仍广泛采用异步串行通信。异步串行通信的缺点是传输效率低。当采用1位起始位、8位数据位、1位奇偶位与1位停止位的帧格式时,有效数据仅占到了1帧字符的73%。数据位减少时,传输效率更低。项目八 串行口通信 2) 同步串行通信同步串行通信时由发送方对接收方进行时钟的直接控制,从而使双方达到完全同步。同步通信是以数据块的形式进行数据的传输。每个数据块包括同步字符、数据和校验字符,如图8-4所示。
9、同步字符:同步字符位于数据块的开始处,有12个字符,以实现发送端和接收端同步。一旦检测到约定的同步字符,就开始连续地发送和接收数据。数据:数据是传送的正文内容,由多个字符组成。校验字符:校验字符位于数据块的最后,用于检验传送的数据是否正确。项目八 串行口通信 图8-4 同步串行通信数据格式 项目八 串行口通信 同步串行通信的主要特点:同步串行通信以数据块为单位传送,去掉了每个字符都必须具有的开始和结束标志,且一次可以发送一个数据块(多个数据),因此,同步通信的速度高于异步通信。由于这种方式易于进行串行外围扩展,所以目前很多型号的单片机都增加了串行同步通信接口,如目前已得到广泛应用的i2c串行总
10、线和spi串行接口等。短距离同步通信时发送、接收方均采用两条通信线,其中一条用于由发送方向接收方提供时钟信号,另一条用于传送数据。再多加两条通信线,可以实现数据的双向传输,51单片机不支持数据的双向同步传输,只能分时复用两条通信线。项目八 串行口通信 同步通信要求发送方和接收方时钟严格保持同步,在通信时通常要求有同步时钟信号,对硬件结构要求较高,所以较少使用。3. 串行通信的制式串行通信的制式在串行通信中,根据两机之间数据的传送方向,分为单工制式、半双工制式和全双工制式三种。三种制式的示意图分别如图8-5(a)、(b)、(c)所示。 (1) 单工制式。在单工制式下,数据在甲机和乙机之间只允许单
11、方向传送。例如,甲机发送、乙机接收,因而两机之间只需1条数据线。项目八 串行口通信 图8-5 串行通信的三种制式 项目八 串行口通信 (2) 半双工制式。在半双工制式下,数据在甲机和乙机之间允许双方向传送,但它们之间只有一个通信回路,接收和发送不能同时进行,只能分时发送和接收(即甲机发送、乙机接收,或者乙机发送、甲机接收),因而两机之间也只需1条数据线。(3) 全双工制式。在全双工制式下,甲、乙两机之间数据的发送和接收可以同时进行,称为全双工传送。全双工制式的串行通信必须使用2条数据线。不管哪种制式的串行通信,在两机之间均应有公共地线。项目八 串行口通信 4. 串行通信的传送速率串行通信的传送
12、速率传送速率是指数据传送的速度,即每秒钟传送二进制数的位数。在串行通信中,数据传送速率的单位用b/s或bps表示,称为波特率。假设每秒要传送120帧字符,每帧由1个起始位、8个数据位和1个停止位共10位组成,则波特率为(1+8+1)b120/s = 1200 b/s每一位的传送时间为波特率的倒数,即t= 1/1200 = 0.833 ms项目八 串行口通信 国际规定的标准波特率系列为110、300、600、1200、1800、2400、4800、9600、19200,常用于计算机crt终端,以及双机或多机之间的通信等。51单片机的串行口的波特率可以通过程序进行设置。5. 通信协议通信协议在双机
13、或多机通信时,通常要遵守一定的通信协议。通信协议是指通信双方进行数据传输时的一些约定,包括数据格式、同步方式、通信方式、波特率、双机之间握手信号等问题的约定等。为保证通信双方能够准确、可靠地通信,相互之间必须遵循在通信之前约定的通信协议。项目八 串行口通信 8.2.2 51单片机串行口简介单片机串行口简介51系列单片机芯片内部有一个uart串行接口,它是一个可编程的全双工异步串行通信接口,占用p3.0(串行数据接收端rxd)和p3.1(串行数据发送端txd)两个引脚。通过软件编程可以设置为通用异步接收和发送器,也可设置为同步移位寄存器,还可实现多机通信。有8位、10位和11位三种帧格式,并能设
14、置各种波特率,使用灵活、方便。1. 51单片机串行口结构单片机串行口结构51单片机串行口结构框图如图8-6所示。它主要由发送/接收缓冲寄存器sbuf、输入移位寄存器、发送控制器、接收控制器以及串行口控制寄存器scon等组成。项目八 串行口通信 图8-6 串行口结构框图 项目八 串行口通信 串行口控制寄存器scon用于设置串行口的工作方式、接收/发送控制以及设定状态标志等;发送缓冲寄存器sbuf用于存放准备串行发送的数据;接收缓冲寄存器sbuf用于接收由外设输入到输入移位寄存器中的数据;定时器t1作为波特率发生器。在进行串行通信时,外部数据通过引脚rxd(p3.0,串行数据接收端)输入,输入数据
15、首先逐位进入输入移位寄存器,将串行数据转换为并行数据,然后再送入接收缓冲寄存器sbuf。接收时,由输入移位寄存器和接收缓冲sbuf构成双缓冲结构,以避免在接收到第2帧数据时,cpu未及时响应接收寄存器前一帧的中断请求,没把前一帧数据读走,而造成2帧数据重叠的错误。项目八 串行口通信 在发送数据时,串行数据通过引脚txd(p3.1,串行数据发送端)输出。由于cpu是主动的,因此不会产生写重叠问题,不需要双缓冲器结构。要发送的数据通过发送控制器控制逻辑门电路逐位输出。2. 51单片机串行口的特殊功能寄存器单片机串行口的特殊功能寄存器与串行口工作有关的特殊功能寄存器有sbuf、scon、pcon;与
16、串行口中断有关的特殊功能寄存器有ie和ip。项目八 串行口通信 1) 发送/接收缓冲寄存器sbuf发送与接收缓冲寄存器sbuf在特殊功能寄存器中共用同一个字节地址99h,且共用一个名称,但在物理上是两个独立的寄存器,可以同时发送、接收数据。cpu通过指令决定访问哪一个寄存器,执行写指令时,访问发送缓冲寄存器;执行读指令时,访问接收缓冲寄存器。该寄存器只能字节寻址,单片机复位后,sbuf=0。项目八 串行口通信 2) 串行口控制寄存器scon串行口控制寄存器scon用于串行口工作方式设定、接收和发送控制等。在特殊功能寄存器中,scon的字节地址为98h,位地址(由低位到高位)分别是98h9fh,
17、该寄存器可以位寻址。单片机复位后,scon=0。scon格式如表8-1所示。sm0、sm1串行口工作方式选择位。串行口有四种工作方式,由用户设置,如表8-2所示。项目八 串行口通信 表表8-1 串行口控制寄存器串行口控制寄存器scon(98h) 项目八 串行口通信 表表8-2 串行口的工作方式串行口的工作方式 项目八 串行口通信 sm2多机通信控制位,由用户设置。用于方式2和方式3。sm2=0时,单片机通信;sm2=1时,多机通信。当sm2=1,允许多机通信时,如果接收到的第9位rb8为0,则ri不置1,不接收主机发来的数据;只有当sm2=1,且rb8为1时,才能够将ri置1,产生中断请求,将
18、接收到的8位数据送入sbuf。当sm2=0时,不论rb8为0还是1,都将接收到的8位数据送入sbuf,并产生中断。ren接收允许位,由用户设置。ren=1时,允许接收;ren=0时,禁止接收。项目八 串行口通信 tb8发送数据的第9位,由用户设置。用于方式2或方式3。双机通信时,约定为奇偶校验位;多机通信时,用以区分地址帧或数据帧,tb8=1时,发送的是地址帧,tb8=0时,发送的是数据帧。方式0和方式1中未用该位。rb8接收数据的第9位,由用户设置。用于方式2或方式3。双机通信时,约定为奇偶校验位;多机通信时,用以区分地址帧或数据帧,rb8=1时,接收到的是地址帧,rb8=0时,接收到的是数
19、据帧。方式0中未用该位;方式1中,如果sm2=0,则rb8为接收到的停止位。 ti发送中断标志位,由硬件置位、用户清除。方式0中,发送完8位数据后,由硬件置位;其他方式中,在发送停止位之初,由硬件置位。ti=1时,可向cpu申请中断,也可供软件查询。无论任何方式,都必须由用户软件清除ti。项目八 串行口通信 ri接收中断标志位,由硬件置位、用户清除。方式0中,接收完8位数据后,由硬件置位;其他方式中,在接收停止位的中间,由硬件置位。ri=1时,可向cpu申请中断,也可供软件查询用。无论任何方式,都必须由用户软件清除ri。例如,设置串行口为方式1,允许接收数据时,scon应为50h,即字节寻址:
20、scon=0 x50;位寻址:sm0=0;sm1=1;ren=1; 项目八 串行口通信 3) 电源控制寄存器pcon电源控制寄存器pcon主要用于电源控制。在特殊功能寄存器中,pcon的字节地址为87h,该寄存器不能位寻址。单片机复位后,pcon=0。pcon格式如表8-3所示,在电源控制寄存器pcon中只有最高位smod对串行通信有影响。smod波特率倍增控制位,由用户设置。当smod=1时,波特率加倍;当smod=0时,波特率不变。项目八 串行口通信 表表8-3 电源控制寄存器电源控制寄存器pcon(87h) 项目八 串行口通信 4) 中断允许控制寄存器ie中断允许控制寄存器ie用于控制与
21、管理单片机的中断系统,可以位寻址,由用户设置。ie中的es位用于设置串行口是否允许中断,当es=0时,串行口关中断;当es=1时,串行口开中断。5) 中断优先级寄存器ip中断优先级寄存器ip用于管理单片机中各中断源的中断优先级,可以位寻址,由用户设置。ip中的ps位用于设置串行口中断优先级,当ps=0时,设置串行口为低优先级中断;当ps=1时,设置串行口为高优先级中断。项目八 串行口通信 8.2.3 串行通信工作方式串行通信工作方式如前所述,51单片机的串行口有四种工作方式,由串行口控制寄存器scon中sm0、sm1两位进行设置。1. 方式方式0采用方式0时,串行口作为8位同步移位寄存器,在发
22、送数据时,sbuf相当于一个并行输入、串行输出的移位寄存器;在接收数据时,sbuf相当于一个串行输入、并行输出的移位寄存器。方式0时l帧字符为8位,先发送或接收最低位,其帧格式为项目八 串行口通信 这种方式常用于扩展i/o口,波特率固定为fosc/12。由不同的指令实现输入或输出,串行数据由rxd(p3.0)输入或输出,由txd(p3.1)提供同步移位脉冲。发送与接收过程如下。(1) 发送。将某一字节数据写入sbuf时,由txd输出同步移位脉冲,由rxd发送sbuf中的数据(低位在前),波特率为fosc/12;8位数据发送完成后,由硬件将发送中断标志位ti置1,中断方式时向cpu申请中断;在中
23、断服务函数中,先由用户将ti清0,然后再给sbuf送入下一个待发送的字符。项目八 串行口通信 (2) 接收。由于ren是串行口允许接收控制位,在ri=0时,先要由用户软件置ren为1,允许接收数据。然后读取sbuf,由txd输出同步移位脉冲,cpu从rxd端接收串行数据(低位在前),波特率为fosc/12;当接收到8位数据时,由硬件将接收中断标志ri置为1,中断方式时向cpu申请中断;在中断服务函数中,先由用户将ri清0,然后读取sbuf。采用方式0时,串行口控制寄存器scon中的sm2位必须为0、tb8和rb8位未使用。每当发送或接收完8位数据时,由硬件将发送中断ti或接收中断ri标志置位,
24、不管是中断方式还是查询方式,硬件都不会清除ti或ri标志,必须由用户软件清0。方式0主要用于扩展单片机的并行i/o口。项目八 串行口通信 2. 方式方式1采用方式1时,串行口为10位通用异步通信接口。发送或接收的1帧字符,包含1位起始位0、8位数据位和1位停止位1。其帧格式为波特率由t1的溢出率决定,由用户设置。采用方式1时txd为数据发送端,rxd为数据接收端,发送与接收过程如下。项目八 串行口通信 (1) 发送。将某一字节数据写入发送缓冲寄存器sbuf时,数据从引脚txd(p3.1)端异步发送。发送完1帧数据后,由硬件将发送中断标志位ti置1,中断方式时向cpu申请中断,通知cpu发送下一
25、个数据;在中断服务函数中,先由用户将ti清0,然后再给sbuf送入下一个待发送的字符。(2) 接收。在ri=0时,先要由用户软件置ren为1,允许接收数据;串行口采样引脚rxd(p3.0),当采样到1至0的跳变时,表示接收起始位0,开始接收1帧数据,当停止位到来时,将停止位送至rb8,同时,由硬件将接收中断标志ri为1,中断方式时向cpu申请中断,通知cpu从sbuf取走接收到的1个数据;在中断服务函数中,先由用户将ri清0,然后读取sbuf。项目八 串行口通信 不管是中断方式,还是查询方式,都不会清除ti或ri标志,必须由用户软件清0。通常在单片机与单片机双机串行口通信、单片机与计算机串行口
26、通信、计算机与计算机串行口通信时,都可以选择方式1。项目八 串行口通信 3. 方式方式2和方式和方式3方式2和方式3均为11位异步串行通信方式,除了波特率的设置方法不同外,其余完全相同。方式2的波特率固定,由pcon中的smod位选择;方式3的波特率由t1溢出率控制。这两种方式发送/接收的1帧字符为11位,包含1位起始位0、8位数据位、1位可编程位(tb8/rb8)和1位停止位1。其帧格式为采用方式2和方式3时,txd为数据发送端,rxd为数据接收端,发送与接收过程如下。项目八 串行口通信 (1) 发送。发送前,首先根据通信协议由软件设置tb8(如作奇偶校验位或地址/数据标识位),然后将要发送
27、的数据写入发送缓冲寄存器sbuf。在发送时,串行口自动将已定义的tb8位加入待发送的8位数据之后作为第9位,组成一帧完整字符后,由txd端异步发送。发送完l帧数据后,由硬件将发送中断标志位ti置1,中断方式时向cpu申请中断,通知cpu发送下一个数据;在中断服务函数中,先由用户将ti清0,然后再给sbuf送入下一个待发送的字符。(2) 接收。当ri=0时,先要由用户软件置ren为1,允许接收数据,将接收数据的第9位送入rb8。由sm2和rb8决定该数据能否接收。项目八 串行口通信 当sm2=0时,不管rb8为0还是为1,ri都置1,串行口无条件接收。 当sm2=1时,是多机通信方式,接收到的r
28、b8是地址/数据标志位。当rb8=1时,表示接收的是地址帧,此时由硬件将ri置1,串行口将接收发来的地址;当rb8=0时,表示接收的是数据帧。对于sm2=1的从机,ri不置1,数据丢失;对于sm2=0的从机,串行口自动接收数据。在方式2和方式3中,不管是中断方式,还是查询方式,都不会清除ti或ri标志。在发送和接收之后,必须由用户软件清除ti和ri。方式2和方式3主要用于多机通信。项目八 串行口通信 8.2.4 51单片机串行口波特率的设置单片机串行口波特率的设置在串行通信前,首先要约定收/发双方的数据传送速率,即波特率。通过软件编程可将51单片机的串行口设定为4种工作方式,这4种方式波特率的
29、计算方法不相同:方式0和方式2的波特率是固定的,而方式1和方式3的波特率是可变的,由定时器t1或t2(at89s52)的溢出率控制。项目八 串行口通信 1. 方式方式0和方式和方式2的波特率的波特率采用方式0时,每个机器周期发送或接收1位数据,因此,波特率固定为时钟频率的1/12,且不受smod的影响。方式2的波特率取决于pcon中最高位smod,它是串行口波特率倍增位。复位后,smod=0。当smod=1时,波特率加倍,为fosc的1/32;当smod=0时,波特率为fosc的1/64。即:方式2的波特率 = (2smod/64)fosc项目八 串行口通信 2. 方式方式1和方式和方式3的波
30、特率的波特率串行口方式1和方式3的波特率是由定时器t1的溢出率与smod值共同决定的,即:方式1和方式3的波特率=(2smod/32)t1溢出率其中,t1的溢出率就是t1定时器溢出的频率,只要计算出t1定时器每溢出一次所需的时间t,那么1/t就是t1的溢出率。例如,t1每10 ms溢出一次时,它的溢出率就是100 hz,将100代入方式1和方式3的波特率计算公式,就可以计算出相应的波特率。但是在串行口应用时,常常需要根据波特率计算计数器t1的初值。项目八 串行口通信 当定时器t1作波特率发生器使用时,通常是选用8位自动重装载方式,即方式2。在方式2中,tl1用作计数,而th1用于存放自动重装载
31、所需的初值,因此初始化时装入th1、tl1的初值必须是相同的,然后启动定时器t1,tl1寄存器便在时钟的作用下开始加1,当tl1计满溢出后,cpu会自动将th1中的初值重新装入tl1,继续计数。当定时器t1作波特率发生器时,溢出后中断服务函数中并无任何事情可做,因此为了避免因溢出而产生不必要的中断,可禁止t1中断。项目八 串行口通信 溢出周期t为t = (12/fosc)(256-初值)溢出率为溢出周期之倒数,所以则定时器t1方式2的初值为 例如,系统晶振频率为11.0592 mhz,波特率为9600 bps,当smod=0时,定时器t1的初值为)256(12f322oscmods初值波特率波
32、特率初值3842f256smodosc项目八 串行口通信 51单片机控制系统中,当晶振为11.0592 mhz时,不管串行口波特率为何值,只要是标准通信速率,计算出的定时器t1初值都会非常准确。若采用12 mhz或6 mhz的晶振,定时器t1的定时初值不会是一个整数。常用串行口波特率与定时器初值如表8-4所示。fdh25396003842100592.112563842f25606smodosc波特率初值项目八 串行口通信 表表8-4 常用串行口波特率及定时器初值常用串行口波特率及定时器初值 项目八 串行口通信 8.2.5 双机通信和多机通信双机通信和多机通信1. 双机通信双机通信单片机的双机
33、通信根据发送方与接收方之间的距离可分为短距离和长距离通信。1米之内为短距离通信,1000米左右为长距离通信。若要更长距离,如几十千米或更长,则需要借助其他无线设备方可实现通信。单片机双机通信有ttl电平通信、rs-232c通信、rs-422通信、rs-485通信四种实现方式。项目八 串行口通信 1) ttl电平通信ttl电平通信是指直接将发送方单片机的txd(p3.1)端与接收方单片机的rxd(p3.0)端相连,发送方单片机的rxd(p3.0)与接收方单片机的txd(p3.1)直接相连,而且两个单片机控制系统必须共地,即把它们的电源地线连在一起。共地是初学者在硬件设计上最易忽视的一个问题。tt
34、l电平通信连接图如图8-7所示。项目八 串行口通信 图8-7 ttl电平双机通信连接图 项目八 串行口通信 单片机的ttl电平双机通信多用在同一个控制系统中,当一个控制系统中使用一个单片机不能实现控制要求时,可再添加一个或几个单片机,两个单片机之间构成双机通信,多个单片机就形成了多机通信,多机通信中只能有一个主机,其余单片机均为从机。ttl电平通信在双机或多机通信时,是将一个控制系统中的多个单片机直接相连,因此尽可能缩短各单片机之间的距离,距离越短,通信时就越可靠。项目八 串行口通信 2) rs-232c通信rs-232c是美国电子工业协会1969年制定的通信标准,它定义了数据终端设备与数据通
35、信设备之间的物理接口标准。rs-232c标准接头有9个引脚,但是将它用于两个单片机通信时,只需要用到rxd、txd、gnd三条线。rs-232双机通信连接图如图8-8所示。 项目八 串行口通信 图8-8 rs-232c双机通信连接图 项目八 串行口通信 rs-232c通信比ttl电平通信距离要远,但不能超过15米,最高传送速率为20 kb/s。rs-232c要求通信双方必须共地,通信距离越大,由于收、发双方的电位差较大,在地上会产生较大的地电流并产生压降,最终形成电平偏移。另外,rs-232c在电平转换时采用单端输入/单端输出,在传输过程中,干扰和噪声会混在有用的信号中,为了提高信噪比,rs-
36、232c通信要求采用较大的电压摆幅。项目八 串行口通信 3) rs-422通信、rs-485通信rs-422采用双端平衡驱动器,相比单端不平衡驱动器而言,电压放大倍数要增大一倍,可以避免地线干扰和电磁干扰的影响,当传输速率为90 kb/s时,传输距离可达1200米。rs-485是rs-422的变型,rs-422用于全双工,rs-485用于半双工。它的抗干扰能力非常好,传输速率达1 mb/s,传输距离可达1200米。项目八 串行口通信 2. 多机通信多机通信方式2和方式3可用于多机通信,这一功能使它可以方便地应用于集散式分布系统中。集散式分布系统含一台主机和多台从机,从机要服从主机的调度和支配。
37、多机通信时主、从机的连接方式如图8-9所示。项目八 串行口通信 图8-9 多机通信连接图 项目八 串行口通信 编程前,首先定义各从机地址编号,如分别为00h、01h、02h等。当主机需要给其中一个从机发送一个字符帧时,首先送出该从机的地址帧,主机发送地址帧时,地址帧/数据帧标志位tb8应设置为1。主机源程序中实现该设置的语句为scon=0 xd8;/设置串行口为方式3,tb8置l,准备发地址所有从机初始化时均置sm2=1,使它们处于接收地址帧状态。从机源程序中实现该设置的语句为scon=0 xf0;/设置串行口为方式3,sm2=1,允许接收项目八 串行口通信 当从机接收到主机发来的信息时,第9
38、位rb8若为1,则置位中断标志ri,并在中断后比较接收的地址与本从机地址是否相符。若相符,则被寻址的从机清除其sm2标志,即sm2=0,准备接收即将从主机送来的数据帧;未被选中的从机仍保持sm2=1。当主机发送数据帧时,应置tb8为0。此时,虽然各从机都处于接收状态,但由于tb8=0,所以只有sm2=0的那个被寻址的从机才能接收到数据,其他未被选中的从机不理睬传送至串行口的数据,继续进行各自的工作,直到一个新的地址字节到来,这样就实现了主机控制的主、从机之间的通信。项目八 串行口通信 综上所述,进行多机通信时,要充分利用寄存器scon中的多机通信控制位sm2。当从机的sm2=1时,从机只接收主
39、机发送的地址帧(第9位tb8为1),对数据帧不予理睬;当从机的sm2=0时,从机才能够接收主机发来的所有数据帧。单片机的多机通信只能在主、从机之间进行,各从机之间的通信只有经主机才能实现。多机之间的通信过程可归纳如下:(1) 主、从机均初始化为方式2或方式3,置sm2=1,允许多机通信,且所有从机都只能接收地址帧。项目八 串行口通信 (2) 主机置tb8=1,发送待寻址从机的地址(前8位是从机地址,第9位是1,表示该帧是地址帧)。(3) 所有从机均接收到主机发送的地址帧后,转去执行中断服务函数,目的是将所接收到的地址与从机自身地址进行比较。若相同,则该从机的sm2清0,可以接收主机随后发来的数
40、据帧,并向主机返回该从机地址,供主机核对;若不相同,从机仍保持sm2=1,无法接收主机随后发来的数据帧。项目八 串行口通信 (4) 主机对从机返回的地址核对无误后,主机向被寻址的从机发送命令,通知从机接收或发送数据。(5) 通信只能在主、从机之间进行,2个从机之间的通信须通过主机作中介才可实现。(6) 本次通信结束后,主、从机重置sm2=1,恢复多机通信的初始状态。项目八 串行口通信 在实际应用中,由于单片机功能有限,因而在较大的测控系统中,常常把单片机应用系统作为前端机(也称为下位机或从机),直接用于控制对象的数据采集与控制,而把pc机作为中央处理机(也称为上位机或主机),用于数据处理和对下
41、位机的监控管理。它们之间的信息交换主要是采用串行通信,此时单片机可直接利用其串行接口,而pc机可利用其配备的8250、8251或16450等可编程串行接口芯片(具体使用方法可查看有关手册)。实现单片机与pc机串行通信的关键是在通信协议的约定上要一致,例如设定相同的波特率及帧格式等。在正式工作之前,双方应先互发联络信号,以确保通信收/发数据的准确性。项目八 串行口通信 8.2.6 串行口初始化串行口初始化应用串行口时,首先要初始化串行口。1. 方式方式0初始化初始化方式0的初始化步骤为:(1) 对scon赋值(字节寻址或位寻址),确定串行口的工作方式等相关内容。初始化为方式0,寄存器scon为0
42、;或sm0、sm1均为0。(2) 串行口工作在中断方式时,对ie赋值开中断;查询方式时,不需开中断。项目八 串行口通信 2. 方式方式1方式方式3初始化初始化方式1方式3的初始化较为复杂,主要包括设置产生波特率的定时/计数器t1、串行口的工作方式、串行口控制与中断控制。方式1方式3初始化的具体步骤为:(1) 对tmod赋值(只能字节寻址),确定定时/计数器t1工作在方式2;(2) 根据波特率计算t1的初值,并同时将其写入th1、tl1;(3) 置位tr1,启动定时/计数器t1;(4) 对scon赋值(字节寻址或位寻址),确定串行口的工作方式等相关内容;(5) 串行口工作在中断方式时,对ie赋值
43、开中断;在查询方式时,不需开中断。项目八 串行口通信 8.2.7 串行口应用举例串行口应用举例串行口的工作方式0并不是一个同步串行口通信方式,它的主要用途是与同步移位寄存器相连,扩展单片机的并行i/o口,同步移位脉冲由txd(p3.1)端输出。典型应用图如图8-10所示。74ls164是一个8位串行输入、并行输出的移位寄存器。clr用于清0,a、b两个输入端可并在一起使用,也可单独使用,由单片机的rxd将数据送至a、b端,然后在clk同步时钟脉冲作用下,8位串行数据就可以全部移至8位并行输出口上,实现数据的串、并转换,用以扩展单片机的并行输出口。项目八 串行口通信 图8-10 方式0扩展并行口
44、原理图 项目八 串行口通信 74ls165是一个8位并行输入、串行输出的移位寄存器。qh为串行数据输出端,s/端为启动移位信号端,加入低脉冲时启动移位操作,与51单片机串行口相连,用以扩展单片机的并行输入口。例1 51单片机串行口工作于方式0时,利用74ls164扩展并行i/o口,在74ls164的8个输出端连接8个led,采用中断方式编程使8个led闪烁,闪烁规律为每次点亮 1个led,先下移1次,再上移1次,最后所有的led闪烁2次;然后重新开始,闪烁的间隔时间为200 ms。解:(1) 硬件设计。由题意可知,需将8个led连接在74ls164的输出端,led仍连接为灌电流负载,如图8-1
45、1所示。项目八 串行口通信 图8-11 方式0扩展并行输入口应用电路 项目八 串行口通信 (2) 软件设计。根据led的闪烁规律,可知所需代码如表8-5所示。采用数组方式实现led闪烁,即定义数组led 按闪烁规律存放表8-5所示代码。在主函数中实现串行口的初始化,然后就不断地将数组led中序号为i的代码发送至74ls164。每发送完一个代码,由硬件自动置位ti,向cpu申请中断,cpu响应后转去执行串行口的中断服务函数(串行口中断号为4)。在串行口的中断服务函数中,由用户清除ti,然后延时200 ms,再修改变量i,返回主函数中继续发送下一个代码。项目八 串行口通信 表表8-5 方式方式0时
46、时led闪烁代码闪烁代码 项目八 串行口通信 (3) 源程序。#include #define uchar unsigned char#define uint unsigned int/*必要的全局变量定义*/uchar code led =0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f,0 xbf,0 xdf,0 xef,0 xf7,0 xfb,0 xfd,0 xfe,0 xff,0 x00,0 xff,0 x00;/*定义数组led存放闪烁代码,第一行代码下移1次、第二行代码上移1次,第三行代码闪烁2次*/项目八 串行口通信 uchar i=
47、0;/*延时函数*/void delay200ms() uint k,j;for(k=0;k20;k+)for(j=0;j18)/控制i的变化范围i=0;项目八 串行口通信 8.3 项项 目目 实实 施施8.3.1 硬件设计方案硬件设计方案本项目要求双机通信,两个单片机实验板之间的通信距离很短,为了方便验证,采用ttl电平实现两个单片机实验板之间的通信,依照图8-7进行连接。将发送方的rxd与接收方的txd、发送方的txd与接收方的rxd用短导线相连,并将发送方与接收方的地线相连,满足共地要求,就可以实现双机通信。发送方的矩阵键盘电路、接收方的数码管显示电路均采用hot-51实验板上的电路,大
48、家可参考项目三与项目四的实验板电路分析相关内容。项目八 串行口通信 8.3.2 软件设计方案软件设计方案双机通信时,建立两个项目分别编写发送方与接收方源程序。为了保证发送方与接收方正确的通信,必须保证两个单片机系统的波特率完全一致,否则接收方会收不到正确的结果。发送方与接收方的波特率均为9600 b/s,smod=0不倍增时,查表8-4可知定时/计数器t1的初值为fdh,初始化时将其同时送入th1与tl1中,启动后,tl1就会在初值上加1计数。定时/计数器t1在这里是作为波特率发生器使用的,将其设置为方式2,定时溢出时由硬件自动将保存在th1中的初值重新装入tl1,中断后没有任何事情可做,因此
49、定时/计数器t1就不需要开中断了。项目八 串行口通信 双机通信时,发送方与接收方的两个串行口应工作在方式1,区别在于发送方的串行口工作在查询方式,因此不需要开中断;而接收方的串行口工作在中断方式,要开中断并编写串行口中断服务函数,特别注意的是接收方的允许接收控制位ren应设置为1,否则接收不到发送方发送的键号。 发送方主要完成矩阵键盘扫描、发送等任务。当有键闭合时,由行列反转法获取闭合键的键号,然后将闭合键的键号由串行口发送至接收方,发送完成后,继续扫描键盘。键盘扫描函数uchar keyscan()是无参有返回值的函数,调用它可以获得闭合键的键号;发送函数void send (uchar j
50、ianhao)是有参无返回值函数,它的作用是采用查询方式由串行口项目八 串行口通信 发送闭合键的键号,调用它时,必须将闭合键的键号作为实参;主函数main()中首先要完成对串行口、定时/计数器t1的初始化,然后就是无限次地判断有无键按下,有键按下时调用键盘扫描函数uchar keyscan()得到闭合键的键号,再调用发送函数void send (uchar jianhao)由串行口发送闭合键的键号。项目八 串行口通信 接收方主要完成数据的接收、显示等任务。若采用中断方式工作,当接收方的ren=1时,接收器就以所选波特率的16倍速率采样rxd引脚,检测到rxd引脚发生负跳变时,将接收到的8位数据
51、装入接收缓冲寄存器sbuf,并置位接收中断标志ri,向cpu请求中断。在串行口中断服务函数void chuan0 () interrupt 4中取出接收缓冲寄存器sbuf中的键号,并将其段码发送至p0口,就实现了显示闭合键键号的要求。项目八 串行口通信 (1) 发送方单片机源程序。#include #define uchar unsigned char#define uint unsigned int/*必要的全局变量定义*/uchar code jianzhibiao = 0 xee,0 xde,0 xbe,0 x7e,0 xed,0 xdd,0 xbd,0 x7d,0 xeb,0 xdb,
52、0 xbb,0 x7b,0 xe7,0 xd7,0 xb7,0 x77;/定义键值表项目八 串行口通信 /*延时函数*/void delay (uint i)/延时时间约为i1 ms uchar j, x;for(j=0;ji;j+)for(x=0;x=130;x+);项目八 串行口通信 /*发送函数*/void send (uchar jianhao) sbuf=jianhao;/将闭合键的键号送入发送缓冲寄存器sbuf,进行发送while(!ti);/查询ti,等待发送结束ti=0;/发送结束后,清除发送中断标志ti,为下一次发送作准备项目八 串行口通信 /*键盘扫描函数*/uchar k
53、eyscan() uchar lie,jianzhi,jianhao,i;/定义按键识别所需局部变量lie=p1;/有键闭合时,暂存列值p1=0 x0f;/置行1、列0 jianzhi=lie|p1;/读入行值,与列值“位或”得键值并赋给jianzhifor(i=0;i16;i+)/查找键值表,最多需要比较16次 if(jianzhi=jianzhibiaoi)/将闭合键键值与键值表的元素一一作比较项目八 串行口通信 jianhao=i; /如果if为真,找到键值,将i赋给变量jianhaobreak;/找到键号后,结束查找while(p1!=0 x0f);/等待按键释放delay(10);/
54、去除按键的后沿抖动return(jianhao);/返回闭合键的键号项目八 串行口通信 /*主函数*/void main() uchar jianhao;tmod=0 x20;/定时/计数器t1为方式2,字节寻址th1=0 xfd;/用于存放初值fdh,smod=0,波特率为9600 b/stl1=0 xfd;/用于加1计数,初值为fdhtr1=1;/启动定时/计数器t1,位寻址sm0=0;sm1=1;/串行口初始化为方式1,位寻址while(1)项目八 串行口通信 p1=0 xf0;/置行0、列1if(p1!=0 xf0)/读入列值,检测有无按键闭合delay(10);/延时10 ms,去除
55、按键的前沿抖动if(p1!=0 xf0)/再次检测,如果if语句仍为真,确定有键闭合jianhao=keyscan();send(jianhao);项目八 串行口通信 (2) 接收方单片机源程序。#include #define uchar unsigned char#define uint unsigned int/*必要的全局变量定义*/uchar code seg7 =0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71;/定义共阴型数码管段码表项目八
56、 串行口通信 /*延时函数*/void delay (uint i)/延时时间约为i1 ms uchar j, x;for(j=0;ji;j+)for(x=0;x=130;x+);/*主函数*/void main()项目八 串行口通信 tmod=0 x20;/定时/计数器t1为方式2,字节寻址th1=0 xfd;/用于存放初值fdh,smod=0,波特率为9600 b/stl1=0 xfd;/用于加1计数,初值为fdhtr1=1;/启动定时/计数器t1,位寻址sm0=0;sm1=1;/串行口初始化为方式1,位寻址ren=1;es=1;/串行口开中断,位寻址ea=1;/cpu开中断,位寻址whi
57、le(1);/等待串行口中断项目八 串行口通信 /*串行口中断服务函数*/void chuan0 () interrupt 4 uchar jianhao;ri=0;/清除接收中断标志rijianhao=sbuf;/读取接收缓冲寄存器sbuf p0=seg7jianhao;/显示发送方矩阵键盘中闭合键的键号项目八 串行口通信 (3) 分析。发送方的串行口采用查询方式,因此在发送函数void send (uchar jianhao)中,当执行语句“sbuf=jianhao;”后便自动开始将串行口发送缓冲寄存器sbuf中的数据一位接着一位从串口发送出去;语句“while(!ti);”的作用是查询一
58、帧字符是否发送完成,未发送完成时,ti=0、!ti=1,while的表达式永远为真,一直在该语句处等待,只有当发送完成置位ti后,!ti=0,while的表达式永远为假,结束等待,执行while的下一条语句;清除发送中断标志ti,若用户不清除ti,下一次就无法正常发送。项目八 串行口通信 void send (uchar jianhao) sbuf=jianhao;/将闭合键的键号送入发送缓冲寄存器sbuf,进行发送while(!ti);/查询ti,等待发送结束ti=0;/发送结束后,清除发送中断标志ti,为下一次发送作准备项目八 串行口通信 接收方的串行口采用中断方式,在中断服务函数void
59、 chuan0() interrupt 4中首先清除接收中断标志ri,因为cpu只要开始执行该中断服务函数,就表示产生了串口中断,而且肯定是发送或接收了数据,若接收方源程序并没有发送任何数据,那就必然是接收到了数据,硬件会自动地将ri置1。进入中断服务函数后,必须由用户将ri清0,这样才能产生下一次中断;然后将接收缓冲寄存器sbuf中的数据读出送给变量jianhao,再由语句“p0=seg7jianhao;”将键号显示出来,这才是进入中断服务函数中最重要的目的。 项目八 串行口通信 void chuan0 () interrupt 4 uchar jianhao;ri=0;/清除接收中断标志r
60、ijianhao=sbuf;/读取接收缓冲寄存器sbuf p0=seg7jianhao;/显示发送方矩阵键盘中闭合键的键号从发送方与接收方的发送与接收过程中可以清晰地看出,sbuf是共用一个地址的两个独立寄存器,单片机识别操作哪个寄存器的关键语句是“sbuf=jianhao;”和“jianhao=sbuf;”。项目八 串行口通信 8.3.3 程序调试程序调试1. 实验板电路分析实验板电路分析将发送方单片机实验板中的rxd(p3.0)、txd(p3.1)分别与接收方单片机实验板中的txd(p3.1)、rxd(p3.0)用短接线相连,然后再用短导线将两个单片机实验板的地线连接到一起,即两个实验板要
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年天津渤海职业技术学院单招职业适应性测试题库附参考答案详解(突破训练)
- 2026年四川邮电职业技术学院单招职业适应性考试题库带答案详解(培优a卷)
- 2025辽宁丹东市疾病预防控制中心面向普通高校公开招聘急需紧缺人才10人笔试历年典型考题及考点剖析附带答案详解试卷2套
- 2025贵州省第二人民医院公开招聘工作人员(13人)笔试历年典型考题及考点剖析附带答案详解试卷2套
- 2025西咸新区泾河新城重点产业链招聘(94人)笔试历年难易错考点试卷带答案解析
- 2025福建莆田市数字集团有限公司招聘企业员工20人笔试历年备考题库附带答案详解
- 2025福建省福州肺科医院(福建省福州结核病防治院)人员控制数自主招聘工作人员34人笔试历年典型考题及考点剖析附带答案详解
- 2025甘肃众海人力资源有限公司招聘22人笔试历年难易错考点试卷带答案解析
- 2025浙江嘉兴市海宁市袁花文化旅游产业发展有限公司招聘综合及对象笔试历年备考题库附带答案详解试卷2套
- 2025江苏扬州高邮市人力资源服务有限公司招聘工作人员1人笔试历年典型考点题库附带答案详解
- 儿童文学教程(第4版)课件 第一章 儿童文学的基本原理
- 铁路设计定型管理办法
- 2025年人教版(2024)小学信息科技四年级(全一册)教学设计(附教材目录 P208)
- 医院医务人员个人意识形态工作存在问题及整改措施
- 信托公司异地部门管理制度
- 20G361预制混凝土方桩
- T/CEMTA 1-2021工业炸药塑膜、纸塑袋包装技术规范
- DB31/T 1057-2017在用工业锅炉安全、节能和环保管理基本要求
- (高清版)DB62∕T 3255-2023 建筑工程施工扬尘防治技术标准
- 冶金建设工程施工组织设计标准
- 2024年嘉兴市申嘉有轨电车运营管理有限公司招聘考试真题
评论
0/150
提交评论