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

📄 iic.lst

📁 万年历数字钟是一种用万年历时钟芯片实现年、月、日、时、分、秒计时
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   IIC                                                                   11/15/2007 11:32:38 PAGE 1   


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

stmt level    source

   1          /*******************************************
   2          I2C总线程序,版权2007,沈佳华所有
   3          MCU:AT89S52
   4          时钟:12MHZ
   5          *******************************************/
   6          
   7          #include<intrins.h>
   8          #include<reg52.h>
   9          #include"userdefine.h"
  10          
  11          #define uchar unsigned char
  12          #define uint unsigned int
  13          
  14          void iic_start();                   //1--启动iic总线
  15          void iic_stop();                    //2--停止iic总线数据传送
  16          void send_ack();                    //3--发送应答位
  17          void nsend_ack();                   //4--发送非应答位
  18          void check_ack();                   //5--应答位检查
  19          void write_byte(uchar shu);         //6--发送一个字节
  20          void write_byte0();                 
  21          void write_byte1();
  22          uchar read_byte();                  //7--读取一个字节
  23          void delay_nop(unsigned char step); //单步延时子程序
  24          void write_N_byte(uchar CS_I2C,uchar ic_addr,uchar number,uchar send_data[]);       //8--发送N个字节 CS_I2
             -C为24C02 IC地址
  25          //***********************************************************************************
  26          //功能:发送N个数据字节子程序
  27          //描述:CS_I2C,ic_addr,number,send_data,用户只需调用本子程序即可
  28          //参数:发送N个字节 CS_I2C为24C02 IC地址,ic_addr为单元地址,number为连续寻址字节数,
  29          //      但不能超过各种IC的每页字节数. send_data[]为发送数据来源,CS_I2C选中哪个芯片及
  30          //      读写命令
  31          //返回:无
  32          //***********************************************************************************/
  33          void read_N_byte(uchar CS_I2C,uchar ic_addr,uchar number,uchar incept_data[]);      //9--接收N个字节 CS_I2
             -C为读寻址字节
  34          //***********************************************************************************
  35          //功能:接收N个字数据节子程序
  36          //描述:CS_I2C,ic_addr,number,send_data,用户只需调用本子程序即可
  37          //参数:发送N个字节 CS_I2C为24C02 IC地址,ic_addr为单元地址,number为连续寻址字节数,
  38          //      但不能超过各种IC的每页字节数. send_data[]为发送数据来源,CS_I2C选中哪个芯片及
  39          //      读写命令
  40          //返回:无
  41          //***********************************************************************************/
  42          void write_bytea(uchar CS_I2C,uchar temp[],uchar n);                                //10-写第N个字节
  43          
  44          //***********************************************************************************
  45          //功能:启动I2C总线子程序
  46          //描述:SCL=P3^6,SDA=P3^7;特别要留意时序和时钟频率,本子程序,用户无需调用
  47          //参数:无
  48          //返回:无
  49          //***********************************************************************************/
  50          void iic_start()
  51          {
  52   1          SDA=1;                      //初始SDA高电平
  53   1          delay_nop(1);
C51 COMPILER V7.06   IIC                                                                   11/15/2007 11:32:38 PAGE 2   

  54   1          SCL=1;                      //初始SCL为高电平才能使SDA开始信号有效  SCL f=100-400KHZ
  55   1          while(SCL==0){}             //检测SCL是否为高电平,若为低电平就不能作为I2C开始等其为高方可
  56   1          delay_nop(2);               //根椐晶振时钟来修订延时时间 SDA=4.7us
  57   1          SDA=0;                      //SDA电平从高变低产生一个下降沿来启动I2C总线
  58   1          delay_nop(4);               //根椐晶振时钟来修订延时时间 SDA=4.7us
  59   1          SCL=0;                      //SCL为低电平
  60   1      }
  61          //***********************************************************************************
  62          //功能:关闭I2C总线,停止数据传送子程序
  63          //描述:SCL=P3^6,SDA=P3^7;特别要留意时序和时钟频率,本子程序,用户无需调用
  64          //参数:无
  65          //返回:无
  66          //***********************************************************************************/
  67          void iic_stop()
  68          {
  69   1          SDA=0;                      //初始SDA为低电平为呆会产生上升沿作准备
  70   1          delay_nop(1);               //根椐晶振时钟来修订延时时间 SDA=4.7us
  71   1          SCL=1;                      //初始SCL为高电平才能使SDA停止信号有效  SCL f=100-400KHZ        
  72   1          while(SCL==0){;}            //确保SCL是高电平才能发出停止命令
  73   1          delay_nop(2);               //根椐晶振时钟来修订延时时间 SDA=4.7us
  74   1          SDA=1;                      //在SCL为高电平的前提条件下,SDA电平从低变高产生一个上升沿作为I2C的停止信号
  75   1          delay_nop(4);               //根椐晶振时钟来修订延时时间 SDA=4.7us
  76   1          SCL=0;                      //将SCL置低,安全不影响下一次的数据传输
  77   1      }
  78          //***********************************************************************************
  79          //功能:发送应答信号子程序
  80          //描述?CL=P3^6,SDA=P3^7;特别要留意时序和时钟频率,本子程序,用户无需调用
  81          //参数:无
  82          //返回:无
  83          //***********************************************************************************/
  84          void send_ack()
  85          {
  86   1          SDA=0;                      //发送完数据或接收完数据主机都会发出0应答信号ACK
  87   1          SCL=1;
  88   1          delay_nop(4);               //根椐晶振时钟来修订延时时间 SDA=4.7us
  89   1          SCL=0;
  90   1          SDA=1;  
  91   1      }
  92          //***********************************************************************************
  93          //功能:发送非应答信号子程序
  94          //描述:SCL=P3^6,SDA=P3^7;特别要留意时序和时钟频率,本子程序,用户无需调用
  95          //参数:无
  96          //返回:无
  97          //***********************************************************************************/
  98          void nsend_ack()
  99          {
 100   1          SDA=1;
 101   1          SCL=1;
 102   1          delay_nop(4);               //根椐晶振时钟来修订延时时间 SDA=4.7us
 103   1          SCL=0;
 104   1          SDA=0;
 105   1      }
 106          //***********************************************************************************
 107          //功能:检查应答信号子程序
 108          //描述:SCL=P3^6,SDA=P3^7;特别要留意时序和时钟频率,本子程序,用户无需调用
 109          //参数:无
 110          //返回:无
 111          //***********************************************************************************/
 112          void check_ack()
 113          {
 114   1          SDA=1;
 115   1          SCL=1;
C51 COMPILER V7.06   IIC                                                                   11/15/2007 11:32:38 PAGE 3   

 116   1          F0=0;
 117   1          if(SDA==0)
 118   1          {
 119   2              SCL=0;
 120   2              delay_nop(4);               //根椐晶振时钟来修订延时时间 SDA=4.7us
 121   2          }
 122   1          else
 123   1          {
 124   2              F0=1;
 125   2              SCL=0;
 126   2              delay_nop(4);               //根椐晶振时钟来修订延时时间 SDA=4.7us
 127   2          }
 128   1      }
 129          //***********************************************************************************
 130          //功能:发送一个数据字节子程序
 131          //描述:SCL=P3^6,SDA=P3^7;特别要留意时序和时钟频率,本子程序,用户无需调用
 132          //参数:无
 133          //返回:无
 134          //***********************************************************************************/
 135          void write_byte(uchar shu)      //发送一个数据字节
 136          {
 137   1          uchar i;
 138   1          if((shu&0x80)>0)
 139   1          {SDA=1;}
 140   1          else
 141   1          {SDA=0;}
 142   1          SCL=1;
 143   1          while(SCL==0){;}
 144   1          delay_nop(2);               //根椐晶振时钟来修订延时时间 SDA=4.7us
 145   1          SCL=0;
 146   1          SDA=0;
 147   1          shu=_crol_(shu,1);
 148   1          for(i=1;i<8;i++)
 149   1          {
 150   2              if((shu&0x80)>0)
 151   2              {write_byte1();}
 152   2              else
 153   2              {write_byte0();}
 154   2              shu=_crol_(shu,1);
 155   2          }
 156   1      }
 157          //***********************************************************************************
 158          //功能:XX子程序
 159          //描述:SCL=P3^6,SDA=P3^7;特别要留意时序和时钟频率,本子程序,用户无需调用
 160          //参数:无

⌨️ 快捷键说明

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