电子测温.docx

上传人:b****5 文档编号:29046932 上传时间:2023-07-20 格式:DOCX 页数:37 大小:24.55KB
下载 相关 举报
电子测温.docx_第1页
第1页 / 共37页
电子测温.docx_第2页
第2页 / 共37页
电子测温.docx_第3页
第3页 / 共37页
电子测温.docx_第4页
第4页 / 共37页
电子测温.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

电子测温.docx

《电子测温.docx》由会员分享,可在线阅读,更多相关《电子测温.docx(37页珍藏版)》请在冰豆网上搜索。

电子测温.docx

电子测温

B电子园收集

DS18B20时序

Author:

exploer

CIEE,CAU2008-9-16:

本文档参照Maxim公司DS18B20的Datasheet而完成。

其中,加了灰框的部分为

原文档内容,其中英文部分为官方文档内容,中文部分为本人的翻译。

限于本人水

平,本文档可能存在错误或者让人误解的内容,对于因此引起的一切问题作者

(exploer,CIEE-CAU)概不负责。

INITIALIZATIONPROCEDURE—RESETANDPRESENCEPULSES

初始化序列——复位和存在脉冲

AllcommunicationwiththeDS18B20beginswithaninitializationsequencethat

consistsofaresetpulsefromthemasterfollowedbyapresencepulsefromtheDS18B20.

ThisisillustratedinFigure13.WhentheDS18B20sendsthepresencepulseinresponse

tothereset,itisindicatingtothemasterthatitisonthebusandreadytooperate.

DS18B20的所有通信都由由复位脉冲组成的初始化序列开始。

该初始化序列由主

机发出,后跟由DS18B20发出的存在脉冲(presencepulse)。

下图(插图13,即如

下截图)阐述了这一点。

当发出应答复位脉冲的存在脉冲后,DS18B20通知主机它

在总线上并且准备好操作了。

Duringtheinitializationsequencethebusmastertransmits(TX)theresetpulseby

pullingthe1-Wirebuslowforaminimumof480μs.Thebusmasterthenreleasesthe

busandgoesintoreceivemode(RX).

在初始化步骤中,总线上的主机通过拉低单总线至少480μs来产生复位脉冲。

后总线主机释放总线并进入接收模式。

Whenthebusisreleased,the5kΩpullupresistorpullsthe1-Wirebushigh.When

theDS18B20detectsthisrisingedge,itwaits15μsto60μsandthentransmitsapresence

pulsebypullingthe1-Wirebuslowfor60μsto240μs.

当总线释放后,5kΩ的上拉电阻把单总线上的电平拉回高电平。

当DS18B20检测

到上升沿后等待15到60us,然后以拉低总线60-240us的方式发出存在脉冲。

如文档所述,主机将总线拉低最短480us,之后释放总线。

由于5kΩ上拉电阻的

作用,总线恢复到高电平。

DS18B20检测到上升沿后等待15到60us,发出存在脉冲:

拉低总线60-240us。

至此,初始化和存在时序完毕。

B电子园收集

根据上述要求编写的复位函数为:

首先是延时函数:

(由于DS18B20延时均以15us为单位,故编写了延时单位为

15us的延时函数,注意:

以下延时函数晶振为12MHz)

/*

************************************

函数:

Delayxus_DS18B20

功能:

DS18B20延时函数

参数:

t为定时时间长度

返回:

说明:

延时公式:

15n+15(近似),晶振12Mhz

******************************************

*/

voidDelayxus_DS18B20(unsignedintt)

{

for(t;t>0;t--)

{

_nop_();_nop_();_nop_();_nop_();

}

_nop_();_nop_();

}

延时函数反汇编代码(方便分析延时公式)

C:

0x00317F01MOVR7,#0x01

C:

0x00337E00MOVR6,#0x00

C:

0x00351206A6LCALLdelayxus(C:

06A6)

38:

