新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 個人對單片機中斷程序的理解

        個人對單片機中斷程序的理解

        作者: 時間:2016-12-01 來源:網絡 收藏
        開題首先貼上一段練習中遇到的代碼:

        /*1:利用定時/計數器T0從P1.0輸出周期為1s的方波,讓發光二極管以1HZ閃爍,設晶振頻率為12MHz。*/
        #include
        #include
        #define uint unsigned int
        #define uchar unsigned char
        sbit P1_1=P1^0;
        uchar time;
        void main()
        {
        time=0;
        TMOD=0x01;////設置定時器0為工作方式1
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        EA=1;//開總中斷
        ET0=1;//開定時器0中斷
        TR0=1;//啟動定時器0
        while(1);//等待中斷產生
        }
        void T1_time() interrupt 1
        {
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        time++;
        if(time==20)
        {
        time=0;
        P1_1=~P1_1;
        }
        }

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

        hit:
        在學習單片機的時候很容易按照C語言編程的格式來理解,程序在打開中斷之后會一直停留在while(1);當中,但在實際上,程序的確會停留在while(1);里,由于開啟了中斷開關而并未關閉,所以T0繼續計數,所以后面一直會有中斷。

        過程可以理解為這樣,程序一直在while(1);當中,直到定時器計滿產生中斷;
        產生中斷后,執行中斷程序,定時器重新賦值,time自加1;
        回到while(1)中,等待下一次中斷,定時器繼續計數。

        單片機怎么從主函數跳到中斷函數中:
        對于單片機的硬件,你熟悉嗎?時鐘和CPU是獨立的,時鐘中斷程序時這樣的:在CPU執行指令時,計數器(計時器)同時在計時,當計時器溢出時,就向CPU申請中斷,如果允許響應中斷,CPU就轉到中斷服務程序執行相關的程序。
        單片機的時鐘中斷相應要滿足兩個條件:第一,允許中斷源申請中斷。第二,允許cpu響應中斷。二者缺一不可。 EA=1;//開總中斷
        ET0=1;//開定時器0中斷
        ET1=1;
        TR0=1;//啟動定時器0
        TR1=1;
        你這些語句,就允許了中斷響應,所以,當你的程序跑起來時,時鐘時間到了,CPU就轉入中斷服務程序了,執行完了再返回主程序。你可以在編譯器中用DEBUG查看執行過程的。如果你用匯編語言寫,就更清楚了,可以看清每一步的操作的。
        硬件部分是這樣:在每個機器周期的S5P2,單片機會來采樣,判斷是否有中斷申請。所以一旦時鐘計數溢出,就會轉入中斷服務程序。


        這個打個比方吧,你在上課,相當于主程序,這時時間到了,打鈴下課了,你就不讀書了,跑出去玩了。這其實是一樣的道理。你在上課,這和打鈴不相關,并不是你讓打鈴的,學校的時鐘在不停地走,到了時間自動打鈴,這不受你上課的影響的。但是如果你把耳朵堵上了(不允許響應中斷),就是把鈴打碎了你也不知道下課了,所以你就一直讀書。



        關鍵詞: 單片機中斷程

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 阿图什市| 原平市| 大洼县| 宿松县| 阜南县| 泾川县| 福安市| 高密市| 普安县| 隆德县| 呼玛县| 永嘉县| 竹山县| 金溪县| 秦皇岛市| 德化县| 平阳县| 元氏县| 昭苏县| 特克斯县| 邳州市| 韩城市| 玉山县| 安义县| 丁青县| 仁化县| 平谷区| 夏津县| 宁化县| 长武县| 河间市| 肥东县| 太康县| 普安县| 会宁县| 凌源市| 香河县| 介休市| 浑源县| 乌鲁木齐县| 灌云县|