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

📄 wr_eeprom_at24c02_iic.lst

📁 Keil C51
💻 LST
字号:
C51 COMPILER V8.08   WR_EEPROM_AT24C02_IIC                                                 08/17/2008 17:50:19 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE WR_EEPROM_AT24C02_IIC
OBJECT MODULE PLACED IN WR_EEPROM_AT24C02_IIC.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE WR_EEPROM_AT24C02_IIC.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          //EEPROM AT24C02的数据读写操作 采用IIC总线读写 C程序
   2          /*----------WR_EEPROM_AT24C02_IIC.c----------------*/
   3          
   4          /***************************************************************
   5          功能:11:32 2008-6-27
   6          作者:SG
   7          时间:2004-03-15
   8          版本:V1.0
   9          ***************************************************************/
  10          
  11          #include "INTRINS.H"
  12          #include "reg52.h"
  13          
  14          #define  WriteDeviceAddress 0xa0 //写驱动地址指令
  15          #define  ReadDeviceAddress 0xa1  //读驱动地址指令
  16          
  17          //sbit AT24C02_SCL = 0xa4;               //*****相当于sbit AT24C02_SCL = P2^4
  18          //sbit AT24C02_SDA = 0xa5;               //*****相当于sbit AT24C02_SDA = P2^5
  19          sbit AT24C02_SCL = P1^5;
  20          sbit AT24C02_SDA = P1^4;
  21          
  22          /*-------------------------------------------------------------
  23          功能:发起始信号
  24          ------------------------------------------------------------*/
  25          void Start_Cond()
  26          {
  27   1       AT24C02_SCL = 0;
  28   1       _nop_();
  29   1       AT24C02_SDA = 1;
  30   1       _nop_();
  31   1       AT24C02_SCL = 1;
  32   1       _nop_();
  33   1       AT24C02_SDA = 0;
  34   1       _nop_();
  35   1      }
  36          
  37          /*-------------------------------------------------------------
  38          功能:发停止信号
  39          ------------------------------------------------------------*/
  40          void Stop_Cond()
  41          {
  42   1       AT24C02_SCL = 0;
  43   1       _nop_();
  44   1       AT24C02_SDA = 0;
  45   1       _nop_();
  46   1       AT24C02_SCL = 1;
  47   1       _nop_();
  48   1       AT24C02_SDA = 1;
  49   1       _nop_();
  50   1      }
  51          
  52          /*-------------------------------------------------------------
  53          功能:发确认信号
  54          ------------------------------------------------------------*/
  55          void Ack()
C51 COMPILER V8.08   WR_EEPROM_AT24C02_IIC                                                 08/17/2008 17:50:19 PAGE 2   

  56          {
  57   1       AT24C02_SCL = 0;
  58   1       _nop_();
  59   1       AT24C02_SDA = 0;
  60   1       AT24C02_SCL = 1;
  61   1       _nop_();
  62   1       AT24C02_SCL = 0;
  63   1       _nop_();
  64   1       AT24C02_SDA = 1;
  65   1      }
  66          
  67          /*-------------------------------------------------------------
  68          功能:发无确认信号
  69          ------------------------------------------------------------*/
  70          void NoAck()
  71          {
  72   1       AT24C02_SCL = 0;
  73   1       _nop_();
  74   1       AT24C02_SDA = 1;
  75   1       _nop_();
  76   1       AT24C02_SCL = 1;
  77   1       _nop_();
  78   1       AT24C02_SCL = 0;
  79   1       _nop_();
  80   1      }
  81          
  82          /*-------------------------------------------------------------
  83          功能:写一个字节数据
  84          ------------------------------------------------------------*/
  85          bit Write8Bit(unsigned char input)
  86          {
  87   1       unsigned char i;
  88   1       for (i=0;i<8;i++)
  89   1       { 
  90   2        AT24C02_SCL = 0;
  91   2        input <<= 1;
  92   2        AT24C02_SDA = CY;                        //*************左移位后,移出的哪一位进入了CY中
  93   2        AT24C02_SCL = 1;
  94   2       
  95   2       }
  96   1       AT24C02_SCL = 0;                          //****以下为"接受确认信号"程序
  97   1       _nop_();
  98   1       AT24C02_SDA = 1;                                       //*****拉高管脚,准备读该管脚电平
  99   1       AT24C02_SCL = 1;
 100   1       _nop_();
 101   1       CY = AT24C02_SDA;                         //读"确认信息",如果返回1则表明写入失败
 102   1       return(CY) ;
 103   1      }
 104          
 105          /*-------------------------------------------------------------
 106          功能:读一个字节数据
 107          ------------------------------------------------------------*/
 108          unsigned char Read8Bit()
 109           {
 110   1       unsigned char temp,rbyte=0;
 111   1       for (temp = 8;temp != 0;temp--)
 112   1       {
 113   2        AT24C02_SCL = 0;
 114   2        _nop_();
 115   2        rbyte = (rbyte << 1) | AT24C02_SDA;                             //*****这样也可以按位并吗?AT24C02_SDA是不是代表着某个字节的最

⌨️ 快捷键说明

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