新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > c8051f020 I/O配置小結(jié)

c8051f020 I/O配置小結(jié)

作者: 時(shí)間:2016-11-24 來源:網(wǎng)絡(luò) 收藏

c8051f020 I/O配置小結(jié)
020的每個(gè)I/O口引腳都可以被配置為推挽或漏極開路輸出。同時(shí)引入了數(shù)字交叉開關(guān),允許將內(nèi)部數(shù)字系統(tǒng)資源映射到P0、P1、P2和P3的端口引腳。通過設(shè)置交叉開關(guān)寄存器可將片內(nèi)的計(jì)數(shù)器/定時(shí)器、串行總線、硬件中斷、ADC轉(zhuǎn)換啟動(dòng)輸入、比較器輸出以及微控制器內(nèi)部的其他數(shù)字信號(hào)配置為出現(xiàn)在端口I/O引腳。必須在訪問這些外設(shè)的I/O之前配置和允許交叉開關(guān)。

本文引用地址:http://butianyuan.cn/article/201611/320865.htm

注意的問題:

1.低端口既能按位尋址,也可以按字節(jié)尋址;高端口只能按字節(jié)尋址。

2.沒有被分配到的引腳作為一般的數(shù)字通用I/O口。

3.P1口還可以用作ADC1的模擬輸入。

4.P0MDOUT~P3MDOUT用于控制I/O端口每一位的輸出狀態(tài)。

5.EMIF(外部存儲(chǔ)器接口)是用于CPU與片外XRAM之間的數(shù)據(jù)傳輸通道,通過寄存器EMI0CF和EMI0CN選擇和管理端口實(shí)現(xiàn)數(shù)據(jù)的傳輸。

6.為了能訪問片外存儲(chǔ)器空間,必須設(shè)置EMI0CN寄存器的內(nèi)容為片外存儲(chǔ)器的空間頁地址。

7.如果把外部存儲(chǔ)器接口(EMIF)設(shè)置在高端口則首先要把EMI0CF的PRTSEL位設(shè)置為1,選擇高端口,同時(shí)選擇地址的復(fù)用或非復(fù)用方式,在把XBR的外部寄存器的EMIFLE位設(shè)置為0。

8.復(fù)用方式配置:在復(fù)用方式下,數(shù)據(jù)總線和地址總線的第8位共用相同的引腳(AD0~AD7)。在該方式下,要用一個(gè)外部鎖存器(如74HC373或相同功能的鎖存器)保持RAM地址的低8位。外部鎖存器由ALE(地址鎖存使能)信號(hào)控制,ALE信號(hào)由外部存儲(chǔ)器接口邏輯驅(qū)動(dòng)。

9.在總線復(fù)用時(shí),需要把地址數(shù)據(jù)復(fù)用端口配置為漏極開路。

10.ALE高/低脈寬占1個(gè)SYSCLK周期,地址建立/保持時(shí)間占0個(gè)SYSCLK周期,/WR和/RD占12個(gè)SYSCLK周期,EMIF工作在地址/數(shù)據(jù)復(fù)用方式,即:EMI0CF |= 0x2c;EMI0TC |= 0x2c;配置EMIF的步驟是:先將EMIF選到低端口或高端口;然后選擇復(fù)用方式或非復(fù)用方式;再選擇存儲(chǔ)器的模式(只用片內(nèi)存儲(chǔ)器、不帶塊選擇的分片方式、帶塊選擇的分片方式或只用片外存儲(chǔ)器);然后設(shè)置EMI0TC;最后通過寄存器PnMDOUT和P74OUT選擇所期望的相關(guān)端口的輸出方式。如:

void PORT_Init (void)
{
XBR2= 0x40;
P74OUT |= 0xff;
EMI0CF |= 0x2c;
EMI0TC |= 0x6c;
P3MDOUT |= 0xdf;

}

11.避免高端口處于“浮空”狀態(tài),以避免因輸入浮空為無效邏輯電平而導(dǎo)致不必要的功率消耗,為此應(yīng)采取如下措施的任何一種:a.將XBR2.7位設(shè)置為邏輯0選擇弱上拉狀態(tài)

R/WR/WR/WR/WR/WR/WR/WR/W復(fù)位值
WEAKPUDXBARE-T4EXET4EUART1EEMIFLECNVSTE00000000
位7位6位5位4位3位2位1位0SFR地址


