Board logo

标题: 哪位大虾有IIC的详细写法步骤啊!(最好是中文的) [打印本页]

作者: help02034025    时间: 2006-4-16 21:28     标题: 哪位大虾有IIC的详细写法步骤啊!(最好是中文的)

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


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


作者: zhwdy81    时间: 2006-4-20 10:19

//************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); //返回读到的数据
}




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0