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

          新聞中心

          C51中斷之感受

          作者: 時(shí)間:2016-11-25 來(lái)源:網(wǎng)絡(luò) 收藏

          中斷給及時(shí)處理突發(fā)事件帶來(lái)了方便.但也帶來(lái)的風(fēng)險(xiǎn)!設(shè)置好中斷,寫(xiě)好中斷程序是不是就萬(wàn)事大吉了那?那肯定不是.

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

          如果中斷程序是一個(gè)獨(dú)立程序來(lái)處理一個(gè)獨(dú)立事件,不和任何程序傳遞數(shù)據(jù)和關(guān)聯(lián).這樣的中斷帶來(lái)的麻煩相對(duì)較少.而且也容易發(fā)現(xiàn).比如響應(yīng)中斷工作與延時(shí)會(huì)讓延時(shí)函數(shù)變的不準(zhǔn)確等問(wèn)題.

          如果中斷程序它和其它函數(shù)之間有數(shù)據(jù)傳遞和關(guān)聯(lián).那就要特別小心了.比如中斷程序中要改變一個(gè)標(biāo)志位的狀態(tài).另外一個(gè)函數(shù)里要判斷這個(gè)標(biāo)志位,根據(jù)標(biāo)志位的狀態(tài)做一些處理.而這個(gè)判斷表達(dá)式又比較長(zhǎng),要由多個(gè)標(biāo)志位參與,那么這個(gè)判斷標(biāo)志位的邏輯語(yǔ)句就要盡量精簡(jiǎn).而且要考慮好邏輯優(yōu)先級(jí)!中斷事件隨時(shí)發(fā)生,那也就以為可以隨時(shí)打斷正在執(zhí)行的任務(wù).當(dāng)然也可以打斷正在執(zhí)行的判斷邏輯語(yǔ)句.如果整個(gè)邏輯語(yǔ)句比較長(zhǎng),當(dāng)執(zhí)行了一半被中斷打斷,而中斷程序里又要改變這個(gè)邏輯語(yǔ)句中沒(méi)有執(zhí)行的標(biāo)志位,那么這個(gè)邏輯語(yǔ)句就失去了應(yīng)有的作用,從而出錯(cuò).所以在寫(xiě)程序時(shí)就要考慮到任何一個(gè)地方被中斷打斷后會(huì)發(fā)生什么樣的情況!否則就會(huì)使程序存在隱患.這樣的隱患很不好發(fā)現(xiàn).

          很多文章都提出中斷函數(shù)要盡量短小.能在主程序里處理的就不要放在中斷的程序里.這觀點(diǎn)沒(méi)有錯(cuò),但要靈活掌握。如果不是太復(fù)雜的程序那就盡量讓中斷程序來(lái)完成.這樣可以少用標(biāo)志位和邏輯語(yǔ)句.程序反而更簡(jiǎn)潔.而且比較穩(wěn)定.

          程序中下降沿觸發(fā)中斷使用的很多,在使用中如不加抗干擾措施,那么中斷很容易被干擾觸發(fā)!從而出現(xiàn)錯(cuò)誤!在中斷程序起始處加個(gè)延時(shí),延時(shí)后判斷一是不是仍是低電平,是低電平運(yùn)行下面的程序,否則就退出中斷處理程序.這樣做的優(yōu)點(diǎn)就是不增加任何硬件成本低.但會(huì)降低程序的效率!在INT0(INT1)腳對(duì)正電源接一小瓷介電容可顯著的提高抗干擾能力.有了電容就不用在中斷程序中加延時(shí)了!這兩種方法自我感覺(jué)外接電容的方法更佳.



          關(guān)鍵詞: C51中

          評(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); })();