![DS2431 DS18B20讀寫程序_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/9/aec57a67-9547-4dc4-9ae9-8b2b045245c2/aec57a67-9547-4dc4-9ae9-8b2b045245c21.gif)
![DS2431 DS18B20讀寫程序_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/9/aec57a67-9547-4dc4-9ae9-8b2b045245c2/aec57a67-9547-4dc4-9ae9-8b2b045245c22.gif)
![DS2431 DS18B20讀寫程序_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/9/aec57a67-9547-4dc4-9ae9-8b2b045245c2/aec57a67-9547-4dc4-9ae9-8b2b045245c23.gif)
![DS2431 DS18B20讀寫程序_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/9/aec57a67-9547-4dc4-9ae9-8b2b045245c2/aec57a67-9547-4dc4-9ae9-8b2b045245c24.gif)
![DS2431 DS18B20讀寫程序_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/9/aec57a67-9547-4dc4-9ae9-8b2b045245c2/aec57a67-9547-4dc4-9ae9-8b2b045245c25.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、DS2431 DS18B20 one wire 讀寫程序最近公司有一個產(chǎn)品用到了DS2431,我就將先前一個DS18B20的程序中加入了DS2431的按規(guī)定函數(shù)。先傳給大家分享.大家可以使用,轉(zhuǎn)載時請說明出處. 此程序不夠完善,希望能支持多節(jié)點設(shè)備連接。單總線適用于單主機(jī)系統(tǒng),能夠控制一個或多個從機(jī)設(shè)備。主機(jī)可以是微控制器,從機(jī)可以是單總線器件,它們之間的數(shù)據(jù)交換只通過一條信號線。當(dāng)只有一個從機(jī)設(shè)備時,系統(tǒng)可按單節(jié)點系統(tǒng)操作;當(dāng)有多個從機(jī)設(shè)備時,系統(tǒng)則按多節(jié)點系統(tǒng)操作。 以下是程序:#include"system.h"#include"one wire.h&quo
2、t;unsigned char a_DS24318;/code by lyx and RyanHsiung#define DS_DQ_IN PORTAbits.RA4#define DS_DQ_OUT LATAbits.LATA4#define DS_DQ_TRISD TRISAbits.TRISA4void delay_us(unsigned char time) /delayms=1us of 20Mhz osc /不準(zhǔn)確1us while(time-); /* CRC校驗*/unsigned char crccheck(unsigned char *p,unsigned char len
3、)unsigned char bit0,cbit,r,temp,i,j,byte;temp=0;for (j=0;j<len;j+) byte=pj; for(i=0;i<8;i+) cbit=temp&0x01; bit0=byte&0x01; temp=temp>>1; r=cbitbit0; if(r=1) temp=temp0x8c; byte=byte>>1; return temp;/* 檢查DS1820是否存在:如果DS1820不存在返回1,否則返回0*/unsigned char OneWire_ack(void) unsig
4、ned char ack; DS_DQ_TRISD=0; /輸出 DS_DQ_OUT=0; /輸出LOW /delay_us(500); delay_us(250); delay_us(250); delay_us(100); DS_DQ_OUT=1;/輸出HIGH DS_DQ_TRISD=1;/RE2輸入 delay_us(40);/delay_us(45); if(DS_DQ_IN=1) ack=1; / else ack=0;/ /delay_us(500); delay_us(250); delay_us(250); delay_us(100); return ack;/* 從DS18
5、20讀1字節(jié)數(shù)據(jù)*/ unsigned char OneWire_read(void) unsigned char i,byte,temp; byte=0x00; for (i=0;i<8;i+) DS_DQ_TRISD=0;/RE2輸出 DS_DQ_OUT=0;/輸出LOW delay_us(1);/delay_us(3); DS_DQ_OUT=1;/輸出HIGH DS_DQ_TRISD=1;/RE2輸入 delay_us(5);/delay_us(10); if(DS_DQ_IN) byte|=0x80; / 讀入 if (i<7) byte=byte>>1; de
6、lay_us(120);/delay_us(100); DS_DQ_TRISD=0;/RE2輸出 delay_us(2);/delay_us(5); return byte;/* 寫ROM或存貯器命令到DS1820*/void OneWire_write(unsigned char cmd) unsigned char i,j; DS_DQ_TRISD=0;/RE2輸出 for (j=0;j<=7;j+) i=cmd&0x01; if (i=0x01) DS_DQ_OUT=0;/輸出LOW delay_us(5); DS_DQ_OUT=1;/輸出HIGH delay_us(120
7、); else DS_DQ_OUT=0;/輸出LOW delay_us(120); DS_DQ_OUT=1;/輸出HIGH delay_us(5); cmd=cmd>>1; /* 匹配DS1820*/ void OneWire_match(unsigned char *p) unsigned char i; do i=OneWire_ack(); while (i=0x01); OneWire_write(0x55); for(i=0;i<8;i+) OneWire_write(pi); uint8 DS2431_WriteOneByte(uint16 address, ui
8、nt8 * p_data)uint8 tem8h,tem8l,i,data,errors,temp8;tem8h=(unsigned char)(address>>=4);tem8l =(unsigned char)address; if(OneWire_ack() return;OneWire_write(0xcc);/跳過ROM匹配OneWire_write(0x0f);/發(fā)送寫暫存器命令OneWire_write(tem8l);/發(fā)送地址低位OneWire_write(tem8h);/發(fā)送地址高位 for(i=0;i<8;i+)data=*p_data;p_data+;
9、OneWire_write(data);/ClrWDT();delay_us(25); if(OneWire_ack() return;OneWire_write(0xcc);/跳過ROM匹配OneWire_write(0xAA); /復(fù)制暫存器數(shù)據(jù)到存儲器中temp8=OneWire_read();temp8<<=8;temp8+=OneWire_read();errors=OneWire_read(); if(errors!=0x07)return 0; if(OneWire_ack() return;OneWire_write(0xcc);/跳過ROM匹配OneWire_wr
10、ite(0x55);/發(fā)出啟動轉(zhuǎn)換命令OneWire_write(tem8l);/發(fā)送地址低位OneWire_write(tem8h);/發(fā)送地址高位 OneWire_write(errors);for(i=0;i<50;i+)delay_us(100); /等待寫時序結(jié)束510usif(OneWire_read()!=0xAA)return 0;return 1;/*unsigned char i=1; if(OneWire_ack() return;OneWire_write(0xcc);/跳過ROM匹配OneWire_write(0x0f); / write scrachpadOn
11、eWire_write(0x20); / ta1OneWire_write(0x00); / ta2OneWire_write(data); / dataa_DS24310 = OneWire_read();a_DS24311 = OneWire_read();crccheck(a_DS2431,2);*/uint8 DS2431_WriteString(uint16 address, uint8 * p_data)uint8 tem8h,tem8l,i,data,errors,temp8;tem8h=(unsigned char)(address>>=4);tem8l =(uns
12、igned char)address; if(OneWire_ack() return;OneWire_write(0xcc);/跳過ROM匹配OneWire_write(0x0f);/發(fā)送寫暫存器命令OneWire_write(tem8l);/發(fā)送地址低位OneWire_write(tem8h);/發(fā)送地址高位 for(i=0;i<8;i+)data=*p_data;p_data+;OneWire_write(data);delay_us(25); if(OneWire_ack() return;OneWire_write(0xcc);/跳過ROM匹配OneWire_write(0xA
13、A); /復(fù)制暫存器數(shù)據(jù)到存儲器中temp8=OneWire_read();temp8<<=8;temp8+=OneWire_read();errors=OneWire_read(); if(errors!=0x07)return 0; if(OneWire_ack() return;OneWire_write(0xcc);/跳過ROM匹配OneWire_write(0x55);/發(fā)出啟動轉(zhuǎn)換命令OneWire_write(tem8l);/發(fā)送地址低位OneWire_write(tem8h);/發(fā)送地址高位 OneWire_write(errors);for(i=0;i<50
14、;i+)delay_us(100); /等待寫時序結(jié)束510usif(OneWire_read()!=0xAA)return 0;return 1;/*unsigned char i=1; if(OneWire_ack() return;OneWire_write(0xcc);/跳過ROM匹配OneWire_write(0x0f); / write scrachpadOneWire_write(0x20); / ta1OneWire_write(0x00); / ta2OneWire_write(data); / dataa_DS24310 = OneWire_read();a_DS24311
15、 = OneWire_read();crccheck(a_DS2431,2);*/uint8 DS2431_ReadOneByte(uint16 address ) if(OneWire_ack() return;OneWire_write(0xcc);/跳過ROM匹配OneWire_write(0xf0);/發(fā)出讀存儲器命令OneWire_write(LS_BYTE(address) );/地址低8位OneWire_write(HS_BYTE(address);/地址高8位a_DS24310 = OneWire_read(); / read datareturn a_DS24310;/*un
16、signed char i=1; if(OneWire_ack() return;OneWire_write(0xcc);/跳過ROM匹配OneWire_write(0xaa); /a_DS24310 = OneWire_read(); / read ta1a_DS24311 = OneWire_read(); / read ta2a_DS24312 = OneWire_read(); / read es a_DS24313 = OneWire_read(); /read dataa_DS24314 = OneWire_read(); /crca_DS24315 = OneWire_read(
17、); /CRCcrccheck(&a_DS24314,2);*/uint8* DS2431_ReadString(uint16 address) uint8 i; if(OneWire_ack() return;OneWire_write(0xcc);/跳過ROM匹配OneWire_write(0xf0);/發(fā)出讀存儲器命令OneWire_write(LS_BYTE(address) );/地址低8位OneWire_write(HS_BYTE(address);/地址高8位for(i=8;i>0;i-)a_DS24318-i=OneWire_read();/ClrWDT();re
18、turn a_DS2431;void Start_convert_ds18b20(void)unsigned char i=1; if(OneWire_ack() return;OneWire_write(0xcc);/跳過ROM匹配OneWire_write(0x44); /啟動DS1820轉(zhuǎn)換unsigned int Read_convert_ds18b20(unsigned char flag_language)unsigned char i;unsigned char OneWire9;/存放從DS18B20讀取的9字節(jié)數(shù)據(jù)unsigned int OneWire_temp;unsigned char flag_temp=0;if(OneWire_ack() return 0x5fff;OneWire_write(0xcc);/跳過ROM匹配OneWire_write(0xbe); /讀轉(zhuǎn)換后溫度值for (i=0
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年個人名下車輛抵押借款合同范文
- 2025年公共場所消防設(shè)計與施工協(xié)議
- 2025年企業(yè)租賃生產(chǎn)區(qū)域安全策劃管理協(xié)議
- 2025年玻璃冷加工設(shè)備項目提案報告模板
- 2025年個人信用借款合同保證書
- 2025年車載型X螢光測試儀(XRF)項目立項申請報告
- 2025年圖像存儲與通訊系統(tǒng)(PACS)項目立項申請報告模范
- 2025年分手協(xié)議標(biāo)準(zhǔn)化簡易版指南
- 2025年園林景觀石申請銷售合作協(xié)議
- 2025年伴侶保障協(xié)議
- 2025年湖南中醫(yī)藥高等??茖W(xué)校高職單招職業(yè)技能測試近5年常考版參考題庫含答案解析
- 2024年美發(fā)師(高級技師)職業(yè)鑒定考試題庫(含答案)
- 寧波2025年浙江寧波市鄞州區(qū)衛(wèi)健系統(tǒng)其他事業(yè)單位招聘事業(yè)編制46人筆試歷年參考題庫附帶答案詳解
- 【七上HK數(shù)學(xué)】安徽省蚌埠市固鎮(zhèn)縣2024-2025學(xué)年七年級上學(xué)期1月期末試卷數(shù)學(xué)試題
- 電子物料基礎(chǔ)知識
- 2025屆江蘇省南京市鹽城市高三一??荚囌Z文試題 課件
- 廣西出版?zhèn)髅郊瘓F(tuán)有限公司招聘筆試沖刺題2025
- 江蘇省南京市2024年中考英語試題(含解析)
- 外科圍手術(shù)期處理(外科學(xué)課件)
- 電力安全工作規(guī)程考試試題題庫
- 宮頸癌診療指南要點
評論
0/150
提交評論