首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

哪位大虾有IIC的详细写法步骤啊!(最好是中文的)

哪位大虾有IIC的详细写法步骤啊!(最好是中文的)

哪位大虾有IIC的详细写法步骤啊!(最好是中文的,有例程更好)


小弟我刚学,有很多不会的地方,请大家多多指教!!

HELP!
//************control pin********************************************/
#define sda PTD_PTD6 //数据
#define scl PTD_PTD4 //时钟
#define pmsda DDRD_DDRD6 //数据传输方向


//******************************************************************************
//函数: void start(void)
//描述: 读写数据启动函数
//参数: none
//返回值: none
//*******************************************************************************
void start(void)
{
pmsda=1; // DDRD_DDRD6=1;输出
sda=1; // PTD_PTD6=1; 数据
asm(nop); //空操作;
scl=1; // PTD_PTD4=0; 时钟
asm(nop); //空操作;
sda=0; //
asm(nop); //空操作;
scl=0; //
}
//******************************************************************************
//函数: void stop(void)
//描述: 读写数据停止函数
//参数: none
//返回值: none
//*******************************************************************************
void stop(void)
{
pmsda=1; //pmsda=1; DDRD_DDRD6=1; 输出
sda=0; //sda=0; PTD_PTD6=0 数据
asm(nop); //空操作
scl=1; //scl=1; PTD_PTD4=1 时钟
asm(nop); //空操作;
sda=1; //
asm(nop); //空操作;
scl=0; //
}
//******************************************************************************
//函数: void cack(void)
//描述: 发数据重新启动函数
//参数: none
//返回值: none
//*******************************************************************************
void cack(void)
{
pmsda=1; // pmsda=1; DDRD_DDRD6=1;输出
sda=1; // sda=1; PTD_PTD6=1; 数据
scl=1; // 空操作
sda=0; //
asm(nop); // 空操作
scl=0; // scl=0; PTD_PTD4=0 时钟
sda=1; // ?
}
//******************************************************************************
//函数: void sendbyte(unsigned char Data)
//描述: 读数据的函数
//参数: 向EEPROM中发送的数据
//返回值: none
//*******************************************************************************
void sendbyte(unsigned int date)
{
unsigned i;
pmsda=1; //pmsda=1 DDRD_DDRD6 =1;输出
for(i=0;i<8;i++)
{
if(date&0x80) sda=1; //判断数据的最高位,为1 sda=1;数据
else sda=0; //否则 sda=0;
scl=1; //scl=1;PTD-PTD4=1 时钟
asm(nop); //空操作
scl=0;
asm(nop); //空操作
date=date<<1; //数据左移一位
} //
cack(); //函数的调用
}
//******************************************************************************
//函数: unsigned char IICreceivebyte()
//描述: 读数据的函数
//参数: none
//返回值: 读到的数据
//*******************************************************************************
unsigned char IICreceivebyte()
{
unsigned int i=8; //定义变量
unsigned char receivebyte=0;
pmsda=0; //pmsda=0; 输入
scl=0; //scl=0; 籔TD-PTD4=1 时钟
while(i--) //循环8次
{
scl=1;
receivebyte=(receivebyte<<1)|sda; //receivebyte左移一位与sda相或,
scl=0;
}
return(receivebyte); //返回读到的数据
}
欢迎大家到汽车电子群2838085!
让我们推动中国汽车前进!
发送一个字节这样可以吗?
start();
sendbyte(0xa0);
sendbyte(0x55);
stop();
//===========================
返回列表