新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 凌陽16位單片機之用時基中斷定時

        凌陽16位單片機之用時基中斷定時

        作者: 時間:2016-11-20 來源:網絡 收藏
        P_INT_Ctrl有讀寫兩個功能,寫可以控制中斷源允許和禁止中斷,讀可以判斷產生中斷請求的中斷源,當某單元中的某位為一時,說明該位代表的中斷允許開放,如果是0,就算有中斷申請,CPU也不會相應。

        當作為讀操作的時候,P_INT_Ctrl主要作為中斷標志,因每一位均代表一個中斷,當CPU相應某個中斷的時候,便將該中斷標識值=置為1

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

        清楚標志控制單元P_INT_Clear只具有寫的功能,當CPU響應中斷后,會將中斷標志為1;當進入中斷服務的時候,會將中斷標志位0,否則CPU將會總進行這個中斷;

        P_INT_Ctr_New與P_INT_Ctrl功能相似。

        首先在打開中斷的情況下,有多少Hz一秒鐘就進入多少次中斷,

        所以要定時0.5秒鐘的話,只需要有2Hz就可以了 ,沒進入一次就是0.5秒,所以就不用在計算了,

        如果要是用更高頻率的話也是可以的,比如說用16Hz的話,那就是8Hz為0.5秒,這樣就可以提前定義一個變量叫做n,這個n在中斷內,當n==8才真正的進入相應的中斷,

        #include "SPCE061A.H"
        unsigned int g_uioutput = 0x0001,n=0;
        void IRQ5(void)__attribute__((ISR));


        int main()
        {
        asm("INT OFF");
        *P_IOA_Dir = 0x00ff;
        *P_IOA_Attrib = 0x00ff;
        *P_IOA_Data = 0x0000;
        *P_INT_Ctrl = C_IRQ5_2Hz;
        asm("INT IRQ");
        while(1)
        *P_Watchdog_Clear = 0x0001;
        }

        void IRQ5(void)
        {
        if(*P_INT_Ctrl&C_IRQ5_2Hz)
        {
        if(++n == 4)//兩秒的時候回正真的進入一次中斷,n就作為一個標記

        n=0;//設置n為0;為了下一次重新開始
        *P_IOA_Data = g_uioutput;
        g_uioutput&=0x0000;
        }
        *P_INT_Clear = 0x0004;//清楚中斷標志位
        }
        else
        {
        *P_INT_Clear = 0x0008;//C_IRQ5_2Hz控制的有兩個頻率如果進入的4Hz的頻率的話
        }
        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 荔波县| 合作市| 罗城| 巴彦县| 额尔古纳市| 县级市| 上栗县| 建平县| 卫辉市| 华坪县| 晋州市| 泊头市| 抚远县| 宿州市| 永吉县| 赫章县| 吴川市| 台前县| 辽源市| 三都| 陆川县| 铜陵市| 舒兰市| 博湖县| 涟源市| 肇源县| 丹凤县| 平顶山市| 武邑县| 伊川县| 永宁县| 保德县| 虞城县| 绥江县| 安图县| 治县。| 旺苍县| 忻城县| 资中县| 新蔡县| 乐至县|