- 51單片機應(yīng)用基礎(chǔ)(C51版)
- 胡進德 丁如春 劉愛榮
- 4536字
- 2019-11-27 11:56:46
學習單元一 解剖單片機I/O口
在學習情景一的學習單元三中,通過學習單片機控制LED指示燈的電路模型對單片機如何控制外部器件有了一個比較淺顯、比較粗糙的感性認識。例如,我們說單片機內(nèi)部的電子開關(guān)狀態(tài)(閉合還是斷開)決定了單片機引腳輸出的是低電平0還是高電平1,而電子開關(guān)的狀態(tài)是由指令控制的。下面通過解剖單片機P0、P1、P2和P3口的內(nèi)部結(jié)構(gòu)來進一步深入了解電子開關(guān)的結(jié)構(gòu)和控制原理。
一、I/O口的內(nèi)部結(jié)構(gòu)和工作原理
1.P1口
從前面的學習我們了解到單片機的四個端口中只有P1口沒有第二種功能,而P0口、P2口和P3口都有第二種功能。由此看來,好像只有P1口比較“單純”,比較“簡單”。事實的確如此,P1口的內(nèi)部結(jié)構(gòu)最簡單,用途也單一,僅作數(shù)據(jù)I/O口使用。P1口結(jié)構(gòu)如圖3-1所示。

圖3-1 P1口的內(nèi)部結(jié)構(gòu)
圖中“引腳P1.X”的意思是這個結(jié)構(gòu)代表P1.0~P1.7任意一個引腳,所以P1口每一個引腳結(jié)構(gòu)都是相同的。P1口內(nèi)部主要由D型鎖存器(方形,也稱P1.X鎖存器)、兩個三態(tài)門緩沖器(三角形)、場效應(yīng)管T和內(nèi)部上拉電阻組成。D型鎖存器也稱為D鎖存器,是一種常用的鎖存器,在“寫鎖存器”信號的時序控制下,D型鎖存器輸出端Q與輸入端D的信號相同,而輸出端與D的信號相反。例如“內(nèi)部總線”向輸入端D輸入1,當“寫鎖存器”信號到來時,輸出端Q也輸出1,
輸出0。而D端輸入0,則Q端和
端輸出分別為0和1。
兩個三態(tài)門緩沖器作信號的緩沖,并通過“讀鎖存器”和“讀引腳”兩個控制信號來使能三態(tài)門。例如“內(nèi)部總線”向鎖存器的輸入端D送入一個數(shù)據(jù)1,在“寫鎖存器”信號到來后,鎖存器的輸出端Q也輸出一個1,如果這時“讀鎖存器”信號到來,對應(yīng)的三態(tài)門打開,數(shù)據(jù)1就能通過緩沖器而進入“內(nèi)部總線”上。
場效應(yīng)管的工作原理與三極管類似,它也有3個引腳:柵極G、漏極D和源極S。當柵極G為高電平時,場效應(yīng)管導(dǎo)通,引腳P1.X相當于與地線相連,于是P1.X口上為低電平;反之柵極G為低電平時場效應(yīng)管截止,P1.X口通過上拉電阻與Vcc相連,所以P1.X口為高電平。這里場效應(yīng)管相當于一個反相器。
P1口作為數(shù)據(jù)I/O口使用時,有輸出、讀引腳和讀鎖存器三種工作方式。三種工作方式由相應(yīng)的單片機指令區(qū)分。
(1)輸出工作方式(數(shù)據(jù)輸出)。當P1口作數(shù)據(jù)輸出時,實質(zhì)是單片機引腳輸出高電平或低電平,一般執(zhí)行數(shù)據(jù)輸出指令如“MOV P1, #data”,單片機的CPU發(fā)出“寫鎖存器”信號加在P1鎖存器時鐘端CL,與單片機內(nèi)部數(shù)據(jù)總線相連的D端數(shù)據(jù)取反后出現(xiàn)在Q端,經(jīng)場效應(yīng)管反相后出現(xiàn)在P1引腳上,即P1引腳上電平狀態(tài)與P1鎖存器輸出數(shù)據(jù)“#data”保持一致。例如,當輸出數(shù)據(jù)“#data”的某個數(shù)據(jù)位“bit”(在單片機指令中,數(shù)據(jù)“#data”為1個字節(jié),代表8個二進制數(shù)據(jù)“bit”)為“1”時,該數(shù)據(jù)位出現(xiàn)在內(nèi)部數(shù)據(jù)總線上,于是相應(yīng)的P1.X口為高電平;反之當數(shù)據(jù)位bit為“0”時,相應(yīng)的P1.X口為低電平。
(2)讀引腳工作方式(數(shù)據(jù)輸入)。單片機在讀引腳數(shù)據(jù)時,實質(zhì)是單片機讀取引腳電平狀態(tài)(高電平或低電平),一般執(zhí)行以I/O口為源操作數(shù)的指令如“MOV A, P1”,此時CPU發(fā)出“讀引腳”信號加在對應(yīng)的三態(tài)門控制端,三態(tài)門打開,P1.X引腳上的數(shù)據(jù)(高電平1或低電平0)經(jīng)三態(tài)門進入內(nèi)部數(shù)據(jù)總線,并送到累加器A,于是可以通過指令判斷累加器A的數(shù)據(jù)來判斷P1.X引腳的輸入信號是高電平1還是低電平0。此時P1.X引腳輸入數(shù)據(jù)不經(jīng)過P1鎖存器,因此輸入時無鎖存功能。
注意:當P1口執(zhí)行讀引腳操作時,必須保證場效應(yīng)管截止。若場效應(yīng)管導(dǎo)通,則從P1引腳上輸入的信號被場效應(yīng)管短路。因此,為使場效應(yīng)管截止,必須先用輸出指令向P1鎖存器寫“1”,使為“0”,效應(yīng)管截止。由于在讀引腳數(shù)據(jù)時還必須附加這樣一個預(yù)備動作,P1被稱為“準雙向”I/O口。向P1鎖存器寫“1”可用“MOV P1, #0FFH”、“ORL P1, #0FFH”等指令。
(3)讀鎖存器工作方式。單片機有一些“讀—修改—寫”指令,簡稱“讀—改—寫”指令,如上述“ORL P1, #0FFH”指令。該指令的執(zhí)行過程分三步:首先CPU發(fā)出“讀鎖存器”信號加在對應(yīng)的三態(tài)門控制端,三態(tài)門打開,P1鎖存器中的數(shù)據(jù)經(jīng)三態(tài)門送到內(nèi)部數(shù)據(jù)總線,然后在ALU(Arithmetic Logic Unit,算術(shù)邏輯單元,簡稱ALU)中進行算術(shù)邏輯運算,最后將運算結(jié)果送回P1鎖存器。除上述ORL指令外,這類指令還有ANL、XRL、JBC、CPL、SET等,執(zhí)行這類指令時CPU直接讀鎖存器而不是讀端口引腳。采用讀鎖存器方式是因為從端口引腳上讀入的數(shù)據(jù)不一定能真正反映鎖存器的狀態(tài),二者在某些情況下并不完全一致。
2.P3口
學習了P1口的內(nèi)部結(jié)構(gòu)和工作原理后,接下來再看稍微復(fù)雜一些的P3口內(nèi)部結(jié)構(gòu),如圖3-2所示。

