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

📄 668i2c.lst

📁 ZLG DP-668开发板全部程序
💻 LST
字号:
C51 COMPILER V7.06   668I2C                                                                05/13/2006 14:22:51 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE 668I2C
OBJECT MODULE PLACED IN 668i2c.OBJ
COMPILER INVOKED BY: E:\Program Files\Keil\C51\BIN\C51.EXE 668i2c.c OPTIMIZE(0,SPEED) BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /*******************************************************************
   2          P89C668单片机硬件I2C软件包,668i2c.c(主方式)
   3          668的硬件I2C接口定义在P1.6,P1.7上,分别为P1.6=SCL;P1.7=SDA;(开漏输出)
   4          相应寄存器:地址寄存器  S1ADR   用于存放自身从地址(从方式时才有用)
   5                      数据寄存器  S1DAT   接收/发送数据用
   6                      控制寄存器  S1CON   用于硬件I2C的设置、使能、启动、结束,
   7                                          应答控制,中断标志等。
   8                      状态寄存器  S1STA   指示I2C总线的操作状态码,高5位有效,
   9                                          若I2C中断志置位,可查询此寄存器判断
  10                                          总线情况。
  11          此软件包是以查询方式完成各种总线操作的,在使用前应对总线进行检查,并
  12          使用看门狗,以防等待总线而造成死机。
  13                                            2001-09-21
  14          *******************************************************************/
  15          #include  "REG552.h"        /*668的硬件I2C定义与552的一样*/
  16          #define   uchar unsigned char
  17          
  18          
  19          
  20          
  21          /*******************************************************************
  22                            申请总线
  23          功能:进行I2C总线的初始化--包括时钟速率,I2C使能,发送起始信号等
  24                等。
  25          *******************************************************************/
  26          void GetBus()
  27          {
  28   1        S1CON=0xc5;          /*设置时钟为100K(MCU主频为12M),ENS1和AA置位*/
  29   1        STA=1;               /*申请成为主机,起动总线*/
  30   1        while(SI==0);        /*等待起始位的发送*/
  31   1      }
  32          
  33          /*******************************************************************
  34                              发送数据函数
  35          功能:用于向总线发送数据                    
  36          *******************************************************************/
  37          void SendByte(uchar c)
  38          {
  39   1        S1DAT=c;
  40   1        S1CON=0XC5;          /*清除SI位等待继续发送*/
  41   1        while(SI==0);        /*等待数据的发送*/
  42   1      }
  43          
  44          /*******************************************************************
  45                              向无子地址器件发送字节数据函数               
  46          函数原型: bit  ISendByte(uchar sla,ucahr c);  
  47          功能:     从启动总线到发送地址,数据,结束总线的全过程,从器件地址sla,
  48                    待发送的数据c,如果返回1表示操作成功,否则操作有误。
  49          ********************************************************************/
  50          bit ISendByte(uchar sla,uchar c)
  51          {
  52   1         GetBus();                 /*启动总线*/
  53   1         SendByte(sla);            /*发送器件地址,若无应答则返回*/
  54   1           if(S1STA!=0X18){S1CON=0XD5;return(0);}
  55   1         SendByte(c);              /*发送数据*/
C51 COMPILER V7.06   668I2C                                                                05/13/2006 14:22:51 PAGE 2   

  56   1           if(S1STA!=0X28){S1CON=0XD5;return(0);}
  57   1        S1CON=0XD5;                /*结束总线*/ 
  58   1        return(1);
  59   1      }
  60          
  61          
  62          
  63          
  64          
  65          
  66          /*******************************************************************
  67                              向有子地址器件发送多字节数据函数               
  68          函数原型: bit  ISendStr(uchar sla,uchar suba,ucahr *s,uchar no);  
  69          功能:     从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件
  70                    地址sla,子地址suba,发送内容是s指向的内容,发送no个字节。
  71                    如果返回1表示操作成功,否则操作有误。
  72          ********************************************************************/
  73          bit ISendStr(uchar sla,uchar suba,uchar *s,uchar no)
  74          {
  75   1         uchar i;
  76   1      
  77   1         GetBus();                 /*启动总线*/
  78   1         SendByte(sla);            /*发送器件地址*/
  79   1           if(S1STA!=0X18){S1CON=0XD5;return(0);}
  80   1         SendByte(suba);           /*发送器件子地址*/
  81   1           if(S1STA!=0X28){S1CON=0XD5;return(0);}
  82   1           
  83   1         for(i=0;i<no;i++)
  84   1          {   
  85   2           SendByte(*s);           /*发送数据*/
  86   2            if(S1STA!=0X28){S1CON=0XD5;return(0);}
  87   2           s++;
  88   2          } 
  89   1        S1CON=0XD5;                /*结束总线*/ 
  90   1        return(1);
  91   1      }
  92          
  93          
  94          
  95          
  96          
  97          
  98          
  99          
 100          /*******************************************************************
 101                              向无子地址器件读字节数据函数               
 102          函数原型: bit  IRcvByte(uchar sla,ucahr *c);  
 103          功能:     从启动总线到发送地址,读数据,结束总线的全过程,从器件地
 104                    址sla,返回值在c.
 105                    如果返回1表示操作成功,否则操作有误。
 106          ********************************************************************/
 107          bit IRcvByte(uchar sla,uchar *c)
 108          {
 109   1         GetBus();                  /*启动总线*/
 110   1         SendByte(sla+1);           /*发送器件地址*/   
 111   1           if(S1STA!=0X40){S1CON=0XD5;return(0);}
 112   1         S1CON=0XC1;                /*接收一字节数据即发送非应答位*/
 113   1         while(SI==0);              /*等待接收数据*/  
 114   1           if(S1STA!=0X58){S1CON=0XD5;return(0);}
 115   1         *c=S1DAT;                  /*读取数据*/
 116   1         S1CON=0XD5;                /*结束总线*/   
 117   1        return(1);
C51 COMPILER V7.06   668I2C                                                                05/13/2006 14:22:51 PAGE 3   

 118   1      }
 119          
 120          
 121          
 122          
 123          
 124          
 125          
 126          
 127          /*******************************************************************
 128                              向有子地址器件读取多字节数据函数               
 129          函数原型: bit  ISendStr(uchar sla,uchar suba,ucahr *s,uchar no);  
 130          功能:     从启动总线到发送地址,子地址,读数据,结束总线的全过程,从器件
 131                    地址sla,子地址suba,读出的内容放入s指向的存储区,读no个字节。
 132                    如果返回1表示操作成功,否则操作有误。
 133          ********************************************************************/
 134          bit IRcvStr(uchar sla,uchar suba,uchar *s,uchar no)
 135          {
 136   1         uchar i;
 137   1      
 138   1         GetBus();                 /*启动总线*/
 139   1         SendByte(sla);            /*发送器件地址*/
 140   1           if(S1STA!=0X18){S1CON=0XD5;return(0);}
 141   1         SendByte(suba);           /*发送器件子地址*/
 142   1           if(S1STA!=0X28){S1CON=0XD5;return(0);}
 143   1         S1CON=0XE5;               /*重新启动总线*/
 144   1         while(SI==0);
 145   1         SendByte(sla+1);
 146   1           if(S1STA!=0X40){S1CON=0XD5;return(0);} 
 147   1         
 148   1         for(i=0;i<no-1;i++)
 149   1          {  
 150   2           S1CON=0XC5;                /*接收一字节数据并发送应答位*/
 151   2           while(SI==0);              /*等待接收数据*/  
 152   2           if(S1STA!=0X50){S1CON=0XD5;return(0);}
 153   2           *s=S1DAT;                  /*读取数据*/ 
 154   2           s++;
 155   2          } 
 156   1         S1CON=0XC1;                 /*接收最后一字节数据并发送非应答位*/
 157   1         while(SI==0);  
 158   1         *s=S1DAT;
 159   1         S1CON=0XD5;                 /*结束总线*/ 
 160   1         return(1);
 161   1      }
 162          
 163          /*软件包大小:326字节*/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    373    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     21    ----
   IDATA SIZE       =   ----    ----
   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 + -