2.软件方法
一种很容易想到的软件方法就是“延时法”。例如,当PC机要往单片机发送一批数据时,每发一个字节,就延时一段时间,以便单片机能及时将刚收到的字节取走并处理完。这种做法的困难在于延时常数不好确定。一种改进方法就是,一方面发送方采取一定的延时,另一方面在发送一组(可以是一字节,也以可是若干字节)数据后,接收方应回答一个数据信号(不是控制信号!)。该信号既可表示接收到的数据正确与否,又可起同步作用。
四、多机通信
51单片机的串行口在方式2(波特率固定)和方式3(波特率可变)时具有多机通信功能。这为组成多机控制系统提供了方便。IBM - PC微机的软、硬件资源相当丰富,特别是它的汉字图形功能,为用户提供了一个非常友好的界面。因此,目前大多数分布式控制系统均采用51单片机作前端控制器,IBM - PC作后台主机。这种控制系统对通信接口提出了新的要求:首先,1台PC机要带n台51单片机控制器.故其发送数据总线(TxD)必须具有较强大的负载能力;其次,n台单片机要往PC机传输数据,必须解决数据总线(RxD)竞争问题;最后,这种控制系统的通信距离一般比较远,环境也比较差,因此通信接口必须具有较强的抗干扰能力。显然,标准的RS - 232C接口难以满足这些要求。为此,必须采用一种新的串行通信标准——RS - 422A。在这种标准中,所有信号均采用平衡式差分传输。MC3486/3487是最常用的一种RS - 422A电平转换器,利用它构成的典型多机控制系统如图1- 36所示。图中,线接收器MC3486的所有控制端均接+5 V,即一直使能。单片机端线驱动器MC3487的控制端接P1.0平时应为低,只有在与PC机联系上须传送数据时才置高。如果PC机巡查各单片机,就可保证数据总线不发生竞争。PC机的3487控制端接RTS,平时为低,一旦发送数据就为高。注意,MC3486/3487的输入/输出是TTL电平,因此图中加了4只二极管箝位。此外,如果PC机RS - 232C上用的不是1489而是75154,那么3487的输出信号必须经过一个RS一232C电平转换器,才能接到PC机的RxD端。这种接口电路在波特率不太高时,传输距离可达几公里,而且由于两机地线不连在一起,因此有一定的隔离作用。
在51单片机的串行口控制寄存器( SCON)中,有一个“地址监听”控制位SM2。当置SC2=1时,只有当接收到的串行数据的第9位RB8 =1时,才激发“接收数据有效”标志RI;而PC机发送数据时,可通过程序设置第9位奇校验(1)或偶校验(0)。利用这两点,对于图1- 36所示的多机系统.PC机就可方便地与N台单片机进行数据通信。假设PC机要从所有控制单片机巡回取一批数据,这时51单片机和PC机的程序框图如图1- 37所示。图中,PC机必须将串行数据格式设置成8个数据位+1位停止位,当附加奇校验位时,其控制常数(送3BFH寄存器)为2BH,偶校验则为3BH。发送数据时,如不调用INT14H,则要注意将RTS置成1,以便打开3487。由于是单片机往PC机传送大块数据,后者的处理速度高得多,因此不必采取帧同步措施;但为避免数据传输出错,可增加检错、纠错功能。
本节中介绍的方法均已在“长途电话台记账号查询系统”、“分布式粮仓温湿度巡测系统”、“51单片机开发系统”和“远距离驱动器”中得到了实际应用。其效果良好,值得推广。