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

📄 i2c.lst

📁 此程序是及iic、rs485、rs232于一身的单片机c语言编写
💻 LST
字号:
C51 COMPILER V6.12  I2C                                                                    04/20/2006 17:14:57 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE I2C
OBJECT MODULE PLACED IN I2c.OBJ
COMPILER INVOKED BY: C:\c51\BIN\C51.EXE I2c.c DB OE SMALL ROM(LARGE) 

stmt level    source

   1          #include <main.h>
   2          
   3          #define H 1
   4          #define L 0
   5          
   6          bit sda_v1;
   7          bit sda_v2;
   8          
   9          void i2cA_delay(void)//5us Time
  10          {
  11   1      	_nop_();
  12   1      	_nop_();
  13   1      	_nop_();
  14   1      	_nop_();
  15   1      	_nop_();
  16   1      	_nop_();
  17   1      	_nop_();
  18   1      	_nop_();
  19   1      	_nop_();
  20   1      	_nop_();
  21   1      	_nop_();
  22   1      	_nop_();
  23   1      	_nop_();
  24   1      	_nop_();
  25   1      	_nop_();
  26   1      	_nop_();
  27   1      	_nop_();
  28   1      	_nop_();
  29   1      	_nop_();
  30   1      	_nop_();
  31   1      
  32   1      }
  33          
  34          void i2cA_start(void)
  35          {
  36   1      	SDA1 = 1;
  37   1      	SCL1 = 1;
  38   1      	i2cA_delay();
  39   1      	SDA1 = 0;
  40   1      	i2cA_delay();
  41   1      	SCL1 = 0;
  42   1      	i2cA_delay();
  43   1      }
  44          
  45          void i2cA_stop(void)
  46          {
  47   1      	SDA1 = 0;
  48   1      	i2cA_delay();
  49   1      	SCL1 = 1;
  50   1      	i2cA_delay();
  51   1      	SDA1 = 1;
  52   1      	i2cA_delay();
  53   1      }
  54          
  55          void i2cA_ini(void)
C51 COMPILER V6.12  I2C                                                                    04/20/2006 17:14:57 PAGE 2   

  56          {
  57   1      	i2cA_stop();
  58   1      }
  59          
  60          byte i2cA_scl(void)
  61          {
  62   1      	bit pri_sda;
  63   1      	SCL1 = 1;
  64   1      	pri_sda = SDA1;
  65   1      	i2cA_delay();
  66   1      	sda_v1 = SDA1;
  67   1      	if(pri_sda)
  68   1      	{
  69   2      		if(!SDA1)
  70   2      		{
  71   3      			return(I2CA_DET_START);// Detection Start
  72   3      		} 
  73   2      	} 
  74   1      	else
  75   1      	{
  76   2      		if(SDA1)
  77   2      		{
  78   3      			return(I2CA_DET_STOP);// Detection Stop
  79   3      		} 		
  80   2      	}
  81   1      	SCL1 = 0;
  82   1      	i2cA_delay();
  83   1      	return(0x00);
  84   1      }
  85          
  86          
  87          byte i2cA_detack(void)
  88          {
  89   1      	byte ovr_cnt = 0x00;
  90   1      	SDA1= 1;
  91   1      	while(SDA1 == 1)
  92   1      	{
  93   2      		ovr_cnt++;
  94   2      		if(ovr_cnt > OVR_VAL)
  95   2      		{
  96   3      			return(I2CA_NO_ACK);//Detection ACK Time Over
  97   3      		}	
  98   2      	}
  99   1      	return(i2cA_scl());
 100   1      }
 101          
 102          void i2cA_genack(void)
 103          {
 104   1      	byte y;
 105   1      	SDA1 = 0;
 106   1      	_nop_();
 107   1      	y = i2cA_scl();
 108   1      	SDA1 = 1;	
 109   1      	_nop_();
 110   1      }
 111          
 112          byte i2cA_send(byte wData)
 113          {
 114   1      	byte i;
 115   1      	byte wErr;
 116   1      	//wData = 0x68;
 117   1      	for(i=0; i<8; i++)
C51 COMPILER V6.12  I2C                                                                    04/20/2006 17:14:57 PAGE 3   

 118   1      	{
 119   2      		SDA1 = (bit)(wData & 0x80);
 120   2      		wData <<= 1;
 121   2      		wErr = i2cA_scl();
 122   2      		if(wErr)
 123   2      		{
 124   3      			return wErr;
 125   3      		}
 126   2      	}
 127   1      	wErr = i2cA_detack();
 128   1      	return(wErr);
 129   1      }
 130          
 131          byte i2cA_receive(void)
 132          {
 133   1      	byte i;
 134   1      	byte wData = 0x00;
 135   1      	byte y;
 136   1      	for(i=0; i<8; i++)
 137   1      	{
 138   2      		wData *= 2;
 139   2      		y = i2cA_scl();
 140   2      		if(sda_v1)
 141   2      		{
 142   3      			wData++;
 143   3      		} 	
 144   2      	}
 145   1      	return wData;
 146   1      }
 147          
 148          byte i2cA_senddata(byte Addr,byte *pData, byte Data_Len)//写 正确0   错误1
 149          {
 150   1      	byte wErr;
 151   1      	byte i;
 152   1      	i2cA_start();
 153   1      	
 154   1      	wErr = i2cA_send(I2C_WR_ADR);
 155   1      	if(wErr)
 156   1      	{
 157   2      		return wErr;
 158   2      	}
 159   1      	wErr = i2cA_send(Addr);
 160   1      	if(wErr)
 161   1      	{
 162   2      		return wErr;
 163   2      	}
 164   1      	for(i = 0x00; i < Data_Len; i++)
 165   1      	{
 166   2      		wErr = i2cA_send(*(pData + i));
 167   2      		if(wErr)
 168   2      		{
 169   3      			return wErr;
 170   3      		}
 171   2      	}		
 172   1      	i2cA_stop();
 173   1      	return(0x00); 
 174   1      }
 175          
 176          byte i2cA_readdata(byte Addr, byte *pData,byte Data_Len)//读 正确0  错误1
 177          {
 178   1      	byte i;
 179   1      	byte wErr;
C51 COMPILER V6.12  I2C                                                                    04/20/2006 17:14:57 PAGE 4   

 180   1      	i2cA_start();
 181   1      	wErr = i2cA_send(I2C_WR_ADR);
 182   1      	if(wErr)
 183   1      	{
 184   2      		return wErr;
 185   2      	}
 186   1      	wErr = i2cA_send(Addr);
 187   1      	if(wErr)
 188   1      	{
 189   2      		return wErr;
 190   2      	}	
 191   1      	i2cA_start();
 192   1      	wErr = i2cA_send(I2C_RD_ADR);
 193   1      	if(wErr)
 194   1      	{
 195   2      		return wErr;
 196   2      	}	
 197   1      	if(Data_Len > 1)
 198   1      	{
 199   2      		for(i=0; i<(Data_Len - 1); i++)
 200   2      		{
 201   3      			*(pData + i) = i2cA_receive();
 202   3      			i2cA_genack();			
 203   3      		}
 204   2      	}
 205   1      	*(pData + (Data_Len - 1))  = i2cA_receive();
 206   1      	i2cA_stop();
 207   1      	return(0x00);
 208   1      }
 209          
 210          
 211          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    377    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      13
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      2       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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