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

📄 i2c.lst

📁 24c04读写程序
💻 LST
字号:
C51 COMPILER V7.06   I2C                                                                   08/31/2008 09:32:13 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE I2C
OBJECT MODULE PLACED IN i2c.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE i2c.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <reg52.h>
   2          #include <intrins.h>
   3          #include <stdio.h>
   4          #include <string.h>
   5          //#define        unsigned char uchar
   6          //#define  unsigned int uint
   7          #define _Nop() _nop_()
   8          
   9          bit     ack;
  10          sbit    WP=P0^3;
  11          sbit    SCL=P0^4;
  12          sbit    SDA=P0^5;
  13          sbit    JK=P0^0;
  14          
  15          
  16          void delay();
  17          void start_i2c();
  18          void stop_i2c();
  19          void write_b(uchar);
  20          char read_b();
  21          void ack_i2c(bit a);
  22          bit mcu_write_b(char sla,char c);
  23          bit mcu_write_str(char sla,char suba,char *s,char no);
  24          bit mcu_read_b(char sla,char *c);
  25          bit mcu_read_str(char sla,char suba,char *s,char no);
  26          
  27          char i2c_write_[10]={0,1,2,03,4,5,6,7,8,9};
  28          char led_dm[10]={0x3f,0x03,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  29          
  30          void main()
  31          {       
  32   1              char i2c_rec[10];
  33   1              char i;
  34   1      //      char *j;
  35   1              WP=0;//器件不进行写保护//
  36   1              JK=1;
  37   1              delay();
  38   1              delay();
  39   1              
  40   1              do
  41   1              {
  42   2                      if(mcu_write_b(0xa0,0x01))
  43   2                      JK=0;
  44   2                      else 
  45   2                      JK=1;
  46   2                      delay();
  47   2                      delay();
  48   2              //      JK=0;
  49   2      
  50   2              
  51   2              /*
  52   2                      if(mcu_write_str(0xa1,0x10,i2c_write_,10))
  53   2                              JK=1;
  54   2                      else
  55   2                              JK=0;
C51 COMPILER V7.06   I2C                                                                   08/31/2008 09:32:13 PAGE 2   

  56   2                              delay();
  57   2      
  58   2                      if(mcu_read_str(0xa0,0x10,i2c_rec,10))
  59   2                              JK=0;
  60   2                      else
  61   2                              JK=1;
  62   2                              delay();
  63   2      
  64   2                      for(i=0;i<10;i++)
  65   2                      {
  66   2                              P2=0x00;
  67   2                              P1=led_dm[i2c_rec[i]];
  68   2                              delay();
  69   2                              delay();
  70   2      
  71   2                      }
  72   2                      */
  73   2              }while(JK);
  74   1      
  75   1      }
*** WARNING C280 IN LINE 32 OF I2C.C: 'i2c_rec': unreferenced local variable
*** WARNING C280 IN LINE 33 OF I2C.C: 'i': unreferenced local variable
  76          
  77          
  78          void start_i2c()//启动信号
  79          {
  80   1              SDA=1;
  81   1              _Nop();
  82   1              SCL=1;
  83   1              _Nop();
  84   1              _Nop();
  85   1              _Nop();
  86   1              _Nop();
  87   1              _Nop();
  88   1              _Nop();
  89   1              SDA=0;
  90   1              _Nop();
  91   1              _Nop();
  92   1              _Nop();
  93   1              _Nop();
  94   1              _Nop();
  95   1              SCL=0;
  96   1              _Nop();
  97   1              _Nop();
  98   1      
  99   1      }
 100          
 101          void stop_i2c()//停止信号
 102          {
 103   1              SDA=0;
 104   1              _Nop();
 105   1              SCL=1;
 106   1              _Nop();
 107   1              _Nop();
 108   1              _Nop();
 109   1              _Nop();
 110   1              _Nop();
 111   1              _Nop();
 112   1              SDA=1;
 113   1              _Nop();
 114   1              _Nop();
 115   1              _Nop();
C51 COMPILER V7.06   I2C                                                                   08/31/2008 09:32:13 PAGE 3   

 116   1              _Nop();
 117   1              _Nop();
 118   1      }
 119          
 120          void write_b(char c)//发送一个字节到EEPROM
 121          {
*** WARNING C235 IN LINE 121 OF I2C.C: parameter 1: different types
 122   1              char bitcnt;
 123   1              for(bitcnt=0;bitcnt<8;bitcnt++)
 124   1              {
 125   2                      if((c<<bitcnt)&0x80)//判断数据位上是"1"还是"0"
 126   2                      SDA=1;
 127   2                      else
 128   2                      SDA=0;
 129   2                      _Nop();
 130   2                      SCL=1;
 131   2                      _Nop();
 132   2                      _Nop();
 133   2                      _Nop();
 134   2                      _Nop();
 135   2                      _Nop();
 136   2                      SCL=0;
 137   2              }
 138   1              _Nop();
 139   1              _Nop();
 140   1              SDA=1;
 141   1              _Nop();
 142   1              _Nop();
 143   1              SCL=1;
 144   1              _Nop();
 145   1              _Nop();
 146   1              _Nop();
 147   1              if(SDA=1)ack=0;//判断EEPROM是否回复应答信号
*** WARNING C276 IN LINE 147 OF I2C.C: constant in condition expression
 148   1              else ack=1;
 149   1              SCL=0;
 150   1              _Nop();
 151   1              _Nop();
 152   1              _Nop();
 153   1      }
 154          
 155          char read_b()//接受EEPROM发送过来的一个字节
 156          {
 157   1              char retc;
 158   1              char bitcnt;
 159   1              retc=0;
 160   1              SDA=1;
 161   1              for(bitcnt=0;bitcnt<8;bitcnt++)
 162   1              {
 163   2                      _Nop();
 164   2                      SCL=0;
 165   2                      _Nop();
 166   2                      _Nop();
 167   2                      _Nop();
 168   2                      _Nop();
 169   2                      _Nop();
 170   2                      SCL=1;
 171   2                      _Nop();
 172   2                      _Nop();
 173   2                      retc=retc<<1;
 174   2                      if(SDA==1)retc=retc+1;
 175   2                      _Nop();
C51 COMPILER V7.06   I2C                                                                   08/31/2008 09:32:13 PAGE 4   

 176   2                      _Nop();
 177   2              }
 178   1              SCL=0;
 179   1              _Nop();
 180   1              _Nop();
 181   1              return(retc);
 182   1      }
 183          
 184          
 185          void ack_i2c(bit a)//发送应答信号或是非应答信号
 186          {
 187   1              if(a==0)SDA=0;
 188   1              else SDA=1;
 189   1              _Nop();
 190   1              _Nop();
 191   1              _Nop();
 192   1              SCL=1;
 193   1              _Nop();
 194   1              _Nop();
 195   1              _Nop();
 196   1              _Nop();
 197   1              _Nop();
 198   1              SCL=0;
 199   1              _Nop();
 200   1              _Nop();
 201   1      
 202   1      }
 203          
 204          
 205          bit mcu_write_b(char sla,char c)//向i2c器件中送入一字节
 206          {
 207   1              start_i2c();
 208   1              write_b(sla);
 209   1              if(ack==0)return(0);
 210   1              write_b(c);
 211   1              if(ack==0)return(0);
 212   1              stop_i2c();
 213   1              return(1);
 214   1      }
 215          
 216          
 217          bit mcu_write_str(char sla,char suba,char *s,char no)//向i2c器件的指定地址中写入no个数据
 218          {
 219   1              char i;
 220   1              start_i2c();
 221   1              write_b(sla);
 222   1              if(ack==0)return(0);
 223   1              write_b(suba);
 224   1              if(ack==0)return(0);
 225   1              for(i=0;i<no;i++)
 226   1              {
 227   2                      write_b(*s);
 228   2                      if(ack==0)return(0);
 229   2                      s++;
 230   2              }
 231   1              stop_i2c();
 232   1              return(1);
 233   1      }
 234          
 235          
 236          bit mcu_read_b(char sla,char *c)//接收一个字节
 237          {
C51 COMPILER V7.06   I2C                                                                   08/31/2008 09:32:13 PAGE 5   

 238   1              start_i2c();
 239   1              write_b(sla+1);
 240   1              if(ack==0)return(0);
 241   1              *c=read_b();
 242   1              ack_i2c(1);
 243   1              stop_i2c();
 244   1              return(1);
 245   1      }
 246          
 247          
 248          bit mcu_read_str(char sla,char suba,char *s,char no)//从器件的指定地址中读取no个数据
 249          {
 250   1              char i;
 251   1              start_i2c();
 252   1              write_b(sla);
 253   1              if(ack==0)return(0);
 254   1              write_b(suba);
 255   1              if(ack==0)return(0);
 256   1              start_i2c();
 257   1              write_b(sla+1);
 258   1              if(ack==0)return(0);
 259   1              for(i=0;i<no-1;i++)
 260   1              {
 261   2                      *s=read_b();
 262   2                      ack_i2c();
*** WARNING C209 IN LINE 262 OF I2C.C: 'ack_i2c': too few actual parameters
 263   2                      s++;
 264   2              }
 265   1              *s=read_b();
 266   1              ack_i2c(1);
 267   1              stop_i2c();
 268   1              return(1);
 269   1      }
 270          
 271          
 272          
 273          
 274          
 275          void delay()
 276          {
 277   1              int i;
 278   1              for(i=10000;i>0;i--)
 279   1              {;}
 280   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    430    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     20      24
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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