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

📄 eeprom.lst

📁 STC51系列的源码
💻 LST
📖 第 1 页 / 共 2 页
字号:
 170          unsigned char I2C_read_ack(void)
 171          {   unsigned char num=0xFF;
 172   1          I2C_DATA_PIN=0x1;  //* 需要释放数据线
 173   1          IIC_delay_min();
 174   1          I2C_SCLK_PIN=0x1;  //* 读取ACK的时钟信号
 175   1          while(I2C_DATA_PIN==0x1)
 176   1          {   num--;
 177   2              if(num==0x0)
 178   2              {  break;
C51 COMPILER V8.02   EEPROM                                                                09/26/2008 11:40:17 PAGE 4   

 179   3              }
 180   2          }
 181   1          I2C_SCLK_PIN=0x0;
 182   1          IIC_delay_min();
 183   1          I2C_DATA_PIN=0x0;
 184   1          IIC_delay_min();
 185   1          if(num==0x0)
 186   1          {  return 0x0;
 187   2          }
 188   1          else
 189   1          {  return 0x1;
 190   2          }
 191   1      }
 192          
 193          /********************************************************************************/
 194          /* funname : I2C_send_ack()                                                     */
 195          /* created : xillinx                                                            */
 196          /* time    : 2008-08-06                                                         */
 197          /* descript: I2C总线接收数据时发送ACK                                           */
 198          /********************************************************************************/
 199          void I2C_send_ack(void)
 200          {   I2C_DATA_PIN=0x0;
 201   1          IIC_delay_min();
 202   1          I2C_SCLK_PIN=0x1;
 203   1          IIC_delay_max();
 204   1          I2C_SCLK_PIN=0x0;
 205   1          IIC_delay_min();
 206   1      }
 207          
 208          /********************************************************************************/
 209          /* funname : I2C_send_nack()                                                    */
 210          /* created : xillinx                                                            */
 211          /* time    : 2008-08-06                                                         */
 212          /* descript: I2C总线接收数据时发送NACK                                          */
 213          /********************************************************************************/
 214          void I2C_send_nack(void)
 215          {   I2C_DATA_PIN=0x1;
 216   1          IIC_delay_min();
 217   1          I2C_SCLK_PIN=0x1;
 218   1          IIC_delay_max();
 219   1          I2C_SCLK_PIN=0x0;
 220   1          IIC_delay_min();
 221   1          I2C_DATA_PIN=0x0;
 222   1          IIC_delay_min();
 223   1      }
 224          
 225          
 226          
 227          /********************************************************************************/
 228          /* funname : I2C_send_1_byte()                                                  */
 229          /* created : xillinx                                                            */
 230          /* time    : 2008-08-06                                                         */
 231          /* descript: I2C总线发送1字节数据                                               */
 232          /********************************************************************************/
 233          unsigned char I2C_send_1_byte(unsigned char mdata)
 234          {   unsigned char status;
 235   1          I2C_start();
 236   1          I2C_send_8_bits(mdata);
 237   1          status=I2C_read_ack();
 238   1          I2C_stop();
 239   1          return status;
 240   1      }
C51 COMPILER V8.02   EEPROM                                                                09/26/2008 11:40:17 PAGE 5   

 241          /********************************************************************************/
 242          /* funname : I2C_recv_bit()                                                     */
 243          /* created : xillinx                                                            */
 244          /* time    : 2008-08-06                                                         */
 245          /* descript: I2C总线接收1位数据                                                 */
 246          /********************************************************************************/
 247          unsigned char I2C_recv_bit(void)
 248          {   unsigned char mbit;
 249   1          I2C_SCLK_PIN=0x1;  //* 准备读取数据
 250   1          IIC_delay_min();
 251   1          mbit=I2C_DATA_PIN;
 252   1          IIC_delay_min();
 253   1          I2C_SCLK_PIN=0x0;  //* 贮备下一个读取数据
 254   1          IIC_delay_max();
 255   1          return mbit;
 256   1      }
 257          
 258          /********************************************************************************/
 259          /* funname : I2C_recv_8_bits()                                                  */
 260          /* created : xillinx                                                            */
 261          /* time    : 2008-08-06                                                         */
 262          /* descript: I2C总线接收8位数据                                                 */
 263          /********************************************************************************/
 264          unsigned char I2C_recv_8_bits(void)
 265          {   unsigned char i,mdata=0x0;
 266   1          I2C_DATA_PIN=0x1;
 267   1          for(i=0x0;i<0x8;i++)
 268   1          {   mdata<<=0x1;
 269   2              mdata|=I2C_recv_bit();
 270   2          }
 271   1          I2C_DATA_PIN=0x0;
 272   1          IIC_delay_min();
 273   1          return mdata;
 274   1      }
 275          
 276          /********************************************************************************/
 277          /* funname : AT24C16_write()                                                    */
 278          /* created : xillinx                                                            */
 279          /* time    : 2008-08-06                                                         */
 280          /* descript: I2C总线写入数据                                                    */
 281          /*           设备地址字节                                                       */
 282          /*         | BIT7 | BIT6 | BIT5 | BIT4 | BIT3 | BIT2 | BIT1 | BIT0 |            */
 283          /*         |   1  |   0  |   1  |   0  |  A10 |  A9  |  A8  |  R/W  |            */
 284          /********************************************************************************/
 285          unsigned char AT24C16_write(unsigned char page, unsigned char address, unsigned char * buffer ,unsigned ch
             -ar length)
 286          {   unsigned char i;
 287   1          I2C_start();
 288   1          I2C_send_8_bits(AT24C16_WR_CMD|(page<<0x1));
 289   1          I2C_read_ack();
 290   1          I2C_send_8_bits(address);
 291   1          I2C_read_ack();
 292   1          for(i=0x0;i<length;i++)
 293   1          {   I2C_send_8_bits(buffer[i]);
 294   2              I2C_read_ack();
 295   2          }
 296   1          I2C_stop(); 
 297   1          IIC_delay_ms(10);
 298   1          return 0x1;
 299   1      } 
 300          /********************************************************************************/
 301          /* funname : AT24C16_read()                                                     */
C51 COMPILER V8.02   EEPROM                                                                09/26/2008 11:40:17 PAGE 6   

 302          /* created : xillinx                                                            */
 303          /* time    : 2008-08-06                                                         */
 304          /* descript: I2C总线写入数据                                                    */
 305          /********************************************************************************/
 306          unsigned char AT24C16_read(unsigned char page, unsigned char address, unsigned char * buffer ,unsigned cha
             -r length)
 307          {   unsigned char addr_hi;
 308   1          unsigned char i;
 309   1          addr_hi=(address>>0x8)&0xFF;
 310   1          I2C_start();
 311   1          I2C_send_8_bits(AT24C16_WR_CMD|(page<<0x1));
 312   1          I2C_read_ack(); 
 313   1          I2C_send_8_bits(address);
 314   1          I2C_read_ack(); //* 这时的时钟为低电平
 315   1          I2C_go_hi();
 316   1          I2C_start();
 317   1          I2C_send_8_bits(AT24C16_RD_CMD|(page<<0x1));
 318   1          I2C_read_ack(); 
 319   1          for(i=0x0;i<length-0x1;i++)
 320   1          {   buffer[i]=I2C_recv_8_bits();
 321   2              I2C_send_ack();
 322   2          }
 323   1          buffer[i]=I2C_recv_8_bits();
 324   1          I2C_send_nack();
 325   1          I2C_stop();
 326   1          IIC_delay_ms(10);
 327   1          return 0x1;
 328   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    505    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----      13
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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