📄 cmdparse.lst
字号:
C51 COMPILER V7.10 CMDPARSE 02/03/2005 10:45:39 PAGE 1
C51 COMPILER V7.10, COMPILATION OF MODULE CMDPARSE
OBJECT MODULE PLACED IN CmdParse.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE CmdParse.c OPTIMIZE(7,SIZE) BROWSE INCDIR(E:\WorkHome\932-DDSF\DDSF-932-002
-\;F:\WorkHome\932-DDSF\DDSF-932-003\) DEBUG OBJECTEXTEND
line level source
1 /*========================================*/
2 /*系统名称:DDSF-CECG-JiangSu */
3 /*函数名称:数据解析 */
4 /*程序编写:步爱军 */
5 /*开始日期:2005-01-01 */
6 /*完成日期: */
7 /*修改记录: */
8 /*软件版本:DDSF-CECG-002 */
9 /*版本说明:用户数据保存在外部 */
10 /*外部器件:LM75、AT24C02、HT1621、LPC932 */
11 /* R8025、ADE7755 */
12 /*========================================*/
13
14 #include <REG932.H>
15 #include <Define.h>
16 #include <Stdio.h>
17 #include <Intrins.h>
18
19 //数据发送
20 void SeriesSend(void)
21 {
22 1 unsigned char data i,CheckSum;
23 1 //发送标志有效,开始发送(上位机延时接收)
24 1 if(SeriesSendFg)
25 1 {
26 2 ComDataBuf[8]=ComDataBuf[8]|0x80;
27 2 CheckSum=0;
28 2 ComDataBuf[0]=0x68;
29 2 for(i=10;i<(ComDataBuf[9]+11);i++)
30 2 {
31 3 ComDataBuf[i]=ComDataBuf[i]+0x33;
32 3 }
33 2 for(i=0;i<(ComDataBuf[9]+10);i++)
34 2 {
35 3 CheckSum=CheckSum+ComDataBuf[i];
36 3 }
37 2 ComDataBuf[ComDataBuf[9]+10]=CheckSum;
38 2 ComDataBuf[ComDataBuf[9]+11]=0x16;
39 2 SeriesSentByte(0xfe);
40 2 SeriesSentByte(0xfe);
41 2 for(i=0;i<ComDataBuf[9]+12;i++)
42 2 {
43 3 SeriesSentByte(ComDataBuf[i]);
44 3 }
45 2 SeriesSentByte(0xff);
46 2 SeriesSentByte(0xff);
47 2 ClerBuf();
48 2 SeriesSendFg=0;
49 2 SendOverFg=1;
50 2 }
51 1 }
52 //编程密码校验---清零密码校验
53 unsigned char SnCheck(void)
54 {
C51 COMPILER V7.10 CMDPARSE 02/03/2005 10:45:39 PAGE 2
55 1 unsigned char i,j,k,m,n,SnIdA,SnIdB,SnCheckData;
56 1 j=0x4c;
57 1 k=0x50;
58 1 m=13;
59 1 SnCheckData=0;
60 1 for(i=0;i<3;i++)
61 1 {
62 2 n=IicByteRead(0xa0,j);
63 2 if(ComDataBuf[m]==IicByteRead(0xa0,j))
64 2 {
65 3 SnIdA=0x55;
66 3 }
67 2 else
68 2 {
69 3 SnIdA=0x00;
70 3 break;
71 3 }
72 2 j++;
73 2 }
74 1 m=13;
75 1 for(i=0;i<3;i++)
76 1 {
77 2 if(ComDataBuf[m]==IicByteRead(0xa0,k))
78 2 {
79 3 SnIdB=0x55;
80 3 }
81 2 else
82 2 {
83 3 SnIdB=0x00;
84 3 break;
85 3 }
86 2 k++;
87 2 }
88 1 if(SnIdA==0x55)
89 1 {
90 2 SnCheckData=0x01;
91 2 }
92 1 else
93 1 {
94 2 SnCheckData=0;
95 2 }
96 1 if(SnIdB==0x55)
97 1 {
98 2 SnCheckData=0x01;
99 2 }
100 1 return SnCheckData;
101 1 }
102 //接收到的数据减0x33
103 void DataDeal(void)
104 {
105 1 unsigned char i;
106 1 CmdParseFg=0;
107 1 for(i=10;i<ComDataBuf[9]+10;i++)
108 1 {
109 2 ComDataBuf[i]=ComDataBuf[i]-0x33;
110 2 ComDataBuf[ComDataBuf[9]+10]=ComDataBuf[ComDataBuf[9]+10]-0x33;
111 2 }
112 1 }
113 //数据提取
114 void CmdPick(unsigned char Device,unsigned char PickupAdd,unsigned char DataLen,bit MoveBit,unsigned char
-*value,unsigned char Lend,bit DataForIic,bit BcdChange)
115 {
C51 COMPILER V7.10 CMDPARSE 02/03/2005 10:45:39 PAGE 3
116 1 unsigned char i,j;
117 1
118 1 if(DataForIic)
119 1 {
120 2 if(MoveBit)
121 2 {
122 3 for(i=12;i<DataLen+12;i++)
123 3 {
124 4 j=PickupAdd;
125 4 ComDataBuf[i]=IicByteRead(Device,j<<4);
126 4 PickupAdd++;
127 4 }
128 3 }
129 2 else
130 2 {
131 3 for(i=12;i<DataLen+12;i++)
132 3 {
133 4 ComDataBuf[i]=IicByteRead(Device,PickupAdd);
134 4 PickupAdd++;
135 4 }
136 3 }
137 2 Lend=DataLen;
138 2 }
139 1 else
140 1 {
141 2 if(BcdChange)
142 2 {
143 3 for(i=12;i<Lend+12;i++)
144 3 {
145 4 ComDataBuf[i]=HexToBcd(*value);
146 4 value++;
147 4 }
148 3 }
149 2 else
150 2 {
151 3 for(i=12;i<Lend+12;i++)
152 3 {
153 4 ComDataBuf[i]=*value;
154 4 value++;
155 4 }
156 3 }
157 2 }
158 1 ComDataBuf[9]=Lend+2;
159 1 SeriesSendFg=1;
160 1 }
161 //接收到的数据保存
162 void CmdSave(unsigned char Device,unsigned char PickupAdd,unsigned char SaveAdd,unsigned char DataLen,bit
-MoveBit)
163 {
164 1 unsigned char i,j,k;
165 1 k=SnCheck();
166 1 if(k)
167 1 {
168 2 if(MoveBit)
169 2 {
170 3 for(i=0;i<DataLen;i++)
171 3 {
172 4 j=SaveAdd;
173 4 IicByteWrite(Device,j<<4,ComDataBuf[PickupAdd+i]);
174 4 SaveAdd++;
175 4 }
176 3 }
C51 COMPILER V7.10 CMDPARSE 02/03/2005 10:45:39 PAGE 4
177 2 else
178 2 {
179 3 for(i=0;i<DataLen;i++)
180 3 {
181 4 IicByteWrite(Device,SaveAdd,ComDataBuf[PickupAdd+i]);
182 4 SaveAdd++;
183 4 }
184 3 }
185 2 for(i=10;i<14;i++)
186 2 {
187 3 ComDataBuf[i]=ComDataBuf[i+4];
188 3 }
189 2 SeriesSendFg=1;
190 2 }
191 1 else
192 1 {
193 2 SeriesSendFg=0;
194 2 CmdParseFg=0;
195 2 }
196 1 }
197 //命令解析
198 void CmdParse(void)
199 {
200 1 unsigned char data CheckSum;
201 1 unsigned char data i,j,k;
202 1 unsigned char data IdRight;
203 1 j=0x40;
204 1 //判断是否有未发送数据
205 1 if(TimeSendFg)
206 1 {
207 2 if(ComTimeA>=5)
208 2 {
209 3 SeriesSend();
210 3 SendOverFg=0;
211 3 TimeSendFg=0;
212 3 SendOverFg=1;
213 3 }
214 2 }
215 1 else
216 1 {
217 2 //数据解析标志是否有效
218 2 if(CmdParseFg)
219 2 {
220 3 DataDeal();
221 3 CmdParseFg=0;
222 3 CheckSum=0;
223 3 //数据校验
224 3 for(i=0;i<(ComDataBuf[9]+10);i++)
225 3 {
226 4 CheckSum=CheckSum+ComDataBuf[i];
227 4 }
228 3 //校验和是否相等--如果相等开始校验地址
229 3 if(CheckSum==ComDataBuf[ComDataBuf[9]+10])
230 3 {
231 4 for(i=0;i<6;i++)
232 4 {
233 5 k=IicByteRead(0xa0,j);
234 5 if(ComDataBuf[1+i]==k)
235 5 {
236 6 IdRight=0x55;
237 6 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -