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