資源簡介
51單片機的I2C模擬通信驅動
void I2CStart();//開始
void I2CStop();//停止
bit I2CWrite(uint8 date);//寫操作
uint8 I2CReadNAK();//讀操作NACK
uint8 I2CReadACK();//讀操作ACK

代碼片段和文件信息
#include?“I2C.h“
#define?I2CDelay() {_nop_();_nop_();_nop_();_nop_();}
void?I2CStart()
{
I2C_SCL?=?1;
I2C_SDA?=?1;
I2CDelay();
I2C_SDA?=?0;
I2CDelay();
I2C_SCL?=?0;
}
void?I2CStop()
{
I2C_SCL?=?0;
I2C_SDA?=?0;
I2CDelay();
I2C_SCL?=?1;
I2CDelay();
I2C_SDA?=?1;
I2CDelay();
}
bit?I2CWrite(uint8?date)
{
uint8?mark;
bit?ack;
for(mark?=?0x80;mark?!=?0;mark?>>=1)
{
if((mark&date)==0)
I2C_SDA?=?0;
else
I2C_SDA?=?1;
I2CDelay();
I2C_SCL?=?1;
I2CDelay();
I2C_SCL?=?0;
}
I2C_SDA?=?1;
I2CDelay();
I2C_SCL?=?1;
ack?=?I2C_SDA;
I2CDelay();
I2C_SCL?=?0;
return?(~ack);
}
uint8?I2CReadNAK()
{
uint8?mask;
uint8?dat;
I2C_SDA?=?1;
for(mask?=?0x80;mask?!=?0;mask?>>=?1)
{
I2CDelay();
I2C_SCL?=?1;
if(I2C_SDA?==?0)
dat?&=?~mask;
else
dat?|=?mask;
I2CDelay();
I2C_SCL?=?0;
}
I2C_SDA?=?1;
I2CDelay();
I2C_SCL?=?1;
I2CDelay();
I2C_SCL?=?0;
return?dat;
}
uint8?I2CReadACK()
{
uint8?mask;
uint8?dat;
I2C_SDA?=?1;
for(mask?=?0x80;mask?!=?0;mask?>>=?1)
{
I2CDelay();
I2C_SCL?=?1;
if(I2C_SDA?==?0)
dat?&=?(~mask);
else
dat?|=?mask;
I2CDelay();
I2C_SCL?=?0;
}
I2C_SDA?=?0;
I2CDelay();
I2C_SCL?=?1;
I2CDelay();
I2C_SCL?=?0;
return?dat;
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????1327??2014-11-09?12:29??I2C.c
?????文件????????267??2014-11-07?16:48??I2C.h
?????文件????????115??2014-11-07?16:48??driver.h
-----------?---------??----------?-----??----
?????????????????1709????????????????????3
- 上一篇:Qt通過線性插值和矢量線性插值實現圖形動畫
- 下一篇:短信敏感詞檢測工具
評論
共有 條評論