0 弁言
随着单片机技能的不断发展,特殊是网络技能在测控领域的广泛运用,由单片机构成的多机网络测控系统已成为单片机技能发展的一个方向。单片机的运用已不仅仅局限于传统意义上的自动监测或掌握,而是形成了向以网络为核心的分布式多点系统发展的趋势。但是,大多数单片机都只有一个串行接口,在多数情形下限定了这些单片机的进一步运用。要实现单片机在运用系统中的有效通信,就必须对单片机进行串口扩展。
本文先容的串口扩展器以单片机P89LPC931[1]为核心,利用SPI总线和芯片GM8142进行串口扩展,由1路SPI总线扩展出4路串口,具有可靠性高、抗滋扰性能强、本钱低等优点,用户可灵巧配置参数,非常适宜在电力、化工、冶金等工业掌握现场中利用。

1 系统硬件设计
本系统功能是通过UART接口吸收来自外部(例如PC,定义为上位机)的数据,通过指定的扩展串口将数据发送出去,或者从扩展串口读取数据,通过UART发送到上位机。系统的整体设计如图1所示。电源电路为全体系统供电,个中也包括RS232/RS485的电平转换电路。复位电路完成单片机的外部复位,P89LPC931既可以利用外部高电平复位,也可以内部复位。串口电路完成单片机程序的ISP下载,与外界(如PC)交互,吸收外界数据并通过扩展的串口发送,或者吸收扩展串口的数据发送到外界设备。人机交互包括按键输入和LCD显示输出,完成对系统参数的配置信息的输入,显示转发的数据或配置参数。
单片机P89LPC931的电路事理如图2所示。P89LPC931利用3.3 V电源供电,电阻R3与电容C7构成复位电路。当单片机向芯片GM8142发出复位的低电平旗子暗记时,LED点亮。单片机的引脚分配包括LCD部分、ICP在电路编程部分、KEY按键输入部分、SPI接口部分和UART接口部分。
芯片GM8142[2]的电路事理如图3所示。GM8142利用的晶振频率为3.686 4 MHz。RX和TX分别是扩展串口的吸收和发送引脚,输出的IRQ作为单片机P89LPC931的外部中断输入。
2 系统软件设计
2.1 通信规约的设计
串口扩展器的地址初始化为0x00。串口扩展器可以采取RS485或者RS232的接口标准与上位机进行通信。通信采取异步通信办法。通信参数包括波特率、校验位和帧长度,它们既可以通过按键与LCD的人机交互接口设定,也可以通过通信办法由上位机设定。
系统与上位机的通信报文[3]定义如下:(1)设定串口事情参数的报文A1,返回确认设定串口事情参数的报文R1和系统不许可远程设定参数的报文R2;(2)设定SPI功能寄存器参数的报文A3,确认设定SPI功能寄存器的报文R3和不许可远程设定的报文R4;(3)读取SPI功能寄存器参数的报文A5和返回SPI功能寄存器参数的报文R5;(4)发送数据到指定扩展串口的报文A6和确认已发送数据到指定扩展串口的报文R6;(5)查询从扩展串口上送数据的报文A7和返回的报文R7、R8;(6)缓冲区满,主动上送数据的报文R9;(7)重新启动设备的报文A10和确认已重启的报文R10;(8)回答吸收无效的报文R11。
2.2 通信模块设计
上位机通过UART接口与串口扩展器通信,在P89LPC931的内存中申请一个FIFO,用于吸收上位机发送来的数据,进行干系的处理后,以相应的报文进行回答。每个扩展串口在P89LPC931的内存中也申请一个吸收FIFO,用于保存从扩展串口发送来的数据。设置吸收FIFO满标志位,当吸收FIFO满时,主动上送报文到上位机。详细的程序流程如图4所示。
2.3 按键输入参数
串口扩展器的接口参数紧张是UART接口的参数和扩展UART接口的参数,包括波特率、校验位和帧长度,这些参数既可以通过按键与LCD合营的办法(即人机交互接口)设定,也可以通过上位机以报文的办法设定。在系统中设定是否许可远程修正参数的值,当不许可远程修正时,则远程通过报文修正系统参数的办法无效,这时只许可通过人机交互接口设定系统参数。
设置5个按键,如表1所示。按键按下,则单片机P89LPC931干系的引脚输入为低电平。这5个按键的状态也作为与门74LS08的输入,74LS08的输出作为P89LPC931的外部中断1的输入。通过按键与LCD合营设定系统参数的程序流程[4]如图5所示。
2.4 GM8142的开拓[3]
利用GM8142进行扩展串口通信之前,首先进行初始化。SPI的初始化需设置事情办法和时钟频率。GM8142的初始化须要设置事情模式、子串口的波特率和数据帧长等,通过向配置寄存器中写入相应的掌握字实现。GM8142一次SPI传输哀求在一个片选周期内传输16 bit数据,以是利用P89LPC931这样的8位单片机要担保在CS拉低后连续启动2个8 bit的数据传输,然后再将CS拉高。这样对GM8142来讲,同样实现了一次16 bit的传输。GM8142收发数据的程序流程如图6所示。
向GM8142中写入数据的函数为SendTo814X,启动一次SPI传输,发送16 bit数据,返回16 bit数据。
unsigned int SendTo814X(unsigned char chigh,unsigned char clow)
{
unsigned char cTempHigh,cTempLow;
unsigned int RevData;
SPI_CS=0;
SPDAT=chigh;
while((SPSTAT&0x80)==0);
cTempHigh=SPDAT;
SPDAT=clow;
while((SPSTAT&0x80)==0);
cTempLow=SPDAT;
SPI_CS=1;
RevData=cTempHigh;
RevData=(RevData<<8)+cTempLow;
return RevData;
}
函数SendDataToCom实现向指定的扩展串口发送单字节的数据。
unsigned int SendDataToCom(unsigned char n,unsigned char ct)
{
unsigned char ch=0x80;
unsigned int RevData;
ch=ch|(n<<3);
RevData=SendTo814X(ch,c);
函数ReadRFIFOData实现读取吸收FIFO的数据。
unsigned int ReadRFIFOData(void)
RevData=SendTo814X(0x00,0x00);
3 功能测试与总结
(1)测试人机交互接口,通过按键与LCD合营,能够正常设定参数。
(2)PC作为上位机利用串口助手这个工具,通过RS232接口发送指定的报文到串口扩展器,从扩展串口发出的数据,也通过串口助手显示出来。编辑不同的报文,从PC发送到串口扩展器,均返回相应的报文数据。
(3)PC利用串口助手向扩展串口发送数据,扩展的串口吸收到数据后,组成相应的报文,在上位机查询时,以相应的报文回答。
(4)掌握其他参数不变,修正某一个参数,例如波特率,重新测试,均返回相应的报文。
本装置以通用的单片机P89LPC931为核心,外扩GM8142扩展串口模块和人机交互模块,可运用于工业掌握领域哀求多串口的场合。经由详细测试,该串口扩展器可以实现数据的成功转发,转发数据精确可靠,具有很强的实用代价。
参考文献
[1] 张毅刚.单片机事理及运用[M].北京:高档教诲出版社,2003.
[2] 成都国腾微电子.GM8141/2数据手册[Z].2006.
[3] SARIKAYA B, KOUKOULIDIS V, ESWARA S, et al. Analysis and testing of application layer protocols with an application to FTAM[J]. IEEE Transactions on Communications, 1992, 40(1):7-11.
[4] 王忠义,张有光,潘怀勇.基于MCS-51人机交互接口[J].电子丈量技能,2004(3):43-44.