單片機(jī)引腳與端口操作
以前寫過一篇也是關(guān)于單片機(jī)引腳的文章,寫的非常簡(jiǎn)單,那時(shí)候的見解,今天再次看到單片機(jī)關(guān)于讀引腳和端口的操作時(shí)突然又是非常的不解,上網(wǎng)搜資料很多也都是關(guān)于單片機(jī)IO口結(jié)構(gòu)的解釋,經(jīng)過一番辛苦的搜索終于是找到了關(guān)于端口和引腳的資料,下面是我自己從各個(gè)方面總理的。
首先對(duì)于單片機(jī)IO口一般有第二功能,因?yàn)镻0口比較特別以P0口為例說明。具體的單片機(jī)IO口結(jié)構(gòu)和功能見:戳這里
1. P0口置1是怎么回事,什么時(shí)候置1?
單片機(jī)P0口作為輸入時(shí)需要先給鎖存器置1,以關(guān)閉V2場(chǎng)效應(yīng)管,不置1的話當(dāng)鎖存器的值為0時(shí),V2導(dǎo)通接地使引腳的值為低,不能輸入高電平。至于怎么給P0口置1,就是給P0寄存器置1.
2. P0口怎么要接上拉電阻?有什么用?
見P0口結(jié)構(gòu)圖可知,P0口作為通用IO口,即輸入輸出口時(shí),需要把V1場(chǎng)效應(yīng)管關(guān)閉,多功能開關(guān)連接到鎖存器,高電平信號(hào)通過鎖存器Q'端輸出時(shí)為低電平,V2管截止,V1,V2都截止,輸出既不是高電平又不是低電平,這就是漏極開路輸出。為了能夠輸出高電平需要外接上拉電阻。
3. 讀引腳和讀端口有什么不一樣?
讀引腳是讀P0口引腳上的電平信號(hào),讀端口是讀鎖存器中的值,即就是讀P0口寄存器的值。作為輸出時(shí)引腳和端口的值是一樣的,但是作為輸入時(shí)因?yàn)橥庠O(shè)可以影響引腳的值,所以端口和引腳的值作為輸入時(shí)可以不一樣。
4. 什么時(shí)候讀端口?什么時(shí)候讀引腳?各自的指令是什么?
一般的教科書上都會(huì)強(qiáng)調(diào):讀端口的指令為端口內(nèi)容取反這樣的“讀-修改-寫”指令。而讀引腳之前,先置1,然后用Mov A,Px之類的指令即可。 以下是從web(http://www.dzsc.com/dzbbs/20061112/200765184756359377.html )上搜集的資料:
“ 資料稱: 這樣的指令才有 Read-Modify-Write 功效
ANL (logical AND, e.G., ANL P1,A)
ORL (logical OR, e.g., ORL P2,A)
XRL (logical EX-OR, e.g., XRL P3,A)
JBC (jump if bit = 1 and clear bit, e.g., JBC P1.1, LABEL)
CPL (complement bit, e.g., CPL P3.0)
INC (increment, e.g., INC P2)
DEC (decrement, e.g., DEC P2)
DJNZ (decrement and jump if not zero, e.g., DJNZ P3, LABEL)
MOV PX.Y,C(move carry bit to bit Y of PORT X)
CLR PX.Y(clear bit Y of PORT X)
SETB PX.Y(set bit Y of PORT X)
”
有沒有讀端口的指令(而不修改端口)?
可以說,沒有直接的讀端口的指令。無(wú)論之前是否置1,以下指令
MOV A, P1
MOV 20H, P1
MOV R0, P1
MOV @R0, P1
讀的都是引腳,盡管不一定讀準(zhǔn)確。
5. 端口的內(nèi)容什么時(shí)候發(fā)生改變?當(dāng)Px口作為輸入,若外部引腳信號(hào)不斷變化,讀取引腳值之后, 端口內(nèi)容是否變化?
某網(wǎng)友的看法與我不謀而合:“ 由于復(fù)位后各引腳寄存器的值是明確的,而以后各引腳的寄存器的值的改變不會(huì)因?yàn)樾酒饷娑?影響到引腳寄存囂的值,引腳的寄存器的值只可能由程序來(lái)改變,所以就沒有必要只讀寄存器的值而不改變寄存器的內(nèi)容了。 ”
參考引腳內(nèi)部結(jié)構(gòu)圖可知,端口就是一個(gè)鎖存器,縱使鎖存器D口數(shù)據(jù)在變(內(nèi)部數(shù)據(jù)線),只要時(shí)鐘觸發(fā)端clk沒有觸發(fā)信號(hào),鎖存器中的內(nèi)容永遠(yuǎn)都不會(huì)改變,也就是說,不管外部引腳信號(hào)如何變,也不管執(zhí)行過多少次讀引腳操作,端口鎖存器中的內(nèi)容是不會(huì)發(fā)生變化的。
那么,端口內(nèi)容何時(shí)變化?答曰:只要執(zhí)行過一次輸出,端口內(nèi)容必為輸出值,因?yàn)槎丝诰褪禽敵龅臄?shù)據(jù)鎖存器。
6. 端口上的內(nèi)容亦即反映到引腳上來(lái)嗎?
Px口如果作為輸出口,由引腳內(nèi)部結(jié)構(gòu)可知,端口內(nèi)容是直接反映到引腳上去的。這對(duì)于P1口更為直接。而其他口,由于有第二功能,是否作為I/O口受內(nèi)部控制信號(hào)的控制
關(guān)于單片機(jī)其他IO口和P0差不多就不多說了,以后再繼續(xù)更新對(duì)IO口的理解,今天就先寫到這里,這里有些資料是引用別人的,在這里非常感謝大家的分享。
編輯:admin 最后修改時(shí)間:2018-05-19