freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

stc89c52單片機(jī)倉庫溫濕度檢測系統(tǒng)設(shè)計(jì)畢業(yè)論文(編輯修改稿)

2024-07-16 14:54 本頁面
 

【文章內(nèi)容簡介】 *************************************************************/void WriteByte (uchar wr) /*單字節(jié)寫入*/{ uchar i。 for (i=0。i8。i++) { dq = 0。 _nop_()。 dq=wramp。0x01。 TempDelay(5)。 //delay 45 uS //5 _nop_()。 _nop_()。 dq=1。 wr = 1。 }}/*************************************************************Function:讀18B20的一個(gè)字節(jié)*parameter:*Return:*Modify:*************************************************************/uchar ReadByte (void) /*讀取單字節(jié)*/{ uchar i,u=0。 for(i=0。i8。i++) { dq = 0。 u = 1。 dq = 1。 if(dq==1) u |= 0x80。 TempDelay (4)。 _nop_()。 } return(u)。}有了上面的基本函數(shù),我們可以完成具體的ROM操作了舉例總線主機(jī)產(chǎn)生溫度變換命令然后讀出溫度,如下表所示:表 讀溫度主機(jī)方式數(shù)據(jù)LSB 在先注 釋TXReset(復(fù)位)復(fù)位脈沖480_960usRXPresence(存在)存在脈沖TX 55h 符合ROM 命令TX 64位ROM代碼發(fā)出DS1820 地址TX44h 溫度變換命令TXI/O 線高電平總線主機(jī)使I/O 線至少保持2 秒鐘的高電平以便完成變換TXReset 復(fù)位復(fù)位脈沖RXPresence 存在存在脈沖TX55h 符合ROM 命令TX64 位ROM 代碼發(fā)出DS1820 地址TXBeh讀暫存存貯器命令RX9 個(gè)數(shù)據(jù)字節(jié)讀整個(gè)暫存存儲器以及CRC 主機(jī)現(xiàn)在重新計(jì)算機(jī)從暫存存儲器接收來的8 位數(shù)據(jù)字節(jié)的CRC 并把計(jì)算得到的CRC 與讀出的CRC 比較如果二者相符主機(jī)繼續(xù)操作如果不符重復(fù)此讀操作TXReset復(fù)位復(fù)位脈沖RXPresence存在存在脈沖操作完成完成這部分功能的代碼如下/*************************************************************Function:CRC校驗(yàn)*parameter:*Return:*Modify:*************************************************************/uchar CRC (uchar j){ uchar i,crc_data=0。 for(i=0。ij。i++) crc_data = CrcTable[crc_data^temp_buff[i]]。 return (crc_data)。}/*************************************************************Function:讀取溫度*parameter:*Return:*Modify:*************************************************************/void GemTemp (void){ read_bytes (9)。 if (CRC(9)==0) /*校驗(yàn)正確*/ { Temperature = temp_buff[1]*0x100 + temp_buff[0]。// Temperature *= 。 Temperature *= 10。 Temperature /= 16。 TempDelay(1)。 }}/*************************************************************Function:讀18B20ID*parameter:*Return:*Modify:*************************************************************/void ReadID (void)/*讀取器件 id*/{ Init18b20()。 WriteByte(0x33)。 //read rom read_bytes(8)。}/*************************************************************Function:18B20ID全處理*parameter:*Return:*Modify:*************************************************************/void TemperatuerResult(void){ p = id_buff。 ReadID()。 Init18b20 ()。 WriteByte(0xcc)。 //skip rom WriteByte(0x44)。 //Temperature convert Init18b20 ()。 WriteByte(0xcc)。 //skip rom WriteByte(0xbe)。 //read Temperature p = temp_buff。 GemTemp()。}這里要說明的是: 1Wire協(xié)議提供了一種檢測數(shù)據(jù)是否存在著傳輸錯(cuò)誤的手段,就是CRC校驗(yàn)。 1Wire CRC 校驗(yàn)處理DS1820有一包括64位ROM 的最高有效字節(jié)內(nèi)的8位CRC,總線上的主機(jī)可以根據(jù)64位ROM的前56位計(jì)算CRC的值并把它與存貯在DS1820內(nèi)的值進(jìn)行比較以決定ROM的數(shù)據(jù)是否已被主機(jī)正確地接收,CRC的等效多項(xiàng)式函數(shù)為 CRC=X8+X5+X4+1。DS1820在傳遞數(shù)據(jù)時(shí)也利用與上述相同的多項(xiàng)式函數(shù)產(chǎn)生一個(gè)8位CRC值,并把此值提供給主機(jī)以確認(rèn)數(shù)據(jù)字節(jié)的傳送,在使用CRC來確認(rèn)數(shù)據(jù)傳送的每一種情況中,總線主機(jī)必須使用上面給出的多項(xiàng)式函數(shù)計(jì)算CRC的值,并把計(jì)算所得的值或者與存貯在DS1820 的64 位ROM 部分中的8 位CRC 值,或者與DS1820 中計(jì)算得到的8 位CRC值(在讀暫存存貯器中時(shí)它作為第九個(gè)字節(jié)被讀出)進(jìn)行比較。 所示由一個(gè)移位寄存器和異或XOR 門組成的多項(xiàng)式產(chǎn)生器來產(chǎn)生。 移位寄存器和異或XOR門移位寄存器的所有位被初始化為零然,后從產(chǎn)品系列編碼的最低有效位開始,每次移入一位。當(dāng)產(chǎn)品系列編碼的8 位移入以后,接著移入序列號,在序列號的第48 位進(jìn)入之后,移位寄存器便包含了CRC 值,移入CRC 的8 位應(yīng)該使移位寄存器返回至全零。完成CRC校驗(yàn)的代碼如下:uchar crc_data。uchar code CrcTable [256]={0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65,157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62, 96, 130, 220,35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 128, 222, 60, 98,190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158, 29, 67, 161, 255,70, 24, 250, 164, 39, 121, 155, 197, 132, 218, 56, 102, 229, 187, 89, 7,219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154,101, 59, 217, 135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36,248, 166, 68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 231, 185,140, 210, 48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147, 205,17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236, 14, 80,175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 238,50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18, 145, 207, 45, 115,202, 148, 118, 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 213, 139,87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 244, 170, 72, 22,233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168,116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53}。uchar CRC (uchar j){ uchar i,crc_data=0。 for(i=0。ij。i++) crc_data = CrcTable[crc_data^temp_buff[i]]。 return (crc_data)。} 1Wire 器件的ROM搜索從上面的讀出溫度的過程我們看到,DS18B20是依靠64位注冊碼來作為地址,來區(qū)分每個(gè)器件的,我們要完成在一條1Wire總線上的多點(diǎn)測量必須知道每一個(gè)器件的注冊碼,當(dāng)線路上只有一個(gè)器件的時(shí)候,這個(gè)問題處理起來很簡單,只要發(fā)出0X33命令就行,但是實(shí)際上我們看到,現(xiàn)場使用的測溫電纜已經(jīng)把多個(gè)18B20密封在一條電纜中了,我們不可能單獨(dú)來測量每一個(gè)18B20的注冊碼了,這樣問題就復(fù)雜了,各種參考文獻(xiàn)和網(wǎng)絡(luò)上的例程都沒有對這種情況的介紹,不解決這個(gè)問題,溫度檢測系統(tǒng)就沒有使用價(jià)值!通過對參考文獻(xiàn)DS1820 Programmable Resolution 1Wire174。 Digital Thermometer 的仔細(xì)研究,發(fā)現(xiàn)1Wire 器件支持一種叫ROM搜索的操作,通過ROM搜索可以枚舉1Wire總線上的所有器件,通過ROM搜索完美的實(shí)現(xiàn)了測溫點(diǎn)的自由增減。ROM搜索是針對對器件的64位注冊碼進(jìn)行的,每個(gè)1Wire器件的注冊碼都是唯一的。 64位ROM注冊碼搜索算法搜索算法采用的是二叉樹型結(jié)構(gòu),搜索過程沿各分節(jié)點(diǎn)進(jìn)行,直到找到器件的ROM 碼即葉子為止;后續(xù)的搜索操作沿著節(jié)點(diǎn)上的其它路徑進(jìn)行,按照同樣的方式直到找到總線上的所有器件代碼。搜索算法首先通過復(fù)位(Reset)和在線應(yīng)答脈沖(Presence Pulse)時(shí)隙將1Wire 總線上的所有器件復(fù)位;成功地執(zhí)行該操作后發(fā)送1 個(gè)字節(jié)的搜索命令,搜索命令使1Wire 器件準(zhǔn)備就緒、開始進(jìn)行搜索操作。搜索命令分為兩類:標(biāo)準(zhǔn)搜索命令(0FH)用來搜索連接到網(wǎng)絡(luò)中所有器件;報(bào)警或有條件搜索命令(ECH)只用來搜索那些處于報(bào)警狀態(tài)下的器件,這種方式縮小了搜索范圍可以快速查找到所需要注意的器件。搜索命令發(fā)出之后,開始實(shí)際的搜索過程。首先總線上的所有從機(jī)器件同時(shí)發(fā)送ROM 碼(也叫注冊碼)中的第一位最低有效位。與所有的1Wire 通信一樣,無論是讀取數(shù)據(jù)還是向從機(jī)器件寫數(shù)據(jù),都由1Wire 主機(jī)啟動每一位操作。按照1Wire 的特性,當(dāng)所有從機(jī)器件同時(shí)應(yīng)答主機(jī)時(shí),結(jié)果相當(dāng)于全部發(fā)送數(shù)據(jù)位的邏輯AND;從機(jī)發(fā)送其ROM 碼的第一位后,主機(jī)啟動下一位操作,接著從機(jī)發(fā)送第一位數(shù)據(jù)的補(bǔ)碼;從兩次讀到的數(shù)據(jù)位可以對ROM 碼的第一位做出幾種判斷: 第一位的情況判斷按照搜索算法的要求,1Wire 主機(jī)必須向總線上的從機(jī)發(fā)回一個(gè)指定位;如果從機(jī)器件中ROM碼的當(dāng)前位的值與該數(shù)據(jù)位匹配,則繼續(xù)參與搜索過程;若從機(jī)器件的當(dāng)前位與之不匹配,則該器件轉(zhuǎn)換到等待狀態(tài),并保持等待狀態(tài)直到下一個(gè)1Wire 復(fù)位信號到來。其余63 位ROM 碼的搜索依然按照這種“讀兩位”、“寫一位”的模式進(jìn)行重復(fù)操作。按照這種搜索算法進(jìn)行下去,最終除了一個(gè)從機(jī)器件外
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1