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

📄 i2c.h

📁 通过AT89S52的I/O口模拟IIC接口,读写控制AT24C256,适用于AT24C64、AT24C256、At24C512
💻 H
字号:
/*--------------------------------------------------------------------------
I2C.H
Design For : I2C 器件
Description: I2C总线的高速传输模式(晶振:12MHz)
             所有函数为模拟I2C总线的最底层驱动函数
Author:xieqin
CopyRight:2004.9.7
--------------------------------------------------------------------------*/
#ifndef __I2C_H__
#define __I2C_H__ 

#include<intrins.h>

sbit SCL=P1^1;  //串行时钟口
sbit SDA=P1^0;  //串行数据口                                 
        
void Delay_I2C()  //I2C总线延时函数
{
	unsigned char i=1;
	while(i--);
}

void Start_I2C()  //申请I2C总线函数
{
    SDA=1;  
    SCL=1;  //拉起时钟线
    SDA=0;  //SDA完在一次由高到低的跳变
    SCL=0;  //SCL线拉低,等待下一步写数据操作  
}

void Stop_I2C()  //释放I2C总线函数
{
    SDA=0;    
    SCL=1;  //拉起时钟线
    SDA=1;  //SDA完成一次由低到高的跳变               
}


void AckS_I2C(bit c) //发送应答位函数(c=1无效应答,c=0有效应答
{
   if(c)SDA=1;     //无效应答;SDA=1
    else SDA=0;	   //有效应答;SDA=0
    SCL=1;        
    Delay_I2C(); 	  
    SCL=0;      
}


bit SendByte_I2C(unsigned char val)//发送单字节数据函数
{
	unsigned char x,i;
	bit c;
    for(x=0x80,i=0;i<8;i++,x>>=1)
    {
    	if(val&x)SDA=1; 
     	else SDA=0;     
     	SCL=1;    //SCL拉高,保持SDA上的状态
     	SCL=0;
    }  

    SDA=1; //释放总线,等待应答 
    SCL=1;
    Delay_I2C(); 	  
    c=SDA;//读取应答位
    SCL=0;  
    return c;
}

unsigned char  ReadByte_I2C() //接收单字节数据函数(不括发送应答位)
{
   unsigned char i,x,val;
   for(SDA=1,i=0,x=0x80,val=0x00;i<8;i++,x>>=1)
   {
        SCL=0;    
    	Delay_I2C();   //等待从属器件向SDA线上写数据
    	SCL=1;         //拉高SCL,并读取SDA线上的数据
    	if(SDA)val|=x;  
   }
        SCL=0;	       
	return val;
}


#endif
                

⌨️ 快捷键说明

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