新闻中心

EEPW首页 > 测试测量 > 设计应用 > 基于Matlab的一种小型温度检测系统

基于Matlab的一种小型温度检测系统

作者:方吕,李淑芬时间:2008-06-27来源:微计算机信息收藏

  基于以上分析,对DS18B20的编程源码如下:

本文引用地址:http://www.eepw.com.cn/article/84908.htm

  Init_DS18B20(void)  //初始化函数

  {DQ = 1;    //DQ复位

   Delay15(1);   //稍做延时

   DQ = 0;    //将DQ拉低

   Delay15(32);  //精确延时 大于 480us

   DQ = 1;    //拉高总线

   Delay15(6); //延时90us

   x=DQ;      //读存在脉冲

   delay15(20); //延时约270us

  } 

  Write_DS18B20(unsigned char dat)//写一个字节

  {

   unsigned char i="0";//定义循环变量

   for (i=0; i<8; i++)

   {

    DQ = 0; //复位

    DQ = dat&0x01;//取数据的第i位并送出

  Delay15(1);//延时

  DQ = 1; //停止

    dat>>=1;//右移

   }

  }

  Read_DS18B20(void)//读一个字节

  {

  unsigned char i="0";

  unsigned char dat = 0;

  for (i=8;i>0;i--)

   {

    DQ = 0; // 复位

    dat>>=1;

    DQ = 1; // 给脉冲信号

    if(DQ)

     dat|=0x80;//取位脉冲并存入dat

    delay15(1);//延时

   }

   return(dat);

  }

  4 上位机部分(PC)

  上位机通过串口向下位机发送命令实现对下位机的控制,并实时地接受下位机传送过来的数据,对其分析处理,将结果用图形显示并存储,完成人机交互过程。

  并不具备直接访问硬件的能力,但是支持面向对象技术,通过调用Instrument Control Toolbox中的serial类函数来创建串口对象,对串口对象操作就是对串口操作,使用起非常方便。同时,封装的串口对象支持对串口的异步读写操作,使得计算机在读写串口时能同时进行其他处理工作,因而能大大提高计算机执行效率。用多线程技术实现这种异步操作,通过异步读写设置,计算机在执行读写串口函数时能立即返回不必等待串口把数据传输完毕, 当指定的数据传输结束时就触发事件,执行事件回调函数,可以在事件回调函数中编程,进行数据处理,这样就不会造成因等待串口传输数据引起的时间浪费。

  4.1 Matlab下串口编程

  MATLAB的Instrument Control Toolbox提供了 MATLAB与仪器仪表通信的功能 ,它支持 GPIB 通用接口总线 、VISA、TCP/ IP、UDP、RS2232等多个协议 ,具有同步和异步读写功能以及事件处理和回调操作功能,可读写和记录二进制和ASCII文本数据。与串口有关的主要函数如下[3]:

  (1)建立串口对象函数:obj=seril(’port’,’property name’,propertyvalue……),其中主要的属性有:baudrate(波特率),databits(数据位),parity(校验方式),stopbits(终止位)等,可以在初始化时进行赋值或者使用set函数。

  (2)打开串口设备对象:fopen(obj)

  (3) 串口读写操作:当matlab通信数据采用二进制格式时,读写串口设备的命令为fread()和fwrite();当通行数据采用文本(ASCII)格式时,读写串口设备的命令为fscanf()和fprintf()。

  (4)关闭并清除设备对象:

  Fclose(obj);%关闭串口设备对象

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

  基于本系统串口通信协议,对串口对象的读写部分程序如下:

  Obj=serial(’com1’,’baudrate’,9600,’parity’,’none’,’databits’,8,’stopbits’,1);%初始化串口

  Fopen(obj);%打开串口对象

  Fwrite(obj,256);%向串口发送握手信号0xff

  TMP=fread(obj,3,’unit8’);%从串口读取3字节数据,后2个即是16bit温度数据

  If TMP(1)= =256   %判断第一个字节受否是握手信号

    For i = 1:3

  Dat(i)=TMP(i+1);%剔除第一个握手信号字节

  End

  End

  Fclose(obj);%关闭串口设备对象

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



评论


相关推荐

技术专区

关闭