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

📄 24c02读写成功.lst

📁 采用DS12C887做时钟
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   24C02读写成功                                                         06/01/2007 22:49:53 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE 24C02读写成功
OBJECT MODULE PLACED IN 24c02读写成功.OBJ
COMPILER INVOKED BY: G:\8.02\C51\BIN\C51.EXE 24c02读写成功.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1           #include <AT89X52.H> 
   2           #include <INTRINS.h>
   3           #ifndef   I2C_H   
   4            #define   I2C_H   
   5            typedef   unsigned   char   uchar;     //重新定义数据类型   
   6            typedef   unsigned   int     uint;       
   7            const    uchar   WR24C02   =   0xa0;     //读写控制命令    //EEPROM地址+写命令   
   8            const    uchar   RD24C02   =   0xA1;                       //EEPROM地址+读命令      
   9            sbit     I2C_SCL   =   P2^4;    //I/O口定义
  10            sbit     I2C_SDA   =   P2^5;
  11            bit      ErrorBit;     //用户变量声明      //读写错误标志       1错误     0   正确   
  12            uchar    idata   ErrorCode;           //错误码    
  13            uchar    date_txd[18]={1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8};  //发送数据存放数组
  14            uchar    date_rxd[18]={0};        //接收数据存放数组 
  15            uchar    da=0;                                                                  
  16            //************************函数声明***************************  
  17            void     Start(void);   
  18            void     Stop(void);   
  19            void     Ack(void);   
  20            void     NoAck(void);   
  21            void     TestAck(void);   
  22            void     Write_I2c(uchar   date);   
  23            uchar    Read_I2c(void);   
  24            void     DelayMs(uchar   time);   
  25            void     Write_Date(uchar   StartAddress,uchar   *date,uchar   bytes);   
  26            void     Read_Date(uchar   StartAddress,uchar   *date,uchar   bytes);   
  27            #endif   
  28           unsigned char code Tab[]={0xff,0Xfd,0xff,0xfe,0xff,0xf7,0xff,0xfb,0xff,0xdf,0xff,0xef,0xff,0x7f,0xff,0xbf
             -,
  29                                     0Xfd,0xff,0xfe,0xff,0xf7,0xff,0xfb,0xff,0xdf,0xff,0xef,0xff,0x7f,0xff,0xbf,0xff
             -};
  30           unsigned char code codedisplay[]={0xFF,0xFF,0xFF,0xE7,0xDB,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xDB,0xE7,0
             -xFF,0xFF,/*"0",0*/
  31                                             0xFF,0xFF,0xFF,0xEF,0x8F,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0x83,0
             -xFF,0xFF,/*"1",1*/
  32                                             0xFF,0xFF,0xFF,0xC3,0xBD,0xBD,0xBD,0xFB,0xFB,0xF7,0xEF,0xDF,0xBD,0x81,0
             -xFF,0xFF,/*"2",2*/
  33                                                                             0xFF,0xFF,0xFF,0xC3,0xBD,0xBD,0xFB,0xE7,0xFB,0xFD,0xFD,0xBD,0xBB,0xC7,0xFF,0xFF,/*"3",3*/
  34                                             0xFF,0xFF,0xFF,0xFB,0xF3,0xEB,0xDB,0xDB,0xBB,0xBB,0x81,0xFB,0xFB,0xE1,0
             -xFF,0xFF,/*"4",4*/
  35                                             0xFF,0xFF,0xFF,0x81,0xBF,0xBF,0xBF,0xA7,0x9B,0xFD,0xFD,0xBD,0xBB,0xC7,0
             -xFF,0xFF,/*"5",5*/
  36                                                                             0xFF,0xFF,0xFF,0xE3,0xDB,0xBF,0xBF,0xA7,0x9B,0xBD,0xBD,0xBD,0xDB,0xE7,0xFF,0xFF,/*"6",6*/
  37                                                                             0xFF,0xFF,0xFF,0x81,0xBB,0xBB,0xF7,0xF7,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xFF,0xFF,/*"7",7*/
  38                                                                             0xFF,0xFF,0xFF,0xC3,0xBD,0xBD,0xBD,0xDB,0xE7,0xDB,0xBD,0xBD,0xBD,0xC3,0xFF,0xFF,/*"8",8*/
  39                                                                             0xFF,0xFF,0xFF,0xE7,0xDB,0xBD,0xBD,0xBD,0xD9,0xE5,0xFD,0xFD,0xDB,0xC7,0xFF,0xFF};/*"9",9*/
  40          
  41          
  42          
  43           unsigned char m; 
  44           unsigned int result,count=0;
  45           void   Start(void)   
  46            {       I2C_SDA   =   1;           //起始条件的数据信号   
  47   1                _nop_();   
  48   1                I2C_SCL   =   1;           //起始条件时钟信号   
C51 COMPILER V8.02   24C02读写成功                                                         06/01/2007 22:49:53 PAGE 2   

  49   1                _nop_();                   //信号建立时间>4.7us   
  50   1                _nop_();   
  51   1                _nop_();   
  52   1                _nop_();   
  53   1                _nop_();   
  54   1                I2C_SDA   =   0;           //起始信号   
  55   1                _nop_();   
  56   1                _nop_();   
  57   1                _nop_();   
  58   1                _nop_();                   
  59   1                _nop_();   
  60   1                I2C_SCL   =   0;           //钳住I2C总线,   准备发送或者接受数据   
  61   1                _nop_();   
  62   1                _nop_();   
  63   1        }   
  64            void   Stop(void)   
  65            {      I2C_SDA   =   0;             //结束条件的数据信号   
  66   1                _nop_();   
  67   1                I2C_SCL   =   1;             //结束条件的时钟信号   
  68   1                _nop_();   
  69   1                _nop_();   
  70   1                _nop_();   
  71   1                _nop_();                   
  72   1                _nop_();   
  73   1                I2C_SDA   =   1;             //结束信号   
  74   1                _nop_();   
  75   1                _nop_();   
  76   1                _nop_();   
  77   1                _nop_();                   
  78   1        }   
  79            void   Ack(void)   
  80            {      I2C_SDA   =   0;   
  81   1                _nop_();   
  82   1                _nop_();           
  83   1                I2C_SCL   =   1;   
  84   1                _nop_();   
  85   1                _nop_();   
  86   1                _nop_();   
  87   1                _nop_();   
  88   1                _nop_();           
  89   1                I2C_SCL   =   0;   
  90   1                _nop_();   
  91   1                _nop_(); 
  92   1                        I2C_SDA   =  1;  
  93   1        }   
  94            void   NoAck(void)   
  95            {       I2C_SDA   =   1;   
  96   1                _nop_();   
  97   1                _nop_();   
  98   1                I2C_SCL   =   1;   
  99   1                _nop_();   
 100   1                _nop_();   
 101   1                _nop_();   
 102   1                _nop_();   
 103   1                _nop_();   
 104   1                I2C_SCL   =   0;   
 105   1                _nop_();   
 106   1                _nop_();   
 107   1        }   
 108            void   TestAck(void)   
 109            {        I2C_SDA   =   1;   
 110   1                _nop_();   
C51 COMPILER V8.02   24C02读写成功                                                         06/01/2007 22:49:53 PAGE 3   

 111   1                _nop_();   
 112   1                I2C_SCL   =   1;   
 113   1                _nop_();   
 114   1                _nop_();   
 115   1                _nop_();   
 116   1                ErrorBit   =   I2C_SDA; 
 117   1                I2C_SCL   =   0;   
 118   1                _nop_();   
 119   1                _nop_();           
 120   1        }   
 121            void   Write_I2c(uchar   date)   
 122            {       uchar   i; 
 123   1                for(i=0;i<8;i++)   
 124   1                {   
 125   2                        I2C_SDA=date&0x80;                 //送数据到数据线上   
 126   2                        date<<=1;   
 127   2                        _nop_();                   
 128   2                        I2C_SCL=1;                                 //置时钟信号为高电平,使数据有效   
 129   2                        _nop_();   
 130   2                        _nop_();   
 131   2                        _nop_();   
 132   2                        _nop_();   
 133   2                        _nop_();           
 134   2                        I2C_SCL=0;   
 135   2                        _nop_(); 
 136   2                        _nop_();                   
 137   2                          
 138   2                }   
 139   1        }   
 140            uchar   Read_I2c(void)   
 141            {      uchar   i;   
 142   1                uchar   byte   =   0;   
 143   1                for(i   =   0;   i   <   8;   i++)   
 144   1                {      I2C_SCL   =   0;                       //置时钟为低电平,准备接受数据   
 145   2                        _nop_();   
 146   2                        _nop_();   
 147   2                        _nop_();   
 148   2                        _nop_();   
 149   2                        _nop_();   
 150   2                        I2C_SCL   =   1;                     //置时钟为高电平,使数据线数据有效   
 151   2                        _nop_();   
 152   2                        _nop_();   
 153   2                        byte   <<=   1;   
 154   2                        byte   |=   I2C_SDA;  
 155   2                       _nop_();   
 156   2                        _nop_();   
 157   2                        I2C_SCL   =   0;   
 158   2                }   
 159   1                return(byte);   
 160   1        }   
 161            void   DelayMs(uchar   time)   
 162            {     uchar   i;   
 163   1              do   
 164   1              {  for(i   =   0;   i   <   125   ;   i++);       //*延时   8us   x   125   =   1ms   
 165   2              }   
 166   1              while   (time--);       
 167   1        }   
 168            void   Write_Date(uchar   StartAddress,uchar   *date,uchar   bytes)   
 169            {       uchar   i   =   0; 
 170   1                Start();   
 171   1                Write_I2c(WR24C02);   
 172   1                TestAck();  
C51 COMPILER V8.02   24C02读写成功                                                         06/01/2007 22:49:53 PAGE 4   

 173   1                        Write_I2c(StartAddress);  
 174   1                TestAck();
 175   1                         for(i   =   0;i   <   bytes;   i++)   
 176   1                {   
 177   2                   Write_I2c(*date);   
 178   2                   TestAck(); 
 179   2                           date++;   
 180   2                }   

⌨️ 快捷键说明

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