当前位置:文档之家› 18B20应用手册

18B20应用手册

18B20应用手册
18B20应用手册

DoYoung 电子技术—创造独立资源!

18B20温度传感器应用解析

DoYoung 原创

V2.0 2007.3.16

DS18B20

温度传感器的种类众多,在应用与高精度、高可靠性的场合时DALLAS(达拉斯)公司生产的DS18B20温度传感

器当仁不让。超小的体积,超低的硬件开消,抗干扰能力强,精度高,附加功能强,使得DS18B20更受欢迎。对于我

们普通的电子爱好者来说,DS18B20的优势更是我们学习单片机技术和开发温度相关的小产品的不二选择。了解其工

作原理和应用可以拓宽您对单片机开发的思路。

DS18B20的主要特征:

.. 全数字温度转换及输出。

.. 先进的单总线数据通信。

.. 最高12位分辨率,精度可达土0.5摄氏度。

.. 12位分辨率时的最大工作周期为750毫秒。

.. 可选择寄生工作方式。

.. 检测温度范围为–55°C ~+125°C (–67°F ~+257°F)

.. 内置EEPROM,限温报警功能。

.. 64位光刻ROM,内置产品序列号,方便多机挂接。

.. 多样封装形式,适应不同硬件系统。

DS18B20芯片封装结构:

图1

DS18B20引脚功能:·GND 电压地·DQ 单数据总线·VDD 电源电压·NC 空引脚DS18B20工作原理及应用:

DS18B20的温度检测与数字数据输出全集成于一个芯片之上,从而抗干扰力更强。其一个工作周期可分为两个部分,即温度检测和数据处理。在讲解其工作流程之前我们有必要了解18B20的内部存储器资源。18B20共有三种形态的存储器资源,它们分别是:ROM 只读存储器,用于存放DS18B20ID编码,其前8位是单线系列编码(DS18B20的编码是19H),后面48位是芯片唯一的序列号,最后8位是以上56的位的CRC码(冗余校验)。数据在出产时设置不由用户更改。DS18B20共64位ROM。

RAM 数据暂存器,用于内部计算和数据存取,数据在掉电后丢失,DS18B20共9个字节RAM,每个字节为8位。第1、2个字节是温度转换后的数据值信息,第3、4个字节是用户EEPROM(常用于温度报警值储存)的镜像。在上电复位时其值将被刷新。第5个字节则是用户第3个EEPROM的镜像。第6、7、8个字节为计数寄存器,是为了让用户得到更高的温度分辨率而设计的,同样也是内部温度转换、计算的暂存单元。第9个字节为前8个字节的CRC码。EEPROM 非易失性记忆体,用于存放长期需要保存的数据,上下限温度报警值和校验数据,DS18B20共3位EEPROM,并在RAM都存在镜像,以方便用户操作。

RAM及EEPROM结构图:

图2

我们在每一次读温度之前都必须进行复杂的且精准时序的处理,因为DS18B20的硬件简单结果就会导致软件的巨大开消,也是尽力减少有形资产转化为无形资产的投入,是一种较好的节约之道。

控制器对18B20操作流程:

1,复位:首先我们必须对DS18B20芯片进行复位,复位就是由控制器(单片机)给DS18B20 单总线至少480uS的低电平信号。当18B20接到此复位信号后则会在15~60uS后回发一个芯片的存在脉冲。

2,存在脉冲:在复位电平结束之后,控制器应该将数据单总线拉高,以便于在15~60uS 后接收存在脉冲,存在脉冲为一个60~240uS的低电平信号。至此,通信双方已经达成了基本的协议,接下来将会是控制器与18B20间的数据通信。如果复位低电平的时间不足或是单总线的电路断路都不会接到存在脉冲,在设计时要注意意外情况的处理。

3,控制器发送ROM指令:双方打完了招呼之后最要将进行交流了,ROM指令共有5条,每一个工作周期只能发一条,ROM指令分别是读ROM数据、指定匹配芯片、跳跃ROM、芯片搜索、报警芯片搜索。ROM指令为8位长度,功能是对片内的64位光刻ROM进行操作。其主要目的是为了分辨一条总线上挂接的多个器件并作处理。诚然,单总线上可以同时挂接多个器件,并通过每个器件上所独有的ID号来区别,一般只挂接单个18B20芯片时可以跳过ROM指令(注意:此处指的跳过ROM指令并非不发送ROM指令,而是用特有的一条“跳过指令”)。ROM指令在下文有详细的介绍。

4,控制器发送存储器操作指令:在ROM指令发送给18B20之后,紧接着(不间断)就是发送存储器操作指令了。操作指令同样为8位,共6条,存储器操作指令分别是写RAM数据、读RAM数据、将RAM数据复制到EEPROM、温度转换、将EEPROM中的报警值复制到RAM、工作方式切换。存储器操作指令的功能是命令18B20作什么样的工作,是芯片控制的关键。

5,执行或数据读写:一个存储器操作指令结束后则将进行指令执行或数据的读写,这个操作要视存储器操作指令而定。如执行温度转换指令则控制器(单片机)必须等待18B20执

行其指令,一般转换时间为500uS。如执行数据读写指令则需要严格遵循18B20的读写时序来操作。数据的读写方法将有下文有详细介绍。若要读出当前的温度数据我们需要执行两次工作周期,第一个周期为复位、跳过ROM指令、执行温度转换存储器操作指令、等待500uS 温度转换时间。紧接着执行第二个周期为复位、跳过ROM指令、执行读RAM的存储器操作指令、读数据(最多为9个字节,中途可停止,只读简单温度值则读前2个字节即可)。其它的操作流程也大同小异,在此不多介绍。

