




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
内容提要
通信的基本概念串行通信
串行口结构及工作原理串行通信编程举例
多机通信原理及系统设计RS-232-C接口标准
RS-485接口
7.1通信的基本概念7.1.1通信的意义
1.学习通信技术的意义 通信是当代计算机应用的核心。网络和数据库是计算机两大支柱。通信是网络研究的目的;网络是通信架构
通信思想的起源:由单个计算机构成的封闭系统有很大的局限性:能力不足、系统复杂、实时性差、系统封闭,不易于产品兼容;信息不能被共享,重复而造成浪费等等。基于上述原因,多计算机系统出现。
7.1.2通信的定义及数据的传输
(1)通信的定义 广义上说,两个以上智能体之间的信息交换的过程就是“通信”。强调“智能”的原因是通信的实体必须能理解通信内容的含义。
(2)信息传送的方式 计算机通信从信息传送方式可分为并行和串行通信
1)并行通信
两通信设备一次交换多个bit的数据的通信方式。其传输的速率用每秒钟传送的字节数来表示(b/s)。其特点是通信速率高,缺点是通信线路多,因为每一bit的数据都要有一条数据线与之对应,不适用于远程通信,如图7-1所示。并行传输的一个例子是并行接口打印机。
2)串行通信
两通信设备一次交换一个bit的数据的通信方式,即字符数据(码字)是逐位(码元)传送的,一个字符由若干位组成。
特点是通信速率较低,但通信线路少,经济,可靠,适用于远程通信。如图7-2所示。注:串行通信不一定需要统一双方的电位,也不一定需要控制或联络线。电话网是串行通信系统的一个典型例子。
3通信工作方式
1)单工方式
数据只能从一方传向另一方,而不能往反方向传输,如图7-2所示,数据只能从A到B,这是根据应用的特点,简化了通信双方的软、硬件造成的。单向传输设备,如并行接口打印机,单工就能胜任。
2)半双工方式
允许数据往两方传向传输,但只能交替进行,而不能同时进行的传输方式。如图7-3所示。
3)全双工方式
数据可同时往两方向传输的传输方式。如图7-4所示。注:在多数情况下,单工、半双工、全双工都是对串行通信而言的,若将其推广到并行通信。
图7-3的电路是半双工的。电话是全双工的典型例子,但在实际通信时,我们往往用半双工方式,否则,谁也得不到有用的信息。 本章只讨论串行通信,即下面的讨论,对象默认为串行通信。4.信道及信号的调制和解调
1)信道 信道的狭义定义指信号的传输介质;广义定义为:传输介质加变换设备如调制解调器(Modem)、基带放大器等。计算机通信系统中采用有线和无线两种信道。
2)传输介质 有线传输介质主要包括明线、同轴电缆、双绞线、光纤等。 无线传输以大气、水或太空等为介质。5计算机通信常用的几种信道
1)基带传输信道 指计算机之间通过实线连接的数据传输通道。其特点是,信号不经过任何变换,但通常要对信号进行放大。典型的基带传输信道如两台计算机通过RS-232-C接口的互联。
2)载波传输信道
计算机之间进行远距离通信时,基带传输不仅会降低通信质量和速率,通信成本也会随之增大。因此发送时先用调制器将数字信号调制成音频模拟信号再输送到电话网上,接收时通过解调器将模拟信号变换为数字信号,再被计算机接收。 在通信的每一方均需要一个调制器和解调器,将他两合在一个装置中,就称为调制解调器MODEM。
图7-5是调制解调过程的示意图。调制解调被用于远距离数据通信,因此把他叫做数据通信设备DCE或数传机(DATASET)。 调制解调器类型较多,有振幅键控(ASK)、频移键控(FSK)和相移键控(PSK)。FSK具有较好的抗干扰性,应用最多。波特率可达1200(baud)以上,如HT2012。7.2串行通信7.2.1串行通信协议 通信系统是开放的。为使通信顺利进行,由通信双方就如何交换信息所建立进来的一套规定,称为通信控制规程,网络术语中称为协议。 另外,为统一接口和连接,规程中还有关于信号线功能、电气特性、机械特性等明确的规定,称之为接口标准。如RS-232C、RS-485接口标准等。
通信协议和接口标准是串行通信的应用指南。
通信协议也有开放协议和不开放协议之分。开放协议就是公开的、普遍认可(不被认可,开放也没用)、完善的协议。开放协议使各厂商的产品可以互换,有利于用户和产品市场竞争。如TCP/IP协议、CANBUS协议、Lonworks协议等。通信协议中除公共标准外,还有可根据实际应用需要制定的扩展协议部分,称为应用通信协议。7.2.2串行通信的方式
1.同步方式 是一种连续传输若干字符的串行通信方式。通信时,收发双方的码字(字符或字节)和码元(位)有严格的时序关系。如图7-6所示 在图7-6中,码字中的各个码元之间的同步称为位同步;码字之间的同步称为群同步。 单片机常用的同步通信有I2C、SPI等。
2异步方式
异步通信时收发双方在码元和码字上都不存在严格的时序关系。其特点是:字符(码字)是一帧一帧的传送,每一帧的传送由起始位开始,以停止位结束。接收方通过对起始位和停止位的检测与发送方同步,因此也称为起止式异步通信。如图7-7所示。 与同步通信不同,异步通信中,发送方和接收方有各自的时钟,一帧传输一个字符。每帧由起始位(规定为逻辑0)、数据位(5~8位)、奇偶校验位、停止位(规定为)组成,起止位的作用是使通信双方同步。
(3)同步通信与异步通信方式的比较 串行通信的两种方式相异之处列于表7-1中
4.异步串行通信中必须遵循的规定
1)字符格式的规定 通信双方传输字符的格式要按规定写。在异步传输方式中,字符的位数、停止位的位数(1位,1.5位,2位),是否使用奇、偶校验位等命令,要通过对通信控制器写操作完成设置。
2)传输速率必须相同 传输速率可用以下两个单位来度量。 比特率:通信线路上每秒传输的字符的位数,单位bit/s。 波特率(Baudrate):通信线路上每秒传输波形的个数,单位为Baud(波特)。 (7-1式)
式(7-1)表示比特率总是大于或等于波特率。PC和51机的通信波形,只有高、低电平两种码元,n=1,L=2,比特率等于波特率。
传输速率的另一种表示叫位周期,它是波特率的倒数。 波特率是表明传输速度的标准,国际上规定的一个标准的波特率系列是:110,300,600,1200,1800,2400,4800,9600,19200。异步通信允许发送方和接收方的时钟误差或波特率误差在2%~3%
7.2.3通信控制器 计算机与外设的通信,使用一个类似于邮箱或秘书的器件,帮助CPU管理通信事务。该器件称为通信控制器。独立完成与外设的数据通信管理工作,并在接收到有效数据或在数据发送完成后,通知CPU进行处理。 通信控制器一般有几个主要功能: (1)将待发的数据,转换为协议规定的格式发送出去。 (2)在收到数据帧后,将信息翻译、复原为原始数据,并通知CPU读取信息。 (3)能有条件地屏蔽某些特定的信息,使CPU安心工作,不受干扰。7.3串行口结构及工作原理
51机内置的通用异步接收/发送器UART(UniversalAsynchronousReceiver/Transmitter)电路,是实现串行通信的通信控制器。控制器是全双工的,其结构如图7-8所示。
51机波特率发生器的源是单片机定时器T1或T2,T0没有此功能,请记住。 在接口标准方面,51机的通信控制器与RS-232C的接口标准(兼容),只是51机是以Vcc为高电平基准的TTL电平。高电平代表逻辑“1”,地电平代表逻辑“0”,51机的TTL电平信号,可通过一个TTL-232转换器(如MAX232),即可转换为标准RS-232C信号,与RS-232C接口标准的系统进行通信了。
异步通信是本章讨论的内容。7.3.1串行口的工作方式
1.串行口的控制寄存器SCON SCON用来控制串行口的工作方式和状态,地址98H。复位值为0。格式如表7-2所示。各位意义如下:
SM0/FE,SM1:工作方式选择位。51共有4种工作方式,每种方式的基本功能例于表7-3中。
SM2:多机通信控制位。在方式2和方式3中,如SM2=1,则接收到的第9位数据(RB8)为0时不启动接收中断标志RI(即保持RI=0不变),并且将接收到的前8位数据丢弃;只有在RB8为1时,才将接收到的前8位数据送入SBUF,并置位RI,发出中断请求。当SM2=0时,则不论RB8为0或1,都可有效接收数据,并置中断请求位RI。工作于方式0、1时,SM2须清0。
REN:允许串行接收控制位。REN=0,禁止接收;REN=1,允许接收。该位由软件置位或复位。
TB8:发送数据位8(第9位数据)。在方式2和方式3时,TB8为所要发送的第9位数据。在多机通信中,可利用TB8位的状态,表示发送数据的类型,如命令或数据等;在双机通信时,也作为奇偶校验位使用。该位由软件置位或复位。
RB8:接收数据位8(第9位数据)。含义与TB8对应,由通信双方在协议中定义它们的意义。
TI:发送中断标志位。方式0下,在发送数据的第8位后被置位;在其它方式下发送停止位后被置位。该标志位需软件清0。
RI:接收中断标志位。方式0下,当接收到数据的第8位后,由硬件使RI置位;在其它方式下,接收到停止位后被置位。该标志位需软件清0。
TI、RI这两个标志位也可供查询使用。无论CPU响应中断与否,对通信中每一帧产生的请求标志TI、RI,均必须用指令清零,否则,通信将不再进行。这是51通信控制器的特点,是为了通信的可靠性而设计的。
2电源控制寄存器PCON PCON是为CHMOS单片机的电能控制而设置的专用寄存器,单元地址为87H,不能按位寻址。复位状态为:00X10000。对标准51来说,除最高位SMOD外,其它位无意义。PCON的格式如表7-4所示。
SMOD(PCON.7):串行口控制用的波持率倍增位。SMOD=1,方式1、2、3的波特率是SMOD=0时的2倍,因此称SMOD为波持率倍增位。 注:SCON的FE,PCON的SMOD0功能少用,为清楚起见,本书将不再讨论,在用到时可查阅相关资料。7.3.2串行口工作方式 串行口有4种工作方式,他们由SCON中的SM0、SM1来定义的,见表7-3。
(1)方式0(此部分根据进度选讲) 串行口工作方式0,为移位寄存器I/O方式。发送状态下,串行口相当于“并入串出”,而在接收状态下,则相当于“串入并出”的移位寄存器。其接口对象是具有移位寄存器结构的逻辑器件,用于串行I/O扩展。
(1)方式0输出:8位数据b0~b7依次从RXD引脚输出,TXD输出(移位)同步脉冲,输出脉冲频率固定为系统时钟频率fosc的12分频,不可改变。当8位数据输出完后,中断请求标志TI被置1。
(2)方式0输入:8位数据b0~b7依次从RXD引脚输入,TXD输出同步脉冲,波特率=fosc/12,不可改变。当8位数据被接收后,中断请求标志RI被置1。
2.方式1、2、3
当设置SCON中的SM0、SM1为01、10、11时,串行口工作在方式1、2、3。串口均为异步串行通信口,其中TXD是发送端,RXD是接收端。 发送或接收帧信息包括1位起始位(固定为0)、8(方式1)或9位(方式2、3)串行数据(低位在前,高位在后)和一位停止位(固定为1)共10或11位。
方式1、3的波特率是可变的。波特率与定时器T1或T2的溢出率、SMOD位有关。注意:51机的T0不能作为波特率发生器用。 方式1、方式3波特率与定时器T1溢出率、SMOD位关系如下: (7-2)方式2的波特率固定为: (7-3)
7-3式中SMOD是PCON的SMOD位。当SMOD位为1时,波特率是SMOD为0时的两倍。因此,PCON寄存器中的SMOD位被称为波特率倍增位。对方式1、2、3都成立。 如前所述,波特率(这里等同于比特率)是每秒钟传输数据的位数。在异步串行数据传输时,双方的同步是靠波特率(各自的时钟)实现的。
7.3.3异步串行口通信的过程
1.方式1的发送 在TI为0情况下(表示串行口发送控制电路处于空闲状态),任何写缓冲器SBUF指令(如MOVSBUF,A)均会触发串行发送过程:51串行口自动在8个数据位的前、后分别插入一个起始位和一个停止位,构成10位信息帧。当8位数据发送结束后(即开始发送停止位)时,串行口自动将发送中断标志TI置1。在中断处于开放状态下,TI有效时,将导致串行中断。
2.方式1的接收过程 在接收中断标志RI为0(串行接收缓冲寄存器SBUF处于空闲)情况下,当REN位为1时,串行口处于接收状态。此时,串行口发现RXD引脚由高电平变为低电平后,便自动启动接收过程。按设定波特率顺序读出数据位和停止位。
当接收完一帧信息后,便将接收到的内容装入串行数据输入缓冲寄存器SBUF中,并置RI为1。因此RI可作为接收过程的查询标志用。在串口中断及总中断处于开放状态下,RI有效时将触发串行中断。 值得注意是CPU响应串行中断后,不会自动清除RI或TI标志位,需要用指令如“CLR”等清除RI或TI标志。以便继续进行串口的收/发工作。
3.方式2和方式3的帧数据格式与方式1的区别 串行口方式2与方式3都是9位异步串行通信口,唯一区别是方式2的波特率固定为时钟频率的32或64分频,不可变。由于方式2的波特率与通用串行通信设备对不上,因此只用于51机之间的通信,方式2的波特率是所有方式中最高的。
方式3与方式1在波特率方面没有区别。区别在于帧格式上:方式2、方式3是9位数据格式。一帧信息为11位,由一位起始位、9位串行数据、一位停止位。
发送方在方式2、方式3时,9位数据的构成与写入顺序为:必须先将第9位写入SCON的TB8位,再将8位数据写入SBUF,注意:一但执行写SBUF命令,发送过程便被启动,不可取消了。这就是为什么先写第9位数据的原因。由于方式3波特率可变,因此,串行口方式3比方式2应用范围更广。
方式2、方式3中,接收的信息的第9位在SCON寄存器的RB8位中。8位数据仍在SBUF中。 方式2、方式3是多机通信方式,在应用时要留意多机通信控制位SM2的含义。7.4串行通信及编程举例
7.4.1双机通信
双机通信也称为点对点通信。是通信中最基本的形式。顾名思义,双机通信就是两台机的信息交换过程。
若两片51机相距很近,可以不需任何调制与电平转换而直接互联,其通信电路如图7-11所示。注意:图中的地线是用于统一双方的“0”参考电位的。 方式1、2、3都能进行双机通信,但要注意:在点对点通信时,为避免复杂操作,双方都要将SM2置“0”。
【例7-1】两个51机进行最高速率通信。要求使用串口方式2,A机为发送方,不使用串口中断;B机接收,使用串口中断。设两机的focs相同,发送方只将一个字节数据,如0AAH发向B机便结束。
分析:本例最基本的一个通信程序范例。编写通信程序主要考虑是工作方式、focs等,以实现波特率匹配。此外,还要制定通信协议(信息识别方法、数据含义的解释方法、通信数据的个数、一次通信过程的结束条件、要不要校验、用什么校验方式等)。
本例中硬件条件:方式2、focs相等;协议简单:收/发一个数据,不要求校验和解释。
解根据题目要求,发送方参考程序如下:
ORG 0000H AJMP START ORG 0040HSTART: MOV SP,#5FH MOV SCON,#90H ;方式2,允许接收SM2=0 MOV PCON,#80H ;波特率加倍,最高速率
MOV SBUF,#0AAHWAIT2: JBC TI,STOP SJMP WAIT2STOP: SJMP STOP END#include<reg51.h> #defineucharunsignedchar#defineuintunsignedintucharidataR5;main(){ R5=0xaa; SCON=0x80; //方式2不允许接收,SM2=0 PCON=0x80; //PCON=80加速
SBUF=R5; while(TI!=1); TI=0; //等待发送完成
while(1);}
接收方参考程序如下:
ORG 0000H AJMP START ORG 0023H LJMP SINT ;串行中断入口
ORG 0040HSTART: MOV SCON,#90H ;方式2,允许接收SM2=0 MOV PCON,#80H ;波特率加倍
MOV IE,#90H ;串口及总中断开放
CLR F0WAIT1: JBC F0,TRDATA ;F0由中断服务程序置位
SJMP WAIT1 ;置位或清零TRDATA:CLR ES ;关串口中断,此为甲机的程序
MOV A,SBUF SJMP $SINT: JBC TI,BACK CLR RI SETB F0 ;置成功接收标志BACK: RETI ;中断返回
END#include<reg51.h> #defineucharunsignedcharucharidataR5;bitgetdata;voidssio(void)interrupt4 //串口中断服务程序
{ if(TI) {TI=0;return;} else { RI=0; getdata=1; } //置接收一帧数据标志}main(){ //SP=0x5f; //堆栈设置,可根据编程习惯取舍 getdata=0; SCON=0x90; //方式2允许接收,SM2=0 PCON=0x80; //PCON=0为波特率9600
ES=1; //允许串口中断
EA=1; //开放总中断
while(getdata==0); //等待数据帧到来
{ R5=SBUF; //保存数据
getdata=0; //数据收到,清除标志
}}7.4.2串行通信数据校验方法之一:奇偶校验 受串行通信的距离、通信速率、信息量、通信线路、环境条件等因素的影响,可能会出现数据传输错误问题。 为保证通信的正确性,计算机中采用对通信数据的校对方法,确认数据传输的正确性。称为校验。
事实上,校验是手段,纠错是目的。 我们将这种利用数据的奇偶性查错的方法称为奇偶校验法。这是本书讨论的第一种校验法。奇偶校验的实现过程如下: (1)发送方每发送一帧数据时,先将待发数据的奇偶性作为第9位(附加位)写入SCON的TB8位,再将数据写入SBUF中,一个完整的数据帧发出。 (2)接收方每收到一帧信息,就将所收数据的奇偶性,与信息帧的第9位数据(在RB8中)进行比较,两者相等则可确定此数据帧传输无误,否则,传输错误。 (3)校验结果,通信双方应根据通信协议进行相应的处理,这里没有通用方法。
使用奇偶校验应注意的问题:
(1)51机只有在串口方式2、3时(9位数据)且SM2位必须为“0”
才有条件进行奇偶校验;
(2)为测得数据的奇偶状态,用MOVA,SUBF指令最方便;
(3)并不是所有的通信都要使用校验,更不是都要用奇偶校验,校验与否通信双方要在通信协议中确定。反映在习题中,要认真审题,要求校验,才能写校验的程序部分,避免犯画蛇添足的错误。
【例7-2】两个51机进行双机通信。要求使用串口方式2、奇偶校验、使用工作寄存器组2。A机作为发送方,连续发送n个字节(片内RAM足够使用n<256),B机接收。设两机的focs相同。只要校验的结果
分析:本例是奇偶校验应用问题。程序以例7-1为基础,只需将奇偶校验部分加进去即可。 本例的特点是奇偶校验和多帧数据的收/发。另外还采用发送中断编程,注意体会。至于工作寄存器组2只是附加的一个练习。
发送方参考程序如下:
ORG 0000H AJMP START
ORG 0023H LJMP SINT ;串行中断入口
ORG 0040HSTART: MOV SP,#5FH
SETB PSW.4 ;工作区用2区
CLR PSW.3 ;非核心指令!
MOV R7,#n MOV R0,#addr0
CLR 01H 01H=单个数据发送成功
CLR F0 ;F0=1启动发送
MOV SCON,#80H ;方式2,不允许接收SM2=0 MOV PCON,#80H ;波特率加速
MOV IE,#90H ;串口及总中断WAIT1: JBC F0,TRDATA ;F0由过程设置
SJMP WAIT1 ;置位或清零TRDATA:MOV A,@R0 MOV C,P ;取奇偶位
MOV TB8,C ;装入TB8作为第9位数据 MOV SBUF,A INC R0WAIT2: JBC 01H,AGAIN SJMP WAIT2AGAIN: DJNZ R7,TRDATA ;R7为发送字节数
MOV R7,#n ;重复初值
MOV R0,#addr0 CLR ES ;禁止串口中断
SETB REN ;现在才允许接收WAIT3: JBC RI,CON ;等待接收校验结果
SJMP WAIT3 CON: SETB ES ;再次允许串口中断
CLR REN ;再次禁止接收
MOV R5,SBUF ;将校验结果存于R5
LJPM WAIT1SINT: CLR TI SETB 01H RETI END
接收方参考程序如下:
ORG 0000H AJMP START ORG 0023H LJMP SINT ;串行中断入口
ORG 0040HSTART: MOV SP,#5FH
SETB PSW.4 ;
CLR PSW.3 ;工作区用2区
MOV R1,#ADDR1
MOV R6,#n CLR 01H ;01H=0通信成功,01H=1通信错误
CLR F0 ;F0=1表示数据组接收完成
MOV SCON,#90H;方式2,允许接收SM2=0
MOV PCON,#80H;波特率加倍
SETB ES SETB EA ;与MOV IE,#90H等价
…… ;CPU可进行其他工作
WAIT1: JBC F0,USEDATA ;数据组接收完成
SJMP WAIT1 ;
USEDATA: JNB 01H,OK ;转通信正常
MOV A,#01H ;01H=1通信错误
SJMP SENDMESOK: CLR ASENDMES:CLR 01H ;清标志
CLR ES ;禁止发送中断
MOV SBUF,A ;发送通信信息的共同入口WAIT2: JBC TI,OTHER SJMP WAIT2 ;OTHER: …… ;CPU进行的其它工作
MOV R1,#ADDR1 MOV R6,#n SJMP WAIT1SINT: CLR RI ;接收中断服务程序
MOV A,SBUF MOV @R1,A INC R1 DEC R6 JNB P,NOOP
;P为0转移
JNB RB8,ERR;P为1,RB8为0转错误处理
SJMP CON1NOOP: JNB RB8,CON1 ERR: SETB 01H ;置出错标志
CON1: CJNE R6,#00H,CONJ ;没收完继续
SETB F0 ;接收完成标志CONJ: RETI ;中断返回
END注意学习本题的编程方法: (1)发送程序中奇偶校验位的取法,传递方法。 (2)接收程序中在做奇偶校验时转移类指令的用法,程序结构。 (3)接收程序中计数寄存器R6递减方法。与发送程序的处理方法不同。7.4.3定时器T1溢出率的计算 串口方式1、3波特率可变,且与T1溢出率有关。串口方式1、3波特率的计算式如下:
(1)T1工作于方式0很少用,从略,可自学。
(2)T1工作于方式1
方式1为16位定时器,设T1的初值Z(16位)则T1的溢出率(m)为: (7-5)(7-4)
式中:NR为执行T1溢出到恢复初值的中断服务的周期数:NR=N1+N2
其中N1为CPU从响应中断到转入中断服务程序所需的周期数,一般N1=5;N2为执行为定时器重装初值的周期数,取N2=4。所以:NR=9。
(3)T1工作于方式2
方式2为自动恢复初值的8位定时器,设T1的初值Z(8位),则T1的溢出率(m)为: (7-6) 因为T1方式2不需要中断处理,所以NR=0。 通常,用于波特率发生器时,T1选用方式2较好。最重要的理由是它的自动重装特性,省去中断服务程序,节省了CPU的开销。只有对于非常低的波特率,定时器方式2不能用时,才选用定时器T1方式1。
【例7-3】波特率计算方法与误差分析。设串行口工作于方式1或方式3,波特率定为2400,T1工作于方式2系统fosc=6MHz。求T1的初值和波特率的误差。 解:综合(7-2)、(7-5)式,得 (7-7)
本例中:整理(7-7)式得
(7-8)
取SMOD=0得Z=249.49,由于Z只能取整数,若取Z=250时,波特率为
波特率相对误差为 同理若取Z=249则:波特率为2232,相对误差为误差过大,不易使用。实践表明:当两个串行通信设备之间的波特率误差超过2.5%时,串行通信将无法进行。
为此,取SMOD=1,计算得Z=242.98,取Z=243=F3H,波特率=2403.8,误差为0.16%,可满足精度要求。但误差不能完全消除。
彻底消除波特率误差的办法,选择单片机系统的fOSC,当其为1.8432整数或半整数频率均可以消除波特率非整数误差。11.0592MHz则为最常用的一种常用的频率,因为11.0592是1.8432的6倍,且与标准51最高频率(12MHz)最接近的一个。这样标准设备及PC常用的波特率在51机上都可无误差的产生出来。
为使用者提供方便。因此要学会波特率-定时器初值查表的方法。常用波特率列于表7-5中。
在学习串行通信时常见错误:混淆串行口工作方式和定时器工作方式。
【例7-4】两台51以串口方式1进行通信,约定波特率为9600。A机的focs为11.0592MHz,B机的focs为7.3728MHz,编写A机为发送方,B机为接收方,只进行一个字节数据通信的程序。 解:本例的目的是学习在51机的开发系统下实现通信的编程与操作过程。
第一步:设两机相距不远,不需要任何形式的调制与电平转换,直接用导线作为通信线路,如图7-11所示
第二步:确定定时器工作方式,计算定时器初值。作为波特率发生器用,用T1方式2。初值的计算如下:
A机的初值Z直接从表7-5中查出,为FDH(SMOD=0);B机的初值Z计算过程如下:将式(7-8)
中的2400改为9600并取SMOD=0得:
易知:取SMOD=1时,Z=256–4=252=FCH;在两个可取的值中,应尽量取SMOD=0的,其波特率因子大。
第三步:编写发送方参考程序如下:
ORG 0000H AJMP START ORG 0040HSTART: MOV SP,#5FH MOV TMOD,#20H ;T1方式2、定时
MOV TH1,#0FDH MOV TL1,#0FDH MOV SCON,#40H ;方式1,禁止接收SM2=0 MOV PCON,#00H ;波特率不加倍
SETB TR1 ;开启波特率发生器
MOV SBUF,#0AAHWAIT: JBC TI,STOP SJMP WAITSTOP: SJMP STOP END
第四步:COPY发送程序,稍加修改得接收方参考程序如下:
ORG 0000H AJMP START ORG 0040HSTART: MOV SP,#5FH MOV TMOD,#20H ;T1方式2、定时
MOV TH1,#0FEH MOV TL1,#0FEH MOV SCON,#50H ;方式1,允许接收
MOV PCON,#00H ;波特率不加倍
SETB TR1 ;开启波特率发生器WAIT: JBC RI,RECI SJMP WAITRECI: MOV A,SBUF SJMP $ END
第五步:分别在A、B两台开发机的PC机的编译器上,对这两个源程序进行编译、连接,通过后,进入调试界面;
第六步:若上述调试成功,A、B方交换程序,反向收/发,多数是成功的。若不然,仿真器的芯片可能有损。 再此基础上,将程序复杂化,如连续收/发多个字节试试,收益将会很大。
本章作业(建议) 习题7、7-1、7-2、7-3、7-4
7.4.4串行通信数据校验方法之二:累加和校验 累加和校验以组为单位进行,效率高
累加和校验的原理和工作过程如下:
数据传送时,发送方在数据发送前先逐一对每个数据进行累加求和。累加和可以是任意位,但一般采用8位,存放累加和的寄存器称为累加和寄存器。注意,在累加过程中溢出的部分自动丢弃,即累加和只保留和的低8位。在每组数据发送完后,发送方要接着将这组数据的累加发出去,以为接收方提供的校验依据。
接收方对每个接收的数据,也进行一次累加,形成累加和。当一组数据接收完后,还要再接收一个由发送方发来的累加和数据帧。将这个累加和数据与本机产生的累加和进行比较。若两者相等则可认为这组数据收、发正确,否则,收/发过程中至少存在一次错误。至于每组数据多少,根据双方制定的通信协议确定。
对于校验的结果,通信双方根据通信协议进行相应的处理。这里没有通用方法。
使用累加和校验应注意的问题:
(1)累加和校验不需要9位数据格式支持,即51机串口方式1、2、3都可进行累加和校验。
(2)并不是所有的实际通信都要使用校验,是否要进行数据校验。要根据通信双方的通信协议而定。
【例7-5】设通信双方51机的fosc均为11.0592MHz,双方约定:波特率9600,8位数据,采用累加和校验。编写程序实现如下工作: 通信任务:A机发,B机收N个数据(N≤256)。发送/接收双方的数据均在以0200H为首址的外部数据存储器的连续单元中。 通信协议:A机在发送数据之前先将数据块长度发给B机,接着发N个数据给B机。当数据全部发送完后,A机接收B机发回的累加和并进行校验,存储校验结论,等待主程序作决策,并结束本次通信过程。B机发送累加和后,立即结束本次通信过程。发送方程序清单:(考虑:NEQU0的意义?)
N EQU 0 ;发送数据数为256
ORG 0000H SJMP WORK ORG 0040H MOV SP,#6FH MOV TMOD,#20H;波特率设置
MOV TL1,#0FDH MOV TH1,#0FDH SETB TR1 ;启动波特率发生器 MOV SCON,#50H;方式1,REN=1 MOV PCON,#00H;串口初始化
LCALL SEND SJMP $SEND: MOV DPTR,#0200H;数据缓冲区首地址
MOV R6,#N ;数据长度
MOV R5,#00H ;累加和单元清0 MOV A,R6 MOV SBUF,A ;发送数据长度
ADD A,R5 MOV R5,A ;形成累加和并存储
ML4: JBC TI,ML5 ;等待发完数据长度帧
SJMP ML4ML5: MOVX A,@DPTR;读缓冲区数据
MOV SBUF,A ;发送
ADD A,R5 ;形成累加和并存储
MOV R5,A INC DPTR ;调整数据指针ML6: JBC TI,ML7 ;等待发完一字节
SJMP ML6ML7:DJNZ R6,ML5 ;发完否?
ML8:JBC RI,ML9 ;等待B机发累加和
SJMP ML8ML9:MOV A,SBUF ;得到B机的累加和
XRL A,R5 ;若A=0则通信成功
RET END其实Scom_data的值只要不等于i的初值就可以了!C语言的发送程序及汇编语言接收程序留给读者完成。7.5多机通信原理及系统设计
1.多机通信的物理基础 串行口方式2、3支持多机通信。对其控制集中SM2这个多机通信控制位的应用上。
SM2=1,则接收到的第9位数据(RB8)为0时,不启动接收中断标志RI(即保持RI=0),并且将接收到的前8位数据丢弃。RB8为1时,才将接收到的前8位数据送入SBUF,并置位RI。
当SM2=0时,则不论第9位数据为0或1,只要串行口收到有效数据帧,置位RI,并将前8位数据装入SBUF中。 其中RB8是SCON的一个位,当串行口工作在方式2和方式3时,为接收到的第9位数据,即发送方发送的第9位数据。
RB8是(TB8)的对应数据位。注意:作为奇偶校验位用,只是RB8的一个兼职工作,此时必须SM2=0。 SM2、RB8、TB8这三个控制位在收、发时所起的作用和相互关系,如表7-6所示。表7-6控制位SM2、RB8、TB8的功能及之间的关系2.
多机通信方式分类 多机通信分有主多机通信和多主通信两种系统。 有主多机通信系统,也称为主-从多机通信系统。 多主通信系统中,各计算机所处的地位相同,没有主-从之分。系统中每台计算机随时都可以启动一次通信过程。 主-从式多机通信系统构成如图7-12所示。
本书只讨论主-从通信技术。2.多机通信的管理方式 多机通信分主-从多机通信和无主多机通信(也称为多主通信)两种方式。3.51机构成的主-从系统通信的过程: (1)所有从机将SM2位置1,即从机处于监听状态。 (2)主机先发出一帧广播地址信息—8位地址,第9位为地址/数据信息标志位(TB8位为“1”或为“0”),该位为“1”表示为地址(命令)帧信息。 (3)从机收地址帧后,与本机的从地址比较,如地址相符,则将SM2位清0,同时将自己的从地址发回主机可选),以表示应答,并准备接收主机随后发来的所有信息;其他与地址不符的从机保持SM2=1不变,退出通信,它们将不会收到主机随后对指定从发出的数据,直到收到主机发出新的地址帧。 (4)主机收到从机的正确应答后(可选),进入本次通信过程。这里关键是主机要将TB8置为零(数据信息标志),这样只有被选中的从机可接收到主机的信息,而组内其他从机不受干扰,命令或数据全部发送完成后,即可结束本次通信过程。
(5)指定的从机接收命令或数据完成后,即可结束本次通信过程。注意:结束时,一定要置SM2再次置1,进入监听状态。否则,该从机从此再不能接收到主机的呼叫,从而造成整个通信系统的崩溃。
(6)重复步骤1~5,进行下一次通信过程。4.防止通信进入陷阱
为保证通信的可靠性,可在每个通信过程中用往复应答来保证。当从机不应答时,可多次广播呼叫。为防止系统进入等待死循环,通信可加限时控制,一旦通信超时,则应退出通信,返回主程序准备再次通信。7.5.3多机通信及编程举例
【例7-7】主-从方式多机通信,设系统中所有51机fosc=11.0592MHz。要求:通信波特率9600。模拟通信内容:每次通信主机先发一个字节的从机号(0~255),接着发一个字节的读或写命令。如主机发写命令,主机接着发第三个数据;如主机发读命令,主机则接收从机发回的一字节数据,并返回主程序。
解只有方式2、3支持多机通信。但要求波特率9600,所以只能选用方式?
参考主机程序:
ORG 0000H SJMP START ORG 0040HSTART: MOV SP,#60H
MOV TMOD,#20H MOV TH1,#0FDH MOV TL1,#0FDH MOV PCON,#00H
MOV SCON,#0C0H
;方式3 SETB REN SETB TR1 SETB TB8 ;准备发(地址)命令
MOV SBUF,B ;被呼叫的从机号存于B中WAIT1: JBC TI,CON1;等待发送完成
SJMP WAIT1CON1: CLR TB8
;发送命令
MOV A,R5 ;命令存于R5中,00H为写01H为读
MOV SBUF,AWAIT2: JBC TI,CON2 SJMP WAIT2CON2: CJNE A,#00H,READ;转读命令处理
MOV A,R6;要发送的数据存于R6中
MOV SBUF,AWAIT3: JBC TI,CON3 SJMP WAIT3CON3: SJMP STOPREAD: JBC RI,STOP1 SJMP READ STOP1: MOV R7,SBUF;接收从机的数据存于R7中STOP: SJMP STOP END
从机参考程序:
ORG 0000H SJMP START
ORG 0023H LJMP SCOM ORG 0050HSTART: MOV SP,#60H MOV R0,#01H;R0为从机号,设为1号
CLR F0
MOV TMOD,#20H MOV TH1,#0FDH MOV TL1,#0FDH MOV PCON,#00H
MOV SCON,#0E0H
;方式3,SM2=1(地址) SETB REN SETB ES SETB TR1 SETB EACHECK: JBC F0,STOP SJMP CHECKSTOP: SJMP CHECK ;调试程序用,再通信多次SCOM: CLR RI CLR ES MOV A,SBUF CLR C SUBB A,R0 JNZ CON4 ;不是本机,退出中断
CLR SM2
;是本机,准备接收命令WAIT2: JBC RI,CON2 SJMP WAIT2CON2: MOV A,SBUF JNZ READ ;不是写命令,转读处理WAIT3: JBC RI,CON3 SJMP WAIT3CON3: MOV R1,SBUF;(R1)为主机发给从机的内容
SJMP CON5READ: MOV SBUF,R1 WAIT5: JBC TI,CON5 SJMP WAIT5CON5: SETB F0CON4: SETB ES SETB SM2 RETI END
7.6RS-232-C接口标准
1RS-232-C接口标准
DB9型RS-232-C串行接口连接器如图7-13所示。各信号含义如下: (1)地线GND
(2)收/发数据端
RXD:串行数据接收,输入,空闲时为负电位(逻辑“1”);
TXD:串行数据发送,输出空闲时为负电位(逻辑“1”);
(3)联络(控制)信号
RTS:发送请求,输出。
CTS:清除发送,输入。
DTR:数据终端(DTE)就绪信号,输出。
DSR:数据设备(DCE)准备就绪信号,输入。
(4)调制解调器状态信号
RI:振玲指示。输出
CD:载波检测,输入。
RI、CD两信号是专为电话网设计的,只有利用调制解调器进行远程通信时才需要。2RS-232-C逻辑电平 在RS-232-C标准中,为保证数据可靠传送,均采用EIA电平。规定用-3~-15V表示逻辑1,+3~+15V表示逻辑0。-3V~+3V为过渡区,他保证即使信号线受到干扰,其信号的逻辑也不易发生变化。 此外,RS-232-C标准还规定发送端与接收端之间必须保证2V的噪声容限。
噪声容限定义:指发送端必须达到的逻辑电平的绝对值的下限与接收端识别输入逻辑所需绝对值下限之差。 RS-232-C接收下限为|-3|V,噪声容限为2V,则发送端下限绝对值为3V+2V=5V。也就是说在发送端下限绝对值为3V+2V=5V。即在发送端+5V~+15V表示逻辑0;-5V~-15V表示逻辑1。4RS-232-C设备与TTL/CMOS器件接口-电平转换
PC机的标准RS-232-C电气接口。采用EIA电平。在需要单片机与PC机或其他带有RS-232-C接口设备进行通信时,由于单片机串行口采用正逻辑的TTL电平,两者在电平幅度和逻辑意义上都不兼容,但帧格式在逻辑上完全相同,有互通条件。要实现TTL电平与EIA电平系统的通信,只需在它们之间加电平转换(翻译)环节。 RS-232-C与TTL之间电平转换常用MAX232系列专用芯片。 该系列芯片内置了电压倍增电路及负电源电路,所以集成度高,使用单+5V电源工作,只需外接5个容量为0.1~1μF的电容即可提供两路RS-232-C与TTL电平之间转换。由于以上的优秀品质,被广泛应用。该系列中典型芯片MAX232的内部结构及典型应用如图2-15所示。
从硬件上说,由于图7-15在传输线上加了电平转换器,从而实现了通信双方的电平匹配。而帧格式没有任何改变。这样,能在图7-11(直接用电线联接的通信双方)上实现通信功能的程序,不需做任何修改,可直接应用于图7-15系统上。将图7-15中的电平转换部分看成一个黑盒子或通信电路的一部分,转换电路的作用有点像处于两个不同语言人之间的翻译。
无论是单片机与单片、PC机与PC机,还是单片机与PC机的通信,波特率和帧格式一致是必须要保证的。
5.USB转串口电路
USB接口的出现,计算机上的232串口逐渐被USB接口取代,新型笔记本已没有RS-232-C的接口了。但RS-232-C已被工程人
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 民生监督业务培训课件
- 民法课件简单案例
- 民法学第二章课件
- 冰雪运动考试题库及答案
- 河南安全监管动态讲解
- 基层医护人员关系优化
- 民族资本主义经济课件
- 保教个人工作方案(模板)
- 新质生产力:科技与创新的融合
- 光棍节双十一活动方案
- 2024年POE项目投资建议书
- 智能网联汽车:第6章 智能网联汽车先进驾驶辅助技术
- 全麻术后苏醒延迟的预防及护理
- 腋窝入路腔镜甲状腺手术
- 设备维修保养风险评估与规避
- (2024年)传染病培训课件
- 博鳌BNCT硼中子治疗中心 环评报告
- TIMAAMM 003-2023 蒙医病证诊断疗效标准
- 非器质性失眠症的护理查房
- 《新学期“心”动力》心理主题班会
- 《基础写作教程》 课件全套 第1-11章 基础写作概论- 理论文体
评论
0/150
提交评论