新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > AVR的IO端口特性與應(yīng)用

        AVR的IO端口特性與應(yīng)用

        作者: 時(shí)間:2016-11-13 來(lái)源:網(wǎng)絡(luò) 收藏
        DDRxn=1 時(shí),為輸出狀態(tài)。輸出值等于PORTxn。所以,DDRxn 為方向寄存器。PORTxn 為數(shù)據(jù)寄存器。

        本文引用地址:http://www.104case.com/article/201611/316521.htm

        分析上拉電阻。E的電位為0時(shí),即D為1時(shí),上拉電阻有效。

        從與門(mén)的輸入分析,只有以下的條件同時(shí)滿足時(shí),上拉電阻才有效

        1。PUD 為0

        2。DDxn 為0

        3。PORTxn 為1

        結(jié)論是:只有DDRxn = 0 即管腳定義為輸入狀態(tài),并且 PORTxn=1, 而且UPD設(shè)置為0時(shí),上拉電阻才生效。

        分析 Pxn 及 SLEEP。只有當(dāng) SLEEP = 0 時(shí),可控開(kāi)關(guān)2才導(dǎo)通,SD1不工作,施密特觸發(fā)器的輸入等于Pxn, 信號(hào)送到同步器后讀取。

        結(jié)論:Pxn 無(wú)論在輸入或輸出狀態(tài)都能被AVR讀取。SLEEP=0時(shí)輸入才能被讀取。

        AVR的IO端口的使用注意事項(xiàng):

        如果有引腳末被使用,建議些引腳賦予一個(gè)確定電平。最簡(jiǎn)單的保證未用引腳具有確定電平的方法是使能內(nèi)部上拉電阻。

        如果剛定義了引腳的輸入狀態(tài),就要立即回讀,可以在回讀前,插入一句 _nop()。

        系統(tǒng)復(fù)位時(shí),DDR全部為0,Port也全部為0,故上拉電阻在復(fù)位時(shí)會(huì)失效。

        如何用C語(yǔ)言操縱AVR的IO端口(以ICCAVR為例):

        舉例一:將PB0定義為輸出,且輸出為高電平

        DDRB=BIT(0);//定義 PB0為輸出

        PORTB|=BIT(0);// PB0 輸出高電平

        舉例二:將PB0、PB1定義為輸出,且PB0輸出低電平,PB1均為高電平

        DDRB|=BIT(0)|BIT(1);//定義 PB0、PB1為輸出

        PORTB|=BIT(0)|BIT(1);// PB0、PB1 輸出高電平

        舉例三:將PB0數(shù)據(jù)寄存器的數(shù)值翻轉(zhuǎn),即如果是1時(shí)變成0,如果是0時(shí)變成1

        PORTB^=BIT(0);// PB0 輸出高電平

        舉例四:將PB0、PB1數(shù)據(jù)寄存器的數(shù)值翻轉(zhuǎn),即如果是1時(shí)變成0,如果是0時(shí)變成1

        PORTB^=BIT(0)|BIT(1);// PB0 輸出高電平

        舉例五:將PB2、PB3定義為輸入,不帶上拉電阻

        DDRB&=~(BIT(2)|BIT(3));//定義 PB2、PB3為輸入

        PORTB&=~(BIT(2)|BIT(3));// 將 PORT 置0,沒(méi)有上拉電阻

        舉例六:將PB2、PB3定義為輸入,帶上拉電阻。即沒(méi)有引用這些引腳時(shí),缺省值為高電平

        SFIOR&=~BIT(PUD);// SFIOR寄存器的上拉電阻控制位PUD置0,在整個(gè)代碼中,這句話可以不出現(xiàn),或僅出現(xiàn)一次即可。因?yàn)樗且粋€(gè)控制全部上拉電阻的控制位。

        DDRB&=~(BIT(2)|BIT(3));//定義 PB2、PB3為輸入

        PORTB|=BIT(2)|BIT(3);// 將 PORT 置1,滿足上拉電阻的另一個(gè)條件

        舉例七:DDRB=BIT(0)|BIT(1) 與 DDRB|=BIT(0)|BIT(1) 的區(qū)別

        假定在執(zhí)行上面兩句指令前,DDRB 的狀態(tài)為: 1000 0000

        如果執(zhí)行 DDRB=BIT(0)|BIT(1) ,DDRB的狀態(tài)變?yōu)椋?0000 0011
        如果執(zhí)行 DDRD|=BIT(0)|BIT(1),,DDRB的狀態(tài)變?yōu)椋?1000 0011

        那前一句會(huì)先清空以前的所有狀態(tài),后一句保留前面的狀態(tài)。



        關(guān)鍵詞: AVRIO端

        評(píng)論


        技術(shù)專(zhuān)區(qū)

        關(guān)閉
        主站蜘蛛池模板: 大邑县| 兰考县| 铜陵市| 晋州市| 大方县| 偃师市| 新龙县| 深水埗区| 青岛市| 额尔古纳市| 鄂托克前旗| 舞阳县| 平邑县| 沂水县| 凤翔县| 顺平县| 安新县| 温泉县| 襄垣县| 阿勒泰市| 内丘县| 潞西市| 灵宝市| 牡丹江市| 保德县| 留坝县| 锦屏县| 茌平县| 岳普湖县| 昭觉县| 抚远县| 东乌| 洪湖市| 双江| 黄冈市| 金阳县| 河北区| 南皮县| 阿尔山市| 奉新县| 郧西县|