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

📄 iic.h

📁 maxim(美信)公司生产的MAX5478数字电位器的驱动程序 keil上用c51编写的
💻 H
字号:
//---------------------------------------------------------------------------
//*****************************************************************//
//***************      IIC fuction   ******************************//
//*****************************************************************//
//---------------------------------------------------------------------------

sbit SCL=P1^7;
sbit SDA=P1^6;

unsigned char ReadChar_24CXX(unsigned char address);
void WriteChar_24CXX(unsigned char address,unsigned char udata_0,unsigned char udata_1);

unsigned char Readbyte(void);
void Writebyte(unsigned char wdata);
void WaitACK(void);
void WriteACK(unsigned char ack);
void Stop(void);
void Start(void);
void Delay(void);


////////////////读24c01--外部调用/////////////////////////
/*
unsigned char ReadChar_24CXX(unsigned char address)
{	unsigned char mdata;
    Start();
    Writebyte(0xa0);
    Writebyte(address);
    Start();
    Writebyte(0xa1);
    mdata=Readbyte();
    WriteACK(1);
    Stop();
    Delay();//此处延时根据实际情况,如果不延时,可能会不正常
    return(mdata);
}
*/
/*
//////////////////写24c01--外部调用//////////////////////////
void WriteChar_24CXX(unsigned char address,unsigned char udata_0,unsigned char udata_1)
{   
	Start();
    Writebyte(address);
    Writebyte(udata_0);
    Writebyte(udata_1);
    Stop();
	Delay();//此处延时根据实际情况,如果不延时,可能会不正常
}

*/

/********************************************
            内部函数,延时
********************************************/
void Delay(void)
{	_nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_(); /*根据晶振频率制定延时时间*/
}
/********************************************
            内部函数,I2C开始
********************************************/
void Start(void)
{	
	//EA=0;
    SDA=1;
    SCL=1;
    Delay();
    SDA=0;
    Delay();
    SCL=0;
}
/********************************************
            内部函数,I2C结束
********************************************/
void Stop(void)
{	
	SDA=0;
    SCL=0;
    Delay();
    SCL=1;
    Delay();
    SDA=1;
    Delay();
    //EA=1;
}
 /********************************************
内部函数,输出ACK ,每个字节传输完成,输出ack=0,结束读书据,ack=1;
********************************************/
void WriteACK(unsigned char ack)
{	
	SDA=ack;
    Delay();
    SCL=1;
    Delay();
    SCL=0;
}
/********************************************
            内部函数,等待ACK
********************************************/
void WaitACK(void)
{   
	unsigned char errtime=20;
    SDA=1;
    Delay(); //读ACK
    SCL=1;
    Delay();
    while(SDA)
    {	errtime--;
        if(!errtime) 
		{
			Stop();
			//break;
		}
    }
    SCL=0;
    Delay();
}
/********************************************
            内部函数.输出数据字节
********************************************/
void Writebyte(unsigned char wdata)
{   unsigned char i;
    for(i=0;i<8;i++)
    {	if(wdata&0x80) SDA=1;
        else SDA=0;
        wdata<<=1;
        SCL=1;
        Delay();
        SCL=0;
    }
    WaitACK(); //如果通讯错误,将不能接收到ack
}
/********************************************
            内部函数.输入数据
********************************************/
unsigned char Readbyte(void)
{	unsigned char i,bytedata=0x00;
    SDA=1;
    for(i=0;i<8;i++)
    {	SCL=1;
        bytedata<<=1;
        bytedata|=SDA;
        SCL=0;
        Delay();
    }
    return(bytedata);
}


//-------------------end 24CXX.H-----------------------------------------

⌨️ 快捷键说明

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