日本a√视频在线,久久青青亚洲国产,亚洲一区欧美二区,免费g片在线观看网站

        <style id="k3y6c"><u id="k3y6c"></u></style>
        <s id="k3y6c"></s>
        <mark id="k3y6c"></mark>
          
          

          <mark id="k3y6c"></mark>

          新聞中心

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

          AVR IO端口的特性與應用

          作者: 時間:2011-11-25 來源:網絡 收藏

          特性分析:

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

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

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

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

          1。PUD 為0

          2。DDxn 為0

          3。PORTxn 為1

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

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

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

          的使用注意事項:

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

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

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

          如何用C語言操縱AVR的(以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 輸出高電平

          舉例五:將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) 的區(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

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

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

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

          DDRB|=BIT(3);

          DDRB|=1>>3;

          DDRB|=0x08;

          DDRB|=0b00001000;



          關鍵詞: AVR IO端口

          評論


          相關推薦

          技術專區(qū)

          關閉