新聞中心

單片機(jī)引腳讀寫操作

作者: 時(shí)間:2016-10-29 來(lái)源:網(wǎng)絡(luò) 收藏

使用時(shí)肯定會(huì)用到的IO。以51P1口為例。內(nèi)部結(jié)構(gòu)如圖所示

本文引用地址:http://2s4d.com/article/201610/307392.htm
1.jpg

當(dāng)單片機(jī)進(jìn)行寫操作時(shí),鎖存器(D觸發(fā)器)CLK端接收有效電平,然后內(nèi)部總線上需要寫的數(shù)據(jù)就會(huì)通過(guò)D觸發(fā)器傳輸?shù)絈'。當(dāng)寫1時(shí)Q'為0,使MOSFET截止,因此外部電平為1.當(dāng)寫0時(shí)Q'為1,MOSFET飽和導(dǎo)通,此時(shí)引腳可以看成接地,所以引腳為0。

如果對(duì)單片機(jī)IO口進(jìn)行讀操作。由圖可以看出讀操作包括讀寄存器和讀引腳。以前知道有這兩種區(qū)別,但是從來(lái)沒(méi)仔細(xì)區(qū)分過(guò)。從圖中可以看出讀寄存器時(shí)讀寄存器上的三態(tài)緩沖器打開,Q端的值直接傳到了內(nèi)部總線上,而下面的讀引腳三臺(tái)緩沖器是高阻態(tài),讀引腳時(shí)則相反。

匯編語(yǔ)言中對(duì)讀寄存器和讀引腳做了一定的區(qū)別,但說(shuō)實(shí)話我在看匯編代碼時(shí)還是區(qū)分不清兩者的區(qū)別?,F(xiàn)在大家對(duì)單片機(jī)編程應(yīng)該大部分采用的都是C語(yǔ)言,在我看來(lái),C語(yǔ)言中已經(jīng)極大的淡化了讀寄存器還是讀引腳的區(qū)別。

有些人說(shuō)a=P1是讀引腳(a是某個(gè)字符變量),P1=P1|0x00是讀寄存器(可能是認(rèn)為這里P1進(jìn)行了一次邏輯運(yùn)算,只有寄存器中的值才能進(jìn)行邏輯運(yùn)算),但我在用C語(yǔ)言時(shí)感覺(jué)用P1=P1|0x00也是讀的引腳。也有些人說(shuō)看經(jīng)過(guò)編譯器編譯后的匯編代碼才能分辯出兩者的區(qū)別,不知道這里大家怎么看讀引腳和讀寄存器?

在讀引腳時(shí)需要先向引腳鎖存器中寫1。因?yàn)槿绻_寄存器中是0的話會(huì)導(dǎo)通MOSFET,使外部端口一直是低電平,即使外面接的是高電平在讀引腳的時(shí)候也讀的是0。以前知道需要這樣做,但讀引腳的時(shí)候一直沒(méi)寫過(guò)1,發(fā)現(xiàn)讀的也對(duì),現(xiàn)在我覺(jué)得這樣寫不符合規(guī)范。

一般來(lái)說(shuō)單片機(jī)在上電復(fù)位后默認(rèn)引腳寄存器的值是1,這樣一來(lái)關(guān)斷了MOSFET,而我們?cè)谑褂脝纹瑱C(jī)的時(shí)候如果這個(gè)引腳作為輸入,也不會(huì)讓它變成一會(huì)兒輸出一會(huì)兒輸入,使得能夠準(zhǔn)確的讀出外部端口的值。現(xiàn)在我在寫程序時(shí)如果端口做為輸入引腳,我會(huì)在初始化里對(duì)其寫一次1。當(dāng)然,以后就不用寫了,因?yàn)閷懥艘淮?后沒(méi)有其他的寫操作,引腳鎖存器中會(huì)一直保持這個(gè)值不變。當(dāng)然,如果某個(gè)單片機(jī)引腳同時(shí)作為輸出和輸入引腳復(fù)用時(shí),則必須在輸出完成后變成輸入前先向其寫1,再讀引腳的值。



關(guān)鍵詞: 單片機(jī) 引腳

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