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

📄 iic_b.lst

📁 IC卡购电软件实现
💻 LST
字号:
C51 COMPILER V7.08   IIC_B                                                                 09/27/2006 09:13:59 PAGE 1   


C51 COMPILER V7.08, COMPILATION OF MODULE IIC_B
OBJECT MODULE PLACED IN IIC_B.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE IIC_B.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*******************************************************************************
   2          *  标题:  北京蓝海微芯LJD-SY-5200单片机开发系统演示程序                        *
   3          *  文件:  24C02.C                                                              *
   4          *  日期:  2006-8-9                                                             *
   5          *  版本:  1.0                                                                  *
   6          *  作者:  蓝海微芯                                                             *
   7          *  网站: http://www.ljd-2008.com                                              *
   8          ********************************************************************************
   9          *  描述:                                                                       *
  10          *           24C02调用程序模块                                                  *                          
             -                 
  11          *                                                                              *
  12          *                                                                              *
  13          ********************************************************************************
  14          * 【版权】 Copyright(C)微芯科技 http://www.bluemcu.com    All Rights Reserved  *          
  15          * 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息!                  *
  16          *******************************************************************************/
  17          #include<reg51.h>                  /*=== 头文件包含 ===*/
  18          #include<intrins.h>
  19          #include<absacc.h>
  20          #include  <IC_CARD_b.h>
  21          
  22          /* iic延时       */
  23          void iic_wait(void)
  24          {
  25   1        _nop_();
  26   1        _nop_();
  27   1        _nop_();
  28   1        _nop_();
  29   1        _nop_();
  30   1        _nop_();
  31   1        _nop_();
  32   1        _nop_();
  33   1        _nop_();
  34   1        _nop_();
  35   1        _nop_();
  36   1        _nop_();
  37   1        _nop_();
  38   1        _nop_();
  39   1        _nop_();
  40   1        _nop_();
  41   1        _nop_();
  42   1        _nop_();
  43   1        _nop_();
  44   1        _nop_();
  45   1        _nop_();
  46   1        _nop_();
  47   1        _nop_();
  48   1      }
  49          /* 开启iic总线   */
  50          void iic_start(void)
  51          {
  52   1        SDA = 1;
  53   1        SCL = 1;
  54   1        iic_wait();
C51 COMPILER V7.08   IIC_B                                                                 09/27/2006 09:13:59 PAGE 2   

  55   1        SDA = 0;
  56   1        iic_wait();
  57   1        SCL = 0;
  58   1      }
  59          /* 关闭iic总线   */
  60          void iic_stop(void)
  61          {
  62   1        SDA=0;
  63   1        SCL=0;
  64   1        iic_wait();
  65   1        SCL=1;
  66   1        iic_wait();
  67   1        SDA=1;
  68   1      }
  69          /* 发送ACK信号   */
  70          void iic_ack(void)
  71          {
  72   1        SDA=0;
  73   1        iic_wait();
  74   1        SCL=1;
  75   1        iic_wait();
  76   1        SCL=0;
  77   1      }
  78          /* 发送NOACK信号 */
  79          void iic_no_ack(void)
  80          {
  81   1        SDA=1;
  82   1        iic_wait();
  83   1        SCL=1;
  84   1        iic_wait();
  85   1        SCL=0;
  86   1      }
  87          /********************************************************************
  88          函 数 名:iic_wait_ack   
  89          功    能:等待ACK信号
  90          说    明:
  91          入口参数:
  92          返 回 值:1-ACK         0-ERROR
  93          设    计:蓝海微芯           
  94          ***********************************************************************/
  95          bit iic_wait_ack(void)
  96          {
  97   1        uchar errtime=255;
  98   1        //uint errtime = 1000;
  99   1      
 100   1        SDA=1;
 101   1        iic_wait();
 102   1        SCL=1;
 103   1        iic_wait();
 104   1      
 105   1        while(SDA)
 106   1        {
 107   2          errtime--;
 108   2          if(!errtime)
 109   2          return 0;
 110   2        }
 111   1      
 112   1        SCL=0;
 113   1        return 1;
 114   1      }
 115          /********************************************************************
 116          函 数 名:iic_send_byte   
C51 COMPILER V7.08   IIC_B                                                                 09/27/2006 09:13:59 PAGE 3   

 117          功    能:MCU向iic设备发送一个字节 
 118          说    明:
 119          入口参数:sbyte                  待发送的字节数据
 120          返 回 值:
 121          设    计:蓝海微芯           
 122          ***********************************************************************/
 123          void iic_send_byte(uchar sbyte)
 124          {
 125   1        uchar i = 8;
 126   1      
 127   1        while(i--)
 128   1        {
 129   2          SCL = 0;
 130   2          _nop_();
 131   2          SDA = (bit)(sbyte&0x80);
 132   2          sbyte <<= 1;
 133   2          iic_wait();
 134   2          SCL = 1;
 135   2          iic_wait();
 136   2        }
 137   1      
 138   1        SCL=0;
 139   1      }
 140          /********************************************************************
 141          函 数 名:iic_receive_byte  
 142          功    能:MCU从iic设备接收一个字节
 143          说    明:
 144          入口参数:
 145          返 回 值:ddata   接收数据
 146          设    计:蓝海微芯           
 147          ***********************************************************************/
 148          uchar iic_receive_byte(void)
 149          {
 150   1        uchar i=8;
 151   1        uchar ddata=0;
 152   1      
 153   1        SDA=1;
 154   1        while(i--)
 155   1        {
 156   2          ddata <<= 1;
 157   2          SCL=0;
 158   2          iic_wait();
 159   2          SCL=1;
 160   2          iic_wait();
 161   2          ddata |= SDA;
 162   2        }
 163   1        SCL=0;
 164   1        return ddata;
 165   1      }
 166          /********************************************************************
 167          函 数 名:write_iic_data 
 168          功    能:向iic设备写入N个字节
 169          说    明:
 170          入口参数:write_data              存放写入字节的数组
 171                    address                 指定从address处开始写入
 172                    num                     写入的字节数  
 173          返 回 值:无
 174          设    计:蓝海微芯           
 175          ***********************************************************************/
 176          void write_iic_data(uchar write_data[], uchar address, uchar num)
 177          {
 178   1        uchar n;
C51 COMPILER V7.08   IIC_B                                                                 09/27/2006 09:13:59 PAGE 4   

 179   1      
 180   1        iic_start();
 181   1        iic_send_byte(0xa0);
 182   1        iic_wait_ack();
 183   1        iic_send_byte(address);
 184   1        iic_wait_ack();
 185   1          
 186   1        for(n=0; n<num; n++)
 187   1        {
 188   2          iic_send_byte(write_data[n]);
 189   2          iic_wait_ack();
 190   2        }
 191   1        iic_stop();
 192   1      }
 193          /********************************************************************
 194          函 数 名:read_iic_data 
 195          功    能:从iic设备读取N个字节
 196          说    明:
 197          入口参数:read_data               存放读取字节的数组 
 198                    address                 指定从address处开始读取 
 199                    num                     读取的字节数
 200          返 回 值:无
 201          设    计:蓝海微芯           
 202          ***********************************************************************/
 203          void read_iic_data(uchar read_data[], uchar address, uchar num)
 204          {
 205   1        uchar n;
 206   1        uchar *pread_data;
 207   1        pread_data = read_data;
 208   1        iic_start();
 209   1        iic_send_byte(0xa0);
 210   1        iic_wait_ack();
 211   1        iic_send_byte(address);
 212   1        iic_wait_ack();
 213   1        iic_start();
 214   1        iic_send_byte(0xa1);
 215   1        iic_wait_ack();
 216   1      
 217   1        for (n=0; n<num; n++)
 218   1        {
 219   2          *pread_data = iic_receive_byte();
 220   2          pread_data++;
 221   2      
 222   2          if (n != (num - 1))     //最后一个数据不应答
 223   2          {
 224   3            iic_ack();
 225   3          }
 226   2        }
 227   1        iic_no_ack();
 228   1        iic_stop();
 229   1      }


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

C51 COMPILER V7.08   IIC_B                                                                 09/27/2006 09:13:59 PAGE 5   


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

⌨️ 快捷键说明

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