搜索
bottom↓
回复: 5

模拟I2c出现问题,要一次接收两个字节,但现在只能接收...

[复制链接]

出0入0汤圆

发表于 2015-8-9 11:48:40 | 显示全部楼层 |阅读模式
本帖最后由 huaidan1628 于 2015-8-9 19:05 编辑

现在只能接受第一个,感觉应该是接收第一个高字节之后那个主机应答有问题,但是没找到怎么有问题,大家帮忙看一下

void Ack_I2c(uchar a)          //应答
{         
       
    SCL_pout1();
        SCL_1();
    if(a==0)
    {   
        SDA_pout0();     /*在此发出应答或非应答信号 */
                SDA_1();
    }
    else
    {
        SDA_pout1();
                SDA_1();
    }   
        iic_delay();         //*时钟低电平周期大于4μs
    iic_delay();
    SCL_pout0();         //*清时钟线,钳住I2C总线以便继续接收*
    SCL_1();
    iic_delay();
    iic_delay();
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2015-8-9 13:15:10 | 显示全部楼层
没有非应答信号的函数

出0入0汤圆

 楼主| 发表于 2015-8-9 13:44:26 | 显示全部楼层
本帖最后由 huaidan1628 于 2015-8-9 13:45 编辑
miaoguoqiang 发表于 2015-8-9 13:15
没有非应答信号的函数


不就是在接收第一个字节之后第二个字节之前主机发送一个应答么,也用不到非应答啊,
那个void Ack_I2c(uchar a)          //0时应答,1时非应答

出0入0汤圆

发表于 2015-8-9 13:53:17 | 显示全部楼层
huaidan1628 发表于 2015-8-9 13:44
不就是在接收第一个字节之后第二个字节之前主机发送一个应答么,也用不到非应答啊,
那个void Ack_I2c(uc ...

在最后一个字节完成后发送一个非应答信号   再发送停止信号

出0入0汤圆

 楼主| 发表于 2015-8-9 14:09:44 | 显示全部楼层
miaoguoqiang 发表于 2015-8-9 13:53
在最后一个字节完成后发送一个非应答信号   再发送停止信号

试过了还是不好使

出0入0汤圆

 楼主| 发表于 2015-8-9 19:04:49 | 显示全部楼层
miaoguoqiang 发表于 2015-8-9 13:53
在最后一个字节完成后发送一个非应答信号   再发送停止信号

已经好了,是应答少了一个时钟
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 08:35

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表