- 1、本文档共62页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
单片机应用与项目开发--项目7
任务一、认识I2C总线 实际应用中,多数单片机系统使用的是单主结构形式,即挂在总线上的设备只有一个主机,其它设备均是从机。所谓主机是指启动数据传送、发出时钟信号、传输结束时发出终止信号的设备,通常主机由单片机或其它微处理器担当,被主机寻访的设备叫从机(从器件)。 一、认识I2C总线协议 例: 已知芯片24C02的器件标识地址为1010,如果引脚A2~A0全部接高电平,那么该芯片的器件地址为AEH或AFH,AEH表示写数据到该器件,AFH表示从该器件读数据。 4、发送非应答信号 void NAck(void){ SDA=1; //SDA先置1,发非应答信号 SCL=1; //SCL由低变高,产生一个时钟 delay5us(); //延时5us SCL=0; //时钟线SCL恢复到低电平} 5、向I2C总线发送一个字节 void SendByte(uchar c) {uchar n ; for(n=0;n8;n++) {if(c0x80) SDA=1; else SDA=0; SCL=1; delay5us(); SCL=0; c=c1; } delay5us(); 7、向有子地址器件发送多个字节 以上介绍的是I2C总线的基本操作,I2C总线完整的数据传输是由以上操作组合而成。设某从器件的地址为sla(写),如果希望向该器件由子地址suba开始的单元连续写入n个字节的数据dat1、dat2、……datn,相应的操作过程如图所示。 有阴影部分表示数据由主器件向从器件传送,无阴影部分表示数据由从器件向主器件传送。 bit SendStr(uchar sla,uchar suba,uchar *s,uchar n) { uchar i; Start(); //发起始信号,启动总线 SendByte(sla); //发送器件地址 if(ack_mk==0)return(0); //没能应答,操作失败 SendByte(suba); //发送器件子地址 if(ack_mk==0)return(0); //没能应答,操作失败 for(i=0;in;i++) //循环n次 { SendByte(*s); //发送一个字节数据 if(ack_mk==0)return(0); //没有应答,操作失败 s++; //指向下一个字节 } stop(); //发结束信号,结束本次数据传送 return(1); } 8、向有子地址器件读取多个字节 主机首先通过发送起始信号、从器件地址sla和希望读取的字节数据所在地址suba(器件子地址),执行一个伪写操作,在从器件应答之后,主器件重新发送起始信号和从器件地址sla+1(此时R/W 位置1),从器件响应并发送应答信号后,输出所要求的一个字节数据dat1,主器件随后发送应答信号ACK,以后从器件每输出一个字节数据,主机均回送ACK应答,当从器件输出最后一个字节数据datn后,主机回送非应答信号,接着发送停止信号结束总线传送。 bit RcvStr(uchar sla,uchar suba,uchar *s,uchar n) { Start(); //发起始信号,启动总线 SendByte(sla); //发送器件地址 if(ack_mk==0)return(0); //如果没能应答,操作失败 SendByte(suba); //发送器件子地址 if(ack_mk==0)return(0); //如果没能应答,操作失败 Start(); //再次发起始信号 SendByte(sla+1); //sla+1表示进行读操作 if(ack_mk==0)return(0);//如果没能应答,操作失败 for(i=0;in-1;i++) //对前no-1个字节发应答信号 { *s=RcvByte(); //接收数据
您可能关注的文档
最近下载
- 2025年辽宁医药职业学院单招职业适应性测试题库(历年真题).docx VIP
- 25个作业女性化教程.docx VIP
- 2025年沈阳中考英语试题及答案.docx VIP
- 广东省湛江市廉江市2023年小升初语文试卷.doc VIP
- PEP 三年级下册英语 期末真题测试卷(一) 含答案.pdf VIP
- 风电基础工程清单报价汇总表.pdf VIP
- 10万吨年合成氨技术改造项目可行性研究报告建议书.doc
- 信息素养:效率提升与终身学习的新引擎学习通超星期末考试答案章节答案2024年.docx VIP
- 2024年广东省揭阳市中考数学试卷(含答案逐题解析).docx
- 学前儿童科学教育-形成性考核四-学习资料-电大hb.docx VIP
文档评论(0)