- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
项目七 I2C总线与EEPROM I2C总线是由PHILIPS公司开发的两线式串行总线,多用于连接微处理器及其外围芯片。I2C总线的主要特点是接口方式简单,两条线可以挂多个参与通信的器件,即多机模式,而且任何一个器件都可以作为主机,当然同一时刻只能有一个主机。I2C属于同步通信,SCL时钟线负责收发双方的时钟节拍,SDA数据线负责传输数据。I2C的发送方和接收方都以SCL这个时钟节拍为基准进行数据的发送和接收。 7.1 I2C总线介绍 7.1.1 I2C时序 在硬件上,I2C总线是由时钟总线SCL和数据总线SDA两条线构成,连接到总线上的所有器件的SCL都连到一起,所有SDA都连到一起。I2C总线是开漏引脚并联的结构,因此我们外部要添加上拉电阻。对于开漏电路外部加上拉电阻,就组成了线“与”的关系。总线上线“与”的关系就是说,所有接入的器件保持高电平,这条线才是高电平,而任何一个器件输出一个低电平,那这条线就会保持低电平,因此可以做到任何一个器件都可以拉低电平,也就是任何一个器件都可以作为主机. 虽然说任何一个设备都可以作为主机,但绝大多数情况下我们都是用单片机来做主机,而总线上挂的多个器件,每一个都像电话机一样有自己唯一的地址,在信息传输的过程中,通过这唯一的地址就可以正常识别到属于自己的信息,在KST-51开发板上,就挂接了2个I2C设备,一个是24C02,一个是PCF8591。 I2C通信流程包括起始信号、数据传输和停止信号。 void I2CStart() { I2C_SDA = 1; I2C_SCL = 1; I2CDelay(); I2C_SDA = 0; I2CDelay(); I2C_SCL = 0; } void I2CStop() { I2C_SCL = 0; I2C_SDA = 0; I2CDelay(); I2C_SCL = 1; I2CDelay(); I2C_SDA = 1; I2CDelay(); } bit I2CWrite(unsigned char dat) { bit ack = 0; unsigned char mask; for(mask=0x80; mask!=0; mask=1) { if((maskdat) == 0) I2C_SDA = 0; else I2C_SDA = 1; I2CDelay(); I2C_SCL = 1; I2CDelay(); I2C_SCL = 0; } I2C_SDA = 1; I2CDelay(); I2C_SCL = 1; ack = I2C_SDA; I2CDelay(); I2C_SCL = 0; return ack; } unsigned char I2CReadNAK() { unsigned char mask; unsigned char dat; I2C_SDA = 1; for(mask=0x80; mask!=0; mask=1) { I2CDelay(); I2C_SCL = 1; if(I2C_SDA == 0) dat = ~mask; else dat |= mask; I2CDelay(); I2C_SCL = 0; } I2C_SDA = 1; I2CDelay(); I2C_SCL = 1; I2CDelay(); I2C_SCL = 0; return dat; } I2CDelay(); I2C_SCL = 0; } I2C_SDA = 0; I2CDelay(); I2C_SCL = 1; I2CDelay(); I2C_SCL = 0; return dat; } unsigned char I2CReadACK() { unsigned char mask; unsigned char dat; I2C_SDA = 1; for(mask=0x80; mask!=0; mask=1) { I2CDelay(); I2C_SCL = 1; if(I2C_SDA == 0) dat = ~mask; else dat |= mask; 起始信号:I2C通信的起始信号的定义是SCL为高电平期间,SDA由高电平向低电平变化产生一个下降沿,表示起始信号,如上图中的Start部分所示。 数据传输:I2C通信是高位在前,低位在后。I2C没有固定波特率,但是有时序的要求,要求当SCL在低电平的时候,SDA允许变化,也就是说,发送方必须先
您可能关注的文档
- 基础会计课件第十章会计工作组织.pptx
- 基础会计课件第四章复式记账与借贷记账法.pptx
- 基础会计课件第五章会计凭证.pptx
- 基础会计课件第一章绪论.pptx
- 家具设计电子教案.ppt
- 金融理论与实务模块八金融市场.pptx
- 金融理论与实务模块二信用.pptx
- 金融理论与实务模块九通货膨胀与通货紧缩.pptx
- 金融理论与实务模块六中央银行.pptx
- 金融理论与实务模块三利息与利息率.pptx
- 单片机原理及应用项目化教程(C语言版)项目三数码管基础与矩阵键盘扫描.ppt
- 单片机原理及应用项目化教程(C语言版)项目十实时时钟DS1302.ppt
- 单片机原理及应用项目化教程(C语言版)项目十一红外与步进电机.ppt
- 单片机原理及应用项目化教程(C语言版)项目四定时器与数码管动态显示.ppt
- 单片机原理及应用项目化教程(C语言版)项目五外部中断与串行通信.ppt
- 单片机原理及应用项目化教程(C语言版)项目一介绍.ppt
- 单选-电气一次设计题库(按设计流程整理).doc
- 电气一次设计题库应会部分答辩题.doc
- 多选-电气一次设计题库(按设计流程整理).doc
- 公共设施设计(第二版)教学课件.ppt
原创力文档


文档评论(0)