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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

DS18B20讀寫操作單片機程序詳解

[復制鏈接]
跳轉到指定樓層
樓主
ID:366214 發表于 2018-11-7 14:07 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
 一、DS18B20的初始化
  (1) 先將數據線置低電平“0”。
  (2) 延時(該時間要求的不是很嚴格,但是盡可能的短一點)
  (3) 數據線拉到低電平“0”。
  (4) 延時750微秒(該時間的時間范圍可以從480到960微秒)。
  (5) 數據線拉到高電平“1”。
  (6) 延時等待(如果初始化成功則在15到60毫秒時間之內產生一個由DS18B20所返回的低電平“0”。據該狀態可以來確定它的存在,但是應注意不能無限的進行等待,不然會使程序進入死循環,所以要進行超時控制)。
  (7) 若CPU讀到了數據線上的低電平“0”后,還要做延時,其延時的時間從發出的高電平算起(第(5)步的時間算起)最少要480微秒。
  (8) 將數據線再次拉高到高電平“1”后結束。
  二、 DS18B20的寫操作
  (1) 數據線先置低電平“0”。
  (2) 延時確定的時間為15微秒。
  (3) 按從低位到高位的順序發送字節(一次只發送一位)。
  (4) 延時時間為45微秒。
  (5) 將數據線拉到高電平。
  (6) 重復上(1)到(6)的操作直到所有的字節全部發送完為止。
  (7) 最后將數據線拉高。
  三、DS18B20的讀操作
  (1)將數據線拉高“1”。
  (2)延時2微秒。
  (3)將數據線拉低“0”。
  (4)延時15微秒。
  (5)將數據線拉高“1”。
  (6)延時15微秒。
  (7)讀數據線的狀態得到1個狀態位,并進行數據處理。
  (8)延時30微秒。
  四、DS18B20讀寫操作程序
  1.   //----------------------------------------------------------
  2.   // 模塊名稱:DS18B20.h
  3.   // 模塊功能:DS18B20 讀寫操作
  4.   //----------------------------------------------------------
  5.   sbit DS = P1^2;
  6.   //----------------------------------------------------------
  7.   // 函數名稱:void DelayTmp(unsigned int count)
  8.   // 函數功能:延時
  9.   //----------------------------------------------------------
  10.   void DelayTmp(unsigned int count)
  11.   {
  12.   unsigned int i;
  13.   while(count)
  14.   {
  15.   i=200;while(i》0)i--;
  16.   count--;
  17.   }
  18.   }
  19.   //----------------------------------------------------------
  20.   // 函數名稱:void DsReset(void)
  21.   // 函數功能:復位
  22.   //----------------------------------------------------------
  23.   void DsReset(void)
  24.   {
  25.   unsigned int i;
  26.   DS=0;
  27.   i=103; while(i》0)i--;
  28.   DS=1;
  29.   i=4;while(i》0)i--;
  30.   }
  31.   //----------------------------------------------------------
  32.   // 函數名稱:bit TmpReadBit(void)
  33.   // 函數功能:讀取一位
  34.   //----------------------------------------------------------
  35.   bit TmpReadBit(void)
  36.   {
  37.   unsigned int i;
  38.   bit dat;
  39.   DS=0;i++;
  40.   DS=1;i++;i++;
  41.   dat=DS;
  42.   i=8;while(i》0)i--;
  43.   return (dat);
  44.   }
  45.   //----------------------------------------------------------
  46.   // 函數名稱:unsigned char TmpRead(void)
  47.   // 函數功能:讀取一字節
  48.   //----------------------------------------------------------
  49.   unsigned char TmpRead(void)
  50.   {
  51.   unsigned char i,j,dat;
  52.   dat=0;
  53.   for(i=1;i《=8;i++)
  54.   {j=TmpReadBit();
  55.   dat=(j《《7)|(dat》》1); }
  56.   return(dat);
  57.   }
  58.   //----------------------------------------------------------
  59.   // 函數名稱:void TmpWriteByte(unsigned char dat)
  60.   // 函數功能:寫入一字節
  61.   //----------------------------------------------------------
  62.   void TmpWriteByte(unsigned char dat)
  63.   {
  64.   unsigned int i;
  65.   unsigned char j;
  66.   bit testb;
  67.   for(j=1;j《=8;j++)
  68.   {
  69.   testb=dat&0x01;
  70.   dat=dat》》1;
  71.   if(testb) //write 1
  72.   {
  73.   DS=0;
  74.   i++;i++;
  75.   DS=1;
  76.   i=8;while(i》0)i--;
  77.   }
  78.   else
  79.   {
  80.   DS=0; //write 0
  81.   i=8;while(i》0)i--;
  82.   DS=1;
  83.   i++;i++;
  84.   }
  85.   }
  86.   }
  87.   //----------------------------------------------------------
  88.   // 函數名稱:void TmpChange(void)
  89.   // 函數功能:溫度轉換
  90.   //----------------------------------------------------------
  91.   void TmpChange(void)
  92.   {
  93.   DsReset();
  94.   DelayTmp(1);
  95.   TmpWriteByte(0xcc);
  96.   TmpWriteByte(0x44);
  97.   }
  98.   //----------------------------------------------------------
  99.   // 函數名稱:unsigned int Tmp()
  100.   // 函數功能:獲取溫度
  101.   //----------------------------------------------------------
  102.   unsigned int Tmp()
  103.   {
  104.   float tt;
  105.   unsigned char a,b;
  106.   unsigned int temp;
  107.   DsReset();
  108.   DelayTmp(1);
  109.   TmpWriteByte(0xcc);
  110.   TmpWriteByte(0xbe);
  111.   a=TmpRead();
  112.   b=TmpRead();
  113.   temp=b;
  114.   temp《《=8;
  115.   temp=temp|a;
  116.   tt=temp*0.0625;
  117.   temp=tt*10+0.5;
  118.   return temp;
  119.   }
  120.   //----------------------------------------------------------
  121.   // 函數名稱:void RefreshTmp()
  122.   // 函數功能:刷新溫度
  123.   //----------------------------------------------------------
  124.   void RefreshTmp()
  125.   {
  126.   TmpChange();
  127.   DisplayTmp(Tmp());
  128.   }
