7I2C协议实验报告.docx

上传人:b****1 文档编号:408966 上传时间:2022-10-09 格式:DOCX 页数:10 大小:89.39KB
下载 相关 举报
7I2C协议实验报告.docx_第1页
第1页 / 共10页
7I2C协议实验报告.docx_第2页
第2页 / 共10页
7I2C协议实验报告.docx_第3页
第3页 / 共10页
7I2C协议实验报告.docx_第4页
第4页 / 共10页
7I2C协议实验报告.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

7I2C协议实验报告.docx

《7I2C协议实验报告.docx》由会员分享,可在线阅读,更多相关《7I2C协议实验报告.docx(10页珍藏版)》请在冰豆网上搜索。

7I2C协议实验报告.docx

7I2C协议实验报告

协议

1、实验目的

1、熟悉

协议;

2、掌握

接口EEPROM的读写方法;

3、掌握利用I/O来实现

信令。

二、实验内容

实验提供I2C协议库(光盘/I2C软件包)。

将A2区的P16、P17连接D5区的SCL、SDA,短接JP1跳线。

1、写入24WC02的80H号字节地址,并读取进行验证;

2、连续写入24WC02的80H号字节地址开始一页的内容,并读取进行验证。

三、protel电原理图

 

四、程序流程图

1、单字节2、页

 

 

五、汇编程序

1、单字节

;平台定义变量

ACKBIT10H;应答标志位

SLADATA51H;器件从地址

SUBADATA52H;器件子地址

NUMBYTEDATA10H;读写的字节数

;使用前定义常量

SDAEQUP1.7;I2C总线定义

SCLEQUP1.6

MTDEQU30H;发送数据缓冲区首址(缓冲区30H3FH)

MRDEQU40H;接收数据缓冲区首址缓冲区404FH

;定义器件地址

PCF8574EQU40H

SAA1064EQU70H

CSI24WCXXEQU0A0H

ORG0000H

AJMPMAIN

ORG0080H

MAIN:

MOVSLA,#0A0H

CLRACK

MOVSUBA,#80H

MOVNUMBYTE,#01H

MOVA,#00H

MOVP3,A

MOVA,#55H

PUSHACC

LCALLSTART;起动总线

MOVA,SLA

LCALLWRBYTE;发送器件从地址

LCALLCACK

JNBACK,RE1;无应答则跳转

MOVA,SUBA

LCALLWRBYTE;发送器件子地址

LCALLCACK

JNBACK,RE1;无应答则跳转

POPACC;写数据

LCALLWRBYTE

LCALLCACK

JNBACK,RE11

LCALLSTOP

SJMPMAIN2

RE1:

POPACC

LCALLSTOP

SJMPMAIN

RE11:

LCALLSTOP

SJMPMAIN

MAIN2:

LCALLSTART;起动总线

MOVA,SLA

LCALLWRBYTE;发送器件从地址

LCALLCACK

JNBACK,RE2;无应答则跳转

MOVA,SUBA

LCALLWRBYTE;发送器件子地址

LCALLCACK

JNBACK,RE2;无应答则跳转

LCALLSTART

MOVA,SLA;发送器件从地址

INCA

LCALLWRBYTE

LCALLCACK

JNBACK,RE2

LCALLRDBYTE;进行读字节操作

LCALLMNACK;发送非应信号

LCALLSTOP

SJMPMAIN3

RE2:

LCALLSTOP

SJMPMAIN2

MAIN3:

MOVP3,A

SJMP$

 

$INCLUDE(VI2C_ASM.ASM);包含VIIC软件包

;

END

 

2、页

;平台定义变量

ACKBIT20H;应答标志位

SLADATA50H;器件从地址

SUBADATA51H;器件子地址

NUMBYTEDATA52H;读写的字节数

;使用前定义常量

SDAEQUP1.7;I2C总线定义

SCLEQUP1.6

