还记得10几年前,在学校那会参加电子设计大赛,捣鼓STC单片机。I2C总线都是GPIO模拟的,废了个老劲了。什么时序乱七八糟的,都不关注,有激情的年代啊。

forum.jpg


最近想用小MCU做个小玩意,发现STC单片机居然也有库函数了,支持库函数开发了?天了个噜的。年纪真是大了,随即看了一下,还是看寄存器比较通透,库函数整得太绕了。

forum.jpg


随即发现,STC8G单片机内部集成了I2c控制器,总得与时代同步才行吧。

forum.jpg


毕竟不是做嵌入式开发的,编程能力还停留在学生时代。代码还是能看一通的。看了一下规格书带的例子,趁机把I2C总线的知识串一下吧。相关寄存器就这几个,涉及读写啊,状态啊,数据缓冲器什么的,要是对I2C比较了解的话,上手算是比较简单的。读写数据都是通过寄存器。按照时序就能完成功能,真是方便太多了。

forum.jpg


手册中提到了一个读写AT24C256-EEPROM的例程。实现了如下的两个操作。

forum.jpg

I2C写操作流程

forum.jpg

I2C随机读流程

看下代码实现。。。

定义寄存器地址:这个在最新头文件都有,不用管

forum.jpg


通过,操作寄存器,定义收发数据,应答,读写等函数。

forum.jpg



forum.jpg


main函数中,初始化I2C控制器,包括速度啊,IO接口啊,主从啊,之类的。然后根据前面提到的AT24C256的时序依次执行相关函数。


forum.jpg


以写数据为例子,对应:

开始,写设备地址,等待应答,写寄存器地址,等待应答,写数据,等待应答,停止。

forum.jpg

I2C写操作流程

某宝已经购入了STC8G系列单片机,找某立创免费打个板子,玩嘛。

forum.jpg