Matlab环境下PC机与单片机的串行通信及数据处理

[09-12 16:23:57]   来源:http://www.88dzw.com  单片机学习   阅读:8135

文章摘要:a.读串口。A=fscanf(scom,'%d',[10,100];%从串口设备对象scom中读入10*100个数据填充到数组A[10,100]中,并以整型的数据格式存放。 h.写串口。Fprintf(scom,'%s','RS232','async');%将字符串‘RS232?’以字符的数据格式写入到串口设备scom,写操作以异步的方式进行。④关闭并清除设备对象。 fclose(scom);%关闭串口设备对象delete(scom);%删除内存中的串口设备对象clear scom; %清除工作空间中的串口设备对象当不再使用该串口

Matlab环境下PC机与单片机的串行通信及数据处理,标签:单片机开发,单片机原理,单片机教程,http://www.88dzw.com

a.读串口。A=fscanf(scom,'%d',[10,100];%从串口设备对象scom中读入10*100个数据填充到数组A[10,100]中,并以整型的数据格式存放。

 h.写串口。Fprintf(scom,'%s','RS232','async');%将字符串‘RS232?’以字符的数据格式写入到串口设备scom,写操作以异步的方式进行。

④关闭并清除设备对象。

fclose(scom);%关闭串口设备对象

delete(scom);%删除内存中的串口设备对象

clear scom; %清除工作空间中的串口设备对象

当不再使用该串口设备对象时,顺序使用以上3条命令,可以将所创建的串口对象对象清除,以免占用系统资源。

可以看出,在Matlab中进行串行通信是十分方便的,编程较为简单。而且,在Matlab中串行通信的失误率很低,通信较为可靠,也可以采用增加握手信号以及数据校验等的方式进一步增加通信的可靠性。

3.2 Matlab实现串行通信的软件设计

在Matlab环境下,读取串口数据的方式可以分为两种—查询和中断。以查询的方式进行串行通信时,如下位单片机有大量的数据分时分批传送给PC机,就需要不停查询串行口的缓冲区,有数据就读取;虽然编程容易,但这样做不能对数据进行实时处理,系统实时性不高,而且会极大地占用系统的资源。以中断的方式对串口进行控制实现串行通信,就可以实时处理下位机传送的数据;但编程相对复杂一些,需要采用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个字节时,触发回调函数</P><P> g.BytesAvailableFcn=@instrcallback;%得到回调函数句柄

fopen(g);%连接串口设备对象

 fwrite(g,255);%写串口,发送握手信号0xFF(等价于十进制下的数值255)

上一页  [1] [2] [3] [4]  下一页


Tag:单片机学习单片机开发,单片机原理,单片机教程单片机学习
分类导航
最新更新
热门排行