【例11-3】电路图如图11-27所示。编程实现每重启一次单片机,就把单片机的重启次数显示在数码管上,设重启次数保存在24C02C的0x04地址处。按S1则清空重启次数。
电路图在光盘位置:“\Example\Chapter11\S113\24C02C.DSN”。
题意分析
●S1状态可以由RB7得知,所以RB7应为输入状态。数码管X1由PORTD控制,所以PORTD应为输出状态。为了简化电路图,限流电阻未加。
●U1通过硬件I2C与EEPROM相连,所以RC3和RC4都应为输入状态。
●WP接地使写保护失效便于写入数据。A2到A0接地使U2的I2C从机地址为0b1010000。
●图11-27中的U3是I2C调试器,读者在调试此例子时可以用此调试器来观察I2C总线上的信号是否合理。
●为了便于读者使用此代码,本例将PIC16F877的硬件I2C主模式操作代码写成了模块形式便于读者重复利用。
图11-27 PIC16F877读/写24C02C实验原理图
●24C02C的控制代码也写成了模块形式,但需要I2C主模式模块文件的支持。
设计过程
1)用MPLAB新建项目S113,语言工具选择为“HI-TECH Universal Toolsuite”,保存在C盘根文件夹下。
2)新建main.c文件并加入项目中,其内容如下所示(本项目所有源码内容参考光盘“\Example\Chapter11\S113”文件夹内容)。
3)新建24C02C.H文件并加入项目中,其内容如下所示。
(www.daowen.com)
4)新建24C02C.C文件并加入项目中,其内容如下所示。
5)新建877_I2C.H文件并加入项目中,其内容如下所示。
6)新建877_I2C.C文件并加入项目中,其内容如下所示。
7)新建delay.H文件并加入项目中,其内容如下所示。
8)新建delay.C文件并加入项目中,其内容如下所示。
9)把项目保存后成功编译出目标文件。然后用调试工具Proteus VSM加载24C02C.DSN。启动VSM后运行程序。程序运行效果是每重新运行一次(按运行工具栏中的复位按钮或停止VSM后重启VSM重新运行程序),则程序数码管X1上显示数字会加1(不能大于10)。按一次按钮S1后数码管上显示0。
10)读者可以用I2C调试器观察I2C接口上的数据帧格式来具体理解EEPROM的读/写过程。EEPROM的读过程采用复合数据帧格式,如图11-28所示。读者可以阅读read_ext_eeprom函数内容来理解复合数据帧格式的编程方法。
图11-28 24C02C中使用的复合数据帧格式
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。