新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > pic16f877a的電平變化中斷(interrupt on change)使用誤區

        pic16f877a的電平變化中斷(interrupt on change)使用誤區

        作者: 時間:2016-12-03 來源:網絡 收藏
        在PORTB的RB4:RB7是電平變化中斷interrupt on change),要使用它,將它們引腳對應于TRISB的位設定為輸入是必須的,然后配置中斷。

        工作原理:RB4:RB7是電平變化中斷的引腳的輸入狀態和上一次讀取PORTB的鎖存器的值進行比較,當兩組數據相異時,發生中斷同,當這四個引腳的一部分發生電平變化時,將會最后取或,只要有一個引腳的輸入狀態發生變化,就會發生中斷改變。

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

        注意:在進入中斷服務子程序時,一定要讀取或寫入PORTB鎖存器的值,這樣才會結束兩組數據的比較,然后再去清除中斷標志位。如果沒有讀取PORTB的值,兩組數據的比較一直存在,先清除中斷標志(RBIF)是沒有用的,RBIF也會一直被設定。如下面的例子:

        /*這是一個用INT中斷和電平變化中斷計光電編碼器(碼盤)的讀數*/

        void
        interrupt on_change()
        {
        if(INTF)
        {
        f_r++;
        INTF=0;
        }
        if(RBIF&&RB4) //高電平計數
        {
        RB4=~RB4;//先讀取或寫入PORTB鎖存器的值
        f_l++;
        RBIF=0;//后清除中斷標志(RBIF)
        }
        else {RB4=~RB4; RBIF=0;}//低電平時

        }

        下面的程序就是我們在試驗中一直困擾的問題,就是出不了中斷。

        錯誤用法,沒有讀取鎖存器的值

        void
        interrupt on_change()
        {
        if(INTF)
        {
        f_r++;
        INTF=0;
        }
        if(RBIF&&RB4)
        {
        f_l++;
        RBIF=0;//
        }
        else {RBIF=0;}

        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 方正县| 昆山市| 利津县| 九龙县| 夏河县| 铜鼓县| 长宁县| 获嘉县| 库车县| 微博| 明溪县| 清丰县| 清镇市| 南华县| 叙永县| 昌都县| 竹溪县| 东至县| 宁晋县| 裕民县| 那坡县| 永顺县| 徐闻县| 满城县| 临沭县| 拜泉县| 开平市| 盐山县| 临桂县| 霍州市| 封丘县| 边坝县| 大兴区| 周口市| 桂阳县| 三门峡市| 宜君县| 中宁县| 尉犁县| 南皮县| 客服|