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

📄 receivedata.lst

📁 用89S52作的远程序电话拨号系统
💻 LST
📖 第 1 页 / 共 2 页
字号:
 224          * RS=1,RW=1,读状态寄存器                                     *
 225          *                                                            *
 226          *************************************************************/
 227          uchar  read_status()
 228          {
 229   1         uchar dat;
 230   1         P1=0xff;    //置P1为输入状态
 231   1         MT_RS=1;
 232   1         MT_RW =1;
 233   1         _nop_();
 234   1         _nop_();
 235   1         MT_CK =1;
 236   1         _nop_();
 237   1         _nop_();
 238   1         dat=P1;
 239   1         _nop_();
 240   1         _nop_();
 241   1         MT_CK =0;
C51 COMPILER V8.02   RECEIVEDATA                                                           12/12/2006 16:32:39 PAGE 5   

 242   1       
 243   1         return(dat);
 244   1         
 245   1      }
 246          
 247          /*************************************************************
 248          *                                                            *
 249          * MT8880 初始化函数                                          *
 250          *                                                            *
 251          *************************************************************/
 252          void  MT_INIT() 
 253          {
 254   1         MT_CS=0;             //MT8880使能
 255   1         delayNOP();
 256   1         write_status(0x10);  //写 8880CRA,CRA=0000.
 257   1         write_status(0x10);  //写 8880CRA,CRA=0000.
 258   1         write_status(0x18);  //写 8880CRA,CRA=1000,允许选择CRB.
 259   1         write_status(0x10);  //写 8880CRB,CRB=0000
 260   1        // MT_CS=1;             //禁止MT8880工作
 261   1      }
 262          
 263          /*************************************************************
 264          *                                                            *
 265          * MT8880 中断初始化函数                                      *
 266          *                                                            *
 267          *************************************************************/
 268          void MT_IRQ_INIT()
 269          {
 270   1      // MT_CS=0;
 271   1         delayNOP();
 272   1         write_status(0x14); //写8880CRA,8880模式1为DTMF,IRQ
 273   1         delay(1000);
 274   1         EX0=1;              //允许外部EX0中断
 275   1         temp=0x00;
 276   1         dis_buf=0x00;
 277   1         delay(1000);
 278   1      }
 279          
 280          /***********************************************************
 281          *
 282          * 振铃信号中断函数
 283          *
 284          ***********************************************************/ 
 285          void  ex_t1() interrupt 2
 286          {
 287   1         EX1 =0;
 288   1         count++;
 289   1         if(count==0x03)
 290   1         {
 291   2           count=0x00;
 292   2           zhenling=1;
 293   2           EX1 =0; 
 294   2         } 
 295   1         else  
 296   1         EX1=1; 
 297   1      }
 298          
 299          /***********************************************************
 300          *
 301          * 中断接收DTMF函数
 302          * RS=0,RW=1,读接收数据寄存器.
 303          *
C51 COMPILER V8.02   RECEIVEDATA                                                           12/12/2006 16:32:39 PAGE 6   

 304          ***********************************************************/
 305          void  ex_t0() interrupt 0
 306          {
 307   1         EX0=0;
 308   1         read_status();
 309   1         P1=0xff;
 310   1         MT_RS=0;
 311   1         MT_RW=1;
 312   1         MT_CK=0;
 313   1         _nop_();
 314   1         _nop_();
 315   1         MT_CK=1;
 316   1         _nop_();
 317   1         _nop_();
 318   1         temp=P1;            //读MT8880接收数据寄存器
 319   1         temp=temp & 0x0f;
 320   1         MT_CK=0;
 321   1      
 322   1         playflag=1;        //显示标志置1    
 323   1      } 
 324          
 325          /************************************************************
 326          *                                                           *
 327          * 主程序                                                    *
 328          *                                                           *
 329          ************************************************************/ 
 330          void  main()
 331          {        
 332   1          P0=0xff;                    //置P0口
 333   1          P1=0xff;                    //置P1口
 334   1          P2=0xff;                    //置P2口
 335   1          P3=0xff;                    //置P3口
 336   1          delay(100);                 //上电延时
 337   1          MT_CS=1;                    //禁止MT8880工作
 338   1          lcd_init();                 //初始化LCD             
 339   1              
 340   1          lcd_pos(0);                 //设置显示位置为第一行
 341   1          for(m=0;m<16;m++)
 342   1          lcd_wdat(cdis1[m]);
 343   1      
 344   1          lcd_pos(0x40);              //设置显示位置为第二行     
 345   1          for(m=0;m<16;m++)
 346   1          lcd_wdat(cdis2[m]);
 347   1         
 348   1          temp=0x00;             //有关单元清零
 349   1          dis_buf=0x00;
 350   1          playflag=0;
 351   1          zhenling=0;
 352   1          count=0;
 353   1      
 354   1          IT0=1;                 //设置中断触发方式:下降沿触发
 355   1          IT1=1;                 //设置中断触发方式:下降沿触发
 356   1          EA =1;                 //总的中断允许
 357   1          EX1=1;                 //允许外部中断EX1中断    
 358   1       
 359   1        while(1)
 360   1        { 
 361   2          while(!zhenling);      //等待振铃信号出现
 362   2          
 363   2          if(zhenling)
 364   2           {      
 365   3             TEL = 0;           //摘机
C51 COMPILER V8.02   RECEIVEDATA                                                           12/12/2006 16:32:39 PAGE 7   

 366   3             zhenling=0;        //振铃标志
 367   3             tel_on=1;          //摘机标志        
 368   3             delay(2000);       //等待电话线路稳定 
 369   3           }
 370   2      
 371   2          while(tel_on)
 372   2          {                   
 373   3            MT_INIT();          //MT8880初始化
 374   3            MT_IRQ_INIT();
 375   3        
 376   3            while(temp!=0x0c)
 377   3            {
 378   4              if(playflag)
 379   4              {
 380   5                dis_buf=temp;
 381   5                lcd_play();
 382   5                
 383   5                playflag=0;
 384   5                T0_Count++;
 385   5      
 386   5                if(temp==0x0b)          //"*"
 387   5                {
 388   6                  beep();               //蜂鸣器响2声
 389   6                  beep();                   
 390   6                }
 391   5                EX0=1;                  //显示完毕开中断
 392   5              }
 393   4      
 394   4              if(T0_Count==0x0d)        // 一行是否显示完?
 395   4              {      
 396   5               lcd_pos(0x40);           //设置显示位置为第二行     
 397   5               for(m=0;m<16;m++)
 398   5               lcd_wdat(cdis2[m]);
 399   5            
 400   5               T0_Count=0x00;
 401   5               dis_buf=temp;
 402   5               lcd_play();
 403   5               T0_Count++;               
 404   5              }       
 405   4            } //end of while(temp!=0x0c)
 406   3      
 407   3           if(temp==0x0c)              //"#"
 408   3            {
 409   4               for(m=0;m<4;m++)        //蜂鸣器响4声
 410   4               beep();
 411   4                 
 412   4               TEL = 1;                 //挂机
 413   4      
 414   4               lcd_pos(0x40);           //设置显示位置为第二行     
 415   4               for(m=0;m<16;m++)
 416   4               lcd_wdat(cdis2[m]);
 417   4                
 418   4               T0_Count=0x00;
 419   4               temp=0x00;
 420   4               dis_buf=0x00;
 421   4               playflag=0;
 422   4               tel_on=0;
 423   4               MT_CS=1;                //禁止MT8880工作
 424   4               EX0=0;
 425   4               EX1=1;
 426   4            }
 427   3      
C51 COMPILER V8.02   RECEIVEDATA                                                           12/12/2006 16:32:39 PAGE 8   

 428   3              }  //end of while(tel_on)    
 429   2        }  //end of while(1)
 430   1      } //end of main()
 431          
 432          /*************************************************************
 433          * RS=1,RW=0,写状态寄存器                                     *
 434          * RS=1,RW=1,读状态寄存器                                     *
 435          * RS=0,RW=0,写发送寄存器                                     *
 436          * RS=0,RW=1,读接收数据寄存器                                 *
 437          *************************************************************/ 
 438          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    650    ----
   CONSTANT SIZE    =     34    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      5    ----
   IDATA SIZE       =   ----    ----
   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 + -