国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

單片機(jī)DS18B20(內(nèi)包括編程思路)

2019-11-07 23:01:09
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

特點(diǎn): 1. 通信方式:1-Wire單總線通信 2. 每個(gè)DS18B20都有唯一的64為序列號(hào)儲(chǔ)存在板載ROM(只讀存儲(chǔ)器)中; 3. 無(wú)需外部器件 4. 電源范圍3.0V~5.5V 5. 可以測(cè)量的范圍是-55℃~+125℃(攝氏度); 6. 在-10~+85℃范圍內(nèi)精確度為±0.5℃; 7. 溫度計(jì)分辨率可以(通過(guò)編程)設(shè)置為9~12位工作模式,12位時(shí)分辨率對(duì)應(yīng)為0.0625℃; /*這里咱們及時(shí)一下分辨率:只要器件檢測(cè)到的溫度變化超過(guò)0.0625攝氏度(12位工作模式),最小刻度值就會(huì)加1,如果設(shè)置為0.5攝氏度工作模式 ,溫度每變化0.5℃,最小刻度變化為1*/ 8. 器件內(nèi)部?jī)?nèi)置A/D轉(zhuǎn)換器; DS18B20在實(shí)際應(yīng)用中的典型接法:(兩種,本博客給大家介紹的是第二種接線的方法)

第一種: 工作在寄生于下的典型接法:DS18B20的GND和Vdd都接地,為了提高DS18B20的工作電流,在單總線上接上一個(gè)帶場(chǎng)效應(yīng)管的強(qiáng)上拉電路提供上拉電流, 這里寫圖片描述 第二種: 外部接法:先對(duì)于第一種解法相對(duì)于比較簡(jiǎn)單,可以節(jié)省單片機(jī)管腳; 這里寫圖片描述

單總線時(shí)序: 1. DS18B20采用1-wire Bus所有數(shù)據(jù)都在一條線上傳輸,因此對(duì)時(shí)序要求非常嚴(yán)格以確保數(shù)據(jù)的完整性; 2. 1-wire信號(hào)類型:復(fù)位脈沖,寫0,寫1,存在脈沖,讀0,讀1;(前三是由主機(jī)發(fā)出,后三是DS18B20發(fā)出,主機(jī)采樣獲取) 3. 數(shù)據(jù)的傳輸總是從最低有效位開始;

重點(diǎn)來(lái)了:前面的東西都不看是可以的,畢竟我們拿到一個(gè)器件之后雖然了解一些基礎(chǔ)設(shè)置是必要的,但我們最重要的是知道這個(gè)動(dòng)心該怎么用; 下面將會(huì)給大家介紹一下編程的思路,也就是解決問(wèn)題的辦法。下面就是編程思路: 編程總體思路:1.初始化 2.ROM操作指令 3. DS18B20功能指令(讀暫存器,寫暫存器) 初始化時(shí)序(初始化函數(shù)): 初始化時(shí)序里包含復(fù)位DS18B20和接收DS18B20返回的存在信號(hào); 主機(jī)和DS18B20在做任何通信之前都需要對(duì)其進(jìn)行初始化。 這里寫圖片描述 下面,我們將會(huì)通過(guò)圖來(lái)寫程序: /單總線初始化時(shí)序/ bit Init_DS18B20() { bit i; DS = 1 ; nop(); DS = 0; Delay_us(75); //拉低總線499.45us, DS = 1; //釋放總線 Deley_us(4); //延時(shí)37.95us,等待讀取 i = DS; Delay_us(20); //141.95us DS = 1; nop(); return i; } /控制器寫0和1/ 這里寫圖片描述 void write_byte(uchar dat) //注意這里傳輸?shù)氖且粋€(gè)字節(jié); { //產(chǎn)生一個(gè)寫時(shí)序,至少要將總線拉低1us,數(shù)據(jù)從低位向高位發(fā)送; uchar i; for(i=0;i<8;i++) { DS = 0; nop(); //產(chǎn)生寫時(shí)序 DS = dat & 0x01; Deley_us(10); //76.95us DS = 1; //釋放總線準(zhǔn)備下一次數(shù)據(jù)寫入 nop(); dat >>= 1; } } /讀數(shù)據(jù)/ 這里寫圖片描述 uchar read_byte() { uchar dat,i,j; for(i=0;i<8;i++) { DS = 0; nop(); //產(chǎn)生讀時(shí)序; DS = 1; nop(); //釋放總線 j = DS; Delay_us(10); //76.95us DS = 1; nop(); dat = (j<<7)|(dat>>1); //數(shù)據(jù)從從低位傳向高位 } return dat; }

/基于C語(yǔ)言的模塊化編程,我們通過(guò)上面的功能模塊,也即是功能函數(shù),下面咱們來(lái)寫一個(gè)主函數(shù),來(lái)調(diào)用這些功能模塊,從而實(shí)現(xiàn)邏輯器件的編程/ void main() { uint i; uchar L,M; while(1) { ds_init(); //初始化DS18B20 write_byte(0xcc); //發(fā)送忽略ROM指令 write_byte(0x44); //發(fā)送溫度轉(zhuǎn)換指令 ds_init(); //初始化DS18B20 write_byte(0xcc); //發(fā)送忽略ROM指令 write_byte(0xbe); //讀取DS18B20暫存器值; L = read_byte(); //先接收低八位; M = read_byte(); //再接收高八位; i = M; i <<= 8; i |= L; i = i*0.0625*10 + 0.5; Display(i); } } 一些重要的命令: 1. 忽略ROM指令(0xcc):當(dāng)總線上只有一個(gè)DS18B20時(shí),忽略掉對(duì)溫感的辨別,可以直接對(duì)這個(gè)溫感進(jìn)行操作,發(fā)送指令。倘若總線上有大于一個(gè)溫感,發(fā)送0xcc將會(huì)發(fā)生數(shù)據(jù)沖突; 2. 溫度轉(zhuǎn)換指令(0x44):主機(jī)告訴溫感,將溫度的模擬量,轉(zhuǎn)化為數(shù)字量保存起來(lái); 3. 讀暫存器指令(0xbe): 主機(jī)讀取溫感暫存器內(nèi)的數(shù)字值。讀取從字節(jié)0開始,一直進(jìn)行下去,知道讀完暫存器所有字節(jié),如果不想讀完所有字節(jié),控制器可以在任何時(shí)刻發(fā)出復(fù)位命令來(lái)種植讀取; 4. 寫暫存器指令(0x4e):主機(jī)向溫感暫存器寫入數(shù)據(jù),開始位置在TH寄存器(暫存器的第2個(gè)字節(jié)),接下來(lái)寫入TL寄存器(暫存器的第3個(gè)字節(jié)),最后寫入配置寄存器(暫存器的第4個(gè)字節(jié)); 5. 拷貝暫存器指令(0x48):主機(jī)將TH,TL和配置寄存器(第2,3,4字節(jié))的內(nèi)容拷貝到EEPROM中;


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 大安市| 广丰县| 德州市| 武宣县| 高尔夫| 绥阳县| 汝南县| 班玛县| 文水县| 隆安县| 乐平市| 宝丰县| 潮安县| 双桥区| 开江县| 鲁甸县| 乐平市| 和田县| 清镇市| 乌拉特前旗| 平乡县| 额敏县| 胶南市| 五寨县| 宁阳县| 焦作市| 五家渠市| 五指山市| 平山县| 无极县| 顺义区| 全椒县| 大石桥市| 韶山市| 宜州市| 榆林市| 营山县| 元氏县| 安阳县| 洞口县| 博白县|