資料介紹
IO口操作是單片機(jī)實(shí)踐中最基本最重要的一個(gè)知識(shí),本篇花了比較長(zhǎng)的篇幅介紹IO口的原理。也是查閱了不少資料,確保內(nèi)容正確無(wú)誤,花了很長(zhǎng)時(shí)間寫的。IO口原理原本需要涉及很多深入的知識(shí),而這里盡最大可能做了簡(jiǎn)化方便理解。這樣對(duì)于以后解決各種IO口相關(guān)的問(wèn)題會(huì)有很大的幫助。
IO口等效模型是本人獨(dú)創(chuàng)的方法,通過(guò)此模型,能有效的降低對(duì)IO口內(nèi)部結(jié)構(gòu)理解的難度。并且經(jīng)查閱資料確認(rèn),這種模型和實(shí)際工作原理基本一致。
前面說(shuō)了很多東西,不少人或許已經(jīng)迫不及待的想要實(shí)際操作單片機(jī)了。IO口作為單片機(jī)與外界通信最主要的手段,是單片機(jī)學(xué)習(xí)最基本也最重要的一個(gè)知識(shí)。前面我們編程實(shí)現(xiàn)了IO口點(diǎn)亮LED的實(shí)驗(yàn),本篇繼續(xù)對(duì)IO口相關(guān)知識(shí)進(jìn)行介紹。
為了更好的學(xué)習(xí)IO口操作,有必要了解一下IO口的內(nèi)部結(jié)構(gòu)和相關(guān)概念。這些知識(shí)對(duì)于后續(xù)的學(xué)習(xí)很有幫助,重點(diǎn)是理解,完全不需要刻意去記。不記得就回來(lái)再看看就行了,用得多了自然就記住了。
官方資料(最權(quán)威準(zhǔn)確)
我們說(shuō)過(guò),要了解一個(gè)芯片,最準(zhǔn)確有效的方法,是查看官方給出的芯片手冊(cè)等資料。但是初學(xué)單片機(jī),直接看芯片手冊(cè)資料恐怕很難弄明白,尤其是看到一堆英文、陌生的電路、名詞術(shù)語(yǔ),如果是我,一定也會(huì)抓狂的。但是這里我還是給出一張從Atmel官方的《Atmel 8051 Microcontrollers Hardware Manual》中截取的圖片。
給出這張圖片并不是為了打擊大家學(xué)習(xí)熱情,而是希望大家能明白,我們所見過(guò)的各種單片機(jī)資料到底是怎么來(lái)的,到底是否準(zhǔn)確,這一切都可以通過(guò)官方資料弄清楚,對(duì)于大家以后深入學(xué)習(xí)一些東西有一定的幫助。
第二功能簡(jiǎn)介
上圖正是官方給出的權(quán)威的51單片機(jī)IO口結(jié)構(gòu)圖。可以看出,單片機(jī)的四組IO口內(nèi)部結(jié)構(gòu)各不相同,原因是有些IO口有第二功能,入門篇里面提到過(guò)。
還記得這張管腳圖嗎?括號(hào)中標(biāo)注的就是IO口的第二功能名稱。除了P1以外,每個(gè)接口都有第二功能。介紹單片機(jī)系統(tǒng)模塊時(shí),我提到51單片機(jī)有預(yù)留擴(kuò)展存儲(chǔ)器的接口,正是圖中的P0和P1的第二功能(同時(shí)還要用到29、30等管腳)。因?yàn)橛玫牟欢啵婕爸R(shí)也比較深入,就不做具體研究了。順便一提,其實(shí)這里我們看到的AD0~AD7,就是用于并行口的。而P3口的第二功能,就包括串口等,后面學(xué)到了還會(huì)具體介紹。
IO口等效電路
由于深入理解IO口的原理涉及到很多電路甚至微機(jī)原理相關(guān)知識(shí),這里只做簡(jiǎn)化介紹,能滿足絕大多數(shù)情況下的需要。作為普通IO口使用時(shí),四個(gè)IO口的工作原理基本一致。
下面的圖是從前面圖中的P1電路中裁剪出來(lái)的,也是我們需要理解的關(guān)鍵。
右邊的P1.X表示P1的一個(gè)IO口,如P1.0;電阻右邊寫的英文是內(nèi)部上拉電阻的意思,之所以叫上拉電阻,是因?yàn)殡娮璧囊欢私釉赩CC上。下面的三角形表示接地,相當(dāng)于GND。除此之外,最關(guān)鍵的一個(gè)器件是下面這個(gè)。
這個(gè)器件的本質(zhì)是晶體管,起到電子開關(guān)的作用(如果想深入了解,可以學(xué)習(xí)模擬電路相關(guān)的知識(shí),或者等到原理篇中介紹)。上面的電路可以大致等效成下圖。注意,這樣的結(jié)構(gòu)只是一個(gè)IO口,整個(gè)單片機(jī)中有32個(gè)這種結(jié)構(gòu)。
圖中的R為阻值10k的上拉電阻,S是由前面的晶體管等效的電子開關(guān)。藍(lán)色框中的部分在單片機(jī)內(nèi)部。
S的開關(guān)狀態(tài)由CPU控制。當(dāng)用程序設(shè)置P1.0管腳為低電平時(shí),電子開關(guān)S閉合。實(shí)際上電子開關(guān)S閉合時(shí),兩端還有很小的電阻。根據(jù)分壓原理,P1.0上會(huì)有一個(gè)很低的電壓,近似0V,已經(jīng)可以視為低電平了。當(dāng)設(shè)置管腳為高電平時(shí)S斷開,P1.0通過(guò)10k上拉電阻接到VCC上。如果用電壓表測(cè)量,因?yàn)殡妷罕韮?nèi)阻很大,所以可以得出其電壓值為高電平。
IO口的輸出:點(diǎn)亮LED
前面介紹了點(diǎn)亮第一個(gè)LED的程序和電路。程序如下:
#include
sbit LED = P1^0;
void main()
{
LED = 0;
while(1);
}
電路關(guān)鍵部分如下,VCC通過(guò)1k電阻連接到LED正極,LED負(fù)極接到P1.0口:
在單片機(jī)執(zhí)行LED=0的時(shí)候,電子開關(guān)S就由CPU控制而閉合,P1.0上輸出低電平。電流通過(guò)1k電阻和LED流入P1.0,再經(jīng)過(guò)S流入GND,LED兩端有合適的電壓于是點(diǎn)亮。結(jié)合單片機(jī)內(nèi)部IO口等效電路,整個(gè)電路如下圖
灌電流與拉電流
在上面的例子中,P1.0輸出低電平點(diǎn)亮LED。能不能反過(guò)來(lái),P1.0輸出高電平點(diǎn)亮LED呢?我們可以考慮電路連接成下面這樣,并在程序中編寫LED=1。
當(dāng)執(zhí)行LED=1時(shí),S斷開。電流通過(guò)10k上拉電阻R從P1.0流出,并進(jìn)入LED。由于上拉電阻的阻值太大,電流太小,導(dǎo)致LED不亮,或者亮度很微弱。所以通常不采用這種方法。
這兩種方法,前者電流從外部流入單片機(jī)內(nèi)部,我們稱之為灌電流接法;后者電流方向相反,稱為拉電流接法。對(duì)比可以看出,對(duì)于51單片機(jī),灌電流接法電流較大,拉電流接法由于受到上拉電阻限制,電流較小。
在實(shí)際當(dāng)中灌電流的最大電流也是有限的,因?yàn)殡娮娱_關(guān)S中能通過(guò)的電流有限。根據(jù)STC官方的芯片手冊(cè),對(duì)于STC單片機(jī),建議單個(gè)IO口灌電流建議不超過(guò)20mA,所有IO口灌電流之和不超過(guò)55mA,否則容易燒壞IO口。而拉電流大小只有230uA左右。
上拉電阻/下拉電阻/高阻態(tài)
拉電流是從上拉電阻流出來(lái)的,能否提高拉電流大小呢?答案是可以。我們只需要在單片機(jī)外部再添加一個(gè)上拉電阻,就可以增大拉電流,并且能成功點(diǎn)亮LED,如下圖所示。
圖中的電路,相當(dāng)于R和R0并聯(lián)了,整個(gè)上拉電阻的阻值減小了。但是這樣做有個(gè)缺陷。在這個(gè)電路中,當(dāng)單片機(jī)輸出低電平時(shí),S閉合,此時(shí)電流從VCC通過(guò)上拉電阻和S流入GND。此時(shí)雖然LED熄滅了,但是卻有較大電流通過(guò)上拉電阻而浪費(fèi)掉。所以上拉電阻過(guò)大,會(huì)導(dǎo)致驅(qū)動(dòng)力不足,而上拉電阻過(guò)小,又會(huì)在輸出低電平時(shí)浪費(fèi)電能。
上拉電阻的作用是什么呢?對(duì)電路了解多一點(diǎn)的人很快能發(fā)現(xiàn),如果沒(méi)有上拉電阻,IO口就無(wú)法輸出高電平,也就是下圖這樣的。開關(guān)閉合時(shí)能輸出低電平,但是開關(guān)斷開時(shí),P1.0就懸空了,什么也沒(méi)連接。這時(shí)IO口的電壓就是不確定的了,這種狀態(tài)無(wú)法判斷它是低電平還是高電平,叫做高阻態(tài)。很巧的是,單片機(jī)的P0口確實(shí)就沒(méi)有上拉電阻,而其他三組IO口都有上拉電阻。所以當(dāng)P0輸出高電平,并且沒(méi)有外接上拉電阻時(shí),就是高阻態(tài),不能正常輸出高電平。后面我會(huì)通過(guò)具體例子來(lái)讓大家感受一下高阻態(tài)。
備注1:后續(xù)文章會(huì)詳細(xì)分析高阻態(tài)。
備注2:雖然P1.0似乎是同時(shí)連接到CPU的IO輸入端了,即圖中寫著“輸入”的綠色箭頭,但是這部分電路只有在讀取管腳輸入的時(shí)候才會(huì)導(dǎo)通,并且是單向的,可以想象成內(nèi)阻較大的電壓表輸入端。
備注3:如圖中所示,51單片機(jī)IO口工作在普通IO口狀態(tài)下,電子開關(guān)是用晶體管實(shí)現(xiàn)的(包括三極管和MOS管兩種)。圖中實(shí)現(xiàn)的這種電平輸出結(jié)構(gòu),如果是MOS管實(shí)現(xiàn),則被稱為漏極開路輸出(OD=Open Drain,或簡(jiǎn)稱為“開漏”),漏極是MOS管的一個(gè)管腳,對(duì)應(yīng)于圖中S和R的接點(diǎn)處。而如果是三極管實(shí)現(xiàn),則稱為集電極開路輸出(OC=Open Collector),兩者原理基本一致。后續(xù)文章會(huì)介紹三極管。
上拉電阻的存在,將原本的高阻態(tài)轉(zhuǎn)變成了高電平,也因此得名。和上拉電阻相對(duì)應(yīng)的,還有下拉電阻,區(qū)別在于下拉電阻另一端不是連接VCC而是接到GND。
IO口的輸入
IO口之所以叫IO口(IO=Input/Output),意味著它既可以輸出又可以輸入。前面講的都是IO口的輸出,下面講IO口的輸入。IO口的輸出我們通過(guò)LED來(lái)介紹,而IO口的輸入我們則通過(guò)開關(guān)來(lái)說(shuō)明。在很多單片機(jī)中,IO的輸入和輸出需要通過(guò)電路切換,而對(duì)于51單片機(jī)來(lái)說(shuō),輸入和輸出使用的是同一套電路,也就是上面我們分析的電路。
圖中的S0是一個(gè)單刀雙擲開關(guān),往上切換可以將P1.0接到VCC,往下切換可以接到GND。讀取時(shí)CPU會(huì)通過(guò)特定電路獲取圖中橙色導(dǎo)線上的電平。我們想要實(shí)現(xiàn)的效果是,讓CPU讀取P1.0端口的電平,從而獲得開關(guān)S0的狀態(tài)。
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- 基于STC單片機(jī)的IO口推挽輸出測(cè)試?yán)?/a> 1次下載
- 單片機(jī)IO口操作總結(jié)
- 小白學(xué)單片機(jī)(22) IO口:蜂鳴器的使用/三極管的工作原理介紹資料下載
- 單片機(jī)小白學(xué)步(23) IO口原理知識(shí)補(bǔ)充:雙向IO口、互補(bǔ)推挽、高阻態(tài)資料下載
- 小白學(xué)單片機(jī)(15) 單片機(jī)程序下載失敗總結(jié)資料下載
- 小白學(xué)單片機(jī)(16) 單片機(jī)/計(jì)算機(jī)系統(tǒng)概述:模塊化思想資料下載
- 小白學(xué)單片機(jī)(17) 單片機(jī)/計(jì)算機(jī)系統(tǒng)概述:核心模塊資料下載
- 小白學(xué)單片機(jī)(18) 單片機(jī)/計(jì)算機(jī)系統(tǒng)概述:通信接口與協(xié)議資料下載
- 小白學(xué)單片機(jī)(19) 單片機(jī)/計(jì)算機(jī)系統(tǒng)概述:擴(kuò)展模塊資料下載
- 單片機(jī)小白學(xué)寄存器資料下載
- 單片機(jī)的IO口結(jié)構(gòu)電路圖免費(fèi)下載 6次下載
- 51單片機(jī)IO口的詳細(xì)資料講解
- 如何使用單片機(jī)擴(kuò)展IO口的詳細(xì)資料說(shuō)明
- AVR單片機(jī)的IO口的設(shè)置及應(yīng)用的代碼詳細(xì)資料免費(fèi)下載 9次下載
- 基于89c51單片機(jī)IO口操作的幾個(gè)歷程資料分享 16次下載
- 為什么大家都用三極管來(lái)配合單片機(jī)IO口驅(qū)動(dòng)負(fù)載 3140次閱讀
- 利用單片機(jī)點(diǎn)亮流水燈實(shí)例解析 1w次閱讀
- PIC單片機(jī)以及51和AVR單片機(jī)的IO口操作方法解析 2951次閱讀
- PIC單片機(jī)和AVR單片機(jī)IO的操作方法解析 2608次閱讀
- 小白如何用焊接的單片機(jī)實(shí)驗(yàn)板做項(xiàng)目 7021次閱讀
- 單片機(jī)自關(guān)機(jī)電路原理圖 5187次閱讀
- PIC單片機(jī)以及51單片機(jī)和AVR單片機(jī)的IO口操作方法介紹 1931次閱讀
- 淺談STC單片機(jī)特殊IO的用法 9268次閱讀
- STC51單片機(jī)的IO配置問(wèn)題解決方案 1.1w次閱讀
- 關(guān)于STC單片機(jī)IO口的狀態(tài)和配置IO口的工作類型等資料概述 1.1w次閱讀
- 單片機(jī)應(yīng)用系統(tǒng)中如何通過(guò)IO實(shí)現(xiàn)斷電自關(guān)機(jī)?通過(guò)電路圖給你講解 6951次閱讀
- 淺析51單片機(jī)IO口的四種使用方法 6331次閱讀
- 單片機(jī)IO口相關(guān)知識(shí) 3315次閱讀
- pic單片機(jī)io口控制教程之c語(yǔ)言編程實(shí)現(xiàn) 1.1w次閱讀
- 主流32位單片機(jī)攻略連載:為什么要學(xué)STM32? 7.9w次閱讀
下載排行
本周
- 1TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 2開關(guān)電源基礎(chǔ)知識(shí)
- 5.73 MB | 6次下載 | 免費(fèi)
- 3100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 4嵌入式linux-聊天程序設(shè)計(jì)
- 0.60 MB | 3次下載 | 免費(fèi)
- 5基于FPGA的光纖通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 0.61 MB | 2次下載 | 免費(fèi)
- 6基于FPGA的C8051F單片機(jī)開發(fā)板設(shè)計(jì)
- 0.70 MB | 2次下載 | 免費(fèi)
- 751單片機(jī)窗簾控制器仿真程序
- 1.93 MB | 2次下載 | 免費(fèi)
- 8基于51單片機(jī)的RGB調(diào)色燈程序仿真
- 0.86 MB | 2次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33564次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21548次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
- 0.00 MB | 6653次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537796次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191185次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183278次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論
查看更多