<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

        PIC32MX220F032B學習筆記之I/O口

        作者:枯葉之碟   來源:枯葉之碟的博客   點擊數:  更新時間:2014年06月06日   【字體:

        學校發的實驗例子太高深了,對于我們零基礎的孩子來說太痛苦了,只有自己找資料湊湊了。邊學習邊記錄,提供大家參考和指正。

         

        先說說基礎定義吧:

        1.一般要先定義端口的輸入和輸出TRISx(數據方向寄存器)

        如果相應的TRISx的位為0表示為輸出,這個很容易記住,Output的第一個字母O和數字0相象。
        如果相應的TRISx的位為1表示為輸入,這個很容易記住,Input的第一個字母I和數字1相象。

        如:
        TRISB=0b11001010;(二進制表示0b)注意的是二進制從右向左數依次為0,1,2...
        TRISB=0xCA;(十六進制0x)  十六進制1位換成4位二進制0xf=0b1111
        TRISB=202;(十進制)

        他們的效果都是一樣的表示RB7,RB6,RB3,RB1為輸入,其余(RB5,RB4,RB2,RB0)為輸出。

        也可以單獨的對某個位進行操作:

        TRISAbits.TRISA7=0;//A端的編號七設置為輸出

        TRISBbits.TRISB1=1;//B端的編號一設置為輸入

         

        1.1也可以用我們實驗例子中所用到的在plib.h頭文件中的庫函數

        PORTSetPinsDigitalOut(IOPORT_B, BIT_7);//將B端的RB7設為數字輸出端口

         

        順便說一下,PIC默認時,引腳是輸入的,即默認時,TRISx=0xFF.F=1111;

         

        關于何時輸入輸出的問題百度了以下:

        輸出:如果你要用某個引腳控制一個東東,如讓它高電平或低電平,則這個引腳就得設置為輸出。(例如點亮一個燈)
        輸入:如果你想知道某個引腳是高電平或低電平,則這個引腳就得設置為輸入。還有如果作為AD轉換,相應的引腳就得做為輸入。(例如獲取按鈕的狀態)

         

         

        2.然后就是設置I/O口的值PORTx ——— 端口寄存器(可以點亮led燈了)

        如果相應的PORTx的位為1表示為高電位

        如果相應的PORTx的位為0表示為低電位

        如:

        PORTA=0b10100010;        或        PORTA=0xA2;
        都表示RA1,RA5,RA7為高電位,其他的為低電位。

        同樣也可以單個控制

        PORTBbits.RB6=1;//B端的RB6為高電位

         

        2.1也可以用我們實驗例子中所用到的在plib.h頭文件中的庫函數

        PORTSetBits(IOPORT_B,BIT_7|BIT_8|BIT_9);//將B端IO口的RB7,RB8,RB9置1高電位

        PORTClearBits(IOPORT_A,BIT_0|BIT_1|BIT_3);//將A端IO口的RA0,RA1,RA3清零低電位

        注意:要引用這些庫函數需要在起始位置添上#include

         

        先寫個簡單的流水燈例子吧

        開發板電路原理圖如下:


        注意到有四個led D10,D12,D13,D4燈分別對應RB7,RB8,RB9,RB13只需控制這幾個端口就可以做簡單的流水燈了。

        但觀察實際的開發板從上到下為D13,D12,D10,D4,也就是從上到下控制RB9,RB8,RB7,RB13要以實際為主。

        代碼如下:


        #include //32位的基本頭文件
        #include//定義了多種庫函數的頭文件
        #pragma config JTAGEN = OFF//好像用MPLABX IDE測試都要關閉JTAGEN端口(不太懂)

        int main()
        {
            int i;
            TRISBbits.TRISB7=0;
            TRISBbits.TRISB8=0;
            TRISBbits.TRISB9=0;
            TRISBbits.TRISB13=0;

        //設置RB7,RB8,RB9,RB13為輸出

        //也可直接用PORTSetPinsDigitalOut(IOPORT_B, BIT_7|BIT_8|BIT_9|BIT_13);代替

        PORTSetBits(IOPORT_B,BIT_7|BIT_8|BIT_9|BIT_13);

        //將RB7,RB8,RB9,RB13 置1 (我發現這開發板置1的時候燈滅,置0的時候亮不太清楚為什么)

        while(1)
            {
             for(i=0;i<100000;i++)
            {
        //    單個命名賦值有沖突錯誤 ,單個賦值時發現燈沒有正常的流水亮,多次調試都不成功最終放棄
        //    PORTBbits.RB9=0;
        //    PORTBbits.RB13=1;
        //    PORTBbits.RB8=1;
        //    PORTBbits.RB7=1;
          
            }
        //     PORTB=0b11110111111111;//這個可以用,與下面兩句等效
             PORTClearBits(IOPORT_B,BIT_9);
            PORTSetBits(IOPORT_B,BIT_7|BIT_8|BIT_13);
             for(i=0;i<100000;i++)
            {
              
        //    PORTBbits.RB9=1;
        //    PORTBbits.RB13=1;
        //    PORTBbits.RB8=0;
        //    PORTBbits.RB7=1;
           
            }
        //    PORTB=0B11111011111111;//同上(使用時注意去掉下面兩句)
            PORTClearBits(IOPORT_B,BIT_8);
            PORTSetBits(IOPORT_B,BIT_7|BIT_9|BIT_13);
             for(i=0;i<100000;i++)
             {
               
        //    PORTBbits.RB9=1;
        //    PORTBbits.RB13=1;
        //    PORTBbits.RB8=1;
        //    PORTBbits.RB7=0;
          
             }
        //  PORTB=0B11111101111111;
         PORTClearBits(IOPORT_B,BIT_7);
         PORTSetBits(IOPORT_B,BIT_8|BIT_9|BIT_13);
         
            for(i=0;i<100000;i++)//等待延時的簡單設置
            {
              
        //    PORTBbits.RB9=1;
        //    PORTBbits.RB8=1;
        //    PORTBbits.RB7=1;
        //    PORTBbits.RB13=0;
            }
        //  PORTB=0B01111111111111;
          PORTClearBits(IOPORT_B,BIT_13);//先點亮RB13
          PORTSetBits(IOPORT_B,BIT_7|BIT_8|BIT_9);//確保其他端口滅
            }
          
        }

        3.總結

        面對一個新的領域確實有點摸不著頭腦,還有一些語句也太多了,幾條不同的語句竟然都表示同一個意思甚至匯編,C語言,偽指令都混用。

        雖然這樣可移植性和適用語言性大大增強了,但對我們初學者也太多了,有點混亂?磥砦业幕A也沒有掌握,還有這么多語句要理解。

         有些疑問還需要慢慢的查詢和解決。

         

        轉載請說明出處謝謝。

        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