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

📄 2404.lst

📁 i2c总线的程序设计
💻 LST
字号:
C51 COMPILER V8.02   2404                                                                  11/07/2006 09:12:54 PAGE 1   


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

line level    source

   1          /**************************************************************
   2          **文件功能:24c04的驱动函数                                                                      **
   3          **创建人:xingyuegu                                                                                      **
   4          **创建日期:2006-7-12                                                                            **
   5          **版本:1.0                                                                                                      **
   6          **************************************************************/
   7          #include <reg51.h>                                                                                                                                                                                                                              #include <reg51.h>
   8          #include <intrins.h>
   9          #include "common.h"
  10          
  11          #define nop() _nop_()
  12          
  13          #define  WriteDeviceAddress 0xa0        //写驱动地址指令
  14          #define  ReadDeviceAddress 0xa1         //读驱动地址指令
  15          
  16          sbit AT24C04_SCL=P2^0;
  17          sbit AT24C04_SDA=P2^1;
  18          void delay10ms(void)
  19          {
  20   1              uint i;
  21   1              for(i=0;i<6000;i++);
  22   1      }
  23          
  24          //启动信号
  25          void Start(void)
  26          {
  27   1              AT24C04_SCL=0;
  28   1      
  29   1              AT24C04_SDA=1;
  30   1              nop();
  31   1              nop();
  32   1              nop();
  33   1              nop();
  34   1              nop();
  35   1              AT24C04_SCL=1;
  36   1              nop();  
  37   1      
  38   1              nop();
  39   1              nop();
  40   1              nop();
  41   1              nop();
  42   1      
  43   1              AT24C04_SDA=0;
  44   1              nop();
  45   1              nop();
  46   1              nop();
  47   1              nop();
  48   1              nop();
  49   1              
  50   1      }
  51          //停止信号
  52          void Stop(void)
  53          {       AT24C04_SCL=0;
  54   1              nop();
  55   1              nop();
C51 COMPILER V8.02   2404                                                                  11/07/2006 09:12:54 PAGE 2   

  56   1              nop();
  57   1              nop();
  58   1              nop();
  59   1              nop();
  60   1      
  61   1              AT24C04_SDA=0;
  62   1      
  63   1              AT24C04_SCL=1;
  64   1              nop();
  65   1              nop();  
  66   1              nop();
  67   1              nop();
  68   1              AT24C04_SDA=1;
  69   1              nop();
  70   1              nop();
  71   1              nop();
  72   1              nop();
  73   1              nop();
  74   1              nop();
  75   1      }
  76          //发应答信号
  77          void ack(void)
  78          {
  79   1              AT24C04_SCL=0;
  80   1              nop();
  81   1              nop();
  82   1              AT24C04_SDA=0;
  83   1              AT24C04_SCL=1;
  84   1              nop();
  85   1              nop();
  86   1              
  87   1      }
  88          //发非应答信号
  89          void no_ack(void)
  90          {
  91   1              AT24C04_SCL=0;
  92   1              nop();
  93   1              nop();
  94   1              AT24C04_SDA=1;
  95   1              AT24C04_SCL=1;
  96   1              nop();
  97   1              nop();
  98   1      }
  99          //写字节
 100          bit write8bit(uchar input)
 101          {
 102   1              uchar i;
 103   1              for(i=0;i<8;i++)
 104   1              {
 105   2                      AT24C04_SCL=0;
 106   2                      input=input<<1;
 107   2                      AT24C04_SDA=CY;
 108   2                      nop();
 109   2                      nop();
 110   2                      AT24C04_SCL=1;
 111   2                      nop();
 112   2              } 
 113   1              
 114   1              AT24C04_SCL=0;                          //read ack
 115   1              nop();
 116   1              //AT24C04_SDA=1;
 117   1              nop();
C51 COMPILER V8.02   2404                                                                  11/07/2006 09:12:54 PAGE 3   

 118   1              nop();
 119   1      //      nop(); 
 120   1              AT24C04_SCL=1;
 121   1              nop();
 122   1      
 123   1              CY=AT24C04_SDA;
 124   1              if(CY)
 125   1              return 0;
 126   1              else 
 127   1              return 1;
 128   1              
 129   1              //return(CY);
 130   1      }
 131          //读字节
 132          uchar read8bit(void)
 133          {
 134   1              uchar i,readdata;
 135   1              for(i=0;i<8;i++)
 136   1              {
 137   2                      AT24C04_SCL=0;
 138   2                      nop();
 139   2      
 140   2                      readdata=(readdata<<1)|AT24C04_SDA;
 141   2                      AT24C04_SCL=1;
 142   2                      nop();
 143   2              }
 144   1              return readdata;
 145   1      }
 146          
 147          void write_byte(uchar address,uchar output)
 148          {
 149   1              Start();
 150   1              write8bit(WriteDeviceAddress);
 151   1              write8bit(address);
 152   1              write8bit(output);
 153   1              Stop();
 154   1              delay10ms();
 155   1      }
 156          
 157          uchar random_read(uchar address)
 158          {
 159   1              uchar rddata;
 160   1              Start();
 161   1              write8bit(WriteDeviceAddress);
 162   1              write8bit(address);
 163   1              Start();
 164   1              write8bit(ReadDeviceAddress);
 165   1              rddata=read8bit();
 166   1              no_ack();
 167   1              Stop();
 168   1              delay10ms();
 169   1              return rddata;
 170   1      }
 171          
 172          void write_flash(uchar *content,uchar address,uchar len)
 173          {
 174   1              uchar i;
 175   1              Start();
 176   1              write8bit(WriteDeviceAddress);
 177   1              write8bit(address);
 178   1              for(i=0;i<len;i++)
 179   1              {
C51 COMPILER V8.02   2404                                                                  11/07/2006 09:12:54 PAGE 4   

 180   2                      if(address%16==0)
 181   2                      {
 182   3                              Stop();
 183   3                              delay10ms();
 184   3                              Start();
 185   3                              write8bit(WriteDeviceAddress);
 186   3                              write8bit(address);
 187   3                      }
 188   2                      write8bit(*content);
 189   2                      content++;
 190   2                      address++;
 191   2              }
 192   1              Stop();
 193   1              delay10ms();
 194   1      }
 195          
 196          
 197                                  


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