新聞中心

        AVR I/O口使用方法

        作者: 時間:2013-12-10 來源:網(wǎng)絡(luò) 收藏

        單片機 DDRx PORTx PINx 與對應IO端口之間的關(guān)系(x代表某個端口,如A端口、B端口等)

        下表以端口B的第2位PB2為例子加以說明,并且假設(shè)PB2為懸空狀態(tài)

        DDRB.2


        PORTB.2


        讀取PINB.2的結(jié)果


        引腳PB2的狀態(tài)

        1
        1

        1

        PB2推挽輸出

        1

        1
        0

        0

        PB2推挽輸出

        0

        0
        1

        1

        PB2弱上拉,可作輸入

        0
        0

        ×

        PB2高阻抗,可作輸入

        讀取PINB.2時,就是讀取PB2引腳的實際電平,

        如果PB2直接接VCC,那么任何時候讀取PINB.2的結(jié)果都是1

        如果PB2直接接GND,那么任何時候讀取PINB.2的結(jié)果都是0
        下面是一個標準C語言例子:


        #include mega48.h>

        unsigned char abc; //定義一個變量

        void main(void) //主函數(shù)

        {

        DDRB = 0b11110000;

        PORTB = 0b11001100;

        while (1) //主循環(huán)

        {

        abc = PINB; //讀取B端口的實際電平

        }

        }


        如果整個B端口都是懸空的話,

        那么abc的結(jié)果就是:0b110011**

        如果B端口第7位接GND 、第0位接VCC 、其它位懸空,

        那么abc的結(jié)果就是:0b010011*1 (PB7工作在“短路”狀態(tài))

        其中“*”表示不確定,理想狀態(tài)下可以看作0

        端口聲明:include iom16v.h>
        #include "D:ICC_HCmmICC.H"
        #define OUT_BUZ sbi(DDRB,3) //PB3
        #define BUZ_ON cbi(PORTB,3)
        #define BUZ_OFF sbi(PORTB,3)
        /*--------------------------------------------------------------------
        程 序名稱:
        程序功能:
        注意事項:
        提示說明:
        輸 入:
        返 回:
        --------------------------------------------------------------------*/
        void main(void)
        {
        OUT_BUZ; //設(shè)置相應的為輸出
        while(1)
        {
        BUZ_ON; //我叫
        delay50ms(20);
        BUZ_OFF; //我不叫
        delay50ms(20);
        }
        }

        系統(tǒng)調(diào)試
        將語句:delay50ms(20);改為語句:delay50ms(1);可以聽到 叫的頻率更高,吵死人了!


        以ATMEGA16為例,用輕松幽默的講解方式,講解的每個功能部件,配合給出 Protel電路圖及ICC源代碼。
        都是網(wǎng)上找的資料,整理了一下,大伙湊或者學吧!

        第一課 AVR IO輸出之LED顯示程序

        系統(tǒng)功能
        使用AVR控制8位LED,做到想閃就閃,不想閃就不閃,左閃右閃,拚命閃,演示AVR單片機之“點燈術(shù)”。
        硬件設(shè)計
        關(guān)于AVR的I/O結(jié)構(gòu)及相關(guān)介紹詳見Datasheet,這里僅對作部分簡單介紹,下面是AVR的I/O引腳配置表:
        AVR I/O 口引腳配置表
        DDRXn PORTXn PUD I/O 方式 內(nèi)部上拉電阻 引腳狀態(tài)說明
        0 0 X 輸入 無效 三態(tài)(高阻)
        0 1 0 輸入 有效 外部引腳拉低時輸出電流 (uA)
        0 1 1 輸入 無效 三態(tài)(高阻)
        1 0 X 輸出 無效 推挽 0 輸出,吸收電流 (20mA)
        1 1 X 輸出 無效 推挽 1 輸出,輸出電流 (20mA)
        雖然AVR的I/O口單獨輸出“1”時,可輸出較大電流足已點亮一盞燈,但AVR總的I/O輸出畢竟是有限的,所以,有經(jīng)驗的點燈者考慮到除了點 燈外可能還有其它費勁的活兒要干,會將AVR的I/O口設(shè)計為輸出“0”時點燈,輸出“1”時熄燈。這種接法亦叫“灌電流接法”。

        c語言相關(guān)文章:c語言教程



        上一頁 1 2 下一頁

        關(guān)鍵詞: AVR IO口 寄存器

        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 昌吉市| 女性| 资兴市| 朝阳县| 吴旗县| 禄丰县| 四子王旗| 红河县| 葵青区| 云霄县| 洞口县| 华池县| 临汾市| 红桥区| 库尔勒市| 和田市| 凤山市| 泾川县| 西乡县| 昭平县| 宜城市| 松阳县| 海兴县| 富宁县| 壤塘县| 长丰县| 西贡区| 溆浦县| 遵化市| 黎平县| 杭锦旗| 通江县| 花莲县| 夏津县| 五家渠市| 大庆市| 嘉鱼县| 绵竹市| 彝良县| 武山县| 清水河县|