圖3-2 P3口的內(nèi)部結(jié)構(gòu)
P3口與P1口結(jié)構(gòu)相似。從前面表2-1知道P3口除了具有通用數(shù)據(jù)I/O口功能以外還有第二種功能,所以P3口比P1口多出了一個“第二輸出信號”和“第二輸入信號”。“第二輸出信號”和P3鎖存器的輸出端Q通過一個與非門及場效應(yīng)管與外部引腳連接。這樣,如果“內(nèi)部總線”向P3鎖存器D端輸入1時,根據(jù)與非門的邏輯關(guān)系,與非門的輸出端(即場效應(yīng)管的柵極G)則反相跟隨“第二輸出信號”。由于場效應(yīng)管的功能也是一個反相器,因而經(jīng)過兩次反相后,引腳P3.X上電平狀態(tài)與“第二輸出信號”始終保持一致。同樣的道理,當“第二輸出信號”為1時,引腳P3.X上電平狀態(tài)與P3鎖存器的數(shù)據(jù)始終保持一致。
(1)通用數(shù)據(jù)I/O口。P3口作為通用I/O口使用時,其內(nèi)部的“第二輸出信號”保持為高電平,此時P3口的用途和使用方法與P1口相同。
(2)第二種功能。當P3口的某一位作為第二功能輸出使用時,CPU將該位鎖存器置“1”,使與非門只受“第二輸出信號”的控制,“第二輸出信號”經(jīng)與非門和場效應(yīng)管二次反向后輸出在該位的引腳上。
當P3口的某一位作為第二功能輸入使用時,該位的“第二輸出信號”和鎖存器自動置“1”,場效應(yīng)管截止,該位引腳上的信號經(jīng)緩沖器送入“第二輸入信號”線,CPU在“讀引腳”之前就把第二功能的輸入信號讀走。
3.P0口
在前面的學習中已了解到P0口有兩種功能,一是作通用數(shù)據(jù)I/O口,二是復(fù)用數(shù)據(jù)總線/低8位地址總線。圖3-3是P0口的內(nèi)部結(jié)構(gòu),與P1口相比其特點是多出了一個多路開關(guān)MUX,這個開關(guān)由一個內(nèi)部“控制信號”控制,以選通地址或數(shù)據(jù)。圖中的場效應(yīng)管T1、T2組成輸出驅(qū)動器,與門、非門和多路開關(guān)MUX構(gòu)成控制電路。對于初學者來說,理解與記憶這些復(fù)雜的端口結(jié)構(gòu)有點困難,所以現(xiàn)在只需要有個大致的印象即可,以后接觸多了就比較容易掌握。

