最完整的, matlab实用的串口程序,测试可以运行。
确认你的串口已经接好,要不然会出现 time out现象。
- %%%%%%%%%%%%%%%%%%%%%%%%串口接收函数%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %%%%%%%%%%%%%%%%%%%%%%%thomas1847,2007.1.22%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %注:查询方式
- function serialcomm
- web -browser
- 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.2fn',data1,data2,data3,data4) %输出显示
- %可根据具体通讯协议取出数据
- end
- else rectr=0; %未找到帧头清计数器
- end %接收结束
- end %主循环结束
- %程序结束关闭串口类
- fclose(g); %关闭串口
- delete(g); %删除串口对象
- clear g ; %清除变量
- end
-
-
-
复制代码
5
|
|
|
|
soluble 发表于 2012-10-20 20:23
试试看
您好,代码下载下来了,但是输出老是零怎么回事啊。我的单片机读取时间比较长,前30秒是用来调零后来才用来读数,请问把测量时间加长的话该怎么调啊,不好意思,matlab不太懂
|
|
|
|
|
楼主辛苦了
|
|
|
|
|
厉害,多谢了。
|
|
|
|
|
。。。。。。还以为是那份资料呢 不过还是谢谢啦
学习了
|
|
|
|
|
本帖最后由 牛儿快跑 于 2014-1-8 21:17 编辑
!!
|
|
|
|
|
菜鸟顶一下
|
|
|
|
|