"# \u57fa\u4e8e51\u5355\u7247\u673a\u7684Modbus\u901a\u8baf\u4ee3\u7801\u793a\u4f8b\n\n> 2023-02-11 | 2023-02-11\n> https:\/\/www.modbus.cn\/en\/11678.html\n\n**Modbus\u7f16\u7a0b\u5f00\u53d1**\n\n---\n\n\u4ee5\u4e0b\u662f\u57fa\u4e8e51\u5355\u7247\u673a\u7684Modbus\u901a\u8baf\u4ee3\u7801\u793a\u4f8b\uff0c\u4ee3\u7801\u4e2d\u4f7f\u7528\u4e86Keil C\u7f16\u8bd1\u5668\u548cSTC89C52\u5355\u7247\u673a\uff1a\n\n```\n#include &lt;reg52.h>\r\n\r\n#define SlaveAddress 1      \/\/ \u4ece\u673a\u5730\u5740\r\n#define FunctionCode 3      \/\/ \u529f\u80fd\u7801\r\n#define RegisterAddress 0   \/\/ \u5bc4\u5b58\u5668\u5730\u5740\r\n#define RegisterLength 1    \/\/ \u5bc4\u5b58\u5668\u957f\u5ea6\r\n\r\nsbit RS485_EN = P2^7;       \/\/ RS485\u82af\u7247\u4f7f\u80fd\u63a7\u5236\u5f15\u811a\r\n\r\nvoid delay(unsigned int i)  \/\/ \u5ef6\u65f6\u51fd\u6570\r\n{\r\n    while(i--);\r\n}\r\n\r\nvoid UART_Init()            \/\/ \u4e32\u53e3\u521d\u59cb\u5316\u51fd\u6570\r\n{\r\n    SCON = 0x50;\r\n    TMOD = 0x20;\r\n    TH1 = 0xFD;\r\n    TL1 = 0xFD;\r\n    TR1 = 1;\r\n}\r\n\r\nvoid SendByte(unsigned char dat)  \/\/ \u53d1\u9001\u4e00\u4e2a\u5b57\u8282\r\n{\r\n    SBUF = dat;\r\n    while(TI == 0);\r\n    TI = 0;\r\n}\r\n\r\nvoid SendPacket(unsigned char address, unsigned char function, unsigned char* pData, unsigned char length) \/\/ \u53d1\u9001\u6570\u636e\u5305\r\n{\r\n    unsigned char i, crcHi, crcLo;\r\n    crcHi = 0xFF;\r\n    crcLo = 0xFF;\r\n    SendByte(0xFF);\r\n    SendByte(0xFF);\r\n    SendByte(address);\r\n    SendByte(function);\r\n    SendByte(RegisterAddress \/ 256);\r\n    SendByte(RegisterAddress % 256);\r\n    SendByte(RegisterLength \/ 256);\r\n    SendByte(RegisterLength % 256);\r\n    for(i = 0; i &lt; length; i++)\r\n    {\r\n        SendByte(pData&#91;i]);\r\n        crcHi ^= pData&#91;i];\r\n        for(j = 0; j &lt; 8; j++)\r\n        {\r\n            if(crcHi &amp; 0x01)\r\n            {\r\n                crcHi >>= 1;\r\n                crcHi ^= 0xA0;\r\n            }\r\n            else\r\n            {\r\n                crcHi >>= 1;\r\n            }\r\n        }\r\n    }\r\n    SendByte(crcHi);\r\n    SendByte(crcLo);\r\n}\r\n\r\nvoid Modbus() \/\/ Modbus\u4e3b\u51fd\u6570\r\n{\r\n    unsigned char data&#91;2] = {0, 0};\r\n    SendPacket(SlaveAddress, FunctionCode, data, RegisterLength);\r\n}\r\n\r\nvoid main()\r\n{\r\n    UART_Init();\r\n    while(1)\r\n    {\r\n        RS485_EN = 0;\r\n        delay(1000);\r\n        Modbus();\r\n        delay(1000);\r\n        RS485_EN = 1;\r\n        delay(1000);\r\n    }\r\n}\r\n\n```\n\n\u6ce8\uff1a\u8be5\u4ee3\u7801\u4ec5\u4e3a\u793a\u4f8b\uff0c\u4ec5\u4f9b\u53c2\u8003\uff0c\u5177\u4f53\u5b9e\u73b0\u9700\u8981\u6839\u636e\u5b9e\u9645\u9700\u6c42\u8fdb\u884c\u8c03\u6574\u3002\n\n---\n*modbus.cn*\n"