c8051f020 I/O配置小結(jié)
c8051f020 I/O配置小結(jié)
注意的問(wèn)題:
1.低端口既能按位尋址,也可以按字節(jié)尋址;高端口只能按字節(jié)尋址。
2.沒(méi)有被分配到的引腳作為一般的數(shù)字通用I/O口。
3.P1口還可以用作ADC1的模擬輸入。
4.P0MDOUT~P3MDOUT用于控制I/O端口每一位的輸出狀態(tài)。
5.EMIF(外部存儲(chǔ)器接口)是用于CPU與片外XRAM之間的數(shù)據(jù)傳輸通道,通過(guò)寄存器EMI0CF和EMI0CN選擇和管理端口實(shí)現(xiàn)數(shù)據(jù)的傳輸。
6.為了能訪問(wèn)片外存儲(chǔ)器空間,必須設(shè)置EMI0CN寄存器的內(nèi)容為片外存儲(chǔ)器的空間頁(yè)地址。
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ù)用端口配置為漏極開(kāi)路。
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;最后通過(guò)寄存器PnMDOUT和P74OUT選擇所期望的相關(guān)端口的輸出方式。如:
void PORT_Init (void)
{
}
11.避免高端口處于“浮空”狀態(tài),以避免因輸入浮空為無(wú)效邏輯電平而導(dǎo)致不必要的功率消耗,為此應(yīng)采取如下措施的任何一種:a.將XBR2.7位設(shè)置為邏輯0選擇弱上拉狀態(tài)
R/W
WEAKPUD
位7
位7 WEAKPUD 弱上拉禁止位
0 弱上拉全局允許
1 弱上拉全局禁止
位6 XBARE 交叉開(kāi)關(guān)允許位
0 交叉開(kāi)關(guān)禁止端口0 1 2 和3 的所有引腳被強(qiáng)制為輸入方式
1 交叉開(kāi)關(guān)允許
位5 未用讀0 寫(xiě)=忽略
位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 的功能由交叉開(kāi)關(guān)或端口鎖存器決定
1 如果EMI0CF.4 = 0 外部存儲(chǔ)器接口為復(fù)用方式
則P0.7 (/WR) P0.6 (/RD)和P0.5 (/ALE)被交叉開(kāi)關(guān)跳過(guò)它們的輸出
狀態(tài)由端口鎖存器和外部存儲(chǔ)器接口決定
1 如果EMI0CF.4 = 1 外部存儲(chǔ)器接口為非復(fù)用方式
則P0.7 (/WR)和P0.6 (/RD)被交叉開(kāi)關(guān)跳過(guò)它們的輸出狀態(tài)由端口鎖
存器和外部存儲(chǔ)器接口決定
位0 CNVSTE 外部轉(zhuǎn)換啟動(dòng)輸入允許位
0 CNVSTR 不連到端口引腳
1 CNVSTR 連到端口引腳;
b.令P74OUT=0xFF,將高端口輸出方式配置為推拉方式(P74OUT為高端口輸出方式寄存器);
c.向高端口數(shù)據(jù)寄存器P4、P5、P6和P7寫(xiě)0。
12.配置端口引腳的輸出方式
每個(gè)端口引腳的輸出方式都可被配置為漏極開(kāi)路或推挽方式。在推挽方式下向端口數(shù)據(jù)寄存器中的相應(yīng)位寫(xiě)邏輯0 將使端口引腳被驅(qū)動(dòng)到GND 寫(xiě)邏輯1 將使端口引腳被驅(qū)動(dòng)到VDD ,在漏極開(kāi)路方式下向端口數(shù)據(jù)寄存器中的相應(yīng)位寫(xiě)邏輯0 將使端口引腳被驅(qū)動(dòng)到GND 寫(xiě)邏輯1 將使端口引腳處于高阻狀態(tài),當(dāng)系統(tǒng)中不同器件的端口引腳有共享連接。即多個(gè)輸出連接到同一個(gè)物理線時(shí)(例如SMBus 連接中的SDA 信號(hào)),使用漏極開(kāi)路方式可以防止不同器件之間的沖突。(推挽方式在有些書(shū)中稱(chēng)為推拉方式)
轉(zhuǎn)載-關(guān)于開(kāi)漏、推挽方式2008-01-27 17:53漏級(jí)開(kāi)路即高阻狀態(tài),適用于輸入/輸出,其可獨(dú)立輸入/輸出低電平和高阻狀態(tài),若需要產(chǎn)生高電平,則需使用外部上拉電阻或使用如LCX245等電平轉(zhuǎn)換芯片。有些朋友,尤其是未學(xué)過(guò)此方面知識(shí)的朋友,在實(shí)際工作中將I/O口設(shè)置為漏開(kāi),并想輸出高電平,但向口線上寫(xiě)1后對(duì)方并未認(rèn)出高電平,但用萬(wàn)用表測(cè)量引腳確有電壓,這種認(rèn)為是不對(duì)的,對(duì)于高阻狀態(tài)來(lái)說(shuō),測(cè)量電壓是無(wú)意義的,正確的方法應(yīng)是外加上拉電阻,上拉電阻的阻值=上拉電壓/芯片引腳最大灌(拉)電流。
推挽方式可完全獨(dú)立產(chǎn)生高低電平,推挽方式為低阻,這樣,才能保證口線上不分走電壓或分走極小的電壓(可忽略),保證輸出與電源相同的高電平,推挽適用于輸出而不適用于輸入,因?yàn)槿魧?duì)推挽(低阻)加高電平后,I=U/R,I會(huì)很大,將造成口的燒毀。
對(duì)與C8051F的很多型號(hào)片子,將I/O口設(shè)置為推挽方式的做法為:PnMDOUT=0xff,Pn=0x00,這樣設(shè)置I/O口為推挽,并輸出低電平(可降低功耗)將I/O口設(shè)置為漏開(kāi)方式的做法為:PnMDOUT=0x00,Pn=0x11,這樣設(shè)置I/O口為漏開(kāi)。
如果學(xué)過(guò)三極管放大電路一定知道,前置單管放大器和功放末級(jí)放大電路的區(qū)別。單片機(jī)內(nèi)部的邏輯經(jīng)過(guò)內(nèi)部的邏輯運(yùn)算后需要輸出到外面,外面的器件可能需要較大的電流才能推動(dòng),因此在單片機(jī)的輸出端口必須有一個(gè)驅(qū)動(dòng)電路。
推挽方式可完全獨(dú)立產(chǎn)生高低電平,推挽方式為低阻,這樣,才能保證口線上不分走電壓或分走極小的電壓(可忽略),保證輸出與電源相同的高電平,推挽適用于輸出而不適用于輸入,因?yàn)槿魧?duì)推挽(低阻)加高電平后,I=U/R,I會(huì)很大,將造成口的燒毀。
推挽輸出0的時(shí)候和開(kāi)漏特性一樣,就是1的時(shí)候可以當(dāng)作直接接VCC.
推挽輸出的驅(qū)動(dòng)能力相當(dāng)強(qiáng),因?yàn)檩敵?就等于接到了VCC.而同時(shí)推挽輸出的IO也需要注意不要直接接到地,否則一旦輸出1,就等于VCC通過(guò)內(nèi)部的場(chǎng)效應(yīng)管直接到地了,這時(shí)候IO端發(fā)熱就很大,時(shí)間長(zhǎng)就就拜拜了.
你看到DX32實(shí)驗(yàn)板上,按鍵部分都是串了個(gè)300歐才到地的,就是為了避免IO誤操作,使這些輸入變成推挽輸出1而做的保護(hù).
以此為設(shè)計(jì)依據(jù),一般情況下,所有的IO都盡量避免直接到地,即使這個(gè)IO你是打算用來(lái)做輸入的.
評(píng)論