我們?nèi)祟惪梢酝ㄟ^連接手腳上神經(jīng)網(wǎng)絡(luò),肌腱,控制著我們的肌肉做出各種動(dòng)作,完成各種造型。那單片機(jī)里的肌腱和神經(jīng)就是今天我們要講的主角----單片機(jī)的IO口。
我們學(xué)習(xí)單片機(jī),到底學(xué)什么呢?最終落腳點(diǎn),就是落在單片機(jī)的IO口上,其實(shí)最終就是操作單片機(jī)的IO口,什么串口通訊,IIC通信協(xié)議,中斷,定時(shí)器,最終在單片機(jī)上體現(xiàn)出來的還是我們對(duì)單片機(jī)IO口的操作。既然那么重要,今天我們就來好好的說一說單片機(jī)的IO口。
說起單片機(jī)的IO口,大家肯定會(huì)笑話小編,這么簡(jiǎn)單的東西,還要你說。對(duì),它是簡(jiǎn)單,看遍你是個(gè)人寫的單片機(jī)教程,最開始講編程就是從操作單片機(jī)IO口開始,都是從點(diǎn)亮一個(gè)LED燈開始,是的點(diǎn)亮一個(gè)LED燈,就是對(duì)單片機(jī)IO的最簡(jiǎn)單的操作,要么給高電平,要么給低電平,這也是操作IO的唯一的兩個(gè)方法。怎么說?舉個(gè)例子:要在某個(gè)IO上輸出PWM信號(hào),其實(shí)就是有規(guī)律的在這個(gè)IO上交替的給高低電平,給的速度快慢決定了PWM信號(hào)的頻率,給的高電平的時(shí)間所占一個(gè)高低電平周期的多少,決定了這個(gè)PWM信號(hào)的占空比。這么一說,高大上的PWM信號(hào)是不是就簡(jiǎn)單多了。
說了這么多,下面我們具體來說STC51單的IO的配置和各個(gè)模式的區(qū)別。
· 正 · 文 · 來 · 啦 ·
STC的51單片機(jī)為了更多更能的使用和運(yùn)用于不同場(chǎng)合,STC51單片機(jī)設(shè)計(jì)了4中IO口模式,分別是:準(zhǔn)雙向IO口模式、推挽輸出模式、高阻輸入模式和開漏輸出模式。每個(gè)IO口的模式配置,需要兩個(gè)寄存器結(jié)合起來進(jìn)行設(shè)置。這兩個(gè)寄存器分別是PnM1和PnM0,(在STC8系列芯片中n=0,1,2,3,4,5,6,7),以P0口為例,配置P0口需要P0M1和P0M0兩個(gè)寄存器進(jìn)行配置,具體如下圖:
即P0M1寄存器的第0位和P0M0寄存器的第0位組合起來配置P0.0位的模式,P0M1寄存器的第1位和P0M0寄存器的第1位組合起來配置P0.1位的模式,P0口的其他位以此類推。具體的PnM1和PnM0寄存器的組合方式如下表所示:
1、準(zhǔn)雙向I/O模式題
準(zhǔn)雙向I/O模式與標(biāo)準(zhǔn)51相比,雖然在內(nèi)部結(jié)構(gòu)上是不同的,但在用法上類同,比如要作為輸入時(shí)都必須先寫“1”置成高電平,然后才能去讀引腳的電平狀態(tài)。兼容傳統(tǒng)的51單片機(jī),在上電復(fù)位后,常規(guī)的IO都是準(zhǔn)雙向IO模式。在準(zhǔn)雙向IO模式下,端口輸出1時(shí)能力很弱,允許外部將其拉低,輸出0時(shí)驅(qū)動(dòng)能力很強(qiáng),可以吸收很大電流(20mA)。從輸出示意圖可以看出,在此模式下有三個(gè)晶體管來適應(yīng)不同的需求。當(dāng)端口寄存器輸出1且引腳也為1時(shí),晶體管“弱上拉”打開,提供基本的驅(qū)動(dòng)電流,如果引腳輸出的1被外部電路拉低時(shí),“極弱上拉”打開,且關(guān)閉“弱上拉”,此時(shí)外部需要有足夠的灌電流來拉低引腳電平;當(dāng)端口寄存器為1,且引腳懸空時(shí),“極弱上拉”打開,提供微弱的電流來維持引腳的高電平;當(dāng)端口寄存器由0變到1時(shí),“強(qiáng)上拉”打開來加快引腳上電平從0到1的轉(zhuǎn)換,強(qiáng)上拉打開后,引腳上電平由0到1的轉(zhuǎn)換需要兩個(gè)時(shí)鐘周期,所以需要讀外部狀態(tài)的時(shí)候,在端口寫1后需要加兩個(gè)空操作來等待引腳電平的轉(zhuǎn)換,完了讀取到的狀態(tài)才是實(shí)際引腳狀態(tài)。
準(zhǔn)雙向IO輸出示意圖
2、推挽輸出模式
推挽輸出的特點(diǎn)是不論輸出高電平還是低電平都能驅(qū)動(dòng)較大的電流,比如輸出高電平時(shí)可以直接點(diǎn)亮LED(要串聯(lián)幾百歐限流電阻),而在準(zhǔn)雙向I/O模式下很難辦到。
推挽輸出模式輸出示意圖
3、高阻輸入模式
此模式下,電流既不能流入也不能流出,這樣可以獲得比較高的輸入阻抗,這在模擬比較器和ADC應(yīng)用中是必需的。高阻態(tài)是數(shù)字電路中的術(shù)語,它既不是高電平也不是低電平,上一級(jí)電路輸出到高阻輸入接口,此接口不會(huì)對(duì)上一級(jí)電路的狀態(tài)有影響,和沒接一樣,不產(chǎn)生電流的衰減,電平也由接入的電平?jīng)Q定,電路分析時(shí)高阻態(tài)可做開路理解??梢园阉醋鬏敵觯ㄝ斎耄╇娮璺浅4?。這樣在做ADC轉(zhuǎn)換的時(shí)候是必須要的,我們都知道電壓表的內(nèi)阻我們認(rèn)為是無窮大的,在此,我們用ADC轉(zhuǎn)換實(shí)現(xiàn)電壓表的時(shí)候,就需要在高阻模式下進(jìn)行。注意,在此模式下,不提供20mA的灌電流的吸收能力。
高阻輸入模式示意圖
4、開漏輸出模式
開漏輸出模式既可讀外部狀態(tài),又可以對(duì)外輸出高低電平,但是必須加上拉電阻。當(dāng)端口鎖存器輸出0時(shí),內(nèi)部將關(guān)閉所有上拉晶體管,此時(shí)可以提供20mA的灌電流吸收能力;當(dāng)端口寄存器輸出1是,外部必須接上拉電阻,這也是此模式下的最大的優(yōu)點(diǎn)----電氣兼容性好,外部上拉電阻接3V電源,就能和3V邏輯器件接口,如果上拉電阻接5V電源,又可以與5V邏輯器件接口。
開漏輸出模式示意圖
STC8A特例一 ----內(nèi)部集成了上拉電阻
內(nèi)部已經(jīng)集成了3.7K的上拉電阻,可以通過上拉電阻控制寄存器實(shí)現(xiàn)禁止和使能。使能上拉電阻控制寄存器相關(guān)位后,對(duì)應(yīng)引腳上將接通單片機(jī)內(nèi)部的3.7K電阻,可以省去外部上拉電阻,禁止上拉電阻控制寄存器后將斷開內(nèi)部上拉電阻。官方給出的資料顯示,此3.7K上拉電阻實(shí)測(cè)為4.2K左右,而且在P3.0和P3.1上的上拉電阻可能會(huì)略小一些。
-
單片機(jī)
+關(guān)注
關(guān)注
6030文章
44489瀏覽量
631983 -
IO
+關(guān)注
關(guān)注
0文章
434瀏覽量
39049
原文標(biāo)題:一文解決STC51單片機(jī)的IO配置問題
文章出處:【微信號(hào):chuxue_MCU,微信公眾號(hào):?jiǎn)纹瑱C(jī)技術(shù)宅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論