基于单片机的protues仿真毕业论文(8)

2020-06-18 20:45

该命令仅适用于总线上只有一个从机设备。它允许主机直接读出从机的64位ROM代码,而无须执行搜索ROM过程。如果该命令用于多节点,系统则必然发生数据冲突,因为每个从机设备都会响应该命令。 ③ 匹配ROM[ 55h]

匹配ROM命令跟随64位ROM代码,从而允许主机访问多节点系统中某个指定的从机设备。仅当从机完全匹配64位ROM代码时,才会响应主机随后发出的功能命令。其它设备将处于等待复位脉冲状态。 ④ 跳越ROM[CCh](仅适合于单节点)

主机能够采用该命令同时访问总线上的所有从机设备,而无须发出任何ROM代码信息。例如,主机通过在发出跳越ROM命令后跟随转换温度命令[44h],就可以同时命令总线上所有的DS18B20开始转换温度,这样大大节省了主机的时间。值得注意的是,如果跳越ROM命令跟随的是读暂存器〔BEh]的命令(包括其它读操作命令),则该命令只能应用于单节点系统,否则将由于多个节点都响应该命令而引起数据冲突。

⑤ 报警搜索「ECh](仅少数1一Wire器件支持)

除那些设置了报警标志的从机响应外,该命令的工作方式完全等同于搜索ROM命令。该命令允许主机设备判断那些从机设备发生了报警(如最近的测量温度过高或过低等)。同搜索ROM命令一样,在完成报警搜索循环后,主机必须返回至命令序列的第一步。

DS18B20在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求,只有严格遵守通讯协议才能保证数据传输的正确性和完整性。所有时序均以主机为Master,单总线器件为Slave,每次数据的传输均从主机启动写时序开始,如果要求单总线器件回送数据,则在写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。 ① DS18B20的复位时序

基于单片机的多温度检测系统的设计与protues仿真

图4.2 DS18B20复位时序 //该函数返回为0,表示有DS1820,否则没有 bit reset(void) { bit err; DQ=0;

//在数据线上产生600us的低电平

delay15(40); DQ=1;

//数据线拉高 //延时60us

//读取数据线状态,err=0:复位成功

delay15(4); err=DQ;

delay15(18); // err=1:复位失败 return(err); }

② DS18B20的读时序

图4.3 DS18B20读时序

DS18B20的读时序分读0时序和读1时序两个过程。读时序是主机先把单总线拉低,在之后的l5?s内必须释放单总线,以便将数据传输到单总线上。DS18B20完成一个读时序至少需要60?s。

unsigned char read_bit(void) { unsigned char i;

DQ = 0; _nop_(); _nop_(); DQ = 1;

// then return high

// 延时15μs

//将DQ 拉低开始读时间隙

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

}

return(DQ); // 返回 DQ 线上的电平值

uchar rdbyte(void) //从总线上读取一个字节 { uchar i; dat=0;

//读出数据初值为0

for(i=8;i>0;i--) //循环读8位(先低位,后高位) { dat=dat>>1; //读出数据先右移一位

DQ=0; //产生1us的负脉冲 _nop_();

//数据总线拉高

DQ=1;

delay15(1); //延时15us dat7=DQ;

//读取数据

delay15(4); //延时,为读下一位做准备 }

return(dat); }

③ DS18B20的写时序。

图4.4 DS18B20写0时序与写1时序

DS18B20的写时序也分为写0时序和写1时序两个过程。写0时序和写1时序的要求不同,写0时,单总线要被拉低至少60?s,保证DS18B20能够在15-45?s之间正确采样I/O总线上的“0”电平。写1时,单总线被拉低,在之后的15?s内必须释放单总线。

基于单片机的多温度检测系统的设计与protues仿真

void write_bit(char bitval) {

DQ = 0; _nop_(); _nop_();

if(bitval==1) DQ =1; delay(8);

// 如果写1,DQ 返回高电平

// 将DQ 拉低开始写时间隙

// 在时间隙内保持电平值,

DQ = 1; // Delay函数每次循环延时13μs,因此delay(8) = 105μs

}

void wrbyte(uchar d)//向总线写入一个字节 { uchar i; dat=d;

for(i=8;i>0;i--) //循环写8位(先低位,后高位) { DQ=0;

//产生15us的负脉冲

delay15(1); DQ=dat0;

//将当前数据位送数据线

//将下一位要写入的数据移到最低位 //延时15us

//数据线拉高,为写入下一位做准备

dat=dat>>1; delay15(1); DQ=1; } }

DS18B20复位后,就可以编程控制读到其内部RAM所采集到的温度值(通过P0.7),并且读取数据时低位在前,高位在后。读出数据后,需判断对应的温度是正值还是负值,当温度值为正值时,直接将二进制数转换为十进制温度值;当温度值为负值时先将二进制补码变为原码,再转换为十进制温度值。 本课题的温度测量与读取软件流程:

开始 延时 复位DS18B20 发出跳过ROM命令 发出温度转换命令 复位DS18B20 发出匹配ROM命令 发1个DS18B29序号 读温度值 存入存储器 N 复位DS18B20 发报警搜索命令 N 转换完毕 有温度超限否? 指向下一个DS18B20 Y 第n个DS18B20处理完? 报警输出

图4.5 温度测量程序流图

DSl8B20编程注意事项

(1) 温度换时间设置为750ms时,灵敏度会大大提高,在需要较高精度要求下建议使用,而且回复性很好;

(2) Dsl8B20的读写时序须经仔细调整,在反复的调试中找出合适的延时时间; (3) 在程序等待DS18B20发出的存在信号时,最好设置一个有限的等待时间,否则一旦有温度传感器损坏时,程序将进人无限等待的死循环中 4.4.3显示程序设计

根据系统的要求,单片机不仅要能接收到温度信号,还要将温度信号显示出来,使系统一目了然。液晶显示模块与数码管相比,显得更为专业、漂亮。液晶显示屏以其功耗低、体积小、显示内容丰富、超薄轻巧、使用方便等诸多优点,在仪器仪表、电子设备、家用电器等低功耗应用系统中得到越来越广泛的应用。


基于单片机的protues仿真毕业论文(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:腹透中心工作手册

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: