📄 hard_iic.h
字号:
/*====================
====================*/
#define ERROR_ADD_UP 6000
unsigned char iic_start(void)
{
unsigned int i=0;
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
while (!(TWCR & (1<<TWINT)))
{
i++;
if(i==ERROR_ADD_UP)
return 0;
}
if ((TWSR & 0xF8) == 0x08 || (TWSR & 0xF8) == 0x10)
return 1;
return 0;
}
/////////////////////
unsigned char iic_send(unsigned char x)
{
unsigned int i=0;
TWDR = x;
TWCR = (1<<TWINT) | (1<<TWEN);
while (!(TWCR & (1<<TWINT)))
{
i++;
if(i==ERROR_ADD_UP)
return 0;
}
if ((TWSR & 0xF8) == 0x18 || (TWSR & 0xF8) == 0x28 || (TWSR & 0xF8) == 0x40)
return 1;
return 0;
// return TWSR & 0xf8;
}
//////////////////////////
unsigned char iic_receive(void)
{
unsigned int i=0;
TWCR = (1<<TWINT)|(1<<TWEN);
while (!(TWCR & (1<<TWINT)))
{
i++;
if(i==ERROR_ADD_UP)
return 0;
}
return TWDR;
}
/////////////////////
void iic_stop(void)
{
TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);
}
/////////////////////
void iic_init(void)
{
TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);
}
/*=========================================
************IIC写*********************
=========================================*/
unsigned char IICwrite(unsigned char drive,unsigned char tmp_address,unsigned char tmp_data)
{
iic_init();
if(iic_start()==0)
return 0;
if(iic_send(drive)==0)
return 0;
if(iic_send(tmp_address)==0)
return 0;
if(iic_send(tmp_data)==0)
return 0;
iic_stop();
return 1;
}
/*=========================================
************IIC读*********************
=========================================*/
unsigned char IICread(unsigned char drive,unsigned char tmp_address)
{
register unsigned char tmp;
iic_stop();
if(iic_start()==0)
return 0;
if(iic_send(drive)==0)
return 0;
if(iic_send(tmp_address)==0)
return 0;
if(iic_start()==0)
return 0;
if(iic_send(drive|0x01)==0)
return 0;
tmp=iic_receive();
iic_stop();
return tmp;
}
/*===================
END
====================*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -