新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 關于單片機中斷詳解

        關于單片機中斷詳解

        作者: 時間:2016-12-01 來源:網絡 收藏



        另外中斷的處理函數是這樣聲明的


        void abc() interrupt X using n
        {
        處理語句;
        }


        我們看到,只是普通的函數 加上了 interrupt X using Y 了而已,X 的取值是有規定的:


        如果是外部中斷0的中斷處理函數,則X為0 即void abc() interrupt 0 using n


        若是定時器0的中斷處理函數,則 X 為1


        若是外部中斷1的中斷處理函數,則 X 為2


        若是定時器1的中斷處理函數,則 X 為3


        若是串口中斷的中斷處理函數,則 X 為4

        n 是中斷號,取值范圍為 0 - 31




        關于中斷的學習,也到此告一段落了,當然還有一些問題沒解決.......

        Q1:為什么count==40的時候數碼管也不能閃爍???

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

        /*
        實現目的:
        讓LED燈以1000ms(即1s)產生流水燈效果,并用定時器0讓數碼管以500ms從0~F閃爍
        */
        #include
        #include
        #define uint unsigned int
        #define uchar unsigned char
        sbit d1=P2^1;
        uchar weixuan=0x00;//位選全開
        uchar code table[]={
        0x3f,0x06,0x5b,0x4f,
        0x66,0x6d,0x7d,0x07,
        0x7f,0x6f,0x77,0x7c,
        0x39,0x5e,0x79,0x71};//段選
        uchar temp,count,num;
        void delay(uint z)
        {
        uint x,y;
        for(x=z;x>0;x--)
        {
        for(y=0;y<113;y++)
        {
        }
        }
        }
        void main()
        {
        count=0;
        num=0;
        P1=weixuan;
        P0=table[num];
        temp=0xfe;
        P2=temp;
        TMOD=0x01;
        TH0=(65535-50000)/256;
        TL0=(65535-50000)%256;
        EA=1;
        ET0=1;
        TR0=1;
        while(1)
        {
        delay(1000);
        temp=_crol_(temp,1);
        P2=temp;
        /*
        if(count==10)
        {
        count=0;
        num++;
        if(num==16)
        {
        num=0;
        }
        P0=table[num];
        } */
        }
        }
        void time0() interrupt 1
        {
        TH0=(65535-50000)/256;
        TL0=(65535-50000)%256;
        count++;
        if(count==10)
        {
        count=0;
        num++;
        if(num==16)
        {
        num=0;
        }
        P0=table[num];
        }
        }


        /*
        PS:我們不能把數碼管500ms閃爍時間是否到達的語句寫在主程序中,
        若寫在主程序中,有可能發生如下錯誤情況:當主程序在LED燈顯示語句當中時,
        此時恰好定時器0進入中斷并且count剛好加到了10,當定時器0中斷再次進入時,
        主程序仍未退出LED流水燈的顯示程序,那么此時count的值便變成了11,
        這樣的話,count==10這個點永遠檢測不到,因此數碼管閃爍失去了控制


        在調試代碼當中發現delay(uint z)函數與中斷是同時執行的。。。
        */


        上一頁 1 2 下一頁

        關鍵詞: 單片機中斷詳

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 肥城市| 贞丰县| 沁源县| 临海市| 维西| 南阳市| 崇信县| 汝南县| 邵阳县| 明星| 昌都县| 都安| 方正县| 崇文区| 三江| 柯坪县| 堆龙德庆县| 进贤县| 卢龙县| 宕昌县| 河北区| 保靖县| 沂水县| 车险| 屏山县| 依安县| 恩平市| 共和县| 崇仁县| 岚皋县| 扶余县| 章丘市| 兴宁市| 新和县| 繁峙县| 克什克腾旗| 通山县| 始兴县| 内乡县| 肇庆市| 南澳县|