DS18B20芯片与单片机的接口:

图3

图4

如图所示,DS18B20只需要接到控制器(单片机)的一个I/O口上,由于单总线为开漏所以需要外接一个4.7K的上拉电阻。如要采用寄生工作方式,只要将VDD电源引脚与单总线并联即可。但在程序设计中,寄生工作方式将会对总线的状态有一些特殊的要求。

图5

DS28B20芯片ROM指令表:

Read ROM(读ROM)[33H] (方括号中的为16进制的命令字)

这个命令允许总线控制器读到DS18B20的64位ROM。只有当总线上只存在一个DS18B20的时候才可以使用此指令,如果挂接不只一个,当通信时将会发生数据冲突。

Match ROM(指定匹配芯片)[55H]

这个指令后面紧跟着由控制器发出了64位序列号,当总线上有多只DS18B20时,只有与控制发出的序列号相同的芯片才可以做出反应,其它芯片将等待下一次复位。这条指令适应单芯片和多芯片挂接。

Skip ROM(跳跃ROM指令)[CCH]

这条指令使芯片不对ROM编码做出反应,在单总线的情况之下,为了节省时间则可以选用此指令。如果在多芯片挂接时使用此指令将会出现数据冲突,导致错误出现。

Search ROM(搜索芯片)[F0H]

在芯片初始化后,搜索指令允许总线上挂接多芯片时用排除法识别所有器件的64位ROM。

Alarm Search(报警芯片搜索)[ECH]

在多芯片挂接的情况下,报警芯片搜索指令只对附合温度高于TH或小于TL报警条件的芯片做出反应。只要芯片不掉电,报警状态将被保持,直到再一次测得温度什达不到报警条件为止。

DS28B20芯片存储器操作指令表:

Write Scratchpad (向RAM中写数据)[4EH]

这是向RAM中写入数据的指令,随后写入的两个字节的数据将会被存到地址2(报警RAM之TH)和地址3(报警RAM之TL)。写入过程中可以用复位信号中止写入。

Read Scratchpad (从RAM中读数据)[BEH]

此指令将从RAM中读数据,读地址从地址0开始,一直可以读到地址9,完成整个RAM数据的读出。芯片允许在读过程中用复位信号中止读取,即可以不读后面不需要的字节以减少读取时间。

Copy Scratchpad (将RAM数据复制到EEPROM中)[48H]

此指令将RAM中的数据存入EEPROM中,以使数据掉电不丢失。此后由于芯片忙于EEPROM储存处理,当控制器发一个读时间隙时,总线上输出“0”,当储存工作完成时,总线将输出“1”。在寄生工作方式时必须在发出此指令后立刻超用强上拉并至少保持10MS,来维持芯片工作。

Convert T(温度转换)[44H]

收到此指令后芯片将进行一次温度转换,将转换的温度值放入RAM的第1、2地址。此后由于芯片忙于温度转换处理,当控制器发一个读时间隙时,总线上输出“0”,当储存工作完成时,总线将输出“1”。在寄生工作方式时必须在发出此指令后立刻超用强上拉并至少保持

500MS,来维持芯片工作。

Recall EEPROM(将EEPROM中的报警值复制到RAM)[B8H]

此指令将EEPROM中的报警值复制到RAM中的第3、4个字节里。由于芯片忙于复制处理,当控制器发一个读时间隙时,总线上输出“0”,当储存工作完成时,总线将输出“1”。另外,此指令将在芯片上电复位时将被自动执行。这样RAM中的两个报警字节位将始终为EEPROM中数据的镜像。

Read Power Supply(工作方式切换)[B4H]

此指令发出后发出读时间隙,芯片会返回它的电源状态字,“0”为寄生电源状态,“1”为外部电源状态。

DS18B20复位及应答关系示意图:

图6

每一次通信之前必须进行复位,复位的时间、等待时间、回应时间应严格按时序编程。

DS18B20读写时间隙:

DS18B20的数据读写是通过时间隙处理位和命令字来确认信息交换的。

写时间隙:

图7

写时间隙分为写“0”和写“1”,时序如图7。在写数据时间隙的前15uS总线需要是被控制器拉置低电平,而后则将是芯片对总线数据的采样时间,采样时间在15~60uS,采样时间内如果控制器将总线拉高则表示写“1”,如果控制器将总线拉低则表示写“0”。每一位的发送都应该有一个至少15uS的低电平起始位,随后的数据“0”或“1”应该在45uS内完成。整个位的发送时间应该保持在60~120uS,否则不能保证通信的正常。

读时间隙:

图8

读时间隙时控制时的采样时间应该更加的精确才行,读时间隙时也是必须先由主机产生至少1uS的低电平,表示读时间的起始。随后在总线被释放后的15uS中DS18B20会发送内部数据位,这时控制如果发现总线为高电平表示读出“1”,如果总线为低电平则表示读出数据“0”。每一位的读取之前都由控制器加一个起始信号。注意:如图8所示,必须在读间隙开始的15uS内读取数据位才可以保证通信的正确。

在通信时是以8位“0”或“1”为一个字节,字节的读或写是从高位开始的,即A7到A0.字节的读写顺序也是如图2自上而下的。

DS18B20温度检测程序