位7 WEAKPUD 弱上拉禁止位
0 弱上拉全局允許
1 弱上拉全局禁止
位6 XBARE 交叉開關(guān)允許位
0 交叉開關(guān)禁止端口0 1 2 和3 的所有引腳被強(qiáng)制為輸入方式
1 交叉開關(guān)允許
位5 未用讀0 寫=忽略
位4 T4EXE T4EX 輸入允許位
0 T4EX 不連到端口引腳
1 T4EX 連到端口引腳
位3 T4E T4 輸入允許位
0 T4 不連到端口引腳
1 T4 連到端口引腳
位2 UART1E UART1 I/O 允許位
0 UART1 I/O 不連到端口引腳
1 UART1 TX 和RX 連到兩個(gè)端口引腳
位1 EMIFLE 外部存儲(chǔ)器接口低端口允許位
0 P0.7 P0.6 和P0.5 的功能由交叉開關(guān)或端口鎖存器決定
1 如果EMI0CF.4 = 0 外部存儲(chǔ)器接口為復(fù)用方式
則P0.7 (/WR) P0.6 (/RD)和P0.5 (/ALE)被交叉開關(guān)跳過它們的輸出
狀態(tài)由端口鎖存器和外部存儲(chǔ)器接口決定
1 如果EMI0CF.4 = 1 外部存儲(chǔ)器接口為非復(fù)用方式
則P0.7 (/WR)和P0.6 (/RD)被交叉開關(guān)跳過它們的輸出狀態(tài)由端口鎖
存器和外部存儲(chǔ)器接口決定
位0 CNVSTE 外部轉(zhuǎn)換啟動(dòng)輸入允許位
0 CNVSTR 不連到端口引腳
1 CNVSTR 連到端口引腳;

b.令P74OUT=0xFF,將高端口輸出方式配置為推拉方式(P74OUT為高端口輸出方式寄存器);

c.向高端口數(shù)據(jù)寄存器P4、P5、P6和P7寫0。

12.配置端口引腳的輸出方式
每個(gè)端口引腳的輸出方式都可被配置為漏極開路或推挽方式。在推挽方式下向端口數(shù)據(jù)寄存器中的相應(yīng)位寫邏輯0 將使端口引腳被驅(qū)動(dòng)到GND 寫邏輯1 將使端口引腳被驅(qū)動(dòng)到VDD ,在漏極開路方式下向端口數(shù)據(jù)寄存器中的相應(yīng)位寫邏輯0 將使端口引腳被驅(qū)動(dòng)到GND 寫邏輯1 將使端口引腳處于高阻狀態(tài),當(dāng)系統(tǒng)中不同器件的端口引腳有共享連接。即多個(gè)輸出連接到同一個(gè)物理線時(shí)(例如SMBus 連接中的SDA 信號(hào)),使用漏極開路方式可以防止不同器件之間的沖突。(推挽方式在有些書中稱為推拉方式)


轉(zhuǎn)載-關(guān)于開漏、推挽方式2008-01-27 17:53漏級開路即高阻狀態(tài),適用于輸入/輸出,其可獨(dú)立輸入/輸出低電平和高阻狀態(tài),若需要產(chǎn)生高電平,則需使用外部上拉電阻或使用如LCX245等電平轉(zhuǎn)換芯片。有些朋友,尤其是未學(xué)過此方面知識(shí)的朋友,在實(shí)際工作中將I/O口設(shè)置為漏開,并想輸出高電平,但向口線上寫1后對方并未認(rèn)出高電平,但用萬用表測量引腳確有電壓,這種認(rèn)為是不對的,對于高阻狀態(tài)來說,測量電壓是無意義的,正確的方法應(yīng)是外加上拉電阻,上拉電阻的阻值=上拉電壓/芯片引腳最大灌(拉)電流。
推挽方式可完全獨(dú)立產(chǎn)生高低電平,推挽方式為低阻,這樣,才能保證口線上不分走電壓或分走極小的電壓(可忽略),保證輸出與電源相同的高電平,推挽適用于輸出而不適用于輸入,因?yàn)槿魧ν仆欤ǖ妥瑁┘痈唠娖胶?,I=U/R,I會(huì)很大,將造成口的燒毀。

對與C8051F的很多型號(hào)片子,將I/O口設(shè)置為推挽方式的做法為:PnMDOUT=0xff,Pn=0x00,這樣設(shè)置I/O口為推挽,并輸出低電平(可降低功耗)將I/O口設(shè)置為漏開方式的做法為:PnMDOUT=0x00,Pn=0x11,這樣設(shè)置I/O口為漏開。

如果學(xué)過三極管放大電路一定知道,前置單管放大器和功放末級放大電路的區(qū)別。單片機(jī)內(nèi)部的邏輯經(jīng)過內(nèi)部的邏輯運(yùn)算后需要輸出到外面,外面的器件可能需要較大的電流才能推動(dòng),因此在單片機(jī)的輸出端口必須有一個(gè)驅(qū)動(dòng)電路。

