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

📄 t.lst

📁 at89c51 读取写入24c64的C源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
                I2C_Stop();
                Delay_N_mS(10);       /* waiting for write cycle to be completed */
                ((uchar*)mcu_address)++;
                AT24C64_address++;
               }
              }
              void AT24C64_R(void *mcu_address,uint AT24C64_address,uint count)
              {
               //DOG_WDI=!DOG_WDI;
               //DOGTIME=0;
               while(count--)
               {
                I2C_Start();
                /*I2C_Send_Byte( 0xa0 + AT24C64_address / 256 *2 );*/   /* 24C16 USE */
                I2C_Send_Byte( 0xa0 );
                I2C_Send_Byte( AT24C64_address/256 );
                I2C_Send_Byte( AT24C64_address % 256 );
                I2C_Start();
                /*I2C_Send_Byte( 0xa1 + AT24C64_address /256 *2 );*/
C51 COMPILER V7.06   T                                                                     06/27/2008 14:25:55 PAGE 5   

                I2C_Send_Byte( 0xa1 );
                *(uchar*)mcu_address = I2C_Receive_Byte();
                I2C_Nack();
                I2C_Stop();
                ((uchar*)mcu_address)++;
                AT24C64_address++;
               }
              }
              
              #else
 252          
 253          void delay()
 254          {
 255   1      _nop_();
 256   1      _nop_();
 257   1      _nop_();
 258   1      _nop_();
 259   1      _nop_();
 260   1      }
 261          #if 0
              void delayms (uint x)
              {
               byte j;
               while(x--){
                  for(j=0;j<125;j++){;}
                    }
              }
              #endif
 270          void I2C_Start()                      //I2C START
 271          {
 272   1       SDA=1;
 273   1       _nop_();
 274   1        SCL=1;
 275   1        delay();
 276   1         SDA=0;
 277   1         delay();
 278   1        SCL=0;
 279   1        _nop_();
 280   1      }
 281          
 282          void I2C_Stop()             //I2C STOP
 283          {
 284   1      SDA=0;
 285   1      _nop_();
 286   1      SCL=1;
 287   1      delay();
 288   1      SDA=1;
 289   1      delay();
 290   1      }
 291          
 292          bit  I2C_ReceiveAck() 
 293          {
 294   1      bit ck;
 295   1      SDA=1;                  //THE HOST RELEASE THE BUS
 296   1      _nop_();
 297   1      _nop_();
 298   1      SCL=1;           
 299   1      _nop_();
 300   1      _nop_();
 301   1      ck=SDA;
 302   1      _nop_();
 303   1      _nop_();
C51 COMPILER V7.06   T                                                                     06/27/2008 14:25:55 PAGE 6   

 304   1      SCL=0;
 305   1      _nop_();
 306   1      return(ck);
 307   1      }
 308          
 309          
 310          void I2C_SendAck()
 311          
 312          {
 313   1      SDA=0;
 314   1      _nop_();
 315   1      _nop_();
 316   1      SCL=1;
 317   1      delay();          //remain
 318   1      SCL=0;
 319   1      _nop_();
 320   1      _nop_();
 321   1      }
 322          
 323          void I2C_SendNoAck()
 324          
 325          {
 326   1      SDA=1;
 327   1      _nop_();
 328   1      _nop_();
 329   1      SCL=1;
 330   1      delay();   //remain
 331   1      SCL=0;
 332   1      _nop_();
 333   1      _nop_();
 334   1      }
 335          
 336          void I2C_SendByte(byte SData)
 337          {uchar i;
 338   1      for(i=0;i<8;i++)
 339   1      {  SDA=(bit)(SData&0x80);
 340   2         SData=SData<<1;
 341   2         SCL=1;
 342   2         delay();
 343   2         SCL=0;
 344   2      }
 345   1      }
 346          
 347          byte I2C_ReceiveByte()
 348          {uchar i;
 349   1       byte RData;
 350   1       RData=0;
 351   1      
 352   1      for(i=0;i<8;i++)
 353   1      {  SDA=1;
 354   2        _nop_();
 355   2        SCL=1;
 356   2        _nop_();
 357   2        _nop_();
 358   2        RData=RData<<1;
 359   2        RData=RData|SDA;
 360   2        _nop_();
 361   2        _nop_();
 362   2        SCL=0;
 363   2      }
 364   1      return(RData);
 365   1      }
C51 COMPILER V7.06   T                                                                     06/27/2008 14:25:55 PAGE 7   

 366          //#define p1(x) P1=~x
 367          #define p1(x) delay()
 368          void I2C_SendToSubAddress(byte SlaveAddress,uint SubAddress,byte *pSData,uchar N)
 369          {
 370   1      uchar i;
 371   1      I2C_Start();p1(0x1F);
 372   1      I2C_SendByte(SlaveAddress);p1(0x2F);    //send slave address(write device)
 373   1      I2C_ReceiveAck();p1(0x3F);
 374   1      
 375   1      I2C_SendByte(SubAddress/256);p1(0x4F);    //send sub address
 376   1      I2C_ReceiveAck();p1(0x5F);
 377   1      
 378   1      I2C_SendByte(SubAddress%256);p1(0x6F);    //send sub address
 379   1      I2C_ReceiveAck();p1(0x7F);
 380   1      
 381   1      /*
 382   1      I2C_SendByte(SubAddress);    
 383   1      I2C_ReceiveAck();
 384   1      
 385   1      */
 386   1      for(i=0;i<N;i++)
 387   1      { do{
 388   3        I2C_SendByte(pSData[i]);
 389   3        }while(I2C_ReceiveAck()==1); 
 390   2      }
 391   1      p1(0x8F);
 392   1      I2C_Stop();p1(0x9F);
 393   1      }
 394          void I2C_ReceiveFromSubAddress(byte SlaveAddress,uint SubAddress,byte *pRData,uchar N)
 395          {uchar i;
 396   1      I2C_Start();
 397   1      I2C_SendByte(SlaveAddress);    //send slave address(write device)
 398   1      I2C_ReceiveAck();
 399   1      I2C_SendByte(SubAddress/256);    //send sub address
 400   1      I2C_ReceiveAck();
 401   1      I2C_SendByte(SubAddress%256);    //send sub address
 402   1      I2C_ReceiveAck();
 403   1      
 404   1      /*
 405   1      I2C_SendByte(SubAddress);    //send sub address
 406   1      I2C_ReceiveAck();
 407   1      */
 408   1      I2C_Start();                              //I2C Start Again!
 409   1      I2C_SendByte(SlaveAddress+1);    //send slave address(read device)
 410   1      I2C_ReceiveAck();
 411   1      for(i=0;i<N-1;i++)
 412   1      {
 413   2         pRData[i]=I2C_ReceiveByte();
 414   2         I2C_SendAck();
 415   2      }
 416   1      pRData[i]=I2C_ReceiveByte();
 417   1      I2C_SendNoAck();
 418   1      I2C_Stop();
 419   1      }
 420          /*
 421          main()
 422          {byte *pData;
 423           uint addr;
 424            byte a[16]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
 425            pData=a;
 426             do
 427             {
C51 COMPILER V7.06   T                                                                     06/27/2008 14:25:55 PAGE 8   

 428                I2C_SendToSubAddress(0xA0,addr,pData,16);
 429                addr+=16;
 430             delayms (1);
 431             }while(addr!=0x2000);
 432          while(1);
 433          }
 434          */
 435          #endif


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    706    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     23      17
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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