《基于C51+Proteus仿真单片机》教学课件—11单片机应用设计.pptxVIP

《基于C51+Proteus仿真单片机》教学课件—11单片机应用设计.pptx

  1. 1、本文档共66页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第11章 单片机应用设计 ;11.1基于DS18B20设计数字温度计(1—Wire总线);引脚说明;DS18B20数据输出格式及温度计算 DS18B20读出的温度结果为2字节,读数以16位,符号扩展的二进制补码读数形式提供。所以需要把补码转换为原码,才能计算出真实的温度值。 这2个字节的数据格式如图11-2所示。;高8位前5位为符号位,表示温度是零上还是零下。高8位后三位和低8位中的高四位构成温度的整数部分。低2位的后四位为温度的小数部分。 正温度原码就是补码的本身,在12位分辨率的情况下: 温度值 = 读取值 x 0.0625 负温度原码是补码减一取反。在12位分辨率的情况下。 温度值 = -(读取值减一再取反)x 0.0625 ;注意:DS18B20上电复位时的温度值固定为+85℃.;DS18B20相关操作指令集合;软件设计;DS18B20初始化程序如下。 /******************************************************** *函数名 :Ds18b20Init *函数功能 :DS18B20初始化 *输入 :无 *输出 :初始化成功,返回1;初始化失败,返回0 ********************************************************/ bit Ds18b20Init(void){ bit flag; DQ = 1; //先将总线拉高,保持主从同步 for(time = 0 ; time 2;time++); // 短暂延时保持稳定 DQ = 0; //拉低总线 for(time = 0 ; time 200;time++);//总线低电平保持时间为480~960us DQ = 1; //释放总线 for(time = 0 ; time 10;time++);//释放总线后让DS18B20等待15~60us flag=DQ; for(time = 0 ; time 100;time++); DQ=1; return flag; //初始化标志位 0:初始化成功 1:初始化失败 } ;向DS18B20写入1字节数据 如图11-6向DS18B20写时序图,从时序图我们可以看出写周期时间范围为60~120us。进行写操作时先把总线电平拉低,表示写周期开始,写操作一共分为两种,一种写“0”操作,另一种写“1”操作。DS18B20的采样周期为15~45us。 写“0”操作:先将总线置为低电平保持15us,并在随后的45us时间段内DS18B20开始对总线电平进行采样,45us过后采样结束,写周期结束后释放总线。 写“1”操作:先将总线置为低点平保持至少1us,随后恢复总线置为高电平,15us过后DS18B20在45us时间段内开始对总线进行采样,写周期结束后释放总线。 ;DS18B20向DS18B20写入1字节数据程序如下。 /******************************************************** *函数功能 :向DS18B20写入1字节 *输入 :data void Ds18b20WriteByte( unsigned char data) { unsigned char i; DQ = 1; //先将总线拉高,保持主从同步 for(time = 0 ; time 2;time++); // 短暂延时保持稳定 for( i = 0; i 8 ; i++ ) { DQ = 0; //总线置为低电平 _nop_(); //低电平保持至少1us DQ = data 0x01 ; //开始写入第一位数据,从低位开始 for(time = 0 ; time 20;time++); //DS18B20采样时间不能少于45us DQ = 1; //释放总线 for(time = 0 ; time 1;time++); data=1; //数据右移一位,最高位补零 } for(time = 0 ; time 1;time++); } ;从DS18B20读出1字节数据 如图11-7从DS18B20读时序图。读周期期开始时,主机就要把总线电平拉低1us或2us,随后就得释放总线,在15us时范围内DS18B20把一位数据传送到总线上,因此主机必须在2~15us范围内对总线进行采样,15us后采样结束,直到读周期结束,释放总线,开始下一位数据传输。 ;从DS18B20读出1字节数据程序如下。 unsigned char Ds18b20ReadByte( void) { unsigned char i,data; DQ = 1; //先将总线拉高,

文档评论(0)

139****1983 + 关注
实名认证
文档贡献者

副教授、一级建造师持证人

一线教师。

领域认证该用户于2023年06月21日上传了副教授、一级建造师

1亿VIP精品文档

相关文档