這種驅(qū)動(dòng)電路有兩種形式:

其中的一種是采用一只N型三極管(npn或n溝道),以npn三極管為例,就是e接地,b接內(nèi)部的邏輯運(yùn)算,c引出,b受內(nèi)部驅(qū)動(dòng)可以控制三極管是否導(dǎo)通但如果三極管的c極一直懸空,盡管b極上發(fā)生高低變化,c極上也不會(huì)有高低變化,因此在這種條件下必須在外部提供一個(gè)電阻,電阻的一端接c(引出腳)另一端接電源,這樣當(dāng)三極管的b有高電壓是三極管導(dǎo)通,c電壓為低,當(dāng)b為低電壓時(shí)三極管不通,c極在電阻的拉動(dòng)下為高電壓,這種驅(qū)動(dòng)電路有個(gè)特點(diǎn):低電壓是三極管驅(qū)動(dòng)的,高電壓是電阻驅(qū)動(dòng)的(上下不對稱),三極管導(dǎo)通時(shí)的ec內(nèi)阻很小,因此可以提供很大的電流,可以直接驅(qū)動(dòng)led甚至繼電器,但電阻的驅(qū)動(dòng)是有限的,最大高電平輸出電流=(vcc-Vh)/r;

另一種是互補(bǔ)推挽輸出,采用2只晶體管,一只在上一只在下,上面的一只是n型,下面為p型(以三極管為例),兩只管子的連接為:npn(上)的c連vcc,pnp(下)的c接地,兩只管子的ee,bb相連,其中ee作為輸出(引出腳),bb接內(nèi)部邏輯,這個(gè)電路通常用于功率放大點(diǎn)路的末級(音響),當(dāng)bb接高電壓時(shí)npn管導(dǎo)通輸出高電壓,由于三極管的ec電阻很小,因此輸出的高電壓有很強(qiáng)的驅(qū)動(dòng)能力,當(dāng)bb接低電壓時(shí)npn截至,pnp導(dǎo)通,由于三極管的ec電阻很小因此輸出的低電壓有很強(qiáng)的驅(qū)動(dòng)能力,簡單的例子,9013導(dǎo)通時(shí)ec電阻不到10歐,以Vh=2.5v,vcc=5v計(jì)算,高電平輸出電流最大=250MA,短路電流500ma,這個(gè)計(jì)算同時(shí)告訴我們采用推挽輸出時(shí)一定要小心千萬不要出現(xiàn)外部電路短路的可能,否則肯定燒毀芯片,特別是外部驅(qū)動(dòng)三極管時(shí)別忘了在三極管的基極加限流電阻。推挽輸出電路的形式很多,有些單片機(jī)上下都采用n型管,但內(nèi)部邏輯提供互補(bǔ)輸出,以上的說明僅僅為了說明推挽的原理,為了更深的理解可以參考功率放大電路。

‍推挽方式可完全獨(dú)立產(chǎn)生高低電平,推挽方式為低阻,這樣,才能保證口線上不分走電壓或分走極小的電壓(可忽略),保證輸出與電源相同的高電平,推挽適用于輸出而不適用于輸入,因?yàn)槿魧ν仆欤ǖ妥瑁┘痈唠娖胶?,I=U/R,I會(huì)很大,將造成口的燒毀。

對與C8051F的很多型號(hào)片子,將I/O口設(shè)置為推挽方式的做法為:PnMDOUT=0xff,Pn=0x00,這樣設(shè)置I/O口為推挽,并輸出低電平(可降低功耗)將I/O口設(shè)置為漏開方式的做法為:PnMDOUT=0x00,Pn=0x11,這樣設(shè)置I/O口為漏開。

推挽輸出0的時(shí)候和開漏特性一樣,就是1的時(shí)候可以當(dāng)作直接接VCC.
推挽輸出的驅(qū)動(dòng)能力相當(dāng)強(qiáng),因?yàn)檩敵?就等于接到了VCC.而同時(shí)推挽輸出的IO也需要注意不要直接接到地,否則一旦輸出1,就等于VCC通過內(nèi)部的場效應(yīng)管直接到地了,這時(shí)候IO端發(fā)熱就很大,時(shí)間長就就拜拜了.
你看到DX32實(shí)驗(yàn)板上,按鍵部分都是串了個(gè)300歐才到地的,就是為了避免IO誤操作,使這些輸入變成推挽輸出1而做的保護(hù).
以此為設(shè)計(jì)依據(jù),一般情況下,所有的IO都盡量避免直接到地,即使這個(gè)IO你是打算用來做輸入的.



關(guān)鍵詞: c8051f020IO配

評論


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

關(guān)閉