(1)先将数据线置高电平“1”。 (2)延时(该时间要求的不是很严格,但是尽可能的短一点) (3)数据线拉到低电平“0”。 (4)延时750微秒(该时间的时间范围可以从480到960微秒)。 (5)数据线拉到高电平“1”。 (6)延时等待(如果初始化成功则在15到60毫秒时间之内产生一个由DS18B20所返回的低电平“0”。据该状态可以来确定它的存在,但是应注意不能无限的进行等待,不然会使程序进入死循环,所以要进行超时控制)。 (7)若CPU读到了数据线上的低电平“0”后,还要做延时,其延时的时间从发出的高电平算起(第(5)步的时间算起)最少要480微秒。 (8)将数据线再次拉高到高电平“1”后结束。

(1)数据线先置低电平“0”。 (2)延时确定的时间为15微秒。 (3)按从低位到高位的顺序发送字节(一次只发送一位)。 (4)延时时间为45微秒。 (5)将数据线拉到高电平。 (6)重复上(1)到(6)的操作直到所有的字节全部发送完为止。(7)最后将数据线拉高。 DS18B20的写操作时序图如图

DS18B20的读操作 (1)将数据线拉高“1”。 (2)延时2微秒。 (3)将数据线拉低“0”。 (4)延时15微秒。 (5)将数据线拉高“1”。 (6)延时15微秒。 (7)读数据线的状态得到1个状态位,并进行数据处理。 (8)延时30微秒。DS18B20的读操作时序图如图所示。

DS18B20的Protues仿真图 源程序代码: #include "reg51.h" #include "intrins.h" // 此头文件中有空操作语句NOP 几个微秒的延时可以用NOP 语句,但本人没用NOP,直接用了I++来延时 #define uchar unsigned char #define uint unsigned int uchar code table[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37, 0x38,0x39}; sbit ds18b20_io=P2^0; //单片机与DS18B20的连接口 sbit lcdrs=P2^6; //1602与单片机的接口 sbit lcden=P2^7;

LSMW 操作手册2.0

LSMW操作手册V2.0 1.LSMW Legacy System Migration Workbench的缩写,也是执行此功能的事务代码. 它是一种数据移植工具, 内含Standard Batch/Direct Input, Batch Input Recording, BAPI, IDOC 几种数据移植方式, 具体实现时可根据需要选择其中的方式: 1.Standard Batch/Direct Input: 用这种方式, 可以在系统提供的标准Direct Input (DIP) Object基础上根据客户应 用的字段需要定制和加工自己的批导入程序. 利用标准的DIP对象省去了自己录制Recording 的步骤, 并且会比自己录制的Recording更可靠一些. 系统目前提供的标准DIP有: Object Description 0001 Long texts 0010 GL a/c master record 0020 Material master 0030 Material BOM 0035 LIFO Layer 0040 Vendor master 0050 Customer master 0060 Purchasing info rec. 0070 Condition record 0080 Purchase requisition 0085 Purchase Order 0090 Sales documents 0100 Financial documents 0110 Goods movement 0120 Manual reservation 0130 Classification 0140 Class 0150 Characteristic 0160 Fixed assets 0170 Routing 0180 Planned indep.reqmts 0190 Doc. purch. info rec 0210 Storage bin (WM) 0220 Warehouse stock (WM) 0240 Inspection plans(QM) 0250 Bank data 0260 Work center

DS18B20特性

DS18B20简介 一、概述 DALLAS 公司推出的DS18B20数字式温度传感器是一线式数字温度传感器。它将地址线、数据线、控制线合为一根双向串行传输数据的信号线,并允许在这根信号线上挂接多个DS18B20,其广泛用于工业、民用、军事等领域的温度测量及控制仪器、测控系统和大型设备中。它具有微型化、低功耗、高性能、抗干扰能力强等优点,可直接将温度转化成串型数字信号供处理器处理。 二、DS18B20的外形和引脚功能 DS18B20的引脚排列如图1及外形如图2所示,它采用了3脚PR-35、TO-92封装或8脚SOIC 封装。 表1 引脚功能 图1 DS18B20引脚图 图2 实物图 引脚 功能 GND 电压地 NC 空引脚 DQ 单数据总线(数据输入/输出引脚) VDD 电源电压(寄生电源供电时接地;外部 电源供电时接工作电源)

三、DS18B20的内部结构 DS18B20的内部结构3所示,主要包括下列7个部分。 (1)寄生电源。 (2)温度传感器。 (3)64位光刻(laser )ROM 与单线接口:64位光刻ROM 从高位到低位依次为8位CRC 、48位序列号和8位家族代码(28H )。 (4)高速暂存器,即便签式RAM ,用于存放中间数据;配置寄存器为高速暂存器中的第5个字节。DS18B20在工作时,按此寄存器中设置的分辨率将温度转换成相应精度的数值。该寄存器的R0、R1为分辨率视之为,出厂时R0、R1置位默认值,即R0=1,R1=1(即12位分辨率),用户可根据需要改写配置寄存器以获得合适的分辨率。 (5)高温触发器TH 和低温触发器TL ,分别用来存储用户设定的温度上、下限值。 (6)存储与控制逻辑。 (7)8位循环冗余校验码(CRC )发生器。 图2-3 DS18B20的内部结构 光刻ROM 中的64位序列号是出厂前被光刻号的,可以看成是该DS18B20的地址序列码。64位光刻ROM 的排列是:开始8位(28H )是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。光刻ROM 的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。高速暂存器是一个9字节的存储器。开始两个字节包含被测温度的数字量信息;第3、4、5字节分别是TH 、TL 、配置寄存器的临时拷贝,每一次上电复位时被刷新;第6、7、8字节未用,表现为全逻辑1;第9字节读出的是前面所有8个字节的CRC 码,可用来保证通信正确。 DS18B20温度传感器的内部存储器结构如图4所示。 高速暂存器 8位CRC 生成器 温度传感器高温触发器TH 低温触发器TL 配置寄存器 供电方式选择 64位 ROM 和一线端口 存储和控制逻辑

