From bcd3024235d04c926f8a915500927232435137a7 Mon Sep 17 00:00:00 2001
From: zhyinch <zhyinch@gmail.com>
Date: 星期日, 23 一月 2022 13:07:59 +0800
Subject: [PATCH] 增加modbus功能,待测试

---
 源码/核心板/MDK-ARM/Project.uvguix.zhyin |  118 ++++--
 源码/核心板/MDK-ARM/Project.uvprojx      |    5 
 源码/核心板/Src/application/modbus.c     |  604 +++++++++++++++++++++++++++++++++++
 源码/核心板/MDK-ARM/Project.uvoptx       |   96 +++--
 源码/核心板/Src/OnChipDevices/Usart.c    |  140 +++++++
 源码/核心板/Src/application/modbus.h     |   34 ++
 源码/核心板/Src/application/dw_app.c     |    4 
 7 files changed, 897 insertions(+), 104 deletions(-)

diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/MDK-ARM/Project.uvguix.zhyin" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/MDK-ARM/Project.uvguix.zhyin"
index 5dc7e8c..da59d0a 100644
--- "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/MDK-ARM/Project.uvguix.zhyin"
+++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/MDK-ARM/Project.uvguix.zhyin"
@@ -6,7 +6,7 @@
   <Header>### uVision Project, (C) Keil Software</Header>
 
   <PrjGuiSettings>
-    <LastAddFilePath></LastAddFilePath>
+    <LastAddFilePath>E:\GIT\UWB_SmallModule\婧愮爜\鏍稿績鏉縗Src\application</LastAddFilePath>
   </PrjGuiSettings>
 
   <ViewPool/>
@@ -15,17 +15,17 @@
     <View>
       <WinId>38003</WinId>
       <ViewName>Registers</ViewName>
-      <TableColWidths>198 199</TableColWidths>
+      <TableColWidths>145 145</TableColWidths>
     </View>
     <View>
       <WinId>346</WinId>
       <ViewName>Code Coverage</ViewName>
-      <TableColWidths>770 304</TableColWidths>
+      <TableColWidths>770 160</TableColWidths>
     </View>
     <View>
       <WinId>204</WinId>
       <ViewName>Performance Analyzer</ViewName>
-      <TableColWidths>696 139 139 100</TableColWidths>
+      <TableColWidths>930</TableColWidths>
     </View>
   </SECTreeCtrl>
 
@@ -101,17 +101,17 @@
         <yPos>-1</yPos>
       </MaxPosition>
       <NormalPosition>
-        <Top>-874</Top>
-        <Left>-757</Left>
-        <Right>790</Right>
-        <Bottom>-39</Bottom>
+        <Top>-6</Top>
+        <Left>-6</Left>
+        <Right>1541</Right>
+        <Bottom>829</Bottom>
       </NormalPosition>
     </WindowPosition>
     <MDIClientArea>
       <RegID>0</RegID>
       <MDITabState>
-        <Len>904</Len>
-        <Data>0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000800000001000000010000002D453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF3B453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C6170706C69636174696F6E5C64775F6170702E63000000000864775F6170702E6300000000FFDC7800FFFFFFFF41453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C6170706C69636174696F6E5C676C6F62616C5F706172616D2E63000000000E676C6F62616C5F706172616D2E6300000000BECEA100FFFFFFFF46453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C6170706C69636174696F6E5C73657269616C5F61745F636D645F6170702E63000000001373657269616C5F61745F636D645F6170702E6300000000F0A0A100FFFFFFFF41453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C6170706C69636174696F6E5C676C6F62616C5F706172616D2E68000000000E676C6F62616C5F706172616D2E6800000000BCA8E100FFFFFFFF47453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C4F6E43686970446576696365735C5263635F4E7669635F5379737469636B2E6300000000125263635F4E7669635F5379737469636B2E63000000009CC1B600FFFFFFFF3C453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C4F6E43686970446576696365735C55736172742E63000000000755736172742E6300000000F7B88600FFFFFFFF3B453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C6170706C69636174696F6E5C64775F6170702E68000000000864775F6170702E6800000000D9ADC200FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD50001000000000000000200000046FDFFFF2EFCFFFF960300004BFEFFFF</Data>
+        <Len>1074</Len>
+        <Data>0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000A00000001000000010000002D453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF3B453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C6170706C69636174696F6E5C64775F6170702E63000000000864775F6170702E6300000000FFDC7800FFFFFFFF41453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C6170706C69636174696F6E5C676C6F62616C5F706172616D2E63000000000E676C6F62616C5F706172616D2E6300000000BECEA100FFFFFFFF46453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C6170706C69636174696F6E5C73657269616C5F61745F636D645F6170702E63000000001373657269616C5F61745F636D645F6170702E6300000000F0A0A100FFFFFFFF41453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C6170706C69636174696F6E5C676C6F62616C5F706172616D2E68000000000E676C6F62616C5F706172616D2E6800000000BCA8E100FFFFFFFF47453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C4F6E43686970446576696365735C5263635F4E7669635F5379737469636B2E6300000000125263635F4E7669635F5379737469636B2E63000000009CC1B600FFFFFFFF3C453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C4F6E43686970446576696365735C55736172742E63000000000755736172742E6300000000F7B88600FFFFFFFF3B453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C6170706C69636174696F6E5C64775F6170702E68000000000864775F6170702E6800000000D9ADC200FFFFFFFF3B453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C6170706C69636174696F6E5C6D6F646275732E6300000000086D6F646275732E6300000000A5C2D700FFFFFFFF3B453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C6170706C69636174696F6E5C6D6F646275732E6800000000086D6F646275732E6800000000B3A6BE00FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD50001000000000000000200000030010000660000000006000007020000</Data>
       </MDITabState>
     </MDIClientArea>
     <ViewEx>
@@ -134,7 +134,7 @@
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>DAFCFFFF2EFCFFFF860000009CFCFFFF</Data>
+          <Data>C40000006600000070040000D4000000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -150,7 +150,7 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03000000660000002901000053020000</Data>
+          <Data>030000006600000029010000D7010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
@@ -170,7 +170,7 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03000000660000002901000053020000</Data>
+          <Data>030000006600000029010000D7010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
@@ -450,7 +450,7 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03000000660000002901000053020000</Data>
+          <Data>030000006600000029010000D7010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
@@ -470,7 +470,7 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03000000660000002901000053020000</Data>
+          <Data>030000006600000029010000D7010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
@@ -490,7 +490,7 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03000000870200007D070000CD030000</Data>
+          <Data>030000000B020000FD050000F5020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
@@ -526,11 +526,11 @@
         <IsActivated>0</IsActivated>
         <MRUWidth>32767</MRUWidth>
         <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
+        <RecentFrameAlignment>32768</RecentFrameAlignment>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03000000870200007D070000CD030000</Data>
+          <Data>030000000B020000FD050000F5020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
@@ -1150,7 +1150,7 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>0300000066000000290100005B030000</Data>
+          <Data>03000000660000002901000053020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
@@ -1166,11 +1166,11 @@
         <IsActivated>0</IsActivated>
         <MRUWidth>32767</MRUWidth>
         <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
+        <RecentFrameAlignment>32768</RecentFrameAlignment>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03000000870200007D070000C5020000</Data>
+          <Data>030000000B0200007D07000051030000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
@@ -1186,11 +1186,11 @@
         <IsActivated>0</IsActivated>
         <MRUWidth>32767</MRUWidth>
         <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
+        <RecentFrameAlignment>32768</RecentFrameAlignment>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03000000870200007D070000C5020000</Data>
+          <Data>030000000B0200007D07000051030000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
@@ -1246,11 +1246,11 @@
         <IsActivated>0</IsActivated>
         <MRUWidth>32767</MRUWidth>
         <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