圖3-3 P0口的內(nèi)部結(jié)構(gòu)
(1)通用數(shù)據(jù)I/O口。P0口作為通用輸入/輸出口使用時,相應(yīng)的指令使“控制信號”電平為“0”,這有兩個作用:一是封鎖與門,使與門輸出為“0”,場效應(yīng)管T1截止,輸出級為開漏輸出;二是多路開關(guān)MUX接通P0鎖存器端和場效應(yīng)管T2。此時,P0口的用途和使用方法與P1口類似。
需要注意的是,在P0口作數(shù)據(jù)輸出時,由于T1截止,輸出級處于開漏狀態(tài),要使“1”信號正常輸出,必須外接上拉電阻,上拉電阻的阻值一般為4.7~10kΩ。
(2)復(fù)用數(shù)據(jù)/地址總線。在總線擴展應(yīng)用中,CPU訪問外部存儲器時,P0口分時復(fù)用數(shù)據(jù)總線/低8位地址總線。此時,相應(yīng)的指令使“控制信號”電平為“1”,多路開關(guān)MUX接通非門輸出端和場效應(yīng)管T2,同時打開與門。
當P0口用作地址或數(shù)據(jù)總線輸出時,地址或數(shù)據(jù)信號同時作用于與門和反相器,分別驅(qū)動T1和T2,由此在引腳上得到相同的地址或數(shù)據(jù)信號。例如,若“地址/數(shù)據(jù)”信號為“1”,則與門輸出“1”,T1導(dǎo)通,同時反相器輸出“0”,T2截止,P0口引腳輸出“1”。若“地址/數(shù)據(jù)”信號為“0”,則與門輸出“0”,T1截止,同時反相器輸出“1”,T2導(dǎo)通,P0口引腳輸出“0”。
當P0口用作數(shù)據(jù)總線輸入時,CPU使T1和T2均截止,引腳上的數(shù)據(jù)經(jīng)三態(tài)門進入內(nèi)部數(shù)據(jù)總線。
需要注意的是,地址線是8位一起自動輸出的,不能像I/O口線那樣逐位定義。
4.P2口
P2口與P0口有類似的功能和結(jié)構(gòu),一是作通用數(shù)據(jù)I/O口,二是作地址總線高8位。圖3-4是P2口的內(nèi)部結(jié)構(gòu),其特點也是多出了一個多路開關(guān)MUX,這個開關(guān)由一個內(nèi)部“控制信號”控制,以選通地址或數(shù)據(jù)。