voidDelayxus_DS18B20(unsignedintt)

39:

{

40:

for(t;t>0;t--)

C:

0x06A6D3SETBC

C:

0x06A7EFMOVA,R7

C:

0x06A89400SUBBA,#0x00

C:

0x06AAEEMOVA,R6

C:

0x06AB9400SUBBA,#0x00

C:

0x06AD400BJCC:

06BA

41:

{

42:

_nop_();_nop_();_nop_();_nop_();

C:

0x06AF00NOP

C:

0x06B000NOP

C:

0x06B100NOP

C:

0x06B200NOP

43:

}

C:

0x06B3EFMOVA,R7

C:

0x06B41FDECR7

C:

0x06B570EFJNZDelayxus_DS18B20(C:

06A6)B电子园收集

C:

0x06B71EDECR6

C:

0x06B880ECSJMPDelayxus_DS18B20(C:

06A6)

44:

_nop_();_nop_();

C:

0x06BA00NOP

C:

0x06BB00NOP

45:

}

C:

0x06BC22RET

分析上述反汇编代码,可知延时公式为15*(t+1)

/*

************************************

函数:

RST_DS18B20

功能:

复位DS18B20,读取存在脉冲并返回

参数:

返回:

1:

复位成功;0:

复位失败

说明:

拉低总线至少480us;可用于检测DS18B20工作是否正常

******************************************

*/

bitRST_DS18B20()

{

bitret="1";

DQ=0;/*拉低总线*/

Delayxus_DS18B20(32);/*为保险起见,延时495us*/

DQ=1;/*释放总线,DS18B20检测到上升沿后会发送存在脉冲*/

Delayxus_DS18B20(4);/*需要等待15~60us,这里延时75us后可以保证接受到

的是存在脉冲(如果通信正常的话)*/

ret=DQ;

Delayxus_DS18B20(14);/*延时495us,让ds18b20释放总线,避免影响到下一

步的操作*/

DQ=1;/*释放总线*/

return(~ret);

}

写时序:

READ/WRITETIMESLOTS

读写时隙

ThebusmasterwritesdatatotheDS18B20duringwritetimeslotsandreadsdata

fromtheDS18B20duringreadtimeslots.Onebitofdataistransmittedoverthe1-Wire

buspertimeslot.

主机在写时隙向DS18B20写入数据,并在读时隙从DS18B20读入数据。

在单总

线上每个时隙只传送一位数据。

WRITETIMESLOTS

写时间隙

Therearetwotypesofwritetimeslots:

“Write1”timeslotsand“Write0”timeslots.

ThebusmasterusesaWrite1timeslottowritealogic1totheDS18B20andaWrite0

timeslottowritealogic0totheDS18B20.AllwritetimeslotsmustbeaminimumofB电子园收集

60μsindurationwithaminimumofa1μsrecovery

timebetweenindividualwriteslots.Bothtypesofwritetimeslotsareinitiatedbythe

masterpullingthe1-Wirebuslow(seeFigure14).

有两种写时隙:

写“0”时间隙和写“1”时间隙。

总线主机使用写“1”时间隙向

DS18B20写入逻辑1,使用写“0”时间隙向DS18B20写入逻辑0.所有的写时隙必须有

最少60us的持续时间,相邻两个写时隙必须要有最少1us的恢复时间。

两种写时隙

都通过主机拉低总线产生(见插图14)。

TogenerateaWrite1timeslot,afterpullingthe1-Wirebuslow,thebusmastermust

releasethe1-Wirebuswithin15μs.Whenthebusisreleased,the5kΩpullupresistor

willpullthebushigh.TogenerateaWrite0timeslot,afterpullingthe1-Wirebuslow,

thebusmastermustcontinuetoholdthebuslowfor

thedurationofthetimeslot(atleast60μs).

为产生写1时隙,在拉低总线后主机必须在15μs内释放总线。

