久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1921|回復: 2
打印 上一主題 下一主題
收起左側

STM32F1與DS18B20仿真監測溫度,開始仿真后,要等一會才可以讀出準確溫度是怎么回事?

[復制鏈接]
跳轉到指定樓層
樓主
用Proteus仿真時,stm32f103R6在讀取 ds18b20 的溫度時,溫度總是過一會才可以讀出準確溫度,但是dht11在仿真時就可以直接讀出有沒有知道原因的大佬指點一下

如下圖所示

未顯示準確溫度


顯示準確溫度

監測ds18b20單片機代碼:
  1. #include "ds18b20.h"
  2. #include "delay.h"

  3. void DS18B20_Rst(void)
  4. {                 
  5.         DS18B20_IO_OUT();         //SET PG11 OUTPUT
  6.     DS18B20_DQ_OUT=0
  7.     my_delay_us(1200);
  8.     DS18B20_DQ_OUT=1;         //DQ=1
  9.         my_delay_us(20);
  10. }
  11. u8 DS18B20_Check(void)
  12. {   
  13.         u8 retry=0;
  14.         DS18B20_IO_IN();        //SET PG11 INPUT
  15.     while (DS18B20_DQ_IN&&retry<200)
  16.         {
  17.                 retry++;
  18.                 my_delay_us(5);
  19.         };
  20.         if(retry>=200)return 1;
  21.         else retry=0;
  22.     while (!DS18B20_DQ_IN&&retry<240)
  23.         {
  24.                 retry++;
  25.                 my_delay_us(5);
  26.         };
  27.         if(retry>=240)return 1;            
  28.         return 0;
  29. }
  30. u8 DS18B20_Read_Bit(void)         
  31. {
  32.     u8 data;
  33.         DS18B20_IO_OUT();        //SET PG11 OUTPUT
  34.     DS18B20_DQ_OUT=0;
  35.         my_delay_us(4);
  36.     DS18B20_DQ_OUT=1;
  37.         DS18B20_IO_IN();        //SET PG11 INPUT
  38.         my_delay_us(30);
  39.         if(DS18B20_DQ_IN)data=1;
  40.     else data=0;         
  41.     my_delay_us(140);
  42.     return data;
  43. }
  44. u8 DS18B20_Read_Byte(void)     
  45. {        
  46.     u8 i,j,dat;
  47.     dat=0;
  48.         for (i=1;i<=8;i++)
  49.         {
  50.         j=DS18B20_Read_Bit();
  51.         dat=(j<<7)|(dat>>1);
  52.     }                                                   
  53.     return dat;
  54. }
  55. void DS18B20_Write_Byte(u8 dat)     
  56. {            
  57.     u8 j;
  58.     u8 testb;
  59.         DS18B20_IO_OUT();        //SET PG11 OUTPUT;
  60.     for (j=1;j<=8;j++)
  61.         {
  62.         testb=dat&0x01;
  63.         dat=dat>>1;
  64.         if (testb)
  65.         {
  66.             DS18B20_DQ_OUT=0;        // Write 1
  67.             my_delay_us(4);                           
  68.             DS18B20_DQ_OUT=1;
  69.             my_delay_us(140);            
  70.         }
  71.         else
  72.         {
  73.             DS18B20_DQ_OUT=0;        // Write 0
  74.             my_delay_us(140);            
  75.             DS18B20_DQ_OUT=1;
  76.             my_delay_us(4);                          
  77.         }
  78.     }
  79. }
  80. void DS18B20_Start(void)
  81. {                                                                  
  82.     DS18B20_Rst();           
  83.         DS18B20_Check();         
  84.     DS18B20_Write_Byte(0xcc);        // skip rom
  85.     DS18B20_Write_Byte(0x44);        // convert
  86. }
  87. u8 DS18B20_Init(void)
  88. {
  89.          GPIO_InitTypeDef  GPIO_InitStructure;
  90.          
  91.          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE)
  92.         
  93.          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;                                //PORTC.11 íÆíìêä3ö
  94.          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  
  95.          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  96.          GPIO_Init(GPIOC, &GPIO_InitStructure);

  97.          GPIO_SetBits(GPIOC,GPIO_Pin_11);    //êä3ö1

  98.         DS18B20_Rst();

  99.         return DS18B20_Check();
  100. }
  101. short DS18B20_Get_Temp(void)
  102. {
  103.     u8 temp;
  104.     u8 TL,TH;
  105.         short tem;
  106.     DS18B20_Start ();                          // ds1820 start convert
  107.     DS18B20_Rst();
  108.     DS18B20_Check();         
  109.     DS18B20_Write_Byte(0xcc);        // skip rom
  110.     DS18B20_Write_Byte(0xbe);        // convert            
  111.     TL=DS18B20_Read_Byte();         // LSB   
  112.     TH=DS18B20_Read_Byte();         // MSB  
  113.                      
  114.     if(TH>7)
  115.     {
  116.         TH=~TH;
  117.         TL=~TL;
  118.         temp=0;
  119.     }else temp=1;
  120.     tem=TH
  121.     tem<<=8;   
  122.     tem+=TL;                                       
  123.     tem=(float)tem*0.625;            
  124.         if(temp)return tem;                 
  125.         else return -tem;   
  126. }
復制代碼




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:743781 發表于 2022-5-10 23:56 | 只看該作者
不發全部的 怎么看的出
回復

使用道具 舉報

板凳
ID:883242 發表于 2022-5-11 00:28 | 只看該作者
既然是仿真,就別計較太多了。你要是用實物搭出這種效果,才有解決的意義。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精彩视频 | 国产xxxx搡xxxxx搡麻豆 | 亚洲永久| 久久久精品在线 | 福利社午夜影院 | 精品国产伦一区二区三区观看体验 | 色婷婷一区| 国产麻豆一区二区三区 | 在线免费视频一区 | 神马久久春色视频 | 中国大陆高清aⅴ毛片 | 综合激情av | 中日韩av| 一级a爱片久久毛片 | 色爱av| 日韩1区2区 | 天天视频成人 | 日本不卡一区二区三区 | 国产乱码精品一区二区三区忘忧草 | 国产一区二区三区四区 | 日本黄色一级片视频 | 欧洲一区二区视频 | 免费的av网站 | 中文字幕免费视频 | 国产欧美一区二区三区久久手机版 | 中文字幕视频在线免费 | 日本亚洲精品成人欧美一区 | 精品日韩| 久久免费小视频 | 国产免费一二三区 | 在线观看黄色电影 | 中国三级黄色录像 | 在线看无码的免费网站 | 亚洲成人一级 | 粉嫩国产精品一区二区在线观看 | 午夜影院网站 | 欧美成人一区二免费视频软件 | 91亚洲精 | 97国产成人 | 99视频| h网站在线观看 |