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

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

文章摘要:PIC16F876端串行通信的C语言程序流程如图3所示,相应的主要通信源代码如下://串口相关寄存器的初始化子程序void sci_initial(){SPBRG=0C0A; //设置通信波特率为115.2kb/s</P><P> TXSTA=0X04; //选择异步高速通信模式RCSTA=0x80; //串行口使能,接收数据长度为8位,无奇偶校验 TRISC6=0; //RC6引脚设置为输出方式</P><P> TRISC7=1; //PC7引脚设置为输入方式</P><P> } //串口接收和发送数据子程序</P>

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

PIC16F876端串行通信的C语言程序流程如图3所示,相应的主要通信源代码如下:

//串口相关寄存器的初始化子程序

void sci_initial(){

SPBRG=0C0A; //设置通信波特率为115.2kb/s</P><P> TXSTA=0X04; //选择异步高速通信模式

RCSTA=0x80; //串行口使能,接收数据长度为8位,无奇偶校验

TRISC6=0; //RC6引脚设置为输出方式</P><P> TRISC7=1; //PC7引脚设置为输入方式</P><P> }

 //串口接收和发送数据子程序</P><P> void sci_com(){

while(!RCIF); //查询接收中断标志位,等待上位机发送的串口数据

rec_data[0]=RCREG;//接收串口数据

 if(rec_data[0]==0xFF){

send_data[0]=rec_data[0]; //在第1组数据中嵌入回送握手数据0xFF</P><P> for(j=0;j<33;j++){

TXREG=send_data[j]; //发送第1组32字节的A/D

转换数据,包含握手信号0xFF为33个字节数据

 while(!TXIF); //查询发送标志位,等待数据发送完毕再进行下一次数据发送

}

delay_ms(5); //PIC单片机定时5ms发送第2组A/D转换数据

send1_data[0]=rec_data[0]; //在第2组数据中嵌入回送握手数据0xFF

for(j=0;j<33;j++){

TXREG=send1_data[j];//发送第2组32个字节A/D转换数据及握手信号数据

While(!TXIF); //查询发送标志位,等待数据发送完毕再进行下一次数据发送

3 Matlab环境下PC机与单片机的通信

在Matlab6.0中新增的设备控制工具条(Instrument control toolbox)用来负责上、下位机之间的通信。该设备控制工具箱的特色如下:

①支持基于串行接口(RS-232、RS-422、RS-485)、GPIB总线(IEEE2488、HPIB标准)、VISA总线的通信;

②通信数据支持二进制和文本(ASCII)两种方式,文本方式支持SCPI(Standard Commands for Programmable Instruments)语言;

③支持异步通信和同步通信;

④支持基于事件驱动的通信。

从以上的Matlab设备控制工具箱的特点可以看到,Matlab完全可以满足我们实现串行通信的要求。

3.1 Matlab对串行口控制的基础知识

Matlab对串行口的编程控制主要分为四个步骤。

①创建串口设备对象并设置其属性。

scom=serial('com1');%创建串口1的设备对象scom

scom.Terminator='CR';%设置终止符为CR(回车符),缺省为LF(换行符)

scom.InputBufferSize=1024;%输入缓冲区为256B,缺省值为512B

scom.outputBufferSize=1024;%输出缓冲区为256B,缺省值为512B

scom.Timeout=0.5;%Y设置一次读或写操作的最大完成时间为0.5s,缺省值为10s

s.ReadAsyncMode='continuous'(缺省方式);%在异步通信模式方式下,读取串口数据采用连续接收数据(continuous)的缺省方式,那么下位机返回的数据会自动地存入输入缓冲区中.

注意:在些属性只有在对象没有被打开时才能改变其值,如InputBufferSize、OutputBufferSize属性等。对于一个RS-232/RS-422/RS-485串口设备对象,其属性的缺省值为波特率9 600b/s,异步方式,通信数据格式为8位数据位,无奇偶校验位,1位停止位。如果要设置的串口设置对象的属性值与缺省值的属性值相同,用户可以不用另行设置。

另外,设置串口设置对象的属性也可以用一条指令完成,如:scom=serial('COM1','BaudRate',38400,'Parity','none','DataBits',8,'StopBits',1)。也可以用set命令,如set(scom,'BaudRate',19200,'Parity','even')。创建了对象后可以在Matlab命令窗口直接敲对象名并回车,看到其基本属性和当前状态。若需要知道其全部的属性,可以用get(scom)命令。

②打开串口设备对象。

fopen(scom);

③读写串口操作。初始化并打开串口调协对象之后,现在可以对串口设备对象进行读写操作,串口的读写操作支持二进制和文本(ASCII)两种方式。当Matlab通信数据采用西方(ASCII)方式时,读写串口设备的命令分别是fscanf、fpritf;当Matlab通信数据采用二进制方式时,读写串口设备的命令分别是fread、fwrite。下面以文本方式读写串口为例:

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


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