




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、include / 字地址 0 - 255 (只取低 8位) / 位地址 0 - 255 (只取低 8位)/* CRC 高位字節(jié)值表 */ const uint8 code auchCRCHi = 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC
2、0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x4
3、0, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC
4、1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40
5、, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1
6、, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40/* CRC低位字節(jié)值表*/ const uint8 code auchCRCLo = 0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F
7、, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09, 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3, 0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2
8、, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A, 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26, 0x22
9、, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60,0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F, 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E, 0x7F,
10、 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5, 0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C, 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, 0x99,
11、 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C, 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83, 0x41, 0x81, 0x80, 0x40 uint8 testCoil; / 用于測試 位地址 1 uint16 testRegister; /用于測試 字址址 16uint8 localAddr = 1; /單片機(jī)控制板
12、的地址 uint16 crc16(uint8 *puchMsg, uint16 usDataLen)uint8 sendCount;/ 發(fā)送字節(jié)個(gè)數(shù)uint8 receCount;/ 接收到的字節(jié)個(gè)數(shù)uint8 sendPosi;/ 發(fā)送位置uint8 uchCRCHi = OxFF ; /*高 CRC字節(jié)初始化 */uint8 uchCRCLo = 0xFF ; /*低 CRC 字節(jié)初始化 */uin t32 uln dex ; /* CRC 循環(huán)中的索引 */while (usDataLen-) /* 傳輸消息緩沖區(qū) */ulndex = uchCRCHi 八 *puchMsg+ ; /*
13、計(jì)算 CRC */uchCRCHi = uchCRCLo 八 auchCRCHiul ndex;uchCRCLo = auchCRCLoulndex ;return (uchCRCHi 1)sendCount-;ACC = sendBuf0;TB8 = P;SBUF = sendBuf0;/void beginSend(void) / 讀線圈狀態(tài)void readCoil(void)uint8 addr;uint8 tempAddr;uint8 byteCount;uint8 bitCount;uint16 crcData;uint8 position;uint8 i,k;uint8 resu
14、lt;uint16 tempData;uint8 exit = 0;/addr = (receBuf28) + receBuf3;/tempAddr = addr & 0xfff;addr = receBuf3;tempAddr = addr;/bitCount = (receBuf48) + receBuf5; / 讀取的位個(gè)數(shù)bitCount = receBuf5;byteCount = bitCount / 8;/ 字節(jié)個(gè)數(shù)if(bitCount%8 != 0)byteCount+;for(k=0;kbyteCount;k+)/字節(jié)位置position = k + 3;sendBufpo
15、sition = 0;for(i=0;i8;i+)getCoilVal(tempAddr,&tempData);sendBufposition |= tempData = addr+bitCount) if(tempAddr = addr+bitCount) / 讀完exit = 1;break;if(exit = 1)break;sendBuf0 = localAddr;sendBuf1 = 0x01;sendBuf2 = byteCount;crcData = crc16(sendBuf,byteCount);sendBufbyteCount = crcData 8;byteCount+;
16、sendBufbyteCount = crcData & 0xff;sendCount = byteCount + 1;beginSend();/void readCoil(void)/讀寄存器 void readRegisters(void)uint8 addr;uint8 tempAddr;uint16 result;uint16 crcData;uint8 readCount;uint8 byteCount;uint8 finsh; /1 完成 0 出錯(cuò)uint16 i;uint16 tempData = 0;/addr = (receBuf28) + receBuf3;/tempAdd
17、r = addr & 0xfff;addr = receBuf3;tempAddr = addr;/readCount = (receBuf48) + receBuf5; /要讀的個(gè)數(shù)readCount = receBuf5;byteCount = readCount * 2;for(i=0;i 8;sendBufi+4 = tempData & 0xff;sendBuf0 = localAddr;sendBuf1 = 3;sendBuf2 = byteCount;byteCount += 3;crcData = crc16(sendBuf,byteCount);sendBufbyteCoun
18、t = crcData 8;byteCount+;sendBufbyteCount = crcData & 0xff;beginSend();sendCount = byteCount + 1;/void readRegisters(void)/ 強(qiáng)制單個(gè)線圈void forceSingleCoil(void)uint8 addr;uint8 tempAddr;uint16 tempData;uint8 onOff;uint8 i;/addr = (receBuf28) + receBuf3;/tempAddr = addr & 0xfff;addr = receBuf3;tempAddr =
19、 addr;/onOff = (receBuf48) + receBuf5;onOff = receBuf4;/if(onOff = 0xff00)if(onOff = 0xff) / 設(shè)為 ONtempData = 1;/else if(onOff = 0x0000)else if(onOff = 0x00) / 設(shè)為 OFFtempData = 0;setCoilVal(tempAddr,tempData);for(i=0;ireceCount;i+)sendBufi = receBufi;sendCount = receCount;beginSend();/void forceSingl
20、eCoil(void)/ 設(shè)置多個(gè)寄存器void presetMultipleRegisters(void)uint8 addr;uint8 tempAddr;uint8 byteCount;uint8 setCount;uint16 crcData;uint16 tempData;uint8 finsh; /為 1時(shí)完成 為 0時(shí)出錯(cuò)uint8 i;/addr = (receBuf28) + receBuf3;/tempAddr = addr & 0xfff;addr = receBuf3;tempAddr = addr & 0xff;/setCount = (receBuf48) + re
21、ceBuf5;setCount = receBuf5;byteCount = receBuf6;for(i=0;isetCount;i+,tempAddr+)tempData = (receBufi*2+7 8;sendBuf3 = addr & 0xff;sendBuf4 = setCount 8;crcData = crc16(sendBuf,6);sendBuf5 = setCount & 0xff;sendBuf6 = crcData 8;sendBuf7 = crcData & 0xff;sendCount = 8;beginSend();/void presetMultipleRe
22、gisters(void)/ 檢查 uart0 數(shù)據(jù)void checkComm0Modbus(void)uint16 crcData;uint16 tempData;if(receCount 4)switch(receBuf1)case 1:/讀取線圈狀態(tài) (讀取點(diǎn) 16 位以內(nèi) )case 3:/讀取保持寄存器 (一個(gè)或多個(gè) )case 5:/強(qiáng)制單個(gè)線圈case 6:/設(shè)置單個(gè)寄存器if(receCount = 8)/接收完成一組數(shù)據(jù)/ 應(yīng)該關(guān)閉接收中斷if(receBuf0=localAddr & checkoutError=0)crcData = crc16(receBuf,6);i
23、f(crcData = receBuf7+(receBuf6= tempData)if(receBuf0=localAddr & checkoutError=0)crcData = crc16(receBuf,tempDat-a2);if(crcData = (receBuftempData-28)+ receBuftempData-1)/forceMultipleCoils();receCount = 0;checkoutError = 0;break;case 16:/設(shè)置多個(gè)寄存器tempData = (receBuf4= tempData)if(receBuf0=localAddr &
24、 checkoutError=0)crcData = crc16(receBuf,tempDat-a2);if(crcData = (receBuftempData-28)+ receBuftempData-1)presetMultipleRegisters();receCount = 0;checkoutError = 0;break;default:break;/void checkComm0(void)/ 取線圈狀態(tài) 返回 0 表示成功uint16 getCoilVal(uint16 addr,uint16 *tempData)uint16 result = 0;uint16 tempA
25、ddr;tempAddr = addr & 0xfff;/ 只取低 8 位地址switch(tempAddr & 0xff)case 0:break;case 1:*tempData = testCoil;break;case 2:break;case 3:break;case 4:break;case 5:break;case 6:break;case 7:break;case 8:break;case 9:break;case 10:break;case 11:break;case 12:break;case 13:break;case 14:break;case 15:break;cas
26、e 16:break;default:break;return result;/uint16 getCoilVal(uint16 addr,uint16 *data)/ 設(shè)定線圈狀態(tài) 返回 0 表示成功uint16 setCoilVal(uint16 addr,uint16 tempData)uint16 result = 0;uint16 tempAddr;tempAddr = addr & 0xfff;switch(tempAddr & 0xff)case 0:break;case 1:testCoil = tempData;break;case 2:break;case 3:break;case 4:break;case 5:break;case 6:break;case 7:break;case 8:break;case 9:break;case 10:break;case 11:break;case 12:break;case 13:break;case 14:break;case 15:break;case 16:break;default:break;return result;/uint16 setCoilVal(uint16 addr,uint16 data)/ 取寄存器值 返回 0 表示成功uint16 getRegisterVal(uint16 addr,u
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于數(shù)字孿生的企業(yè)創(chuàng)新管理研究
- 安全播出試題及答案
- 教育信息化背景下的數(shù)字化資源開發(fā)策略研究
- 2025年鋼化夾層玻璃項(xiàng)目市場調(diào)查研究報(bào)告
- 云服務(wù)在辦公場景中的優(yōu)勢與挑戰(zhàn)分析
- 2025年兒童床用套件項(xiàng)目市場調(diào)查研究報(bào)告
- 教育機(jī)構(gòu)數(shù)字化轉(zhuǎn)型成效的綜合評(píng)價(jià)
- 德克隆類化合物對(duì)甲狀腺系統(tǒng)的干擾效應(yīng)及分子機(jī)制探究:基于多維度研究與案例分析
- 小麥抗旱性鑒定評(píng)價(jià)指標(biāo)比較研究
- 企業(yè)創(chuàng)新能力的培育與提升計(jì)劃
- 濟(jì)南幼兒師范高等專科學(xué)校招聘真題2024
- 定額〔2025〕1號(hào)文-關(guān)于發(fā)布2018版電力建設(shè)工程概預(yù)算定額2024年度價(jià)格水平調(diào)整的通知
- 10SG614-2 砌體填充墻構(gòu)造詳圖(二)(與主體結(jié)構(gòu)柔性連接)
- 固體料倉 (2.26)設(shè)計(jì)計(jì)算
- 全國2021年4月自學(xué)考試00322中國行政史試題答案
- 外周神經(jīng)復(fù)發(fā)性神經(jīng)鞘瘤的顯微外科治療課件
- DB21∕T 3384-2021 空氣源熱泵系統(tǒng)工程技術(shù)規(guī)程
- 斜屋面專項(xiàng)施工方案-掛瓦坡屋面(附圖)
- Q∕GDW 10364-2020 單相智能電能表技術(shù)規(guī)范
- 名著閱讀《童年》
- 數(shù)學(xué)周活動(dòng)方案小學(xué)數(shù)學(xué)周活動(dòng)方案.doc
評(píng)論
0/150
提交評(píng)論