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

📄 main.lst

📁 24c02程序
💻 LST
字号:
C51 COMPILER V7.50   MAIN                                                                  08/08/2007 15:38:24 PAGE 1   


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

line level    source

   1          #include <reg52.h>
   2          #include <stdio.h>
   3          #include <absacc.h>
   4          #include <intrins.h>   
   5          #define  uchar unsigned   char
   6          #define  uint  unsigned   int  
   7          //************************变量声明***************************   
   8            //读写控制命令   
   9            const   uchar   WR24C02   =   0xA0;  //EEPROM地址+写命令   
  10            const   uchar   RD24C02   =   0xA1;  //EEPROM地址+读命令   
  11            //I/O口定义   
  12            sbit     I2C_SCL   =   P1^1;   
  13            sbit     I2C_SDA   =   P1^0;   
  14            //用户变量声明   
  15            bit   ErrorBit;                      //读写错误标志       1错误     0   正确   
  16            uchar   idata   ErrorCode;           //错误码   
  17            //************************函数声明***************************   
  18            void     Start(void);   
  19            void     Stop(void);   
  20            void     Ack(void);   
  21            void     NoAck(void);   
  22            void     TestAck(void);   
  23            void     Write_I2c(uchar   date);   
  24            uchar    Read_I2c(void);   
  25            void     DelayMs(uchar   time);   
  26            void     Write_Date(uchar   StartAddress,uchar   *date,uchar   bytes);   
  27            void     Read_Date(uchar   StartAddress,uchar   *date,uchar   bytes);   
  28            #endif   
