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

QQ登錄

只需一步,快速開始

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

51單片機(jī)的IO口操作基礎(chǔ)知識(shí)介紹

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:101489 發(fā)表于 2016-1-5 01:42 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
以我們常用的STC單片機(jī)為例:STC單片機(jī)所有IO口均可由軟件配置成4種工作類型。4種類型分別為:準(zhǔn)雙向口/弱上拉(標(biāo)準(zhǔn)8051輸出模式)、強(qiáng)推挽輸出/強(qiáng)上拉、僅為輸入(高阻)或開漏輸出功能。每個(gè)口有2個(gè)寄存器中的相應(yīng)位控制每個(gè)引腳的工作類型。上電復(fù)位后的工作模式為準(zhǔn)雙向/弱上拉模式。2V以上為高電平,0.8V以下為低電平,每個(gè)I/O口驅(qū)動(dòng)能力可以達(dá)到20mA。
那么我們通過配置哪兩個(gè)寄存器來設(shè)定I/O口的工作模式呢:這兩個(gè)寄存器就是PxM1和PxM0,P0口對(duì)應(yīng)的就是P0M1和P0M0,P1口對(duì)應(yīng)的就是P0M1和P0M0,P2口對(duì)應(yīng)的就是P0M1和P0M0,P3口對(duì)應(yīng)的就是P0M1和P0M0。以P0口的設(shè)置為例:
如果有P0M1為10100000;P0M0為11000000,我們對(duì)照上表可以知道:P0.7管腳為開漏輸出;P0.6為強(qiáng)推挽輸出;P0.5為輸入(高阻);P0.4到P0.0為準(zhǔn)雙向口。

單片機(jī)I/O控制電路典型接法:
1、典型三極管控制電路
如果用弱上拉控制,建議加上拉電阻R1(3.3K - 10K),如果不加上拉電阻R1,建議R2的阻值在15K以上,或用強(qiáng)推挽輸出。

2、典型發(fā)光二極管控制電路
采用準(zhǔn)雙向口模式,用灌電流驅(qū)動(dòng)發(fā)光二極管限流電阻盡量大于1K,最小不要小于470Ω

推挽/強(qiáng)上拉口模式,用拉電流驅(qū)動(dòng)發(fā)光二極管,限流電阻一般為1K。

3、混合電壓供電系統(tǒng)3V/5V器件I/O口互連
STC單片機(jī)如果供電是5V,當(dāng)它連接3.3V器件時(shí),為防止3.3V器件承受不了5V,可將相應(yīng)的5V單片機(jī)I/O口先串一個(gè)330Ω的限流電阻到3.3V器件I/O口,程序初始化時(shí)將5V器件的I/O口設(shè)置成開漏配置,斷開內(nèi)部上拉電阻,相應(yīng)的3.3V器件I/O口外部加10K上拉電阻到3.3V器件的VCC,這樣高電平是3.3V,低電平是0V,輸入輸出一切正常。

4、當(dāng)I/O口作為PWM輸出I/O口時(shí),需要設(shè)置成強(qiáng)推挽輸出/強(qiáng)上拉輸出,同時(shí)加輸出限流電阻10K即可。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:299857 發(fā)表于 2018-4-1 08:19 | 只看該作者
P0口對(duì)應(yīng)的就是P0M1和P0M0,P1口對(duì)應(yīng)的就是P0M1和P0M0,P2口對(duì)應(yīng)的就是P0M1和P0M0,P3口對(duì)應(yīng)的就是P0M1和P0M0。是不是錯(cuò)了?還有怎么設(shè)置啊,我在keil軟件里寫       
P2M0 == 11111111;
P2M1 == 00000000;
或者輸入
P2M0 = 1;
P2M1 = 0;
都報(bào)錯(cuò)說MAIN.C(28): error C202: 'P2M0': undefined identifier。(沒定義變量)
回復(fù)

使用道具 舉報(bào)

板凳
ID:200844 發(fā)表于 2018-4-5 10:32 | 只看該作者
STC89C52RC I/O口有4種工作類型嗎,怎么配置不了,哪些型號(hào)有這功能。
回復(fù)

使用道具 舉報(bào)

地板
ID:398477 發(fā)表于 2018-10-3 19:51 來自手機(jī) | 只看該作者
山水2000 發(fā)表于 2018-4-5 10:32
STC89C52RC I/O口有4種工作類型嗎,怎么配置不了,哪些型號(hào)有這功能。

這個(gè)單片機(jī)只有準(zhǔn)雙向口!你可以上STC官網(wǎng)查詢!
回復(fù)

使用道具 舉報(bào)

5#
ID:731755 發(fā)表于 2021-4-3 18:15 | 只看該作者
請(qǐng)問樓主,P0M0,P1M0,在表格里面怎么對(duì)應(yīng)著看看,我在一本書看到樓主一樣的,也是沒有介紹清楚
回復(fù)

使用道具 舉報(bào)

6#
ID:289371 發(fā)表于 2023-3-30 22:42 | 只看該作者
單片機(jī)我來了 發(fā)表于 2018-4-1 08:19
P0口對(duì)應(yīng)的就是P0M1和P0M0,P1口對(duì)應(yīng)的就是P0M1和P0M0,P2口對(duì)應(yīng)的就是P0M1和P0M0,P3口對(duì)應(yīng)的就是P0M1和P0 ...

你說的是對(duì)的,P后面的數(shù)字是端口號(hào),值的位數(shù)對(duì)應(yīng)是端口的第幾個(gè),我用stc8是可以的,用stc12C5A60S2就存在P0M0之類的沒定義的問題,我感覺是軟件用的reg52的問題,那里面可能沒定義,這個(gè)我也不清楚,希望有人解答
回復(fù)

使用道具 舉報(bào)

7#
ID:975054 發(fā)表于 2023-9-17 11:32 | 只看該作者
單片機(jī)我來了 發(fā)表于 2018-4-1 08:19
P0口對(duì)應(yīng)的就是P0M1和P0M0,P1口對(duì)應(yīng)的就是P0M1和P0M0,P2口對(duì)應(yīng)的就是P0M1和P0M0,P3口對(duì)應(yīng)的就是P0M1和P0 ...

還沒見過這么寫的:P2M0 == 11111111;P2M1 == 00000000;
應(yīng)寫成十六進(jìn):P2M0 =0xff ; P2M1 =0x00;
報(bào)錯(cuò)原因是你這樣寫編譯器只能把P2M0/P2M1當(dāng)成變量了而你沒定義變量類型(而實(shí)際是寄存器).
回復(fù)

使用道具 舉報(bào)

8#
ID:975054 發(fā)表于 2023-9-17 11:34 | 只看該作者
任何混合供電系統(tǒng)的I/O都要結(jié)合具體連接情況,嚴(yán)謹(jǐn)來說是"必要時(shí)加適當(dāng)阻值的限流電阻,一般0-330Ω";注意是必要時(shí)!
0Ω就是可不接情況:接口已設(shè)開漏且距離很近無其他風(fēng)險(xiǎn),是可不接。但萬一你調(diào)試時(shí)錯(cuò)改成非開漏或其他特殊情況,就可能直接輸出5V到3V芯片去了,那不就危險(xiǎn)了么?串了限流電阻就基本可以高枕無憂了;并非“應(yīng)該是完全沒必要加限流電阻了嘛!”。
又如這個(gè)口是連接電纜到設(shè)備外部的,一般都會(huì)接個(gè)限流電阻,可能還需要穩(wěn)壓防靜電浪涌等等,才能防止外部引入不可預(yù)測(cè)的高壓、靜電、短路開路等等各種干擾的危害!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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