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

📄 24c16.lst

📁 关于单片机开发的一个实例
💻 LST
字号:
C51 COMPILER V8.06   24C16                                                                 03/15/2008 14:51:26 PAGE 1   


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

line level    source

   1                 #include <main.h>
   2                     #include <REG52.H>                     
   3          
   4          
   5                 //通道0  温度 TEMPERATURE
   6                     //记录存储标志存储在第0页第一个字节  无记录时为0xAA 有记录时为0x55
   7                     //数据存储在第0页   低位第二字节为温度下限 高位第三字节为温度上限
   8           
   9          
  10                 //通道1  压力 PREASURE
  11                     //记录存储标志存储在第1页 第一个字节  无记录时为0xAA 有记录时为0x55
  12                     //数据存储在第1页   低位第二字节为压力下限 高位第三字节为压力上限 
  13          
  14          
  15          
  16                 //通道2  流量 FLUX
  17                     //记录存储标志存储在第2页 第一个字节  无记录时为0xAA 有记录时为0x55
  18                     //数据存储在第2页   低位第二字节为流量下限 高位第三字节为流量上限 
  19           
  20                     
  21                     //8页×256字节=16k bit
  22          
  23                     #define WRITE 0xA0   //定义24c16的器件地址和方向位W
  24                 #define READ  0xA1   //定义24c16的器件地址和方向位R
  25                  
  26                      //单片机与AT24c16之间的引脚定义
  27          
  28                  sbit WP=P2^1;
  29                          sbit SCL=P2^2;
  30                          sbit SDA=P2^3;
  31          
  32                          //延时子程序 延时14us
  33          
  34                          void d14us()
  35                    {
  36   1                   uchar i;
  37   1                      for(i=0;i<5;i++);
  38   1      
  39   1                              }
  40          
  41          
  42                  //开始位
  43          
  44                  void start_bit(void)
  45                  {
  46   1                SCL=1;d14us();
  47   1                SDA=1;d14us();
  48   1                SDA=0;d14us();
  49   1                SCL=0;d14us();
  50   1              }
  51          
  52                          //停止位
  53          
  54                  void stop_bit(void)
  55                  {
C51 COMPILER V8.06   24C16                                                                 03/15/2008 14:51:26 PAGE 2   

  56   1                SDA=0;d14us();
  57   1                SCL=1;d14us();
  58   1                SDA=1;d14us();
  59   1              }
  60          
  61                          //主答函数              在接收数据时用
  62          
  63                  void mast_ack(void)
  64                   {
  65   1                 SCL=0;d14us();
  66   1                 SDA=0;d14us();
  67   1                 SCL=1;d14us();
  68   1                 SCL=0;d14us();
  69   1                 SDA=1;d14us();
  70   1               }
  71          
  72                          //从应答函数    在发送数据时用
  73          
  74                  void ack(void)
  75                  {
  76   1                 SDA=1;               //输出口置1 等待SDA上 24c16发出的应答信号
  77   1                 SCL=0;d14us();
  78   1                 SCL=1;d14us();
  79   1                 while(SDA){;}
  80   1                 SCL=0;d14us();
  81   1              }
  82                
  83                  //无需应答位,在读程序中用到 (最后一个数据时)
  84                          //主器件(即cpu)在接收到最后一个字节后不发应答信号
  85                  void no_ack(void)
  86                  {
  87   1                SDA=1;d14us();
  88   1                SCL=1;d14us();
  89   1                SCL=0;d14us();
  90   1              }
  91          
  92                //写一个字节(8位)数据            把一次写拆分成多次8位数据发送
  93          
  94                  write_8bit(uchar ch)
  95                  {
  96   1                uchar i=8;
  97   1                SCL=0;d14us();
  98   1                while(i--)
  99   1                 {
 100   2                           SDA=(bit)(ch&0x01);d14us();                 //强制类型转换
 101   2                   ch<<=1;
 102   2                   SCL=1;d14us();
 103   2                   SCL=0;d14us();
 104   2                  }
 105   1              }
 106          
 107                          //读24c16指定地址数据(任意地址的字节读)
 108                          //参数:address   长整型 11位二进制
 109                          #pragma disable     //避免与串口通讯等中断冲突
 110                  uchar read24c16(uint address)           //长整型 11位二进制
 111                  {
 112   1                uchar data rdata;       //读数据存储单元
 113   1                        uchar data SlvAdrHigh,SlvAdrLow; //地址的高八位 低八位单元
 114   1                uchar i=8;
 115   1      
 116   1      
 117   1                        SlvAdrHigh=((address&0x0700)>>7)|WRITE;
C51 COMPILER V8.06   24C16                                                                 03/15/2008 14:51:26 PAGE 3   

 118   1                SlvAdrLow=(address&0xFF);
 119   1                start_bit();
 120   1                write_8bit(SlvAdrHigh);
 121   1                ack();
 122   1                write_8bit(SlvAdrLow);
 123   1                ack();//伪写
 124   1                start_bit();
 125   1                write_8bit(SlvAdrHigh|0x01);
 126   1                ack();
 127   1                while(i--)
 128   1                 {
 129   2                   rdata<<=1;
 130   2                   SCL=0;d14us(); SCL=1;
 131   2                   if(SDA) rdata|=0x01;
 132   2                  }
 133   1                no_ack();
 134   1                stop_bit();
 135   1      
 136   1                return rdata;
 137   1              }
 138          
 139                 //写数据到24c16的指定地址(字节写)
 140                     //源数据:ddata   目的地址:   address
 141                          #pragma disable   //避免与串口通讯等中断冲突
 142                  void write24c16(uint address,uchar ddata)
 143                  {
 144   1                         
 145   1                         uchar data SlvAdrHigh,SlvAdrLow; //地址的高八位 低八位单元
 146   1      
 147   1                         SlvAdrHigh=((address&0x0700)>>7)|WRITE;
 148   1                 SlvAdrLow=(address&0xFF);
 149   1                 start_bit();
 150   1                 write_8bit(SlvAdrHigh);               
 151   1                 ack();
 152   1                 write_8bit(SlvAdrLow);
 153   1                 ack();
 154   1                 write_8bit(ddata);
 155   1                 ack();
 156   1                 stop_bit();
 157   1      
 158   1               }
 159          
 160                  //页面写函数,firstw_ad为需写入数据存储单元的首地址(11位),
 161                  //                 firstr_ad为被写入数据所在首地址
 162                  //                 counter为写入数据字节数         <=16个字节
 163          
 164                  void page_wr(uint firstw_ad,uint counter,uchar firstr_ad)
 165                  {
 166   1                        
 167   1                 uchar data *ufirstr_ad;
 168   1                         uchar data SlvAdrHigh,SlvAdrLow; //地址的高八位 低八位单元
 169   1      
 170   1                         SlvAdrHigh=((firstw_ad&0x0700)>>7)|WRITE;
 171   1                 SlvAdrLow=(firstw_ad&0xFF);
 172   1      
 173   1                 ufirstr_ad=firstr_ad;                  //把cpu中地址赋给指针
*** WARNING C289 IN LINE 173 OF 24C16.C: '=': converting non-pointer to pointer
 174   1                 start_bit();
 175   1                 write_8bit(SlvAdrHigh);              //1010 0010
 176   1                 ack();
 177   1                         write_8bit(SlvAdrLow);
 178   1                 ack();
C51 COMPILER V8.06   24C16                                                                 03/15/2008 14:51:26 PAGE 4   

 179   1                 while(counter--)
 180   1                  {
 181   2                    write_8bit(*ufirstr_ad);
 182   2                    ufirstr_ad++;
 183   2                    ack();
 184   2                   }
 185   1                stop_bit();
 186   1               }
 187          
 188                          //页面读函数,firstrd_ad为所读字节首地址,count为读字节数
 189                          //                   *ufirstwr_ad为读出数据存储首地址指针  firstwr_ad为被读出数据单元所在首地址
 190          
 191                  void page_rd(uint firstrd_ad,uint count,uchar *firstwr_ad)
 192                  {
 193   1                  uchar j=8;
 194   1                  uchar data *ufirstwr_ad;
 195   1                  uchar data SlvAdrHigh,SlvAdrLow; //地址的高八位 低八位单元
 196   1      
 197   1                         SlvAdrHigh=((firstrd_ad&0x0700)>>7)|WRITE;
 198   1                 SlvAdrLow=(firstrd_ad&0xFF);
 199   1      
 200   1                  ufirstwr_ad=firstwr_ad;
 201   1                  start_bit();
 202   1                  write_8bit(SlvAdrHigh);
 203   1                  ack();
 204   1                  write_8bit(SlvAdrLow);
 205   1                  ack();
 206   1                  start_bit();
 207   1                  write_8bit(SlvAdrHigh|0x01);
 208   1                  ack();
 209   1                  while(count--)
 210   1                   {
 211   2                     uchar i=8;
 212   2                     while(i--)
 213   2                      {
 214   3                        (*ufirstwr_ad)<<=1;
 215   3                        SCL=0;d14us();d14us();SCL=1;
 216   3                        if(SDA) (*ufirstwr_ad)|=0x01;
 217   3                        }
 218   2                    ufirstwr_ad++;
 219   2                    mast_ack();
 220   2                    }
 221   1                 while(j--)   //不需要应答的最后一位数据
 222   1                   {
 223   2                     (*ufirstwr_ad)<<=1;
 224   2                     SCL=0;d14us();d14us();SCL=1;
 225   2                     if(SDA) (*ufirstwr_ad)|=0x01;
 226   2                     }
 227   1                 no_ack();
 228   1                 stop_bit();
 229   1                }
 230          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    530    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      13
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
C51 COMPILER V8.06   24C16                                                                 03/15/2008 14:51:26 PAGE 5   

END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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