新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > PIC單片機之中斷程序

        PIC單片機之中斷程序

        作者: 時間:2013-05-14 來源:網絡 收藏

        void init_timer0(void)

        {

        OPTION_REG=0x87;

        }

        void interrupt isr(void)//,interrupt是個關鍵字說明該函數,是中斷函數。

        {

        LED = ~LED;//改變LED的狀態

        INTCONbits.TMR0IF=0;//清零中斷標志位 如果在離開前沒有清零,程序將不停的中斷。

        TMR0=61;//給TMR0付初始值61 ,開始下一個50ms計時做準備。

        //中斷函數結束 返回主函數。哪里來回 回那里去,也就是回到主函數的while(1);處

        }

        int main(int argc, char** argv)

        {

        init_fosc();

        init_gpio();

        init_timer0();

        INTCONbits.GIE=1; //開啟總中斷

        INTCONbits.TMR0IF=0;//清零TMR0溢出中斷標志位

        INTCONbits.TMR0IE=1;//開啟TMR0溢出中斷

        TMR0=61;

        while(1);//主函數 在此什么都沒做一直在死循環。但等到50ms時間到了TMR0將會溢出,程序就會跳到void interrupt isr(void)處執行。

        }

        我幫大家理清下中斷初始設置大致的步驟

        1 ,開啟總中斷,開啟外設中斷。INTCONbits.GIE=1; INTCONbits.PEIE=1;其實即使沒用到外設開啟也無妨。

        2 ,清楚相應中斷的標志位。如INTCONbits.TMR0IF=0;

        3 ,開啟相應中斷。如INTCONbits.TMR0IE=1;

        中斷函數/程序 中要注意的就是 清零相應的中斷標志位 如INTCONbits.TMR0IF=0; 否則單片機會認為中斷未被執行 則一直中斷。


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 三台县| 安龙县| 保亭| 新河县| 岳池县| 比如县| 十堰市| 习水县| 新乡县| 大英县| 姚安县| 中江县| 特克斯县| 浙江省| 长春市| 常德市| 徐闻县| 苍溪县| 宜州市| 潜江市| 朔州市| 顺义区| 阜康市| 嘉鱼县| 睢宁县| 清镇市| 濮阳市| 镇坪县| 沙坪坝区| 新绛县| 连平县| 白河县| 句容市| 河西区| 达拉特旗| 苍梧县| 简阳市| 宣武区| 灵寿县| 葵青区| 余姚市|