+        <RecentFrameAlignment>32768</RecentFrameAlignment>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03000000870200007D070000C5020000</Data>
+          <Data>030000000B0200007D07000051030000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
@@ -1266,11 +1266,11 @@
         <IsActivated>0</IsActivated>
         <MRUWidth>32767</MRUWidth>
         <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
+        <RecentFrameAlignment>32768</RecentFrameAlignment>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03000000870200007D070000C5020000</Data>
+          <Data>030000000B0200007D07000051030000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
@@ -1730,7 +1730,7 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>00000000E603000080070000F9030000</Data>
+          <Data>000000000E0300000006000021030000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
@@ -1799,14 +1799,14 @@
       </Window>
       <DockMan>
         <Len>3312</Len>
-        <Data>000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFC4000000BD00000070040000C1000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000DAFCFFFF2EFCFFFF860000009CFCFFFFC40000004F00000070040000BD0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFFAC0300004F000000B0030000A5010000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000C6FFFFFF2EFCFFFF8600000084FDFFFFB00300004F00000070040000A501000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF2C0100004F000000300100006C0200000100000002000010040000000100000042FFFFFFB7060000FFFFFFFF05000000ED0300006D000000C3000000C4000000739400000180001000000100000016FCFFFF2EFCFFFF42FDFFFF53FFFFFF000000004F0000002C0100006C0200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000091010000700400009501000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB0900000180008000000000000016FCFFFF74FDFFFF86000000F6FDFFFF0000000095010000700400001702000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFF38020000950100003C0200001702000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF000000006C020000800700007002000001000000010000100400000001000000E0FCFFFF6C000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF010000779400000180008000000100000016FCFFFF57FFFFFF96030000C5FFFFFF000000007002000080070000E60300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657301000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000</Data>
+        <Data>000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFC4000000BD00000070040000C1000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000C40000006600000070040000D4000000C40000004F00000070040000BD0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFFAC0300004F000000B0030000A5010000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000B00300006600000070040000BC010000B00300004F00000070040000A501000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF2C0100004F00000030010000F00100000100000002000010040000000100000042FFFFFFB7060000FFFFFFFF05000000ED0300006D000000C3000000C4000000739400000180001000000100000000000000660000002C01000083020000000000004F0000002C010000F00100000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000091010000700400009501000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB0900000180008000000000000000000000AC010000700400002E0200000000000095010000700400001702000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFF38020000950100003C0200001702000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF00000000F001000000060000F401000001000000010000100400000001000000FFFDFFFFB3000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000001000000000000008702000080070000FD03000000000000F4010000000600000E0300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657301000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000</Data>
       </DockMan>
       <ToolBar>
         <RegID>59392</RegID>
         <Name>File</Name>
         <Buttons>
-          <Len>2894</Len>
-          <Data>00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000C5741525F4A44515F54494D459600000000000000140011675F636F6D6D61705F616E7464656C61790A414E545F4C454E4754480C5741525F4A44515F54494D4508616E7464656C61790C7265635F616E7464656C617911675F73746172745F73656E645F666C61670A45555F3438355F50494E0A4750494F5F50494E5F37104750494F422C4750494F5F50494E5F3705636C6F736513554450436C69656E745F55706C6F61644750530C6C5F617538436D64427566660E52544B436C69656E745F496E69740E544350436C69656E745F496E69740B675F5265737474696D65720C7577625F6170705F696E69740C50726F6772616D5F496E6974104457545F5354535F4D4F44455F5344430844495343504F4C4C0A75736172745F73656E640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000</Data>
+          <Len>2898</Len>
+          <Data>00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000C4C49533344485F436865636B960000000000000014000C7374617274526567416464720C4C49533344485F436865636B0E4C49533344485F526561645265670F4C49533344485F57726974655265670B7461676C6973745F706F7309675F546167646973740A52656C6179325461736B0B5553415254315F496E697407524547504F4C4C09455F4442474D6F64650C4442475F4D4F44455F4750530844495343504F4C4C12416E63686F725F5265634E656172506F6C6C12616E637265635F6E65617262617365706F731B44454C41595F4245545745454E5F54574F5F4652414D455F5555530849646C655461736B0841504C5F506F6C6C0B757762706F6C6C7461736B11675F73746172745F73656E645F666C61670C7577625F6170705F706F6C6C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000</Data>
         </Buttons>
         <OriginalItems>
           <Len>1423</Len>
@@ -1822,7 +1822,7 @@
         <Name>Build</Name>
         <Buttons>
           <Len>970</Len>
-          <Data>00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000002001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0000000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050000000000553544D3332960000000000000001000553544D3332000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000</Data>
+          <Data>00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000002001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050000000000553544D3332960000000000000001000553544D3332000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000</Data>
         </Buttons>
         <OriginalItems>
           <Len>583</Len>
@@ -1838,7 +1838,7 @@
         <Name>Debug</Name>
         <Buttons>
           <Len>2373</Len>
-          <Data>00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000</Data>
+          <Data>00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000</Data>
         </Buttons>
         <OriginalItems>
           <Len>898</Len>
@@ -3606,18 +3606,18 @@
       <ActiveTab>1</ActiveTab>
       <Doc>
         <Name>..\Src\main.c</Name>
-        <ColumnNumber>0</ColumnNumber>
-        <TopLine>73</TopLine>
-        <CurrentLine>82</CurrentLine>
+        <ColumnNumber>17</ColumnNumber>
+        <TopLine>82</TopLine>
+        <CurrentLine>91</CurrentLine>
         <Folding>1</Folding>
         <ContractedFolders></ContractedFolders>
         <PaneID>0</PaneID>
       </Doc>
       <Doc>
         <Name>..\Src\application\dw_app.c</Name>
-        <ColumnNumber>23</ColumnNumber>
-        <TopLine>997</TopLine>
-        <CurrentLine>1017</CurrentLine>
+        <ColumnNumber>36</ColumnNumber>
+        <TopLine>1016</TopLine>
+        <CurrentLine>1031</CurrentLine>
         <Folding>1</Folding>
         <ContractedFolders></ContractedFolders>
         <PaneID>0</PaneID>
@@ -3625,8 +3625,8 @@
       <Doc>
         <Name>..\Src\application\global_param.c</Name>
         <ColumnNumber>0</ColumnNumber>
-        <TopLine>16</TopLine>
-        <CurrentLine>48</CurrentLine>
+        <TopLine>1</TopLine>
+        <CurrentLine>6</CurrentLine>
         <Folding>1</Folding>
         <ContractedFolders></ContractedFolders>
         <PaneID>0</PaneID>
@@ -3642,9 +3642,9 @@
       </Doc>
       <Doc>
         <Name>..\Src\application\global_param.h</Name>
-        <ColumnNumber>22</ColumnNumber>
-        <TopLine>31</TopLine>
-        <CurrentLine>54</CurrentLine>
+        <ColumnNumber>0</ColumnNumber>
+        <TopLine>1</TopLine>
+        <CurrentLine>6</CurrentLine>
         <Folding>1</Folding>
         <ContractedFolders></ContractedFolders>
         <PaneID>0</PaneID>
@@ -3652,7 +3652,7 @@
       <Doc>
         <Name>..\Src\OnChipDevices\Rcc_Nvic_Systick.c</Name>
         <ColumnNumber>0</ColumnNumber>
-        <TopLine>166</TopLine>
+        <TopLine>186</TopLine>
         <CurrentLine>209</CurrentLine>
         <Folding>1</Folding>
         <ContractedFolders></ContractedFolders>
@@ -3660,18 +3660,36 @@
       </Doc>
       <Doc>
         <Name>..\Src\OnChipDevices\Usart.c</Name>
