CygnalC8051F(已被Silicon Lab收购)系列单片机是真正能独立工作的片上系统SOCCPU有效地管理模拟和数字外设可以关闭单个或全部外设以节省功耗FLASH存储器,还具有在系线重新编程的能力即可用作程序存储器又可用作于非易失性数据存储。应用程序可以使用MOVC和MOVX指令对FLASH进行读或改写。该系列单片机采用CIP51内核,Cygnal指令与MCS51指令系统全兼容可用标准的ASM51Keil C高级语言开发编译C8051F系列单片机的程序[4]。
2.3 上位机软件设计平台选择
首先是上位机编程语言以及设计平台的选择,对于上位机的程序设计,有众多的编程语言可以选择,包括底层的汇编语言,高级语言中Delphi、VB、VC++、C#、Java等等。
汇编语言因为其处于系统的底层,直接面向处理器,能够保持机器语言的一致性,直接简洁,可以访问所有的软硬件资源,代码简短内存占用少速度快;但是其缺点也十分明显,由于其直接针对特定的处理器,程序无法在不同的处理器上运行,缺乏可移植性;汇编语言语法艰涩难懂,可文护性可读性差,难于调试和理解。因此不选择汇编语言进行编写[5]。
在众多高级语言中,VC++语言与windows系统的兼容性好,代码的扩展性强,可用的控件以及方法丰富多样,是当今编程人员的首选工具,易于读懂和改进。对于本设计来说,可以利用其中的API函数接口和Mscomm控件两种方式进行程序设计,选择的余地大大提高了。
在运行平台的选择上,尽管VC6.0非常经典,但已不兼容现在的WIN7及以上平台,在语法用法上与后续平台都有或多或少的不同。为了使程序适应以后的需求以及扩展,本设计选择了VS2012平台进行开发,该版本兼容现在的主流系统平台,且较之前的VC6.0版本增加了许多方便开发者进行程序设计的功能,界面友好[6]。
2.4 核心通信模块实现方式的选择
确定好开发平台之后,就需要考虑具体的核心通信模块的实现,在现在VC++主流的串口通信开发方式中,主要有API接口的Cserial类以及MFC中的Mscomm控件两种方式实现。
这两种方式比较而言,前者由于是与API接口相关联,API函数是Windows程序开发使用的主要函数集,其中提供了十几个专门的通信函数对应Windows3.x和95及NT开发环境,有16位和32位通信API函数.vc++2.0和以前的版本都保持16位和32位两个版本,从VC++4 0以后,软件只支持32位应用程序的开发。目前较多的应用是在Win95及32位开发环境下,但也存在着Windows3.x下开发的16位通信程序向32位程序的移植问题与系统的结合较为紧密,对串口通信的控制以及设定比较全面深入,对于熟练的编程者来说使用起来比较得心应手,但也因此使得对其通信对象定义以及操作较繁琐一些[7]。
后者是MFC中为使用者封装好的串口通信控件,Microsoft Communications Control(以下简称MSComm)是Microsoft公司提供的简化Windows下串行通信编程Active控件, 它为应用程序提供了通过串行接口收发数据的简便方法[8]。程序员不需要花时间去了解复杂的API 函数, 只需要利用MSComm 控件就可实现串口编程。但由于是控件已经封装好,用户不能对其所调用的API接口函数进行修改[9]。
在本设计中,多机寻址的方式是通过软件定义通信协议中的地址字节进行地址判定而不是通常在单片机之间常用的第九位数据位的硬件寻址。
例如,如果PC首先发送第1个字节,它代表要访问目标单片机的地址,由于每个单片机工作方式一般为工作方式l,所以每个单片机都能接收到这个地址。同样地,PC发送其他4个字节的数据,每个单片机都能接收到这4个字节的数据。然后,每个单片机根据接收到的地址与自己的地址代码比较,如果相同则接收到的4个字节的数据有效,否则无效。因此不需要在驱动层对计算机本身的发送数据包结构进行修改,选择Mscomm控件即可完美实现本设计的全部功能。 pc机与多台单片机串行通信的设计(3):http://www.youerw.com/zidonghua/lunwen_16635.html