娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2024年12月17日(星期二)

正在發生

2019年12月17日 | DS18B20時序分析詳細步驟

發布者:創意火舞 來源: eefocus關鍵字:DS18B20  時序分析 手機看文章 掃描二維碼
隨時隨地手機看文章

  1、過程1、2是初始化過程,每次讀取都要初始化,否則18b20處于待機狀態,無法成功讀取。過程1:拉低信號線480-700us,使它復位,然后釋放總線15-60us,18b20會拉低總線60-240us,然后它釋放總線。所以初始化成功的一個標志就是能否讀到18b20這個先低后高的操作時序。


  (注意:黑色部分表示主機操作,藍色部分表示18b20操作,每次主機操作完成之后等待18b20狀態時,必須要釋放總線,比如將IO設置為高阻態什么的。否則18B20沒法把狀態寫到線上)


  2、過程3、4是寫1bit數據過程。過程3是寫0 ,過程4是寫1。過程3:拉低總線60us,然后抬高總線5us,完成。過程4:拉低總線5us,然后抬高總線60us,完成


  3、過程5、6是讀1bit過程。過程5是讀0,過程6是讀1。過程5、6:拉低總線5us,然后釋放總線,讀取總線,如果為0,則讀入0,如果為1,則讀入1。


  DS18B20時序


  初始化序列——復位和存在脈沖


  DS18B20的所有通信都由由復位脈沖組成的初始化序列開始。該初始化序列由主機發出,后跟由DS18B20發出的存在脈沖(presence pulse)。下圖(插圖13,即如下截圖)闡述了這一點。當發出應答復位脈沖的存在脈沖后,DS18B20通知主機它在總線上并且準備好操作了。

  在初始化步驟中,總線上的主機通過拉低單總線至少480μs來產生復位脈沖。然后總線主機釋放總線并進入接收模式。


  當總線釋放后,5kΩ的上拉電阻把單總線上的電平拉回高電平。當DS18B20檢測到上升沿后等待15到60us,然后以拉低總線60-240us的方式發出存在脈沖。


  如文檔所述,主機將總線拉低最短480us,之后釋放總線。由于5kΩ上拉電阻的作用,總線恢復到高電平。DS18B20檢測到上升沿后等待15到60us,發出存在脈沖:拉低總線60-240us。至此,初始化和存在時序完畢。


  根據上述要求編寫的復位函數為:


  首先是延時函數:(由于DS18B20延時均以15us為單位,故編寫了延時單位為15us的延時函數,注意:以下延時函數晶振為12MHz)


  /*


  ************************************


  函數:Delayxus_DS18B20


  功能:DS18B20延時函數


  參數:t為定時時間長度


  返回:無


  說明: 延時公式:15n+15(近似),晶振12Mhz


  ******************************************


  */


  voidDelayxus_DS18B20(unsigned int t)


  {


  for(t;t>0;t--)


  {


  _nop_();_nop_();_nop_();_nop_();


  }


  _nop_(); _nop_();


  }


  延時函數反匯編代碼(方便分析延時公式)


  C:0x0031 7F01 MOV R7,#0x01


  C:0x0033 7E00 MOV R6,#0x00


  C:0x0035 1206A6 LCALLdelayxus(C:06A6)


  38: voidDelayxus_DS18B20(unsigned int t)


  39: {


  40: for(t;t>0;t--)


  C:0x06A6 D3 SETB C


  C:0x06A7 EF MOV A,R7


  C:0x06A8 9400 SUBB A,#0x00


  C:0x06AA EE MOV A,R6


  C:0x06AB 9400 SUBB A,#0x00


  C:0x06AD 400B JC C:06BA


  41: {


  42:_nop_();_nop_();_nop_();_nop_();


  C:0x06AF 00 NOP


  C:0x06B0 00 NOP


  C:0x06B1 00 NOP


  C:0x06B2 00 NOP


  43: }


  C:0x06B3 EF MOV A,R7


  C:0x06B4 1F DEC R7


  C:0x06B5 70EF JNZDelayxus_DS18B20 (C:06A6)


  C:0x06B7 1E DEC R6


  C:0x06B8 80EC SJMPDelayxus_DS18B20 (C:06A6)


  44: _nop_(); _nop_();


  C:0x06BA 00 NOP


  C:0x06BB 00 NOP


  45: }


  C:0x06BC 22 RET


  分析上述反匯編代碼,可知延時公式為15*(t+1)


  /*


  ************************************


  函數:RST_DS18B20


  功能:復位DS18B20,讀取存在脈沖并返回


  參數:無


  返回:1:復位成功 ;0:復位失敗


  說明: 拉低總線至少480us ;可用于檢測DS18B20工作是否正常


  ******************************************


  */


  bit RST_DS18B20()


  {


  bit ret="1";


  DQ=0;/*拉低總線 */


  Delayxus_DS18B20(32);/*為保險起見,延時495us */


  DQ=1;/*釋放總線 ,DS18B20檢測到上升沿后會發送存在脈沖*/


  Delayxus_DS18B20(4);/*需要等待15~60us,這里延時75us后可以保證接受到的是存在脈沖(如果通信正常的話) */


  ret=DQ;


  Delayxus_DS18B20(14);/*延時495us,讓ds18b20釋放總線,避免影響到下一步的操作 */


  DQ=1;/*釋放總線 */


  return(~ret);


  }


  寫時序:


  主機在寫時隙向DS18B20寫入數據,并在讀時隙從DS18B20讀入數據。在單總線上每個時隙只傳送一位數據。


  寫時間隙


  有兩種寫時隙:寫“0”時間隙和寫“1”時間隙。總線主機使用寫“1”時間隙向DS18B20寫入邏輯1,使用寫“0”時間隙向DS18B20寫入邏輯0.所有的寫時隙必須有最少60us的持續時間,相鄰兩個寫時隙必須要有最少1us的恢復時間。兩種寫時隙都通過主機拉低總線產生(見插圖14)。

  為產生寫1時隙,在拉低總線后主機必須在15μs內釋放總線。在總線被釋放后,由于5kΩ上拉電阻的作用,總線恢復為高電平。為產生寫0時隙,在拉低總線后主機必須繼續拉低總線以滿足時隙持續時間的要求(至少60μs)。


  在主機產生寫時隙后,DS18B20會在其后的15到60us的一個時間窗口內采樣單總線。在采樣的時間窗口內,如果總線為高電平,主機會向DS18B20寫入1;如果總線為低電平,主機會向DS18B20寫入0。


  如文檔所述,所有的寫時隙必須至少有60us的持續時間。相鄰兩個寫時隙必須要有最少1us的恢復時間。所有的寫時隙(寫0和寫1)都由拉低總線產生。


  為產生寫1時隙,在拉低總線后主機必須在15us內釋放總線(拉低的電平要持續至少1us)。由于上拉電阻的作用,總線電平恢復為高電平,直到完成寫時隙。


  為產生寫0時隙,在拉低總線后主機持續拉低總線即可,直到寫時隙完成后釋放總線(持續時間60-120us)。


  寫時隙產生后,DS18B20會在產生后的15到60us的時間內采樣總線,以此來確定寫0還是寫1。


  滿足上述要求的寫函數為:


  /*


  ************************************


  函數:WR_Bit


  功能:向DS18B20寫一位數據


  參數:i為待寫的位


  返回:無


  說明: 總線從高拉到低產生寫時序


  ******************************************


  */


  void WR_Bit(bit i)


  {


  DQ=0;//產生寫時序


  _nop_();


  _nop_();//總線拉低持續時間要大于1us


  DQ=i;//寫數據 ,0和1均可


  Delayxus_DS18B20(3);//延時60us,等待ds18b20采樣讀取


  DQ=1;//釋放總線


  }


  /*


  ***********************************


  函數:WR_Byte


  功能:DS18B20寫字節函數,先寫最低位


  參數:dat為待寫的字節數據


  返回:無


  說明:無


  ******************************************


  */


  void WR_Byte(unsigned chardat)


  {


  unsigned chari="0";


  while(i++<8)


  {


  WR_Bit(dat&0x01);//從最低位寫起


  dat>>=1; //注意不要寫成dat>>1


  }


  }


  讀時序:


  DS18B20只有在主機發出讀時隙后才會向主機發送數據。因此,在發出讀暫存器命令 [BEh]或讀電源命令[B4h]后,主機必須立即產生讀時隙以便DS18B20提供所需數據。另外,主機可在發出溫度轉換命令T [44h]或Recall命令E 2[B8h]后產生讀時隙,以便了解操作的狀態(在 DS18B20操作指令這一節會詳細解釋)。


  所有的讀時隙必須至少有60us的持續時間。相鄰兩個讀時隙必須要有最少1us的恢復時間。所有的讀時隙都由拉低總線,持續至少1us后再釋放總線(由于上拉電阻的作用,總線恢復為高電平)產生。在主機產生讀時隙后,DS18B20開始發送0或1到總線上。DS18B20讓總線保持高電平的方式發送1,以拉低總線的方式表示發送0.當發送0的時候,DS18B20在讀時隙的末期將會釋放總線,總線將會被上拉電阻拉回高電平(也是總線空閑的狀態)。DS18B20輸出的數據在下降沿(下降沿產生讀時隙)產生后15us后有效。因此,主機釋放總線和采樣總線等動作要在15μs內完成。


  插圖15表明了對于讀時隙,TINIT(下降沿后低電平持續時間), TRC(上升沿)和TSAMPLE(主機采樣總線)的時間和要在15μs以內。


  插圖16顯示了最大化系統時間寬限的方法:讓TINIT 和TRC盡可能的短,把主機采樣總線放到15μs這一時間段的尾部。

  由文檔可知,DS18B20只有在主機發出讀時隙時才能發送數據到主機。因此,主機必須在BE命令,B4命令后立即產生讀時隙以使DS18B20提供相應的數據。另外,在44命令,B8命令后也要產生讀時隙。


  所有的讀時隙必須至少有60us的持續時間。相鄰兩個讀時隙必須要有最少1us的恢復時間。所有的讀時隙都由拉低總線,持續至少1us后再釋放總線(由于上拉電阻的作用,總線恢復為高電平)產生。DS18B20輸出的數據在下降沿產生后15us后有效。因此,釋放總線和主機采樣總線等動作要在15us內完成。


  滿足以上要求的函數為:


  /*


  ***********************************


  函數:Read_Bit


  功能:向DS18B20讀一位數據


  參數:無


  返回:bit i


  說明: 總線從高拉到低,持續至1us以上,再釋放總線為高電平空閑狀態產生讀時序


  ******************************************


  */


  unsigned char Read_Bit()


  {


  unsigned char ret;


  DQ=0;//拉低總線


  _nop_(); _nop_();


  DQ=1;//釋放總線


  _nop_(); _nop_();


  _nop_(); _nop_();


  ret=DQ;//讀時隙產生7 us后讀取總線數據。把總線的讀取動作放在15us時間限制的后面是為了保證數據讀取的有效性


  Delayxus_DS18B20(3);//延時60us,滿足讀時隙的時間長度要求


  DQ=1;//釋放總線


  return ret; //返回讀取到的數據


  }


  /*


  ************************************


  函數:Read_Byte


  功能:DS18B20讀一個字節函數,先讀最低位


  參數:無


  返回:讀取的一字節數據


  說明: 無


  ******************************************


  */


  unsigned char Read_Byte()


  {


  unsigned char i;


  unsigned chardat="0";


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


  {


  dat>>=1;//先讀最低位


  if(Read_Bit())


  dat|=0x80;


  }


  return(dat);


  }


  /*


  ************************************


  函數:Start_DS18B20


  功能:啟動溫度轉換


  參數:無


  返回:無


  說明: 復位后寫44H命令


  ******************************************


  */


  void Start_DS18B20()


  {


  DQ=1;


  RST_DS18B20();


  WR_Byte(0xcc);// skip


  WR_Byte(0x44);//啟動溫度轉換


  }


  /*


  ************************************


  函數:Read_Tem


  功能:讀取溫度


  參數:無


  返回:int型溫度數據,高八位為高八位溫度數據,低八位為低八位溫度數據


  說明: 復位后寫BE命令


  ******************************************


  */


  int Read_Tem()


  {


  int tem="0";


  RST_DS18B20();


  WR_Byte(0xcc);// skip


  WR_Byte(0xbe);//發出讀取命令


  tem=Read_Byte();//讀出溫度低八位


  tem|=(((int)Read_Byte())<<8);//讀出溫度高八位


  return tem;


  }


  注: DS18B20官方文檔中沒有說明讀寫數據位的順序,查了下資料,DS18B20讀寫數據都是從最低位讀寫的。

