收藏 分享(赏)

软件模拟IIC主从机.pdf

上传人:weiwoduzun 文档编号:3074414 上传时间:2018-10-02 格式:PDF 页数:13 大小:276.60KB
下载 相关 举报
软件模拟IIC主从机.pdf_第1页
第1页 / 共13页
软件模拟IIC主从机.pdf_第2页
第2页 / 共13页
软件模拟IIC主从机.pdf_第3页
第3页 / 共13页
软件模拟IIC主从机.pdf_第4页
第4页 / 共13页
软件模拟IIC主从机.pdf_第5页
第5页 / 共13页
点击查看更多>>
资源描述

1、软件模拟I2C主从机作 者 : 王 金 龙创 建 时 间 : 201年 10月 21日修 改 时 间 : 201年 10月 21日学 校 : 西 南 科 技 大 学目录1.I2C总线引脚定义: .32.总线时序定义: .33.模拟 I2C主机程序编程: 54.模拟 I2C从机编程(中断方式) .95.后记: 131.I2C总线引脚定义:SCL: 时钟 线DA: 数据 线2.总线时序定义: a.空 闲模 式: SDA=1SCL=1b.总 线的 线与 :连 到总 线上 的任 一器 件输 出的 低电 平, 都将 使总 线的 信号 变低 。c.数 据位 的有 效性 规定 (DatValidity):I

2、2C总 线进 行数 据传 送时 , 时 钟信 号为 高电 平期 间 , 数 据线 上的 数据 必须 保持 稳定 ;只 有在 时钟 线上 的信 号为 低电 平期 间, 数据 线上 的高 电平 或低 电平 状态 才允 许变 化。d.起 始和 终止 信号 : SCL为 高电 平时 , SDA表 现为 下降 沿则 表示 起始 信号 ;为 高电 平时 , 表 现为 上升 沿则 表示 终止 信号 。起 始和 终止 信号 都是 由主 机发 出的 , 在 起始 信号 产生 后 , 总 线就 处于 被占 用的 状态 ;在 终止 信号 产生 后, 总线 就处 于空 闲状 态。e.从 机事 务处 理: 接 收器 件

3、收 到一 个完 整的 数据 字节 后 , 有 可能 需要 完成 一些 其它 工作 , 如 处理 内部 中断服 务 等 , 可 能 无 法 立 刻 接 收 下 一 个 字 节 , 这 时 接 收 器 件 可 以 将 SCL线 拉 成 低 电 平 , 从 而 使主 机处 于等 待状 态 。 直 到接 收器 件准 备好 接收 下一 个字 节时 , 再 释放 SCL线 使之 为高 电平 ,从 而使 数据 传送 可以 继续 进行 。 f.字 节传 送与 应答 :每 一个 字节 必须 保证 是 8位 长度 。 数 据传 送时 , 先 传送 最高 位 ( MSB) , 每 一个 被传 送的 字节 后面 都必

4、 须跟 随一 位应 答位 (即 一帧 共有 9位 ) 。若 因 某 种 原 因 从 机 不 能 对 主 机 应 答 时 , 从 机 应 当 释 放 SDA数 据 线 (SDA=1), 由 主 机 产生 一个 终止 信号 以结 束总 线的 数据 传送 。 若 从机 已正 常接 收到 数据 , 但 是无 力再 接收 数据 时 , 应 当对 无法 接收 的第 一字 节产 生无应 答, 主机 则应 发出 终止 信号 以结 束数 据的 继续 传送 。 当 主机 接收 数据 时 , 它 收到 最后 一个 数据 字节 后 , 必 须向 从机 发出 一个 结束 传送 的信 号 。这 个信 号是 由对 从机 的

