刚刚入学单片机,学到iic后发现突然一下手足无措,挣扎一天,吧成果写下来
第一步,看电路图找准io口,这就不多说了错了怎么改也没用
第二步,看时序画图,理清思路
看时序图是个比较考验人的工作,这不慢慢来。
我们一步一来阅读这个时序图,时序图是很重要的,以后很多器件都要阅读时序图来驱动。我用的是5v的所以是最后一项。
先说明下SCL 和SDA的作用,SCL是时钟线,SDA是数据线注意区分二者。
A.iic 的 start的指令
首先SDA处于高电平后拉高SCL,待SCL 拉高Tsu.sta(0.6us)后拉低SDA
拉低Thd.sta(0.6)后在把SCL拉低。--Tf是建立电平变化的时间,表中为300ns可以忽略(一般单片机的指令周期为0.9us以上,这个过几天大家可以出门左转找找)
SCL拉低后维持Tlow(1.2us)完成以上步骤基本就算是完成了iic 的 start的指令。
B.写一个字节的数据
看图,
要注意先将数据传递给SDA数据线后再将SCL时钟线拉高并且维持Thigh(0.6us),之后将SCL拉低,随后将SDA拉低,ok循环8次就完成了一个字节数据的发送(向EEPROM写入)。
C.iic的响应指令,注意到每个字节传完后都会有个响应位,这个事很有必要的.
那这个ACK响应是怎样一个时序了?首先将SDA拉高也就是DATA out这条线路,这是由主机(单片机)拉高等待从机(EEPROM)响应。有响应则SDA会被从机拉低。
D.iic的数据读取和写入的顺序图有了以上几个基本的指令后就可以开始读写操作了,这里的顺序图和时序图有细微差别,顺序图讲述的是具体写入读出操作中写入地址数据的
顺序,和时序图不同。
1.写入一个字节
给出start指令,(数据时先高位后低位的)写入器件地址也就是EEPROM的地址,申明是是写入操作。给主机一个ACK。写入数据在EEPROM中的储存地址,响应一个ACK
写入数据,响应ACK结束。这样就完成了一个字节的写入。下一个字节重复这个操作。
2.读出一个字节
读出一个字节和写入有所不同
首先,给出开始指令,写入器件地址,标明写入。响应一个ACK.写入存储地址,响应ACK。在来一个START再次写入器件地址并且加一为什么要加以了?关键在于这个时候最后一位
变成READ标志位了
第三步,写代码,一气呵成
第四步,封装完善
作为记忆,以防自己以后又忘记了。
啊啊啊啊 .......又忘记了又得重新来过了
原文:http://www.cnblogs.com/bigben/p/3909070.html