-        <ColumnNumber>15</ColumnNumber>
-        <TopLine>280</TopLine>
-        <CurrentLine>310</CurrentLine>
+        <ColumnNumber>0</ColumnNumber>
+        <TopLine>1</TopLine>
+        <CurrentLine>4</CurrentLine>
         <Folding>1</Folding>
         <ContractedFolders></ContractedFolders>
         <PaneID>0</PaneID>
       </Doc>
       <Doc>
         <Name>..\Src\application\dw_app.h</Name>
+        <ColumnNumber>19</ColumnNumber>
+        <TopLine>1</TopLine>
+        <CurrentLine>5</CurrentLine>
+        <Folding>1</Folding>
+        <ContractedFolders></ContractedFolders>
+        <PaneID>0</PaneID>
+      </Doc>
+      <Doc>
+        <Name>..\Src\application\modbus.c</Name>
+        <ColumnNumber>60</ColumnNumber>
+        <TopLine>501</TopLine>
+        <CurrentLine>518</CurrentLine>
+        <Folding>1</Folding>
+        <ContractedFolders></ContractedFolders>
+        <PaneID>0</PaneID>
+      </Doc>
+      <Doc>
+        <Name>..\Src\application\modbus.h</Name>
         <ColumnNumber>0</ColumnNumber>
-        <TopLine>47</TopLine>
-        <CurrentLine>62</CurrentLine>
+        <TopLine>4</TopLine>
+        <CurrentLine>13</CurrentLine>
         <Folding>1</Folding>
         <ContractedFolders></ContractedFolders>
         <PaneID>0</PaneID>
diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/MDK-ARM/Project.uvoptx" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/MDK-ARM/Project.uvoptx"
index eaf116f..2ccb392 100644
--- "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/MDK-ARM/Project.uvoptx"
+++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/MDK-ARM/Project.uvoptx"
@@ -413,6 +413,18 @@
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
     </File>
+    <File>
+      <GroupNumber>1</GroupNumber>
+      <FileNumber>5</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\Src\application\modbus.c</PathWithFileName>
+      <FilenameWithoutPath>modbus.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
   </Group>
 
   <Group>
@@ -423,7 +435,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>5</FileNumber>
+      <FileNumber>6</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -435,7 +447,7 @@
     </File>
     <File>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>6</FileNumber>
+      <FileNumber>7</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -455,7 +467,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>7</FileNumber>
+      <FileNumber>8</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -467,7 +479,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>8</FileNumber>
+      <FileNumber>9</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -487,7 +499,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>9</FileNumber>
+      <FileNumber>10</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -499,7 +511,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>10</FileNumber>
+      <FileNumber>11</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -511,7 +523,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>11</FileNumber>
+      <FileNumber>12</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -531,7 +543,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>12</FileNumber>
+      <FileNumber>13</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -543,7 +555,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>13</FileNumber>
+      <FileNumber>14</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -555,7 +567,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>14</FileNumber>
+      <FileNumber>15</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -575,7 +587,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>15</FileNumber>
+      <FileNumber>16</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -587,7 +599,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>16</FileNumber>
+      <FileNumber>17</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -599,7 +611,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>17</FileNumber>
+      <FileNumber>18</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -611,7 +623,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>18</FileNumber>
+      <FileNumber>19</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -623,7 +635,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>19</FileNumber>
+      <FileNumber>20</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -635,7 +647,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>20</FileNumber>
+      <FileNumber>21</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -655,7 +667,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>21</FileNumber>
+      <FileNumber>22</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -667,7 +679,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>22</FileNumber>
+      <FileNumber>23</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -679,7 +691,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>23</FileNumber>
+      <FileNumber>24</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -691,7 +703,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>24</FileNumber>
+      <FileNumber>25</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -703,7 +715,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>25</FileNumber>
+      <FileNumber>26</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -715,7 +727,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>26</FileNumber>
+      <FileNumber>27</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -727,7 +739,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>27</FileNumber>
+      <FileNumber>28</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -739,7 +751,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>28</FileNumber>
+      <FileNumber>29</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -751,7 +763,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>29</FileNumber>
+      <FileNumber>30</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -763,7 +775,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>30</FileNumber>
+      <FileNumber>31</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -775,7 +787,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>31</FileNumber>
+      <FileNumber>32</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -787,7 +799,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>32</FileNumber>
+      <FileNumber>33</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -799,7 +811,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>33</FileNumber>
+      <FileNumber>34</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -811,7 +823,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>34</FileNumber>
+      <FileNumber>35</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -823,7 +835,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>35</FileNumber>
+      <FileNumber>36</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -835,7 +847,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>36</FileNumber>
+      <FileNumber>37</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -847,7 +859,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>37</FileNumber>
+      <FileNumber>38</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -859,7 +871,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>38</FileNumber>
+      <FileNumber>39</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -871,7 +883,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>39</FileNumber>
+      <FileNumber>40</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -883,7 +895,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>40</FileNumber>
+      <FileNumber>41</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -895,7 +907,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>41</FileNumber>
+      <FileNumber>42</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -907,7 +919,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>42</FileNumber>
+      <FileNumber>43</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -919,7 +931,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>43</FileNumber>
+      <FileNumber>44</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -939,7 +951,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>8</GroupNumber>
-      <FileNumber>44</FileNumber>
+      <FileNumber>45</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -951,7 +963,7 @@
     </File>
     <File>
       <GroupNumber>8</GroupNumber>
-      <FileNumber>45</FileNumber>
+      <FileNumber>46</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -963,7 +975,7 @@
     </File>
     <File>
       <GroupNumber>8</GroupNumber>
-      <FileNumber>46</FileNumber>
+      <FileNumber>47</FileNumber>
       <FileType>2</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/MDK-ARM/Project.uvprojx" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/MDK-ARM/Project.uvprojx"
index ed1ce1a..07cc204 100644
--- "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/MDK-ARM/Project.uvprojx"
+++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/MDK-ARM/Project.uvprojx"
@@ -402,6 +402,11 @@
               <FileType>1</FileType>
               <FilePath>..\Src\application\dw_app.c</FilePath>
             </File>
+            <File>
+              <FileName>modbus.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\Src\application\modbus.c</FilePath>
+            </File>
           </Files>
         </Group>
         <Group>
diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/OnChipDevices/Usart.c" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/OnChipDevices/Usart.c"
index e208c34..cb7716c 100644
--- "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/OnChipDevices/Usart.c"
+++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/OnChipDevices/Usart.c"
@@ -1,6 +1,7 @@
 #include "Usart.h"
 #include <string.h>
 #include <stdio.h>
+#include "modbus.h"
 
 //数据发送队列变量
 EUART_Frame m_EUART_TxFrames[EUART_TX_FRM_SIZE];	//数据发送帧队列	
@@ -10,6 +11,8 @@
 //DMA数据接收缓存
 uint8_t m_EUART_DMA_RXBuf[EUART_RX_BUF_SIZE];			//DMA数据接收缓存
 volatile int32_t m_EUART_DMA_RXPtr = 0;					//当前数据地址
+int16_t DMA_rxtemp = 0,DMA_rxtemp2 = 0;															//当前数据地址缓存
+u16 datadelaycount = 0;													//剩余1位数据延时等待处理
 //标志变量
 volatile uint8_t m_bEUARTPushingFrms = 0;				//正在往发送队列存数据
 volatile uint8_t m_bEUARTCheckingSend = 0;				//正在确认数据发送
@@ -120,12 +123,17 @@
 	UART_DMAConfiguration();
 	
 }
