- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验八 IC通信协议
实验八 I2C通信协议
实验目的:
培养学生阅读资料的能力;
2、加深学生对I2C总线通信协议的理解;
3、加强学生对模块化编程的理解;
二、实验环境:
1、硬件环境:PC机一台、单片机实验板一块、母头串口交叉线、USB电源线;
2、软件环境:keil uVision2集成开发环境;
STC-ISP下载上位机软件;
实验原理:
要学会I2C通信协议的编程,关键是要看懂并掌握其时序图,理解对I2C通信协议相关子程序的实验编写。I2C通信协议的总线时序图如下所示:
I2C总线时序图
I2C相关子程序的详细介绍
起始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。
结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。
起始信号和结束信号的时序图如下所示:
起始信号和结束信号的时序图
起始信号的流程如下:
SCL和SDA拉高,保持时间约为0.6us-4us;
拉低SDA,保持时间为约为0.6us-4us;
拉低时钟线
结束信号的流程如下:
SCL置高电平,SDA置低电平,保持时间约为0.6us-4us
SDA拉高,保持时间约为1.2-4us;
应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。应答信号的时序图如下所示:
应答时序图
发送时的应答信号
;**********应答信号**********
ACK: SETB SDA ;数据线置高
SETB SCL ;时钟线置高
ACALL DELAY
JB SDA,$ ;等待数据线变低
ACALL DELAY
CLR SCL ;时钟线置低
RET
注意:这里如果数据线一直为高将进入死循环,所以一般我们都会在这做一个容错的处理。具体的程序如下:
ACK: MOV R4,#00H
SETB SDA
SETB SCL
LOP0: JNB SDA,LOP
DJNZ R4,LOP0 ;循环255次
LOP: ACALL DEL
CLR SCL
RET
接收时的应答信号
ACK1: CLR SDA ;数据线置低
SETB SCL ;时钟线置高
NOP
NOP
CLR SCL ;时钟线置低
SETB SDA ;数据线置高
RET
字节的发送和接收
写周期时序图
一字节数据发送子程序,流程如下:
图6-22 发送子程序流程图
(2)一字节数据接收子程序,流程如下:
图6-23 接收子程序流程图
7、写操作
(1)字节写
图6-24 字节写时序图
流程如下:
图6-25 字节写的流程图
(2)页写
图6-26 页写时序图
页写流程如下:
7
8、读操作
(1)选择读
图6-28 选择读时序图
图6-29 NO ACK时序图
(2)连续读
图6-30 连续读时序图
实验原理图:
I2C总线电路图
实验例题:
例题一 编写一程序,实现I2C的指定字节读写,用24C08来记录单片机复位或者开机的次数,并将复位或者开机的次数显示在数码管上。
程序分析 本程序利用单片机复位时程序总是从0000H开始执行的特性。用24C08的一个单元来存储开机的次数,程序一开始就将次数读出来,加上本次的开机,显示在数码管上。再将加1之后的数据存入24c08的对应单元。
程序代码
;**************************************************************************
;****程序功能:实现对24C08的字节读写,用24C08记录开机次数,显示在数码管上
;****程序编写: 李代勇
;****编写日期: 2007/2/04
;**********************************************************
原创力文档


文档评论(0)