在总线被释放

后,由于5kΩ上拉电阻的作用,总线恢复为高电平。

为产生写0时隙,在拉低总线

后主机必须继续拉低总线以满足时隙持续时间的要求(至少60μs)。

TheDS18B20samplesthe1-Wirebusduringawindowthatlastsfrom15μsto60μs

afterthemasterinitiatesthewritetimeslot.Ifthebusishighduringthesampling

window,a1iswrittentotheDS18B20.Ifthelineislow,a0iswrittentotheDS18B20.

在主机产生写时隙后,DS18B20会在其后的15到60us的一个时间窗口内采样单

总线。

在采样的时间窗口内,如果总线为高电平,主机会向DS18B20写入1;如果

总线为低电平,主机会向DS18B20写入0。

如文档所述,所有的写时隙必须至少有60us的持续时间。

相邻两个写时隙必须

要有最少1us的恢复时间。

所有的写时隙(写0和写1)都由拉低总线产生。

B电子园收集

为产生写1时隙,在拉低总线后主机必须在15us内释放总线(拉低的电平要持

续至少1us)。

由于上拉电阻的作用,总线电平恢复为高电平,直到完成写时隙。

为产生写0时隙,在拉低总线后主机持续拉低总线即可,直到写时隙完成后释放

总线(持续时间60-120us)。

写时隙产生后,DS18B20会在产生后的15到60us的时间内采样总线,以此来确

定写0还是写1。

满足上述要求的写函数为:

/*

************************************

函数:

WR_Bit

功能:

向DS18B20写一位数据

参数:

i为待写的位

返回:

说明:

总线从高拉到低产生写时序

******************************************

*/

voidWR_Bit(biti)

{

DQ=0;//产生写时序

_nop_();

_nop_();//总线拉低持续时间要大于1us

DQ=i;//写数据,0和1均可

Delayxus_DS18B20(3);//延时60us,等待ds18b20采样读取

DQ=1;//释放总线

}

/*

***********************************

函数:

WR_Byte

功能:

DS18B20写字节函数,先写最低位

参数:

dat为待写的字节数据

返回:

说明:

******************************************

*/

voidWR_Byte(unsignedchardat)

{

unsignedchari="0";

while(i++<8)

{

WR_Bit(dat&0x01);//从最低位写起

dat>>=1;//注意不要写成dat>>1

}

}读时序:

READTIMESLOTSB电子园收集

读时间隙

TheDS18B20canonlytransmitdatatothemasterwhenthemasterissuesreadtime

slots.Therefore,themastermustgeneratereadtimeslotsimmediatelyafterissuinga

ReadScratchpad[BEh]orReadPowerSupply[B4h]command,sothattheDS18B20can

providetherequesteddata.Inaddition,themastercangeneratereadtimeslotsafter

issuingConvertT[44h]orRecall

E2[B8h]commandstofindoutthestatusoftheoperationasexplainedintheDS18B20

FunctionCommandssection.

DS18B20只有在主机发出读时隙后才会向主机发送数据。

因此,在发出读暂存器

命令[BEh]或读电源命令[B4h]后,主机必须立即产生读时隙以便DS18B20提供所需

数据。

另外,主机可在发出温度转换命令T[44h]或Recall命令E2[B8h]后产生读时

隙,以便了解操作的状态(在DS18B20操作指令这一节会详细解释)。

Allreadtimeslotsmustbeaminimumof60μsindurationwithaminimumofa1μs

recoverytimebetweenslots.Areadtimeslotisinitiatedbythemasterdevicepullingthe

1-Wirebuslowforaminimumof1μsandthenreleasingthebus(seeFigure14).After

themasterinitiatesthereadtimeslot,theDS18B20willbegintransmittinga1or0on

bus.TheDS18B20transmitsa1byleavingthebushighandtransmitsa0bypullingthe

buslow.Whentransmittinga0,theDS18B20willreleasethebusbytheendofthetime

