![]() |
發(fā)布時間: 2022-4-27 14:17
正文摘要:環(huán)境 :KielC51 MCU :IAP15W4K61S4 應用環(huán)境:利用兩組IO端口(P1^6\P1^5 和 P4^1\P4^2)模擬IIC總線和顯示驅動芯片1648A及外部EEPROM通信,現在用的兩組獨立的代碼實現IIC協議,F在設想改為兩個端口共用一組代 ... |
lkc8210 發(fā)表于 2022-4-28 13:32 感謝回復 這樣的話確實是比較省時間 ![]() |
其實又不用全代碼CV 只需要加個全局變量來選擇用個腳就可以了 如 if(IIC_Sel)//0=IIC1, 1=IIC2 SDA1 = 1; else SDA2 =1; |
Hephaestus 發(fā)表于 2022-4-27 17:42 感謝回復 值得參考的建議 |
188610329 發(fā)表于 2022-4-27 21:57 給自己挖了個大坑 ![]() |
Y_G_G 發(fā)表于 2022-4-27 21:15 好巧不巧的是 硬件IIC地址都是0XA0 外部EEPROM采用的是SOT-23-5的封裝也沒有辦法更改從機地址 |
舊言四 發(fā)表于 2022-4-27 16:31 說實話, STC15 系列沒有硬件 IIC, 換句話說,你只能通過軟件模擬來 操作IIC, 也就是說不可能在后臺讀寫IIC器件,必須前臺讀寫的話,同一之間你只能訪問一個IIC器件,因此,兩個IIC器件,分別用兩個套IO來操控的意義何在? 感覺是給自己增加工作量啊…… |
7#已經回復過了 如果不是代碼空間已經不夠用了,實在不理解為什么要減少代碼量?C+V它不香嗎? 說不定整半天,代碼量反而更多了 再說,當初設計的時候就應該先看一下IIC的從機地址,如果不是一樣的地址,那就兩根線足夠了 |
IAP15W4K61S4有61k ROM 就那一點點的代碼量CV十次都綽綽有余 |
純c51語言是無法實現你需要的功能,只能用匯編寫函數,用c語言調用這個函數。 |
51系統單片機中的特殊寄存器的地址是:80-FFH 而高端RAM的地址也是:80-FFH 這兩個地址是相同的。51為了能區(qū)分它們,在指令系統上做了如下的規(guī)定: 直接尋址(訪問)對應的是特殊寄存器。 間接尋址(訪問)對應的是高端RAM。 明白這一點就不難理解了。 你用指針訪問80H,而80H即表示特殊寄存器的P0口,也表示高端RAM中的80H。現在知道你訪問的是哪一個了吧。 要讀通CPU手冊,這些手冊上都有。 |
munuc_w 發(fā)表于 2022-4-27 16:10 感謝回復 確實使用一條總線確實可以實現目的 但是因為在結構上也是兩個IIC外設單獨掛載的 所以暫時不能用這種方法。這邊首選還是設想一種方案以軟件來實現外設端口的跳轉,了解到51的SFR地址區(qū)域只能采用直接尋址,是不是代表著沒有辦法在主程序中以指針或者中間值替換的方式改變SFR關鍵字的定義地址呢 |
IIC設備是有地址的,放在一組總線上就可以了,用地址區(qū)分設備。 |