新闻中心

EEPW首页>EDA/PCB>设计应用> 1-Wire总线与DS18B20应用仿真

1-Wire总线与DS18B20应用仿真

作者: 时间:2008-06-19 来源:今日电子 收藏

  首先右击选 中protues编辑区中的DS18B20模型然后再左击,此时弹出如图4所示的属性设置对话框。其中,Family Code是器件的家族码,对于DS18B20来说是28H。ROM Serial Number对应于器件的48bit序列号,格式为十六进制,在填写过程中要保证同一条总线上所有模型的ROM Serial Number都不相同。Automatic Serialization设置为No时模型将使用ROM Serial Number中的序列号,设置为Yes时模型的序列号将由仿真环境自动生成,在此设置为Yes,这样可以免去手动修改ROM Serial Number的麻烦。Current Value中是仿真模型当前的温度值。Cranularity中是单击仿真模型的温度值增减按钮时温度值的改变量,在此设置为1.1。其他选项保持默认即可。单击OK按钮,设置完成。

本文引用地址://m.amcfsurvey.com/article/84508.htm

图3 多点测温系统仿真原理图

 ③编制源程序

  主机是通过Reset()、Readbit()、Writebit()三种基本操作与总线进行通信的,只要这三个函数的时序准确,那么对于有一定C语言编程基础的用户来说程序其他部分的编写将不是难事,按照前面介绍的流程向总线发送功能命令并进行相应读写操作即可。多点测温系统编程的难点在于器件的查找,系统上电时主机首先要查找总线上挂接着多少个器件并将各个器件的ROM编码读入单片机的RAM中,这需要一套复杂的算法,限于篇幅关于此算法在此不再详述。本仿真实例大体工作过程如图3右下角注释部分所示,“查找总线上所有器件的ROM编码并存储”这一步可以由 uchar B20ReadROM(uchar B20ROM[]函数完成,该函数的返回值是查找到的器件数目,各个器件的ROM编码将存储在二维数组B20ROM[]中。

图4 DS18B20仿真模型属性设置

  “统一开始温度转换”的通信流程为:发送复位信号;发送跳过ROM(CCH)命令;发送启动温度转换(44H)命令。

  “逐器件读取温度值”的通信流程为:发送复位信号;发送匹配ROM(55H)命令;发送第i(i=0~7)个器件的ROM编码;发送读RAM(BEH)命令;读取2字节,其中低字节在前,高字节在后,读取到的值符合温度值数据格式。

 ④在Proteus中添加监视变量

  为了检验程序运行的正确与否,通常的做法是将运行结果通过单片机的UART接口输出到虚拟终端上,这种方法的缺点是会占用一定的单片机资源,在此介绍另外一种程序调试技巧——监视变量。在Proteus的运行状态下点击Debug→Watch Window会弹出监视窗口(Watch Window),然后按下Alt+A键会弹出如图5所示的添加存储器条目对话框(Add Memory Item)。所谓监视变量也就是监视相应存储单元中的内容,图5中

图5 添加存储器条目对话框

   Memory用于选择待监视变量所在的存储器;Name用于填写变量名称,为了含义清晰该名称最好与源程序中定义的变量名称一致;Address用于填写待监视变量的地址;Data Type和Display Fomat用于设置数据格式和显示格式。设置完成后单击Add按钮即可添加一个监视变量。在本实例中将测量到的温度值转化成ACSLL码字符串的格式存储在二维数组TempBuffer中,因此Data Type选择为ASCLLZ String,Watch Window的最终结果如图6所示。Value一栏中显示的即为8个DS18B20测量到的温度值,单击仿真模型的温度增减按钮温度值的改变会自动映射在 Watch Window中。

图6 监视窗口

  图6中TempBuffer[i](i=0~7)的地址在Keil中可以按以下步骤得到:

  ● 单击Keil工具栏中的按钮,进入调试状态。
  ● 通过View→Output Window菜单调出Keil的Output Window,并选中Command标签。
  ● 在Output Window的命令输入区输入TempBuffer[i]然后回车即可得到TempBuffer[i]的地址,在本实例中i=0~7。对于非数组类型的变量在输入时需要在变量名前加取地址符号&,如图7所示。

图7 变量地址的获取


上一页 1 2 3 下一页

关键词:仿真1-Wire传感器

评论


相关推荐

技术专区

关闭