MTDEQU30H;发送数据缓冲区首址缓冲区30H~3FH

MRDEQU40H;接收数据缓冲区首址缓冲区40H~4FH

ORG8000H;采用软件调试法

AJMPMAIN

ORG8080H

MAIN:

MOVR4,#0F0H;延时等待其它芯片复位好

DJNZR4,$

MOVSP,#60H;设置堆栈指针

MOV3FH,#00H;给MTD赋值

MOV30H,#01H

MOV31H,#02H

MOV32H,#03H

MOV33H,#04H

MOV34H,#05H

MOV35H,#05H

MOV36H,#07H

MOV37H,#08H

MOV38H,#09H

MOV39H,#0AH

MOV3AH,#0BH

MOV3BH,#0CH

MOV3CH,#0DH

MOV3DH,#0EH

MOV3EH,#0FH

MOVSLA,#0A0H;设置写的从地址

MOVSUBA,#80H;设置子地址

MOVNUMBYTE,#10H;设置字节数,这里因为读写一页字节,所以为10H(16)

LCALLIWRNBYTE;调用写EEPROM程序

MOVA,#01H

LCALLIRDNBYTE;调用读EEPROM程序

MOVA,#33H;

$INCLUDE(VI2C_ASM.ASM);I2C软件包

;

END

6、实验记录

1、第一个实验程序运行完成后,打开“memorywindow”,在查询栏输入所要查看的地址空间。

输入发送缓冲区首地址“D:

30H”,该地址处显示的数据为“55”;输入接收缓冲区首地址“D:

40H”,该地址处显示的数据为“55”。

2、第二个实验程序运行完成后,同样使用“memorywindow”查看发送、接收缓冲区内的数据。

D:

30H~D:

3FH中储存的数据为“000102...0E0F”;D:

40H~D:

4FH中储存的数据同样是“000102...0E0F”。

 

7、实验分析

1、

协议的基本工作原理如下:

以启动信号START来掌管总线,以停止信号STOP来释放总线;

每次通讯以START开始,以STOP结束;

启动信号START后紧接着发送一个地址字节,其中7位为被控器件的地址码,一位为读/写控制位R/W,R/W位为0表示由主控向被控器件写数据,R/W为1表示由主控向被控器件读数据;

当被控器件检测到收到的地址与自己的地址相同时,在第9个时钟期间反馈应答信号

每个数据字节在传送时都是高位(MSB)在前。

协议通讯过程分为写通讯和读通讯两部分,其过程如下。

写通讯过程:

(1)主控在检测到总线空闲的状况下,首先发送一个START信号掌管总线;

(2)发送一个地址字节(包括7位地址码和一位R/W);

(3)当被控器件检测到主控发送的地址与自己的地址相同时发送一个应答信号(ACK);

(4)主控收到ACK后开始发送第一个数据字节;

(5)被控器收到数据字节后发送一个ACK表示继续传送数据,发送NACK表示传送数据结束;

(6)主控发送完全部数据后,发送一个停止位STOP,结束整个通讯并且释放总线。

读通讯过程:

(1)主控在检测到总线空闲的状况下,首先发送一个START信号掌管总线;

(2)发送一个地址字节(包括7位地址码和一位R/W);

(3)当被控器件检测到主控发送的地址与自己的地址相同时发送一个应答信号(ACK);

(4)主控收到ACK后释放数据总线,开始接收第一个数据字节;

(5)主控收到数据后发送ACK表示继续传送数据,发送NACK表示传送数据结束;

(6)主控发送完全部数据后,发送一个停止位STOP,结束整个通讯并且释放总线。

下图所示为一次完整的通信过程的时序:

图中,SCL线上1~7位为7位地址码,第8位为读写位R\~D,第9位为ACK应答位,紧接着的为第一个数据字节,然后是一位应答位,后面继续第2个数据字节。

