📄 main.lst
字号:
195 unsigned char IicSendHY502(unsigned char *cP)
196 {
197 1 unsigned char i;
198 1 unsigned char cCheckSum = 0;
199 1 I2CStart();
200 1 I2CSendByte(WRITE_HY502);
201 1 if (I2CWaitAck() == SUCCESS)
202 1 {
203 2 for(i=0; i<cP[0]; i++) // in the protocol, cP[0] is the length of this data package
204 2 {
205 3 cCheckSum ^= cP[i];
206 3 I2CSendByte(cP[i]);
207 3 if (I2CWaitAck() != SUCCESS)
208 3 {
209 4 return FAILURE;
210 4 }
211 3 }
212 2 I2CSendByte(cCheckSum);
213 2 if (I2CWaitAck() != SUCCESS)
214 2 {
215 3 return FAILURE;
216 3 }
217 2 I2CStop();
218 2 return SUCCESS;
219 2 }
220 1 else
221 1 {
222 2 return FAILURE;
223 2 }
224 1 }
225
226
227 /*****************************************************************************
228 *send command to Master over UART
229 *****************************************************************************/
230 void UartSend(unsigned char *cSendBuffer)
231 {
232 1 unsigned char i;
233 1 unsigned char cCheckSum;
234 1 ES = 0;
235 1 TI = 0;
236 1 g_bReceCommandOk = 0;
237 1 SBUF = 0xAA;
238 1 while (!TI);
239 1 TI = 0;
240 1 SBUF = 0xBB;
C51 COMPILER V8.02 MAIN 01/26/2007 15:08:37 PAGE 5
241 1 while (!TI);
242 1 cCheckSum = 0;
243 1 for (i=0; i<cSendBuffer[0]; i++)
244 1 {
245 2 cCheckSum ^= cSendBuffer[i];
246 2 TI = 0;
247 2 SBUF = cSendBuffer[i];
248 2 while (!TI);
249 2 if (cSendBuffer[i] == 0xAA)
250 2 //if there is a "0xAA" in the data serial but not the command header,
251 2 //add a "0x00" follow the "0xAA", CL (command length) will unchanged
252 2 {
253 3 TI = 0;
254 3 SBUF = 0;
255 3 while (!TI);
256 3 }
257 2 }
258 1 TI = 0;
259 1 SBUF = cCheckSum;
260 1 while (!TI);
261 1 TI = 0;
262 1 ES = 1;
263 1 }
264 /*****************************************************************************
265 *serial interrupt routine
266 *****************************************************************************/
267 seri_int () interrupt 4 using 2
268 {
269 1 static unsigned char i;
270 1 static unsigned char cReceivedData;
271 1 static unsigned char cCheckSum;
272 1 if (RI)
273 1 {
274 2 cReceivedData = SBUF;
275 2 RI = 0;
276 2 if (g_bReceAA)
277 2 {
278 3 g_bReceAA = 0;
279 3 if (0 != cReceivedData)
280 3 {
281 4 g_cReceNum = 0;
282 4 }
283 3 }
284 2 else
285 2 {
286 3 if (0xAA == cReceivedData)
287 3 {
288 4 g_bReceAA = 1;
289 4 }
290 3 g_cReceBuf[g_cReceNum++] = cReceivedData;
291 3
292 3 if (g_cReceNum > g_cReceBuf[0])
293 3 {
294 4 cCheckSum = 0;
295 4 for (i=0; i <= g_cReceBuf[0]; i++)
296 4 {
297 5 cCheckSum ^= g_cReceBuf[i];
298 5 }
299 4 if (0 == cCheckSum)
300 4 {
301 5 g_bReceCommandOk = 1;
302 5 ES = 0;
C51 COMPILER V8.02 MAIN 01/26/2007 15:08:37 PAGE 6
303 5 }
304 4 g_bReceAA = 0;
305 4 g_cReceNum = 0;
306 4 }
307 3 if (g_cReceNum >= sizeof(g_cReceBuf))
308 3 {
309 4 g_cReceNum = 0;
310 4 g_bReceAA = 0;
311 4 }
312 3 }
313 2 }
314 1 if (TI)
315 1 {
316 2 TI = 0;
317 2 }
318 1 }
319
320 /*
321 uchar autocard(uchar *cardno) // 寻卡,防冲突,选择卡 返回状态,指针参数为返回的卡系列号(4 bytes)
322 {
323 uchar cStatus;
324 uchar cnt,i;
325 uchar cp1[10];
326
327 for(cnt=0;cnt<3;cnt++)
328 {
329 cStatus =IicSendHY502(ComSearchCard); // 发送寻卡命令
330 // delay(1);// delay_10ms(2); // 延时等待模块执行命令
331 cStatus =IicReadHY502(cp1); // 读取卡号并存入到cp1
332 if(cStatus==SUCCESS)
333 {
334 if(cp1[1]==CARD_SN) // 读卡号成功
335 {
336 for(i=0;i<4;i++) // 提取4字节卡号
337 {
338 cardno[i]=cp1[i+2];
339 }
340
341
342 return 0;
343 }
344 }
345 else cStatus=1;
346
347 }
348
349 return 1;
350 }
351 */
352 // buzz freq
353
354 unsigned int g_cBeepDiv0;
355 unsigned char sp_freq=0xdc;
356 void timer0(void) interrupt 1 using 2 //0.01s
357 {
358 1 TH0=sp_freq;
359 1 if(g_cBeepDiv0) //beep
360 1 {
361 2 g_cBeepDiv0--;
362 2 // BUZ=(g_cBeepDiv0&0x0010);
363 2 }
364 1
C51 COMPILER V8.02 MAIN 01/26/2007 15:08:37 PAGE 7
365 1 }
366
367
368 ///////////////////////////////////////////////////////////////////////
369 // 串口命令处理函数
370 ///////////////////////////////////////////////////////////////////////
371 uchar uart_process(void)
372 {
373 1 uchar cmd;
374 1 uchar cStatus;
375 1
376 1 cmd = g_cReceBuf[1];
377 1 switch(cmd)
378 1 {
379 2
380 2 case 0x11: // 软件掉电模式 ,1字节数据,非0退出软件掉电模式,0x00进入软件掉电
381 2 //任何一条对卡的操作命令或自动寻卡被设置后都将终止掉电模式
382 2 if(g_cReceBuf[2]==0x01)
383 2 {
384 3
385 3 cStatus =IicSendHY502(AntOn); // 发送命令
386 3 cStatus =IicReadHY502(cp); // 读取并存入到cP
387 3 if((cStatus==SUCCESS)&&(cp[1]==SOFTDOWN))
388 3 {
389 4 SendBuffer[0]=0x02;
390 4 SendBuffer[1]=cmd;
391 4
392 4 }
393 3
394 3 }
395 2 else if(g_cReceBuf[2]==0)
396 2 {
397 3
398 3 cStatus =IicSendHY502(AntOff); // 发送命令
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -