2、读暂存命令【BEH】
这个命令由字节0读取9个暂存器内容,如果不需要读取所有暂存内容,可随时输出复位脉冲终止读取过程
3、转换温度命令【44H】
这个命令启动温度转换过程。转换温度时DS18B20保持空闲状态,此时如果单片机发出读命令, DS18B20将输出0直到转换完成,转换完成后将输出1。
流程图: 主程序 设置DS18B20工作方式初始化写0CCH写04EH写75写0写7FH复位脉冲1、DQ=02、延时500us返回跳过ROM检测写命令(TH)=75(TL)=0(CONFIG)=7FHN初始化DQ=0延时480~960usDQ=1Yflag=0延时240us 工作方式设置DS18B20输出转换温度命令延时750ms DQ=0?N到100us?Yflag=1返回读取温度数据 计算温度值 显示温度值读取温度数据输出温度转换 命令初始化写0CCH跳过ROM检测写0BEH读暂存(TEMPL)←读取一字节数据(TEMPH)←读取一字节数据复位返回用复位脉冲结束读过程否则会一直读取到暂存第9字节 初始化 写0CCH 写44H 返回 TEMPL、TEMPH为定义好的存储单元 17
思考:通过前面的学习我们了解了DS18B20的控制命令和数据传输过程,但这些命令都是一个字节的数据,那么怎么通过单总线发送这些命令以及通过单总线读取12位温度转换数据呢?只能是用串行的方式一位一位的传输,那么掌握其读写时序就显得非常重要了。
写时隙
写时隙由DQ引脚的下降沿引起。18B20有写1和写0两种写时隙。所有写时隙必须持续至少60μs,两个时隙之间至少有1μs的恢复时间。DS18B20在DQ下降沿后15μs~60μs间采样DQ引脚,若此时DQ为高电平,则写入一位1,若此时DQ为低电平,则写入一位0,如下图所示。
所以,若想写入1,则单片机应先将DQ置低电平,15us后再将DQ置高电平,持续45μs;若要写入0,则将DQ置低电平,持续60μs。
DS18_SEND 说明:向DS18B20写入 DQ=1一字节数据子程序,入口 参数:A。调用方法,将 DQ=0要写入的命令送入A,然 后调用DS18_SEND即可 延时15μs 传输一字节数据时先传低位A带C右移一位(C←ACC.0) DQ=C
延时60μs
N 循环8次? Y
返回
18
读时隙
读时隙由DQ下降沿引起,持续至少1μs的低电平后释放总线(DQ置1)DS18B20的输出数据将在下降沿15μs后输出,此时单片机可读取1位数据。读时隙结束时要将DQ置1。所有读时隙必须持续至少60μs,两个时隙之间至少有1μs的恢复时间。
TINIT、TRC和TSAMPLE之和必须小于15μs,且应尽可能的将TINIT和TRC保持最小。
19
DS18_READDQ=1;A清零DQ=0NOP;空操作延时1usDQ=1延时15μsC←DQA带C右移一位(ACC.7←C)延时60μsDQ=1循环8次?Y返回N说明:由DS18B20读出一字节数据子程序,出口参数:A。调用方法,直接调用DS18_READ,执行完后读出的一字节数存储于累加器A中。读取温度数据的处理
读取的12为温度数据格式如图,高字节(MSB)的低四位和低字节(LSB)的高四位组成温度数据的整数部分,低字节的低四位为小数部分。负温度采用补码表示,对于接收的数据应做相应处理转换成10进制数显示。此处流程图省略,由同学们自己设计。
27
20
相关推荐: