vf2000.lst

来自「安防产品源程序 包括液晶芯片, c51单片机,通讯等 程序」· LST 代码 · 共 548 行 · 第 1/2 页

LST
548
字号
 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 + =
减小字号Ctrl + -
显示快捷键?