摘要:介绍一种基于编/解码器的PC机与多单片机之间的串行通信方法,并对智能卡的设计进行了说明。该编/解码器通信方案,软好地解决了多机系统中作为上位机的工控机对各下位机的寻址问题。
关键词:编/解码器 双口RAM PC 串行通信 UM3758-108
在遥测、遥控领域中,常常使用工业PC机与单片机组成的多机系统完成测控任务。PC机因其丰富的软硬件资源和友好的人机界面而被用作上位机,而单片机则因其优越的性价比和灵活的功能配置而被用作下位机。上位 机和下位机之间通过串行数据总线(如CAN总线、RS485总线等)连接,具体结构如所示。在进行数据传输时,一般先由上位机发出地址帧对指定的下位机寻址,在得到确认以后向选中的下位机发送命令和参数,或者接收该下位机采集的数据。但在多机系统中,进行数据通信遇到的一个首要问题是如何区分总线的地址信息和其它的数据信息,这也是各类通信协议和通信规约中的一项重要内容。由于目前所使用的通信协议和通信规约比较复杂,因此在一个简单的主从式多机系统中,往往由开发人员自行定义一些简单的通信协议来解决上述问题。本文介绍一种基于编/解码器的通信方案,较好地解决了多机系统中作为上位机的工控机对各下位机的寻址问题。
1 编/解码芯片UM3758-108A
专用编/解码芯片UM3758-108A属大规模CMOS器件,其引脚排列如所示:A0~A9为三态编码地址输入;D0~D7为二态锁存式编码数据输入或输出;OSC引脚外接振荡电阻和电容,其值决定发送频率;VSS为电源地;T/R为编码发送与编码收选择引脚,接高电平时为编码发送,接低电平时为接收编码;IN为编码脉冲输入引脚(接收解码时);TX/RX外接驱动电路,为编码发送输出端,该引脚也可作为争码接收正确标志显示(RX输出低电平);VDD为电源正端(3~12V)。
单片UM3758-108A芯片是一个完整的接口电路,集编码发送和解码输出于一身。当T/R端接高电平时,地址码A0~A9和数据码D0~D7构成一个18位的数据帧,从TX/RX端循环不断地串行发送出去;当T/R端接低电平时,编码脉冲由IN端输入,如果接收的地址码连续两次与本地地址码一致,接收数据将按位传送到输出锁存器中,由D0~D7引脚输出。同时TX/RX引脚输出低电平,表示接收正确。
2 UM3758-108A在多机通信中的具体应用
使用编/解码器实现PC机与单片机的通信时,需要在PC机和单片机上分别配置编/解码器,以便完成数据信息的发送和接收。由于上位机不仅承担与下位机的通信任务,还要进行数据处理,并以表格或各种图形方式显示出来。如果让上位机直接控制编/解码芯片,通过并行口进行数据收发,在通信量较大的情况下,势必会占用上位机的大部分工作时间,导致整机性能下降。因此在通信量较大的情况下,应在上位机端设计一个智能I/O扩展卡,该卡可插到上位机底板的扩展槽上。为了上位机和扩屏卡之间达到更快的信息交换速度,可以采用共享存储器方式进行数据交换。传统的共用存储器硬件设计比较复杂,应用范围较小。本文采用Maxim公司生产的双端口存储器DS1609,大大简化了共用存储器硬件电路设计。如所示,DS1609为256字节双端口RAM,属大规模CMOS器件;具有两个独立的端口,各自拥有一套相应的数据/地址复用总线和控制总线;控制信号只有读、写和片选,尤其适合于和Intel公司的CPU相连;硬件电路设计非常简单。该器件允许两个端口独立地对存储器单元进行存取操作,且由于存储器内部特殊的单元电路设计,端口双方同时对同一个单元进行读操作时无需促裁逻辑;但当端以方同时对同一单元进行读/写或写/写操作时,仍会发生竞争。解决读/写冲突的一个简单办法是执行冗余的读周期,也可使用“邮箱”传送状态信息方式进行软件仲裁,这种方法需给每个端口分配一个字节,用以写入状态信息,以告知对本端正在进行的操作。对于写/写冲突,可给双方分配固定的单元空间,另外,再给每一组数据分配校验和字节,以确保正确的数据交换。中DS1609一侧与89C51 CPU相连,另一侧通过三态缓冲器与扩展总线相连。
为PC机与80C51单片机使用编/解码器实现通信的示意图。UM3758-108A的A0~A9是地址输入端,每位可有三种状态:高电平、低电平、开路。利用其不同的组合可产生3 10种不同的编码。二态时也有2 10种不同的编码。智能扩展卡需不断寻址各个下位机,所以利用锁存器将数据输出给编/解码器的地址端,以此可灵活地寻址各个下位机。为了简化起见,中省去了一个锁存器,将A8、A9直接悬空。UM3758-108A片内具有数据锁存能力,无需加锁存器,但需加双向缓冲器以收发数据。下位机端的编码地址用微型开关SW设置,也可用锁存器输出编码地址;但这样做需在下位机工作前,将编码地址由面板输入,和其它需要设定的参数一起保存在存储器(如EEPROM)中,然后再由锁存器输出。后者增加了下位机地址编码的灵活性,但也加重了编程负担。中,智能I/O扩展卡用74LS273作为扩展接口,以锁存要寻址的下位机地址,用74LS245收发数据。P1.0为发送数据选择端:P1.0为低电平时,接口处于接收状态;为高电平时,处于发送状态。因此,初始化时,上、下位机的两个接口均应置成接收状态。每个接口的TX/RX端除了作为发送端外,还作为该接口接收正确与否的状态指示端。如果接收正确,该接口输出低电平;否则,为高电平。此端口可作为向CPU发出中断请求的信号。为此,发送数据时,应先关闭接收中断,发送完毕,再打开接收中断。
该通信为半双工方式,且只能由上位机发起,下位机不主动申请通信。当处于轮询状态时,上位机根据下位机的编码地址,向下位机发送呼叫帧。每台下位机都由编/解码器接收并判断,但只有地址相符的下位机才发生中断接收数据,并建立和上位机的联系,以此接收上位机的命令和参数,或将采集的数据上传。由于这种通信方式无差错控制,因此应根据传输速率,定时,保证每个发送周期相同的编码信号连续发送3次,以提高通信的可靠性。
使用编/解码器实现PC机与单片机的通信,波特率设置为2400baud,通信距离可达5km以上;不仅可用于数据采集系统、LED屏幕显示系统等有线通信方式,也可采用红外(IR)、超声波(US)等用于无线通信方式,以此可突破地理因素的局限。这种通信方式不仅传输距离远、抗干扰性通强、可靠性高、成本低,而且连接简单、使用方便;通信过程仅仅是读写I/O口的简单操作,编程简单,易于实现。
结语
本文提出了一种适用于PC机与多单片机之间的串行通信实现方法。该方法采用UM3758-108A编/解码芯片实现双工传输,采用DS1609芯片实现智能卡和上位机的批量数据交换,实现了数据传输与数据处理功能的分离,使它们各司其职,保证了系统的实时性,也有效解决了上位机对下位机的寻址问题。另外,该方式有很宽的适用范围,具有一定的应用价值。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。