在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            PIC中斷編寫

            作者: 時(shí)間:2016-11-13 來源:網(wǎng)絡(luò) 收藏
            中斷服務(wù)程序: void interrupt ISR(void);

            其中的函數(shù)名“ISR”可以改成任意合法的字母或數(shù)字組合。

            本文引用地址:http://www.biyoush.com/article/201611/316101.htm

            中斷函數(shù)可以被放置在原程序的任意位置。PICC 在最后進(jìn)行代碼連接時(shí)會(huì)自動(dòng)將其定位到0x0004 中斷入口處,實(shí)現(xiàn)中斷服務(wù)響應(yīng)。編譯器也會(huì)實(shí)現(xiàn)中斷函數(shù)的返回指令“retfie”。

            示例:

            void interrupt ISR(void) { //中斷服務(wù)程序

            if (T0IE && T0IF){//判TMR0 中斷

            T0IF = 0; //清除TMR0 中斷標(biāo)志 //在此加入TMR0 中斷服務(wù)

            }

            if (TMR1IE && TMR1IF){ //判TMR1 中斷T

            MR1IF = 0; //清除TMR1 中斷標(biāo)志

            //在此加入TMR1 中斷服務(wù)

            }

            } //中斷結(jié)束并返回

            PICC 會(huì)自動(dòng)加入代碼實(shí)現(xiàn)中斷現(xiàn)場的保護(hù),并在中斷結(jié)束時(shí)自動(dòng)恢復(fù)現(xiàn)場,所以編程員無需象編寫匯編程序那樣加入中斷現(xiàn)場保護(hù)和恢復(fù)的額外指令語句。但如果在中斷服務(wù)程序中需要修改某些全局變量時(shí),是否需要保護(hù)這些變量的初值將由編程員自己決定和實(shí)施。

            用C 語言編寫中斷服務(wù)程序必須遵循高效的原則:

            · 代碼盡量簡短,中斷服務(wù)強(qiáng)調(diào)的是一個(gè)“快”字。

            · 避免在中斷內(nèi)使用函數(shù)調(diào)用。雖然PICC 允許在中斷里調(diào)用其它函數(shù),但為了解決遞歸調(diào)用的問題,此函數(shù)必須為中斷服務(wù)獨(dú)家專用。既如此,不妨把原本要寫在其它函數(shù)內(nèi)的代碼直接寫在中斷服務(wù)程序中。

            · 避免在中斷內(nèi)進(jìn)行數(shù)學(xué)運(yùn)算。數(shù)學(xué)運(yùn)算將很有可能用到庫函數(shù)和許多中間變量,就算不出現(xiàn)遞歸調(diào)用的問題,光在中斷入口和出口處為了保護(hù)和恢復(fù)這些中間臨時(shí)變量就需要大量的開銷,嚴(yán)重影響中斷服務(wù)的效率。

            中檔系列PIC 單片機(jī)的中斷入口只有一個(gè),因此整個(gè)程序中只能有一個(gè)中斷服務(wù)函數(shù)。(PIC18有兩個(gè)中斷向量,PIC16只有一個(gè))

            《MPLAB? C30C 編譯器用戶指南》

            7.3.1 編寫中斷服務(wù)程序的要領(lǐng)

            ? 不帶參數(shù)并以void 返回值類型聲明ISR (強(qiáng)制)
            ? 不要通過一般程序調(diào)用ISR (強(qiáng)制)
            ? 不要用ISR 調(diào)用其他函數(shù)(建議)
            MPLAB C30 的ISR 和任何其他C 函數(shù)一樣,可以有局部變量,可以訪問全局變量。但是, ISR 需要聲明為沒有參數(shù),沒有返回值。這是必須的,因?yàn)镮SR 作為對硬件中斷或陷阱的響應(yīng),對它的調(diào)用與一般C 程序異步(即ISR 不是按通常的方式調(diào)用的,因此不能有參數(shù)和返回值)。
            ISR 只能通過硬件中斷或陷阱調(diào)用,不能通過其他C 函數(shù)調(diào)用。ISR 使用中斷返回(RETFIE)指令退出函數(shù),而不是使用一般的RETURN 指令。不恢復(fù)現(xiàn)場使用RETFIE 指令退出中斷服務(wù)程序會(huì)破壞處理器資源,如status 寄存器的值。最后,由于中斷響應(yīng)時(shí)間的原因,建議不要使用ISR 調(diào)用其他函數(shù)。

            7.6 中斷響應(yīng)時(shí)間


            有兩個(gè)因素影響中斷源發(fā)生到執(zhí)行ISR 代碼第一條指令之間的周期數(shù)。這兩個(gè)因素是:
            ? 處理器處理中斷時(shí)間 — 處理器識(shí)別中斷并跳轉(zhuǎn)到中斷向量第一個(gè)地址的時(shí)間。這個(gè)值與具體器件和所使用中斷源有關(guān)。
            ? ISR 代碼 — MPLAB C30 在ISR 中保存它使用的寄存器,這包括工作寄存器和RCOUNT 特殊功能寄存器。而且,如果ISR 調(diào)用一個(gè)普通的函數(shù),編譯器要保存所有的工作寄存器和RCOUNT,即使在ISR 中沒有顯式使用這些寄存器。必須要保存這些寄存器,因?yàn)橐话銇碚f,編譯器不知道被調(diào)用函數(shù)使用了哪些資源。



            關(guān)鍵詞: PIC中斷編

            評(píng)論


            技術(shù)專區(qū)

            關(guān)閉