新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 認識C51外部中斷(INT0)

        認識C51外部中斷(INT0)

        作者: 時間:2016-11-25 來源:網(wǎng)絡 收藏
        以下將以紅外遙控解碼為例講一下C51外部中斷(INT0)的編程親身體會.

        要對紅外遙控信號解碼那么就要使用C51外部中斷,并且要設置成為負跳變沿觸發(fā)方式.一般都會在主程序的開始外初始化中斷(或將初始化中斷程序寫成函數(shù),將這個函數(shù)放入主程序)如下:

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

        void main(void)
        {

         IT0=1;//負跳變觸發(fā)
         EX0=1;//開外部中斷0
         EA=1;//開總中斷

         .........//其它程序

         ..........
        }

        void INT0() interrupt 0

        {

         .......//紅外信號解碼程序

        }

        根據(jù)需要打開外部中斷(EX0=1):

         以上程序在開始處便打開了外部中斷.從理論上是完全正確的!但在現(xiàn)實情況中要看具體情況來打開外部中斷!如果剛進入程序要處理其它事情暫時不能處理紅外信號,那么EX0=1就不能寫在主程序的開始處.而要寫在適當?shù)奈恢?否則開機有紅外信號就會馬上進入紅外信號解碼程序.

        關閉外部中斷(EX0=0):

         一但有中斷信號,單片機將很快對中斷產(chǎn)生響應進入中斷程序.中斷程序也就是紅外信號解碼程序.在中斷程序中一定不要忘記關閉中斷EX0=0!在按下遙控器的某個按鍵后,遙控器將一組一組的向外發(fā)送數(shù)據(jù).即便是以最快的速度按下并放開按鍵,那么遙控已經(jīng)發(fā)送出多組數(shù)據(jù).單片機將多次解碼,主程序如果比較龐大解碼出來的數(shù)據(jù)還沒有來的急使用就被下一個數(shù)據(jù)覆蓋!關閉外部中斷后,能有效的避免干擾和分清當前一組數(shù)據(jù)是否接收解碼完畢!進入中斷程序就將外部中斷關閉,一組數(shù)據(jù)解碼結束并經(jīng)主程序采用后在開啟外部中斷.這才是一個完整的過程!這一個完整的過程是在沒有干擾的情況下可正常完成.現(xiàn)實中干擾無時不在,一但無法正常解碼出數(shù)據(jù)那么主程序也不采用,那么外部中斷將不在打開.也就不在接受紅外信號.這時在紅外解碼程序的最后加一判斷,如果出錯就在解碼程序最后打開外部中斷為下一次接受紅外信號做好準備.

         

        根據(jù)需要清空IE0(IE0=0):

         關閉中斷后遙控器并沒有停止發(fā)送信號,關閉中斷后的紅外信號將繼續(xù)使IE0置位.IE0的狀態(tài)根本不受EX0的控制.單片機執(zhí)行了IT1=1語句,只要外部中斷有負跳變沿IE0就會置位.如果我們只處理EX0=1(即中斷開啟后的信號)以后的信號.那么在紅外信號解碼程序退出前要對IE0清零.如果不清零,只要打開外部中斷將會再次進入中斷.這一次進入中斷輕則是浪費時間,重則可能就會出錯(進入中斷后紅外線解碼采用查詢法時表現(xiàn)的很明顯).所以在EX0=1前面要加上一句IE0=0.



        關鍵詞: C51外部中斷INT

        評論


        技術專區(qū)

        關閉
        主站蜘蛛池模板: 丹阳市| 平定县| 谢通门县| 涞源县| 柞水县| 宁阳县| 穆棱市| 永平县| 巴楚县| 钦州市| 永年县| 鄂托克旗| 茌平县| 拉萨市| 女性| 沽源县| 宝坻区| 巴里| 江都市| 诏安县| 饶河县| 永和县| 若尔盖县| 临高县| 政和县| 海晏县| 高安市| 达尔| 蓝山县| 静乐县| 沅江市| 南京市| 雅安市| 乡宁县| 嘉祥县| 宝兴县| 靖远县| 都安| 固安县| 密云县| 宁河县|