如图所示,主控器在检测到总线空闲(数据线SDA和时钟线SCL同时处于高电平状态)时,首先发送一个启动信号S(在时钟线SCL保持高电平期间,数据线SDA上电平被拉低),它标志着一次数据传输的开始。

之后主控器发送一个地址字节包括7位地址码和一个读写位。

被控器收到地址字节后反馈一个应答信号ACK=0,主控器接收到ACK后开始发送第一个数据字节,被控器接收到第一个数据字节后,由反馈一个应答信号ACK=0。

主控器收到应答信号后开始传送第二个数据字节。

依次循环,主控器发送完数据后,就发送一个停止信号P(SCL保持高电平期间,SDA被释放,返回高电平),并释放总线,使得总线返回空闲状态。

在通信过程应注意以下6点:

(1)进行数据传送时,在SCL为高电平期间,SDA线上电平必须保持稳定,只有SCL为低时,才允许SDA线上电平改变状态。

并且每个字节传送时都是高位在前。

(2)对于应答信号,ACK=0时为有效应答位,说明接收器已经成功接收到该字节,若为1则说明接受不成功。

(3)如果被控器需要延迟下一个下一个数据字节开始传送的时间,可以通过把SCL电平拉低并保持来强制主控器进入等待状态。

(4)主控器完成一次通信后还想继续占用总线在进行一次通信,而又不释放总线,就要利用重启动信号Sr。

它既作为前一次数据传输的结束,又作为后一次传输的开始。

(5)总线冲突时,按“低电平优先”的仲裁原则,把总线判给在数据线上先发送低电平的主器件。

(6)在特殊情况下,若需禁止所有发生在I2C总线上的通信,可采用封锁或关闭总线,具体操作为挂接在总线上的任一器件将SCL锁定在低电平即可。

2、实验中需要使用到I2C软件库,库中包含了CAT24WC02读写数据的基本命令。

汇编语言中调用软件库的指令为“include(文件名)”命令,该指令一般放在程序末尾。

实验中所需调用的函数库文件名为“VI2C_ASM.ASM”,将其从光盘中复制到工程所在文件夹中,即可使用上述指令调用软件包。

完整的调用命令如下:

$INCLUDE(VI2C_ASM.ASM);包含I2C模拟软件包

常用的四个命令如下:

IRDBYTE(无子地址)读单字节数据(现行地址读)

IWRBYTE(无子地址)写单字节数据(现行地址写)

IRDNBYTE(有子地址)读N字节数据(随机地址读)

IWRNBYTE(有子地址)写N字节数据(随要地址写)

在本实验中,由于需要页读/写,故采用IRDNBYTE与IWRNBYTE子程序。

代码如下:

LCALLIWRNBYTE;调写EEPROM子程序(随机地址写)

及:

LCALLIRDNBYTE;调写EEPROM子程序(随机地址读)

这两个命令需要使用NUMBYTE来控制读/写的字节数。

第一个实验需要发送一个字节,即:

MOVNUMBYTE,#01H;设置待发字节数为1

第二个实验要发送一页数据,即16位:

MOVNUMBYTE,#10H;设置待发字节数为16

3、实验一中读/写的一位数据为55H,直接送入寄存器A:

MOVA,#55H;将所要发送的数据放入发送缓冲区

实验二中需要读/写一页16位数据,采用直接存入方法:

MOV3FH,#00H;给MTD赋值

MOV30H,#01H

MOV31H,#02H

MOV32H,#03H

MOV33H,#04H

MOV34H,#05H

MOV35H,#05H

MOV36H,#07H

MOV37H,#08H

MOV38H,#09H

MOV39H,#0AH

MOV3AH,#0BH

MOV3BH,#0CH

MOV3CH,#0DH

MOV3DH,#0EH

MOV3EH,#0FH

显然,这是一种繁琐的方法,改进的方法是采用循环递减的方式将10H~00H存入发送缓冲区MTD,代码如下:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1