關鍵字:DS18B20  時序分析 引用地址:DS18B20時序分析詳細步驟

上一篇:stm8的IIC庫的使用
下一篇:STM8L之按鍵中斷

推薦閱讀

集微網消息,據日本NHK電視臺近日消息,由于連續四年赤字,日本液晶面板制造商“日本顯示器”(JDI,Japan Display Inc.)正在與多家中國企業與基金組成的財團洽談,以尋求投資同中企進行交涉。同時JDI最大的股東產業革新機構(INCJ)也在考慮獲得更多的金融援助,以擺脫JDI目前在面板事業上進退兩難的局面。NHK在報道中指出,據消息人士透露,日本顯示...
色差儀概念色差儀是一種用于測量物體顏色差別的儀器。也可稱為色差計、色彩色差儀、色差分析儀、色差測試儀、色差儀、色差檢測儀、色差測定儀、色差校準儀、色差測量儀、顏料色差儀色差儀分類色差儀根據工作原理的不同可分為兩類:光電積分式色差儀和分光式色差儀。光電積分式色差儀俗稱精密色差儀,分光式色差儀俗稱分光測色儀。根據色差儀的體積大小可分...
在過去的幾個月里,有很多關于三星 Galaxy Note 系列未來是否被砍掉的矛盾報道。在三星推出 Galaxy Note 20 系列后不久,就出現了有關三星計劃將 S Pen 支持引入其下一代 Galaxy S 系列旗艦的報道,這導致了關于 Galaxy Note 系列停產的傳聞的出現。最近來自韓國媒體 AjuNews 的報道進一步助長了這些傳言,并聲稱其已經從三星...
2021年就要過去,但芯荒似乎還沒有緩解,世界各國都在更努力地應對芯片短缺。印度科技部長周三表示,印度已批準一項100億美元的激勵計劃,以吸引半導體和顯示器制造商,這是印度進一步努力打造全球電子產品生產中心的一部分。  印度政府當天在一份聲明中表示,將向符合條件的顯示器和半導體制造商提供高達項目成本50%的財政支持。“該計劃將為半導體、顯...

