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

📄 iicbusrom.lst

📁 AT29C02的驱动程序
💻 LST
字号:
C51 COMPILER V8.02   IICBUSROM                                                             01/22/2009 11:09:45 PAGE 1   


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

line level    source

   1          //I2cE2pRom的读写操作
   2          //读写操作之间需要一个(5ms)以上的延时
   3          #include <REG52.H>
   4          #define uchar unsigned char
   5          #define uint unsigned int
   6          
   7          sbit SCL = P3^6;
   8          sbit SDA = P3^7;
   9          
  10          void start()//开始信号
  11          {
  12   1          SDA = 1;
  13   1          SCL = 1;
  14   1          SDA = 0;
  15   1          
  16   1      }
  17          
  18          void stop()//结束信号
  19          {
  20   1          SDA = 0;
  21   1          SCL = 1;
  22   1          SDA = 1;
  23   1      }
  24          
  25          void respond()//应答信号
  26          {
  27   1          uchar t;
  28   1          SCL = 1;
  29   1          while((SDA==1)&&(t<250)) t++;
  30   1          SCL = 0;;
  31   1      }
  32          
  33          void softwareReset()//软复位
  34          {
  35   1          uchar c;
  36   1      
  37   1          start();
  38   1          SDA = 1;
  39   1          for(c=0;c<9;c++)
  40   1          {
  41   2              SCL = 1;
  42   2              SCL = 0;
  43   2          }
  44   1          start();
  45   1          stop();
  46   1      }
  47          
  48          void writeByte(uchar byte)
  49          {
  50   1          uchar c;
  51   1          
  52   1          for(c=0;c<8;c++)
  53   1          {
  54   2              byte <<= 1;//先将dat的MSB左移出到PSW的CY位
  55   2              SCL = 0;
C51 COMPILER V8.02   IICBUSROM                                                             01/22/2009 11:09:45 PAGE 2   

  56   2              SDA = CY;  //将数据送给SDA
  57   2              SCL = 1;
  58   2          }
  59   1          SCL = 0;
  60   1          SDA = 1;//释放
  61   1      }
  62          
  63          uchar readByte()
  64          {
  65   1          uchar byte,temp,c;
  66   1          
  67   1          SCL = 0;
  68   1          for(c=0;c<8;c++)
  69   1          {
  70   2              byte <<= 1;//先将byte的LSB清零,准备接收数据
  71   2              SCL = 1;
  72   2              temp = SDA;
  73   2              byte |= temp;        
  74   2              SCL = 0;
  75   2          }
  76   1          return byte;
  77   1      }
  78          
  79          //在某个E2PROM上的某个地址写一个字节数据;DeviceAdd的LSB为0,
  80          //表示要发送数据,即DeviceAdd为1010xxx0
  81          void writeData(uchar DeviceAdd, WordAdd, ByteData)
  82          {
  83   1          start();             //先在SDA上给一个开始信号
  84   1          writeByte(DeviceAdd);//在SDA上给要写数据的E2PROM的地址,进行设备寻址
  85   1          respond();           //等待特定E2PROM的应答信号
  86   1          writeByte(WordAdd);  //给特定E2PROM送开始写数据的地址
  87   1          respond();           //等待特定E2PROM的应答信号
  88   1          writeByte(ByteData); //把数据写入E2PROM
  89   1          respond();           //等待特定E2PROM的应答信号
  90   1          stop();
  91   1      }
  92          
  93          //在某个E2PROM上的某个地址读一个字节数据;DeviceAdd的LSB为0,
  94          //即DeviceAdd为1010xxx0
  95          uchar readData(uchar DeviceAdd, WordAdd)
  96          {
  97   1          uchar ReadAdd,dat;
  98   1          ReadAdd = DeviceAdd|0x01;//DeviceAdd的LSB改为1,表示要读数据
  99   1          
 100   1          //开始读数据动作
 101   1          start();             //先在SDA上给一个开始信号
 102   1          writeByte(DeviceAdd);//在SDA上给要读数据的E2PROM的地址,进行设备寻址
 103   1          respond();           //等待特定E2PROM的应答信号
 104   1          writeByte(WordAdd);  //给特定E2PROM送要读数据的地址
 105   1          respond();           //等待特定E2PROM的应答信号
 106   1          start();             //再先在SDA上给一个开始信号
 107   1          writeByte(ReadAdd);//再在SDA上给要读数据的E2PROM的地址,其LSB已改为1
 108   1          respond();           //等待特定E2PROM的应答信号
 109   1          dat = readByte();      //读数据
 110   1          stop();
 111   1          return dat;          //返回所读的数据
 112   1      }
 113          
 114          
 115          //开始测试
 116          void delay(uint time)
 117          {
C51 COMPILER V8.02   IICBUSROM                                                             01/22/2009 11:09:45 PAGE 3   

 118   1          uint i,j;
 119   1          for(i=time;i>0;i--)
 120   1              for(j=125;j>0;j--); //在11.0592的晶振下,延时大约1ms
 121   1      }
 122          
 123          void main()
 124          {
 125   1          softwareReset();
 126   1          writeData(0xa0,1,0x99);//在1010000E2PROM的地址1上写入数据0x99
 127   1          delay(10);             //写入数据后延时>5ms,以便E2PROM将数据写入ROM
 128   1          P1 = readData(0xa0,1); //在1010000E2PROM的地址1上读出数据,并赋予P1口,驱动LED显示
 129   1          while(1);
 130   1      }
 131          //测试结束
 132          
 133          
 134          
 135          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    228    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       1
   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 + -