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

📄 i2c.h

📁 i2c仿真
💻 H
字号:
#define uchar unsigned char 
#define uint  unsigned int 

sbit SCL=P1^4;
sbit SDA=P1^5;


/***********************************************
**函数名称:I2C_Start()
**函数功能:发送起始条件
**入口参数:无
**出口参数:无
**说明    :时序按照标准模式建立
***********************************************/
void I2C_Start()
{
  SDA=1; 
  _nop_();//数据建立时间大于250ns
  SCL=1;
  _nop_();
  _nop_();
  _nop_();
  SDA=0;
  _nop_();
  _nop_();
  SCL=0; //SCL高电平时间大于4us,嵌住时钟总线
}

/***********************************************
**函数名称:I2C_Stop()
**函数功能:发送停止条件
**入口参数:无
**出口参数:无
**说明    :时序按照标准模式建立
***********************************************/
void I2C_Stop()
{
  SDA=0; 
  _nop_();//数据建立时间大于250ns
  SCL=1;
  _nop_();
  _nop_();
  _nop_();
  SDA=1;
  _nop_();
  _nop_();
  SCL=0; //SCL高电平时间大于4us,嵌住时钟总线
}

/***********************************************
**函数名称:I2C_SendByte()
**函数功能:发送一个字节
**入口参数:待发送字节n
**出口参数:无
**说明    :时序按照标准模式建立
***********************************************/
void I2C_SendByte(char n)
{
	 uchar i;
	 for(i=7;i>=0;i--)
	 {
		  SDA=n>>i;
		  _nop_();
		  SCL=1;
		  _nop_();
		  _nop_();
		  _nop_();
		  _nop_();
		  _nop_();
		  SCL=0;
	      _nop_();
		  _nop_();
		  _nop_();
		  _nop_();
		  _nop_();
	 }
}


/***********************************************
**函数名称:I2C_RecByte()
**函数功能:接收一个字节
**入口参数:无
**出口参数:已接收字节
**说明    :时序按照标准模式建立
***********************************************/
 I2C_RecByte(void)
{
	 uchar i;
	 for(i=7;i>=0;i--)
	 {
		  i<<=1;
		  SDA=1;
		  _nop_();
		  SCL=1;
		  _nop_();
		  _nop_();
		  _nop_();
		  _nop_();
		  _nop_();
		  SCL=0;
	      _nop_();
		  _nop_();
		  _nop_();
		  _nop_();
		  _nop_();
	 }
	 return (i);
}



/***********************************************
**函数名称:Check_Ack()
**函数功能:检测从机响应
**入口参数:无
**出口参数:从机响应则为'1',否则为'0'
**说明    :时序按照标准模式建立
***********************************************/
Check_Ack()
{
	uchar i=1;
	SDA=1;
	_nop_();
	SCL=1;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	i=SDA;
	_nop_();
	SCL=0;
	return (i);  
}

/***********************************************
**函数名称:Gen_Ack()
**函数功能:产生应答
**入口参数:i
**出口参数:无
**说明    :i=1产生应答,i=0产生非应答
***********************************************/
Gen_Ack(uchar i)
{	
	SDA=i;
	_nop_();
	SCL=1;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	SCL=0;
}

/***********************************************
**函数名称:I2C_SendNByte()
**函数功能:发送N个字节
**入口参数:字节个数n,待发送数据队列首地址
**出口参数:无
**说明    :时序按照标准模式建立
***********************************************/
void I2C_SendNByte(uchar n,*p)
{
  while(--n)
   {
	send:I2C_SendByte(*p);
		 if(Check_ACK) goto send;
		 p++;
   }
}

/***********************************************
**函数名称:I2C_RecNByte()
**函数功能:接收N个字节
**入口参数:字节个数n,存放数据队列首地址
**出口参数:无
**说明    :时序按照标准模式建立
***********************************************/
void I2C_RecNByte(uchar n,*p)
{
  while(--n)
   {
	*p=I2C_RecByte();
    Gen_Ack(!!(n-1));//用!使得n-1只有1和0两种结果
	p++;
   }
}

⌨️ 快捷键说明

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