⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vf3000em.lst

📁 安防产品源程序 包括液晶芯片, c51单片机,通讯等 程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 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 + -