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

📄 serial_kuozhan_c.lst

📁 电子开发网培训用的51单片机内部培训代码
💻 LST
字号:
C51 COMPILER V7.06   SERIAL_KUOZHAN_C                                                      05/14/2006 16:38:49 PAGE 1   


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

stmt level    source

   1          //***************************************************
   2          //实现功能:实现单片机模拟IIC总线对24cxx的读写
   3          //目标板:
   4          //***************************************************
   5          #define uchar unsigned char
   6          #define uint unsigned int
   7          #define device_addr 0xa0
   8          #include   <reg51.h>  
   9          
  10          sbit scl=P1^2;  //24c02 SCL
  11          sbit sda=P1^1;  //24c02 SDA
  12          sbit P16=P1^6;
  13          sbit P15=P1^5;
  14          sbit P14=P1^4;
  15          sbit P13=P1^3;
  16          uchar temp_write[]={2,3,4};
  17          uchar temp_read[3];
  18          
  19          uchar read_byte(uchar address);  //从24c02的地址address中读取一个字节数据
  20          void  write_byte(uchar address,uchar info);  //向24c02的address地址中写入一字节数据info
  21          void write_n_byte(uchar address,uchar w_num,uchar *p);
  22          void read_n_byte(uchar address,uchar r_num,uchar *p);
  23          
  24          void start(void);
  25          void stop(void);
  26          void send(unsigned char send_data);
  27          
  28          
  29          void IIC_send(uchar temp);
  30          uchar IIC_read(void);
  31          void wait_ack(void);
  32          
  33          //******************主函数***********************
  34          //描    述:实现单片机模拟IIC总线对24cxx的读写
  35          //入口参数:无
  36          //返回参数:无
  37          //设    计:ycj
  38          //最后修改:时间(2006.5.4)  修改人(ycj)
  39          //***********************************************
  40          int main(void)
  41          {unsigned char i;
  42   1      //*******************测试写一个字节***************
  43   1      //对24cxx的01h地址写一个数据08h
  44   1       write_byte(1,8);
  45   1       i=read_byte(1);
  46   1      //读24cxx的01h地址并验证是否是刚才写进去的08h
  47   1       if(i==8)
  48   1              P16=0;//是,点亮P1.6脚的发光二极管
  49   1      //*******************测试写n个字节***************
  50   1      //从24cxx的地址02h开始连续写3个数据,分别是02h , 03h , 04h
  51   1       write_n_byte(2,3,temp_write);
  52   1       read_n_byte(2,3,temp_read);
  53   1      //读24cxx的01h地址并验证是否是刚才写进去的08h
  54   1       if(temp_read[0]==2)
  55   1              P15=0;//是,点亮P1.6脚的发光二极管
C51 COMPILER V7.06   SERIAL_KUOZHAN_C                                                      05/14/2006 16:38:49 PAGE 2   

  56   1       if(temp_read[1]==3)
  57   1              P14=0;//是,点亮P1.6脚的发光二极管
  58   1       if(temp_read[2]==4)
  59   1              P13=0;//是,点亮P1.6脚的发光二极管
  60   1       while(1);//检验完成;
  61   1      }
  62          //*******************对24cxx读一个字节***********************
  63          //描    述:实现单片机模拟IIC总线对24cxx的读一个字节
  64          //入口参数:uchar address : 要读的地址
  65          //返回参数:uchar i : 返回读到的数据
  66          //设    计:ycj
  67          //最后修改:时间(2006.5.4)  修改人(ycj)
  68          //***********************************************************
  69          uchar read_byte(uchar address)
  70          {
  71   1         uchar i;
  72   1         start(); 
  73   1         IIC_send(device_addr);
  74   1         wait_ack();
  75   1       
  76   1         IIC_send(address);
  77   1         wait_ack(); 
  78   1      
  79   1         start();
  80   1         IIC_send(device_addr+1); 
  81   1         wait_ack();
  82   1      
  83   1         i=IIC_read(); 
  84   1         stop();
  85   1         return(i);
  86   1      }
  87          //*******************对24cxx读n个字节***********************
  88          //描    述:实现单片机模拟IIC总线对24cxx的读n个字节
  89          //入口参数:uchar address : 要读的地址
  90          //         uchar r_num : 要读的数量
  91          //         uchar *p : 读出来存放的首地址
  92          //返回参数:无
  93          //设    计:ycj
  94          //最后修改:时间(2006.5.4)  修改人(ycj)
  95          //***********************************************************
  96          void read_n_byte(uchar address,uchar r_num,uchar *p)
  97          {uchar i;
  98   1         start(); 
  99   1         IIC_send(device_addr);
 100   1         wait_ack();
 101   1       
 102   1         IIC_send(address);
 103   1         wait_ack(); 
 104   1         for(i=0;i<r_num;i++)
 105   1         {
 106   2           start();
 107   2           IIC_send(device_addr+1); 
 108   2           wait_ack();
 109   2           *p=IIC_read();
 110   2               p++;
 111   2              } 
 112   1         stop();
 113   1      }
 114          //*******************对24cxx写n个字节***********************
 115          //描    述:实现单片机模拟IIC总线对24cxx的写n个字节
 116          //入口参数:uchar address : 要写入的开始地址
 117          //         uchar w_num : 要写入数据的数量
