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

📄 iic.c

📁 采用MPS430控制的项目
💻 C
字号:
#define   _iic_
#include  "..\Inc\includes.h"
/*********************************************************************************************************
* 函数名称:
*
* 功能描述:
*
* 说明:
* 
********************************************************************************************************/
void I_start(void)
{  	SDA1; SCLK1; SDA0;SCLK0;	}

void I_stop(void)
{  SDA0;   SCLK1;  SDA1;   SCLK0; }

void I_ack(void)
{ SDA0;    SCLK1;  SCLK0;  SDA1;  }

void N_ack(void)
{ SDA1;    SCLK1;  SCLK0;  SDA0;  }

void I_send(unsigned char m)
{
	unsigned char i=8;
	do{
	SCLK0;
	if(m&0x80)    { SDA1; }
 		else      { SDA0; }
	SCLK1;
	m = m<<1;
	i--;
	}while(i);
	SCLK0;
}

unsigned char I_receive(void)
{
	unsigned char x=0,i=8,m;
	SDA1;
	do{
	SCLK0;
	SCLK1;
	P5DIR=P5DIR&0xf7;  // 输入
	m=P5IN;
	m=m&0x08;
	if(m==0x08)              
		x=x|0x01;
	if(i>1)
		x=x<<1;
	i--;
	}while(i);
	SCLK0;
	return x;
}

unsigned char IIRD(unsigned char sla,unsigned int x)
{  unsigned char kk;

//   IIC_biao=0;
	I_start();
  	I_send(sla);
  	I_ack();
  	I_send(x);
  	I_ack();
  	I_start();
  	I_send(sla+1);
  	I_ack();
  	kk = I_receive();
  	N_ack();
  	I_stop();
  	return(kk);
}

void IIWR(unsigned char sla,unsigned int x,unsigned char y)
{
//  IIC_biao=0;
	I_start();
  	I_send(sla);
  	I_ack();
  	I_send(x);
  	I_ack();
  	I_send(y);
  	I_ack();
 	I_stop();
  	II_delay();    /*连续写必须延时间*/
}
/*********************************************************************************************************
* 函数名称:II3RD
*
* 功能描述:读指定字节的数据
*
* 说明:
* 
********************************************************************************************************/
unsigned char II3RD(unsigned char sla,unsigned  int  dizi)
{
unsigned char kk,m,n;
  //IIC_biao=1;
	n=(unsigned char)((dizi&0xff00)>>8);
  	m=(unsigned char)(dizi&0x00ff);
  	I_start();
  	I_send(sla);
  	I_ack();
  	I_send(n);
  	I_ack();
  	I_send(m);
  	I_ack();
  	I_start(); 
  	I_send(sla+1);
  	I_ack();
  	kk=I_receive();
  	N_ack();
  	I_stop();
  	return(kk); 
}
/*********************************************************************************************************
* 函数名称:II3WR
*
* 功能描述:在指定的地址存如一个字节的数据
*
* 说明:
* 
********************************************************************************************************/
void   II3WR(unsigned char sla,unsigned   int   dizi,unsigned char shuju)
{
	unsigned char m,n;
    //IIC_biao=1;
 	n=(unsigned char)((dizi&0xff00)>>8);
  	m=(unsigned char)(dizi&0x00ff);
  	I_start();
  	I_send(sla);
  	I_ack();
  	I_send(n); 
  	I_ack();
  	I_send(m);
  	I_ack();
  	I_send(shuju);
  	I_ack();
  	I_stop(); 
  	II_delay();
}
/*********************************************************************************************************
* 函数名称:II_delay
*
* 功能描述:I2C延时程序
*
* 说明:
* 
********************************************************************************************************/
void II_delay(void)
{
	unsigned long int i=0;
    for(i=0;i<900;i++) ;      /* 必须大于450    否则数据不能保存 */
}

⌨️ 快捷键说明

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