新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機開發中的一些實用技巧(上)

        單片機開發中的一些實用技巧(上)

        作者: 時間:2012-02-06 來源:網絡 收藏

          二。用軟件擴展外部中斷

          大家知道,51的外部中斷只有2個,書本上曾介紹了一種擴展外部中斷源的方法,但是需增加硬件開銷(見圖5)。經或非門引入外中斷源輸入端(/INT0或/INT1),同時又連到某I/0口。這樣,每個“源”都可能引起中斷,在中斷服務程序中通過軟件查詢便可確定哪一個是正在申請的中斷源,其查詢的次序則由中斷源優先級決定,這就可實現多個外部中斷源的擴展。

          

          圖5

          這種方法盡管擴展了外部中斷源,但也有不盡人意之處,如設計一個具有8個中斷源的電路,則需一個8輸入端的或非門(或門),顯然,對體積與成本都不利。這里介紹筆者設計的擴展外部中斷源的方法,由純軟件實現,不添加一個元件(見圖6)。

          

          圖6

          #include P>

          static unsigned char data m;//m為全局變量

          /*-------延時子程序-------*/

          void delay(unsigned int k)

          {

          unsigned int i,j;

          for(i=0;i

          for(j=0;j121;j++)

          {;}}

          }

          /*---外部中斷INT0子程序---*/

          void init0()interrupt 0

          {

          delay(10);//延時10mS抗抖動干擾

          if(P3_2==0)

          {

          EX0=0;//關INT0中斷

          EA=0;//關總中斷

          P3_2=0;//置P3.2為低電平

          P2=0xff;//置P2口為全1

          m=P2;//讀取P2口狀態至m

          P2=0x00;//恢復P2口為全0

          P3_2=1; //置P3.2為高電平

          IT0=1;//置INT0為邊沿觸發

          EX0=1; //開INT0中斷

          EA=1;} //開總中斷

          }

          /********主程序*********/

          void main(void)

          {

          P2=0x00;// 置P2口為全0

          P3_2=1;// 置P3.2為高電平

          IT0=1;// 置INT0為邊沿觸發

          EX0=1;// 開INT0中斷

          EA=1; //開總中斷

          while(1)//無限循環

          {

          P0=m;//將全局變量m中的內容輸出至P0口

          P3_0=!P3_0;//P3.0取反,指示程序狀態

          delay(500);//延時500mS

          }

          }

          程序解釋:無按鍵按下時,P3.0的發光管閃亮,作程序狀態顯示。主程序初始化時,置P2口為全0,置P3.2為高電平,同時置INT0為邊沿觸發,并開放中斷。8個按鍵的任一個按下時都會引起INT0中斷,進入中斷服務子程序后,首先關閉中斷,然后置P3.2為低電平,置P2口為全1,再讀取P2口狀態至m,通過查詢m的狀態字即可知道正在申請的中斷源。這里我們采用的方法是將m輸出至P0口點亮LED作指示。退出中斷時,重新開放中斷。


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 郓城县| 龙口市| 台山市| 长岛县| 芜湖市| 迭部县| 万州区| 南投市| 麻江县| 云和县| 泰和县| 宜州市| 白玉县| 嘉黎县| 林西县| 彭泽县| 靖安县| 望江县| 杭锦后旗| 巴中市| 合山市| 齐河县| 扶余县| 岗巴县| 平果县| 张家港市| 太谷县| 白朗县| 惠安县| 腾冲县| 日照市| 蒲城县| 安远县| 永川市| 宣城市| 建始县| 青河县| 望都县| 诸暨市| 河南省| 驻马店市|