本系统用到了串口通信中间件和数据队列中间件,即只需要将中间件程序添加到系统项目表中去,调用中间件的接口函数即可实现串口的通信,如:调用URAT0Init(9600)实现串口的初始化,其中,波特率可直接进行调整;调用URAT0Putch(temp4)实现将temp4中存储的数据通过串口发送出去。当要将应用程序移植到其他系统上时,只要对这两个函数及其他相关函数进行适当修改,而无需改变应用程序。
上位机的通信程序运用了MSComm 控件,它是Microsoft公司提供的,简化Windows下串行通信编程的ActiveX控件,该控件提供了两种处理通信问题的方法,本系统采用了事件驱动法。当串口发生事件或错误时,MSComm控件会产生OnComm事件,用户程序可以捕获该事件进行相应处理。在编程过程中,就可以在OnComm事件处理函数中加入相应的处理代码。
利用MSComm控件实现计算机通信的关键是正确设置MSComm控件的属性和方法。以下是用VB编写的部分设置程序:
Private Sub Form_Load()
Me.Show
MSComm1.CommPort = 1 //选择串口com1
MSComm1.Settings = "9600,n,8,1" //设置MSComm的连接属性
MSComm1.RThreshold = 2 //定义阀值为2
MSComm1.InBufferSize = 2
i = 0
Picture1.Visible = False
On Error Resume Next
End Sub
连接属性"BBBB,P,D,S"中,BBBB 为波特率,P为奇偶校验,D为数据位数,S为停止位数。阀值定为2,则在接收缓冲区中的字节数超过“2”时,就转入OnComm()事件处理程序执行。
3. 嵌入式系统软件
采用了嵌入式操作系统uC/OS-II,它是专门为计算机的嵌入式应用而设计的。 uC/OS-II是基于优先级的占先式多任务实时内核。由于在多任务实时操作系统中,应用程序是以任务形式运行的,操作系统的一个重要的作用就是任务的调度,所以要在操作系统下实现应用程序的执行,就必须建立任务,在任务中实现测温和串行通信等操作。建立任务如下:
#include "config.h"
#define TASK_STK_SIZE 64 //定义任务栈的大小为64字节
OS_STK TaskStartStk[TASK_STK_SIZE]; //定义任务栈
void TaskStart(void *data); //声明任务
int main (void)
{
OSInit(); //操作系统初始化
OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 0); // 建任务
OSStart(); //启动操作系统
return 0;
}