-
+extern u8 cmd_mode;
+u8 overrun_flag=0;
+u16 t1,t2,t3,t4;
 void UART_CheckReceive(void)
 {
 	int32_t DMACnt = 0;
 	int32_t MaxDataLen = EUART_RX_BUF_SIZE;	
-	
+	u8 rxbuf_len = 0;
+	u8 buftemp1 = 0;
+	u8 buftemp2 = 0;
+	u8 i = 0;
 	//如果正在往发送队列中添加数据,退出
 	if(m_bEUARTPushingFrms)
 		return;
@@ -138,23 +146,131 @@
 		m_bEUARTCheckingRec = 0;
 		return;
 	}
-	DMACnt = EUART_RX_BUF_SIZE - (EUART_RX_DMA_CH->CNDTR);
-	while( m_EUART_DMA_RXPtr != DMACnt && MaxDataLen > 0)
+	
+	DMACnt = EUART_RX_BUF_SIZE - (EUART_RX_DMA_CH->CNDTR);//DMACnt是DMA通道接收到数据总长度,CNDTR是dma剩余未使用数量
+	
+	if(DMACnt!=m_EUART_DMA_RXPtr)
 	{
-		Usart1ParseDataCallback(m_EUART_DMA_RXBuf[m_EUART_DMA_RXPtr]);
+		//DMA有未处理数据
+		DMA_rxtemp=m_EUART_DMA_RXPtr+1;
 		delay_us(10);
-		m_EUART_DMA_RXPtr++;
-		if( m_EUART_DMA_RXPtr >= EUART_RX_BUF_SIZE )
+		overrun_flag=0;
+		if( DMA_rxtemp >= EUART_RX_BUF_SIZE )
 		{
-			m_EUART_DMA_RXPtr = 0;
+			DMA_rxtemp = 0;
 		}
-		DMACnt = EUART_RX_BUF_SIZE - (EUART_RX_DMA_CH->CNDTR);
-		MaxDataLen--;
-	}
-	m_bEUARTCheckingRec = 0;	
+		DMACnt = EUART_RX_BUF_SIZE - (EUART_RX_DMA_CH->CNDTR);//DMACnt是DMA通道接收到数据总长度,CNDTR是dma剩余未使用数量
+		if(DMACnt!=DMA_rxtemp&&(cmd_mode==0))
+		{
+			//DMA有超过2位数据未处理
+			DMA_rxtemp = 0;//清空数组指针
+			datadelaycount = 0;//等待次数清零
+			buftemp1 = m_EUART_DMA_RXBuf[m_EUART_DMA_RXPtr];
+			buftemp2 = m_EUART_DMA_RXBuf[m_EUART_DMA_RXPtr+1];
+			if((buftemp1==0x55)&&(buftemp2==0xAA))
+			{
+				//私有协议
+				cmd_mode = 1;
+			}
+			else if(buftemp1==RS485_Addr)
+			{
+				if((buftemp2==03)||(buftemp2==06)||(buftemp2==16))//功能码正确
+				{
+					//modubs协议
+					t1++;
+					cmd_mode=2;
+					DMA_rxtemp2=m_EUART_DMA_RXPtr+7;
+					if( DMA_rxtemp2 >= EUART_RX_BUF_SIZE-1 )
+						{
+							DMA_rxtemp2 -= EUART_RX_BUF_SIZE;
+							overrun_flag=1;
+						}
+				}
+				else
+				{
+					m_EUART_DMA_RXPtr+=2;
+					if( m_EUART_DMA_RXPtr >= EUART_RX_BUF_SIZE )
+					{
+						m_EUART_DMA_RXPtr = 0;
+					}					
+				}
+			}
+			else
+			{
+				//无效码,干扰码
+				if(cmd_mode==0)
+				{
+						m_EUART_DMA_RXPtr+=2;
+						if( m_EUART_DMA_RXPtr >= EUART_RX_BUF_SIZE )
+						{
+							m_EUART_DMA_RXPtr = 0;
+						}
+				 }
+			 }			
+		}
+		else
+		{
+			//只有1位数据未处理
+				if(++datadelaycount > WAITDELAYCOUNT)
+				{	//超出等待次数
+					datadelaycount = 0;
+					cmd_mode=0;
+					m_EUART_DMA_RXPtr++;
+					if( m_EUART_DMA_RXPtr >= EUART_RX_BUF_SIZE )
+					{
+						m_EUART_DMA_RXPtr = 0;
+					}					
+				}
+		}
+		if(cmd_mode==1)
+		{
+			//私有协议
+			while( m_EUART_DMA_RXPtr != DMACnt && MaxDataLen > 0)
+			{	
+				Usart1ParseDataCallback(m_EUART_DMA_RXBuf[m_EUART_DMA_RXPtr]);
+				m_EUART_DMA_RXPtr++;
+				if( m_EUART_DMA_RXPtr >= EUART_RX_BUF_SIZE )
+				{
+					m_EUART_DMA_RXPtr = 0;
+				}
+				DMACnt = EUART_RX_BUF_SIZE - (EUART_RX_DMA_CH->CNDTR);
+				MaxDataLen--;	
+			}
+		}		
+		else if(cmd_mode==2)
+		{
+			//modbus协议
+			delay_ms(10);//等待数据接收完成
+			DMACnt = EUART_RX_BUF_SIZE - (EUART_RX_DMA_CH->CNDTR);	
+		if((overrun_flag==0&&DMACnt>DMA_rxtemp2)||(overrun_flag==1&&DMACnt<DMA_rxtemp&&DMACnt>DMA_rxtemp2))			
+		{	while(m_EUART_DMA_RXPtr != DMACnt && MaxDataLen > 0)
+			{
+				RS485_RX_BUFF[i] = m_EUART_DMA_RXBuf[m_EUART_DMA_RXPtr];
+				m_EUART_DMA_RXPtr++;
+				if(++i >= EUART_RX_BUF_SIZE)i = 0;
+				if( m_EUART_DMA_RXPtr >= EUART_RX_BUF_SIZE )
+				{
+					m_EUART_DMA_RXPtr = 0;
+				}
+				DMACnt = EUART_RX_BUF_SIZE - (EUART_RX_DMA_CH->CNDTR);
+				MaxDataLen--;	
+			}
+//			m_EUART_DMA_RXPtr++;//数据指向下一位
+//			if( m_EUART_DMA_RXPtr >= EUART_RX_BUF_SIZE )
+//			{
+//				m_EUART_DMA_RXPtr = 0;
+//			}
+			t2++;
+				RS485_Service();	
+		}			
+			}				
+		}
+
+	m_bEUARTCheckingRec = 0;
 }
 
 
+
 #ifndef EXUART_USE_TXDMA							
 //查询方式发送数据
 void UART_CheckSend(void)
diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c"
index 20612af..bd9931b 100644
--- "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c"
+++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c"
@@ -1,5 +1,6 @@
 #include "dw_app.h"
 #include "ADC.h"
