![]() |
發布時間: 2020-7-29 19:00
正文摘要:本帖最后由 STC15W408AS 于 2020-7-29 19:03 編輯 如上圖所示,單片機內部的4個P口,都自帶有一個D鎖存器,為什么用P口擴展程序存儲器或者數據存儲器時,還要在P口上再接一個D鎖存器74LS373? |
gbchang 發表于 2020-7-30 14:48 太感謝了。 |
至于內部的鎖存器,我畫了個P0口的工作狀態圖:![]() |
至于內部鎖存器,是在做總線時,數據讀入用的,就是從2732中取指令或者常量表時,得到的數據。 我把P0口的幾種狀態畫了個示意圖: ![]() |
3樓和9樓答非所問,雖然內容是對的,但不是樓主想問的,使他更加疑惑了。 11樓說的對,所以我當初畫51電路圖時,P0口的網絡標號都是類似"AD0~AD7"形式,時刻提醒這是復用總線: ![]() |
看不明白就不看了,這是上古時期用的電路,現在不會用這個了,換一個IO更多的單片機幾乎是沒有增加MCU方面的價錢的,74LS373卻要兩塊一個,而且電路和程序變得更麻煩了如果你一定要學會這個,那就再回去看一下8051入門的硬件知識,好像在STC的數據手冊中已經沒有介紹了![]() |
地址和數據復用,不外接鎖存器,如何區別是地址還是還是數據呢? |
外擴存儲器時,外擴存儲器的低八位地址是從P0口輸出的,同時數據也必須從P0口輸出,這兩種輸出顯然是必須分開的,也就是一個端口分時輪流輸出地址或者數據信號,而外擴存儲器的地址和數據總線是分開的,所以必須有一個中間器件過渡,將這兩種信號給分開,這就是鎖存器的用處。 如果你能找到一種低八位地址和數據總線復用的存儲器,也就不需要外接鎖存器了,但顯然你是找不到的,所以外接的鎖存器就成了外擴存儲器(當然指的是這種存儲器而不是24C02之類)必不可少的搭檔 |
是哦,樓上說的對,我咋沒注意到,這個用373的主要原因是因為地址總線和數據總線都使用了單片機的P0口,所以,在先寫地址,再寫數據的情況下,要在寫地址后將地址鎖存,然后再寫數據。這樣IO口就達到了復用的目的,節省了一半的IO口。 |
STC15W408AS 發表于 2020-7-29 23:09 直接用MCU的io口最大支持20mA電流,用373則沒有限制,電流取決于VCC的輸出能力。 |
外擴存儲器時,P0口是要工作在總線狀態的,存儲器地址的低8位信息必須要用額外的鎖存器才能在讀寫時保持,因為地址總線低8位和數據總線復用了,這是51機的設計。 |
參與人數 1 | 黑幣 +5 | 收起 理由 |
---|---|---|
![]() | + 5 | 很給力! |
breakhero 發表于 2020-7-29 23:09 意思內部鎖存器實現一種端口功能,然后外部的鎖存器同時實現另一種端口功能? |
1692483014 發表于 2020-7-29 22:30 想不通。提高驅動能力,難道這個鎖存器芯片可以提升總線上的電流? |
就像你引用的圖片里所示,地址和數據復用的端口,如果不使用鎖存器鎖定地址是無法正常讀寫存儲器的,這里加的鎖存器就是要把復用狀態分離開來,等于把端口數量擴展。內部的鎖存器無法實現這個。 |
圓就是圈圈 發表于 2020-7-29 22:19 內部不是已經有鎖存器了嗎? |
兩個作用:隔離 和 提高驅動能力。 |
我覺得是因為P0口不僅可以做數據總線還可以做地址總線,外加所存器保證地址和數據不互相干擾 |