摘 要: 由于在MCS-51單片機(jī)開發(fā)中P0口經(jīng)常作為地址/數(shù)據(jù)復(fù)用總線使用,,P2口作為高8位地址線使用,P3口用作第二功能(定時(shí)計(jì)數(shù)器,、中斷等)使用,,所以對于51單片機(jī)的4個(gè)I/O口,其可以作為基本并行輸入/輸出口使用的只有P1口,。因此在單片機(jī)的開發(fā)中,,對于并行I/O口的擴(kuò)展十分重要,主要分析3種擴(kuò)展并行I/O口的方法,。
關(guān)鍵詞: MCS-51單片機(jī); 并行I/O口; 擴(kuò)展
MCS-51單片機(jī)有4個(gè)并行的I/O口,,分別為P0口、P1口,、P2口和P3口,,4個(gè)并行I/O口在單片機(jī)的使用中非常重要,可以說對單片機(jī)的使用就是對這4個(gè)口的使用,。這4個(gè)并行I/O口除了作為基本的并行I/O口使用,,還常作為其他功能使用,如P0口經(jīng)常作為地址/數(shù)據(jù)復(fù)用總線使用[1],, P2口作為高8位地址線使用,,P3口用作第二功能(定時(shí)計(jì)數(shù)器、中斷等等)使用,。這樣,,單片機(jī)只有P1口作為基本的并行I/O口使用,如果在單片機(jī)的使用中對并行I/O口需求較多,對于并行I/O口的擴(kuò)展就非常重要了,。下面通過具體的實(shí)例(8位流水燈設(shè)計(jì))來給出幾種不同的并行I/O口擴(kuò)展方法,。
為了更好地說明以下幾種不同的并行I/O口擴(kuò)展方法,假設(shè)利用單片機(jī)實(shí)現(xiàn)流水燈的設(shè)計(jì),。采用單片機(jī)的P1口設(shè)計(jì)流水燈,,電路如圖1所示。
由圖1可知,,8只LED直接連接在單片機(jī)的P1口上,,通過對單片機(jī)進(jìn)行編程即可以實(shí)現(xiàn)8只發(fā)光二極管產(chǎn)生流水燈。
1 使用單片機(jī)的串行口擴(kuò)展并行I/O口
單片機(jī)有一個(gè)全雙工的串行口[2],,這個(gè)口既可以用于網(wǎng)絡(luò)通信,,也可以實(shí)現(xiàn)串行異步通信,還可以作為移位寄存器使用,。當(dāng)單片機(jī)的串行口工作在模式0時(shí),若外接一個(gè)串入/并出的移位寄存器(74LS164),,就可以擴(kuò)展一個(gè)8 bit并行輸出口,;若外接一個(gè)并入/串出的移位寄存器(74LS165),就可以擴(kuò)展一個(gè)8 bit并行輸入口,。如圖2所示,,單片機(jī)外接一個(gè)串入/并出的移位寄存器(74LS164),這樣就可以擴(kuò)展8 bit并行輸出口,。
當(dāng)單片機(jī)的串行口工作在模式0(作為移位寄存器使用)時(shí)需要注意:單片機(jī)原來的串行通信引腳RXD和TXD在這種工作方式下給出新的定義,,原來用于串行接收數(shù)據(jù)的引腳RXD在這種工作模式下既可以接收也可以發(fā)送數(shù)據(jù); 原來的串行發(fā)送引腳TXD在這種工作模式下則作為移位寄存器的脈沖輸入端使用(通常接時(shí)鐘端)。
單片機(jī)和串入/并出移位寄存器74LS164的連接:單片機(jī)的串行通信接收引腳RXD連接到串入/并出移位寄存器74LS164的輸入引腳,;單片機(jī)的串行通信發(fā)送引腳TXD連接到串入/并出移位寄存器74LS164的脈沖輸入端,;串入/并出移位寄存器74LS164的輸出引腳連接8只發(fā)光二極管。這樣,選擇單片機(jī)的串行口工作模式0,,通過通信引腳RXD發(fā)送實(shí)現(xiàn)流水燈的串行數(shù)據(jù),然后通過74LS164轉(zhuǎn)換成并行數(shù)據(jù)后傳送給發(fā)光二極管,,即可實(shí)現(xiàn)流水燈。這里需要注意74LS164數(shù)據(jù)的轉(zhuǎn)換時(shí)間問題,。
從圖2可以看出,,同樣設(shè)計(jì)一個(gè)8位流水燈,采用上述方法只需要使用單片機(jī)的兩個(gè)串行通信引腳RXD和TXD就可以完成,。此時(shí),對于P3口的其他位可以作為第二功能使用(定時(shí),、中斷等)。
2 使用8255A(或8155)擴(kuò)展并行I/O口
可編程并行接口芯片8255A[3]有3個(gè)并行的I/O口,,分別為PA,、PB和PC,這3個(gè)并行I/O口都可以通過編程決定它們的工作情況。8255A與單片機(jī)的連接如圖3所示,。
從圖3中可以看出單片機(jī)與8255A的連接情況,,利用單片機(jī)的P0口來分時(shí)傳送地址和數(shù)據(jù):P0口與8255A的8 bit數(shù)據(jù)線連接,用來傳送數(shù)據(jù)和8255A的編程控制字,;P0口連接地址鎖存器74LS373輸入端,,74LS373的輸出端連接8255A 的地址線A0、A1和片選信號CS,。通過A0,、A1(即P0.0、P0.1)的4種不同組合(00~11)選擇8255的3個(gè)并行的I/O口之一和控制口,。這樣,,通過對單片機(jī)和8255A編程,即可實(shí)現(xiàn)流水燈,。
從圖3可知,利用這種方法擴(kuò)展I/O口一次可以擴(kuò)展3個(gè)并行的I/O口,。
同樣,也可以使用可編程并行接口芯片8155來進(jìn)行并行I/O口的擴(kuò)展。8155有兩個(gè)8 bit和一個(gè)6 bit的并行I/O口,同時(shí)它還有256 B的靜態(tài)RAM和一個(gè)14 bit的計(jì)數(shù)器,。
3 使用芯片74LS138擴(kuò)展并行I/O口
74LS138 為3 線~8 線譯碼器,,可將地址輸入端(A、B,、C)的二進(jìn)制編碼在輸出端Y0~Y7對應(yīng)地以低電平譯出,。比如:ABC=110時(shí),則Y6輸出端輸出低電平信號。74LS138與單片機(jī)的連接如圖4所示,。
圖4中,,單片機(jī)的引腳P2.5、P2.6和P2.7分別連接74LS138的3個(gè)輸入端A,、B和C,,74LS138的8個(gè)不同的輸出端Y0~Y7分別連接8只發(fā)光二極管。這樣,,A,、B和C的8種不同組合(000~111)分別選擇74LS138的8個(gè)不同的輸出端Y0~Y7, 即可實(shí)現(xiàn)流水燈,。
4 幾種擴(kuò)展并行I/O口方法比較
使用單片機(jī)的串行口擴(kuò)展并行I/O口時(shí),,單片機(jī)與串入/并出的移位寄存器(74LS164)連接比較簡單,只需連接串行發(fā)送或接收引腳和移位脈沖引腳即可,。但是這種擴(kuò)展方法只能擴(kuò)展一個(gè)8 bit并行I/O口,,若需擴(kuò)展更多的并行I/O口時(shí)就需要更多的移位寄存器芯片;在使用這種方法擴(kuò)展并行I/O口時(shí),,需要了解串入/并出移位寄存器74LS164和并入/串出移位寄存器74LS165芯片的工作原理,,還需要了解單片機(jī)的串行工作方式0工作模式,。同時(shí),如果單片機(jī)工作時(shí)需要進(jìn)行串行通信,,則這種方法就不能使用了,。
使用并行接口芯片8255A擴(kuò)展并行I/O口時(shí),單片機(jī)與8255A的連接比較復(fù)雜,,需要考慮數(shù)據(jù)線,、地址線和控制線之間的連接,同時(shí)需要根據(jù)地址線的連接情況給出8255A各個(gè)并行I/O口的正確地址及8255A控制口的地址,。另外,,需要對8255A的編程控制字的定義及寫入方法有很好的了解。但是這種擴(kuò)展方法可以同時(shí)擴(kuò)展3個(gè)8 bit并行I/O口,,在需要擴(kuò)展多個(gè)并行I/O口時(shí)此種方法比較好,。
使用芯片74LS138擴(kuò)展并行I/O口時(shí),單片機(jī)與74LS138的連接比較簡單,,只需連接3個(gè)引腳即可,。這種擴(kuò)展方法也只能擴(kuò)展一個(gè)8 bit并行I/O口,若需擴(kuò)展更多的并行I/O口就需要更多的3線~8線芯片,。但是,,如果在單片機(jī)擴(kuò)展其他的芯片時(shí)不需要使用高位的3根地址線(即P2.5~P2.7),則這種方法就能很好地把這3根地址線利用起來,。
參考文獻(xiàn)
[1] 李朝青, 劉艷玲. 單片機(jī)原理及接口技術(shù)(第4版)[M]. 北京:北京航空航天大學(xué)出版社,,2013.
[2] 梅麗鳳.單片機(jī)原理及接口技術(shù)(修訂本)[M].北京:清華大學(xué)出版社,,2011.
[3] 胡漢才. 單片機(jī)原理及其接口技術(shù)[M]. 北京:清華大學(xué) 出版社,2010.