基于51单片机及DS18B20温度传感器的数字温度计程序(详细注释)

基于51单片机及DS18B20温度传感器的数字温度计程序(详细注释)

电路实物图如下图所示: C 语言程序如下所示: /******************************************************************** zicreate ----------------------------- Copyright (C) https://www.doczj.com/doc/342382292.html, -------------------------- * 程序名; 基于DS18B20的测温系统 * 功 能: 实时测量温度,超过上下限报警,报警温度可手动调整。K1是用来 * 进入上下限调节模式的,当按一下K1进入上限调节模式,再按一下进入下限 * 调节模式。在正常模式下,按一下K2进入查看上限温度模式,显示1s 左右自动 * 退出;按一下K3进入查看下限温度模式,显示1s 左右自动退出;按一下K4消除 * 按键音,再按一下启动按键音。在调节上下限温度模式下,K2是实现加1功能, * K1是实现减1功能,K3是用来设定上下限温度正负的。 * 编程者:Jason * 编程时间:2009/10/2 *********************************************************************/ #include //将AT89X52.h 头文件包含到主程序 #include //将intrins.h 头文件包含到主程序(调用其中的_nop_()空操作函数延时) #define uint unsigned int //变量类型宏定义,用uint 表示无符号整形(16位) #define uchar unsigned char //变量类型宏定义,用uchar 表示无符号字符型(8位) uchar max=0x00,min=0x00; //max 是上限报警温度,min 是下限报警温度 bit s=0; //s 是调整上下限温度时温度闪烁的标志位,s=0不显示200ms ,s=1显示1s 左右 bit s1=0; //s1标志位用于上下限查看时的显示 void display1(uint z); //声明display1()函数 #include"ds18b20.h" //将ds18b20.h 头文件包含到主程序 #include"keyscan.h" //将keyscan.h 头文件包含到主程序 #include"display.h" //将display.h 头文件包含到主程序

LSMW导入会计科目操作手册

