- 1、本文档共9页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
- Aitken加速收敛算法.doc
- aix磁盘性能调优-3.docx
- Agilent3070系统电源配线.doc
- AlchemyClassicV152全部配方.doc
- Alchemy_ClassicHD版236种合成配方.doc
- ADAMS转动副摩擦参数设置.doc
- AndroidAPI差别.doc
- Android功能模块接口解析.doc
- AD_8362检测器详细介绍中文版.doc
- Android类库介绍.doc
- 2016-2017学年高中生物第二单元生态工程与生物安全第1章第2节我国的生态工程教案中图版选修3.doc
- 2022-2023学年小升初英语易错点专练06完形填空15篇(广州教科版专版含答案)2.docx
- 期中专项四年级英语下册(含答案)3.docx
- 期末卷(二)(含答案解析)-2022-2023学年高二历史期中期末复习备考必刷题(选择性必修一国家制度与社会治理).docx
- 第4课欧姆定律的应用第一讲欧姆定律实验探究(原卷版).docx
- Unit1限制性定语从句语法讲义人教版高一英语学生版213.docx
- 2023年宁波市初中毕业升学文化考试科学模拟卷(八).docx
- 5.3细胞呼吸的原理和应用课件高一上学期生物人教版必修12.pptx
- 高中政治更好发挥政府作用教学设计.docx
- 体悟民间故事中的幸福--五上《中国民间故事》导读课.docx
文档评论(0)