下,串口设备只接收可以显示的ASCII字符,将0x00H~0x1FH范围内的字符解释为控制字符。使用文本方式对串口的读写函数分别为fprintf()(写)、fscanf()(读)。
2.事件驱动法
在Matlab环境下以事件驱动的方式进行串行通信,类似于VC中的MSCOMM控件中ONCOMM事件的实现方法。Matlab7.0提供了instrcallback(obj,event)回调函数,用户根据需要可以自行设置具体的串行通信事件。Matlab常用的串行口通信中断事件有:缓冲区有指定字节数目的数据可用事件(bytes-available event)、串口接收到的数据长时间处于非激活状态事件(break-interrupt event)、串行口引脚状态改变事件(pin-status event)、输出缓冲区为空事件(output empty event)等。当串口上有监视的事件发生时,Matlab会自动调用回调函数进行通信事件的处理。因此,事件驱动实质上是一种中断机制,而回调函数实质上相当于一个中断服务子程序。Matlab端实时串行通信的程序流程如图4所示,以下是具体的编程步骤。
(1)主程序
g =serial('com1'); %创建串口对象
g.baudrate=115200; %设置波特率,缺省9600bit/s
g.parity='none'; %设置校验位无奇偶校验
g.stopbits=1; %设置停止位
g.BytesAvaibleFcnMode='byte';% 设置中断触发事件为‘bytes-available Event’
g.BytesAvailableFcnCount=30; % 设置接收缓冲区每收到30个字节时,触发回调函数
g.BytesAvailableFcn=@instrcallback;得到回调函数句柄
fopen(g);%连接串口设备对象
fwrite(g,255);%写串口,发送握手信号0xFF(等价于十进制下的数值255)
(2)中断调用程序
Matlab缺省的回调函数instrcallback(obj,event)存在于instrcallback.m文件中。该文件类似于VC中的ONCOMM事件函数模块。需用户自行添加相应的中断处理程序代码。
Matlab安装目标盘下有两个instrcallback.m文件,我们只需要修改Matlab7\toolbox\matlab\iofun\@instrument目录下的instrcallback.m文件即可。注意,在修改instrcallback.m文件之前,最好对进行备份。另外,需要注意的是:程序调试过程中如果再次修改了该回调函数,要重新启动Matlab,才能使得新的回调函数文件生效。
%修改后的instrcallback.m文件如下:
function instrcallback(obj, event)
%以下是用户自行添加的通信事件处理及通信数据处理的中断服务程序代码
%定义存储串口30个字节通信数据的数组
Inbuffer1=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
inbuffer2=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
%以下程序用以对串口通信事件处理
out= fread (obj, 30, 'uint8') %接下位机发送的30个数据(每个数据占一个字节)
%以下程序用以数据进行滤波
inbuffer2=filter(…., Inbuffer1);
%以下程序用以