圖3-4 P2口的內(nèi)部結(jié)構(gòu)
(1)通用數(shù)據(jù)I/O口。P2口作為通用輸入/輸出口使用時,多路開關(guān)接通P2鎖存器Q端。此時,P2口的用途和使用方法與P1口相同。
(2)地址總線。在總線擴展應(yīng)用中,多路開關(guān)MUX接通“地址信號”,此時P2口輸出地址總線的高8位,并與P0口輸出的低8位地址一起構(gòu)成16位的地址線,從而可以在單片機外部尋址64K的程序存儲器或數(shù)據(jù)存儲器。
同樣需要注意的是,高8位地址線是8位一起自動輸出的,不能像I/O口線那樣逐位定義。
從以上4個I/O口的結(jié)構(gòu)圖中得知,P1、P2、P3口內(nèi)部具有上拉電阻,而P0口是開漏結(jié)構(gòu)(由兩個場效應(yīng)管組成)。在應(yīng)用P0~P3口時,要注意以下幾點:
(1)每一個I/O口引腳都可以獨立地做輸入口或輸出口使用。P0口做I/O口使用要加上拉電阻,而其余口可不加上拉電阻。
(2)在總線擴展應(yīng)用中,P0口用于低8位地址/數(shù)據(jù)總線,P2口用于高8位地址總線。但P0和P2作地址或數(shù)據(jù)總線連接外部存儲器時不能同時再獨立地做輸入口或輸出口。
(3)任何一個I/O口作為輸入端口使用時,必須讓I/O口內(nèi)部的場效應(yīng)管處于截止狀態(tài),這樣從I/O口輸入的信號才能正常地從輸入緩沖器中被內(nèi)部總線讀走。所以需要用指令把對應(yīng)I/O口的鎖存器寫“1”,以關(guān)閉場效應(yīng)管。
(4)P0口內(nèi)部沒有上拉電阻,只有一個上拉用的場效應(yīng)管結(jié)構(gòu)。它作為輸出端口時為開漏結(jié)構(gòu)。由于沒有上拉電阻,端口電平不會被拉低,所以是一個純粹的雙向口。P1、P2和P3口內(nèi)部雖然都有上拉電阻,但端口電平仍然能被外部輸入的低電平信號拉低,所以P1、P2和P3口也被稱為“準雙向口”。
(5)單片機復(fù)位時P0~P3鎖存器各位數(shù)據(jù)均為“1”,因為單片機的復(fù)位操作會把高電平“1”寫到每一個I/O口的鎖存器中。
(6)P0~P3口的驅(qū)動能力都有限。P0口能驅(qū)動8個LS TTL門電路,而P1、P2、P3只能驅(qū)動4個。
(7)P3口常用于第二功能。P0口和P2口的第二功能很少用。
二、I/O口的抽象結(jié)構(gòu)
圖3-5所示為P1.X口的抽象結(jié)構(gòu)。這個示意圖極大簡化了圖3-1的實際結(jié)構(gòu),甚至模糊了實際結(jié)構(gòu)中的相互關(guān)系。例如圖3-1中輸入緩沖電路和輸出驅(qū)動電路分別由緩沖器和場效應(yīng)管擔任,而到了圖3-5時,輸入緩沖和輸出驅(qū)動都被簡單說成“驅(qū)動”,并且這兩部分與鎖存器的關(guān)系也被簡化了許多。

圖3-5 P1.X口的抽象結(jié)構(gòu)
這樣做行嗎?當然可以。還是再比較一下圖3-1和圖3-5。前者顯示出4根數(shù)據(jù)線:讀鎖存器、內(nèi)部總線、寫鎖存器和讀引腳。這4根數(shù)據(jù)線與單片機內(nèi)部結(jié)構(gòu)中的總線相連。于是在圖3-5中就用一根“總線”來表示這4根數(shù)據(jù)線,說明鎖存器與單片機內(nèi)部結(jié)構(gòu)中的某總線相連。很明顯,當一根線表示實際存在的多根線時,這條線被加粗了。這樣,以后凡是遇到一根加粗的線條,應(yīng)該立刻知道它代表多根線。因為圖3-5中的總線代表了實際中的4根數(shù)據(jù)線,所以,為節(jié)省時間、提高效率,在國際單片機系統(tǒng)開發(fā)會議上,只需要說“引腳P1.X的狀態(tài)通過總線讀入單片機中”就可以了。既然國際單片機系統(tǒng)開發(fā)會議上青睞一個比圖3-1更模糊的、更抽象的說法,于是本書也不再討論像圖3-1那么詳細的結(jié)構(gòu)了,取而代之,以圖3-5為抽象模型來討論。
圖3-5只描述了P1口中的某一個I/O口的抽象模型。在系統(tǒng)開發(fā)中,通常以整個P1口為討論對象,所以,進行進一步的抽象,得到了圖3-6所示的P1口抽象結(jié)構(gòu)。其中使用了更粗的線來表示總線,線上的雙向箭頭表示該總線可以雙向傳輸數(shù)據(jù)。P1口的8個I/O引腳保留用單獨的雙向數(shù)據(jù)線表示。

圖3-6 P1口的抽象結(jié)構(gòu)
- FPGA嵌入式項目開發(fā)三位一體實戰(zhàn)精講
- DSP技術(shù)與應(yīng)用實例
- 現(xiàn)代嵌入式系統(tǒng)開發(fā)專案實務(wù)
- ANSYS Workbench 17.0有限元分析從入門到精通
- 單片機原理與應(yīng)用技術(shù)
- 單片微型計算機原理及應(yīng)用
- AVR單片機原理與應(yīng)用實例
- 單片機開發(fā)從入門到實踐
- Protel DXP 2004應(yīng)用100例
- 單片機開發(fā)從入門到精通(第2版)
- 丹佛斯變頻器控制技術(shù)
- 高分辨率遙感影像變化檢測
- 基于Proteus的51系列單片機設(shè)計與仿真(第4版)
- AVR單片機與傳感器基礎(chǔ)
- 增強型單片機XC866原理及應(yīng)用