*** WARNING C312 IN LINE 28 OF main.c: misplaced endif control
  29          /*...................................................*/
  30            void   Start(void)   
  31            {   
  32   1                I2C_SDA   =   1;           //起始条件的数据信号   
  33   1                _nop_();   
  34   1                I2C_SCL   =   1;           //起始条件时钟信号   
  35   1                _nop_();                   //信号建立时间>4.7us   
  36   1                _nop_();   
  37   1                _nop_();   
  38   1                _nop_();   
  39   1                _nop_();   
  40   1                I2C_SDA   =   0;           //起始信号   
  41   1                _nop_();   
  42   1                _nop_();   
  43   1                _nop_();   
  44   1                _nop_();                   
  45   1                _nop_();   
  46   1                I2C_SCL   =   0;           //钳住I2C总线,   准备发送或者接受数据   
  47   1                _nop_();   
  48   1                _nop_();   
  49   1        }   
  50            /***************************************   
  51            *函数名称:       void   Stop(void)   
  52            *功能描述:       读写结束   
  53            *输入:               无   
  54            *输出:               无   
C51 COMPILER V7.50   MAIN                                                                  08/08/2007 15:38:24 PAGE 2   

  55            *全局变量:       I2C_SCL,I2C_SDA   
  56            *调用模块:       无   
  57              
  58            ****************************************/   
  59            void   Stop(void)   
  60            {   
  61   1                I2C_SDA   =   0;             //结束条件的数据信号   
  62   1                _nop_();   
  63   1                I2C_SCL   =   1;             //结束条件的时钟信号   
  64   1                _nop_();   
  65   1                _nop_();   
  66   1                _nop_();   
  67   1                _nop_();                   
  68   1                _nop_();   
  69   1                I2C_SDA   =   1;             //结束信号   
  70   1                _nop_();   
  71   1                _nop_();   
  72   1                _nop_();   
  73   1                _nop_();                   
  74   1        }   
  75            /***************************************   
  76            *函数名称:       void   Ack(void)   
  77            *功能描述:       正确应答,读一个字节后必须应答   
  78            *输入:               无   
  79            *输出:               无   
  80            *全局变量:       I2C_SCL,I2C_SDA   
  81            *调用模块:       无   
  82              
  83            ****************************************/   
  84            void   Ack(void)   
  85            {   
  86   1                I2C_SDA   =   0;   
  87   1                _nop_();   
  88   1                _nop_();           
  89   1                I2C_SCL   =   1;   
  90   1                _nop_();   
  91   1                _nop_();   
  92   1                _nop_();   
  93   1                _nop_();   
  94   1                _nop_();           
  95   1                I2C_SCL   =   0;   
  96   1                _nop_();   
  97   1                _nop_();   
  98   1        }   
  99            /***************************************   
 100            *函数名称:       void   NoAck(void)   
 101            *功能描述:       无应答   
 102            *输入:               无   
 103            *输出:               无   
 104            *全局变量:       I2C_SCL,I2C_SDA   
 105            *调用模块:       无   
 106              
 107            ****************************************/   
 108            void   NoAck(void)   
 109            {   
 110   1                I2C_SDA   =   1;   
 111   1                _nop_();   
 112   1                _nop_();   
 113   1                I2C_SCL   =   1;   
 114   1                _nop_();   
 115   1                _nop_();   
 116   1                _nop_();   
C51 COMPILER V7.50   MAIN                                                                  08/08/2007 15:38:24 PAGE 3   

 117   1                _nop_();   
 118   1                _nop_();   
 119   1                I2C_SCL   =   0;   
 120   1                _nop_();   
 121   1                _nop_();   
 122   1        }   
 123            /***************************************   
 124            *函数名称:       void   TestAck(void)   
 125            *功能描述:       读写错误测试,写一个字节应该测试应答信号   
 126            *输入:           无   
 127            *输出:           返回一个位   
 128            *全局变量:       I2C_SCL,I2C_SDA   
 129            *调用模块:       无   
 130              
 131            ****************************************/   
 132            void   TestAck(void)   
 133            {         
 134   1                I2C_SDA   =   1;   
 135   1                _nop_();   
 136   1                _nop_();   
 137   1                I2C_SCL   =   1;   
 138   1                _nop_();   
 139   1                _nop_();   
 140   1                _nop_();   
 141   1                ErrorBit=I2C_SDA;   
 142   1                I2C_SCL=0;   
 143   1                _nop_();   
 144   1                _nop_();           
 145   1        }   
 146            /***************************************   
 147            *函数名称:       void   Write_I2c(uchar   date)   
 148            *功能描述:       写I2C   
 149            *输入:           待送数据,高字节先送   
 150            *输出:           无   
 151            *全局变量:       I2C_SCL,I2C_SDA   
 152            *调用模块:       无   
 153              
 154            ****************************************/   
 155            void   Write_I2c(uchar   date)   
 156            {   
 157   1                uchar   i;   
 158   1                for(i=0;i<8;i++)   
 159   1                {   
 160   2                        I2C_SDA=date&0x80;                 //送数据到数据线上   
 161   2                        date<<=1;   
 162   2                        _nop_();                   
 163   2                        I2C_SCL   =   1;                   //置时钟信号为高电平,使数据有效   
 164   2                        _nop_();   
 165   2                        _nop_();   
 166   2                        _nop_();   
 167   2                        _nop_();   
 168   2                        _nop_();           
 169   2                        I2C_SCL   =   0;   
 170   2                        _nop_();   
 171   2                        _nop_();                   
 172   2                          
 173   2                }   
 174   1        }   
 175            /***************************************   
 176            *函数名称:       uchar   Read_I2c(void)   
 177            *功能描述:       读I2C   
 178            *输入:           无   
C51 COMPILER V7.50   MAIN                                                                  08/08/2007 15:38:24 PAGE 4   

 179            *输出:           返回一个字节的数据,高字节在前   
 180            *全局变量:       I2C_SCL,I2C_SDA   
 181            *调用模块:       无   
 182              
 183            ****************************************/   
 184            uchar   Read_I2c(void)   
 185            {   
 186   1                uchar   i;   
 187   1                uchar   byte=0;   
 188   1                for(i=0;i<8;i++)   
 189   1                {   
 190   2                        I2C_SCL=0;                    //置时钟为低电平,准备接受数据   
 191   2                        _nop_();   
 192   2                        _nop_();   
 193   2                        _nop_();   
 194   2                        _nop_();   
 195   2                        _nop_();   
 196   2                        I2C_SCL   =   1;              //置时钟为高电平,使数据线数据有效   
 197   2                        _nop_();   
 198   2                        _nop_();   
 199   2                        byte <<=1;   
 200   2                        byte|=I2C_SDA;   
 201   2                        _nop_();   
 202   2                        _nop_();   
 203   2                        I2C_SCL   =   0;   
 204   2                }   
 205   1                return(byte);   
 206   1        }   
 207            /***************************************   
 208            *函数名称:       void   DelayMs(uchar   time)   
 209            *功能描述:       延时   
 210            *输入:           延时时间   
 211            *输出:           无   
 212            *全局变量:       无   
 213            *调用模块:       无   
 214              
 215            ****************************************/   
 216            void   DelayMs(uchar   time)   
 217            {   
 218   1              uchar   i;   
 219   1              do   
 220   1              {   
 221   2                for(i=0;i<125;i++);     //*延时 8us x 125 = 1ms   
 222   2              }   
 223   1              while(time--);   
 224   1        }   
 225            /***************************************   
 226            *函数名称:       void     Write_Date(uchar   StartAddress,uchar   *date,uchar   bytes)   
 227            *功能描述:       写数据   
 228            *输入:           数据开始地址,保存数据指针,数据字节数   
 229            *输出:           无   
 230            *全局变量:       无   
 231            *调用模块:       Start(),Write_I2c(),Stop(),TestAck()   
 232            *注意事项:       调用之前,需要定义一个数组,用来存待发送的数据   
 233            ****************************************/   
 234            void   Write_Date(uchar   StartAddress,uchar   *date,uchar   bytes)   
 235            {   
 236   1                uchar i=0;   
 237   1                Start();   
 238   1                Write_I2c(WR24C02);   
 239   1                TestAck();   
 240   1                Write_I2c(StartAddress);   
C51 COMPILER V7.50   MAIN                                                                  08/08/2007 15:38:24 PAGE 5   

 241   1                TestAck();   
 242   1                for(i=0;i<bytes;i++)   
 243   1                {   
 244   2                    Write_I2c(*date);   
 245   2                    TestAck();   
 246   2                    date++;   
 247   2                }   
 248   1                Stop();   
 249   1                DelayMs(20);   
 250   1        }   
 251            /***************************************   
 252            *函数名称:       void     Read_Date(uchar   StartAddress,uchar   *date,uchar   bytes)   
 253            *功能描述:       读数据   
 254            *输入:               数据开始地址,读取数据指针,数据字节数   
 255            *输出:               无   
 256            *全局变量:       无   
 257            *调用模块:       Start(),Write_I2c(),Read_I2c(),Ack(),NoAck(),Stop(),TestAck()   
 258            *注意事项:       调用之前,需要定义一个数组,用来存读取的数据   
 259            ****************************************/   
 260            void   Read_Date(uchar   StartAddress,uchar   *date,uchar   bytes)   
 261            {   
 262   1                uchar   i;   
 263   1                Start();   
 264   1                Write_I2c(WR24C02);   
 265   1                TestAck();   
 266   1                Write_I2c(StartAddress);   
 267   1                TestAck();   
 268   1                Write_I2c(RD24C02);   
 269   1                TestAck();   
 270   1                for   (i=0;i<bytes;i++)   
 271   1                {   
 272   2                   *date=Read_I2c();   
 273   2                   Ack();   
 274   2                   date++;   
 275   2                }   
 276   1                NoAck();   
 277   1                Stop();   
 278   1                DelayMs(10);   
 279   1        }   


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    271    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      2      10
   IDATA SIZE       =      1    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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