<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          PIC 中斷 服務(wù)程序

          作者: 時(shí)間:2016-11-23 來(lái)源:網(wǎng)絡(luò) 收藏
          中斷服務(wù)程序有一個(gè)特殊的定義方法: void interrupt ISR(void)其中的函數(shù)名“ISR”可以改成任意合法的字母或數(shù)字組合,但其入口參數(shù)和返回參數(shù)類(lèi)型必須是“void”型,亦即沒(méi)有入口參數(shù)和返回參數(shù),且中間必須有一個(gè)關(guān)鍵詞“interrupt”中斷函數(shù)可以被放置在原程序的任意位置。因?yàn)橐延嘘P(guān)鍵詞“interrupt”聲明,PICC 在最后進(jìn)行代碼連接時(shí)會(huì)自動(dòng)將其定位到0x0004 中斷入口處,實(shí)現(xiàn)中斷服務(wù)響應(yīng)。編譯器也會(huì)實(shí)現(xiàn)中斷函數(shù)的返回指令“retfie”。

          一個(gè)簡(jiǎn)單的中斷服務(wù)示范函數(shù)如下:

          本文引用地址:http://www.ex-cimer.com/article/201611/320363.htm

          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)場(chǎng)的保護(hù),并在中斷結(jié)束時(shí)自動(dòng)恢復(fù)現(xiàn)場(chǎng),所以編程員無(wú)需象編寫(xiě)匯編程序那樣加入中斷現(xiàn)場(chǎng)保護(hù)和恢復(fù)的額外指令語(yǔ)句。但如果在中斷服務(wù)程序中需要修改某些全局變量時(shí),是否需要保護(hù)這些變量的初值將由編程員自己決定和實(shí)施。用C 語(yǔ)言編寫(xiě)中斷服務(wù)程序必須遵循高效的原則:

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

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

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

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



          關(guān)鍵詞: PIC中斷服務(wù)程

          評(píng)論


          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();