IIC 总线
协议
离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载
---以存储芯片 at24c64为例 邮箱:zhzhchang@126.com
------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------
小瓶盖整理 技术博客:http://blog.csdn.net/zhzht19861011
Page 1 of 13 源于魏老师的产品:红外抄表器器
IIC 总线协议
前言:
1.只有在总线空闲时才允许启动数据传送.
2.在数据传送过程中,当时钟线为高电平时,数据线必须保持稳定状态,不允许有跳变.时
钟线为高电平时,数据线的任何电平变化将被看做总线的起始或停止信号.
3. 任何将数据传送到总线的器件作为发送器任何从总线接收数据的器件为接收器, 主
器件和从器件都可以作为发送器或接收器但由主器件控制传送数据.
4.有两根数据线:
SDA : IIC 数据传送位
SCL : IIC 时钟控制位
下面对 IIC 的底层驱动加以说明,并给出汇编和 C 语言的代码,以 AT24C64 为例.在这之
前先定义一些常量和公共代码:
汇编:
SDA BIT P3.4 ;数据端
SCL BIT P3.5 ;时钟端
DELAY : NOP ;延时子程序,根据单片机的晶振不同,延时长短略有不同
NOP ;12MHZ晶振
NOP
NOP
NOP
NOP
RET
C语言:
sbit SDA = P3.4;
sbit SCL = P3.5;
void delay(void) //延时子程序
{
unsigned char i;
for(i=0;i<10;i++);
}
起始信号:
时钟线保持高电平期间,数据线电平从高到低的跳变作为 IIC 总线的起始信号.
汇编:
IIC_ST: ;IIC 起始代码
LCALL DELAY
CLR SCL
LCALL DELAY
IIC 总线协议---以存储芯片 at24c64为例 邮箱:zhzhchang@126.com
------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------
小瓶盖整理 技术博客:http://blog.csdn.net/zhzht19861011
Page 2 of 13 源于魏老师的产品:红外抄表器器
LCALL DELAY
SETB SDA
LCALL DELAY
LCALL DELAY
SETB SCL
LCALL DELAY
LCALL DELAY
CLR SDA
LCALL DELAY
LCALL DELAY
CLR SCL
LCALL DELAY
RET
C语言:
void iic_start(void)
{
SCL=0;
delay();
SDA=1;
delay();
SCL=1;
delay();
SDA=0;
delay();
SCL=0;
delay();
}
停止信号:
时钟线保持高电平期间,数据线电平从低变高.
汇编:
IIC_SP:
LCALL DELAY
CLR SCL
LCALL DELAY
LCALL DELAY
CLR SDA
LCALL DELAY
LCALL DELAY
SETB SCL
LCALL DELAY
LCALL DELAY
IIC 总线协议---以存储芯片 at24c64为例 邮箱:zhzhchang@126.com
------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------
小瓶盖整理 技术博客:http://blog.csdn.net/zhzht19861011
Page 3 of 13 源于魏老师的产品:红外抄表器器
SETB SDA
LCALL DELAY
RET
C语言:
void iic_stop(void)
{
delay();
SCL=0;
delay();
SDA=0;
delay();
SCL=1
delay();
SDA=1;
delay();
}
器件寻址:
首先发送一个起始信号,启动发送过程,然后发送它所需要的寻址的从器件的地址.8从位
器件地址的高 4位固定为 1010,接下来的三位为器件的地址位,最低一位作为读写控制位.
1: 表示从器件进行读;
0: 表示对器件进行写.
应答信号:
IIC 总线数据传送时,每成功的传送一个字节数据后,接收器都必须产生一个应答信号.应
答的器件在第九个时钟周期时将 SDA拉低,表示收到一个 8位数据.
写操作:(字节模式)
主器件发送起始信号和从器件地址信息(R/W 位清 0)给从器件,在从器件送回应答信号
后,主器件发送两个 8位地址字写入从器件的地址指针,主器件在收到从器件的应答信号后,
再发送数据到到被寻址的从器件存储单元,从器件再次应答,并在主器件产生停止信号后开始
内部数据的擦写.
汇编:
;##############写数据到 at24c64-ATW2##############
;说明:写一字节数据到 at24c64,失败 PSW.5置 1
;入口参数:A
;出口参数:无
;###############################################
IIC_WB:
MOV R2,#8
CLR SCL
IIC 总线协议---以存储芯片 at24c64为例 邮箱:zhzhchang@126.com
------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------
小瓶盖整理 技术博客:http://blog.csdn.net/zhzht19861011
Page 4 of 13 源于魏老师的产品:红外抄表器器
J4: RLC A
LCALL DELAY
LCALL DELAY
MOV SDA,C
LCALL DELAY
LCALL DELAY
SETB SCL
LCALL DELAY
LCALL DELAY
CLR SCL
DJNZ R2,J4
SETB SDA
LCALL DELAY
LCALL DELAY
SETB SCL ;第九个时钟周期
LCALL DELAY
LCALL DELAY
JB SDA,J1 ;正常情况下,第九个时钟周期收到的 SDA 应为低
CLR SCL ;释放总线
LCALL DELAY
LCALL DELAY
CLR PSW.5 ;接收成功
LJMP edw
J1: CLR SCL ;释放总线
SETB PSW.5 ;接收失败
edw: RET
C语言:
void iic_write_byte(unsigned char w_byte)
{
unsigned char i;
SCL=0;
for(i=0;i<8;i++)
{
delay();
if((w_byte<
本文档为【IIC总线协议-基于at24c64】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。