📄 iic2.h
字号:
//---------------------------------------------------------------------------
//*****************************************************************//
//*************** IIC fuction ******************************//
//*****************************************************************//
//---------------------------------------------------------------------------
sbit SCL=P1^0;
sbit SDA=P1^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);
//---------------------------------------------------------------------------
/********************************************
内部函数,延时
********************************************/
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 + -