多個(gè)共總線
ds18b20.h
#ifndef __ds18b20
#define __ds18b20
#include "msp430g2553.h"
#include #include #include #define DQ_1 P2OUT |= BIT0 #define DQ_0 P2OUT &= ~BIT0 #define DQ_in P2DIR &= ~BIT0 #define DQ_out P2DIR |= BIT0 #define DQ_val (P2IN & BIT0) void read_rom(unsigned char rom[]); void WRITE_ROM(unsigned char T_H, unsigned char T_L, unsigned char CONFIG1); unsigned int get_one_temperature(unsigned char ch); unsigned char DS18B20_SearchRomId(unsigned char (*pID)[8], unsigned char Num);//沒用到 #endif ds18b20.c #include "ds18b20.h" #define CPU_F ( (double) 8000000) #define delay_us( x ) __delay_cycles( (long) (CPU_F * (double) x / 1000000.0) ) #define delay_ms( x ) __delay_cycles( (long) (CPU_F * (double) x / 1000.0) ) unsigned char ds18b20_rom1[8] = { 0x80, 0x3C, 0x01, 0xA8, 0x16, 0x8D, 0xB7, 0x28 }; /* 八個(gè)DS18B20的64位ROM地址 */ unsigned char ds18b20_rom2[8] = { 0xB4, 0x3C, 0x01, 0xA8, 0x16, 0x1C, 0x9C, 0x28 }; unsigned char ds18b20_rom3[8] = { 0x6E, 0x3C, 0x01, 0xA8, 0x16, 0x8E, 0x3A, 0x28 }; unsigned char ds18b20_rom4[8] = { 0x9F, 0x3C, 0x01, 0xA8, 0x16, 0x75, 0xA3, 0x28 }; /************************************************ ** 函數(shù)名稱 : void reset(void) ** 函數(shù)功能 : ds18b20復(fù)位函數(shù) ** 輸 入 : 無 ** 輸 出 : 無 ** 說 明 : ************************************************/ void reset(void) { DQ_out; /* 先設(shè)為輸入口 */ DQ_0; /* 主機(jī)發(fā)送復(fù)位脈沖,強(qiáng)制拉DQ至低電平 */ delay_us(750); /* 延時(shí)500vs */ DQ_1; delay_us(15); // DQ_in; /* 設(shè)為輸入口,釋放DQ線 */ // while (DQ_val == 1) // ; /* 等待器件DS18B20應(yīng)答(如果有低電平出現(xiàn)說明總線上有器件作出應(yīng)答) */ // delay_us(50); /* 延時(shí) */ } //等待DS18B20的回應(yīng) //返回1:未檢測到DS18B20的存在 //返回0:存在 unsigned char DS18B20_Check(void) { unsigned char retry = 0; DQ_in; //SET PA0 INPUT while (DQ_val && retry < 200) { retry++; delay_us(1); }; if (retry >= 200) return 1; else retry = 0; while (!DQ_val && retry < 240) { retry++; delay_us(1); }; if (retry >= 240) return 1; return 0; } //從DS18B20讀取一個(gè)位 //返回值:1/0 unsigned char DS18B20_Read_Bit(void) // read one bit { unsigned char data; DQ_out; //SET PA0 OUTPUT DQ_0; delay_us(2); DQ_1; DQ_in; //SET PA0 INPUT delay_us(12); if (DQ_val) data = 1; else data = 0; delay_us(50); return data; } //從DS18B20讀取一個(gè)字節(jié) //返回值:讀到的數(shù)據(jù) unsigned char DS18B20_Read_Byte(void) // read one byte { unsigned char i, j, dat; dat = 0; for (i = 1; i <= 8; i++) { j = DS18B20_Read_Bit(); dat = (j << 7) | (dat >> 1); } return dat; } //寫一個(gè)字節(jié)到DS18B20 //dat:要寫入的字節(jié) void DS18B20_Write_Byte(unsigned char dat) { unsigned char j; unsigned char testb; DQ_out; //SET PA0 OUTPUT; for (j = 1; j <= 8; j++) { testb = dat & 0x01; dat = dat >> 1; if (testb) { DQ_0; // Write 1 delay_us(2); DQ_1; delay_us(60); } else { DQ_0; // Write 0 delay_us(60); DQ_1; delay_us(2); } } } //開始溫度轉(zhuǎn)換 void DS18B20_Start(void) // ds1820 start convert { reset(); DS18B20_Check(); DS18B20_Write_Byte(0xcc); // skip rom DS18B20_Write_Byte(0x44); // convert } /************************************************ ** 函數(shù)名稱 : void read_rom(unsigned char rom[]) ** 函數(shù)功能 : 從ds18b20中讀出64位序列號(hào) ** 輸 入 : 無 ** 輸 出 : 無 ** 說 明 : ************************************************/ void read_rom(unsigned char rom[]) { unsigned char i; reset(); DS18B20_Check(); DS18B20_Write_Byte(0x33); for (i = 8; i > 0; i--) { rom[i - 1] = DS18B20_Read_Byte(); } } /************************************************ ** 函數(shù)名稱 : bit match_rom(uchar *rom) ** 函數(shù)功能 : 64位的ROM序列號(hào)匹配 ** 輸 入 : 無 ** 輸 出 : 無 ** 說 明 : ************************************************/ char match_rom(unsigned char *rom) { unsigned char i; reset(); DS18B20_Check(); DS18B20_Write_Byte(0x55); for (i = 8; i > 0; i--) { DS18B20_Write_Byte(*(rom + i - 1)); } return (1); } //寫入配置 分辨率多少位 默認(rèn)12位 void WRITE_ROM(unsigned char T_H, unsigned char T_L, unsigned char CONFIG1) { reset(); /*復(fù)位 */ DS18B20_Write_Byte(0xCC); /* SKIP ROM */ DS18B20_Write_Byte(0x4E); /* 寫RAM命令 */ DS18B20_Write_Byte(T_H); /* 溫度報(bào)警高限值 */ DS18B20_Write_Byte(T_L); /* 溫度報(bào)警低限值 */ DS18B20_Write_Byte(CONFIG1); /* 配置位 */ reset(); /* 重新復(fù)位 */ DS18B20_Write_Byte(0xCC); /* SKIP ROM */ DS18B20_Write_Byte(0x48); /* 將RAM拷貝到EEPROM */ delay_ms(12); /* 耗時(shí)約10MS */ } /* 讀取溫度 */ unsigned int get_one_temperature(unsigned char ch) { unsigned int Temp_l = 0, Temp_h = 0, Temp = 0; float f_temp; switch (ch) { case 1: match_rom(ds18b20_rom1); break; case 2: match_rom(ds18b20_rom2); break; case 3: match_rom(ds18b20_rom3); break; case 4: match_rom(ds18b20_rom4); break; } DS18B20_Write_Byte(0xbe); // convert Temp_l = DS18B20_Read_Byte(); // LSB Temp_h = DS18B20_Read_Byte(); // MSB DS18B20_Start(); // ds1820 start convert Temp_h <<= 8; Temp = Temp_h + Temp_l; f_temp = Temp * 0.0625; /* 18b20的分辨率是0.0625 */ Temp = f_temp * 10 + 0.5; /* 乘以10表示小數(shù)點(diǎn)后面取一位,加0.5是四舍五入 */ return (Temp); /* Temp是整型 */ } /***************************************************************** * @brief :DS18B20_WriteBit() 主機(jī)向總線寫1bit 數(shù)據(jù) * @param : bit:要寫入位的值 0或1 * @retval :無 ****************************************************************/ void DS18B20_WriteBit(unsigned char bit) { DQ_out; /* 主機(jī)端口推挽輸出模式 */ DQ_0; /* Write 0 拉低總線10-15us */ delay_us(12); if (bit & 0x01) { DQ_1; // Write 1 } else { DQ_0; // Write 0 } delay_us(30); /* 寫入數(shù)據(jù)位,保持20-45us */ DQ_1; /* 釋放總線 */ delay_us(5); } /***************************************************************** * @brief :DS18B20_Read2Bit() 主機(jī)從總線上讀取2位的數(shù)據(jù) * @param :無 * @retval :讀到到的數(shù)據(jù) :00H,01H,10H,11H ****************************************************************/ unsigned char DS18B20_Read2Bit(void) { unsigned char i, data = 0; for (i = 0; i < 2; i++) { data <<= 1; if (DS18B20_Read_Bit()) data |= 1; } return (data); } /***************************************************************** * @brief :DS18B20_CRC8() DS18B20 ROMID CRC校驗(yàn) * @param :*pRomId :要校驗(yàn)訴RomID * @retval :返回校驗(yàn)值 ****************************************************************/ unsigned char DS18B20_CRC8(unsigned char *pRomId) { unsigned char i, x; unsigned char crcbuff; unsigned char crc; crc = 0; for (x = 0; x < 8; x++) { crcbuff = pRomId[x]; for (i = 0; i < 8; i++) { if (((crc ^ crcbuff) & 0x01) == 0) crc >>= 1; else { crc ^= 0x18; /* crc=x8+x5+x4+1 */ crc >>= 1; crc |= 0x80;
上一篇:MSP430 單片機(jī) 讀取 程序 LM75A LM75 溫度傳感器
下一篇:MSP430 DS1302 驅(qū)動(dòng)
推薦閱讀
史海拾趣
為了進(jìn)一步提升公司實(shí)力,APX Technologies開始拓展海外市場。公司在多個(gè)國家和地區(qū)設(shè)立了分支機(jī)構(gòu),并積極招聘當(dāng)?shù)氐膬?yōu)秀人才。通過不斷的努力,APX Technologies的產(chǎn)品逐漸在國際市場上占據(jù)了一席之地,公司的規(guī)模和影響力也不斷擴(kuò)大。
作為一家有社會(huì)責(zé)任感的企業(yè),DESCO公司始終關(guān)注環(huán)境保護(hù)和可持續(xù)發(fā)展。公司采用環(huán)保材料和生產(chǎn)工藝,減少生產(chǎn)過程中的污染排放。同時(shí),DESCO還積極參與社會(huì)公益活動(dòng),為當(dāng)?shù)厣鐓^(qū)和弱勢(shì)群體提供幫助和支持。這些舉措贏得了社會(huì)各界的廣泛贊譽(yù)和認(rèn)可。
DESCO公司成立于XX年代初,創(chuàng)始人[XXXXX]先生憑借其深厚的電子工程背景和敏銳的市場洞察力,決定投身于防靜電產(chǎn)品的研發(fā)與生產(chǎn)。在創(chuàng)業(yè)初期,公司面臨資金緊張、技術(shù)壁壘高等諸多困難,但[XXXXX]先生堅(jiān)持技術(shù)創(chuàng)新,帶領(lǐng)團(tuán)隊(duì)攻克了一個(gè)又一個(gè)技術(shù)難關(guān),成功研發(fā)出首款高性能防靜電墊,為公司的后續(xù)發(fā)展奠定了堅(jiān)實(shí)基礎(chǔ)。
D公司始終堅(jiān)持品質(zhì)至上的經(jīng)營理念,以提供高品質(zhì)的電子產(chǎn)品為己任。在CIF交易模式下,D公司嚴(yán)格控制產(chǎn)品質(zhì)量,從原材料采購到生產(chǎn)流程中的每一個(gè)環(huán)節(jié)都進(jìn)行嚴(yán)格把關(guān)。憑借出色的產(chǎn)品質(zhì)量和良好的售后服務(wù),D公司贏得了客戶的信任和好評(píng)。
A公司是一家專注于電子元器件生產(chǎn)的CIF公司。在成立初期,A公司憑借其創(chuàng)新的研發(fā)能力和高效的生產(chǎn)流程,迅速在市場中脫穎而出。通過與全球多家知名電子產(chǎn)品制造商建立穩(wěn)定的CIF貿(mào)易關(guān)系,A公司不斷擴(kuò)大生產(chǎn)規(guī)模,優(yōu)化產(chǎn)品質(zhì)量,逐漸發(fā)展成為行業(yè)內(nèi)的領(lǐng)軍企業(yè)。
在安譜隆的發(fā)展歷程中,資本市場對(duì)其一直保持著高度的關(guān)注。然而,其“安家”之路卻并不平坦。2017年,奧瑞德曾有意收購安譜隆,但由于資金問題,這樁收購最終未能成行。2018年,旋極信息也計(jì)劃收購安譜隆,但同樣未能成功。這些波折反映了資本市場對(duì)安譜隆價(jià)值的認(rèn)可,但也暴露出安譜隆在尋找合適買家方面所面臨的挑戰(zhàn)。
常見電阻,設(shè)計(jì)電路時(shí)計(jì)算出來的電阻值經(jīng)常會(huì)與電阻的標(biāo)稱值不相符,有時(shí)候需要根據(jù)標(biāo)稱值來修正電路的計(jì)算。下面列出了常用的5%和1%精度電阻的標(biāo)稱值,供大家設(shè)計(jì)時(shí)參考。 … 查看全部問答∨ |
要把50HZ信號(hào)移相90度,全通濾波器怎么設(shè)計(jì)? 本信息來自合作QQ群:電子工程師技術(shù)交流(12425841) 群主在壇子ID:Kata 請(qǐng)教,要把50HZ信號(hào)移相90度,全通濾波器怎么設(shè)計(jì)?… 查看全部問答∨ |
wince Dos 下怎樣導(dǎo)入注冊(cè)表文件? 我想象regedit /s name.reg一樣導(dǎo)入注冊(cè)表文件 但ce下沒看見有regedit,我手上有一個(gè)tre,可以導(dǎo)入,但會(huì)出現(xiàn)提示,我不想要提示。 不知tre有沒有參數(shù)可以去掉提示。 要不有沒有別的軟件可以實(shí)現(xiàn)。 謝謝?!? 查看全部問答∨ |
|
TMS320VC33(簡稱VCC)是TI推出的TMS320系列的第三代處理器的升級(jí)產(chǎn)品,32位浮點(diǎn)運(yùn)算的DSP(0.18um技術(shù),144引腳LQFP封裝),主要型號(hào)有: VC33-120 17ns 單周期指令執(zhí)行時(shí)間,60MIPS(百萬條指令每秒) & ...… 查看全部問答∨ |
請(qǐng)各位幫幫忙出出主意,關(guān)于單片機(jī)項(xiàng)目的創(chuàng)新 本人想?yún)⒓訉W(xué)??萍紕?chuàng)新的活動(dòng),想利用單片機(jī)做個(gè)實(shí)用性的東西,這幾天苦思冥想做什么項(xiàng)目,實(shí)在想不出特別有新意的,只想到做一個(gè)智能風(fēng)扇,由于這個(gè)有很多人做過了,所以設(shè)想在原來的自動(dòng)根據(jù)室溫調(diào)整風(fēng)速和定時(shí)開關(guān)的基礎(chǔ)上自己再加些功能上去, ...… 查看全部問答∨ |
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- 基于AVR EVK1105的移動(dòng)遠(yuǎn)程桌面多媒體設(shè)備
- 基于AVR EVK1105平臺(tái)的兒童伴睡寶方案設(shè)計(jì)
- 基于AVR的太陽能高速公路智能電子顯示屏設(shè)計(jì)
- 基于MIPS32設(shè)計(jì)的智能電網(wǎng)家庭用電監(jiān)控系統(tǒng)
- 基于Cerebot MX4開發(fā)板的家用智能監(jiān)控系統(tǒng)整體方案設(shè)計(jì)
- 確定運(yùn)算放大器輸出驅(qū)動(dòng)能力的方法分析
- 寵物狗無線感知交互系統(tǒng)軟硬件設(shè)計(jì)
- stm32晶振不起振的原因 stm32單片機(jī)的基本工作原理
- 從三個(gè)層次來介紹用于機(jī)器人主控板的設(shè)計(jì)思想
- 人工智能在汽車行業(yè)中的應(yīng)用
- 麥格納集成式艙內(nèi)感知系統(tǒng) 引領(lǐng)車輛安全創(chuàng)新
- 2025世界人工智能大會(huì)上的各種機(jī)器人
- 際上導(dǎo)航:高精度組合定位感知技術(shù)在智能輔助駕駛中的應(yīng)用
- 量產(chǎn)元年的人形機(jī)器人,要破局C端?
- 上半年賺304億元的寧德時(shí)代,給出固態(tài)電池量產(chǎn)時(shí)間表
- 新泗威車載后排航空座椅控制顯示器 | 申報(bào)2025第七屆金輯獎(jiǎng)最佳技術(shù)實(shí)踐應(yīng)用獎(jiǎng)
- L3 智駕,需要?dú)⑹旨?jí)座艙
- 2025動(dòng)力電池中場戰(zhàn)局,正力新能“三化策略”應(yīng)戰(zhàn)
- 智能手機(jī)共存解決方案協(xié)同合作使用共用天線
- 看是德科技利用校準(zhǔn)降低儀器測量不確定度、提高測試精度 直播享好禮!
- 直播已結(jié)束|安世新一代高效的氮化鎵(GaN)電源設(shè)計(jì)方案
- 更好的供電方式:使用更小、更輕的電源模塊加速車輛電氣化
- 是德科技(Keysight)有獎(jiǎng)?wù)魑?,下筆贏示波器啦!
- 有獎(jiǎng)問答 英飛凌一站式BMS解決方案
- 恩智浦LPC1500開發(fā)體驗(yàn)有獎(jiǎng)?wù)骷?/a>
- NXP微控制器電路板,針對(duì)USB Type C接口設(shè)計(jì),評(píng)測創(chuàng)意有獎(jiǎng)?wù)骷?,曬心得更有多重好禮!
- 安森美有獎(jiǎng)直播|適用于光儲(chǔ)充的SiC及IGBT隔離柵極驅(qū)動(dòng)器方案
- ADI電磁流量計(jì)解決方案
- 下載有禮|ADI 最新《模擬對(duì)話》合訂本
- 千方科技中標(biāo)了9.6億元的大理州城市感知能力提升項(xiàng)目
- 主攻4D毫米波成像雷達(dá),幾何伙伴獲約4億元Pre-A輪融資
- semiengineering:成熟制程芯片缺貨情況大盤點(diǎn)
- WSJ:三星和英特爾即將正面對(duì)決 現(xiàn)金才是關(guān)鍵
- 華為哈勃入股了OLED驅(qū)動(dòng)芯片廠商歐錸德
- 基于LPC11C14單片機(jī)、可讀取RFID標(biāo)簽的服裝生產(chǎn)工位機(jī)設(shè)計(jì)
- 基于STC單片機(jī)用鍵盤控制二極管亮滅的問題分析
- 單片機(jī)片外程序存儲(chǔ)器數(shù)據(jù)存儲(chǔ)器操作命令分析
- 基于 ARM Cortex-M3內(nèi)核的STM32系列處理器解決方案
- 基于MGLS12864與SPCE061A單片機(jī)的硬件接口電路設(shè)計(jì)
- 在同一空間如果存在多個(gè)ZigBee網(wǎng)絡(luò),終端設(shè)備如何辨別并加入屬于自己的網(wǎng)絡(luò)?
- LM3S 系列單片機(jī)休眠與深度休眠應(yīng)用筆記(二)
- 誰有單片機(jī)控制交通燈的程序代碼啊
- EEWORLD大學(xué)堂----Altera Quartus II軟件 DSE演示設(shè)計(jì)空間管理器
- wince怎么編譯這么慢
- GSM基站的優(yōu)化建設(shè)[推薦]
- 新手報(bào)到,分享個(gè)好玩的給大家
- UART串行輸出的問題
- 自制12倍大Raspberry Pi3板子, 而且能工作
- RS232通信總是返回發(fā)送值