资源描述
工程背景下的单片机原理及系统设计,Powerpoint制作:五邑大学信息学院课程主讲:王洪涛,工程背景下的单片机原理及系统设计,MCS-51系列单片机内部定时/计数器、中断系统及串行口I/O口的应用第十一讲内容提示5.8串行口及串行通信(续)5.9RS-232C接口标准5.11多个中断源同时开放时应注意的问题,工程背景下的单片机原理及系统设计,(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不能作为波特率发生器用。方式2的波特率固定为:(5-4)方式1、方式3波特率与定时器T1溢出率、SMOD位关系如下:(5-5),工程背景下的单片机原理及系统设计,5-5式分子中的SMOD是PCON的SMOD位。当SMOD位为1时,波特率是SMOD为0时的两倍。因此,PCON寄存器中的SMOD位被称为波特率倍增位。对方式1、2、3都成立。如前所述,波特率(这里等同于比特率)是每秒钟传输数据的倍数。在异步串行数据传输时,表面上看来双方的同步是靠波特率实现(移位)的。,工程背景下的单片机原理及系统设计,但为了降低误码率,提高通信的靠性,接收方若在每个数据位时间间隔中点(信号畸变最小处),将数据移位并锁存,可以克服因信号的畸变导致的通信错误。实现的上述目的一种方法是进行时间细分,如图5-34所示,在每传输1位的时间段内,插入16个等宽时钟脉冲。当接收方收检测到发送方的起始信号后,以延迟8个时钟脉冲后的时刻为同步参考点。之后每16个时钟脉冲移位并锁存数据,如图所示,这些作用点正好是每位信号的中点。我们将每传输一位数据的时钟脉冲个数称为波特率因子,图5-34的波特率因子=16。,工程背景下的单片机原理及系统设计,工程背景下的单片机原理及系统设计,方式1的发送在TI为0情况下(表示串行口发送控制电路处于空闲状态),任何写缓冲器SBUF指令(如MOVSBUF,A)均会触发串行发送过程:51串行口自动在8个数据位的前、后分别插入一个起始位和一个停止位,构成10位信息帧,按设定的波特率依次输出起始位、8个数据位(顺序为b0b7)和停止位。当8位数据发送结束后(即开始发送停止位)时,串行口自动将发送中断标志TI置1。TI标志可用来查询发送过程是否完成。在中断处于开放状态下,TI有效时,将导致串行中断。,工程背景下的单片机原理及系统设计,方式1的接收过程在接收中断标志RI为0(串行接收缓冲寄存器SBUF处于空闲)情况下,当REN位为1时,串行口处于接收状态。此时,串行口不断检测RXD引脚的电平状态(检测频率是移位脉冲的波特率因子倍),当发现RXD引脚由高电平变为低电平后,表明发送端开始发送起始位,便自动启动接收过程。按设定波特率顺序读出数据位和停止位。,工程背景下的单片机原理及系统设计,当接收完一帧信息(即接收到停止位)后,如果RI位为0,便将接收到的内容装入串行数据输入缓冲寄存器SBUF中,并将串行接收中断标志RI置1。因此RI可作为接收过程是否已完成查询标志用。在串口中断及总中断处于开放状态下,RI有效时将触发串行中断。值得注意是CPU响应串行中断后,不会自动清除RI或TI标志位,需要用指令如“CLR”等清除RI或TI标志。以便继续进行串口的收/发工作。,工程背景下的单片机原理及系统设计,方式2和方式3的帧数据格式与方式1的区别串行口方式2与方式3都是9位异步串行通信口,唯一区别是方式2的波特率固定为时钟频率的32或64分频,不可变。由于他的波特率与通用串行通信设备对不上,因此只用于51机之间的通信,方式2的波特率是所有方式中最高的,这是他的优点。方式3与方式1在波特率方面没有区别。区别在于帧格式上:方式2、方式3是9位数据格式。一帧信息为11位,由一位起始位、9位串行数据、一位停止位。,工程背景下的单片机原理及系统设计,发送方在方式2、方式3时,9位数据的构成与写入顺序为:必须先将第9位(用b8)表示,写入SCON的TB8位,他通常用于表示同帧中的字节数据(b0b7)的性质如:数据或命令等辨识信息。在双机通信(多机通信不适用)中,第9位数据也可作为帧数据的奇偶校验信息;第2步,将8位数据写入SBUF,注意:一但执行写SBUF命令,发送过程便被启动,除非TI为“1”。这就是为什么先写第9位数据的原因。由于方式3波特率可变,因此,串行口方式3比方式2应用范围更广。,工程背景下的单片机原理及系统设计,方式2、方式3中,接收的信息的第9位在SCON寄存器的RB8位中。8位数据仍在SBUF中。方式2、方式3是多机通信方式,在应用时要留意多机通信控制位SM2的含义。,工程背景下的单片机原理及系统设计,5.8.5双机通信及编程举例1.最简单的双机通信例子双机通信也称为点对点通信。是通信中最基本的形式。顾名思义,双机通信就是两台机的信息交换过程。本节我们只讨论单片机之间的双机通信问题,至于单片机与PC机之间的通信问题,将在本章的后续部分讨论。,工程背景下的单片机原理及系统设计,若两片51机相距很近,可以不需任何调制与电平转换而直接互联,其通信电路如图5-35所示。我们可将这种联接方式与打电话(双方耳朵与听筒的交叉)进行对比,更容易理解。就象打电话双方必须用双方都能懂的语言交流一样。注意:图中的地线是用于统一双方的“0”参考电位的。方式1、2、3都能进行双机通信,但要注意:在点对点通信时,为避免复杂操作,双方都要将SM2置“0”。,工程背景下的单片机原理及系统设计,工程背景下的单片机原理及系统设计,【例5-16】两个8031系统进行最高速率通信。要求使用串口方式2,8031A作为发送方,不使用串口中断;B机接收,使用串口中断。设两机的focs相同,发送方只将一个字节数据,如0AAH发向B机便结束。分析:本例是最简单、最基本的一个通信程序了。编写通信程序要全盘考虑双方的硬件设置(主要是工作方式、focs等),以实现波特率匹配;还要制定通信协议(发送信息的识别方法、数据有含义的解释方法、通信数据的个数、一次通信过程的结束条件、要不要校验、用什么校验方式等)。,工程背景下的单片机原理及系统设计,本例中硬件条件:方式2、focs相等;协议简单:收/发一个数据,不要求校验和解释。解根据题目要求,发送方参考程序如下:ORG0000HAJMPSTARTORG0040H,工程背景下的单片机原理及系统设计,START:MOVSP,#5FHMOVSCON,#90H;方式2,允许接收SM2=0MOVPCON,#80H;波特率加倍,最高速率SETPSW.4CLRPSW.3;工作区用2区MOVSBUF,#0AAHWAIT2:JBCTI,STOPSJMPWAIT2STOP:SJMPSTOPEND,工程背景下的单片机原理及系统设计,接收方参考程序如下:ORG0000HAJMPSTARTORG0023HLJMPSINT;串行中断入口ORG0040HSTART:MOVSCON,#90H;方式2,允许接收SM2=0MOVPCON,#80H;波特率加倍MOVIE,#90H;串口及总中断开放CLRF0,工程背景下的单片机原理及系统设计,SETBPSW.4CLRPSW.3;工作区用2区WAIT1:JBCF0,TRDATA;F0由中断服务程序置位SJMPWAIT1;置位或清零TRDATA:CLRES;关串口中断,此为甲机的程序MOVA,SBUFSJMP$SINT:CLRRISETBF0;置成功接收标志,工程背景下的单片机原理及系统设计,RETI;中断返回END训练题5-28教材中【例5-15】中若focs=6MHz,通信的波特率为多少?又串口方式2对通信双方的focs有何要求?,工程背景下的单片机原理及系统设计,2.串行通信数据校验方法之一:奇偶校验受串行通信的距离、通信速率、信息量、通信线路、环境条件等因素的影响,可能会出现数据传输错误问题。为保证通信的正确性,计算机中采用对通信数据的校对方法,确认数据传输的正确性。称为校验。实际上,校验是手段,纠错是目的。我们将这种利用数据的奇偶性查错的方法称为奇偶校验法。这是本书讨论的第一种校验法。,工程背景下的单片机原理及系统设计,奇偶校验的实现方法如下:发送方将所发送的每一帧数据的奇偶状态位,作为发送数据的第九位数据写入SCON的TB8位,将字节数据写入发送缓冲器SBUF中后,帧数据开始发出。接收方接收的每一帧数据,第九位数据存在SCON的RB8位中,字节数据在缓冲器SBUF中,接收方将SBUF中数据的奇偶性与RB8进行比较,两者相等则确定此帧数据通信正确无误,否则,这帧数据必然有错误。对于校验的结果,通信双方根据通信协议进行相应的处理,这里没有通用方法。,工程背景下的单片机原理及系统设计,使用奇偶校验应注意的问题:(1)51机只有在串口方式2、3时(9位数据)且SM2位必须为“0”才有条件进行奇偶校验;(2)为测得数据的奇偶状态,用MOVA,SUBF指令最方便;(3)并不是所有的通信都要使用校验,更不是都要用奇偶校验,校验与否通信双方要在通信协议中确定。反映在习题中,要认真审题,要求校验,才能写校验的程序部分,避免犯画蛇添足的错误。,工程背景下的单片机原理及系统设计,【例5-17】两个8031系统进行双机通信。要求使用串口方式2、奇偶校验、使用工作寄存器组2。8031A作为发送方,连续发送n个字节(片内RAM足够使用),B机接收。设两机的focs相同。只要校验的结果分析:本例是奇偶校验应用问题。编写双机通信程序,延用【例5-15】的方法,再将奇偶校验的内容加进去。发/收程序的过程是往复式的,他们结构基本相同。因此,先写发送程序,再修改为接收程序就容易多了。本例的特点是奇偶校验和多帧数据的收/发。另外还采用发送中断编程,注意体会。,工程背景下的单片机原理及系统设计,发送方参考程序如下:ORG0000HAJMPSTARTORG0023HLJMPSINT;串行中断入口ORG0040HSTART:MOVSP,#5FHMOVR7,#nCLR01H;01H=0通信成功,=1通信错误CLRF0;F0=1启动发送,工程背景下的单片机原理及系统设计,MOVSCON,#80H;方式2,不允许接收SM2=0MOVPCON,#80H;波特率加速MOVIE,#90H;串口及总中断SETBPSW.4CLRPSW.3;工作区用2区WAIT1:JBCF0,TRDATA;F0由过程设置SJMPWAIT1;置位或清零TRDATA:MOVA,R0MOVC,P;取奇偶位MOVTB8,C;装入TB8作为第9位数据,工程背景下的单片机原理及系统设计,MOVSBUF,AINCR0;CPU可进行其他工作WAIT2:JBC01H,AGAINSJMPWAIT2AGAIN:DJNZR7,TRDATA;R7为发送字节数MOVR7,#n;重复初值LJPMWAIT1SINT:CLRTISETB01H,工程背景下的单片机原理及系统设计,RETIEND接收方参考程序如下:ORG0000HAJMPSTARTORG0023HLJMPSINT;串行中断入口ORG0040HSTART:MOVSP,#5FH,工程背景下的单片机原理及系统设计,MOVR6,#nCLR01H;01H=0成功,=1错误CLRF0;F0=1一次接收完成MOVSCON,#90H;允许接收SM2=0MOVPCON,#80H;波特率加速MOVIE,#90H;串口及总中断SETBPSW.4CLRPSW.3;工作区用2区;CPU可进行其他工作,工程背景下的单片机原理及系统设计,WAIT1:JBCF0,USEDATA;F0数据成功接收SJMPWAIT1;置位或清零USEDATA:JBC01H,DELERR;转通信出错处理;通信正常处理SJMPOTHERDELERR:;通信出错处理程序部分OTHER:;CPU进行的其他工作MOVR7,#nSJMPWAIT1,工程背景下的单片机原理及系统设计,SINT:CLRRI;接收中断服务程序MOVA,SBUFMOVR1,AINCR0DECR6JNBP,NOP;P为0转移JNBRB8,ERR;P为1,RB8为0转错误处理SJMPCON1NOP:JNBRB8,CON1ERR:ESTB01H;置出错标志,工程背景下的单片机原理及系统设计,CON1:CJNER6,#00H,CONJ;没收完继续SETBF0;接收完成标志CONJ:RETI;中断返回END,工程背景下的单片机原理及系统设计,小结:整个通信过程收、发数据的时刻是随机的,但多数情况下,发送数据的时机都是在CPU的掌控之下的,即什么情况下该发什么数据都在程序中安排好的。在这种情况下,常用查询方式编写数据发送程序部分,而不用中断方式编程,效果更好。至于数据接收的时刻,则完全是随机的,用串口中断来实时响应“数据到”事件。由于只在数据接收时开放了串口中断,因此中断服务程序只需对接收数据进行处理。串口接收中断的使用方法也应视具体通信任务而定,工程背景下的单片机原理及系统设计,训练题5-29若教材中【例5-17】中,n=256,例题的计数器能装得下吗?若认为装得下,n的初取值为何?若认为装不下,修改程序结构。注意要用片外RAM!,工程背景下的单片机原理及系统设计,3.定时器T1溢出率的计算串口方式1、3波特率可变,且与T1定时器T1溢出率有关。串口方式1、3波特率的计算方法由式(5-5)给出:(1)T1工作于方式0很少用,从略,可自学。(2)T1工作于方式1方式1为16位定时器,设T1的初值Z(16位)则T1的溢出率(m)为:(5-6),工程背景下的单片机原理及系统设计,式中:NR为执行T1溢出到恢复初值的中断服务的周期数:NR=N1+N2其中N1为CPU从响应中断到转入中断服务程序所需的周期数,一般N1=5;N2为执行为定时器重装初值的周期数,取N2=4。所以:NR=9。,工程背景下的单片机原理及系统设计,(3)T1工作于方式2方式2为自动恢复初值的8位定时器,设T1的初值Z(8位),则T1的溢出率(m)为:(5-7)因为T1方式2不需要中断处理,所以NR=0。通常,用于波特率发生器时,T1选用方式2较好。最重要的理由是他的自动重装特性,省去中断服务程序,节省了CPU的开销。只有对于非常低的波特率,定时器方式2不能用时,才选用定时器T1方式1。,工程背景下的单片机原理及系统设计,【例5-18】波特率计算方法与误差分析。设串行口工作于方式1或方式3,波特率定为2400,T1工作于方式2系统fosc=6MHz。求T1的初值和波特率的误差解:综合(5-5)、(5-6)式,得(5-8)本例中:整理(5-8)式得(5-9),工程背景下的单片机原理及系统设计,取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整数或半整数频率均可以消除波特率非整数误差,当Z出现小数时,可调整SMOD使之为整数(1.8432的有理数倍频率也可以),11.0592MHz则为最常用的一种常用的频率,因为11.0592是1.8432的6倍,且与标准51最高频率(12MHz)最接近的一个。这样标准设备及PC常用的波特率在51机上都可无误差的产生出来。,工程背景下的单片机原理及系统设计,为使用者提供方便。因此要学会波特率-定时器初值查表的方法。常用波特率列于表5-6中。,工程背景下的单片机原理及系统设计,工程背景下的单片机原理及系统设计,工程背景下的单片机原理及系统设计,在学习串行通信时常见错误:混淆串行口工作方式和定时器工作方式。【例5-19】两台51以串口方式1进行通信,约定波特率为9600。A机的focs为11.0592MHz,B机的focs为7.3728MHz,编写A机为发送方,B机为接收方,只进行一个字节数据通信的程序。解:本例的目的是学习在51机的开发系统下实现通信的编程与操作过程。第一步:设两机相距不远,不需要任何形式的调制与电平转换,直接用导线作为通信线路,如图5-32所示,工程背景下的单片机原理及系统设计,第二步:确定定时器工作方式,计算定时器初值。作为波特率发生器用,T1最好用的就是方式2。下面则是初值的计算问题:A机的初值Z可直接从表5-6中查出为FDH(SMOD=0);A机的初值Z计算过程如下:将式(5-9),中的2400改为9600并取SMOD=0得,工程背景下的单片机原理及系统设计,易知:取SMOD=1时,Z=2564=252=FCH;在两个可取的初值中,应尽量取SMOD=0的,因为他的波特率因子大。第三步:编写发送方参考程序如下:ORG0000HAJMPSTARTORG0040HSTART:MOVSP,#5FHMOVSMOD,#20H;T1方式2、定时MOVTH1,#0FDH,工程背景下的单片机原理及系统设计,MOVTL1,#0FDHMOVSCON,#40H;方式1,禁止接收SM2=0MOVPCON,#00H;波特率不加倍SETBTR1;开启波特率发生器MOVSBUF,#0AAHWAIT:JBCTI,STOPSJMPWAITSTOP:SJMPSTOPEND,工程背景下的单片机原理及系统设计,第四步:COPY发送程序,稍加修改得接收方参考程序如下:ORG0000HAJMPSTARTORG0040HSTART:MOVSP,#5FHMOVSMOD,#20H;T1方式2、定时MOVTH1,#0FEHMOVTL1,#0FEH,工程背景下的单片机原理及系统设计,MOVSCON,#50H;方式1,允许接收MOVPCON,#00H;波特率不加倍SETBTR1;开启波特率发生器WAIT:JBCRI,RECISJMPWAITRECI:MOVA,SBUFSJMP$END,工程背景下的单片机原理及系统设计,第五步:分别在A、B两台开发机的PC机的编译器上,对这两个源程序进行编译、连接,通过后,进入调试界面;若上述调试成功,A、B方交换程序,反向收/发,多数是成功的。若不然,仿真器的芯片可能有损。再此基础上,将程序复杂化,如连续收/发多个字节试试,收益将会很大。,工程背景下的单片机原理及系统设计,4.串行通信数据校验方法之二:累加和校验与奇偶不同,累加和校验以组为单位进行,效率高累加和校验的原理和工作过程如下:数据传送时,发送方在数据发送前先逐一对每个数据进行累加求和。累加和可以是任意位,但一般采用8位,存放累加和的寄存器称为累加和寄存器。注意,在累加过程中溢出的部分自动丢弃,即累加和只保留和的低8位。在每组数据发送完后,发送方要接着将这组数据的累加发出去,以为接收方提供的校验依据。,工程背景下的单片机原理及系统设计,接收方每次接收一个数据,进行一次累加,形成累加和。当一组数据接收完后,还要再接收一个由发送方发来的累加和数据帧。将这个累加和数据与本机产生的累加和进行比较。若两者相等则可认为这组数据收、发正确,否则,收/发过程中至少存在一次错误。至于每组数据多少,根据双方制定的通信协议确定。对于校验的结果,通信双方根据通信协议进行相应的处理。这里没有通用方法。使用累加和校验应注意的问题:累加和校验不需要9位数据格式支持,即51机串口方式1、2、3都可进行累加和校验;并不是所有的实际通信都要使用校验,是否要进行数据校验。要根据通信双方的通信协议而定。,工程背景下的单片机原理及系统设计,【例5-20】设通信双方51机的fosc均为11.0592MHz,双方约定:波特率9600,8位数据,采用累加和校验。编写程序实现如下工作:A机发送:将外部数据存储器4000H42FF单元的内容发送至B机。通信协议:A机在发送之前先将数据块长度发给B机,若B机接收正确,应答00H,否则,回答其他任意字节数据作应答后,重新接收。以后每发完256字节(不足256时当计数器低位字节为0时),向B机发送一个累加校验和。当数据全部发送完后,若B机接收正确,应答00H,否则,应答其他数据,准备重新接收。主机收到正确应答后,则结束本次通信过程,否则重发数据直到成功。,工程背景下的单片机原理及系统设计,发送方子程序清单:TRT:MOVTMOD,#20H;波特率设置MOVTL1,#0FDHMOVTH1,#0FDHSETBTR1MOVSCON,#50H;方式1,REN=1MOVPCON,#00H;串口初始化,工程背景下的单片机原理及系统设计,RPT:MOVDPTR,#4000HMOVR6,#NUMLOWHMOVR7,#NUMHIHMOVR5,#00H;地址及长度计数器MOVSBUF,R6MOVA,R5ADDA,R6MOVR5,A;形成累加和送R5ML0:JBCTI,ML1SJMPML0,工程背景下的单片机原理及系统设计,ML1:MOVSBUF,R7;发送长度高8位MOVA,R5ADDA,R7MOVR5,A;形成累加和送R5ML2:JBCTI,ML3SJMPML2ML3:MOVSBUF,R5;发累加和后清零MOVR5,#00HML4:JBCTI,ML5SJMPML4,工程背景下的单片机原理及系统设计,ML5:JBCRI,ML6;等B机回答SJMPML5ML6:MOVA,SBUFJZML7;正确转ML7LJMPPRT;不正确重发ML7:CJNER6,#00H,CONWOLJMPML9;计数低位为0转CONWO:DECR6MOVXA,DPTR;读数据写入BUFMOVSBUF,A,工程背景下的单片机原理及系统设计,ADDA,R5;形成累加和MOVR5,AINCDPTRML8:JBCTI,ML90;等待发完一字节SJMPML8ML90:LJMPML7ML9:CJNER7,#00H,ML14;发完?否!只发了一页转MOVSBUF,R5;完成,发最后一个累加和MOVR5,#00H,工程背景下的单片机原理及系统设计,ML10:JBCTI,ML11SJMPML10ML11:JBCRI,ML12;等B机回答SJMPML11ML12:MOVA,SBUFJZML13;正确返回LJMPRPT;错重发ML13:RETML14:DECR7MOVSBUF,R5;发校验和,工程背景下的单片机原理及系统设计,MOVR5,#00HML15:JBCTI,CONWO;全部字节没发完继续SJMPML15本题目的限制条件为不能发0个数据,因此,在调用此程序时,要判断发送数是否为“0”。B机接收程序留作习题来完成。【例5-20】用C语言编写【例5-19】的接收方程序。(自学),工程背景下的单片机原理及系统设计,训练题5-33用汇编语言编写教材中【例5-20】的接收方程序。,工程背景下的单片机原理及系统设计,【例5-22】串行口工作方式1及通信协议在本教材工程实例中的应用。通信在实际中,一定要有通信协议,哪怕是最简单的。本工程只涉及应用协议部分。本工程系统中键盘显示模块(图3-13)接收键盘命令,通过串口发送到检测控制模块。我们将系统任务简化为:检测控制模块只有上、下、左、右及工作参数和工作6个键。前4个命令的用于加工机械与工件的定位(微调),工作参数则是工件的加工信息(多字节,其他命令为单字命令),在收到工作命令后,便进行一个工件的加工,如此反复。,工程背景下的单片机原理及系统设计,通信协议要对每个命令进行编码,键盘显示模块每发一个命令要求检测控制模块校验并应答,如应答不正确,则键盘显示模块将重发此命令。对命令的编码越自然越好。由于每个键都有对应的键值,所以上、下、左、右4个命令就用其键值编码,参数和工作用键值以外的任意数表示。本系统采用灵活的校验方法,其实是累加和的变通编程通信程序时,先编写键盘显示模块这部分的,键盘响应部分的程序与【例5-13】一样,在本例中就只写通信部分。其主体结构如下:,工程背景下的单片机原理及系统设计,voidsi_send_data(uchars_data)SBUF=s_data;while(TI!=1);TI=0;,工程背景下的单片机原理及系统设计,voidrepeak(void)/*限时等待串口回答函数*/delay_times=6000;while(RI=0)delay_times-=1;DelayX1ms(1);if(delay_times=0)break;,工程背景下的单片机原理及系统设计,Main()/*主程序部分,同接收程序*/TMOD=0 x21;/*定时器0方式1,定时器1方式2*/TL1=0 xfd;/*置初值*/TH1=0 xfd;PCON=0 x80;/*PCON=0 x80,波特率19.2K*/SCON=0 x50;/*串行口为方式1*/TR1=1;IT0=1;IT1=1;IE=0 x07;/*开中断,允许INT0,INT1,T0中断*/*主程序其他部分*/,工程背景下的单片机原理及系统设计,STEP77:while(INTM_MARK=0);/*见例5-13*/if(INTM_MARK=0 x01)/*RIGHT键*/si_send_data(0 x01);if(INTM_MARK=0 x07)/*LEFT键*/si_send_data(0 x07);if(INTM_MARK=0 x04)/*UP键*/si_send_data(0 x04);if(INTM_MARK=0 x09)/*DOWN键*/si_send_data(0 x79);if(INTM_MARK=0 x02)/*R键,确定*/gotoR_key;INTM_MARK=0;gotoSTEP77;,工程背景下的单片机原理及系统设计,R_key:si_send_data(0 x77);/*77H为工作参数编码*/Ep_Use_Data19=0;for(i=7;i13;i+)/*发送6个数*/SBUF=Ep_Use_Datai;Ep_Use_Data19+=Ep_Use_Datai;/*形成累加和*/while(TI!=1);TI=0;,工程背景下的单片机原理及系统设计,repeak();/*等待时间为6秒*/if(RI=1)RI=0;si_re_data=SBUF;if(si_re_data!=Ep_Use_Data19)/*累加和不对,重发*/gotoR_key;elsegotoSTEP9;,工程背景下的单片机原理及系统设计,STEP9:si_send_data(0 xaa);/*AAH为工作编码*/repeak();/*等待时间为6秒*/if(RI=1)RI=0;si_re_data=SBUF;if(si_re_data!=Ep_Use_Data19)/*累加和不对,重发*/gotoWAIT;elsegotoSTEP9;,工程背景下的单片机原理及系统设计,WAIT:while(RI!=1);RI=0;si_re_data=SBUF;if(si_re_data!=0 x92)/*0 x92为加工完成码*/gotoDETR;/*转应答不对处理*/gotoR_key;/*重复加工*/*主程序其他部分*/,工程背景下的单片机原理及系统设计,编写检测控制模块程序时,第一步先做好程序框架如下:#defineON0 xaavoids_int(void)interrupt4/*单片机串口中断原型*/status4=1;RI=0;/*清中断标志*/rece_count=SBUF;,工程背景下的单片机原理及系统设计,while(1)ES=1;EA=1;if(status7=1)/*status7为系统重新工作命令标志*/break;while(status4=1)status4=0;switch(rece_count),工程背景下的单片机原理及系统设计,case0 x01:/*RIGHT微调一个单位*/;break;case0 x07:/*LEFT微调一个单位*/;break;case0 x04:/*UP键*/;break;,工程背景下的单片机原理及系统设计,case0 x09:/*DOWN键*/;break;case0 x02:/*R键后才可进行加工*/;break;case0 x77:/*加工参数键*/;break;,工程背景下的单片机原理及系统设计,case0 x77:/*加工指令键*/for(i=0;i6;i+)/*接收加工参数*/while(RI=0);RI=0;OpDatai=SBUF;OpData7+=OpDatai;si_send_data(OpData7);/*发送累加和*/;break;,工程背景下的单片机原理及系统设计,caseON:/*0 xaa加工命令*/*执行加工命令并完成*/ES=0;SBUF=0 x92;/*通报加工完成*/while(TI!=1);TI=0;ES=1;break;,工程背景下的单片机原理及系统设计,5.8.6多机通信原理及系统设计1.51机多机通信的物理基础串行口方式2、3支持多机通信。对其控制集中在SCON的SM2位上。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位数据,工程背景下的单片机原理及系统设计,(TB8)的对应数据位。注意:作为奇偶校验位用,只是RB8的一个兼职工作。2.多机通信的分类多机通信分有主多机通信和多机通信两种系统。有主多机通信系统,也称为主-从多机通信系统。与主-从多机通信系统相比较,无主多机通信系统中,各计算机所处的地位相同,没有主-从之分。系统中每台计算机随时都可以启动一次通信过程。主-从式多机通信系统构成如图5-36所示。本书只讨论主-从通信技术。,工程背景下的单片机原理及系统设计,图5-36,工程背景下的单片机原理及系统设计,3.51机构成的主-从系统通信的步骤:首先置所有从机SM2位为1,即从机处于监听状态主机先发出一帧广播地址信息8位地址,第9位为地址/数据信息标志位(主机通过置TB8位为“1”或为“0”来实现),该位为“1”表示为地址(命令)帧信息;从机收地址帧后,与本机的从地址比较,如地址相符,则将SM2位清0,同时将自己的从地址发回主机(可选),以表示应答(注意,从机发送内容一定为数据,即从机的TB8位应恒为“0”),并准备接收主机随后发来的,工程背景下的单片机原理及系统设计,所有信息;其他与地址不符的从机保持SM2=1不变,退出通信,他们将不会收到主机随后对指定从发出的数据,直到收到主机发出新的地址帧。主机收到从机的正确应答后(可选),进入本次通信过程。这里关键是主机要将TB8置为零(数据信息标志),这样只有被选中的从机可接收到主机的信息,而组内其他从机不受干扰,命令或数据全部发送完成后,即可结束本次通信过程。,工程背景下的单片机原理及系统设计,指定的从机接收命令或数据完成后,即可结束本次通信过程。注意:结束时,一定要置SM2为1,进入监听状态。否则,该从机从此再不能接收到主机的呼叫,而在主机给其他从机发送数据信息时,将给出错误应答,从而造成整个通信系统的崩溃。重复步骤15,进行下一次通信过程。4.由51机构成的主-从系统通信协议为保证通信的可靠性,可在每个通信过程中用往复应答来保证。当从机不应答时,可多次广播呼叫,另一方面为防止系统进入等待死循环,通信可加限时控制,一旦通信超时,则应退出通信,返回主程序准备再次通信。,工程背景下的单片机原理及系统设计,5.8.7多机通信及编程举例【例5-23】主-从方式多机通信,设系统中所有51机fosc=11.0592MHz。要求:通信波特率9600。模拟通信内容:每次通信主机发一个字节的从机号(0255),接着发一个字节的读或写命令。如主机发写命令,主机接着发第三个数据;如主机发读命令,主机则接收从机发回的一字节数据,并返回主程序。从机接收到主机第一字节后,与自己的从机号比较,两者相等则从监听转为接收方式,完成本次通信后,从机回到监听方式并返回主程序;其他从机直接返回主程序。解只有方式2、3支持多机通信。但要求波特率9600,所以只能选用方式?,工程背景下的单片机原理及系统设计,参考主机程序:ORG0000HSJMPSTARTORG0040HSTART:MOVSP,#60HMOVTMOD,#20HMOVTH1,#0FDHMOVTL1,#0FDHMOVPCON,#00H,工程背景下的单片机原理及系统设计,MOVSCON,#0C0H;方式3SETBRENSETBTR1SETBTB8;准备发(地址)命令MOVSBUF,B;被呼叫的从机号存于B中WAIT1:JBCTI,CON1;等待发送完成SJMPWAIT1CON1:CLRTB8;发送命令MOVA,R5;命令存于R5中,00H为写01H为读MOVSBUF,A,工程背景下的单片机原理及系统设计,WAIT2:JBCTI,CON2SJMPWAIT2CON2:CJNEA,#00H,READ;转读命令处理MOVA,R6;要发送的数据存于R6中MOVSBUF,AWAIT3:JBCTI,CON3SJMPWAIT3CON3:SJMPSTOPREAD:JBCRI,STOP1SJMPREAD,工程背景下的单片机原理及系统设计,STOP1:MOVR7,SBUF;接收从机的数据存于R7中STOP:SJMPSTOPEND从机参考程序:ORG0000HSJMPSTARTORG0023HLJMPSCOMORG0050H,工程背景下的单片机原理及系统设计,START:MOVSP,#60HMOVR0,#01H;R0为从机号,设为1号CLRF0MOVTMOD,#20HMOVTH1,#0FDHMOVTL1,#0FDHMOVPCON,#00HMOVSCON,#0E0H;方式3,SM2=1(地址)SETBRENSETBES,工程背景下的单片机原理及系统设计,SETBTR1SETBEACHECK:JBCF0,STOPSJMPCHECKSTOP:SJMPCHECK;调试程序用,再通信多次SCOM:CLRRICLREAMOVA,SBUFSUBBA,R0JNZCON4;不是本机,退出中断,工程背景下的单片机原理及系统设计,CLRSM2;是本机,准备接收命令WAIT2:JBCRI,CON2SJMPWAIT2CON2:MOVA,SBUFJNZREAD;不是写命令,转读处理WAIT3:JBCRI,CON3SJMPWAIT3CON3:MOVR1,SBUF;(R1)为从机发给主机的内容SJMPCON4,工程背景下的单片机原理及系统设计,READ:MOVSBUF,R1WAIT5:JBCTI,CON5SJMPWAIT5CON5:SETBF0CON4:SETBEASETBSM2RETIEND,工程背景下的单片机原理及系统设计,5.9RS-232-C接口标准5.9.1RS-232-C接口标准DB9型RS-232-C串行接口连接器如图5-37所示。各信号含义如下:地线GND收/发数据端RXD:串行数据接收,输入,空闲时为负电位(逻辑“1”);TXD:串行数据发送,输出空闲时为负电位(逻辑“1”);,工程背景下的单片机原理及系统设计,工程背景下的单片机原理及系统设计,联络(控制)信号RTS:发送请求,输出。当DTE准备好要向DCE发送数据时,向接收方(DCE)发送的信号。CTS:清除发送,输入。当DCE接收到DTE的RTS请示信号后,如果准备好接收数据,就向DTE发送清除发送信号。DTR:数据终端(DTE)就绪信号,输出。当DTE要与DCE通信时,则发送此信号,在DTR的触发下,DCE与通信线相连,并且由DTR有效来保持这种连接。DTR是DCE设备的主控信号;,工程背景下的单片机原理及系统设计,DSR:数据设备(DCE)准备就绪信号,输入,当DCE收到DTR信号后,完成自身线路的连接后,就向DTE发出数据设备就绪信号;以上四个信号对数据传输起着控制作用。事实上,只有当以下条件满足时,DTE才向DCE发送数据:DTR有效,为正电位;DSR有效,为正电位;RTS有效,为正电位;CTS有效,为正电位;,工程背景下的单片机原理及系统设计,调制解调器状态信号RI:振玲指示;CD:载波检测,输入。当调制解调器收到远程载波信号后,如果准备好与远程主机交换数据,就向数据终端(DTE)发出载波检测信号;RI、CD两信号是专为电话网设计的,只有利用调制解调器进行远程通信时才需要。,工程背景下的单片机原理及系统设计,5.9.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。5.9.3RS-232-C标准的电气连接方式RS-232-C标准中,采用如图5-35所示的非平衡的连接方式。所谓非平衡的连接,就是每条信号线只有一条连线。缺点是信道噪声会叠加在信号上并全部反映到接收器中,这会加大通信的误码率;优点是降低了通信成本,在短距离通信中(RS-232-C标准中规定15米)常用。,工程背景下的单片机原理及系统设计,工程背景下的单片机原理及系统设计,5.9.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.11F的电容即可提供两路RS-232-C与TTL电平之间转换通道,由于以上的优秀品质,被广泛应用。该系列中典型芯片MAX232的内部结构及典型应用如图5-39所示。,工程背景下的单片机原理及系统设计,工程背景下的单片机原理及系统设计,在实际应用系统中,可以使用RS-232-C中的4个联络(控制)信号,通过硬件握手方式,进一步保证通信质量,但这会增加硬件成本(单片机方需增加I/O、还要增加电平转换通道数量),特别是长距离时;也可以通过协议以软件握手的方式,一样可保证通信的可靠性。到底应如何看图5-39与图5-35的区别?从硬件上看,图5-39由于在传输线上加入电平转换器,,工程背景下的单片机原理及系统设计,实现了通信双方的电平匹配,从帧的数据流格式上看,通信双方都没做任何改变,换句话说,如果一个不懂硬件的编程者,他在调试过单片机与单片机、PC机与PC机(不用硬件握手)的点对点通信后,在硬件工程师连好图5-39的电路后,通信双方可分别使用单片机和PC机的(导线互联)通信程序,不需做任何修改,就能进行双机通信了。对不懂硬件的编程者来说,可将图5-39中的电平转换部分看成一个黑盒子,或更明显一点,把他看成通信电路的一部分,只是这一部分电路(或线路)为通信实现了信号的硬件转换与对接而已。,工程背景下的单片机原理及系统设计,无论是单片机与单片、PC机与PC机,还是单片机与PC机的通信,波特率和帧格式一致是必须要保证的。单片机的通信程序与我们上面讨论的完全相同。至于PC机的异步串口通信编程,与单片机编程原理相同,只是工作平台不同。要注意的是:波特率、通信方式(决定帧格式),除此之外双方的协议要明确,如校验方式等。,工程背景下的单片机原理及系统设计,5.11多个中断源同时开放时应注意的问题实际的单片机应用系统,一般都将单片机片内资源(这里讲的是外部中断、定时计数器、串行口)都用起来了,有时甚至对外部中断源、定时计数器还要采用复用技术扩展,才能满足系统对资源的需求。本书中工程实例还不仅如此,由于设计采用了STC系列单片机,在检测控制模块中还用到了外部中断2和外部中断3及定时计数器T2。他们中的多数都采用了中断方式。现在的问题是:在使用多个中断源的系统中,如何控制他们有条不紊地、正确地为CPU提供消息(中断请求信号),为系统可靠运行当好CPU的服务员(秘书)。,工程背景下的单片机原理及系统设计,要控制好多个中断系统,关键要对中断的整个过程有全面的理解。把握好对中断源的中断开放控制。下面对多个中断源同时开放的技术问题进行讨论。第一种情况,系统中各中断源的中断请求事件独立。即系统正常运行时,与中断相关的外部及内部事件没有交叉的可能。例如,外部中断源、定时计数器、串口中断同时开放,他们中断服务程序中不涉及其他中断源的控制,因此各个中断是独立的,永远不会相互影响。这种情况的系统没有太多的控制技术问题。,工程背景下的单片机原理及系统设计,第二种情况,系统中几个中断源的中断请求事件不独立,有某种的关联或交叉。如本书工程实例中,检测控制板。参考图3-34,系统在X轴上运动到指定点这一过程实现过程中,首先要开放外部中断0,找到参考点后,一定要关闭外部中断0,开放定时器T0计数中断,当来自长光尺的计数脉冲使T0生产溢出时,程序停止步进电机,关闭T0中断,完成定位任务。,工程背景下的单片机原理及系统设计,在CPU等待T0中断的过程中,如果没有关闭外部中断0,则在其间必须发生多次外部中断0的中断,而这些中断是无任何意义的,只会增加CPU的负担。对这种事件交叉的系统,要对中断开放与禁止进行适时的控制,避免无用的事件引发系统的运行错误。在本书中,列举了很多有条件开放或关闭中断的例子,其目的就是告诫读者,中断源的中断开放和禁止,是实际工程序中常用的技术。,工程背景下的单片机原理及系统设计,下面的问题更为重要:禁止了相互交叉而无意义事件对应的中断,但不能禁止其中断请求标志,同第二种情况,关闭了外部中断0,等待T0中断发生过程中,外部中断0的请求信号被置位(在此过程中多次出现的REF信号所致),如果CPU不加处理,等到下次开放外部中断0时,CPU将立即响应这个错误的请求,导致系统运行错误。这个问题是窥容易解决的,但设计者却常常出现这样的错误,原因是忽视了对这种问题的重视,编程习惯不好。,工程背景下的单片机原理及系统设计,解决的办法:在硬件允许的条件下,如本工程实例已加有74HC125隔离,在外部中断0不用时,切断其请求信号通道,即可避免上述情况发生。在没有硬件隔离的系统中,当要再下次开放外部中断0(前)时,用指令将中断请求标志清除。将系统垃圾清除,对本例来说,就是要将IE0清零。对中断交叉系统,我们一般都是分时开放不同的中断源的中断的。最方便的办法是在中断断服务程序中,将不确定的中断请求标志清除。具体办法如下:,工程背景下的单片机原理及系统设计,voidtimer0()interrupt1/*T0中断服务程序*/*T0中断服务内容*/IE0=0;/*清除外部中断0请求标志*/记住:这些技巧来自使用者对中断的原理、中断过程的理解。,工程背景下的单片机原理及系统设计,训练题5-38两51机点对点联接,fosc均为11.0592MHz,9600波特率。从机以事件触发程序结构工作,主机以时间触发结构工作。每次时间(设间隔为2ms)触发主机将1字节决策值,通过串口发至从机,引发从机串口中断事件,从机响应事件后再发P1口的内容至主机提供决策依据(这个决策依据是滞后型依据)。,本章结束,
展开阅读全文