新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > AVR端口(DDxn,PORTxn)配置及其說明

        AVR端口(DDxn,PORTxn)配置及其說明

        作者: 時間:2016-11-18 來源:網絡 收藏
        AVR端口(DDxnPORTxn)配置及其說明

        引腳序號 引腳名稱 引腳功能

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

        8 位雙向I/O 口, 具有可編程的內部上拉電阻

        其輸出緩沖器具有對稱的驅動特

        性,可以輸出和吸收大電流。作為輸入使用時,
        PB5
        1 若內部上拉電阻使能,端口被外部電路拉

        低時將輸出電流。在復位過程中,即使系統

        時鐘還未起振,端口A 處于高阻狀態。

        MOSI SPI 總線的主機輸出/ 從機輸入信號

        PB6 8 位雙向 I/O 口
        2
        MISO SPI 總線的主機輸入/ 從機輸出信號

        PB7 8 位雙向 I/O 口
        3
        SCK SPI 總線的串行時鐘

        復位輸入引腳。持續時間超過最小門限時間的低電
        4 RESET
        平將引起系統復位。

        5 VCC 數字電路的電源

        6 GND 地

        7 XTAL2 反向振蕩放大器的輸出端

        8 XTAL1 反向振蕩放大器與片內時鐘操作電路的輸入端

        PD0 8 位雙向 I/O 口
        9
        RXD USART 輸入引腳

        PD1 8 位雙向 I/O 口
        10
        TXD USART 輸出引腳

        PD2 8 位雙向 I/O 口
        11
        INT0 外部中斷 0 的輸入

        PD3 8 位雙向 I/O 口
        12
        INT1 外部中斷 1 的輸入

        PD4 8 位雙向 I/O 口
        13
        OC1B T/C1 輸出比較B 匹配輸出

        PD5 8 位雙向 I/O 口
        14
        OC1A T/C1 輸出比較A 匹配輸出

        PD6 8 位雙向 I/O 口
        15
        ICP1 T/C1 輸入捕捉引腳

        PD7 8 位雙向 I/O 口
        16
        OC2 T/C2 輸出比較匹配輸出

        17 VCC 數字電路的電源

        18 GND 地

        PC0 8 位雙向 I/O 口
        19
        SCL 兩線串行總線時鐘線

        PC1 8 位雙向 I/O 口
        20
        SDA 兩線串行總線數據輸入/ 輸出線

        PC2 8 位雙向 I/O 口
        21
        TCK JTAG 測試時鐘

        PC3 8 位雙向 I/O 口
        22
        TMS JTAG 測試模式選擇

        PC4 8 位雙向 I/O 口
        23
        TDO JTAG 測試數據輸出

        PC5 8 位雙向 I/O 口
        24
        TDI JTAG 測試數據輸入

        PC6 8 位雙向 I/O 口
        25
        TOSC1 定時振蕩器引腳 1

        PC7 8 位雙向 I/O 口
        26
        TOSC2 定時振蕩器引腳 2

        端口A 與A/D轉換器的電源。。不使用ADC 時,該

        27 AVCC 引腳應直接與VCC 連接。使用 ADC 時應通過一個低

        通濾波器與 VCC 連接。

        28 AGND A/D 的模擬地

        29 AREF A/D 的模擬基準輸入引腳

        PA7 8 位雙向 I/O 口
        30
        ADC7 ADC 輸入通道 7

        PA6 8 位雙向 I/O 口
        31
        ADC6 ADC 輸入通道 6

        PA5 8 位雙向 I/O 口
        32
        ADC5 ADC 輸入通道 5

        PA4 8 位雙向 I/O 口
        33
        ADC4 ADC 輸入通道 4

        PA3 8 位雙向 I/O 口
        34
        ADC3 ADC 輸入通道 3

        PA2 8 位雙向 I/O 口
        35
        ADC2 ADC 輸入通道 2

        36 PA1 8 位雙向 I/O 口

        ADC1 ADC 輸入通道 1

        PA0 8 位雙向 I/O 口
        37
        ADC0 ADC 輸入通道 0

        38 VCC 數字電路的電源

        39 GND 地

        PB0 8 位雙向 I/O 口

        40 T0 T/C0 外部計數器輸入

        XCK USART 外部時鐘輸入/ 輸出

        PB1 8 位雙向 I/O 口
        41
        T1 T/C1 外部計數器輸入

        PB2 8 位雙向 I/O 口

        42 AIN0 模擬比較正輸入

        INT2 外部中斷 2 輸入

        43 PB3 8 位雙向 I/O 口


        AIN1 模擬比較負輸入

        OC0 T/C0 輸出比較匹配輸出

        44 SS SPI 從機選擇引腳

        Atmega16單片機有32個通用I/O口,有PA ~PD四組,每組都是8位。其主要的寄存器有DDRXn(X=A,B,C,D;n=0,2,…,7,下同),PORTXn和PINXn。

        DDRX是方向寄存器,可讀可寫。在寫操作時用于制定PX口是作為輸入口還是輸出口;在讀操作時,從DDRX寄存器讀出來的是端口的方向設定值。DDRX寄存器的初始值為0x00。

        PORTX是數據寄存器,可讀寫。在寫操作時,從PORTX寫入的數據存入內部鎖存器,以確定端口的工作狀態或者將寫入的數據送到外部數據總線。PORTX寄存器的初始值為0x00。

        PINX用來訪問端口X的邏輯值,且只允許讀操作。從PINX讀入的數據只是X口引腳的邏輯 狀態。其初始值為高阻態。

        /************************************引腳配置**************************************************/
        /*
        引腳配置為輸入時,若 PORTxn 為 "1“ ,上拉電阻將使能。如果需要關閉這個上拉電阻, 可以將 PORTxn 清零,或者將這個引腳配置為輸出。復位時各引腳為高阻態,即使此

        時并沒有時鐘在運行。
        當引腳配置為輸出時,若 PORTxn 為 "1“ ,引腳輸出高電平("1“) ,否則輸出低電平(“0“)。
        在 ( 高阻態 ) 三態 ({DDxn, PORTxn} = 0b00) 輸出高電平 ({DDxn, PORTxn} = 0b11) 兩種狀態之間進行切換時,上拉電阻使能 ({DDxn, PORTxn} = 0b01) 或輸出低電平

        ({DDxn, PORTxn} = 0b10) 這兩種模式必然會有一個發生。通常,上拉電阻使能是完全可以接受的,因為高阻環境不在意是強高電平輸出還是上拉輸出。如果使用情況不是這樣

        子,可以通過置位 SFIOR 寄存器的 PUD 來禁止所有端口的上拉電阻.
        在上拉輸入和輸出低電平之間切換也有同樣的問題。用戶必須選擇高阻態 ({DDxn, PORTxn} = 0b00) 或輸出高電平 ({DDxn, PORTxn}=0b10) 作為中間步驟
        */
        void IO_change(void)
        {
        //高阻態
        DDxn=0;
        PORTxn=0;
        //禁止所有端口的上拉電阻
        SFIOR|=1<//輸出高電平
        DDxn=0xff;
        PORTxn=0xff;
        //使能所有端口的上拉電阻
        SFIOR&=~(1<}

        void IO_change_A(void)
        {//高阻態
        DDxn=0;
        PORTxn=0;
        //上拉電阻使能 ({DDxn, PORTxn} = 0b01) 或輸出低電平 ({DDxn, PORTxn} = 0b10)
        DDxn=0;
        PORTxn=0xff;
        /*
        DDxn=0xff;
        PORTxn=0;
        */
        //輸出高電平
        DDxn=0xff;
        PORTxn=0xff;

        }
        void IO_changge_B()
        {//上拉輸入
        DDxn=0;
        PORTxn=0xff;
        //高阻態 ({DDxn, PORTxn} = 0b00) 或輸出高電平 ({DDxn, PORTxn}=0b11)
        DDxn=0;
        PORTxn=0;
        /*
        DDxn=0xff;
        PORTxn=0xff;
        */
        //輸出低電平
        DDxn=0xff;
        PORTxn=0;

        }
        /******************************************讀取引腳的數據***************************************/
        void read_PINX(void)
        {
        /*

        PUD 上拉電
        DDxn PORTxn (in SFIOR) I/O 阻 說明

        0 0 X Input No 高阻態 (Hi-Z)

        0 1 0 Input Yes 被外部電路拉低時將輸出電流

        0 1 1 Input No 高阻態 (Hi-Z)

        1 0 X Output No 輸出低電平 ( 吸收電流 )

        1 1 X Output No 輸出高電平 ( 輸出電流 )
        不論如何配置 DDxn ,都可以通過讀取PINxn 寄存器來獲得引腳電平.PINxn 寄存器的各個位與其前面的鎖存器組成了一個同步器,這樣就可以避免在內部時鐘狀態發生改變的短時

        間范圍內由于引腳電平變化而造成的信號不穩定.引入了延遲是必然的。
        */
        unsigned char i;
        /* 定義上拉電阻和設置高電平輸出 */
        /* 為端口引腳定義方向 */
        PORTB = (1<DDRB = (1</* 為了同步插入 nop指令 */
        _NOP();
        /* 讀取端口引腳 */
        i = PINB;
        }
        /**************************未連接引腳的處理****************************************/
        /*
        如果有引腳未被使用,建議給這些引腳賦予一個確定電平。雖然如上文所述,在深層休眠模式下大多數數字輸入被禁用,但還是需要避免因引腳沒有確定的電平而造成懸空引腳在

        其它數字輸入使能模式 ( 復位、工作模式、空閑模式 ) 消耗電流。最簡單的保證未用引腳具有確定電平的方法是使能內部上拉電阻。但要注意的是復位時上拉電阻將被禁用。如

        果復位時的功耗也有嚴格要求則建議使用外部上拉或下拉電阻。不推薦直接將未用引腳與 VCC 或 GND 連接,因為這樣可能會在引腳偶然作為輸出時出現沖擊電流。

        */



        關鍵詞: AVR端口DDxnPORTx

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 将乐县| 绥芬河市| 响水县| 陕西省| 永城市| 肥乡县| 玛曲县| 河北省| 凌海市| 虞城县| 定西市| 米林县| 临城县| 太原市| 松桃| 鄂伦春自治旗| 民乐县| 双江| 澄城县| 平果县| 电白县| 舞钢市| 磴口县| 通山县| 临武县| 临湘市| 巴林左旗| 亳州市| 洮南市| 仁布县| 黄冈市| 汉沽区| 新郑市| 西安市| 全南县| 齐河县| 志丹县| 岳普湖县| 建昌县| 宜城市| 汕头市|