復制代碼


溫度傳感器的操作.docx

22.27 KB, 下載次數: 26, 下載積分: 黑幣 -5

溫度

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

使用道具 舉報

沙發
ID:382454 發表于 2018-11-8 07:46 來自手機 | 只看該作者
寫字一個函數,寫字節又一個函數。沒有必要吧。
回復

使用道具 舉報

板凳
ID:681726 發表于 2020-1-5 21:45 | 只看該作者
學校要求做,我認真看了樓主的帖子,拋出疑問
初始化模塊呢?
讀寫函數也可以這么寫

//讀傳感器8位
unsigned char duzi(void)
{unsigned char i=0,dat=0;
for (i=8;i>0;i--)
{signal=0;//拉低
dat>>=1;//二進制數字位左移的同時延時1微秒
signal=1;
if(signal)
dat|=0x80;//按位或 ,搭配dat>>=1,逐步寫好8位信息
delay(4);}
return(dat);
}

另外回復1樓,讀函數和寫函數必須分開的,它和單片機是單線通信,不可能做到同時讀寫的。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品一区三区 | 一区二区三区欧美在线 | 黄网站涩免费蜜桃网站 | 成人在线影视 | 欧美日韩不卡 | 成人国产午夜在线观看 | 欧美偷偷操 | 久久91精品久久久久久9鸭 | 在线视频日韩精品 | 综合久久综合久久 | 成人亚洲在线 | 日本三级电影在线免费观看 | 中文字幕日韩一区 | 一呦二呦三呦国产精品 | 亚州中文字幕 | 成人毛片视频在线播放 | 欧美久久一区 | 丝袜美腿一区二区三区 | 久久黄色网 | 欧美性久久 | 久久i| 国产馆| 亚洲一区国产精品 | 亚洲欧洲在线视频 | 久久精品屋 | 毛片入口| 久久国产激情视频 | 欧美日韩国产在线观看 | 日韩欧美专区 | 视频一区二区在线观看 | 一区二区三区国产 | 欧美天堂 | 精品网站999www | 国产午夜精品久久久 | 日韩视频在线播放 | 人人爽人人草 | 国产农村妇女毛片精品久久麻豆 | 亚洲综合精品 | 中文字幕第十五页 | 日韩精品av一区二区三区 | 成人免费淫片aa视频免费 |