在第一段时间,主要看了7513和2810芯片它们的datasheet,很多寄存器,看的我头大。
第二段时间,开始学习stc12c5a60s2的使用。我有个试验箱,里面也有stc芯片,不过它是90的,而且有很多例程。我就对着历程学习。我对语言算法的了解还是不错的,所以大部分例程还是能很快看懂。知道了端口,寄存器的使用,SMON,PCON等各种用于串口初始化工作相关设置。写了串口通信的上位机程序(用的是C#语言),写了下位机,通过对上位机命令的读取,解析和执行。
第三阶段,也就是现在我在做的。要通过I2C协议,实现对7513和2810芯片的控制。在前段时间,我也看过I2C协议。这个协议已经有很多代码了,拿过来用就好。花费时间较多的地方是,I2C协议有器件地址和从地址,我对从地址这概念就一直很困惑,现在的理解就是从器件内部的地址。器件地址相当于班号,从器件地址相当于学号。
但是现在还没有实现,对7513芯片内部一个寄存器的写和读(我用的从地址是0x45),读出来的总是0,而且写进去后,再读还是0。用的是别人写的有子地址器件读写多字节函数,返回值都是1,表示函数执行完全正确,但是不知道为什么,结果是这样。
我猜测可能的原因如下:
(1),我的读写方式错误。
(2),选的寄存器太特殊了。
(3),写之前要进行相关配置。
关于猜测一:
为此,我在网上搜了下别人关于该芯片I2C的算法,在pudn里面找到了一个人写的例程。里面读写调用的函数和使用方式和我的程序是一样的,说明我的第一条猜测是错误的。
PS:但是,我又发现了一个新的问题,它里面的I2C协议,它的scl和sda用的引脚是P2口的1管脚和0管脚。但是之前,我查文档就发现应该用的是P3口的4管脚和5管脚。我怀疑是自己错了,还是他错了。我把我的程序换成P2口,发现无应答,只有P3口才有应答,虽然返回值是0。我觉得应该是他错了。
关于猜测二:
我又试了其他寄存器,结果还是一样的,而且查阅了相关资料证明,这个寄存器是可以读写的。
关于猜测三:
当排除了以上两种猜测之后,只能在第三条道路上前进。