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

📄 i2c_slaver.lst

📁 I2C slaver 的8051源码
💻 LST
📖 第 1 页 / 共 3 页
字号:
 278   1              
 279   1              TH0 =0xed;//18.432MHz晶体,16位方式3ms
 280   1              TL0 =0xef;                      
 281   1              TF0 = 0;
 282   1              while(CLK_PIN == 0)//等待CLK 的0完成
 283   1              {
 284   2                      if(TF0 == 1)
 285   2                              {                               
 286   3                                      return;
 287   3                              }
 288   2                              
 289   2              }
 290   1              
 291   1              //读 BYTE1 的第8 位
 292   1              SDA_LEVEL = SDA_PIN;//读SDA数据
 293   1              if(SDA_LEVEL == 1)
 294   1                      {
 295   2                              SDA_DATA[var]  |= 0x01;
 296   2                              
 297   2                      }
 298   1              else
 299   1                      {
 300   2                              SDA_DATA[var]  &= 0xfe;
 301   2                      }
 302   1              
 303   1              TH0 =0xed;//18.432MHz晶体,16位方式3ms
C51 COMPILER V7.50   I2C_SLAVER                                                            03/02/2009 14:25:10 PAGE 6   

 304   1              TL0 =0xef;                      
 305   1              TF0 = 0;
 306   1              while(CLK_PIN == 1)//等待CLK 的 1完成
 307   1              {
 308   2                      if(TF0 == 1)
 309   2                              {                               
 310   3                                      return;
 311   3                              }                       
 312   2              }
 313   1                      
 314   1              
 315   1              //处理应答
 316   1              _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
 317   1              SDA_PIN = 0;//应答
 318   1              
 319   1              TH0 =0xed;//18.432MHz晶体,16位方式3ms
 320   1              TL0 =0xef;                      
 321   1              TF0 = 0;
 322   1              while(CLK_PIN == 0)//等待CLK 应答0 的完成
 323   1              {
 324   2                      if(TF0 == 1)
 325   2                              {
 326   3                                      
 327   3                                      return;
 328   3                              }
 329   2                              
 330   2              }       
 331   1      
 332   1              
 333   1              TH0 =0xed;//18.432MHz晶体,16位方式3ms
 334   1              TL0 =0xef;                      
 335   1              TF0 = 0;
 336   1              while(CLK_PIN == 1)//等待CLK 应答的 1完成
 337   1              {
 338   2                      if(TF0 == 1)
 339   2                              {                               
 340   3                                      return;
 341   3                              }                       
 342   2              }
 343   1              
 344   1              SDA_PIN = 1;//应答完成,释放SDA
 345   1              
 346   1              //检测是否stop
 347   1              TH0 =0xed;//18.432MHz晶体,16位方式3ms
 348   1              TL0 =0xef;      
 349   1              TF0 = 0;
 350   1              while(CLK_PIN == 0)//等待CLK 0 的完成
 351   1              {
 352   2                      if(TF0 == 1)
 353   2                              {                               
 354   3                                      return;
 355   3                              }
 356   2                              
 357   2              }
 358   1              
 359   1              //CLK的0完成了, 接下来检测是否在1期间SDA有上升沿
 360   1      
 361   1              TH0 =0xed;//18.432MHz晶体,16位方式3ms
 362   1              TL0 =0xef;      
 363   1              TF0 = 0;                
 364   1              
 365   1              SDA_LEVEL= SDA_PIN;             
