所謂鎖存器,就是輸出端的狀態(tài)不會隨輸入端的狀態(tài)變化而變化,僅在有鎖存信號時輸入的狀態(tài)被保存到輸出,直到下一個鎖存信號到來時才改變。典型的鎖存器邏輯電路是 D 觸發(fā)器電路。
鎖存,就是把信號暫存以維持某種電平狀態(tài)。鎖存器的最主要作用是緩存,其次完成高速的控制其與慢速的外設(shè)的不同步問題,再其次是解決驅(qū)動的問題,最后是解決一個 I/O 口既能輸出也能輸入的問題。
在某些應(yīng)用中,單片機(jī)的 I/O 口上需要外接鎖存器。例如,當(dāng)單片機(jī)連接片外存儲器時,要接上鎖存器,這是為了實現(xiàn)地址的復(fù)用。假設(shè),MCU 端口其中的 8 路的 I/O 管腳既要用于地址信號又要用于數(shù)據(jù)信號,這時就可以用鎖存器先將地址鎖存起來。
8051訪問外部存儲器時P0口和P2口共做地址總線,P0口常接鎖存器再接存儲器。以防止總線間的沖突。而P2口直接接存儲器。因為單片機(jī)內(nèi)部時序只能鎖住P2口的地址,如果用P0口傳輸數(shù)據(jù)時不用鎖存器的話,地址就改變了。
看看8051單片機(jī)總線操作的時序圖對我們很有幫助。由于數(shù)據(jù)總線、地址總線共用P0口,所以要分時復(fù)用。先送地址信息,由ALE使能鎖存器將地址信息鎖存在外設(shè)的地址端,然后送數(shù)據(jù)信息和讀寫使能信號,在指定的地址進(jìn)行讀寫操作。
使用鎖存器來區(qū)分開單片機(jī)的地址和數(shù)據(jù),8051系列的單片機(jī)用的比較多,也有一些單片機(jī)內(nèi)部有地址鎖存功能,如8279就不用鎖存器了。
注意,并不是一定要接鎖存器,要看其地址線和數(shù)據(jù)線的安排,只有數(shù)據(jù)和地址線合用的情況下才會需要鎖存器,其目的是防止在傳數(shù)據(jù)時,地址線被數(shù)據(jù)所影響! 這是由單片機(jī)數(shù)據(jù)與地址總線復(fù)用造成的,接 RAM 時加鎖存器是為了鎖存地址信號。
如果單片機(jī)的總線接口只作一種用途,不需要接鎖存器;如果單片機(jī)的總線接口要作兩種用途,就要用兩個鎖存器。例如:一個口要控制兩個 LED,對第一個 LED 送數(shù)據(jù)時,“打開”第一個鎖存器而“鎖住”第二個鎖存器,使第二個 LED 上的數(shù)據(jù)不變。對第二個 LED 送數(shù)據(jù)時,“打開”第二個鎖存器而“鎖住”第一個鎖存器,使第一個 LED 上的數(shù)據(jù)不變。如果單片機(jī)的一個口要做三種用途,則可用三個鎖存器,操作過程相似。然而在實際應(yīng)用中,我們并不這樣做,只用一個鎖存器就可以了,并用一根 I/O 口線作為對鎖存器的控制之用(接 74373 的LE,而OE可恒接地)。所以,就這一種用法而言,可以把鎖存器視為單片機(jī)的 I/O 口的擴(kuò)展器。
擴(kuò)展閱讀:51單片機(jī)調(diào)試