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