史海拾趣

問答坊 | AI 解惑

芯幣....?.

現在網站還有芯幣限制么....并且我的不知道怎么成了負7.....…

查看全部問答∨

AD602完整英文資料!!!

本帖最后由 paulhyde 于 2014-9-15 09:05 編輯 這是AD602的完整英文資料,可能在c題里面會有用  …

查看全部問答∨

哪里能找到CEImageDiff.exe?

要用到CEImageDiff.exe建立工程模板,在硬盤和安裝光盤里都找不到CEImageDiff.exe,有誰知道哪里可以找到嗎? 謝謝!…

查看全部問答∨

eboot 開啟mmu以后就掛了

我的開發板是mini2440的  現在我想移植官方的bsp到我的開發板上 ,現在通過點燈法發現我的eboot能夠走到這一步startup.s    mrc            p15, 0, r1, c1, c0, 0     & ...…

查看全部問答∨

今天在開發板上移植了dm9000的kitl碰到的奇怪的問題

移植了dm9000到kitl當鏡像下載完以后我看到了調試的畫面,上面有detach device 和reset device 我喜歡了reset device 后想再attach device 就不行了  出來一個下載鏡像的畫面  但是在我的印象中這不應該啊  如果我每 ...…

查看全部問答∨

51單片機中斷,,定時器控制寄存器TCON