C51 COMPILER V7.50   I2C_SLAVER                                                            03/02/2009 14:25:10 PAGE 7   

 366   1              if(SDA_LEVEL == 1) 
 367   1                      {
 368   2                              SDA_LEVEL_BAK = 1;
 369   2                              while(CLK_PIN == 1)//如果 第一次就是1,肯定不是stop,等待1完
 370   2                                      {
 371   3                                              if(TF0 == 1)
 372   3                                              {
 373   4                                                      return;
 374   4                                              }
 375   3                                      }
 376   2                      }
 377   1              else//(SDA_LEVEL == 0) 
 378   1                      {
 379   2                              SDA_LEVEL_BAK = 0;
 380   2                              while(CLK_PIN == 1)//等1 
 381   2                                      {
 382   3                                              if(TF0 == 1)
 383   3                                                      {
 384   4                                                              return;
 385   4                                                      }
 386   3                                              SDA_LEVEL= SDA_PIN;                     
 387   3              
 388   3                                              if(SDA_LEVEL == 1)
 389   3                                                      {
 390   4                                                              return;
 391   4                                                      }                                                       
 392   3                                      }                                       
 393   2                      }       
 394   1              Recevie_Byte((&SDA_DATA[var + 1]));                     
 395   1              
 396   1      }
 397          
 398          void Recevie_Byte( unsigned char *Recevie_Pointer)
 399          {                       
 400   1              //Recevie_Pointer++;                    
 401   1              if(SDA_LEVEL_BAK== 1)
 402   1                      {
 403   2                              *Recevie_Pointer  |= 0x01;
 404   2                              *Recevie_Pointer =*Recevie_Pointer << 1;
 405   2                      }
 406   1              else
 407   1                      {
 408   2                              *Recevie_Pointer  &= 0xfe;
 409   2                              *Recevie_Pointer =*Recevie_Pointer << 1;
 410   2                      }               
 411   1              
 412   1              ///////////////////////////////////////
 413   1              
 414   1              TH0 =0xed;//18.432MHz晶体,16位方式3ms
 415   1              TL0 =0xef;                      
 416   1              TF0 = 0;
 417   1              while(CLK_PIN == 0)//等待CLK 的0完成
 418   1              {
 419   2                      if(TF0 == 1)
 420   2                              {
 421   3                                      return;
 422   3                              }
 423   2                              
 424   2              }               
 425   1              
 426   1              SDA_LEVEL = SDA_PIN;//读SDA数据
 427   1              if(SDA_LEVEL== 1)
C51 COMPILER V7.50   I2C_SLAVER                                                            03/02/2009 14:25:10 PAGE 8   

 428   1                      {
 429   2                              *Recevie_Pointer  |= 0x01;
 430   2                              *Recevie_Pointer =*Recevie_Pointer << 1;
 431   2                      }
 432   1              else
 433   1                      {
 434   2                              *Recevie_Pointer  &= 0xfe;              
 435   2                              *Recevie_Pointer =*Recevie_Pointer << 1;
 436   2                      }
 437   1              
 438   1              TH0 =0xed;//18.432MHz晶体,16位方式3ms
 439   1              TL0 =0xef;                      
 440   1              TF0 = 0;
 441   1              while(CLK_PIN == 1)//等待CLK 的 1完成
 442   1              {
 443   2                      if(TF0 == 1)
 444   2                              {
 445   3                                      return;
 446   3                              }
 447   2                              
 448   2              }                               
 449   1              
 450   1              TH0 =0xed;//18.432MHz晶体,16位方式3ms
 451   1              TL0 =0xef;                      
 452   1              TF0 = 0;
 453   1              while(CLK_PIN == 0)//等待CLK 的0完成
 454   1              {
 455   2                      if(TF0 == 1)
 456   2                              {
 457   3                                      return;
 458   3                              }
 459   2                              
 460   2              }
 461   1                                      
 462   1              SDA_LEVEL = SDA_PIN;//读SDA数据
 463   1              if(SDA_LEVEL== 1)
 464   1                      {
 465   2                              *Recevie_Pointer  |= 0x01;
 466   2                              *Recevie_Pointer =*Recevie_Pointer << 1;
 467   2                      }
 468   1              else
 469   1                      {
 470   2                              *Recevie_Pointer  &= 0xfe;
 471   2                              *Recevie_Pointer =*Recevie_Pointer << 1;
 472   2                      }
 473   1              
 474   1              TH0 =0xed;//18.432MHz晶体,16位方式3ms
 475   1              TL0 =0xef;                      
 476   1              TF0 = 0;
 477   1              while(CLK_PIN == 1)//等待CLK 的 1完成
 478   1              {
 479   2                      if(TF0 == 1)
 480   2                              {
 481   3                                      return;
 482   3                              }
 483   2                              
 484   2              }
 485   1                                      
 486   1              TH0 =0xed;//18.432MHz晶体,16位方式3ms
 487   1              TL0 =0xef;                      
 488   1              TF0 = 0;
 489   1              while(CLK_PIN == 0)//等待CLK 的0完成
C51 COMPILER V7.50   I2C_SLAVER                                                            03/02/2009 14:25:10 PAGE 9   

 490   1              {
 491   2                      if(TF0 == 1)
 492   2                              {
 493   3                                      return;
 494   3                              }
 495   2                              
 496   2              }                       
 497   1              
 498   1              SDA_LEVEL = SDA_PIN;//读SDA数据
 499   1              if(SDA_LEVEL== 1)
 500   1                      {
 501   2                              *Recevie_Pointer  |= 0x01;
 502   2                              *Recevie_Pointer =*Recevie_Pointer << 1;
 503   2                      }
 504   1              else
 505   1                      {
 506   2                              *Recevie_Pointer  &= 0xfe;      
 507   2                              *Recevie_Pointer =*Recevie_Pointer << 1;
 508   2                      }
 509   1              
 510   1              TH0 =0xed;//18.432MHz晶体,16位方式3ms
 511   1              TL0 =0xef;                      
 512   1              TF0 = 0;
 513   1              while(CLK_PIN == 1)//等待CLK 的 1完成
 514   1              {
 515   2                      if(TF0 == 1)
 516   2                              {
 517   3                                      return;
 518   3                              }
 519   2                              
 520   2              }                       
 521   1              
 522   1              TH0 =0xed;//18.432MHz晶体,16位方式3ms
 523   1              TL0 =0xef;                      
 524   1              TF0 = 0;
 525   1              while(CLK_PIN == 0)//等待CLK 的0完成
 526   1              {
 527   2                      if(TF0 == 1)
 528   2                              {
 529   3                                      return;
 530   3                              }
 531   2                              
 532   2              }
 533   1              
 534   1              SDA_LEVEL = SDA_PIN;//读SDA数据
 535   1              if(SDA_LEVEL== 1)
 536   1                      {
 537   2                              *Recevie_Pointer  |= 0x01;
 538   2                              *Recevie_Pointer =*Recevie_Pointer << 1;
 539   2                      }
 540   1              else
 541   1                      {
 542   2                              *Recevie_Pointer  &= 0xfe;
 543   2                              *Recevie_Pointer =*Recevie_Pointer << 1;
 544   2                      }
 545   1              
 546   1              TH0 =0xed;//18.432MHz晶体,16位方式3ms
 547   1              TL0 =0xef;                      
 548   1              TF0 = 0;
 549   1              while(CLK_PIN == 1)//等待CLK 的1完成
 550   1              {
 551   2                      if(TF0 == 1)
C51 COMPILER V7.50   I2C_SLAVER                                                            03/02/2009 14:25:10 PAGE 10  

 552   2                              {
 553   3                                      return;
 554   3                              }
 555   2                              
 556   2              }                       
 557   1              
 558   1              TH0 =0xed;//18.432MHz晶体,16位方式3ms
 559   1              TL0 =0xef;                      
 560   1              TF0 = 0;
 561   1              while(CLK_PIN == 0)//等待CLK 的0完成

⌨️ 快捷键说明

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