?? vf2000.lst
字號:
258 1 sendChar(0);
259 1
260 1 i=recbuf[4];
261 1
262 1 if (recbuf[3]==2) /* 設置通訊時間 */
263 1 {
264 2 if (i==0) powerDown();
265 2 else;
266 2 }
267 1 Led=1;
268 1 }
269
270 void clrRecord(void)
271 {
272 1 uchar i;
273 1
274 1 i=rd24c256(0x03); wr24c256(0x4,i); wr24c256(0x03,0);
275 1 i=rdPCF8563Byte(0xb)&0x3f; wr24c256(0x5,i); wrPCF8563Byte(0xb,0x80);
276 1 RecordNum = 0;
277 1 sendChar(0);
278 1 test();
279 1 }
280
281 bit recMsg()
282 {
283 1 uchar CheckNum;
284 1 uchar i;
285 1 uchar time=0;
286 1
287 1 RecLen=0;
288 1 TT1=0;
289 1 TH0=0x4c;TL0=0x00; TF0=0; // 50ms interrupt; 10*50ms=500ms
290 1 TR0=1; ET0=1; ES=1;
291 1 while ( TT1<10 && !RI ) PCON = PCON|0x01; // IDLE MODE
292 1
293 1 if(!RI) return 0;
294 1 TT1=7;
295 1
296 1 while ( TT1<10 )
297 1 {
298 2 if ( RI )
299 2 {
300 3 RI=0; REN=1;
301 3 recbuf[RecLen] = SBUF;RecLen++;
302 3 if ( RecLen >= 3 )
303 3 {
C51 COMPILER V3.20, SN-50203013 VF2000 03/14/07 15:02:59 PAGE 6
304 4 if ( recbuf[0] != ~recbuf[1] ) return 0; else;
305 4 if ( recbuf[2] >= 16 ) return 0; else;
306 4
307 4 if ( recbuf[2] == RecLen-3 ) /*接收完成計算校驗和*/
308 4 {
309 5 CheckNum = recbuf[0];
310 5 for ( i=2; i<RecLen; i++ ) CheckNum+=recbuf[i];
311 5 if ( CheckNum == 0xff ) return 1; /*接收成功*/
312 5 else return 0; /* 校驗和錯 */
313 5 }
314 4 else; /*接收數據長度不夠*/
315 4 }
316 3 else if(RecLen==1 && recbuf[0]==0x5a) RecLen=0; /*收到的是喚醒*/
317 3 else;
318 3 }
319 2 else;
320 2 ES=1; PCON = PCON|0x01; //IDLE MODE
321 2 }
322 1 ET0=0; return 0;
323 1 }
324
325 void rwE2prom()
326 {
327 1 uint location;
328 1 uchar check,i,byte;
329 1
330 1 location=recbuf[6]*0x100+recbuf[5];
331 1
332 1 if (recbuf[3]==0x80)/*讀取操作*/
333 1 {
334 2 check=0;
335 2 for ( i=0;i<recbuf[4];i++ )
336 2 {
337 3 byte=rd24c256(location+i);
338 3 sendChar(byte);
339 3 check+=byte;
340 3 }
341 2 sendChar(0xff-check);
342 2 }
343 1 else if (recbuf[3]==0x01)/*寫入操作*/
344 1 {
345 2 for ( i=0;i<recbuf[4];i++ )
346 2 {
347 3 wr24c256(location+i,recbuf[7+i]);
348 3 }
349 2 sendChar(0);
350 2 }
351 1 else;
352 1 }
353
354 void commHandle()
355 {
356 1 uchar i;
357 1
358 1 for(i=0;i<120;i++)
359 1 {
360 2 if ( recMsg() ) /* 接收到完整的消息 */
361 2 {
362 3 switch(recbuf[0])
363 3 {
364 4 case 0x15: pcSetClock(); break; /* 校表 */
365 4 case 0x25: setMID(); break; /* 設置筆號 */
C51 COMPILER V3.20, SN-50203013 VF2000 03/14/07 15:02:59 PAGE 7
366 4 case 0x35: sendMID(); break; /* 發送筆號 */
367 4 case 0x45: sendClock(); break; /* 發送本筆時鐘 */
368 4 case 0x55: clrRecord(); break; /* 清記錄 */
369 4 case 0x85: sendNextRecord(); break; /* 上傳某條一條記錄 */
370 4 case 0x95: resumRecord(); break; /* 恢復記錄總數 */
371 4 case 0xa5: setPara(); break; /* 下載參數 */
372 4 case 0xb5: sendRecordNum(); break; /* 上傳記錄總數 */
373 4 case 0xd5: rwE2prom(); break; /* 讀寫存儲區 */
374 4 default:RecLen=0;
375 4 }
376 3 RecLen=0; /* 清除接收區 */
377 3 i=0;
378 3 }
379 2 else ;
380 2 }
381 1 powerDown();
382 1 }
383 /*****************************************/
384 bit sample;
385 void saveRecord()
386 {
387 1 uint offset;
388 1 uchar i;
389 1 uchar hh,ll;
390 1
391 1 if(sample && RecordNum>=50) {RecordNum=0; wr24c256(0x03,hh);}
392 1
393 1 if(rd24c256(0x25)==1) MaxRecordNum=8186;
394 1 else MaxRecordNum=4090;
395 1
396 1 if(RecordNum == MaxRecordNum)
397 1 {
398 2 for(i=0;i<3;i++) {shake();delayN50ms(5);}
399 2 return;
400 2 }
401 1
402 1 if(RecordNum >= (MaxRecordNum-500))
403 1 {
404 2 for ( i=0;i<6;i++ ) {Led=0;delayN50ms(2); Led=1;delayN50ms(10);}
405 2 }
406 1
407 1 //if(RecordNum >= MaxRecordNum) clrRecord();
408 1 offset=RecordAddr+RecordNum*8;
409 1 for ( i=0;i<4;i++ ) wr24c256(offset+i,RFCardID[i+1]);
410 1
411 1 getClock();
412 1
413 1 RFCardID[0]=Clock.MonthCentury&0x1f;
414 1 RFCardID[1]=Clock.Day;
415 1 RFCardID[2]=Clock.Hour;
416 1 RFCardID[3]=Clock.Min;
417 1 for ( i=0;i<4;i++ ) wr24c256(offset+4+i,RFCardID[i]);
418 1
419 1 RecordNum++;
420 1 hh=RecordNum/64;
421 1 ll=RecordNum%64;
422 1 wrPCF8563Byte(0xb,ll|0x80);
423 1 if ( ll==0 ) wr24c256(0x03,hh);
424 1 else;
425 1 }
426
427 void getRecordNum()
C51 COMPILER V3.20, SN-50203013 VF2000 03/14/07 15:02:59 PAGE 8
428 {
429 1 RecordNum = rd24c256(0x03);
430 1 RecordNum *= 64;
431 1 RecordNum += (rdPCF8563Byte(0xb)&0x3f);
432 1 if(RecordNum>3500)
433 1 {
434 2 RecordNum=0;
435 2 wrPCF8563Byte(0xb,0x80);
436 2 wr24c256(0x03,0);
437 2 }
438 1 }
439
440 void main()
441 {
442 1 uchar data i;
443 1 uint ii;
444 1 uchar ReadTime;
445 1
446 1 Power=0;
447 1 Led=0;
448 1 TMOD=0x11; //TR1=1; //ET1=1;
449 1 RI=0;
450 1 init24c256();
451 1 initPCF8563();
452 1
453 1 getRecordNum();
454 1 IT0=0; //low level triggered --Wakeup
455 1 EX0=1; //INT0 enable;
456 1 EA=1;
457 1
458 1 if(rd24c256(2)==0xaa) sample=1; else sample=0;
459 1 if(sample) shake();else; /*樣品模式開機振動*/
460 1
461 1 if ( rdAlarmFlag() ) /*鬧鈴*/
462 1 {
463 2 Led=0;
464 2 for(i=0;i<10;i++) {shake();delayN50ms(5);}
465 2 Led=1;
466 2 clrAlarmFlag();
467 2 powerDown();
468 2 }
469 1 else;
470 1
471 1 ReadTime=rd24c256(0x26);
472 1 if(ReadTime<2 || ReadTime>30) ReadTime=3;
473 1
474 1 i=0;
475 1 Led=1;
476 1 while (i<120)
477 1 {
478 2 SHD=0;
479 2 if(rfEM()==1)
480 2 {
481 3 SHD=1;
482 3 saveRecord();
483 3 shake();
484 3 powerDown();
485 3 }
486 2 else ;
487 2 SHD=1;
488 2 if(i==(ReadTime*2-1)) { powerDown();}
489 2
C51 COMPILER V3.20, SN-50203013 VF2000 03/14/07 15:02:59 PAGE 9
490 2 TT1=0;
491 2 TH0=0x4c;TL0=0x00; TF0=0; // 50ms interrupt; 9*50ms=450ms
492 2 TR0=1; ET0=1;
493 2 while ( TT1<9 && !CommMark ) PCON=1; // IDLE MODE
494 2 ET0=0;
495 2
496 2 i++;
497 2
498 2 if ( CommMark )
499 2 {
500 3 initComm();
501 3 CommMark=0;
502 3 commHandle();
503 3 powerDown();
504 3 }
505 2 else;
506 2 }
507 1 powerDown();
508 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1828 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 6 32
IDATA SIZE = 16 ----
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -