  
1.本工程为串行通信测试工程实例,从窗体界面来看分为三个部分
(1)串口设置部分
   此部分有“串口号选择”框、“波特率选择”框及“打开串口”按钮。串口号是自动
   获取的,波特率可以选择。“打开串口”按钮初始显示为“打开串口(Open SCI)”,当
   你选择了串口号与波特率,然后单击“打开串口”按钮,按钮显示变为"关闭串口(Close 
   SCI)",两个选择框处于不可操作状态,在本标签中显示当前打开的串口号与波特率,窗
   体下面的状态条中会显示当前操作。当你再次单击“关闭串口”按钮时,按钮显示“打
   开串口(Open SCI)”,两个选择框处于可操作状态,在标签中显示当前关闭的串口号与
   波特率。
(2)串口发送数据
   此部分有“选择发送方式”框,“选择发送方式”框有“字符串方式”、“十进制方
   式”、“十六进制方式”三种方式可以选择。还有“发送数据”按钮、“清空发送框”
   按钮及发送文本框。当选择“字符串方式”时,对发送文本框输入没有限制。当选择
   “十进制发送”时,要求必须输入0-9之间的字符,且输入的数据不得大于255,可以输
   入逗号或退格区别两个数据,会禁止发送不满足条件的数据,同时下面的状态条会有
   相应提示,“十六进制发送”也是如此。当在文本框里输入完数据时就可以单击“发
   送数据”按钮将发送文本框中的数据发送出去。每次重新选择数据发送方式时,都会
   将发送文本框清零。单击“清空发送框”按钮可以强制清空发送文本框。
(3)串口接收数据
   此部分用来显示接收到的数据，有三个文本框，分别以“字符串”、“十进制”、
   “十六进制”三种方式显示接收到的数据。这三个文本框的Readonly属性设置为true
   ,不允许往里面输入数据。当成功接收到数据时,会在三个文本框中显示接收到的数据。
   十进制文本框都是以三位显示,十六进制以两位显示。
2.工程结构
   此工程分为两部分，与界面有关的都放在Form文件夹中,与界面无关的都放在Functi-
   on文件夹中.与界面有关的都是通过激发窗体上的控件来执行操作的.与界面无关的是
   封装好的函数,只留出一个接口,供用户调用.本工程中与界面无关的函数有四个:串口
   初始化、串口发送数据、串口接收数据、串口中断条件设置.当你用串口进行通信时
   可以直接调用这些函数,不必去了解其内部的机制。
3.注意
(1)此工程用到了委托的,委托Delegate是VB.net与C#语言一项非常重要的特性,它相当于
   C或C++语言中的指针并且是类型安全的.它主要应用于回调函数和事件处理,也用于异
   步处理中,它是一种参考类型,由基类System.Delegate派生。
(2)在界面上放置了一个状态条,显示执行过程,当运行出现错误时,便于调试。
(3)每行代码不超过78列,便于打印代码。
(4)为了区分变量,所有的全局变量都加"g_"前缀。
(5)由于串口的ReceivedBytesThreshold值只能设为正数,在SCI模块我们定义
   了SCIReceInt过程,以便于用户选择设置接收多少个字节时触发接收中断。
(6)对象SCIPort的DataReceived事件是在产生接受中断的时候调用。
(7)在发送框中输入数据,当输入逗号时要在英文输入法下输入。
(8)C#语言,在类SCI中的SCIReceiveData函数的时候,传递的数组名前需加ref设置为引用
   ,不然无法改变原数组的值。
(9)对于处理发送字符串中的汉字问题,在接收字符串时,直接用编码的方式获取整个的字
   符串,然后再利用委托在文本框中显示,而不是如VB.NET所示一个一个字节处理。
   编码字符串使用System.Text.Encoding.Default.GetString(byte[] bytes),其作用
   是将字节序列byte[]按指定编码转换为字符串,其中Default表示选择系统当前ANSI代
   码页的编码来编码,若在系统的区域与语言设置中选择的是中文简体,则默认编码为
   GB2312.此字段还可设为ASCII或Unicode等,具体信息可查看MSDN中Encoding类的属性
   说明。与GetString(byte[] bytes)方法相对应还有GetBytes(string strings)方法,
   其作用与前者相反,使用方法类似。
(10)SerialPort控件自带三个事件:DataReceived,ErrorReceived和PinChanged,可在控
   件的属性窗口中的事件栏(闪电型按钮)中查看.在事件右侧的属性值栏中键入事件处
   理函数的名称后C#会在Form.Designer.cs中自动生成对应事件的委托注册代码。
(11)关于本工程处理串口数据接收的流程大致如下:首先,在选择好串口通信端口及波特
   率,按下打开串口按钮后.在发送文本框中输入数据，单击“发送数据”后。先把串
   口“DataReceived”事件的触发条件设置为发送数据的长度。当接受缓冲区达到触发
   条件的时候，触发SCIPort_DataReceived事件;接着,程序在SCIPort_DataReceived事
   件中调用SCIReceiveData函数,将串口输入缓冲区中的数据取出并进行处理;最后,由
   于数据接收事件与UI主程序在不同线程中,所以在将接收到的数据显示在form中的
   textbox中时需要使用invoke方法委托调用来实现跨线程的通信,这一步由SCIUpdate-
   Revtxtbox函数实现。
   