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