找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1873|回復(fù): 9
打印 上一主題 下一主題
收起左側(cè)

記錄一下51單片機(jī)io口的雙向理解,望糾正

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:874002 發(fā)表于 2024-4-8 16:50 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
在51單片機(jī)中,當(dāng)你配置一個(gè)端口(比如P1.1)為輸出模式并設(shè)置其輸出為高電平時(shí),你實(shí)際上是在寫入該端口的輸出寄存器。當(dāng)你讀取同一個(gè)端口時(shí),你讀取的是該端口的輸入寄存器,它反映了端口引腳的實(shí)際電平狀態(tài)。
這里的關(guān)鍵點(diǎn)是理解51單片機(jī)端口寄存器的雙向性。每個(gè)端口都有兩個(gè)寄存器與之關(guān)聯(lián):一個(gè)用于輸出(通常稱為輸出寄存器),另一個(gè)用于輸入(通常稱為輸入寄存器)。當(dāng)你向端口寫入數(shù)據(jù)時(shí),你實(shí)際上是在修改輸出寄存器的值,這決定了端口引腳應(yīng)該輸出的電平。而當(dāng)你從端口讀取數(shù)據(jù)時(shí),你讀取的是輸入寄存器的值,它反映了端口引腳當(dāng)前的實(shí)際電平狀態(tài),這可能受到外部電路的影響。
因此,當(dāng)你執(zhí)行P1.1 = 1;時(shí),你是在設(shè)置輸出寄存器的P1.1位為高電平。隨后,當(dāng)你執(zhí)行a = P1.1;時(shí),你是在讀取輸入寄存器的P1.1位,獲取的是端口引腳的實(shí)際電平狀態(tài)。這兩個(gè)操作涉及的是不同的寄存器,但都是通過(guò)相同的端口地址來(lái)訪問(wèn)的。
需要注意的是,當(dāng)端口配置為輸出模式時(shí),輸出寄存器的值會(huì)驅(qū)動(dòng)端口引腳的電平,但輸入寄存器的值會(huì)反映引腳的實(shí)際電平,這可能會(huì)受到外部電路的影響。因此,即使你設(shè)置了輸出寄存器為高電平,讀取輸入寄存器時(shí)仍可能得到低電平,特別是當(dāng)外部硬件響應(yīng)速度過(guò)慢或存在其他干擾時(shí)。
總結(jié)來(lái)說(shuō),配置為輸出并寫入的是輸出寄存器,而讀取的是輸入寄存器。雖然它們都是通過(guò)相同的端口地址來(lái)訪問(wèn)的,但它們代表了不同的功能:一個(gè)用于控制輸出電平,另一個(gè)用于讀取實(shí)際電平狀態(tài)。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:883242 發(fā)表于 2024-4-8 20:26 | 只看該作者
最關(guān)鍵的“線與”功能你忘了,51輸出高電平,讀取可以是高電平或者低電平,51輸出低電平,讀取永遠(yuǎn)是低電平。
回復(fù)

使用道具 舉報(bào)

板凳
ID:517951 發(fā)表于 2024-4-8 20:43 | 只看該作者
51單片機(jī)設(shè)置為準(zhǔn)雙向口, io口輸出為高, 就可以直接讀取io口電平高低了.
回復(fù)

使用道具 舉報(bào)

地板
ID:79094 發(fā)表于 2024-4-8 21:17 | 只看該作者
說(shuō)的 很正確
回復(fù)

使用道具 舉報(bào)

5#
ID:1109793 發(fā)表于 2024-4-8 22:04 | 只看該作者
Hephaestus 發(fā)表于 2024-4-8 20:26
最關(guān)鍵的“線與”功能你忘了,51輸出高電平,讀取可以是高電平或者低電平,51輸出低電平,讀取永遠(yuǎn)是低電平 ...

也不一定哦,比如輸出0的時(shí)候,強(qiáng)制施加一個(gè)高,雖然可能燒掉IO,但是讀出來(lái)的是啥呢
回復(fù)

使用道具 舉報(bào)

6#
ID:883242 發(fā)表于 2024-4-8 22:25 | 只看該作者
xiaobendan001 發(fā)表于 2024-4-8 22:04
也不一定哦,比如輸出0的時(shí)候,強(qiáng)制施加一個(gè)高,雖然可能燒掉IO,但是讀出來(lái)的是啥呢

既然你也知道燒掉,我也沒(méi)啥可以再說(shuō)的了。
回復(fù)

使用道具 舉報(bào)

7#
ID:961114 發(fā)表于 2024-4-9 08:57 | 只看該作者
4.13 I/0口的外部輸入何時(shí)低(0.8V以下)何時(shí)高電平(2.2V以上) 當(dāng)I/0口的外部輸入電平在0.8V以下時(shí),則單片機(jī)認(rèn)為該I0口的外部輸入為低電平;當(dāng)IO口的外部輸入電平在2.2V以上時(shí),則單片機(jī)認(rèn)為該IO口的外部輸入為高電平。 實(shí)際制造時(shí)按I/0口的外部輸入電平在1.2V以下時(shí)為低電平,在1.8V以上時(shí)為高電平。但由于存在制造誤差,1.2V以下單片機(jī)不一定認(rèn)為IO口的外部輸入為低電平,1.8V以上單片機(jī)也不一定就認(rèn)為IO口的外部輸入為高電平。但我們保證0.8V以下可以為低電平,2.2V以上可以為高電平,外部輸入電平在0.8V~2.2V之間不保證單片機(jī)能固定地識(shí)別IO口的外部輸入為低電平還是為高電平。
回復(fù)

使用道具 舉報(bào)

8#
ID:996773 發(fā)表于 2024-4-9 09:06 | 只看該作者
xiaobendan001 發(fā)表于 2024-4-8 22:04
也不一定哦,比如輸出0的時(shí)候,強(qiáng)制施加一個(gè)高,雖然可能燒掉IO,但是讀出來(lái)的是啥呢

還是把單片機(jī)io口內(nèi)部結(jié)構(gòu)了解一下,如果看不懂就得回爐學(xué)習(xí)模電晶體管基礎(chǔ)電路,如果還怕燒

io口,那我也沒(méi)啥可以再說(shuō)的了
回復(fù)

使用道具 舉報(bào)

9#
ID:1109793 發(fā)表于 2024-4-9 09:17 | 只看該作者
Hephaestus 發(fā)表于 2024-4-8 22:25
既然你也知道燒掉,我也沒(méi)啥可以再說(shuō)的了。

只是可能,控制好強(qiáng)度,是可以用至少幾分鐘沒(méi)問(wèn)題的
回復(fù)

使用道具 舉報(bào)

10#
ID:1109793 發(fā)表于 2024-4-9 09:18 | 只看該作者
hi等你 發(fā)表于 2024-4-9 09:06
還是把單片機(jī)io口內(nèi)部結(jié)構(gòu)了解一下,如果看不懂就得回爐學(xué)習(xí)模電晶體管基礎(chǔ)電路,如果還怕燒

io口,那 ...

你說(shuō)的就很好了,寫是寫的寄存器,實(shí)際上不一定是真實(shí)的,但是讀,一般是真實(shí)的。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表