c8051f020 I/O配置小結 020的每個I/O口引腳都可以被配置為推挽或漏極開路輸出。同時引入了數字交叉開關,允許將內部數字系統資源映射到P0、P1、P2和P3的端口引腳。通過設置交叉開關寄存器可將片內的計數器/定時器、串行總線、硬件中斷、ADC轉換啟動輸入、比較器輸出以及微控制器內部的其他數字信號配置為出現在端口I/O引腳。必須在訪問這些外設的I/O之前配置和允許交叉開關。 注意的問題: 1.低端口既能按位尋址,也可以按字節尋址;高端口只能按字節尋址。 2.沒有被分配到的引腳作為一般的數字通用I/O口。 3.P1口還可以用作ADC1的模擬輸入。 4.P0MDOUT~P3MDOUT用于控制I/O端口每一位的輸出狀態。 5.EMIF(外部存儲器接口)是用于CPU與片外XRAM之間的數據傳輸通道,通過寄存器EMI0CF和EMI0CN選擇和管理端口實現數據的傳輸。 6.為了能訪問片外存儲器空間,必須設置EMI0CN寄存器的內容為片外存儲器的空間頁地址。 7.如果把外部存儲器接口(EMIF)設置在高端口則首先要把EMI0CF的PRTSEL位設置為1,選擇高端口,同時選擇地址的復用或非復用方式,在把XBR的外部寄存器的EMIFLE位設置為0。 8.復用方式配置:在復用方式下,數據總線和地址總線的第8位共用相同的引腳(AD0~AD7)。在該方式下,要用一個外部鎖存器(如74HC373或相同功能的鎖存器)保持RAM地址的低8位。外部鎖存器由ALE(地址鎖存使能)信號控制,ALE信號由外部存儲器接口邏輯驅動。 9.在總線復用時,需要把地址數據復用端口配置為漏極開路。 10.ALE高/低脈寬占1個SYSCLK周期,地址建立/保持時間占0個SYSCLK周期,/WR和/RD占12個SYSCLK周期,EMIF工作在地址/數據復用方式,即:EMI0CF|= 0x2c;EMI0TC |=0x2c;配置EMIF的步驟是:先將EMIF選到低端口或高端口;然后選擇復用方式或非復用方式;再選擇存儲器的模式(只用片內存儲器、不帶塊選擇的分片方式、帶塊選擇的分片方式或只用片外存儲器);然后設置EMI0TC;最后通過寄存器PnMDOUT和P74OUT選擇所期望的相關端口的輸出方式。如: void PORT_Init (void) { XBR2 =0x40; P74OUT |=0xff; EMI0CF |=0x2c; EMI0TC |=0x6c; P3MDOUT |=0xdf; } 11.避免高端口處于“浮空”狀態,以避免因輸入浮空為無效邏輯電平而導致不必要的功率消耗,為此應采取如下措施的任何一種:a.將XBR2.7位設置為邏輯0選擇弱上拉狀態 R/W R/W R/W R/W R/W R/W R/W R/W 復位值 WEAKPUD XBARE - T4EXE T4E UART1E EMIFLE CNVSTE 00000000 位7 位6 位5 位4 位3 位2 位1 位0 SFR地址 位7 WEAKPUD 弱上拉禁止位 0 弱上拉全局允許 1 弱上拉全局禁止 位6 XBARE 交叉開關允許位 0 交叉開關禁止端口0 1 2 和3 的所有引腳被強制為輸入方式 1 交叉開關允許 位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 連到兩個端口引腳 位1 EMIFLE 外部存儲器接口低端口允許位 0 P0.7 P0.6 和P0.5 的功能由交叉開關或端口鎖存器決定 1 如果EMI0CF.4 = 0 外部存儲器接口為復用方式 則P0.7 (/WR) P0.6 (/RD)和P0.5 (/ALE)被交叉開關跳過它們的輸出 狀態由端口鎖存器和外部存儲器接口決定 1 如果EMI0CF.4 = 1 外部存儲器接口為非復用方式 則P0.7 (/WR)和P0.6 (/RD)被交叉開關跳過它們的輸出狀態由端口鎖 存器和外部存儲器接口決定 位0 CNVSTE 外部轉換啟動輸入允許位 0 CNVSTR 不連到端口引腳 1 CNVSTR 連到端口引腳; b.令P74OUT=0xFF,將高端口輸出方式配置為推拉方式(P74OUT為高端口輸出方式寄存器); c.向高端口數據寄存器P4、P5、P6和P7寫0。 12.配置端口引腳的輸出方式 每個端口引腳的輸出方式都可被配置為漏極開路或推挽方式。在推挽方式下向端口數據寄存器中的相應位寫邏輯0 將使端口引腳被驅動到GND寫邏輯1 將使端口引腳被驅動到VDD ,在漏極開路方式下向端口數據寄存器中的相應位寫邏輯0 將使端口引腳被驅動到GND 寫邏輯1將使端口引腳處于高阻狀態,當系統中不同器件的端口引腳有共享連接。即多個輸出連接到同一個物理線時(例如SMBus 連接中的SDA信號),使用漏極開路方式可以防止不同器件之間的沖突。(推挽方式在有些書中稱為推拉方式) 轉載-關于開漏、推挽方式2008-01-27 17:53漏級開路即高阻狀態,適用于輸入/輸出,其可獨立輸入/輸出低電平和高阻狀態,若需要產生高電平,則需使用外部上拉電阻或使用如LCX245等電平轉換芯片。有些朋友,尤其是未學過此方面知識的朋友,在實際工作中將I/O口設置為漏開,并想輸出高電平,但向口線上寫1后對方并未認出高電平,但用萬用表測量引腳確有電壓,這種認為是不對的,對于高阻狀態來說,測量電壓是無意義的,正確的方法應是外加上拉電阻,上拉電阻的阻值=上拉電壓/芯片引腳最大灌(拉)電流。 推挽方式可完全獨立產生高低電平,推挽方式為低阻,這樣,才能保證口線上不分走電壓或分走極小的電壓(可忽略),保證輸出與電源相同的高電平,推挽適用于輸出而不適用于輸入,因為若對推挽(低阻)加高電平后,I=U/R,I會很大,將造成口的燒毀。 對與C8051F的很多型號片子,將I/O口設置為推挽方式的做法為:PnMDOUT=0xff,Pn=0x00,這樣設置I/O口為推挽,并輸出低電平(可降低功耗)將I/O口設置為漏開方式的做法為:PnMDOUT=0x00,Pn=0x11,這樣設置I/O口為漏開。 如果學過三極管放大電路一定知道,前置單管放大器和功放末級放大電路的區別。單片機內部的邏輯經過內部的邏輯運算后需要輸出到外面,外面的器件可能需要較大的電流才能推動,因此在單片機的輸出端口必須有一個驅動電路。 這種驅動電路有兩種形式: 其中的一種是采用一只N型三極管(npn或n溝道),以npn三極管為例,就是e接地,b接內部的邏輯運算,c引出,b受內部驅動可以控制三極管是否導通但如果三極管的c極一直懸空,盡管b極上發生高低變化,c極上也不會有高低變化,因此在這種條件下必須在外部提供一個電阻,電阻的一端接c(引出腳)另一端接電源,這樣當三極管的b有高電壓是三極管導通,c電壓為低,當b為低電壓時三極管不通,c極在電阻的拉動下為高電壓,這種驅動電路有個特點:低電壓是三極管驅動的,高電壓是電阻驅動的(上下不對稱),三極管導通時的ec內阻很小,因此可以提供很大的電流,可以直接驅動led甚至繼電器,但電阻的驅動是有限的,最大高電平輸出電流=(vcc-Vh)/r; 另一種是互補推挽輸出,采用2只晶體管,一只在上一只在下,上面的一只是n型,下面為p型(以三極管為例),兩只管子的連接為:npn(上)的c連vcc,pnp(下)的c接地,兩只管子的ee,bb相連,其中ee作為輸出(引出腳),bb接內部邏輯,這個電路通常用于功率放大點路的末級(音響),當bb接高電壓時npn管導通輸出高電壓,由于三極管的ec電阻很小,因此輸出的高電壓有很強的驅動能力,當bb接低電壓時npn截至,pnp導通,由于三極管的ec電阻很小因此輸出的低電壓有很強的驅動能力,簡單的例子,9013導通時ec電阻不到10歐,以Vh=2.5v,vcc=5v計算,高電平輸出電流最大=250MA,短路電流500ma,這個計算同時告訴我們采用推挽輸出時一定要小心千萬不要出現外部電路短路的可能,否則肯定燒毀芯片,特別是外部驅動三極管時別忘了在三極管的基極加限流電阻。推挽輸出電路的形式很多,有些單片機上下都采用n型管,但內部邏輯提供互補輸出,以上的說明僅僅為了說明推挽的原理,為了更深的理解可以參考功率放大電路。 推挽方式可完全獨立產生高低電平,推挽方式為低阻,這樣,才能保證口線上不分走電壓或分走極小的電壓(可忽略),保證輸出與電源相同的高電平,推挽適用于輸出而不適用于輸入,因為若對推挽(低阻)加高電平后,I=U/R,I會很大,將造成口的燒毀。 對與C8051F的很多型號片子,將I/O口設置為推挽方式的做法為:PnMDOUT=0xff,Pn=0x00,這樣設置I/O口為推挽,并輸出低電平(可降低功耗)將I/O口設置為漏開方式的做法為:PnMDOUT=0x00,Pn=0x11,這樣設置I/O口為漏開。 推挽輸出0的時候和開漏特性一樣,就是1的時候可以當作直接接VCC. 推挽輸出的驅動能力相當強,因為輸出1就等于接到了VCC.而同時推挽輸出的IO也需要注意不要直接接到地,否則一旦輸出1,就等于VCC通過內部的場效應管直接到地了,這時候IO端發熱就很大,時間長就就拜拜了. 你看到DX32實驗板上,按鍵部分都是串了個300歐才到地的,就是為了避免IO誤操作,使這些輸入變成推挽輸出1而做的保護. 以此為設計依據,一般情況下,所有的IO都盡量避免直接到地,即使這個IO你是打算用來做輸入的. |
歡迎光臨 (http://www.raoushi.com/bbs/) | Powered by Discuz! X3.1 |