slot,andthebuswillbepulledbacktoitshighidlestatebythepullupresister.Output

datafromtheDS18B20isvalidfor15μsafterthefallingedgethatinitiatedthereadtime

slot.Therefore,themastermustreleasethebusandthensamplethebusstatewithin

15μsfromthestartoftheslot.

所有的读时隙必须至少有60us的持续时间。

相邻两个读时隙必须要有最少1us

的恢复时间。

所有的读时隙都由拉低总线,持续至少1us后再释放总线(由于上拉

电阻的作用,总线恢复为高电平)产生。

在主机产生读时隙后,DS18B20开始发送

0或1到总线上。

DS18B20让总线保持高电平的方式发送1,以拉低总线的方式表示

发送0.当发送0的时候,DS18B20在读时隙的末期将会释放总线,总线将会被上拉

电阻拉回高电平(也是总线空闲的状态)。

DS18B20输出的数据在下降沿(下降沿产

生读时隙)产生后15us后有效。

因此,主机释放总线和采样总线等动作要在15μs

内完成。

Figure15illustratesthatthesumofTINIT,TRC,andTSAMPLEmustbelessthan15μs

forareadtimeslot.

插图15表明了对于读时隙,TINIT(下降沿后低电平持续时间),TRC(上升沿)

和TSAMPLE(主机采样总线)的时间和要在15μs以内。

Figure16showsthatsystemtimingmarginismaximizedbykeepingTINITandTRCas

shortaspossibleandbylocatingthemastersampletimeduringreadtimeslotstowards

theendofthe15μsperiod.

插图16显示了最大化系统时间宽限的方法:

让TINIT和TRC尽可能的短,把主

机采样总线放到15μs这一时间段的尾部。

B电子园收集

由文档可知,DS18B20只有在主机发出读时隙时才能发送数据到主机。

因此,主

机必须在BE命令,B4命令后立即产生读时隙以使DS18B20提供相应的数据。

另外,

在44命令,B8命令后也要产生读时隙。

所有的读时隙必须至少有60us的持续时间。

相邻两个读时隙必须要有最少1us

的恢复时间。

所有的读时隙都由拉低总线,持续至少1us后再释放总线(由于上拉

电阻的作用,总线恢复为高电平)产生。

DS18B20输出的数据在下降沿产生后15us

后有效。

因此,释放总线和主机采样总线等动作要在15us内完成。

满足以上要求的函数为:

/*

***********************************

函数:

Read_Bit

功能:

向DS18B20读一位数据

参数:

返回:

biti

说明:

总线从高拉到低,持续至1us以上,再释放总线为高电平空闲状态产生

读时序

******************************************

*/

unsignedcharRead_Bit()

{

unsignedcharret;

DQ=0;//拉低总线

_nop_();_nop_();

DQ=1;//释放总线

_nop_();_nop_();

_nop_();_nop_();B电子园收集

ret=DQ;//读时隙产生7us后读取总线数据。

把总线的读取动作放在15us时

间限制的后面是为了保证数据读取的有效性

Delayxus_DS18B20(3);//延时60us,满足读时隙的时间长度要求

DQ=1;//释放总线

returnret;//返回读取到的数据

}

/*

************************************

函数:

Read_Byte

功能:

DS18B20读一个字节函数,先读最低位

参数:

返回:

读取的一字节数据

说明:

******************************************

*/

unsignedcharRead_Byte()

{

unsignedchari;

unsignedchardat="0";

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

{

dat>>=1;//先读最低位

if(Read_Bit())

dat|=0x80;

}

return(dat);

}

/*

************************************

函数:

Start_DS18B20

功能:

启动温度转换

参数:

返回:

说明:

复位后写44H命令

******************************************

*/

voidStart_DS18B20()

{

DQ=1;

RST_DS18B20();

WR_Byte(0xcc

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1