5、 “ 非 应答 ” 来 实现 的。 然后 ,从 机释 放 SDA线 ,以 允许 主机 产生 终止 信号 。 g.数 据帧 格式 : 在 起 始 信 号 后 必 须 传 送 一 个 从 机 的 地 址 ( 7位 ) , 第 8位 是 数 据 的 传 送 方 向 位 ( R/T) ,用 “ 0” 表 示主 机发 送数 据 ( T) , “ 1” 表 示主 机接 收数 据 ( R) 。 每 次数 据传 送总 是由 主机 产生 的终 止信 号结 束 。 但 是 , 若 主机 希望 继续 占用 总线 进行 新的 数据 传送 , 则 可以 不产 生终 止信 号, 马上 再次 发出 起始 信号 对另 一从

6、机进 行寻 址。在 总线 的一 次数 据传 送过 程中 ,可 以有 以下 几种 组合 方式 : 1主 机向 从机 发送 数据 ,数 据传 送方 向在 整个 传送 过程 中不 变2主 机在 第一 个字 节后 ,立 即从 从机 读数 据3在 传送 过程 中, 当需 要改 变传 送方 向时 ,起 始信 号和 从机 地址 都被 重复 产生 一次 ,但 两次 读 /写 方向 位正 好反 相。注 : 有 阴影 部分 表示 数据 由主 机向 从机 传送 , 无 阴影 部分 则表 示数 据由 从机 向主 机传 送 。A表 示应 答, A非 表示 非应 答( 高电 平 ) 。 S表 示起 始信 号, P表 示终

7、 止信 号。3.模 拟 I2C主 机 程 序 编 程 :/*起 始信 号 S*/voidstart()scl=1; /SCL高 电平delay_24C02();sda=1; /SDA下 降沿delay_24C02();sda=0;delay_24C02();/*终 止信 号 P*/voidstop()scl=1; /SCL高 电平delay_24C02();sda=0; /SDA上 升沿delay_24C02();sda=1;delay_24C02();/*应 答信 号 A*/voidrespons()uchari;scl=1;delay_24C02();while(sda=1) /开 外部

8、中断 0/*函 数功 能: INT0中 断服 务子 程序入 口参 数: 无 返 回 :无 。备 注 :以 Start信 号作 为中 断触 发*/voidIC()interupt0using0EX0=; /关 中断delay_24C02();if(SCL) /真 的是 Start信 号吗 ?/-读 取器 件地 址 -while(SCL); /START时 的 SCL高 电平 状态 就等 待for(g=8;g0;g-) /接 收器 件地 址while(!SCL); /SCL低 电平 状态 就等 待DEVIE_ADR0;g-)while(!SCL); /上 升沿 输出 数据if(send_ptr /

9、输 出 1elsSDA=0; /输 出 0while(SCL); /SCL为 1, 就保 持 SDA输 出不 变SDA=1; /出 让数 据线send_ptr0;g-)while(!SCL); /SCL低 电平 状态 就等 待WORD_AR0;g-) /接 收器 件地 址while(!SCL); /SCL低 电 平 状 态 就 等 待DEVICE_ADR0;g-)/接 收 主 机 要 写 到 该 器 件 内 存单 元的 数据 while(!SCL);if(send_ptr /输 出 1elsSDA=0; /输 出 0while(SCL);/SCL为 1, 就保 持 SDA输 出不 变SDA=1

10、;send_ptr0;g-) /读 取主 机发 来的 数据while(!SCL);READ_BUFi=1;if(S)READ_BUFi|=0x1;while(SCL);ACK(); /对 内存 单元 ACK应 答信 号READ_FLAG=1;/读 操作 完成 , 将 写标 志置 一 , 供 主程 序读 取/if(DEVICE_ADR /如 果地 址不 对, 跳出 程序 并且 开中 断/if(SCL)elsEX0=1; /如 果不 是 Start, 跳出 程序 并且 开中 断/voidIC()interupt0using05.后记:从 机 IC模 拟实 现了1: 读器 件地 址2: 读写 单字 节3: 页写4: 队列 读尚 未完 成随 机读 写。

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

当前位置:首页 > 企业管理 > 经营企划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报