avrI/O 端口操作和上拉電阻
說明:本節(jié)重點(diǎn)介紹真正雙向端口操作的方法,及與偽雙向端口操作的不同。跑馬燈例子。建議先看跑馬燈,再繞回來看前面的介紹。
本文引用地址:http://m.butianyuan.cn/article/201611/320591.htm
端口更詳細(xì)功能及介紹以及端口第二功能請參考數(shù)據(jù)手冊。
端口引腳配置
DDxn
0
0
0
1
1
下面我們來看例子:
void port_init(void)
{
PORTA = 0x03;
DDRA = 0x03;
PORTB = 0x00;
DDRB = 0x01;
PORTC = 0x00;
DDRC = 0x00;
PORTD = 0x00;
DDRD = 0x00;// 建議賦值為零
}
PORTA = 0x03;DDRA = 0x03;這兩句使PA口的PA1和PA0處于輸出狀態(tài),PA7—PA2處于輸入狀態(tài),因?yàn)橄榷x了PORTA=0x03,PA1和PA0的內(nèi)部上拉電阻也使能了,雖然后來DDRA = 0x03。為什么捏,也許我們可以這么認(rèn)為:DDRA默認(rèn)都是輸入的,但只要先定義PORTxn的某些位為1,就使能了上拉電阻,不需要管后面的DDRA設(shè)置為輸入還是輸出.這里的0x03即二進(jìn)制的00000011,從左到右對應(yīng)于Pn7--Pn0八個(gè)IO口。
通過跑馬燈程序來深入理解IO口的操作:
// ICC-AVR application builder : 2007-9-14 2:26:57
// Target : M16
// Crystal: 11.059Mhz
// 出處:arm9.cn/article.asp?articleid=202">http://www.arm9.cn/article.asp?articleid=202
#include
#include
void port_init(void)
{
}
//Crystal: 7.3728Mhz下的延時(shí)100us的延時(shí)函數(shù)
void _delay(unsigned char n)
{
unsigned char i,j;
for(;n!=0;n--) //n*10ms
{
for(j=100;j!=0;j--) //100us*100=10ms
{
}
}
}
// 這個(gè)是精確的11.059Mhz下的延時(shí)函數(shù)
// http://www.willar.com/forum_view.asp?forum_id=25&view_id=6356
void delay_ms(unsigned int n)
{
}
void delay_1ms(void)
{
}
//call this routine to initialize all peripherals
void init_devices(void)
{
}
void main(void)
{
unsigned char i,j,k;
//init_devices();
PORTB=0x0F;
DDRB=0x0F;
while(1)
{
}
}
其他IO口操作指令:
void main(void)
{
PORTA=0xff;
DDRA=0xff; //輸出 模式 ,IO口上拉電阻有效,1為輸出,0為輸入。
PORTA=0xf0; //等以下三條指令只對操作符號(hào)右邊的數(shù)字位是一的位操作。
PORTA&=~0x70; //清零 0x70為 01110000 ,即把654三位清零,其余數(shù)位不變。
PORTA|=0x77; //置一 0x77為 01110111 ,即把654210六位置一,其余數(shù)位不變。
PORTA^=0x70; //翻轉(zhuǎn) 如果是零變成1,是一變成0。
(P & 0x80)==0x80; //按位與 判斷p的第七位是否是一,是則成立
}
實(shí)踐出真知:只看這樣的說明是很枯燥的,從實(shí)踐中去學(xué)習(xí)會(huì)是更好的途徑,把這些代碼都寫到單片機(jī)里,一步一步調(diào)試運(yùn)行,看看各個(gè)端口以及寄存器的效果,也鍛練程序調(diào)試能力,和樂而不為呢?關(guān)于上拉電阻,有的時(shí)候需要使用,有的時(shí)候不能用,尤其是I/O端口操作的時(shí)候.上拉就是在IO口線上面接一個(gè)到VCC的電阻,很簡單,什么地方需要那可就廣了,作用也很大。上接電阻一般來說就是幫助某根線上面確定電平,比如一個(gè)懸空的信號(hào)線,由于是懸空的所以它可以是任何狀態(tài)、并極易受到外界的干擾,這樣對我們產(chǎn)品來說是不利的,只要接一個(gè)有上拉電阻,它的電平就會(huì)是可知的了。
它一般在信號(hào)線不確定的情況下使用,那么輸入信號(hào)就需要了。當(dāng)為輸出時(shí)因?yàn)檩敵鰻顟B(tài)是確定的,所以就不需要上拉電阻了.
http://forum.eetchina.com/FORUM_POST_1100011897_0.HTM
有些總線協(xié)議會(huì)將一些信號(hào)釋放為高阻態(tài),但是實(shí)際上電路的狀態(tài)應(yīng)該事確定的0或1,所以上拉電阻可以提供一個(gè)確定的狀態(tài)。
上拉電阻還可以提供一個(gè)邏輯電平;以及供匹配用等~
上拉電阻接電源(一般是為電源高電位),下拉電阻接地(一般是為電源0電位)。
接了電阻之后就能把電壓拉高了嗎,比如原來輸出3V,接了上拉電阻之后就能變4v了嗎,有點(diǎn)想不明白,能不能詳細(xì)說說啊 ,
上拉電阻本上當(dāng)然不會(huì)提高電壓,但是上拉電阻的一端會(huì)接著VDD,另一端就是電路,所以會(huì)起到提高電壓的作用^_^
我也是從學(xué)校學(xué)到的一點(diǎn)淺薄知識(shí).....自己理解...請大師指點(diǎn)...
前面的回復(fù)有說過上拉電阻實(shí)際上是集電極輸出的負(fù)載電阻,而一般三極管是控制集電極電流,基極電流確定,集電極電流也就確定,而為了把電流轉(zhuǎn)化成電壓,所以有了上拉電阻,計(jì)算方式是Vo=Vcc-Ic*R(R就是上拉電阻)....
所以可以用上拉電阻提高帶負(fù)載能力和提高噪聲容限
上拉電阻原理:http://blog.21ic.com/user1/349/archives/2007/36202.html
*****************************************************************************************
上拉電阻一般是指用一個(gè)電阻接到正電源上來得來正電,推挽是用三極管或場效應(yīng)管等來輸出電壓!
(一)上拉電阻:
1、當(dāng)TTL電路驅(qū)動(dòng)COMS電路時(shí),如果TTL電路輸出的高電平低于COMS電路的最低高電平(一般為3.5V),這時(shí)就需要在TTL的輸出端接上拉電阻,以提高輸出高電平的值。
2、OC門電路必須加上拉電阻,才能使用。
3、為加大輸出引腳的驅(qū)動(dòng)能力,有的單片機(jī)管腳上也常使用上拉電阻。
4、在COMS芯片上,為了防止靜電造成損壞,不用的管腳不能懸空,一般接上拉電阻產(chǎn)生降低輸入阻抗,提供泄荷通路。
5、芯片的管腳加上拉電阻來提高輸出電平,從而提高芯片輸入信號(hào)的噪聲容限增強(qiáng)抗干擾能力。
6、提高總線的抗電磁干擾能力。管腳懸空就比較容易接受外界的電磁干擾。
7、長線傳輸中電阻不匹配容易引起反射波干擾,加上下拉電阻是電阻匹配,有效的抑制反射波干擾。
(二)上拉電阻阻值的選擇原則包括:
1、從節(jié)約功耗及芯片的灌電流能力考慮應(yīng)當(dāng)足夠大;電阻大,電流小。
2、從確保足夠的驅(qū)動(dòng)電流考慮應(yīng)當(dāng)足夠小;電阻小,電流大。
3、對于高速電路,過大的上拉電阻可能邊沿變平緩。綜合考慮
以上三點(diǎn),通常在1k到10k之間選取。對下拉電阻也有類似道理
(三)對上拉電阻和下拉電阻的選擇應(yīng)結(jié)合開關(guān)管特性和下級電路的輸入特性進(jìn)行設(shè)定,主要需要考慮以下幾個(gè)因素:
1. 驅(qū)動(dòng)能力與功耗的平衡。以上拉電阻為例,一般地說,上拉電阻越小,驅(qū)動(dòng)能力越強(qiáng),但功耗越大,設(shè)計(jì)是應(yīng)注意兩者之間的均衡。
2.下級電路的驅(qū)動(dòng)需求。同樣以上拉電阻為例,當(dāng)輸出高電平時(shí),開關(guān)管斷開,上拉電阻應(yīng)適當(dāng)選擇以能夠向下級電路提供足夠的電流。
3.高低電平的設(shè)定。不同電路的高低電平的門檻電平會(huì)有不同,電阻應(yīng)適當(dāng)設(shè)定以確保能輸出正確的電平。以上拉電阻為例,當(dāng)輸出低電平時(shí),開關(guān)管導(dǎo)通,上拉電阻和開關(guān)管導(dǎo)通電阻分壓值應(yīng)確保在零電平門檻之下。
4.頻率特性。以上拉電阻為例,上拉電阻和開關(guān)管漏源級之間的電容和下級電路之間的輸入電容會(huì)形成RC延遲,電阻越大,延遲越大。上拉電阻的設(shè)定應(yīng)考慮電路在這方面的需求。
(四)下拉電阻的設(shè)定的原則和上拉電阻是一樣的。
OC門輸出高電平時(shí)是一個(gè)高阻態(tài),其上拉電流要由上拉電阻來提供,設(shè)輸入端每端口不大于100uA,設(shè)輸出口驅(qū)動(dòng)電流約500uA,標(biāo)準(zhǔn)工作電壓是5V,輸入口的高低電平門限為0.8V(低于此值為低電平);2V(高電平門限值)。
選上拉電阻時(shí):
500uA x 8.4K= 4.2即選大于8.4K時(shí)輸出端能下拉至0.8V以下,此為最小阻值,再小就拉不下來了。如果輸出口驅(qū)動(dòng)電流較大,則阻值可減小,保證下拉時(shí)能低于0.8V即可。
當(dāng)輸出高電平時(shí),忽略管子的漏電流,兩輸入口需200uA
200uA x15K=3V即上拉電阻壓降為3V,輸出口可達(dá)到2V,此阻值為最大阻值,再大就拉不到2V了。選10K可用。COMS門的可參考74HC系列
設(shè)計(jì)時(shí)管子的漏電流不可忽略,IO口實(shí)際電流在不同電平下也是不同的,上述僅僅是原理,一句話概括為:輸出高電平時(shí)要喂飽后面的輸入口,輸出低電平不要把輸出口喂撐了(否則多余的電流喂給了級聯(lián)的輸入口,高于低電平門限值就不可靠了)
在數(shù)字電路中不用的輸入腳都要接固定電平,通過1k電阻接高電平或接地。
1. 電阻作用:
l 接電組就是為了防止輸入端懸空
l 減弱外部電流對芯片產(chǎn)生的干擾
l 保護(hù)cmos內(nèi)的保護(hù)二極管,一般電流不大于10mA
l 上拉和下拉、限流
l 1. 改變電平的電位,常用在TTL-CMOS匹配
2. 在引腳懸空時(shí)有確定的狀態(tài)
3.增加高電平輸出時(shí)的驅(qū)動(dòng)能力。
4、為OC門提供電流
l 那要看輸出口驅(qū)動(dòng)的是什么器件,如果該器件需要高電壓的話,而輸出口的輸出電壓又不夠,就需要加上拉電阻。
l 如果有上拉電阻那它的端口在默認(rèn)值為高電平你要控制它必須用低電平才能控制如三態(tài)門電路三極管的集電極,或二極管正極去控制把上拉電阻的電流拉下來成為低電平。反之,
l 尤其用在接口電路中,為了得到確定的電平,一般采用這種方法,以保證正確的電路狀態(tài),以免發(fā)生意外,比如,在電機(jī)控制中,逆變橋上下橋臂不能直通,如果它們都用同一個(gè)單片機(jī)來驅(qū)動(dòng),必須設(shè)置初始狀態(tài).防止直通!
2、定義:
l 上拉就是將不確定的信號(hào)通過一個(gè)電阻嵌位在高電平!電阻同時(shí)起限流作用!下拉同理!
l 上拉是對器件注入電流,下拉是輸出電流
l 弱強(qiáng)只是上拉電阻的阻值不同,沒有什么嚴(yán)格區(qū)分
l 對于非集電極(或漏極)開路輸出型電路(如普通門電路)提升電流和電壓的能力是有限的,上拉電阻的功能主要是為集電極開路輸出型電路輸出電流通道。
3、為什么要使用拉電阻:
l 一般作單鍵觸發(fā)使用時(shí),如果IC本身沒有內(nèi)接電阻,為了使單鍵維持在不被觸發(fā)的狀態(tài)或是觸發(fā)后回到原狀態(tài),必須在IC外部另接一電阻。
l 數(shù)字電路有三種狀態(tài):高電平、低電平、和高阻狀態(tài),有些應(yīng)用場合不希望出現(xiàn)高阻狀態(tài),可以通過上拉電阻或下拉電阻的方式使處于穩(wěn)定狀態(tài),具體視設(shè)計(jì)要求而定!
l 一般說的是I/O端口,有的可以設(shè)置,有的不可以設(shè)置,有的是內(nèi)置,有的是需要外接,I/O端口的輸出類似與一個(gè)三極管的C,當(dāng)C接通過一個(gè)電阻和電源連接在一起的時(shí)候,該電阻成為上C拉電阻,也就是說,如果該端口正常時(shí)為高電平,C通過一個(gè)電阻和地連接在一起的時(shí)候,該電阻稱為下拉電阻,使該端口平時(shí)為低電平,作用嗎:
比如:當(dāng)一個(gè)接有上拉電阻的端口設(shè)為輸如狀態(tài)時(shí),他的常態(tài)就為高電平,用于檢測低電平的輸入。
l 上拉電阻是用來解決總線驅(qū)動(dòng)能力不足時(shí)提供電流的。一般說法是拉電流,下拉電阻是用來吸收電流的,也就是灌電流。
高阻態(tài):從邏輯器件內(nèi)部電路結(jié)構(gòu)來說,就是其輸出電阻很大,該狀態(tài)即不是高電平,也不是低電平。當(dāng)三態(tài)門處于高阻態(tài)時(shí),無論該門的輸入如何變化,都不會(huì)對其輸出有貢獻(xiàn)。
高阻態(tài)時(shí)引腳對地電阻無窮,電阻大到類似開路。
對于三態(tài)來說就是“0”,“1”,高阻態(tài)。
評論