通信协议--单总线协议
文章目錄
- 一、單總線簡介
- 二、單總線協議
- 單總線初始化
- 單總線寫入
- 單總線讀取
- DS18B20用法
- 讀取溫度(僅僅包含整數部分)
- 讀取溫度(含小數部分)
一、單總線簡介
1.定義:主機和從機通過1根線進行通信,在一條總線上可掛接的從器件數量幾乎不受限制。
2.特點:這是由達拉斯半導體公司推出的一項通信技術。它采用單根信號線,既可傳輸時鐘,又能傳輸數據,而且數據傳輸是雙向的。
3.優點:單總線技術具有線路簡單,硬件開銷少,成本低廉,便于總線擴展和維護等。
單總線各種詳細介紹網上很多,此處不再贅述,直接進入正題(本文檔以常用的DS18B20溫度傳感器為例)
二、單總線協議
單總線初始化
初始化過程 = 復位脈沖 + 從機應答脈沖。
主機通過拉低單總線480 ~ 960 us產生復位脈沖,然后釋放總線,進入接收模式。主機釋放總線時,會產生低電平跳變為高電平的上升沿,單總線器件檢測到上升沿之后,延時15 ~ 60 us,單總線器件拉低總線60 ~ 240 us來產生應答脈沖。主機接收到從機的應答脈沖說明單總線器件就緒,初始化過程完成。
初始化時序圖如下所示:
單總線寫入
寫間隙有兩種,包括寫0的時間隙和寫1的時間隙。
當數據線拉低后,在15 ~ 60 us的時間窗口內對數據線進行采樣。如果數據線為低電平,就是寫0,如果數據線為高電平,就是寫1。主機要產生一個寫1時間隙,就必須把數據線拉低,在寫時間隙開始后的15 us內允許數據線拉高。主機要產生一個寫0時間隙,就必須把數據線拉低并保持60 us。
寫時間隙時序圖如下所示:
單總線讀取
當主機把總線拉低是,并保持至少1 us后釋放總線,必須在15 us內讀取數據。
DS18B20用法
ds18b20內部的64位的rom存儲其獨一無二的序列號。暫存存儲器包含了存儲有數字溫度結果的2個字節寬度的溫度寄存器。
器件上電后默認為85攝氏度
另外,暫存存儲器還提供了一個字節的過溫和低溫溫度報警寄存器和一個字節的配置寄存器
字節3和字節4分別為設置過溫和低溫警告
當只有一個設備的時候,直接跳過ROM尋址,ROM尋址用于多個設備公用,用于判斷具體是哪一個芯片
讀取溫度(僅僅包含整數部分)
unsigned char temperature() {char temp;uchar HI_temp, LOW_temp;Ds18b20_Init(); //DS18B20重置Write_To_Ds18b20(0xcc); //跳過ROM尋址Write_To_Ds18b20(0x44); //設置為溫度讀取模式 (跳過了對暫存寄存器的寫取)Delay_x_us(600); //等待溫度讀取模式的轉換Ds18b20_Init(); //DS18B20重置Write_To_Ds18b20(0xcc); //跳過ROM尋址Write_To_Ds18b20(0xbe); //讀取暫存寄存器的內容(先低位,再高位)LOW_temp = Read_form_Ds18b20(); HI_temp = Read_form_Ds18b20();temp=high<<4;temp|=(low>>4);return temp; }讀取溫度(含小數部分)
float rd_temperature(void) {unsigned char MSH,MSL;unsigned int temp;float temperature;Ds18b20_Init();Write_To_Ds18b20(0xCC);Write_To_Ds18b20(0x44);Delay_x_us(600); while(!DQ);Ds18b20_Init();Write_To_Ds18b20(0xCC);Write_To_Ds18b20(0xBE);MSL=Read_form_Ds18b20();MSH=Read_form_Ds18b20();temp=(MSH&0x0f);temp<<=8;temp|= MSL;temperature=0.0625*temp;return temperature*10; //返回值為真實溫度*10; }總結
以上是生活随笔為你收集整理的通信协议--单总线协议的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Aspose.Words for .NE
- 下一篇: 为什么学计算机课程表,计算机专业课程表(