完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
浙江 黄松正
本文介绍一种用STC12C2052单片机的I/O口模拟I2C总线的从模式,进而模拟和替代E2PROM(24C02)工作的方法。其意义在于,用户可以根据需要让处于I2C主模式的芯片以不同的启动配置启动,而不需要烧录不同内容的E2PROM,也不需要增加额外的I/O口。 为满足程序加载时按用户的要求配置某I2C接口芯片的寄存器,笔者用STC单片机模拟24C02。I2C主模式的模拟技术比较普遍,但该I2C芯片复位后处于主模式,使得STC要配置它只能处于从模式状态,而I2C从模式的模拟很少有现成的代码参考。下面给出开始和停止条件判断、数据读取、应答位判断部分的编程思路,至于数据和应答位发送部分,参考文章较多,这里不再描述。 |
|
相关推荐
3个回答
|
|
1.开始和停止条件判断分析
I2C总线开始和结束时序(见图1)。 处于从模式的STC12C2052单片机要判断开始条件,就要实时检测SCL、SDA线上的电平变化,当SCL为高电平且SDA为低电平时,判断为开始条件成立。 需要注意的是,为方便之后的数据判断,开始成立条件需要从时钟线高电平到时钟低电平为止才退出判断,不可在SCL为高电平时发现SDA低电平跳变就退出判断。开始条件判断的程序代码如下: 相对开始条件判断,停止条件判断就没这么严格:只要时钟为高,数据线从低到高跳变,就可以判断为条件成立。结束条件判断代码如下: |
|
|
|
2.数据读取
STC2052在读取SDA上的数据时,要按照SCL上电平跳变来判断数据在何时才是有效的。如图2所示,在SCL线为低电平时等待,当等待结束时读取数据,然后在SCL为高电平时继续等待(防止重复读取),进入下一位数据的读取,如此循环,直到8位数据读取完毕。代码如下: |
|
|
|
3.应答位判断
图3是从模式下STC12C2052判断主机ACK回应的时序图,与数据位的读取颇为相似。代码如下: 有了上述分析基础,模拟24C02就容易了。按照24C02数据手册的说明,24C02字节选择读1个字节的时序(见图4),24C02连续读可以由选择读模式启动。这样就可以写出STC12C2052单片机模拟24C02的选择连续读程序,流程图见图5,器件地址以0X00为例。 |
|
|
|
只有小组成员才能发言,加入小组>>
904 浏览 2 评论
12827 浏览 0 评论
4125 浏览 7 评论
2337 浏览 9 评论
2162 浏览 2 评论
457浏览 2评论
786浏览 2评论
904浏览 2评论
395浏览 1评论
623浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-4 02:27 , Processed in 1.244438 second(s), Total 81, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号