编辑: 戴静菡 2016-03-20

虽然编程容易,但这样做不能对数据进行实时处理,系统实时性不高,而且会极大地占用系统的资源.以中断的方式对串口进行控制实现串行通信,就可以实时处理下位机传送的数据;

但编程相对复杂一些,需要采用Matlab的事件和回调函数机制. (1)基于Matlab查询方式的异步串行通信编程 Matlab查询方式的串行通信编程虽然简单,但这种方法在实际应用中实用价值不高,下面只作简单介绍.通信源程序如下: clc;

%初始化串口设备对象,设置串口属性为:PC机com2口,输入缓冲区为1024,读写最大完成时间为0.6s,波特率为115 200b/s,1位停止位,遇到换行符中止,硬件流控制 g=serial('com2');

g.InputBufferSize=4096;

g.timeout=0.6;

g.BaudRate=115200;

g.Parity='none';

g.StopBits=1;

g.Terminator='LF';

g.FlowControl='hardware';

fopen(g);

%打开串口设备对象s fwrite(g,255);

%以二进制的方式发送握手信号0xFF,缺省为异步通信方式 out=fread(g,33,'uint8')%接收单片机发送的33个数据(8位),并存入out数组中 %释放串口设备对象 fclose(g);

delete(g);

clear g;

(2)基于Matlab中断方式的实时串行通信编程 在Matlab环境下以中断的方式进行串行通信,实际上是采用事件驱动的方法实现的.Matlab提供了instrcallback(obj,event)回调函数,用户根据需要可以自行设置具体的串行通信事件.Matlab常用的串行口通信中断事件有:缓冲区有指定字节数目的数据可用事件(bytes-available event)、串口接收到的数据长时间处于非激活状态事件(break-interrupt event)、串行口引脚状态改变事件(pin-status event)、输出缓冲区为空事件(output empty event)等.当串口上有监视的事件发生时,Matlab会自动调用回调函数进行通信事件的处理.因此,事件驱动实质上是一种中断机制,而回调函数实质上相当于一个中断服务子程序.Matlab端实时串行通信的程序流程如图4所示.以下是具体的编程步骤. ①建立一个串行通信主程序:serial.m文件,在主程序中进行串口设备初始化操作,并指定回调函数中串行通信的事件. 程序主要源代码如下(创建串口设备对象、设备串口设备属性及打开串口等初始化操作的代码与前述的查询方式下的初始化代码相同): %设置回调函数触发事件―当串口缓冲区中有33字节的数据时,触发中断事件,此后主程序自动调用instrcallback(obj,event)回调函数 g.BytesAvaibleFcnMode='byte';

%中断触发事件为'bytes-available Event' g.BytesAvailableFcnCount=33;

%接收缓冲区每收到33个字节时,触发回调函数 g.BytesAvailableFcn=@instrcallback;

%得到回调函数句柄 fopen(g);

%连接串口设备对象 fwrite(g,255);

%写串口,发送握手信号0xFF(等价于十进制下的数值255) ②修改instrcallback(obj,event)回调函数,对所发生的串口通信事件进行处理. Matlab缺省的回调函数instrcallback(obj,event)存在于instrcallback.m文件中.该文件实际上是一个有待于用户修改的程序模块.其中只有一些最基本的程序代码,能够显示导致串口中断发生的是哪一类事件,中断事件所发生的时间以及导致事件发生的对象名等信息(修改回调函数文件时,注意要取消文件中相应信息后的分号,才能够在Matlab的命令窗口(command window)中将这些信息显示出来).中断发生后的通信事件处理以及通信数据的分析处理任务,需要用户自行添加相应的服务程序代码. Matlab安装目标下有两个instrcallback.m文件,我们只需要修改@instrument目录下的instrcallback.m文件即可.当然,在修改instrcallback.m文件之前,最好对其做一个备份.另外,需要注意的是:程序调试过程中如果再次修改了该回调函数,要重新启动Matlab配置该文件,才能使得新的回调函数文件生效. 修改后的instrcallback.m文件见网站www.dpj.com.cn.该修改后的回调函数能够完成如下任务: ①实时接收单片机实时5ms发送的33个串行通信数据,其中包括1个握手信号和32个A/D转换数据(这些数据是PIC单片机系统采集到的传感器信号,每个数据占1字节),并存储在out数组中;

下载(注:源文件不在本站服务器,都将跳转到源网站下载)
备用下载
发帖评论
相关话题
发布一个新话题