C51 COMPILER V7.06   SERIAL_KUOZHAN_C                                                      05/14/2006 16:38:49 PAGE 3   

 118          //         uchar *p : 要写入的数据开始地址
 119          //返回参数:无
 120          //设    计:ycj
 121          //最后修改:时间(2006.5.4)  修改人(ycj)
 122          //**********************************************************
 123          void write_n_byte(uchar address,uchar w_num,uchar *p)
 124          {uchar i;
 125   1         start(); 
 126   1         IIC_send(device_addr);
 127   1         wait_ack();
 128   1      
 129   1      
 130   1         IIC_send(address);
 131   1         wait_ack();
 132   1         for(i=0;i<w_num;i++)
 133   1         {
 134   2           IIC_send(*p);
 135   2           wait_ack();
 136   2               p++;
 137   2         }
 138   1         stop();
 139   1      
 140   1      }
 141          //*******************对24cxx写一个字节***********************
 142          //描    述:实现单片机模拟IIC总线对24cxx的写一个字节
 143          //入口参数:uchar address : 要写的地址
 144          //         uchar info : 要写入的数据
 145          //返回参数:无
 146          //设    计:ycj
 147          //最后修改:时间(2006.5.4)  修改人(ycj)
 148          //***********************************************************
 149          void write_byte(uchar address,uchar info)
 150          {
 151   1         start(); 
 152   1         IIC_send(device_addr);
 153   1         wait_ack();
 154   1      
 155   1         IIC_send(address);
 156   1         wait_ack();
 157   1         
 158   1         IIC_send(info);
 159   1         wait_ack();
 160   1         
 161   1         stop();
 162   1      
 163   1      }
 164          
 165          //******************时间延迟函数**********************
 166          //描  述:用指令实现延时一段时间
 167          //入口参数:int i,为时间延迟参数
 168          //出口参数:无
 169          //设计人:ycj
 170          //最后修改:时间(2006.5.4)  修改人(ycj)
 171          //****************************************************
 172          void delay_time(unsigned int i)
 173          {
 174   1       while(i)
 175   1        i--;
 176   1      }
 177          //****************IIC产生start信号函数*****************
 178          //描    述:模拟IIC总线发送一个start信号
 179          //入口参数:无
