时序图4DS18B20与单片机的典型接口设计图4以MCS-51系列单片机为例,画出了DS18B20与微处理器的典型连接。图4(a)中DS18B20采用寄生电源方式,其VDD和GND端均接地,图4(b)中DS18B20采用外接电源方式,其VDD端用3V~55V电源供电。
a)寄生电源工作方式
f(b)外接电源工作方式图4DS18B20与微处理器的典型连接图
假设单片机系统所用的晶振频率为12MHz,根据DS18B20的初始化时序、写时序和读时序,分别编写了3个子程序:INIT为初始化子程序,WRITE为写(命令或数据)子程序,READ为读数据子程序,所有的数据读写均由最低位开始。
DATEQUP10……INITCLREAINI10SETBDATMOVR2#200INI11CLRDATDJNZR2INI11;主机发复位脉冲持续3μs×200600μsSETBDAT;主机释放总线,口线改为输入MOVR2#30IN12DJNZR2INI12;DS18B20等待2μs×3060μsCLRCORLCDAT;DS18B20数据线变低(存在脉冲)吗?JCINI10;DS18B20未准备好,重新初始化MOVR6#80INI13ORLCDAT
fJCINI14;DS18B20数据线变高,初始化成功DJNZR6INI13;数据线低电平可持续3μs×80240μsSJMPINI10;初始化失败,重来INI14MOVR2#240IN15DJNZR2INI15;DS18B20应答最少2μs×240480μsRET;------------------------WRITECLREAMOVR3#8;循环8次,写一个字节WR11SETBDATMOVR4#8RRCA;写入位从A中移到CYCLRDATWR12DJNZR4WR12;等待16μsMOVDATC;命令字按位依次送给DS18B20MOVR4#20WR13DJNZR4WR13;保证写过程持续60μsDJNZR3WR11;未送完一个字节继续SETBDAT
fRET;------------------------READCLREAMOVR6#8;循环8次,读一个字节RD11CLRDATMOVR4#4NOP;低电平持续2μsSETBDAT;口线设为输入RD12DJNZR4RD12;等待8μsMOVCDAT;主机按位依次读入DS18B20的数据RRCA;读取的数据移入AMOVR5#30RD13DJNZR5RD13;保证读过程持续60μsDJNZR6RD11;读完一个字节的数据,存入A中SETBDATRET;------------------------主机控制DS18B20完成温度转换必须经过三个步骤:初始化、
fROM操作指令、存储器操作指令。必须先启动DS18B20开始转换,再读出温度转换值。假设一线仅挂接一个芯片,使用默认的12位转换精度,外接供电电源,可写出完成一次转换并读取温度值子程序GETWD。
GETWDLCALLINITMOVA#0CCHLCALLWRITE;发跳过ROM命令MOVA#44HLCALLWRITE;发启动转换命令LCALLINITMOVA#0CCH;发跳过ROM命令LCALLWRITEMOVA#0BEH;发读存储器命令LCALLWRITELCALLREADMOVWDLSBA;温度值低位字节送WDLSBLCALLREADMOVWDMSBA;温度值高位字节送WDMSBRET
f……
子程序GETWD读取的温度值高r