新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > AVR 的 IO 端口特性與應用

        AVR 的 IO 端口特性與應用

        作者: 時間:2016-12-03 來源:網絡 收藏
        AVRIO端口特性分析:

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

        分析IO引腳Pxn。DDRxn只有為1時,可控單向開關才工作,PORTxn的數值才能通過可控單向開送到Pxn.

        結論:DDRxn=1時,為輸出狀態。輸出值等于PORTxn。所以,DDRxn為方向寄存器。PORTxn為數據寄存器。

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

        從與門的輸入分析,只有以下的條件同時滿足時,上拉電阻才有效

        1、PUD為0

        2、DDxn為0

        3、PORTxn為1

        結論是:只有DDRxn = 0即管腳定義為輸入狀態,并且PORTxn=1,而且UPD設置為0時,上拉電阻才生效。

        分析Pxn及SLEEP。只有當SLEEP = 0時,可控開關2才導通,SD1不工作,施密特觸發器的輸入等于Pxn,信號送到同步器后讀取。

        結論:Pxn無論在輸入或輸出狀態都能被AVR讀取。SLEEP=0時輸入才能被讀取。

        AVR的IO端口的使用注意事項:

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

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

        系統復位時,DDR全部為0,Port也全部為0,故上拉電阻在復位時會失效。

        如何用C語言操縱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數據寄存器的數值翻轉,即如果是1時變成0,如果是0時變成1

        PORTB^=BIT(0);//翻轉PB0口

        舉例四:將PB0、PB1數據寄存器的數值翻轉,即如果是1時變成0,如果是0時變成1

        PORTB^=BIT(0)|BIT(1);//翻轉PB0、PB1口

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

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

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

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

        SFIOR&=~BIT(PUD);// SFIOR寄存器的上拉電阻控制位PUD置0,在整個代碼中,這句話可以不出現,或僅出現一次即可。因為它是一個控制全部上拉電阻的控制位。

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

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

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

        假定在執行上面兩句指令前,DDRB的狀態為:1000 0000

        如果執行DDRB=BIT(0)|BIT(1),DDRB的狀態變為:0000 0011
        如果執行DDRD|=BIT(0)|BIT(1),,DDRB的狀態變為:1000 0011

        那前一句會先清空以前的所有狀態,后一句保留前面的狀態。

        在實際應用中,后一句更常用。

        舉例八:將第三位置1,除了用BIT(3),還有其它的表達方法嗎?

        DDRB|=BIT(3);

        DDRB|=1<<3;

        DDRB|=0x08;

        DDRB|=0b00001000;



        關鍵詞: AVRIO端

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 陇南市| 大理市| 苗栗市| 江永县| 南漳县| 灌云县| 赤水市| 霍城县| 哈尔滨市| 大悟县| 册亨县| 南和县| 东台市| 海阳市| 漳浦县| 池州市| 永定县| 泰顺县| 成武县| 阳春市| 嘉鱼县| 新化县| 山东省| 全椒县| 兴隆县| 宣化县| 平南县| 晋中市| 两当县| 太湖县| 万年县| 哈密市| 永昌县| 锡林浩特市| 桑日县| 百色市| 香港 | 屏边| 礼泉县| 长海县| 怀远县|