IIC_重点详解_个人总结.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
IIC_重点详解_个人总结

单片机的重点知识1IIC协议: 1、IIC协议说明: I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。 AT24C02的芯片地址如下图,1010为固定,A0,A1,A2正好与芯片的1,2,3引角对应,为当前电路中的地址选择线,三根线可选择8个芯片同时连接在电路中,当要与哪个芯片通信时传送相应的地址即可与该芯片建立连接,我所使用的实验板上三根地址线都为0。最后一位R/W为告诉从机下一字节数据是要读还是写,0为写入,1为读出。 AT24C02的芯片地址(0xa0为写,0xa1为读) 任一地址写入格式 任一地址读取数据格式 2、程序详解IO口模拟IIC: 起始和终止信号 :SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号;SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号。 void start()//起始信号 { SDA=1; Delay_us(10); SCL=1; Delay_us(10); SDA=0; Delay_us(10); } Void stop()//终止信号 { SDA=0; Delay_us(10); SCL=1; Delay_us(10); SDA=1; Delay_us(10); } 数据传送格式(1)字节传送与应答 每一个字节必须保证是8位长度。数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)。如果一段时间内没有收到从机的应答信号,则自动认为从机已正确接收到数据。 Void ack()//应答信号 { uchar i; SCL=1; Delay_us(10); While((SDA==1)(i==250)) i++;//如果SDA=0则表示已经应答或者等待一会,就默认已经应答 SCL=0; Delay(); } Void noack()//非应答信号 { SDA=1; Delay(); SCL=1; Delay();//SCL有变化时,SDA保持不变,即非应答 SCL=0; Delay(); } void init()//初始化信号 { scl=1; sda=1; } /////////////////////写一个字节////////////////////// void iicwr_byte(uchar dat) { uchar i; scl=0; //只有在时钟线上的信号为低电平时,数据线上的高电平或低电平才允许变化(补:时钟线为高电平时,才能进行读写) delay(); for(i=0;i8;i++)//每一个字节,必须保持8位的数据长度 { if(dat0x80)//数据传送时,先传送最高位MSB { sda=1; } else { sda=0; } dat=dat1;//左移 delay(); scl=1; //时钟线为高电平时,才能进行读写 delay(); scl=0; //进行数据读写时,拉低时钟线,以保持数据稳定,有效 delay(); } sda=1; //每传送完一位就将数据线释放,以便下一位数据的传送; delay(); } //////////////////////读一个字节////////////////////// uchar iicre_byte() { uchar i,dat; scl=0; delay(); sda=1; //数据线释放 delay(); for(i=0;i8;i++) { scl=1; //时钟线为高电平时,才能进行读写 delay(); dat=dat1;//判断8次,移位7次 if(sda==1) { dat++;//自增,个位加1 } scl=0;//拉低时钟线,以保证数据的稳定,和读出数据的正确性 delay(); } return dat; } //////////////////////写操作///////////////////// void write_byte(uchar address,uchar dat)//指定地址写一个字节数据 { init(); //初始化 start(); iicwr_byte(0xa0);//写器件地址(a是地址固定部分(1010),0的前三位是选择位,第四位0为写;若第四位为1,则是读;) ack(); iicwr_byt

文档评论(0)

shenlan118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档