C8051F340 外接 FM24C04 時(shí)的端口配置問(wèn)題
原來(lái)是想利用單片機(jī)自帶的 SMBus 端口, 但是官方自帶的例程用了好幾個(gè)定時(shí)器,而我的這個(gè)小項(xiàng)目也需要很多定
時(shí)器資源, 不夠用了. 擦.........所以干脆用 IO 口模擬I2C 時(shí)序來(lái)操作 FM24C04 得了, 項(xiàng)目對(duì)時(shí)間要求也不苛
刻.
所以, 就出現(xiàn)了文章要介紹的問(wèn)題:
由于繪制原理圖時(shí), 已經(jīng)將 SMBus 的端口 SDA/SCL(對(duì)應(yīng) P0_0/P0_1) 連接到了 FM24C04 的SDA 和 SCL 上.
所以按照一般操作, 我把 XBR0 的 SMB0E使能并連接到端口. 然后將對(duì)應(yīng)的 IO 口P0_0 和 P0_1 設(shè)置成漏極開(kāi)
路, 按說(shuō)這樣就可以了是不是? 其實(shí)不是, 操作的時(shí)候讀上來(lái)的數(shù)據(jù)一直是 0xFF, 可能就是高阻態(tài).
我檢查了下讀寫(xiě)操作代碼, 沒(méi)有任何問(wèn)題, 增減延時(shí)改變時(shí)序也是不行. 所以, 我懷疑在交叉開(kāi)關(guān)這出了問(wèn)題.
想了想覺(jué)得, 既然我都用模擬的時(shí)序了. 干嗎還用設(shè)置成開(kāi)漏呢? 干嗎還用將端口配置給SMBus 呢? 推挽不也
是可以的嗎? 所以如下圖, 將 SMB0E 置零. 燒寫(xiě)調(diào)試運(yùn)行, 讀和寫(xiě)都行了. 另外對(duì)應(yīng)的 IO 口設(shè)置
成開(kāi)漏或者推挽都是可以正常進(jìn)行操作的.