📄 avr_i2c.h
字号:
#define uchar unsigned char
#define uint unsigned int
#define ICSDA PORTE.1
#define ICSCK PORTE.0
#define HIGH 1
#define LOW 0
void InitialIC(void)
{
DDRE.1=1;
DDRE.0=1;
ICSDA= LOW;
delay_us(5);
ICSCK=LOW;
delay_us(5);
ICSDA= HIGH;
ICSCK= HIGH;
delay_us(5);
}
void StartIC(void)
{
DDRE.0=1;
DDRE.1=1;
ICSCK= HIGH;
ICSDA=1;
delay_us(10);
ICSDA=0;
delay_us(10);
ICSCK=0;
}
void StopIC(void)
{
DDRE.0=1;
DDRE.1=1;
ICSCK=0;
delay_us(5);
ICSDA=0;
delay_us(5);
ICSCK=1;
delay_us(5);
ICSDA=1;
}
unsigned char SendByteToIC(unsigned char byte)
{
unsigned char i=0;
DDRE.1=1;
DDRE.0=1;
ICSCK=0;
ICSDA=0;
for(i=0;i<8;i++)
{
if(byte&0x80)ICSDA=1;
else ICSDA=0;
delay_us(10);
ICSCK=LOW;
delay_us(10);
ICSCK=HIGH;
delay_us(10);
ICSCK=LOW;
delay_us(10);
byte<<=1;
}
//ICSDA=1;
DDRE.1=0;
ICSCK=LOW;
delay_us(10);
ICSCK=HIGH;
delay_us(10);
//check ans here
delay_us(10);
ICSCK=LOW;
ICSDA=0;
DDRE.1=1;
return 0;
}
unsigned char ReadByteFromIC()
{
unsigned char temp1=0;
ICSDA=0;
DDRE.1=0;
delay_us(10);
temp1=0;
ICSCK=HIGH;
delay_us(10);
if(PINE.1)temp1 +=0x80;
else temp1 +=0x00;
delay_us(10);
ICSCK=LOW;
delay_us(10);
ICSCK=HIGH;
delay_us(10);
if(PINE.1)temp1 +=0x40;
else temp1 +=0x00;
delay_us(10);
ICSCK=LOW;
delay_us(10);
ICSCK=HIGH;
delay_us(10);
if(PINE.1)temp1 +=0x20;
else temp1 +=0x00;
delay_us(10);
ICSCK=LOW;
delay_us(10);
ICSCK=HIGH;
delay_us(10);
if(PINE.1)temp1 +=0x10;
else temp1 +=0x00;
delay_us(10);
ICSCK=LOW;
delay_us(10);
ICSCK=HIGH; delay_us(10);
if(PINE.1)temp1 +=0x8;
else temp1 +=0x00;
delay_us(10);
ICSCK=LOW;
delay_us(10);
ICSCK=HIGH; delay_us(10);
if(PINE.1)temp1 +=0x4;
else temp1 +=0x00;
delay_us(10);
ICSCK=LOW;
delay_us(10);
ICSCK=HIGH; delay_us(10);
if(PINE.1)temp1 +=0x2;
else temp1 +=0x00;
delay_us(10);
ICSCK=LOW;
delay_us(10);
ICSCK=HIGH; delay_us(10);
if(PINE.1)temp1 +=0x1;
else temp1 +=0x00;
delay_us(10);
ICSCK=LOW;
delay_us(10);
ICSCK=HIGH;
delay_us(10);
ICSCK=LOW;//send Nack to ....
delay_us(10);
// DDRF.1=0;
return(temp1);
}
int WriteByteToICAdd(int address, unsigned char byte)
{
unsigned char addm,addl;
StartIC();delay_us(10);
//slave =DEVICE_CODE_Memory&WR_CMD;;
SendByteToIC(0xa0);
delay_us(10);
addm = (unsigned char)(address>>8);
SendByteToIC(addm);
delay_us(10);
addl = (unsigned char)address;
SendByteToIC(addl);
delay_us(10);
SendByteToIC(byte);
delay_us(10);
StopIC();
delay_us(10);
}
unsigned char ReadByteFromICAdd(int address)
{
unsigned char addm,addl;
unsigned char data1;
StartIC();
delay_us(30);
SendByteToIC(0xa0);//send slave address
delay_us(30);
addm = (unsigned char)(address>>8);
SendByteToIC(addm);//send MSB of the address
delay_us(30);
addl = (unsigned char)address;
SendByteToIC(addl);//send LSB of the address
delay_us(30);
StartIC();
delay_us(30);
SendByteToIC(0xa1);
delay_us(30);
data1=ReadByteFromIC();
delay_us(30);
StopIC();
return(data1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -