?? 軟件模擬i2c通信協(xié)議.txt
字號:
/*I2C的開始*/
void I2CStart(void)
{
EA=0;
AT24C02_SDA=1; AT24C02_SCL=1; SomeNOP();//INI
AT24C02_SDA=0; SomeNOP(); //START
AT24C02_SCL=0;
}
/*I2C的結(jié)束*/
void I2CStop(void)
{
AT24C02_SCL=0; AT24C02_SDA=0; SomeNOP(); //INI
AT24C02_SCL=1; SomeNOP(); AT24C02_SDA=1; //STOP
EA=1;
}
/*I2C的應(yīng)答*/
WaitAck(void)
{
unsigned char errtime=255;//因故障接收方無ACK,超時值為255。
AT24C02_SDA=1;SomeNOP();
AT24C02_SCL=1;SomeNOP();
SystemError=0x10;
while(AT24C02_SDA)
{ errtime--;
if(!errtime)
{ I2CStop();
SystemError=0x11;
return;
}
}
AT24C02_SCL=0;
}
/*I2C的無應(yīng)答(一般情況不用,除非有要求的器件)*/
void SendNotAck(void)
{
AT24C02_SDA=1; SomeNOP();
AT24C02_SCL=1; SomeNOP();
AT24C02_SCL=0;
}
/*I2C發(fā)送一個數(shù)據(jù)*/
void I2CSendByte(unsigned char ch)
{
unsigned char i=8;
while(i--)
{
AT24C02_SCL=0;_nop_();
AT24C02_SDA=(bit)(ch&0x80); ch<<=1; SomeNOP();
AT24C02_SCL=1; SomeNOP();
}
AT24C02_SCL=0;
}
/*I2C接收一個數(shù)據(jù)*/
unsigned char I2CReceiveByte(void)
{
unsigned char i=8;
unsigned char dat=0;
AT24C02_SDA=1;
while(i--)
{
dat<<=1;
AT24C02_SCL=0;SomeNOP();
AT24C02_SCL=1;SomeNOP();
dat|=AT24C02_SDA;
}
AT24C02_SCL=0;
return(dat);
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -