有需要複習基礎模組的同學可以見我的這篇部落格:
藍橋杯微控制器(1) 一帖複習全模組(基礎模組).
後面將陸續寫其他各模組的詳細分析,歡迎關注!
具體掌握一款晶元的驅動過程和使用方法才能夠真正掌握它。
首先,在開始工作前我們應該對硬體進行初始化
圖中存在三種線
從上到下,依次
1.master拉低
2.ds18b20拉低
3.上拉電阻拉高
1.首先,我們將匯流排拉低480us(最小值)左右,然後釋放匯流排
2.上拉電阻拉高電平
3.當匯流排有上公升沿了,ds18b20等待15-60us左右,拉低匯流排進行應答
4.我們對電平進行讀取,如果讀取到ds18b20拉低了匯流排那麼就初始化成功了
5.ds18b20在應答60-240us後,會釋放匯流排
程式
bit ds18b20_init()
怎麼向晶元寫入資料呢?
1.master拉低15us左右
2.在15-45us內寫入高低電平
3.釋放匯流排
void
ds18b20_write
(uchar data)
}
又怎麼讀取晶元中的資料呢?
1.master拉低1us,釋放
2.對ds18b20的資料進行讀取
3.讀取後進行延時約45us
unsigned
char
ds18b20_read()
}delay_us(45
);//約45us
return data;
}
我們再看一下晶元內部的資料是以什麼形式儲存的
0byte溫度資料儲存為低8位 lsb
1byte高8位 msb
2byte最高報警溫度th
3byte最低報警溫度tl
4byte轉換精度配置(預設12位)
5.6.7byte
reserved
adj. 內向的; 寡言少語的; 矜持的;
v. 預訂,預約(座位、席位、房間等); 保留; 貯備; 擁有,保持,保留(某種權利);
保留使用
8bytecrc碼
在得到資料後我們應該怎麼處理它
二進位制補碼
低四位小數
中間七位整數
高五位拓展符號位
00000 正溫度
11111 負溫度
示例
解析度=2^-4=0.0625
則正溫度:十六進製制換算十進位制數*0.0625
負溫度 十六進製製取反加1換算十進位制數*0.0625
了解清楚之後就可以對晶元資料進行讀取處理了
在使用過程中可以跳過rom指令直接進行資料讀取
過程如下:
1.復位(初始化)
2.寫入0xcc,跳過rom指令
3.寫入0x44,開始溫度轉換
4.延時700-900ms
5.復位
6.寫入0xcc,跳過rom指令
7.寫入0xbe,讀取高速暫存器
8.讀出第0位元組,lsb
9.讀出第1位元組,msb
10.復位,讀取結束
11.將lsb和msb集成為16位資料
12.正負資料處理
uchar ds18b20_temperature()
else
//負return data;
}
至此,便通過對單匯流排協議以及ds18b20的具體寫入讀取,資料處理有了全面的認識。
有需要複習基礎模組的同學可以見我的這篇部落格:
藍橋杯微控制器(1) 一帖複習全模組(基礎模組).
藍橋杯微控制器組 DS18B20
ds18b20與微控制器採用單匯流排連線方式,比賽中使用到的檔案為提供的 onewire.c 程式設計步驟 1 初始化 2 傳送rom操作命令,包括 read rom 讀rom 33h match rom 匹配rom 55h skip rom 跳過rom cch search rom 搜尋rom f...
2020藍橋杯省賽微控制器2
xbye寫法由於暫時不了解其內部工作原理,在國信長天2020版本的51板子上 p42 p44與按鍵相連。如果用xbyte數碼管顯示雖然方便但如果在中斷中有矩陣鍵盤寫法的按鍵掃瞄,使p42 p44強制拉低或拉高 會出現亂七八糟的的不可預判的bug,如數碼管不可顯示 矩陣鍵盤失效。推薦直接用p埠寫法,在...
藍橋杯微控制器CT107D ds18b20驅動
藍橋杯微控制器ctd107 ds18b20 比賽時官方提供用驅動函式,但是不完整,需要修改相應的.c和.件,第一步 修改單匯流排延時函式,只需要在延時函式中新增一行即可 void delay onewire unsigned int t 第二步 修改.件,將 include reg52.h 改為 i...