打印

转:单片机学习IIC的问题

[复制链接]
1335|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
清晨咖啡|  楼主 | 2011-11-29 13:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这两天在学习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 即从设备忙,不能应答 那后面的一串函数就可能出错啊
这段代码是书上的。。。。。
沙发
TI佟掌柜| | 2011-11-29 13:50 | 只看该作者
不错,收藏了!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

149

帖子

1

粉丝