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

📄 iic.c

📁 使用FT245开发的USB接口的质谱仪
💻 C
字号:
#include 	<reg52.h>
#include 	<absacc.h>
#include 	<intrins.h>

sbit  	IIC_SDA=P1^4;//IIC的数据线
sbit  	IIC_SCL=P1^3;//IIC的时钟信号

void IIC_Delay(void)//延时
{
 	_nop_();
 	_nop_();
 	//_nop_();
 	//_nop_();
 	//_nop_();
 	//_nop_();
 	//_nop_();
}

void IIC_Start(void)//IIC的启动信号
{
 	IIC_SDA=1;
 	IIC_SCL=1;
 	IIC_Delay();
 	IIC_SDA=0;
 	IIC_Delay();
 	IIC_SCL=0;
 	IIC_Delay();
 	IIC_SDA=1;
 	IIC_Delay();
}	

void IIC_End(void)//提供IIC的结束信号
{
 	IIC_SDA=0;
 	IIC_Delay();
 	IIC_SCL=1;
 	IIC_Delay();
 	IIC_SDA=1;
 	IIC_Delay();
} 
void IIC_Write(unsigned char data1)//向IIC总线发送8位数据,并请求一个应答信号
{
	unsigned char i;
	for(i=0;i<8;i++)//向IIC总线发送8位数据
	{	
		if((data1&128)==128) IIC_SDA=1;
	 		else IIC_SDA=0;
	 	IIC_Delay();
	 	IIC_SCL=1;
	 	data1=data1<<1;
	 	IIC_Delay();
	 	IIC_SCL=0;
	 	IIC_Delay();
	}
	IIC_SDA=1;//请求一个应答信号
}
unsigned char IIC_Read(void)//从IIC总线上读出一个8位的数
{
 	unsigned char i,j;
 	j=0;
 	for(i=0;i<8;i++)
	{
	 	j=j<<1;
		IIC_SCL=1;
	 	IIC_Delay();
	 	if(IIC_SDA==1) j++;
	  	IIC_SCL=0;
	 	IIC_Delay();
	}
 	return(j);
} 	    	       
unsigned char IIC_RandomRead(unsigned char Address)//给定一个地址,从这个地址读出内容
{
	 unsigned char T_Byte;
	 bit Ack=1;
	 while(Ack==1)    	//dummy write ,select current address
	 {
		 IIC_Start();	
		 IIC_Write(0xa2);	/*写入写控制字*/
		 IIC_SCL=1;
		 IIC_Delay();
	 	 if(IIC_SDA)
			Ack=1;   	//EEPROM busy,need retrs
	 		else Ack=0;   	//EEPROM Acknowledge
	 		IIC_SCL=0;
	}
 	Ack=1;           		//设置地址
 	while(Ack==1)
	{
	 	IIC_Write(Address);
	 	IIC_SCL=1;
	 	IIC_Delay();
	 	if(IIC_SDA==1) Ack=1;
	 		else Ack=0;
		IIC_SCL=0;
	}
 	IIC_Start();
 	Ack=1;
 	while(Ack==1)      		 //读指令
	{
	 	IIC_Write(0xa3);	/*写入读控制字*/
	 	IIC_SCL=1;
	 	IIC_Delay();
	 	if(IIC_SDA==1)
			Ack=1;
	 	else Ack=0;
	 	IIC_SCL=0;
	}
 	T_Byte=IIC_Read();		//从IIC总线上读出一个8位的数
 	IIC_SDA=1;//do not Acknowledge
 	IIC_Delay();
 	IIC_SCL=1;
 	IIC_Delay();
 	IIC_SCL=0;
 	IIC_Delay(); 
 	IIC_End();
 	return T_Byte;
}   
void IIC_RandomWrite(unsigned char Address,unsigned char Data) //给定一个地址和数据,将数据写入到地址中
{
 	bit Ack=1;
 	while(Ack==1)/*测试是否能写入*/
	{	
	 	IIC_Start();
	 	IIC_Write(0xa2);/*写入写控制字*/
	 	IIC_SCL=1;
	 	IIC_Delay();
	 	if(IIC_SDA==1) Ack=1;
	 		else Ack=0;
	 	IIC_SCL=0;
	}
 	IIC_Write(Address);/*写入8位地址*/
 	IIC_SCL=1;
 	IIC_Delay();
 	IIC_SCL=0;
 	IIC_Write(Data);/*写入数据*/
 	IIC_SCL=1;
 	IIC_Delay(); 
 	IIC_SCL=0;
 	IIC_End();/*送停止位,启动写入时序*/ 
}

⌨️ 快捷键说明

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