matlab framenum,Matlab通信的程序

%注:查询方式

function serialcomm

clear;clc;                                                                 %清除变量

g=serial('com1');                                                          %创建串口对象

g.baudrate=2400;                                                           %设置波特率,缺省9600bit/s

g.parity='none';                                                           %无奇偶校验

g.stopbits=1;                                                              %停止位

g.timeout=0.5;                                                             %设置读操作完成时间为1s,缺省10s

g.inputbuffersize=256;                                                     %输入缓冲区为32b,缺省值为512b

%设置

recbuf=zeros(1,40);                                                        %清接收缓冲区(40)

framelen=23;                                                               %帧长度(每帧23byte)

framenum=0;                                                                %清接收帧数

rectr=0;                                                                   %接收计数器清零

xctr=0;

%输入接收的数据帧数

recnum= input('请输入要接收的数据帧数:\n');                                 %输入接收帧数                                                                      %清

%打开串口设备

fopen(g);                                                                  %打开串口设备对象g

%进入接收循环

while framenum

recdta=fread(g,1,'uint8');                                          %读入数据

if recdta==255                                                      %找帧头

rectr=rectr+1;                                                   %接收计数器加1

recbuf(rectr)=recdta;                                            %送入接收缓冲区

elseif recdta==framelen&rcbuf(1)==255                               %验证接收长度和帧头

framelen=recdta;                                                 %取帧长度

rectr=rectr+1;                                                   %接收计数器加1

recbuf(rectr)=recdta;                                            %送入接收缓冲区

elseif rectr>1&rectr

rectr=rectr+1;                                                   %接收计数器加1

recbuf(rectr)=recdta;                                            %送入接收缓冲区

if rectr==framelen                                               %如果接收完进行处理

rectr=0;                                                      %清接收计数器

framenum=framenum+1;                                          %帧数累加

%可根据具体通讯协议提取数据,例如:data1~data4

data1=(recbuf(3)*256^3+recbuf(4)*256^2+recbuf(5)*256+recbuf(6))/100;      %接收原始数据

data2=(recbuf(7)*256^3+recbuf(8)*256^2+recbuf(9)*256+recbuf(10))/100;     %接收非线性补偿后的数据

data3=(recbuf(11)*256^3+recbuf(12)*256^2+recbuf(13)*256+recbuf(14))/100;  %接收蠕变补偿后的数据

data4=(recbuf(15)*256^3+recbuf(16)*256^2+recbuf(17)*256+recbuf(18))/100;  %接收滤波后的数据

fprintf('%8.2f    %8.2f   %8.2f    %8.2f\n',data1,data2,data3,data4)      %输出显示

%可根据具体通讯协议取出数据

end

else rectr=0;                                                       %未找到帧头清计数器

end                                                                 %接收结束

end                                                                        %主循环结束

%程序结束关闭串口类

fclose(g);                                                                 %关闭串口

delete(g);                                                                 %删除串口对象

clear g ;                                                                  %清除变量

end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值