C51 COMPILER V7.06   SERIAL_KUOZHAN_C                                                      05/14/2006 16:38:49 PAGE 4   

 180          //返回参数:无
 181          //设    计:ycj
 182          //最后修改:时间(2006.5.4)  修改人(ycj)
 183          //*****************************************************
 184          void start()
 185          {
 186   1         sda=1;
 187   1         delay_time(1);
 188   1         scl=1;
 189   1         delay_time(1);
 190   1         sda=0;
 191   1         delay_time(1);
 192   1         scl=0;
 193   1         delay_time(1);
 194   1      }
 195          //****************IIC产生stop信号函数******************
 196          //描    述:模拟IIC总线发送一个stop信号
 197          //入口参数:无
 198          //返回参数:无
 199          //设    计:ycj
 200          //最后修改:时间(2006.5.4)  修改人(ycj)
 201          //*****************************************************
 202          void stop()
 203          {
 204   1         scl=0;
 205   1         delay_time(1);
 206   1         sda=0;
 207   1         delay_time(1);
 208   1         scl=1;
 209   1         delay_time(1);
 210   1         sda=1;
 211   1         delay_time(2500);
 212   1      
 213   1      }
 214          //*******************IIC发送数据函数********************
 215          //描    述:模拟IIC总线发送数据
 216          //入口参数:uchar temp : 待发送的数据
 217          //返回参数:无
 218          //设    计:ycj
 219          //最后修改:时间(2006.5.4)  修改人(ycj)
 220          //******************************************************
 221          void IIC_send(uchar temp)
 222          {
 223   1         uchar i;
 224   1         scl=0;
 225   1         delay_time(1);
 226   1         for (i=0;i<8;i++)
 227   1         {
 228   2                if (temp&0x80)
 229   2                sda=1; 
 230   2                else
 231   2                sda=0;
 232   2                delay_time(1);
 233   2                scl=1; 
 234   2                delay_time(1);
 235   2                scl=0;
 236   2            delay_time(1);
 237   2                sda=0;
 238   2                temp=temp<<1; 
 239   2         }
 240   1      }
 241          //****************从IIC总线上读数据函数****************
C51 COMPILER V7.06   SERIAL_KUOZHAN_C                                                      05/14/2006 16:38:49 PAGE 5   

 242          //描    述:从IIC总线上读一个byte的数据
 243          //入口参数:无
 244          //返回参数:uchar k : 返回从总线上读到的数据
 245          //设    计:ycj
 246          //最后修改:时间(2006.5.4)  修改人(ycj)
 247          //*****************************************************
 248          uchar IIC_read(void)
 249          {
 250   1         uchar i,j,k=0;
 251   1         scl=0; 
 252   1         delay_time(1);
 253   1      
 254   1         for (i=0;i<8;i++){
 255   2            sda=1;
 256   2            delay_time(1);
 257   2                scl=1; 
 258   2                delay_time(1);
 259   2            if (sda==1) 
 260   2                j=1;
 261   2            else 
 262   2                j=0;
 263   2            k=(k<<1)|j; 
 264   2                scl=0;
 265   2                delay_time(1);
 266   2         }
 267   1         return(k);
 268   1      }
 269          //*******************等待应答函数***********************
 270          //描    述:等待24cxx的应答信号
 271          //入口参数:无
 272          //返回参数:无
 273          //设    计:ycj
 274          //最后修改:时间(2006.5.4)  修改人(ycj)
 275          //******************************************************
 276          void wait_ack(void)
 277          {unsigned char i;
 278   1         scl=0;
 279   1         delay_time(1);
 280   1         sda=1;
 281   1         delay_time(1);
 282   1         scl=1;
 283   1         delay_time(1);
 284   1         while(1)
 285   1         {
 286   2         if (sda==1)
 287   2         i++;
 288   2         else
 289   2         break;
 290   2          if (i==255)
 291   2         while(1);
 292   2         }
 293   1      scl=0;
 294   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    462    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      6      17
   IDATA SIZE       =   ----    ----
C51 COMPILER V7.06   SERIAL_KUOZHAN_C                                                      05/14/2006 16:38:49 PAGE 6   

   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 + -