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

📄 main.lst

📁 该程序是远程电话控制系统程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 258   3                {
 259   4                      TR2 = FALSE;
 260   4                      TF2 = FALSE;
 261   4                      return;
 262   4                }
 263   3              }
 264   2              TF2 = FALSE;
 265   2      }
 266   1        TR2 = FALSE;
 267   1      }
 268          
 269          /****************************************************************************
 270          
 271          ****************************************************************************/
 272          void isr_timer0(void) interrupt 1 using 1
 273          {
 274   1      
 275   1                      EA=0;
 276   1                      TL0=0x21;
 277   1                      TH0=0xfc;
 278   1                      EA=1;
 279   1      }
 280          /*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 281                          uart interrupt 4
 282                          receive_send
 283          ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;*/
 284          void receive_send() interrupt 4
 285          {
 286   1                      unsigned char s;
 287   1                      unsigned char bcc=0;
 288   1                      ES=0;
 289   1                      if(RI)
 290   1                      {
 291   2                              RI=0;
 292   2                              s=SBUF;
 293   2                              if((rxhead==0)&&(s!=0x02))
 294   2                              {
 295   3                                      rxhead=0;
 296   3                                      ES=1;
C51 COMPILER V7.06   MAIN                                                                  01/03/2009 12:35:54 PAGE 6   

 297   3                                      return;
 298   3                              }
 299   2                              if(rxhead==3)
 300   2                              {
 301   3                                      datalen=s;
 302   3                              }
 303   2                              receive_buf1[rxhead++]=s;
 304   2                              if(rxhead==(datalen+5))
 305   2                              {
 306   3                                      if(s==0x03)
 307   3                                      {
 308   4                                              receive_flag=1;
 309   4                                              datalen=rxhead-3;
 310   4                                              ES=1;
 311   4                                              rxhead=0;
 312   4                                      }
 313   3                                      else
 314   3                                      {
 315   4                                              rxhead=0;
 316   4                                              ES=1;
 317   4                                              return;
 318   4                                      }
 319   3                              }
 320   2      
 321   2                      }
 322   1                      else if(TI)
 323   1                      {
 324   2                              TI=0;
 325   2                              if(txhead>senddatalen+2)
 326   2                              {
 327   3                                      txhead=0;
 328   3                                      ES=1;
 329   3                                      return;
 330   3                              }
 331   2                              SBUF=send_buf1[txhead];
 332   2                              txhead++;
 333   2                              ES=1;
 334   2                              return;
 335   2                      }
 336   1                      ES=1;
 337   1      
 338   1      }
 339          /***************************************************************************/
 340          void EM_REV (void) interrupt 0 using 1
 341          {
 342   1      //              phone_flag=1;
 343   1      //              timecounter=0;
 344   1                      key_time=0;
 345   1                      callnumber++;
 346   1      }
 347          /***************************************************************************/
 348          //;;;;;;;;;;read inter data flash(EEPROM)program ;;;;;;;;;;;;;;;;
 349          //;;;;;;;;;;;;;;ext address data is form 0~29696;;;;;;;;;;;;;;;;;;;;
 350          unsigned char read_eeprom(unsigned int addrdata)
 351          {
 352   1                      unsigned int address;
 353   1                      unsigned char data1;
 354   1                      address=0x2000+addrdata;
 355   1                      ISP_ADDRH=(unsigned char)(address>>8);
 356   1                      ISP_ADDRL=(unsigned char)address;
 357   1                      ISP_CONTR=WAIT_TIME;
 358   1                      ISP_CONTR=0x80;
C51 COMPILER V7.06   MAIN                                                                  01/03/2009 12:35:54 PAGE 7   

 359   1                      ISP_CMD=ISP_IAP_BYTE_READ;
 360   1                      ISP_TRIG=0x46;
 361   1                      ISP_TRIG=0xb9;
 362   1                      ;;;
 363   1                      data1=ISP_DATA;
 364   1                      return data1;
 365   1      }
 366          //;;;;;;;;;;write data flash(EEPROM) program;;;;;;;;;;;;;;;;;;
 367          //;;;;;;;;;;;ext address 0~29696   data :;;;;;;;;;;;;;;;;;;;;
 368          void write_eeprom(unsigned int addrdata,unsigned char data2)
 369          {
 370   1                      unsigned int address;
 371   1                      address=0x2000+addrdata;
 372   1                      ISP_DATA=data2;
 373   1                      ISP_ADDRH=(unsigned char)(address>>8);
 374   1                      ISP_ADDRL=(unsigned char)address;
 375   1                      ISP_CONTR=WAIT_TIME;
 376   1                      ISP_CONTR=0x80;
 377   1                      ISP_CMD=ISP_IAP_BYTE_PROGRAM;
 378   1                      ISP_TRIG=0x46;
 379   1                      ISP_TRIG=0xb9;
 380   1      }
 381          /////////////////////////////////////////////////////////////////////////////
 382          void erase_eeprom(unsigned char sectors)
 383          {
 384   1                      unsigned int addr;
 385   1                      addr=0x2000+sectors*0x200;                //89c51rc is 0x2000  89c54rd+ is 0x8000
 386   1                      ISP_ADDRH=(unsigned char)(addr>>8);
 387   1                      ISP_ADDRL=(unsigned char)addr;
 388   1                      ISP_CONTR=WAIT_TIME;
 389   1                      ISP_CONTR=0x80;
 390   1                      ISP_CMD=ISP_IAP_SECTOR_ERASE;
 391   1                      ISP_TRIG=0x46;
 392   1                      ISP_TRIG=0xb9;
 393   1      }
 394          ///////////////////////////////////////////////////////////////////////////
 395          void command_press(void)
 396          {
 397   1              unsigned char ss;
 398   1              receive_flag=0;
 399   1              ss=receive_buf1[1];
 400   1              switch(ss)
 401   1              {
 402   2                      
 403   2                      case 0x01:             //写卡数据处理
 404   2                      bell1(3);
 405   2                      break;
 406   2                      
 407   2                      break;
 408   2                      default:
 409   2                      break;
 410   2              }
 411   1      }
 412          ////////////////////////////////////////////////////
 413          uchar readsr(void)
 414          {
 415   1              uchar b;
 416   1              WRE=1;
 417   1              RDE=0;
 418   1              RSE=1;
 419   1              CSE=0;
 420   1              _nop_();
C51 COMPILER V7.06   MAIN                                                                  01/03/2009 12:35:54 PAGE 8   

 421   1              _nop_();
 422   1              b=P0&0x0f;
 423   1              CSE=1;
 424   1              return(b);
 425   1      }       
 426          
 427          void writesr(uchar a)
 428          {
 429   1              WRE=0;
 430   1              RDE=1;
 431   1              RSE=1;
 432   1              CSE=0;
 433   1              _nop_();
 434   1              _nop_();
 435   1              P0=a;
 436   1              _nop_();
 437   1              _nop_();
 438   1              CSE=1;
 439   1      }
 440          
 441          uchar readdata(void)
 442          {
 443   1              uchar b;
 444   1              WRE=1;
 445   1              RDE=0;
 446   1              RSE=0;
 447   1              CSE=0;
 448   1              _nop_();
 449   1              _nop_();
 450   1              b=P0&0x0f;
 451   1              CSE=1;
 452   1              return(b);
 453   1      }       
 454          
 455          void writedata(uchar a)
 456          {
 457   1              WRE=0;
 458   1              RDE=1;
 459   1              RSE=0;
 460   1              CSE=0;
 461   1              _nop_();
 462   1              _nop_();
 463   1              P0=a;
 464   1              _nop_();
 465   1              _nop_();
 466   1              CSE=1;
 467   1      }
 468          
 469          
 470          void delayms(uint n)
 471          {
 472   1              uint b;
 473   1              while(n>0)
 474   1              {
 475   2                      for(b=0;b<100;b++);
 476   2                      n--;
 477   2              }
 478   1      }
 479          
 480          void init_mt8888(void)
 481          {
 482   1              uchar a;
C51 COMPILER V7.06   MAIN                                                                  01/03/2009 12:35:54 PAGE 9   

 483   1      //      P1=0;
 484   1      //      ONTEL=0;
 485   1              delayms(100);
 486   1              a=readsr();
 487   1              writesr(0);
 488   1              writesr(0);
 489   1              writesr(8);
 490   1              writesr(0);
 491   1              a=readsr();
 492   1      
 493   1      }
 494          
 495          uchar GetDTMFdata(void)                         //接收一位号码
 496          {
 497   1         uchar i;
 498   1      //   control_status=0xfd;  //设置:音频输出、DTMF、中断、下一次访问CRB 
 499   1         writesr(0xfd);
 500   1         writesr(0);
 501   1         i=readsr();
 502   1         if(i&0x04)
 503   1         {  
 504   2                      //i=r_wDTMF;
 505   2                      i=readdata();
 506   2                      i&=0x0f;                // 接收到有效号码
 507   2              }
 508   1         else
 509   1                      i=0;
 510   1                      return  i;              //没有接收到有效号码,返回0
 511   1      }
 512          void sendDTMFdata(uchar d)  //发送一位号码
 513          {
 514   1              uchar i;
 515   1              writedata(d);
 516   1              IRQ_PIN=1;
 517   1              while(IRQ_PIN);
 518   1      //      OUT1=!OUT1;
 519   1      //      OUT2=!OUT2;
 520   1              delayms(800);
 521   1              while(1)
 522   1              {
 523   2                      i=readsr();
 524   2                      if(i&0x02)break;
 525   2              }
 526   1              OUT1=!OUT1;
 527   1              OUT2=!OUT2;
 528   1      }       
 529          void sendPhone(uchar *arr)                                      //发送一个完整的电话号码,遇0停止("0"是字符数组的///////////结束标志符,而

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -