您现在所在的是:

单片机论坛

回帖:1个,阅读:344 [上一页] [1] [下一页]
700
xiaobaibest
文章数:1
年度积分:50
历史总积分:700
注册时间:2011/10/13
发站内信
发表于:2011/10/13 21:09:44
#0楼
单片机学习IIC的问题

这两天在学习IIC  实在是学的一头雾水   有好多问题   特意发帖  如能相助  不胜感激
首先 看一段代码:

void WriteSet(unsigned char add, unsigned char dat)
// 在指定地址addr处写入数据WriteCurrent
{
start(); //开始数据传递
WriteCurrent(OP_WRITE); //选择要操作的AT24Cxx芯片,并告知要对其写入数据
Ask();
WriteCurrent(add); //写入指定地址
Ask();
WriteCurrent(dat); //向当前地址(上面指定的地址)写入数据
Ask();
stop(); //停止数据传递
delaynms(4); //1个字节的写入周期为1ms, 最好延时1ms以上
}

bit Ask() //检测应答
{
bit ack_bit; //储存应答位
SDA = 1; // 发送设备(主机)应在时钟脉冲的高电平期间(SCL=1)释放SDA线,
//以让SDA线转由接收设备(AT24Cxx)控制
_nop_(); //等待一个机器周期
_nop_(); //等待一个机器周期
SCL = 1; //根据上述规定,SCL应为高电平
_nop_(); //等待一个机器周期
_nop_(); //等待一个机器周期
_nop_(); //等待一个机器周期
_nop_(); //等待一个机器周期
_nop_(); //等待一个机器周期
ack_bit = SDA; //接受设备(AT24Cxx)向SDA送低电平,表示已经接收到一个字节
//若送高电平,表示没有接收到,传送异常 结束发送
SCL = 0; //SCL为低电平时,SDA上数据才允许变化(即允许以后的数据传递)
return ack_bit; // 返回AT24Cxx应答位
}

问题:在WriteSet 中的ASK()  为什么没有对返回值进行处理?   有可能我返回还是1   即从设备忙,不能应答     那后面的一串函数就可能出错啊    
这段代码是书上的。。。。。
1121
屏凡
文章数:78
年度积分:50
历史总积分:1121
注册时间:2006/4/21
发站内信
发表于:2011/11/4 14:03:52
#1楼
书上多是简单的例子
实际应用加些纠错处理

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

46.8003