+#include "modbus.h"
 #define TDFILTER
 enum enumtagstate
 {
@@ -1023,6 +1024,9 @@
 					memcpy(&usart_send_anc[6+6*anc_report_num],&tagdist_list[taglist_pos],4);
 					anc_report_num++;
 				#endif
+					Modbus_HoldReg[taglist_pos*4] = tag_id_recv;
+					Modbus_HoldReg[taglist_pos*4+1] = button<<8|battary;
+					memcpy(&Modbus_HoldReg[taglist_pos*4+2],&tagdist_list[taglist_pos],4);
 					}else{
 					//	printf("%d",hex_dist);
 						misdist_num[taglist_pos]++;
diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/modbus.c" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/modbus.c"
new file mode 100644
index 0000000..0fd9167
--- /dev/null
+++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/modbus.c"
@@ -0,0 +1,604 @@
+#include "modbus.h"
+#include "Rcc_Nvic_Systick.h"
+#include "global_param.h"
+#include <string.h>
+///////////////////////////////////////////////////////////
+//u32 RS485_Baudrate=9600;//通讯波特率
+//u8 RS485_Parity=0;//0无校验;1奇校验;2偶校验
+u8 RS485_Addr=1;//从机地址
+//u16 RS485_Frame_Distance=4;//数据帧最小间隔(ms),超过此时间则认为是下一帧
+
+u8 cmd_mode = 0;
+
+u8 RS485_RX_BUFF[200];//接收缓冲区200字节
+u16 RS485_RX_CNT=0;//接收计数器
+//u8 RS485_FrameFlag=0;//帧结束标记
+u8 RS485_TX_BUFF[200];//发送缓冲区
+u16 RS485_TX_CNT=0;//发送计数器
+
+//u8 DATA_RX_BUFF[2048];//接收缓存;
+////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//Modbus寄存器和单片机寄存器的映射关系
+vu32 *Modbus_InputIO[100];//输入开关量寄存器指针(这里使用的是位带操作)
+vu32 *Modbus_OutputIO[100];//输出开关量寄存器指针(这里使用的是位带操作)
+u16 Modbus_HoldReg[MODBUS_SIZE];//保持寄存器指针
+u32 testData1=1201,testData2=1002,testData3=2303,testData4=8204;
+void Modbus_RegMap(void)
+{
+	u16 i;
+	RS485_Addr=g_com_map[DEV_ID];
+	for(i=0;i<MODBUS_SIZE;i++)
+	{
+		Modbus_HoldReg[i]=i;
+	}
+        //输入开关量寄存器指针指向
+//        Modbus_InputIO[0]=(vu32*)&PEin(4);//KEY0     //&PEin(4):取PE4的地址,(vu32*)&PEin(4)将PE4地址强制转换为uw32类型的地址,Modbus_InputIO[0]=(vu32*)&PEin(4); 将转换好的地址送给地址指针Modbus_InputIO[0];
+//        Modbus_InputIO[1]=(vu32*)&PEin(3);//KEY1     //*Modbus_InputIO[0] 取出地址中的内容。
+//        Modbus_InputIO[2]=(vu32*)&PEin(2);//KEY2
+//        Modbus_InputIO[3]=(vu32*)&PAin(0);//KEY3
+        
+        //输出开关量寄存器指针指向
+//        Modbus_OutputIO[0]=(vu32*)&PBout(5);//LED0
+//        Modbus_OutputIO[1]=(vu32*)&PEout(5);//LED1
+        
+        //保持寄存器指针指向
+//        Modbus_HoldReg[0]=(u16*)&testData1;//测试数据1 
+//        Modbus_HoldReg[1]=(u16*)&testData2;//((u16*)&testData1)+1;//测试数据1 
+//        Modbus_HoldReg[2]=(u16*)&testData3;//(u16*)&testData2;//测试数据2
+//        Modbus_HoldReg[3]=(u16*)&testData4;//((u16*)&testData2)+1;//测试数据2 
+//        Modbus_HoldReg[4]=(u16*)&testData1;
+//				Modbus_HoldReg[5]=(u16*)&testData2;
+//				Modbus_HoldReg[6]=(u16*)&testData3;
+	
+}
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+//CRC校验 自己后面添加的
+
+const u8 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, 0xC0, 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, 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, 
+0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,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, 
+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, 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, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 
+0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,0x80, 0x41, 0x00, 0xC1, 0x81, 0x40} ; 
+
+
+const u8 auchCRCLo[] = { 
+0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06,0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD, 
+0x0F, 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, 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, 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, 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, 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} ;
+
+
+u16 CRC_Compute(u8 *puchMsg, u16 usDataLen) 
+{ 
+	u8 uchCRCHi = 0xFF ; 
+	u8 uchCRCLo = 0xFF ; 
+	u32 uIndex ; 
+	while (usDataLen--) 
+	{ 
+		uIndex = uchCRCHi ^ *puchMsg++ ; 
+		uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex] ; 
+		uchCRCLo = auchCRCLo[uIndex] ; 
+	} 
+	return ((uchCRCHi<< 8)  | (uchCRCLo)) ; 
+}//uint16 crc16(uint8 *puchMsg, uint16 usDataLen)
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+//初始化USART2
+void RS485_Init(void)
+{
+        GPIO_InitTypeDef GPIO_InitStructure;
+//        USART_InitTypeDef USART_InitStructure;
+//        NVIC_InitTypeDef NVIC_InitStructure;
+        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
+//        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
+        
+//        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;//PA2(TX)复用推挽输出
+//        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
+        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
+//        GPIO_Init(GPIOA,&GPIO_InitStructure);
+//        GPIO_SetBits(GPIOA,GPIO_Pin_2);//默认高电平
+//        
+//        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;//PA3(RX)输入上拉
+//        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;   //修改原GPIO_Mode_IPU(输入上拉)->GPIO_Mode_IN_FLOATING(浮空输入)/////////////////////////////////////////////
+//        GPIO_Init(GPIOA,&GPIO_InitStructure);
+        
+        GPIO_InitStructure.GPIO_Pin=RS485_TX_PIN;//修改PG9(RE/DE)通用推挽输出->PB7(RE/DE)通用推挽输出//////////////////////////////////////////////////////////////////////
+        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
+        GPIO_Init(RS485_TX_GPIO,&GPIO_InitStructure);
+        GPIO_ResetBits(RS485_TX_GPIO,RS485_TX_PIN);//默认接收状态
+        
+//        USART_DeInit(USART2);//复位串口2
+//        USART_InitStructure.USART_BaudRate=RS485_Baudrate;
+//        USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
+//        USART_InitStructure.USART_WordLength=USART_WordLength_8b;
+//        USART_InitStructure.USART_StopBits=USART_StopBits_1;
+//        USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;//收发模式
+//        switch(RS485_Parity)
+//        {
+//                case 0:USART_InitStructure.USART_Parity=USART_Parity_No;break;//无校验
+//                case 1:USART_InitStructure.USART_Parity=USART_Parity_Odd;break;//奇校验
+//                case 2:USART_InitStructure.USART_Parity=USART_Parity_Even;break;//偶校验
+//        }
+//        USART_Init(USART2,&USART_InitStructure);
+//        
+//        USART_ClearITPendingBit(USART2,USART_IT_RXNE);
+//        USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);//使能串口2接收中断
+//        
+//        NVIC_InitStructure.NVIC_IRQChannel=USART2_IRQn;
+//        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;
+//        NVIC_InitStructure.NVIC_IRQChannelSubPriority=2;
+//        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
+//        NVIC_Init(&NVIC_InitStructure);
+//        
+//        USART_Cmd(USART2,ENABLE);//使能串口2
+//        RS485_TX_OFF;//默认为接收模式
+        
+//        Timer7_Init();//定时器7初始化,用于监视空闲时间
+        Modbus_RegMap();//Modbus寄存器映射
+}
+
+//定时器7初始化
+//void Timer7_Init(void)
+//{
+//        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
+//        NVIC_InitTypeDef NVIC_InitStructure;
+
+//        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM7, ENABLE); //TIM7时钟使能 
+
+//        //TIM7初始化设置
+//        TIM_TimeBaseStructure.TIM_Period = RS485_Frame_Distance*10; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
+//        TIM_TimeBaseStructure.TIM_Prescaler =7200; //设置用来作为TIMx时钟频率除数的预分频值 设置计数频率为10kHz
+//        TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
+//        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
+//        TIM_TimeBaseInit(TIM7, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
+
+//        TIM_ITConfig( TIM7, TIM_IT_Update, ENABLE );//TIM7 允许更新中断
+
+//        //TIM7中断分组配置
+//        NVIC_InitStructure.NVIC_IRQChannel =TIM7_IRQn;  //TIM7中断
+//        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;  //先占优先级2级
+//        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //从优先级3级
+//        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
+//        NVIC_Init(&NVIC_InitStructure);  //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器                                                                  
+//}
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+//发送n个字节数据
+//buff:发送区首地址
+//len:发送的字节数
+//void RS485_SendData(u8 *buff,u8 len)
+//{ 
+//        RS485_TX_ON;//切换为发送模式
+//	#ifdef BAUDRATE_19200
+//				delay_ms(5);
+//	#else
+//				delay_ms(1);
+//	#endif
+//        while(len--)
+//        {
+//                while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//等待发送区为空
+//                USART_SendData(USART1,*(buff++));
+//        }
+//        while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);//等待发送完成
+//				RS485_TX_OFF;//开启接收模式
+//}
+
+
+/////////////////////////////////////////////////////////////////////////////////////
+//void USART2_IRQHandler(void)//串口2中断服务程序
+//{
+//	   
+//        u8 res;
+//        u8 err;
+//	 
+//        if(USART_GetITStatus(USART2,USART_IT_RXNE)!=RESET)
+//        {
+//                if(USART_GetFlagStatus(USART2,USART_FLAG_NE|USART_FLAG_FE|USART_FLAG_PE)) err=1;//检测到噪音、帧错误或校验错误
+//                else err=0;
+//			    //LED0=0;
+//                res=USART_ReceiveData(USART2); //读接收到的字节,同时相关标志自动清除
+//                
+//                if((RS485_RX_CNT<2047)&&(err==0))
+//                {
+//                        RS485_RX_BUFF[RS485_RX_CNT]=res;
+//                        RS485_RX_CNT++;
+//                        
+//                        TIM_ClearITPendingBit(TIM7,TIM_IT_Update);//清除定时器溢出中断
+//                        TIM_SetCounter(TIM7,0);//当接收到一个新的字节,将定时器7复位为0,重新计时(相当于喂狗)
+//                        TIM_Cmd(TIM7,ENABLE);//开始计时
+//                }
+//        }
+//}
+
+///////////////////////////////////////////////////////////////////////////////////////
+//用定时器7判断接收空闲时间,当空闲时间大于指定时间,认为一帧结束
+//定时器7中断服务程序         
+//void TIM7_IRQHandler(void)
+//{                                                                   
+//        if(TIM_GetITStatus(TIM7,TIM_IT_Update)!=RESET)
+//        {
+//                TIM_ClearITPendingBit(TIM7,TIM_IT_Update);//清除中断标志
+//                TIM_Cmd(TIM7,DISABLE);//停止定时器
+//                RS485_TX_ON;//停止接收,切换为发送状态
+//                RS485_FrameFlag=1;//置位帧结束标记
+//        }
+//}
+
+/////////////////////////////////////////////////////////////////////////////////////
+//RS485服务程序,用于处理接收到的数据(请在主函数中循环调用)
+u16 startRegAddr;
+u16 RegNum;
+u16 calCRC;
+void RS485_Service(void)
+{
+        u16 recCRC;
+        //if(RS485_FrameFlag==1)
+        //{
+                if(RS485_RX_BUFF[0]==RS485_Addr)//地址正确
+                {
+                   //if((RS485_RX_BUFF[1]==01)||(RS485_RX_BUFF[1]==02)||(RS485_RX_BUFF[1]==03)||(RS485_RX_BUFF[1]==05)||(RS485_RX_BUFF[1]==06)||(RS485_RX_BUFF[1]==15)||(RS485_RX_BUFF[1]==16))//功能码正确
+                  if((RS485_RX_BUFF[1]==03)||(RS485_RX_BUFF[1]==06)||(RS485_RX_BUFF[1]==16))
+									{
+                                startRegAddr=(((u16)RS485_RX_BUFF[2])<<8)|RS485_RX_BUFF[3];//获取寄存器起始地址
+                                if(startRegAddr<MODBUS_SIZE)//寄存器地址在范围内
+                                {
+																			if(RS485_RX_BUFF[1]==16)
+																			{
+																				RS485_RX_CNT=RS485_RX_BUFF[6]+9;//接收数据长度																			
+																			}
+																			else
+																			{
+																				RS485_RX_CNT = 8;//数据长度
+																			}
+                                        calCRC=CRC_Compute(RS485_RX_BUFF,RS485_RX_CNT-2);//计算所接收数据的CRC
+                                        recCRC=RS485_RX_BUFF[RS485_RX_CNT-1]|(((u16)RS485_RX_BUFF[RS485_RX_CNT-2])<<8);//接收到的CRC(低字节在前,高字节在后)
+                                        if(calCRC==recCRC)//CRC校验正确
+                                        {
+												//LED1=0;
+                                                /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+                                                switch(RS485_RX_BUFF[1])//根据不同的功能码进行处理
+                                                {
+//                                                        case 2://读输入开关量
+//                                                        {
+//                                                                Modbus_02_Solve();
+//                                                                break;
+//                                                        }
+                                                        
+//                                                        case 1://读输出开关量
+//                                                        {
+//                                                                Modbus_01_Solve();
+//                                                                break;
+//                                                        }
+                                                                
+//                                                        case 5://写单个输出开关量
+//                                                        {
+//                                                                Modbus_05_Solve();
+//                                                                break;
+//                                                        }
+//                                                                
+//                                                        case 15://写多个输出开关量
+//                                                        {
+//                                                                Modbus_15_Solve();
+//                                                                break;
+//                                                        }
+                                                                
+                                                        case 03: //读多个寄存器
+                                                        {																
+                                                                Modbus_03_Solve();
+                                                                break;
+                                                        }
+                                                                
+                                                        case 06: //写单个寄存器
+                                                        {
+                                                                Modbus_06_Solve();
+                                                                break;
+                                                        }
+                                                                
+                                                        case 16: //写多个寄存器
+                                                        {
+                                                                Modbus_16_Solve();
+                                                                break;
+                                                        }
+                                                                                        
+                                                }
+                                                //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+                                        }
+                                        else//CRC校验错误
+                                        {
+
+                                                RS485_TX_BUFF[0]=RS485_RX_BUFF[0];
+                                                RS485_TX_BUFF[1]=RS485_RX_BUFF[1]|0x80;
+                                                RS485_TX_BUFF[2]=0x04; //异常码
+                                                UART_PushFrame(RS485_TX_BUFF,3);
+																								cmd_mode = 0;//协议处理完成
+                                        }        
+                                }
+                                else//寄存器地址超出范围
+                                {
+                                        RS485_TX_BUFF[0]=RS485_RX_BUFF[0];
+                                        RS485_TX_BUFF[1]=RS485_RX_BUFF[1]|0x80;
+                                        RS485_TX_BUFF[2]=0x02; //异常码
+                                        UART_PushFrame(RS485_TX_BUFF,3);
+																				cmd_mode = 0;//协议处理完成
+                                }                                                
+                        }
+                        else//功能码错误
+                        {
+                                RS485_TX_BUFF[0]=RS485_RX_BUFF[0];
+                                RS485_TX_BUFF[1]=RS485_RX_BUFF[1]|0x80;
+                                RS485_TX_BUFF[2]=0x01; //异常码
+                                UART_PushFrame(RS485_TX_BUFF,3);
+																cmd_mode = 0;//协议处理完成
+                        }
+          }
+                                
+                //RS485_FrameFlag=0;//复位帧结束标志
+                RS485_RX_CNT=0;//接收计数器清零
+								cmd_mode = 0;//协议处理完成
+        //}                
+}
+
+//Modbus功能码02处理程序/////////////////////////////////////////////////////程序已验证OK -----必须先配置PE4 PE3 PE2 PA0 初始化按键才可以OK    KEY_Init();
+//读输入开关量
+void Modbus_02_Solve(void)
+{
+        u16 ByteNum;
+        u16 i;
+        RegNum= (((u16)RS485_RX_BUFF[4])<<8)|RS485_RX_BUFF[5];//获取寄存器数量
+        if((startRegAddr+RegNum)<100)//寄存器地址+数量在范围内
+        {
+                RS485_TX_BUFF[0]=RS485_RX_BUFF[0];
+                RS485_TX_BUFF[1]=RS485_RX_BUFF[1];
+                ByteNum=RegNum/8;//字节数
+                if(RegNum%8) ByteNum+=1;//如果位数还有余数,则字节数+1
+                RS485_TX_BUFF[2]=ByteNum;//返回要读取的字节数
+                for(i=0;i<RegNum;i++)
+                {
+                        if(i%8==0) RS485_TX_BUFF[3+i/8]=0x00;
+                        RS485_TX_BUFF[3+i/8]>>=1;//低位先发送
+                        RS485_TX_BUFF[3+i/8]|=((*Modbus_InputIO[startRegAddr+i])<<7)&0x80;
+                        if(i==RegNum-1)//发送到最后一个位了
+                        {
+                                if(RegNum%8) RS485_TX_BUFF[3+i/8]>>=8-(RegNum%8);//如果最后一个字节还有余数,则剩余MSB填充0
+                        }
+                }
+                calCRC=CRC_Compute(RS485_TX_BUFF,ByteNum+3);
+                RS485_TX_BUFF[ByteNum+3]=(calCRC>>8)&0xFF;
+                RS485_TX_BUFF[ByteNum+4]=(calCRC)&0xFF;
+                UART_PushFrame(RS485_TX_BUFF,ByteNum+5);
+        }
+        else//寄存器地址+数量超出范围
+        {
+                RS485_TX_BUFF[0]=RS485_RX_BUFF[0];
+                RS485_TX_BUFF[1]=RS485_RX_BUFF[1]|0x80;
+                RS485_TX_BUFF[2]=0x02; //异常码
+                UART_PushFrame(RS485_TX_BUFF,3);
+        }
+}
+
+//Modbus功能码01处理程序 ///////////////////////////////////////////////////////////程序已验证OK
+//读输出开关量
+void Modbus_01_Solve(void)
+{
+        u16 ByteNum;
+        u16 i;
+        RegNum= (((u16)RS485_RX_BUFF[4])<<8)|RS485_RX_BUFF[5];//获取寄存器数量
+        if((startRegAddr+RegNum)<100)//寄存器地址+数量在范围内
+        {
+                RS485_TX_BUFF[0]=RS485_RX_BUFF[0];
+                RS485_TX_BUFF[1]=RS485_RX_BUFF[1];
+                ByteNum=RegNum/8;//字节数
+                if(RegNum%8) ByteNum+=1;//如果位数还有余数,则字节数+1
+                RS485_TX_BUFF[2]=ByteNum;//返回要读取的字节数
+                for(i=0;i<RegNum;i++)
+                {
+                        if(i%8==0) RS485_TX_BUFF[3+i/8]=0x00;
+                        RS485_TX_BUFF[3+i/8]>>=1;//低位先发送
+                        RS485_TX_BUFF[3+i/8]|=((*Modbus_OutputIO[startRegAddr+i])<<7)&0x80;
+                        if(i==RegNum-1)//发送到最后一个位了
+                        {
+                                if(RegNum%8) RS485_TX_BUFF[3+i/8]>>=8-(RegNum%8);//如果最后一个字节还有余数,则剩余MSB填充0
+                        }
+                }
+                calCRC=CRC_Compute(RS485_TX_BUFF,ByteNum+3);
+                RS485_TX_BUFF[ByteNum+3]=(calCRC>>8)&0xFF;
+                RS485_TX_BUFF[ByteNum+4]=(calCRC)&0xFF;
+                UART_PushFrame(RS485_TX_BUFF,ByteNum+5);
+        }
+        else//寄存器地址+数量超出范围
+        {
+                RS485_TX_BUFF[0]=RS485_RX_BUFF[0];
+                RS485_TX_BUFF[1]=RS485_RX_BUFF[1]|0x80;
+                RS485_TX_BUFF[2]=0x02; //异常码
+                UART_PushFrame(RS485_TX_BUFF,3);
+        }
+}
+
+//Modbus功能码05处理程序   ///////////////////////////////////////////////////////程序已验证OK
+//写单个输出开关量
+void Modbus_05_Solve(void)
+{
+        if(startRegAddr<100)//寄存器地址在范围内
+        {
+                if((RS485_RX_BUFF[4]==0xFF)||(RS485_RX_BUFF[5]==0xFF)) *Modbus_OutputIO[startRegAddr]=0x01;
+                else *Modbus_OutputIO[startRegAddr]=0x00;
+                
+                RS485_TX_BUFF[0]=RS485_RX_BUFF[0];
+                RS485_TX_BUFF[1]=RS485_RX_BUFF[1];
+                RS485_TX_BUFF[2]=RS485_RX_BUFF[2];
+                RS485_TX_BUFF[3]=RS485_RX_BUFF[3];
+                RS485_TX_BUFF[4]=RS485_RX_BUFF[4];
+                RS485_TX_BUFF[5]=RS485_RX_BUFF[5];
+                
+                calCRC=CRC_Compute(RS485_TX_BUFF,6);
+                RS485_TX_BUFF[6]=(calCRC>>8)&0xFF;
+                RS485_TX_BUFF[7]=(calCRC)&0xFF;
+                UART_PushFrame(RS485_TX_BUFF,8);
+        }
+        else//寄存器地址超出范围
+        {
+                RS485_TX_BUFF[0]=RS485_RX_BUFF[0];
+                RS485_TX_BUFF[1]=RS485_RX_BUFF[1]|0x80;
+                RS485_TX_BUFF[2]=0x02; //异常码
+                UART_PushFrame(RS485_TX_BUFF,3);
+        }
+}
+
+//Modbus功能码15处理程序   //////////////////////////////////////////////////////程序已验证OK
+//写多个输出开关量
+void Modbus_15_Solve(void)
+{
+        u16 i;
+        RegNum=(((u16)RS485_RX_BUFF[4])<<8)|RS485_RX_BUFF[5];//获取寄存器数量
+        if((startRegAddr+RegNum)<100)//寄存器地址+数量在范围内
+        {        
+                for(i=0;i<RegNum;i++)
+                {
+                        if(RS485_RX_BUFF[7+i/8]&0x01) *Modbus_OutputIO[startRegAddr+i]=0x01;
+                        else *Modbus_OutputIO[startRegAddr+i]=0x00;
+                        RS485_RX_BUFF[7+i/8]>>=1;//从低位开始
+                }
+                
+                RS485_TX_BUFF[0]=RS485_RX_BUFF[0];
+                RS485_TX_BUFF[1]=RS485_RX_BUFF[1];
+                RS485_TX_BUFF[2]=RS485_RX_BUFF[2];
+                RS485_TX_BUFF[3]=RS485_RX_BUFF[3];
+                RS485_TX_BUFF[4]=RS485_RX_BUFF[4];
+                RS485_TX_BUFF[5]=RS485_RX_BUFF[5];
+                calCRC=CRC_Compute(RS485_TX_BUFF,6);
+                RS485_TX_BUFF[6]=(calCRC>>8)&0xFF;
+                RS485_TX_BUFF[7]=(calCRC)&0xFF;
+                UART_PushFrame(RS485_TX_BUFF,8);
+        }
+        else//寄存器地址+数量超出范围
+        {
+                RS485_TX_BUFF[0]=RS485_RX_BUFF[0];
+                RS485_TX_BUFF[1]=RS485_RX_BUFF[1]|0x80;
+                RS485_TX_BUFF[2]=0x02; //异常码
+                UART_PushFrame(RS485_TX_BUFF,3);
+        }
+}
+
+//Modbus功能码03处理程序///////////////////////////////////////////////////////////////////////////////////////已验证程序OK
+//读保持寄存器
+void Modbus_03_Solve(void)
+{
+        u8 i;
+        RegNum= (((u16)RS485_RX_BUFF[4])<<8)|RS485_RX_BUFF[5];//获取寄存器数量
+        if((startRegAddr+RegNum)<MODBUS_SIZE)//寄存器地址+数量在范围内
+        {
+                RS485_TX_BUFF[0]=RS485_RX_BUFF[0];
+                RS485_TX_BUFF[1]=RS485_RX_BUFF[1];
+                RS485_TX_BUFF[2]=RegNum*2;
+                for(i=0;i<RegNum;i++)
+                {
+									if(i<100)
+									{
+                        RS485_TX_BUFF[3+i*2]=(Modbus_HoldReg[startRegAddr+i]>>8)&0xFF;//           /////////先发送高字节--在发送低字节
+                        RS485_TX_BUFF[4+i*2]=(Modbus_HoldReg[startRegAddr+i])&0xFF; //
+									}else{
+												RS485_TX_BUFF[3+i*2]=(g_com_map[startRegAddr+i-100]>>8)&0xFF;//           /////////先发送高字节--在发送低字节
+                        RS485_TX_BUFF[4+i*2]=(g_com_map[startRegAddr+i-100])&0xFF; //
+									}
+                }
+                calCRC=CRC_Compute(RS485_TX_BUFF,RegNum*2+3);
+                RS485_TX_BUFF[RegNum*2+3]=(calCRC>>8)&0xFF;         //CRC高地位不对吗?  // 先高后低
+                RS485_TX_BUFF[RegNum*2+4]=(calCRC)&0xFF;
+                UART_PushFrame(RS485_TX_BUFF,RegNum*2+5);
+        }
+        else//寄存器地址+数量超出范围
+        {
+                RS485_TX_BUFF[0]=RS485_RX_BUFF[0];
+                RS485_TX_BUFF[1]=RS485_RX_BUFF[1]|0x80;
+                RS485_TX_BUFF[2]=0x02; //异常码
+                UART_PushFrame(RS485_TX_BUFF,3);
+        }
+}
+
+
+//Modbus功能码06处理程序   //////////////////////////////////////////////////////////////////////////////////已验证程序OK
+//写单个保持寄存器
+void Modbus_06_Solve(void)
+{
+	if(startRegAddr>100)
+	{
+		if(startRegAddr<600)
+		{
+			memcpy(&g_com_map[startRegAddr-100],&RS485_RX_BUFF[4],2);
+		}
+	}else{
+        Modbus_HoldReg[startRegAddr]=RS485_RX_BUFF[4]<<8;//高字节在前                    ////////修改为高字节在前,低字节在后
+        Modbus_HoldReg[startRegAddr]|=((u16)RS485_RX_BUFF[5]);//低字节在后
+    }    
+        RS485_TX_BUFF[0]=RS485_RX_BUFF[0];
+        RS485_TX_BUFF[1]=RS485_RX_BUFF[1];
+        RS485_TX_BUFF[2]=RS485_RX_BUFF[2];
+        RS485_TX_BUFF[3]=RS485_RX_BUFF[3];
+        RS485_TX_BUFF[4]=RS485_RX_BUFF[4];
+        RS485_TX_BUFF[5]=RS485_RX_BUFF[5];
+        
+        calCRC=CRC_Compute(RS485_TX_BUFF,6);
+        RS485_TX_BUFF[6]=(calCRC>>8)&0xFF;
+        RS485_TX_BUFF[7]=(calCRC)&0xFF;
+        UART_PushFrame(RS485_TX_BUFF,8);
+}
+
+//Modbus功能码16处理程序 /////////////////////////////////////////////////////////////////////////////////////////////////已验证程序OK
+//写多个保持寄存器
+void Modbus_16_Solve(void)
+{
+        u8 i;
+        RegNum= (((u16)RS485_RX_BUFF[4])<<8)|((RS485_RX_BUFF[5]));//获取寄存器数量
+        if((startRegAddr+RegNum)<MODBUS_SIZE)//寄存器地址+数量在范围内
+        {
+                for(i=0;i<RegNum;i++)
+                {
+                        Modbus_HoldReg[startRegAddr+i]=RS485_RX_BUFF[7+i*2]; //低字节在前                 /////// 低字节在前,高字节在后正常
+                        Modbus_HoldReg[startRegAddr+i]|=((u16)RS485_RX_BUFF[8+i*2])<<8; //高字节在后
+                }
+                
+                RS485_TX_BUFF[0]=RS485_RX_BUFF[0];
+                RS485_TX_BUFF[1]=RS485_RX_BUFF[1];
+                RS485_TX_BUFF[2]=RS485_RX_BUFF[2];
+                RS485_TX_BUFF[3]=RS485_RX_BUFF[3];
+                RS485_TX_BUFF[4]=RS485_RX_BUFF[4];
+                RS485_TX_BUFF[5]=RS485_RX_BUFF[5];
+                
+                calCRC=CRC_Compute(RS485_TX_BUFF,6);
+                RS485_TX_BUFF[6]=(calCRC>>8)&0xFF;
+                RS485_TX_BUFF[7]=(calCRC)&0xFF;
+                UART_PushFrame(RS485_TX_BUFF,8);
+        }
+        else//寄存器地址+数量超出范围
+        {
+                RS485_TX_BUFF[0]=RS485_RX_BUFF[0];
+                RS485_TX_BUFF[1]=RS485_RX_BUFF[1]|0x80;
+                RS485_TX_BUFF[2]=0x02; //异常码
+                UART_PushFrame(RS485_TX_BUFF,3);
+        }
+}
+
+ 
+
+ 
diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/modbus.h" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/modbus.h"
new file mode 100644
index 0000000..4a02159
--- /dev/null
+++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/modbus.h"
@@ -0,0 +1,34 @@
+#ifndef _MODBUS_H
+#define _MODBUS_H
+//#include "sys.h"
+#include "stm32f10x.h"
+#include "Usart.h"
+//#define RS485_TX_EN PDout(7) 
+
+#define RS485_TX_PIN					GPIO_Pin_7
+#define RS485_TX_GPIO					GPIOB
+#define RS485_TX_ON						GPIO_WriteBit(RS485_TX_GPIO, RS485_TX_PIN, Bit_SET)
+#define RS485_TX_OFF					GPIO_WriteBit(RS485_TX_GPIO, RS485_TX_PIN, Bit_RESET)
+
+#define MODBUS_SIZE 200
+
+#define WAITDELAYCOUNT 1500					//剩余1位数据等待次数
+extern u8 RS485_Addr;
+extern u8 RS485_RX_BUFF[200];
+extern u16 RS485_RX_CNT;
+//extern u8 DATA_RX_BUFF[2048];
+extern u16 Modbus_HoldReg[MODBUS_SIZE];
+
+void Modbus_RegMap(void);
+void RS485_Init(void);
+void Timer7_Init(void);
+void RS485_Service(void);
+void Modbus_02_Solve(void);
+void Modbus_01_Solve(void);
+void Modbus_05_Solve(void);
+void Modbus_15_Solve(void);
+void Modbus_03_Solve(void);
+void Modbus_06_Solve(void);
+void Modbus_16_Solve(void);
+
+#endif

--
Gitblit v1.9.3