stc12c5a60s2板子的使用學(xué)習(xí)經(jīng)歷分享
最近,做項(xiàng)目,用到這個(gè)芯片。由于我開(kāi)始接觸硬件,所以學(xué)習(xí)緩慢。從暑假開(kāi)始,到現(xiàn)在已經(jīng)將近兩個(gè)月了。
在第一段時(shí)間,主要看了7513和2810芯片它們的datasheet,很多寄存器,看的我頭大。
第二段時(shí)間,開(kāi)始學(xué)習(xí)stc12c5a60s2的使用。我有個(gè)試驗(yàn)箱,里面也有stc芯片,不過(guò)它是90的,而且有很多例程。我就對(duì)著歷程學(xué)習(xí)。我對(duì)語(yǔ)言算法的了解還是不錯(cuò)的,所以大部分例程還是能很快看懂。知道了端口,寄存器的使用,SMON,PCON等各種用于串口初始化工作相關(guān)設(shè)置。寫(xiě)了串口通信的上位機(jī)程序(用的是C#語(yǔ)言),寫(xiě)了下位機(jī),通過(guò)對(duì)上位機(jī)命令的讀取,解析和執(zhí)行。
第三階段,也就是現(xiàn)在我在做的。要通過(guò)I2C協(xié)議,實(shí)現(xiàn)對(duì)7513和2810芯片的控制。在前段時(shí)間,我也看過(guò)I2C協(xié)議。這個(gè)協(xié)議已經(jīng)有很多代碼了,拿過(guò)來(lái)用就好?;ㄙM(fèi)時(shí)間較多的地方是,I2C協(xié)議有器件地址和從地址,我對(duì)從地址這概念就一直很困惑,現(xiàn)在的理解就是從器件內(nèi)部的地址。器件地址相當(dāng)于班號(hào),從器件地址相當(dāng)于學(xué)號(hào)。
但是現(xiàn)在還沒(méi)有實(shí)現(xiàn),對(duì)7513芯片內(nèi)部一個(gè)寄存器的寫(xiě)和讀(我用的從地址是0x45),讀出來(lái)的總是0,而且寫(xiě)進(jìn)去后,再讀還是0。用的是別人寫(xiě)的有子地址器件讀寫(xiě)多字節(jié)函數(shù),返回值都是1,表示函數(shù)執(zhí)行完全正確,但是不知道為什么,結(jié)果是這樣。
我猜測(cè)可能的原因如下:
(1),我的讀寫(xiě)方式錯(cuò)誤。
(2),選的寄存器太特殊了。
(3),寫(xiě)之前要進(jìn)行相關(guān)配置。
關(guān)于猜測(cè)一:
為此,我在網(wǎng)上搜了下別人關(guān)于該芯片I2C的算法,在pudn里面找到了一個(gè)人寫(xiě)的例程。里面讀寫(xiě)調(diào)用的函數(shù)和使用方式和我的程序是一樣的,說(shuō)明我的第一條猜測(cè)是錯(cuò)誤的。
PS:但是,我又發(fā)現(xiàn)了一個(gè)新的問(wèn)題,它里面的I2C協(xié)議,它的scl和sda用的引腳是P2口的1管腳和0管腳。但是之前,我查文檔就發(fā)現(xiàn)應(yīng)該用的是P3口的4管腳和5管腳。我懷疑是自己錯(cuò)了,還是他錯(cuò)了。我把我的程序換成P2口,發(fā)現(xiàn)無(wú)應(yīng)答,只有P3口才有應(yīng)答,雖然返回值是0。我覺(jué)得應(yīng)該是他錯(cuò)了。
關(guān)于猜測(cè)二:
我又試了其他寄存器,結(jié)果還是一樣的,而且查閱了相關(guān)資料證明,這個(gè)寄存器是可以讀寫(xiě)的。
關(guān)于猜測(cè)三:
當(dāng)排除了以上兩種猜測(cè)之后,只能在第三條道路上前進(jìn)。