51单片机—IIC—EEPROM(CAT24WCXX)—03
一、IIC总线简介
1.IIC总线的主要特点
IIC总线是一种简单、双向二线制同步串行总线。
(1)总线只有两根线,既串行时钟线(SCL)和串行数据线(SDA),这在设计中大大减少了硬件接口
(2)每个连接到总线上的器件都有一个用于识别的器件地址,(注意,器件地址由芯片内部硬件电路和外部地址引脚同时决定,这样就避免了~~你懂得)从而建立了简单的主从关系,从而每个器件都可以作为发送器,也可以作为接收器。
(3)同步时钟允许器件以不同的波特率进行通讯。
(4)同步时钟可以作为停止和重新启动串行口发送的握手电路(就是开始和结束信号)。
(5)串行的速率不定(标准100kb/s。。。其它的就不用关心了)。
(6)连接到同一总线的集成电路只受400pf的最大总线电容。
2.IIC总线的基本结构
机构图网上一推推的~~~
每个器件都有唯一的地址,器件两两之间都可以进行信息传送。当某个器件向总线上发送信息时,它就是发送器(也叫做主控制器),而当其从总线上接收信息时,它又成为接收器(从控制器)。在信息的传送过程中,主控制器发送的信号分为器件地址码、器件单元地址和数据3部分(这里你完全可以联系EEPROM,它们三个的功能看名字也能才出来,我就不写了)。
3.IIC总线的信息传送(这里才它XX的是重点,上边的都是废话)
当IIC总线没有数据传送时,数据线(SDA)和时钟线(SCL)都为高电平。当主控制器向某个器件传送信息时,首先应向总线传送开始信号,然后才能传送信息(这里信息包括地址啊,数据啊~~)当信息传送结束时还应该传送个结束信号,开始信号和结束信号的规定如下:
~~~~~~~~~~开始信号:SCL为高电平时,SDA由高变为低的跳变,开始传送数据。
汇编的代码:
START:
当然然后就是c的代码了:
void IIC_start()
{
}
~~~~~~~~~~~结束信号:SCL为高电平时,SDA由低变为高的跳变,结束传送数据。
还是先是汇编:(这里就不注释了,太烦了)
STOP:
c文件:
void
{
}
开始信号和结束信号之间的传送的是信息,信息的字节没有限制,但每个字节必须为8位,高位在前,低位在后。数据线SDA上每一位信息状态的改变只能发生在时钟线SCl为低电平期间(这里因为刚才开始信号和结束信号,SCl为高电平的期间SDA状态的改变已经被用来表示开始信号和结束信号)。同时每个字节后面必须接受一个应答信号(ACK),ACK是从器件接收到8位数据后向主控制器发出的特定的低电平脉冲,用来表示已经接收到数据(注意是在SCL为高,检测SDA是否为低电平,之前SDA要拉高),如果主器件没有受到应答信号,转到出错处理~~
~~~~~~~检测应答位的程序:
汇编程序:
;返回值ACK=1时表示应达
CACK:
CEND:
void IIC_ack()
{
}
主控器件每次传送的信息的第一个字节必须是器件的地址码,第二个字节为器件的单元地址,用于实现选择所操作的器件的内部单元,从第三个字节开始为传送的数据(这里器件的地址码自己可以上网上搜,高四位为器件的类型码,最低位为读写位,其他三位你懂得,自己的设置位~~~,然后就是器件的单元地址,这个就看你的器件的存储器地址了,最后就是数据~~~呵呵)。
4.IIC的总线读写操作
先介绍一下在IIC读写一个字节的数据~~~这样以后说起来就方便了
发送字节子程序:
先是asm文件形式:
;字节
51单片机IICEEPRO 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)