當程序轉向執行中斷服務程序時,《外部中斷請求標志位IE0(IE1),內部定時/計數器溢出標志位TF0(TF1)》,由硬件自動清0。 我想請問哥們,到底是在什么時候(比“當程序轉向執行中斷服務程序時”更具體)清0的呢?是在IRET指令執行之后嗎?…

查看全部問答∨

645規約讀電表的問題,怎么也讀不出電表數據,源代碼如下:請大大們指點啊,感激不盡,小弟是新人,也不知道在哪看自己的積分,問題解決

怎么也讀不出電表數據,源代碼如下:請大大們指點啊,感激不盡,小弟是新人,也不知道在哪看自己的積分,問題解決了有分送分,沒分送q幣 #include         #include         #in ...…

查看全部問答∨

悲劇啊。LM3S811被鎖~!

今天還進行著示波器設計。之前還一直好好的。就在我燒入程序的時候。也仔細檢查了下,程序確實包含了jtagwait(),防止鎖死。可惜,就在下完程序后,修改之后再下的時候就不行了。以下為截圖。悲劇啊。~大伙幫忙看看這程序有錯不。void jtagWait(voi ...…

查看全部問答∨

如何利用專門設計的測量室和分子束沉積(MBD)系統測量高電阻概述

晶體[1]材料是現代電子和光電子技術的基礎。因此,這些材料的電子特性,如(各向異性) 電導率和光電導率以及與這些特性有關的溫度依存性,都是研究人員關注的問題。采用大量結晶技術的晶體生長尺寸可能不大,但往往表現出極高的電阻。這個應用筆記 ...…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 遂川县| 白沙| 洛川县| 喜德县| 香港 | 张家界市| 喀喇沁旗| 阜新市| 商河县| 灌南县| 绩溪县| 威海市| 婺源县| 金门县| 安义县| 永春县| 绩溪县| 德惠市| 成安县| 元朗区| 西盟| 南开区| 东乌| 苗栗市| 曲麻莱县| 翁源县| 平原县| 临安市| 广宗县| 噶尔县| 云和县| 高平市| 永靖县| 沐川县| 社旗县| 大洼县| 赤水市| 当涂县| 潼关县| 鹤壁市| 中阳县|