Overview LSMW是导入数据的一种工具,最大的好处就在于它的灵活性,举一个例子来说,different material type have different field in the master. For one field, some field is suppressed and the other is mandatory. But if you want use one single format to import all fields no matter what the material type is, batch input 和catt都会出错,因为他们都只能根据制定好的画面来输入,如果你导入的数据没有这个值,那就会出错,我想这个观点你们都能理解的,那么怎么才能把数据导入呢?而不需要另外再创建更多的不同情况的catt和 batch input,那就是LSMW.如:在某一个字段上进行编程,代码如下(这段代码是具有通用性的,你们只要在用的时候把字段名改一下就可以了: IF NOT LINE_ITEM-MWSKZ IS INITIAL. BBSEG-MWSKZ = LINE_ITEM-MWSKZ. ENDIF.这句话的意思是:如果这个字段在我输入的文件中没有出现,那么就不要考虑导入这个字段。举一个财务凭证的例子。事务代码:fb01输入一张财务凭证。 Debit: 10010100 ---100 现金科目,这个科目在screen layout 里只定义了显示profit cent er 字段而不是成本中心字段。 Credit:费用科目55010101---这个科目只定义了cost center字段,而没有利润中心字段,这样的话,如果用batch input 录下来的其他类型的凭证,可能这两个字段都没有显示在输入凭证的画面,这样的话,如果用bi 或CATT就会报错,说这两个字段找不到。明白了么? 那下来再谈谈LSMW的局限性: 局限在于,它只能导入那些固定类型的主数据,比如,MATERIAL MASTER ,FINANCIAL DOCUMEN T GL ACCOUNT 等等,如果你自己创建了一个ABAP程序,是用来输入自己的一种主数据,那他就不能实现。不过我想,大多数我们需要导入 的主数据已经被包含在这里边了。,当然一批修改值他也可以办到。只要把默认的TRANSACTI ON CODE 改为你需要 的就可以了。 下面我就用图形的方式来STEP BY STEP的教给大家如何操作。我还是用财务凭证来给大家说明吧,因为财务凭证的描述性比较强。所需要的导入的文件格式我放在另外的一个文件中,请参考。

ds18b20详解及程序

最近都在学习和写单片机的程序, 今天有空又模仿DS18B20温度测量显示实验写了一个与DS18B20基于单总线通信的程序. DS18B20 数字温度传感器(参考:智能温度传感器DS18B20的原理与应用)是DALLAS 公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计。DS18B20 产品的特点: (1)、只要求一个I/O 口即可实现通信。 (2)、在DS18B20 中的每个器件上都有独一无二的序列号。 (3)、实际应用中不需要外部任何元器件即可实现测温。 (4)、测量温度范围在-55 到+125℃之间; 在-10 ~ +85℃范围内误差为±5℃; (5)、数字温度计的分辨率用户可以从9 位到12 位选择。将12位的温度值转换为数字量所需时间不超过750ms; (6)、内部有温度上、下限告警设置。 DS18B20引脚分布图 DS18B20 详细引脚功能描述: 1、GND 地信号; 2、DQ数据输入出引脚。开漏单总线接口引脚。当被用在寄生电源下,此引脚可以向器件提供电源;漏极开路, 常太下高电平. 通常要求外接一个约5kΩ的上拉电阻. 3、VDD可选择的VDD 引脚。电压范围:3~5.5V; 当工作于寄生电源时,此引脚必须接地。 DS18B20存储器结构图 暂存储器的头两个字节为测得温度信息的低位和高位字节;

第3, 4字节是TH和TL的易失性拷贝, 在每次电复位时都会被刷新; 第5字节是配置寄存器的易失性拷贝, 同样在电复位时被刷新; 第9字节是前面8个字节的CRC检验值. 配置寄存器的命令内容如下: MSB LSB R0和R1是温度值分辨率位, 按下表进行配置.默认出厂设置是R1R0 = 11, 即12位. 温度值分辨率配置表 4种分辨率对应的温度分辨率为0.5℃, 0.25℃, 0.125℃, 0.0625℃(即最低一位代表的温度值) 12位分辨率时的两个温度字节的具体格式如下: 其中高字节前5位都是符号位S, 若分辨率低于12位时, 相应地使最低为0, 如: 当分辨 , 高字节不变.... 一些温度与转换后输出的数字参照如下:

LSMW使用IDoc方法的简单介绍

LSMW是用来批量导入数据的平台,减少了ABAP程序的开发量。 他提供了4种方法:Direct input, BDC, BAPI, IDoc 本例用IDoc方法做做最简单的物料基本视图的导入。 1.TCODE: LSMW 定义Porject, Subproject和Object,若项目没有标准规格的话就随便定义吧 2. 然后进去之后是一套流水线的操作,从上往下一步步做吧。本例掠过一些简单步骤了。 3. Maintain Object Attributes. 选择IDoc(Intermediant document)。Message Type:MATMAS; Basic Type: MATMAS01. 4. 退到LSMW起始界面,Menu->Settings->IDoc Inbound Processing 其中tRFC port:A000000036是指向Client自己的RFC destination,File port随便找一个 Partner no.填Client自己的逻辑地址 5. Maintain Source Structures/Maintain Source Fields

定义导入结构和字段,把你要输入的字段一个一个定义,注意尽量用C型,长度不能比SAP字段小 6. Maintain Structure Relations 若前面第3,4步正确,则IDoc的数据段会显示出来。讲第5步定义的Source structure分配给需要的段。注意:一定是需要的段,如果随意分配,而Source Field有无值,导入会出错。本例只分配给E1 MARAM和E1MAKTM。 7. Maintain Field Mapping and Conversion Rules 将第5步定义的Source Fields和IDoc的字段做匹配,可以写一些代码规则或固定值什么的 8. Specify Files/Assign Files 选择上传文件。本例用本地文件,Legacy Data On the PC (Frontend),注意选择数据分割符。 9. Import Data/Display Imported Data

DS18B20温度显示演示程序-LCD1602显示

/*DS18B20温度显示演示程序-LCD1602显示 开机时对DS18B20进行检测,如果DS18B20检测不正常,LCD1602显示: DS18B20 ERROR PLEASE CHECK 蜂鸣器报警。 DS18B20检测正常,LCD1602显示: DS18B20 OK TEMP: 100.8℃ 如果温度值高位为0,将不显示出来。 你可以通过拔插DS18B20查看DS18B20的检测功能。*/ #include < reg51.h > #include < intrins.h > #define uchar unsigned char #define uint unsigned int sbit DQ = P3^2 ; //定义DS18B20端口DQ sbit BEEP=P1^0 ; //蜂鸣器驱动线 bit presence ; sbit LCD_RS = P1^0 ; sbit LCD_RW = P1^1; sbit LCD_EN = P1^2 ; uchar code cdis1[ ] = {" DS18B20 OK "} ; uchar code cdis2[ ] = {" TEMP: . C "} ; uchar code cdis3[ ] = {" DS18B20 BUSY "} ; uchar code cdis4[ ] = {" PLEASE WAIT "} ; unsigned char data temp_data[2] = {0x00,0x00} ; unsigned char data display[5] = {0x00,0x00,0x00,0x00,0x00} ; unsigned char code ditab[16] = {0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04, 0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09} ; void beep() ; unsigned char code mytab[8] = {0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00} ; #define delayNOP() ; {_nop_() ;_nop_() ;_nop_() ;_nop_() ;} ; /*******************************************************************/ void delay1(int ms)

LSMW资产期初导入操作手册

LSMW 资产期初导入操作手册 (S/4版本) BY-JESSIE

目录 1.准备 (3) 2.Define Object Attributes (5) 3.Define Source Structures (7) 4.Define Source Fields (8) 5.Define Structure Relations (10) 6.Define Field Mapping and Conversion Rules (12) 7.Define Fixed Values, Translations, User-Defined Routines (16) 8.Specify Files (17) 9.Assign Files (19) 10.Read Data (19) 11.Display Read Data (20) 12.Convert Data (22) 13.Display Converted Data (23) 14.Start IDoc Creation (24) 15.Start IDoc Processing (24)

1.准备 在创建之前点击菜单栏的“Setting”,选择Inbound IDoc Processing. 填写:File port、伙伴类型(US)、合作伙伴编号(RE_LSMW) 点击:Edit Ports

后退,点击 保存后退出,退出的时候确认一下第一个界面的信息是否完整。然后创建PROJECT。

创建完成之后执行进入。 2.Define Object Attributes 双击或者点击进入。

DS18B20与数码管温度显示C程序

#include #define uchar unsigned char #define uint unsigned int sbit DQ=P1^4;//ds18b20与单片机连接口 unsigned char code str[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x39};//共阴数码管字码表 unsigned char code str1[]={0x0bf,0x86,0x0db,0x0cf,0x0e6,0x0ed,0x0fd,0x87,0x0ff,0x0ef,0x39};//个位带小数点字码表 unsigned char code wei[]={0x0fe,0x0fd,0x0fb,0x0f7}; uchar data disdata[5]; uint tvalue;//温度值 uchar tflag;//温度正负标志 /******************************ds1820程序***************************************/ void delay_18B20(unsigned int i)//延时1微秒 { while(i--); } void ds1820rst()/*ds1820复位*/ { unsigned char x=0; DQ = 1; //DQ复位 delay_18B20(4); //延时 DQ = 0; //DQ拉低 delay_18B20(100); //精确延时大于480us DQ = 1; //拉高 delay_18B20(40); } uchar ds1820rd()/*读数据*/ { unsigned char i=0; unsigned char dat = 0; for (i=8;i>0;i--) { DQ = 0; //给脉冲信号 dat>>=1; DQ = 1; //给脉冲信号 if(DQ) dat|=0x80; delay_18B20(10);

LSMW操作手册

3.1.2通过事务录制工具实现(Recording) 3.1.2.1创建LSMW数据传输元素 本例中我们在原有项目及子项目的基础上创建对象。 (1)在已有项目下创建对象,将关标定位到Object (图3-52),点击(新建)创建新对象,本例中的对象名称及说明如图3-53所示。 图3-52 图3-53 (2)单击LSMW对象创建完毕。 (3)单击(执行)或回车,则进入LSMW执行步骤界面,这个界面列出了当前LSMW对象的所有操作步骤(图3-54)。

(图3-54) 3.1.2.2定义源数据结构和数据格式转换规则 1、维护对象属性 (1)在图3-54所示的执行步骤界面中双击第一个步骤名(Maintain Object Attributes),即进入维护对象属性界面(图3-55)。 (2)在此选择第二种方式Batch Input Recording,然后点击。出现图3-56,我们 可以看到这个项目中已经存在的Recording。

(图3-55) (图3-56) (3)单击,出现新建Recording见面(用于录制我们需要的操作),本例中详见图3-57所示

(图3-57) (4)单击,在出现的对话框中输入所需做操作的事务代码,本例中为:XK06(图3-58) (图3-58) (5)单击,接下来的操作和相关事务的前台操作是一样的。详见图3-59至3-60 (图3-59)

(图3-60) (6)事务录制完成后,单击(保存),出现图3-61 (图3-61) (7)选择,即可分配SAP中相应的字段名及其字段描述(图3-62)

(图3-62) (8)单击,然后单击,直到退回到维护对象属性界面,在Recording字段中输入刚刚创建的Recording:XK06D(图3-63) (图3-63) (9)单击(保存),然后返回到LSMW执行步骤界面。

LSMW操作手册(简单实例)

LSMW使用手册 为了明确LSMW的使用,使LSMW能够成为SAP顾问最实用的导数工具,针对BATCH INPUT方式编写如下操作说明。 第一步:输入事务代码LSMW,进入如下界面: LSMW_图1 点击“新建”,即图片。出现如下界面: 在“project”中输入要创建的名称(自己根据需要来命名),如输入“CREAT9”,在“subproject”中输入“CREAT9”,在“Description”中输入“CREAT9”然后回车: 依次输入相关项,然后点击或回车,点击运行按键,进入如下界面:

双击第一行“Maintain Object Attributes”,进入 点击红色圆圈,界面变为:

下界面: 点击上图中的新建图标,在界面中输入相应的“Recording”“Description”项,“Owner” 项一般采用默认值,输入完毕后,如下图 点击,在弹出的相应的界面中,输入事务代码,本例选为:MM01(创建物料主数据),回车,则进入创建物料主数据界面,开始根据MM01进行创建物料主数据操作的录屏,创 建物料主数据完毕后,进入如下界面:

重复录屏 注:若在录屏过程中,缺少字段,可以用“Repeat Recording”来重复录屏。 下面一步是最重要的,需要对界面中粉红色标识的地方进行设置(如黑框所示区域),这一步的设置关系到后来的批量数据导入正确与否。在设置的过程中要针对每一项,即每一块红色区域都需要进行,设置的含义分为:Default——设置为必输项,Reset——对设置为必输项进行反冲,Screen Field——删除不必要的输入。不做任何修改的——默认值,由系统自动带出。 设置全部完毕后,保存,返回到如下界面: 点击红色圆圈,自动填入CREAT9,保存,后退,返回界面LSMW_图2。到此,第一步设置完成。 第二步: 与第一步相同,双击“Maintain Source Structures ”进入设置界面,点击“修改”图标,

ds18b20 单片机数码管显示原理图和程序

最近天气热了,想要是做个能显示温度的小设备就好了,于是想到DIY个电子温度计,网上找了很多资料,结合自己的材料,设计了这个用单片机控制的实时电子温度计。作为单片机小虾的我做这个用了2天时间,当然是下班后,做工不行见谅了。 主要元件用到了单片机STC89C54RD+,DB18B20温度传感器,4为共阳数码管,PNPS8550三极管等。 先上原理图: 洞洞板布局图: 然后就是实物图了: 附上源程序:程序是别人写的,我只是自己修改了下,先谢谢原程序者的无私奉献。 #include"reg52.h" #define uchar unsigned char #define uint unsigned int sbit DQ=P3^4; //温度数据口 sbit wx1=P2^0; //位选1 sbit wx2=P2^1; //位选2 sbit wx3=P2^2; //位选3 sbit wx4=P2^3; //位选4 unsigned int temp, temp1,temp2, xs; uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99, //共阳数码管 0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6};

/******延时程序*******/ void delay1(unsigned int m) { unsigned int i,j; for(i=m;i>0;i--) for(j=110;j>0;j--); } void delay(unsigned int m) //温度延时程序 { while(m--); } void Init_DS18B20() { unsigned char x=0; DQ = 1; //DQ复位ds18b20通信端口 delay(8); //稍做延时 DQ = 0; //单片机将DQ拉低 delay(80); //精确延时大于480us DQ = 1; //拉高总线 delay(4); x=DQ; //稍做延时后如果x=0则初始化成功x=1则初始化失败delay(20); } /***********ds18b20读一个字节**************/ uchar ReadOneChar() { unsigned char i=0; unsigned char dat = 0; for (i=8;i>0;i--) { DQ = 0; // 高电平拉成低电平时读周期开始 dat>>=1; DQ = 1; // 给脉冲信号 if(DQ) dat|=0x80; //

DS18B20中文资料

第一部分:DS18B20的封装和管脚定义 首先,我们来认识一下DS18B20这款芯片的外观和针脚定义,DS18B20芯片的常见封装为TO-92,也就是普通直插三极管的样子,当然也可以找到以SO(DS18B20Z)和μSOP(DS18B20U)形式封装的产品,下面为DS18B20各种封装的图示及引脚图。 了解了这些该芯片的封装形式,下面就要说到各个管脚的定义了,如下表即

为该芯片的管脚定义: 上面的表中提到了一个“奇怪”的词——“寄生电源”,那我有必要说明一下了,DS18B20芯片可以工作在“寄生电源模式”下,该模式允许DS18B20工作在无外部电源状态,当总线为高电平时,寄生电源由单总线通过VDD 引脚,此时DS18B20可以从总线“窃取”能量,并将“偷来”的能量储存到寄生电源储能电容(Cpp)中,当总线为低电平时释放能量供给器件工作使用。所以,当DS18B20工作在寄生电源模式时,VDD引脚必须接地。 第二部分:DS18B20的多种电路连接方式 如下面的两张图片所示,分别为外部供电模式下单只和多只DS18B20测温系统的典型电路连接图。 (1)外部供电模式下的单只DS18B20芯片的连接图

(2)外部供电模式下的多只DS18B20芯片的连接图 这里需要说明的是,DS18B20芯片通过达拉斯公司的单总线协议依靠一个单线端口通讯,当全部器件经由一个三态端口或者漏极开路端口与总线连接时,控制线需要连接一个弱上拉电阻。在多只DS18B20连接时,每个DS18B20都拥有一个全球唯一的64位序列号,在这个总线系统中,微处理器依靠每个器件独有的64位片序列号辨认总线上的器件和记录总线上的器件地址,从而允许多只DS18B20同时连接在一条单线总线上,因此,可以很轻松地利用一个微处理器去控制很多分布在不同区域的DS18B20,这一特性在环境控制、探测建

DS18B20温度显示程序

DS18B20传感器温度数码管显示 #include #include<1820twj.h> //传感器DS18B20 #include //字符操作库 sbit g1=P2^7; sbit g2=P2^6; sbit g3=P2^5; sbit g4=P2^4; sbit lv=P2^2; sbit jin=P3^3; //进 sbit jia=P3^4; //加 sbit jian=P3^5; //减 uint shiwen; uint zuigao=30; //最高30度 uint zuidi=20; //最低20度 //*键盘调节/ uchar flag=0; //记录第一个按键次数flag=0正常1最高2最低 uchar flag2=0; //记录第四个按键次数flag2=0正常1调节小时2调节分钟uchar tableshu[]={0x28,0xeb,0x32,0xa2,0xe1,0xa4,0x24,0xea,0x20,0xe0,0xff ,0xf7 }; uchar tableshudi[]={0x08,0xcb,0x12,0x82,0xc1,0x84,0x04,0xca,0x00,0xc0,0xff }; void main() {uchar TL; //储存暂存器的温度低位 uchar TH; //储存暂存器的温度高位 uint TN; //储存温度的整数部分 uchar TD; //储存温度的小数部分 uchar ba,sh,ge,di,ba1,sh1,ge1,di1; bit flag1; //判断显示正负0负1正 delay1(5); //延时5ms给硬件一点反应时间 while(1) //不断检测并显示温度 { init();//读温度准备 if(flag1==1) dis(ba,sh,ge,di); else dis(11,sh,ge,di); TL=ReadOneChar(); //先读的是温度值低位 TH=ReadOneChar(); //接着读的是温度值高位 if((TH&0xf8)!=0x00)//判断高五位得到温度是负 { flag1=0; TL=~TL; //取反 TH=~TH; //取反 TL=TL+1; //低位加1 TN=(TH*256+TL)*0.625; //实际温度值10倍=(TH*256+TL)*0.625, if(TN%160==0) TN=TN+160; sh=TN/100%10; ge=TN/10%10; di=TN%10;

使用LSMW的标准BATCH INPUT程序批量导入BOM实操截图说明

使用LSMW的标准BATCH INPUT程序批量导入BOM全功略 作者:ZCHARMING 作者的博克:https://www.doczj.com/doc/342382292.html, ZCHARMING的SAP实务与研究QQ群:7733372 (这个是真正自己写的全功略哦,不像那个ECC6 IDES安装全功略只是我给原作加上附注,尽管如此,功劳还是不小的,呵呵) 要批量导入BOM确实是有很多方法,但是:如果用BDC程序,要求助于ABAP程序员,这个有点令人气馁!按照SAP的推荐,最佳选择是用LSMW的标准程序。我就根据这一点,去弄我擅长的LSMW。但这次碰上了很莫名的问题,首先是在SPECIFY FILES时,CONVERTED FILE那里一定要给出逻辑文件路径和逻辑文件名(可以用TC:FILE 配置),因为以前没弄过BATCH INPUT的,只弄过DERECT INPUT和RECORDING方法,所以不知道,查了资料才知道,在双击CONVERTED FILE文件名,随便填上逻辑文件路径和名称后,LSMW可以创建他们,不需要用FILE去配置的。这一关过了,然后到CREATE BATCH INPUT SESSION FOR BOMS这一步时,就提示E29 811 TRANSACTION NOT SURPORT 这样的错误信息,无法生成批导入任务。这个问题消耗了我不少时间,查了很多SAP NOTE,问了几个SAP顾问,都不明所以。奇怪的是,连我们顾问公司的ABAPER高手JIM也不知道,郁闷啊!好了,今天突然想到一个SAP NOTE里面不是提到TC不支持小写字母么?呵呵,一试真的是这个问题啊。终于解决啦!为了显摆一下,所以弄这个文档出来供大家参考,以后也不用为了BOM求人于ABAPER 了,呵呵! 第一幅图,这个简单,不用说明了。 图1 第二幅图, 图2 这个是BOM的结构,看到是上下两层啦,很好理解的。 第三幅图,这个是导入BOM所用的字段,但是注意,BOMHEAD应该有个识别符H,BOMITEM应该有个识别符I。双击这两个字段就可以设置了。这两个字段是自己额外加的,在录相时是录不到的。其他字段都可以先用录相得到。基本操作可以看LSMW魔鬼功略或

DS18B20 测温程序完全解读

DS18B20 测温程序完全解读 测温, 程序, 解读 硬件:51板 (1)单线ds18b20接P2.2 (2)使用外部电源给ds18b20供电,没有使用寄生电源奥 软件: Kei uVision 2 刚开始对时序把握不好,可是在论坛里没找到比较详细的解释,所以俺倒塌了这个东东,就把俺的经验贴大家参考,呵呵…… 如有错误请指正 #include "reg52.h" #include "intrins.h" #define uchar unsigned char #define uint unsigned int sbit ds=P2^2; sbit dula=P2^6; sbit wela=P2^7; uchar flag ; uint temp; //参数temp一定要声明为int 型 uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //不带小数点数字编码 uchar code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd, 0x87,0xff,0xef}; //带小数点数字编码 /*延时函数*/ void TempDelay (uchar us) { while(us--); } void delay(uint count) //延时子函数 { uint i; while(count) { i=200; while(i>0) i--; count--; }

} /*串口初始化,波特率9600,方式1 */ void init_com() { TMOD=0x20; //设置定时器1为模式2 TH1=0xfd; //装初值设定波特率 TL1=0xfd; TR1=1; //启动定时器 SM0=0; //串口通信模式设置 SM1=1; // REN=1; //串口允许接收数据 CON=0; //波特率不倍频 // SMOD=0; //波特率不倍频 // EA=1; //开总中断 //ES=1; //开串行中断 } /*数码管的显示*/ void display(uint temp) { uchar bai,shi,ge; bai=temp/100; shi=temp%100/10; ge=temp%100%10; dula=0; 0=table[bai]; //显示百位 dula=1; //从0到1,有个上升沿,解除锁存,显示相应段dula=0; //从1到0再次锁存 wela=0; 0=0xfe; wela=1; wela=0; delay(1); //延时约2ms P0=table1[shi]; //显示十位 dula=1; dula=0;

温度传感器DS18B20工作原理以及引脚图

温度传感器: DS18B20是DALLAS公司生产的一线式数字温度传感器,具有3引脚TO-92小体积封装形式;温度测量范围为-55℃~+125℃,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃,被测温度用符号扩展的16位数字量方式串行输出;其工作电源既可在远端引入,也可采用寄生电源方式产生;多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。以上特点使DS18B20非常适用于远距离 多点温度检测系统。 2 DS18B20的内部结构 DS18B20内部结构如图1所示,主要由4部分组成:64位ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20的管脚排列如图2所示,DQ为数字信号输入/输出端;GND为电源地;VDD为外接供电电源输入端(在寄生电源 接线方式时接地,见图4)。 ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码,每个DS18B20的64位序列号均不相同。64位ROM的排的循环冗余校验码(CRC=X8+X5+X4+

1)。ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。 图2DS18B20的管脚排列 DS18B20中的温度传感器完成对温度的测量,用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S 为符号位。例如+125℃的数字输出为07D0H,+25.0625℃的数字输出为0191H,-25.0625℃的数字输出为FF6FH,-55℃的数字输出为FC90H。 温度值高字节 高低温报警触发器TH和TL、配置寄存器均由一个字节的

DS18B20的温度读取和液晶显示

TX-1开发板DS18B20的温度读取和液晶显示 #include #include #define uchar unsigned char #define uint unsigned int uchar code digit[10]={"0123456789"}; uchar code error[]={"Error!Check!"}; uchar time; uchar TL,TH,TN,TD; sbit dula=P2^6; sbit wela=P2^7; sbit lcdrs=P3^5; sbit lcden=P3^4; sbit DQ=P2^2; void delayus(uint z); void delay1ms(); void delaynms(uchar n); void lcd_init(); void lcd_wc(uchar com); void lcd_wd(uchar dat); bit Init_DS18B20(); void display_error(); void display_dot(); void display_temp1(uchar x); void display_temp2(uchar x); WriteOneChar(uchar dat); uchar ReadOneChar(void); void ReadyReadTemp(); void main() { lcd_init(); delaynms(5); display_dot(); while(Init_DS18B20()==1) { display_error(); } while(1) //不断检测并显示温度 { delaynms(100); ReadyReadTemp(); //读温度准备 TL=ReadOneChar(); //先读的是温度值低位 TH=ReadOneChar(); //接着读的是温度值高位

相关主题
文本预览
相关文档 最新文档