关于51模拟IIC总线的问题

2019-03-24 18:40发布

自己用proteus+Keil联调练习单片机编程,简单的24c02c的读取。结果每次写入第一个byte之后(0xa0),之后写入的数据都是0x00。貌似是应答信号的问题。
void I_ack()
{                        
    SDA=0;
    delay();
    SCL=1;
    delay();
    SDA=1;
    delay();
    SCL=0;
    delay();
}
貌似这样写,没什么错呀。。嘿嘿,新人,各位勿喷。。。求一起探讨一下 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
cjlong69
1楼-- · 2019-03-25 00:25
bit IIC_Ack(void)
// 接受应答信号
{
   bit ACK_bit;  //定义一个位变量,用来暂存应答状态
   SDA = 1;  //释放数据总线,准备接受应答信号
   delayNOP();
   SCL = 1;  //拉高时钟线
   delayNOP();
   ACK_bit = SDA;  //读取应答信号的状态
   delayNOP();
   SCL = 0;  //拉低时钟线
   return ACK_bit;  //返回应答信号的状态,0表示应答,1表示非应答
}  
你可以参考下这个,SDA需要先释放,最好做一个应答反馈
Grey
2楼-- · 2019-03-25 03:10
我有点疑惑。。。貌似读取应答的时候,51单片机的引脚不能直接读取高电平呀。。。还有参考了你这个改了一下。。依然范特西。。。很坑的就是只能写入0xa0,第一个byte

一周热门 更多>