PC机与多台单片机实时通信系统的设计与实现
电阻R=10k,电容=150p,经计算,时钟频率
电位器RP1用于提供ADC0804的参考电压,调整电位器,使ADC0804的Vref/2引脚的电压为2.56V。电位器RP2用于提供ADC0804的输入电压,调整RP2即可使输入电压在0~5V内变化。将ADC0804的 引脚接到单片机的 引脚,即每次ADC0804转换完成后就会使单片机进入中断来处理ADC0804输出的8位数字信息。
此外,从机还要将主机发送过来的信息显示出来,以表明从机接收到了主机发来的信号。系统中采用了8个LED连接到单片机的P2口作为显示输出,可以将主机发送过来的十六进制数据以二进制方式显示出来。由于单片机端口的驱动能力有限,不能用高电平直接驱动LED,所以将LED采用共阳极接法。
在从机工作的过程中,可能会出现各种异常状况,需要将报警信息及时反馈给主机。为了模拟从机异常报警过程,在单片机的外部中断 输入端连接一个按键,利用按键触发外部中断来报警。当按下键时,从机会将报警信息发送给控制器,控制器收到后再将报警信息传递给主机,在主机界面上就会弹出一个对话框显示是几号从机报警。
3 集散控制系统软件设计
3.1控制器和从机的软件设计
控制器软件设计的主要任务是完成主机和从机之间的数据交换,而从机软件设计的主要任务是完成A/D采集并将采集的数据上传给控制器,能够将主机发送过来的数据输出显示,而且可以通过按键中断触发报警。
控制器与主机之间的通信是通过8251来实现的,8251的功能配置由单片机通过软件编程方式实现,单片机可以通过8位并行数据接口向8251写入待发送的数据、命令或者从8251读出接收的数据、状态。在软件设计上可以分为两部分,一部分是控制器向主机发送数据,另一部分是控制器从主机接收数据,程序流程图分别如图3和图4所示。注意必须先读取8251的状态字,当发送数据标志位TXRDY为1时才能通过8251向主机发送数据。控制器在中断服务程序中处理从主机接收到的数据。
控制器与从机间的通信主要是利用了51单片机串口的多机通信功能。在多机通信中,为了保证主机与所选择的从机实现可靠的通信,必须保证通信接口具有识别功能,可以通过控制单片机的串口控制寄存器SCON中的SM2位来实现多机通信功能。控制器和从机在接收串行数据时均采用中断方式。控制器与从机通信是通过MAX485来实现的,必须先将单片机的P10口置1,使MAX485处于发送数据的状态,然后才能发送数据,发送完数据后必须将单片机P10口置 0,使MAX485处于接收数据的状态。
从机的A/D采集采用中断方式通知从机接收数据。当从机接收到的数据为#0AAH时,从机就将A/D转换的数据发送给控制器,发送的数据每隔1s更新一次;当数据为#0BBH时,从机就停止向控制器发送A/D转换的数据;当数据为其它时就输出显示。由于在实际应用中前端控制系统可能会出现各种各样的报警信息,所以在这里通过一个按键触发中断来模拟报警情况的发生。
3.2 主机通信控制软件设计与测试
3.2.1 主机通信控制软件设计
主机控制软件设计主要是针对串口的操作,通过建立主界面对话框及添加变量,串口初始化,串口事件消息处理,发送数据,查看数据,选择从机号查看状态,选择从机号控制状态并且编写VC++程序来实现可视化界面及其功能。
3.2.2 从机状态控制测试
在测试时,将主机、控制器和两台从机全部连上,在主机对话框的从机状态控制栏里,选择1号机,在编辑框中输入十六进制数据“12”,然后点击“发送”按钮,如图5所示。1号机收到数据后就会将数据用8位LED以二进制方式显示出来,LED显示为“00010010”。
图5 从机状态控制测试
图6 从机状态控制测试
图7 显示1号机报警信息
3.2.3 从机状态查看测试
在从机状态查看栏里,选择1号机,点击查看按钮,如图6所示,编辑框里就会将1号机A/D采集到的数据以十六进制的方式显示出来。当调整ADC0804的输入电压时,编辑框中的数据就会随着输入电压的变化每隔1s更新一次。同样,当查看2号机时,也能够正常工作。
3.2.4 从机报警测试
在从机部分通过按键触发中断的方式来模拟报警情况的发生,当按下1号机的按键时,在主机的界面上就会弹出一个菜单显示“1号机报警”,如图7所示;当按下2号机的按键时,在主机的界面上就会弹出一个菜单显示“2号机报警”。
4 结论
针对集散控制系统的广泛应用,提出了一种新的由一台PC机和多台单片机组成的一个小型集散控制系统的结构,实现了PC机与多台单片机间的通信任务。本文作者创新点:既充分利用PC机丰富的软硬件资源实现友好的人机界面,又通过RS-232C/485总线结构与8251单片机进行通信,对多台单片机进行数据采集和处
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)