單片機(jī)IO口的使用對(duì)所有單片機(jī)玩家來(lái)說(shuō)都是“家常便飯”,但是你真的了解IO口嗎?你真的能按你的需要配置IO口嗎?
一、準(zhǔn)雙向口輸出
準(zhǔn)雙向口輸出類型可用作輸出和輸入功能而不需重新配置口線輸出狀態(tài)。這是因?yàn)楫?dāng)口線輸出為1時(shí)驅(qū)動(dòng)能力很弱,允許外部裝置將其拉低。當(dāng)引腳輸出為低時(shí),它的驅(qū)動(dòng)能力很強(qiáng),可吸收相當(dāng)大的電流。(準(zhǔn)雙向口有3個(gè)上拉晶體管適應(yīng)不同的需要)
準(zhǔn)雙向口讀外部狀態(tài)前,要先鎖存為 ‘1’,才可讀到外部正確的狀態(tài).
二、強(qiáng)推挽輸出
推挽輸出配置的下拉結(jié)構(gòu)與開(kāi)漏輸出以及準(zhǔn)雙向口的下拉結(jié)構(gòu)相同,但當(dāng)鎖存器為1時(shí)提供持續(xù)的強(qiáng)上拉。推挽模式一般用于需要更大驅(qū)動(dòng)電流的情況。
三、僅為輸入(高阻)
輸入口帶有一個(gè)施密特觸發(fā)輸入以及一個(gè)干擾抑制電路。
四、開(kāi)漏輸出配置(若外加上拉電阻,也可讀)
當(dāng)口線鎖存器為0時(shí),開(kāi)漏輸出關(guān)閉所有上拉晶體管。當(dāng)作為一個(gè)邏輯輸出時(shí),這種配置方式必須有外部上拉,一般通過(guò)電阻外接到Vcc。如果外部有上拉電阻,開(kāi)漏的I/O口還可讀外部狀態(tài),即此時(shí)被配置為開(kāi)漏模式的I/O口還可作為輸入I/O口。這種方式的下拉與準(zhǔn)雙向口相同。
開(kāi)漏端口帶有一個(gè)施密特觸發(fā)輸入以及一個(gè)干擾抑制電路。
關(guān)于I/O口應(yīng)用注意事項(xiàng):
1.有些是I/O口由低變高讀外部狀態(tài)時(shí),讀不對(duì),實(shí)際沒(méi)有損壞,軟件處理一下即可。 因?yàn)?T的8051單片機(jī)速度太快了,軟件執(zhí)行由低變高指令后立即讀外部狀態(tài),此時(shí)由于實(shí)際輸出還沒(méi)有變高,就有可能讀不對(duì),正確的方法是在軟件設(shè)置由低變高后加1到2個(gè)空操作指令延時(shí),再讀就對(duì)了.
有些實(shí)際沒(méi)有損壞,加上拉電阻就OK了有些是外圍接的是NPN三極管,沒(méi)有加上拉電阻,其實(shí)基極串多大電阻,I/O口就應(yīng)該上拉多大的電阻,或者將該I/O口設(shè)置為強(qiáng)推挽輸出.
2.驅(qū)動(dòng)LED發(fā)光二極管沒(méi)有加限流電阻,建議加1K以上的限流電阻,至少也要加470歐姆以上
做行列矩陣按鍵掃描電路時(shí),實(shí)際工作時(shí)沒(méi)有加限流電阻,實(shí)際工作時(shí)可能出現(xiàn)2個(gè)I/O口均輸出為低,并且在按鍵按下時(shí),短接在一起,我們知道一個(gè)CMOS電路的2個(gè)輸出腳不應(yīng)該直接短接在一起,按鍵掃描電路中,此時(shí)一個(gè)口為了讀另外一個(gè)口的狀態(tài),必須先置高才能讀另外一個(gè)口的狀態(tài),而8051單?片機(jī)的弱上拉口在由0變?yōu)?時(shí),會(huì)有2時(shí)鐘的強(qiáng)推挽高輸出電流輸出到另外一個(gè)輸出為低的I/O口,就有可能造成I/O口損壞.建議在其中的一側(cè)加1K限流電阻,或者在軟件處理上,不要出現(xiàn)按鍵兩端的I/O口同時(shí)為低.
一種典型三極管控制電路:
如果用弱上拉控制,建議加上拉電阻R1(3.3K~10K),如果不加上拉電阻R1(3.3K~10K),建議R2的值在15K以上,或用強(qiáng)推挽輸出。
典型發(fā)光二極管控制電路:
推挽/強(qiáng)上拉口,用拉電流驅(qū)動(dòng)發(fā)光二極管
弱上拉/準(zhǔn)雙向口,用灌電流驅(qū)動(dòng)發(fā)光二極管限流電阻盡量大于1K,最小不要小于470Ω
混合電壓供電系統(tǒng)3V/5V器件I/O口互連
5V單片機(jī)連接3.3V器件時(shí),為防止3.3V器件承受不了5V,可將相應(yīng)的5V單片機(jī)I/O口先串一個(gè)330Ω的限流電阻到3.3V器件I/O口,程序初始化時(shí)將5V器件的I/O口設(shè)置成開(kāi)漏配置,斷開(kāi)內(nèi)部上拉電阻,相應(yīng)的3.3V器件I/O口外部加10K上拉電阻到3.3V器件的Vcc,這樣高電平是3.3V,低電平是0V,輸入輸出一切正常。
3V單片機(jī)連接5V器件時(shí),為防3V器件承受不了5V,如果相應(yīng)的I/O口是輸入,可在該I/O口上串接一個(gè)隔離二極管,隔離高壓部分。外部信號(hào)電壓高于單片機(jī)工作電壓時(shí)截止,I/O口因內(nèi)部上拉到高電平,所以讀I/O口狀態(tài)是高電平;外部信號(hào)電壓為低時(shí)導(dǎo)通,I/O口被鉗位在0.7V,小于0.8V時(shí)單片機(jī)讀I/O口狀態(tài)是低電平。
3V單片機(jī)連接5V器件時(shí),為防止3V器件承受不了5V,如果相應(yīng)的I/O口是輸出,可用一個(gè)NPN三極管隔離
如何讓I/O口上電復(fù)位時(shí)為低電平
普通8051單片機(jī)上電復(fù)位時(shí)普通I/O口為弱上拉高電平輸出,而很多實(shí)際應(yīng)用要求上電時(shí)某些I/O口為低電平輸出,否則所控制的系統(tǒng)(如馬達(dá))就會(huì)誤動(dòng)作,現(xiàn)STC12系列單片機(jī)由于既有弱上拉輸出又有強(qiáng)推挽輸出,就可以很輕松的解決此問(wèn)題。
現(xiàn)可在STC12系列單片機(jī)I/O口上加一個(gè)下拉電阻(1K/2K/3K),這樣上電復(fù)位時(shí),雖然單片機(jī)內(nèi)部I/O口是弱上拉/高電平輸出,但由于內(nèi)部上拉能力有限,而外部下拉電阻又較小,無(wú)法將其拉高,所以該I/O口上電復(fù)位時(shí)外部為低電平。如果要將此I/O口驅(qū)動(dòng)為高電平,可將此I/O口設(shè)置為強(qiáng)推挽輸出,而強(qiáng)推挽輸出時(shí),I/O口驅(qū)動(dòng)電流可達(dá)20mA,故肯定可以將該口驅(qū)動(dòng)為高電平輸出。
PWM輸出時(shí)I/O口的狀態(tài)(針對(duì)STC系列)