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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > pic16f877a的電平變化中斷(interrupt on change)使用誤區(qū)

          pic16f877a的電平變化中斷(interrupt on change)使用誤區(qū)

          作者: 時(shí)間:2016-12-03 來(lái)源:網(wǎng)絡(luò) 收藏
          在PORTB的RB4:RB7是電平變化中斷interrupt on change),要使用它,將它們引腳對(duì)應(yīng)于TRISB的位設(shè)定為輸入是必須的,然后配置中斷。

          工作原理:RB4:RB7是電平變化中斷的引腳的輸入狀態(tài)和上一次讀取PORTB的鎖存器的值進(jìn)行比較,當(dāng)兩組數(shù)據(jù)相異時(shí),發(fā)生中斷同,當(dāng)這四個(gè)引腳的一部分發(fā)生電平變化時(shí),將會(huì)最后取或,只要有一個(gè)引腳的輸入狀態(tài)發(fā)生變化,就會(huì)發(fā)生中斷改變。

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

          注意:在進(jìn)入中斷服務(wù)子程序時(shí),一定要讀取或?qū)懭隤ORTB鎖存器的值,這樣才會(huì)結(jié)束兩組數(shù)據(jù)的比較,然后再去清除中斷標(biāo)志位。如果沒(méi)有讀取PORTB的值,兩組數(shù)據(jù)的比較一直存在,先清除中斷標(biāo)志(RBIF)是沒(méi)有用的,RBIF也會(huì)一直被設(shè)定。如下面的例子:

          /*這是一個(gè)用INT中斷和電平變化中斷計(jì)光電編碼器(碼盤)的讀數(shù)*/

          void
          interrupt on_change()
          {
          if(INTF)
          {
          f_r++;
          INTF=0;
          }
          if(RBIF&&RB4) //高電平計(jì)數(shù)
          {
          RB4=~RB4;//先讀取或?qū)懭隤ORTB鎖存器的值
          f_l++;
          RBIF=0;//后清除中斷標(biāo)志(RBIF)
          }
          else {RB4=~RB4; RBIF=0;}//低電平時(shí)

          }

          下面的程序就是我們?cè)谠囼?yàn)中一直困擾的問(wèn)題,就是出不了中斷。

          錯(cuò)誤用法,沒(méi)有讀取鎖存器的值

          void
          interrupt on_change()
          {
          if(INTF)
          {
          f_r++;
          INTF=0;
          }
          if(RBIF&&RB4)
          {
          f_l++;
          RBIF=0;//
          }
          else {RBIF=0;}

          }



          評(píng)論


          技術(shù)專區(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); })();