📄 vf3000em.lst
字号:
240 1 {
241 2 if(i==1) {shakeflag=1; wr24c256(0x0,1); }
C51 COMPILER V3.20, SN-50203013 VF3000EM 10/27/06 09:17:20 PAGE 5
242 2 else {shakeflag=0; wr24c256(0x0,0);}
243 2 }
244 1 else if(recbuf[3]==4)
245 1 {
246 2 if(i<4) {alarmflag==i; wr24c256(0x1,i);}
247 2 else wr24c256(0x1,0);
248 2 }
249 1 }
250
251 void clrRecord(void)
252 {
253 1 uchar sumTemp[2],i;
254 1 sendChar(0);
255 1
256 1 i=rd24c256(0x03); wr24c256(0x4,i); wr24c256(0x03,0);
257 1 i=rdPCF8563Byte(0xb)&0x3f; wr24c256(0x5,i); wrPCF8563Byte(0xb,0x80);
258 1 RecordNum = 0;
259 1 test();
260 1 music();
261 1 }
262
263 bit recMsg()
264 {
265 1 uchar CheckNum;
266 1 uchar i;
267 1 uchar time;
268 1
269 1 RecLen=0;
270 1 TR0=0; TF0=0; time =0; TL0=0xf0;TH0=0xd8; TR0=0x1;
271 1 while ( time<50 ) /* 等待60s */
272 1 {
273 2 if ( RI )
274 2 {
275 3 RI=0; REN=1;
276 3 time=0;
277 3 recbuf[RecLen] = SBUF; RecLen++;
278 3 if ( RecLen >= 3 )
279 3 {
280 4 if ( recbuf[0] != ~recbuf[1] ) return 0; else;
281 4 if ( recbuf[2] >= 16 ) return 0; else;
282 4
283 4 if ( recbuf[2] == RecLen-3 ) /*接收完成计算校验和*/
284 4 {
285 5 CheckNum = recbuf[0];
286 5 for ( i=2; i<RecLen; i++ ) CheckNum+=recbuf[i];
287 5 if ( CheckNum == 0xff ) return 1; /*接收成功*/
288 5 else return 0; /* 校验和错 */
289 5 }
290 4 else; /*接收数据长度不够*/
291 4 }
292 3 else if(RecLen==1 && recbuf[0]==0x5a) RecLen=0; /*收到的是唤醒*/
293 3 else;
294 3 }
295 2 else if ( TF0 ) { TR0=0; TL0=0xf0;TH0=0xd8; TR0=0x1; TF0=0; time++;}
296 2 else;
297 2 }
298 1 return 0;
299 1 }
300
301 void rwE2prom()
302 {
303 1 uint location;
C51 COMPILER V3.20, SN-50203013 VF3000EM 10/27/06 09:17:20 PAGE 6
304 1 uchar check,i,byte;
305 1
306 1 location=recbuf[6]*0x100+recbuf[5];
307 1
308 1 if (recbuf[3]==0x80)/*读取操作*/
309 1 {
310 2 check=0;
311 2 for ( i=0;i<recbuf[4];i++ )
312 2 {
313 3 byte=rd24c256(location+i);
314 3 sendChar(byte);
315 3 check+=byte;
316 3 }
317 2 sendChar(0xff-check);
318 2 }
319 1 else if (recbuf[3]==0x01)/*写入操作*/
320 1 {
321 2 for ( i=0;i<recbuf[4];i++ )
322 2 {
323 3 wr24c256(location+i,recbuf[7+i]);
324 3 }
325 2 sendChar(0);
326 2 }
327 1 else;
328 1 }
329
330 void commHandle()
331 {
332 1 uchar i;
333 1
334 1 for(i=0;i<120;i++)
335 1 {
336 2 if ( recMsg() ) /* 接收到完整的消息 */
337 2 {
338 3 switch(recbuf[0])
339 3 {
340 4 case 0x15: pcSetClock(); break; /* 校表 */
341 4 case 0x25: setMID(); break; /* 设置笔号 */
342 4 case 0x35: sendMID(); break; /* 发送笔号 */
343 4 case 0x45: sendClock(); break; /* 发送本笔时钟 */
344 4 case 0x55: clrRecord(); break; /* 清记录 */
345 4 case 0x85: sendNextRecord(); break; /* 上传某条一条记录 */
346 4 case 0x95: resumRecord(); break; /* 恢复记录总数 */
347 4 case 0xa5: setPara(); break; /* 下载参数 */
348 4 case 0xb5: sendRecordNum(); break; /* 上传记录总数 */
349 4 case 0xd5: rwE2prom(); break; /* 读写存储区 */
350 4 default:RecLen=0;
351 4 }
352 3 RecLen=0; /* 清除接收区 */
353 3 i=0;
354 3 }
355 2 else ;//powerDown();
356 2 }
357 1 powerDown();
358 1 }
359 /*****************************************/
360 void saveRecord()
361 {
362 1 uint offset;
363 1 uchar i;
364 1 uchar RecordH;
365 1 uchar hh,ll;
C51 COMPILER V3.20, SN-50203013 VF3000EM 10/27/06 09:17:20 PAGE 7
366 1 bit sample;
367 1
368 1 if(rd24c256(2)==0xaa) sample=1; else sample=0;
369 1 if(sample && RecordNum>=50) RecordNum=0;
370 1
371 1 if(rd24c256(0x25)==1) MaxRecordNum=8186;
372 1 else MaxRecordNum=4090;
373 1
374 1 if(RecordNum >= (MaxRecordNum-500))
375 1 {
376 2 for ( i=0;i<10;i++ ) {Led=0;delayN10ms(10); Led=1;delayN10ms(50);}
377 2 }
378 1 if(RecordNum == MaxRecordNum)
379 1 {for(i=0;i<3;i++) music();return;}
380 1
381 1 offset=RecordAddr+RecordNum*8;
382 1 for ( i=0;i<4;i++ ) wr24c256(offset+i,RFCardID[i]);
383 1
384 1 getClock();
385 1
386 1 RFCardID[0]=Clock.MonthCentury&0x1f;
387 1 RFCardID[1]=Clock.Day;
388 1 RFCardID[2]=Clock.Hour;
389 1 RFCardID[3]=Clock.Min;
390 1 for ( i=0;i<4;i++ ) wr24c256(offset+4+i,RFCardID[i+1]);
391 1
392 1 RecordNum++;
393 1 hh=RecordNum/64;
394 1 ll=RecordNum%64;
395 1 wrPCF8563Byte(0xb,ll|0x80);
396 1 if ( ll==0 ) wr24c256(0x03,hh);
397 1 else;
398 1 }
399
400 void getRecordNum()
401 {
402 1 RecordNum = rd24c256(0x03);
403 1 RecordNum *= 64;
404 1 RecordNum += (rdPCF8563Byte(0xb)&0x3f);
405 1 }
406
407
408 uchar TT1;
409 void timer1() interrupt 3 using 2 // 50ms interrupt
410 {
411 1
412 1 TH1=0x4c;TL1=0;
413 1 TT1++;
414 1 }
415
416 void main()
417 {
418 1 uchar data i;
419 1 uint ii;
420 1 uchar time;
421 1
422 1 Shake=0;
423 1
424 1 TMOD=0x11; //TR1=1; //ET1=1;
425 1 RI=0;
426 1 init24c256();
427 1 initPCF8563();
C51 COMPILER V3.20, SN-50203013 VF3000EM 10/27/06 09:17:20 PAGE 8
428 1 getRecordNum();
429 1 IT0=0; //low level triggered --Wakeup
430 1 EX0=1; //INT0 enable;
431 1 EA=1;
432 1
433 1 time=rd24c256(0x26);
434 1 if(time<2 && time>60) time=3;
435 1
436 1 i=0;
437 1 while (i<120)
438 1 {
439 2 SHD=0;
440 2 if(rfEM()==1)
441 2 {
442 3 SHD=1;
443 3 music();
444 3 saveRecord();
445 3 powerDown();
446 3 }
447 2 else ;
448 2 SHD=1;
449 2 if(i==(time*2-1)) { music(); powerDown();}
450 2
451 2 TT1=0;
452 2 TH1=0x4c;TL1=0x00; TF1=0; // 50ms interrupt; 8*50ms=400ms
453 2 TR1=1; ET1=1;
454 2 while ( TT1<9 && !CommMark ) PCON=1; // IDLE MODE
455 2 ET1=0;
456 2
457 2 i++;
458 2
459 2 if ( CommMark )
460 2 {
461 3 initComm();
462 3 commHandle();
463 3 powerDown();
464 3 }
465 2 else;
466 2 }
467 1 music();
468 1 powerDown();
469 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1701 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 7 32
IDATA SIZE = 16 ----
BIT SIZE = 3 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -