找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2320|回复: 1
收起左侧

IIC总线的几种信号与单片机程序

[复制链接]
ID:586975 发表于 2019-8-1 10:37 | 显示全部楼层 |阅读模式
IIC 总线的几种信号1.起始和终止信号: 51hei图片20190801103458.png

从时序图可以看出,起始信号为,SCL=1,SDA下降沿;终止信号为SCL=1,SDA为上升沿,保持的时间是有限制的:
51hei图片20190801103515.png

具体的程序实现如下:
起始信号:SDA=1保持时间大于4。7us,随后SDA=0保持时间大于4us
?
1
2
3
4
5
6
7
8
9
/*SDA下降沿*/
void start()
{
SDA = 1; //顺序不能反了,先是SDA=1;
SCL = 1;
delay();
SDA = 0;
delay();
}



终止信号:SDA=0保持时间大于4us,随后SDA=1保持时间大于4。7us
?
1
2
3
4
5
6
7
8
9
/*SDA上升沿*/
void end()
{
    SDA = 0;        //顺序不能反了,先是SDA=0;
    SCL = 1;
    delay();
    SDA = 1;
    delay();
}



2.应答信号: 51hei图片20190801103520.png


传送的每一个字节必须保证是8位长度。数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随一位应答信号(即一帧共有9位)。
如:主机往总线上发送一个字节的数据后,释放总线,从机会把总线拉低(即应答信号),以表示这一字节发送成功
同理主机从总线上读取完一个字节的数据后,主机会把总线拉低,"告诉"从机这一字节的数据接收成功
51hei图片20190801103524.png


程序实现
应答信号:
?
1
2
3
4
5
6
7
8
9
void ack()
{
    uchar i = 0;
    SCL = 1;
    delay();
    while(SDA == 1 && i < 250)i++;
    SCL = 0;            //SCL=0,SDA可以改变
    delay();
}




回复

使用道具 举报

ID:198286 发表于 2019-8-14 21:21 | 显示全部楼层
进来研究下,这几天被1602  IIC搞晕了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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