协议实验报告_第1页
协议实验报告_第2页
协议实验报告_第3页
协议实验报告_第4页
协议实验报告_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

协议CI2 1 实验目的 1 熟悉协议 CI2 2 掌握接口 EEPROM 的读写方法 CI2 3 掌握利用 I O 来实现信令 CI2 二 实验内容 实验提供 I2C 协议库 光盘 I2C 软件包 将 A2 区的 P16 P17 连接 D5 区的 SCL SDA 短接 JP1 跳线 1 写入 24WC02 的 80H 号字节地址 并读取进行验证 2 连续写入 24WC02 的 80H 号字节地址开始一页的内容 并读取进行验证 三 protel 电原理图 四 程序流程图 1 单字节2 页 五 汇编程序 1 单字节 平台定义变量 ACK BIT 10H 应答标志位 SLA DATA 51H 器件从地址 SUBA DATA 52H 器件子地址 NUMBYTE DATA 10H 读写的字节数 使用前定义常量 SDA EQU P1 7 I2C 总线定义 SCL EQU P1 6 MTD EQU 30H 发送数据缓冲区首址 缓冲区 30H 3FH MRD EQU 40H 接收数据缓冲区首址缓冲区 40 4FH 定义器件地址 PCF8574 EQU 40H SAA1064 EQU 70H CSI24WCXX EQU 0A0H ORG 0000H AJMP MAIN ORG 0080H MAIN MOV SLA 0A0H CLR ACK MOV SUBA 80H MOV NUMBYTE 01H MOV A 00H MOV P3 A MOV A 55H PUSH ACC LCALL START 起动总线 MOV A SLA LCALL WRBYTE 发送器件从地址 LCALL CACK JNB ACK RE1 无应答则跳转 MOV A SUBA LCALL WRBYTE 发送器件子地址 LCALL CACK JNB ACK RE1 无应答则跳转 POP ACC 写数据 LCALL WRBYTE LCALL CACK JNB ACK RE11 LCALL STOP SJMP MAIN2 RE1 POP ACC LCALL STOP SJMP MAIN RE11 LCALL STOP SJMP MAIN MAIN2 LCALL START 起动总线 MOV A SLA LCALL WRBYTE 发送器件从地址 LCALL CACK JNB ACK RE2 无应答则跳转 MOV A SUBA LCALL WRBYTE 发送器件子地址 LCALL CACK JNB ACK RE2 无应答则跳转 LCALL START MOV A SLA 发送器件从地址 INC A LCALL WRBYTE LCALL CACK JNB ACK RE2 LCALL RDBYTE 进行读字节操作 LCALL MNACK 发送非应信号 LCALL STOP SJMP MAIN3 RE2 LCALL STOP SJMP MAIN2 MAIN3 MOV P3 A SJMP INCLUDE VI2C ASM ASM 包含 VIIC 软件包 END 2 页 平台定义变量 ACK BIT 20H 应答标志位 SLA DATA 50H 器件从地址 SUBA DATA 51H 器件子地址 NUMBYTE DATA 52H 读写的字节数 使用前定义常量 SDA EQU P1 7 I2C 总线定义 SCL EQU P1 6 MTD EQU 30H 发送数据缓冲区首址缓冲区 30H 3FH MRD EQU 40H 接收数据缓冲区首址缓冲区 40H 4FH ORG 8000H 采用软件调试法 AJMP MAIN ORG 8080H MAIN MOV R4 0F0H 延时等待其它芯片复位好 DJNZ R4 MOV SP 60H 设置堆栈指针 MOV 3FH 00H 给 MTD 赋值 MOV 30H 01H MOV 31H 02H MOV 32H 03H MOV 33H 04H MOV 34H 05H MOV 35H 05H MOV 36H 07H MOV 37H 08H MOV 38H 09H MOV 39H 0AH MOV 3AH 0BH MOV 3BH 0CH MOV 3CH 0DH MOV 3DH 0EH MOV 3EH 0FH MOV SLA 0A0H 设置写的从地址 MOV SUBA 80H 设置子地址 MOV NUMBYTE 10H 设置字节数 这里因为读写一页字节 所以为 10H 16 LCALL IWRNBYTE 调用写 EEPROM 程序 MOV A 01H LCALL IRDNBYTE 调用读 EEPROM 程序 MOV A 33H INCLUDE VI2C ASM ASM I2C 软件包 END 6 实验记录 1 第一个实验程序运行完成后 打开 memory window 在查询栏输入所要查看的地 址空间 输入发送缓冲区首地址 D 30H 该地址处显示的数据为 55 输入接收缓冲 区首地址 D 40H 该地址处显示的数据为 55 2 第二个实验程序运行完成后 同样使用 memory window 查看发送 接收缓冲区内 的数据 D 30H D 3FH 中储存的数据为 00 01 02 0E 0F D 40H D 4FH 中储存的 数据同样是 00 01 02 0E 0F 7 实验分析 1 协议的基本工作原理如下 CI2 以启动信号 START 来掌管总线 以停止信号 STOP 来释放总线 每次通讯以 START 开始 以 STOP 结束 启动信号 START 后紧接着发送一个地址字节 其中 7 位为被控器件的地址码 一位 为读 写控制位 R W R W 位为 0 表示由主控向被控器件写数据 R W 为 1 表示由主控 向被控器件读数据 当被控器件检测到收到的地址与自己的地址相同时 在第 9 个时钟期间反馈应答信号 每个数据字节在传送时都是高位 MSB 在前 协议通讯过程分为写通讯和读通讯两部分 其过程如下 CI2 写通讯过程 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 子程序 代码如 下 LCALL IWRNBYTE 调写 EEPROM 子程序 随机地址写 及 LCALL IRDNBYTE 调写 EEPROM 子程序 随机地址读 这两个命令需要使用 NUMBYTE 来控制读 写的字节数 第一个实验需要发送一个字 节 即 MOV NUMBYTE 01H 设置待发字节数为 1 第二个实验要发送一页数据 即 16 位 MOV NUMBYTE 10H 设置待发字节数为 16 3 实验一中读 写的一位数据为 55H 直接送入寄存器 A MOV A 55H 将所要发送的数据放入发送缓冲区 实验二中需要读 写一页 16 位数据 采用直接存入方法 MOV 3FH 00H 给 MTD 赋值 MOV 30H 01H MOV 31H 02H MOV 32H 03H MOV 33H 04H MOV 34H 05H MOV 35H 05H MOV 36H 07H MOV 37H 08H MOV 38H 09H MOV 39H 0AH MOV 3AH 0BH MOV 3BH 0CH MOV 3CH 0DH MOV 3DH 0EH MOV 3EH 0FH 显然 这是一种繁琐的方法 改进的方法是采用循环递减的方式将 10H 00H 存入发送 缓冲区 MTD 代码如下 MO

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论