单片机原理试验指导书_附代码
2.12.1实验六实验六串行总线扩展实验串行总线扩展实验 一、实验目的一、实验目的 加深对 I2C 总线及 MCS-51 单片机串行总线扩展知识的理解。 二、实验设备二、实验设备 Keil C 单片机程序开发软件 Proteus 仿真软件 SNDJ-1020 单片机综合实验仪 三、实验内容和步骤三、实验内容和步骤 内容:内容: 利用 P1 端口访问 CAT24WC02(兼容 AT24C02) 。 实验程序:实验程序: 利用 P1 端口模拟 I2C 总线信号 SDA(P1.1)和 SCL(P1.0)实现 I2C 总线操作,先 将单片机内部 RAM 中 30H~37H 单元的值复制到 CAT24WC02中的 00H~07H 单元。然后 再将这 8 个数从 CAT24WC02中复制到单片机内部 RAM 的 40H~47H 单元中。接着对比 30H~37H 单元和 40H~47H 单元中的数据,若全部相同,则使P1.7 输出 0,否则输出 1。 参考: 1、 CAT24WC02 的器件地址:0A0H +(A2A1A0)2 2、 CAT24WC02 芯片手册 CAT24WCxxx.pdf 预习:预习: 1、 2、 3、 4、 详细阅读芯片手册 CAT24WCxxx.pdf 和 AT24CXX.pdf。 编写好实验程序。 根据编写的程序、实验步骤和实验报告的要求制定调试仿真的操作方案。 初步验证实验程序是可行的。 实验单元电路:实验单元电路: CAT24WC02电路。 S1 A0 A1 A2 A0 A1 CAT SDA A2 24WC02 SCL WP Vcc SDA SCL 图 2.17系统中的 CAT24WC02 电路 步骤:步骤: 1、 在 E: :中新建 Ex06 文件夹(其路径在后面书写中以符号%USERDIR%代替,该文 件夹用来保存本次实验的所有内容) 。将教师机上共享的本次实验共享文件夹下 的所有内容拷贝到%USERDIR%中。 2、 在 Keil C 中创建一个新工程。 工程保存为%USERDIR% \ Ex06. . Uv2。 选择单片机型号为 Generic 中的 8051。 3、 设置工程选项如下: (汇编语言程序仅设置前 3 个页夹) Target页夹:Xtal= 12 MHz Output 页夹:Create HEX File Debug 页夹:根据步骤的需要正确设定(参见实验一中步骤5、6、7) BL51 Locate 页夹: 取消 Use Memory Layout from Target Dialog 设置 Code Range 属性为 0 x30-0 xFFF 4、 创建新文件并输入实验程序, 然后保存到%USERDIR%中 (文件名为 Ex06. . ASM 或 Ex06. .C C) 。将新文件加入到工程中, 然后编译工程。检查编译结果报告,若发 现错误,必须检查错误并改正后重新编译工程,直到没有错误报告为止。 5、 按预习制定的调试方案利用 Keil 自身的软件仿真功能调试程序,确认实验程序 在逻辑上满足设计要求并能够运行(操作方法参见实验一中步骤5) 。 6、 按预习制定的调试方案利用Keil 和 Proteus 联合调试程序,确认实验程序能够在 由 Proteus 模拟的硬件环境中实现设计要求(操作方法参见实验一中步骤6) 。 7、 按预习制定的调试方案利用实验仪调试程序, 观察并记录程序在真实环境中工作 的现象,有理有据地分析现象产生的原因。 具体操作如下: 1) 检查实验仪与计算机间的通信线连接完好, 实验仪各电路板上无导线连接, 然后 打开实验仪电源。 2) 测试实验仪中涉及本次实验的电路是否完好。 a) 参见实验四的方法测试P1 端口各个位和 INT1 的完好。 b) 利用测试程序检测 CAT24WC02 完好。 (该测试程序要求 P1.0、P1.1、P1.7 和 INT1 必须完好,否则忽略此项测试) 操作方法: 关闭实验仪电源,按图 2.18 连接完导线后重新打开实验仪电源。 双击%USERDIR% \ Test6 \ Test6_0 .Uv2 文件。 在新窗口(Test6_0工程)中进入调试,然后连续运行程序。 按照 Test6_0工程里面操作说明中的描述, 判定本次实验所需硬件资源的好坏, 作为修改实验程序的依据。 测试完成后退出调试,然后关闭这个用于测试的Test6_0工程窗口。 连接线路保留(在后面将会使用) 。 MHMI-1 模块 VK P17 KK1-INT1 MMCU-1 模块 P11SDA P10SCL MSBI-1 模块 图 2.18串行总线扩展实验线路 3) 运行实验程序,记录并解析实验现象。 操作方法: 关闭实验仪电源,去除图2.18 中 KK1-与 INT1 之间的连接。 根据实验程序设定的 CAT24WC02的器件地址改变 MSBI-1 模块中 S1 开关组 各个开关的位置,然后重新打开实验仪电源。 调试程序,直至程序达到设计要求。 改变 MSBI-1 模块中 S1 开关组各个开关的位置, 重新验证实验程序的正确性。 在运行实验程序前,应根据检测到的在运行实验程序前,应根据检测到的 P1P1 端口各位的完好情况决定具体的连线方法,端口各位的完好情况决定具体的连线方法, 若与实验程序设想不一致,则应修改实验程序使其与硬件连线吻合。若与实验程序设想不一致,则应修改实验程序使其与硬件连线吻合。 四、实验报告要求四、实验报告要求 1、 工整书写实验程序并画出其流程图。 2、 利用 Proteus 仿真时由虚拟的 I2C 调试器观测到的 I2C 总线信息。 3、 对 CAT24WC02进行读/写访问控制是怎样实现的? 4、 结合实验程序说明 ACK/NACK 的作用。 5、 一般情况下一条 I2C 总线最多可拥有多个 CAT24WC02?这些 CAT24WC02该怎 样连接? 6、 [选作]如果某系统需要的 CAT24WC02 超出了上题所说的数量,又该怎样去实 现? 五、参考代码五、参考代码 #include #include #include #define uchar unsigned char sbit sda=P1^1; sbit scl=P1^0; sbit led=P1^7; uchar aa0[8]; uchar aa1[8]; void delay(){ ;;; } void start(){ sda=1; delay(); scl=1; delay(); sda=0; delay(); } void stop(){ sda=0; delay(); scl=1; delay(); sda=1; delay(); } void response(){ uchar i; scl=1; delay(); if((sda==1) } scl=0; delay(); } void noack(){ scl=1; delay(); scl=1; delay(); scl=0; delay(); sda=0; delay();