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

          新聞中心

          按鍵程序 PORT中斷程序

          作者: 時(shí)間:2016-11-25 來源:網(wǎng)絡(luò) 收藏
          MSP 430里面 P1口和P2口有中斷功能。

          我們的項(xiàng)目里面,P1口的1-7管腳做鍵盤,0腳做風(fēng)速傳感器的輸入。P2口的0-4做鍵盤,5-7做其他用。

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


          //鍵盤引腳配置
          P1DIR=0x00; // P1 口為輸入(0:風(fēng)速傳感器輸入,1-7中斷信號輸入)

          P2DIR&=~(BIT0+BIT1+BIT2+BIT3+BIT4); //把P2.0-P2.4設(shè)為輸入
          //下降沿觸發(fā)是指按下的時(shí)候進(jìn)入中斷,上升沿觸發(fā)是在放開按鍵的時(shí)候進(jìn)入中斷
          P1IES|=BIT1+BIT2+BIT3+BIT4+BIT5+BIT6+BIT7;//設(shè)置P1口中斷邊沿選擇寄存器,置1為下跳沿,置0為

          //上跳沿
          P1IE=0xFE;//設(shè)置P1中斷使能寄存器,置1為允許中斷,置0為禁止中斷

          //(因?yàn)镻1.0他用,為了不影響我們的按鍵的判斷,所以P1.0腳的中斷我們不打開,只開P1.1-P1.7,所以

          //就是P1IE的bit置位是:1111 1110 =P1IE)
          P2DIR=0x00;//設(shè)置P2口方向寄存器,置0為輸入,置1為輸出
          P2IES|=BIT0+BIT1+BIT2+BIT3+BIT4;//設(shè)置P2口中斷邊沿選擇寄存器,置1為下跳沿,置0為上跳沿
          P2IE=0x1F; //設(shè)置P2中斷使能寄存器,置1為允許中斷,置0為禁止中斷

          (因?yàn)镻2.5-P2.7他用,為了不影響我們的按鍵的判斷,所以這些腳的中斷我們不打開,只開P2.0-P2.4,所以就是P2IE的bit置位是:0001 1111 =P1IE)

          I/O口的每一bit都可以單獨(dú)設(shè)置,為了不影響其他管腳的工作,我們設(shè)定我們按鍵所需管腳的時(shí)候,都是使用位操作來設(shè)定相應(yīng)的位,無關(guān)位保存原樣,如:P2IES|=BIT0+BIT1+BIT2+BIT3+BIT4;只選擇了P2.0-P2.4為下降沿觸發(fā),P2.5-P2.7保持原設(shè)置,否則容易相互干擾出錯(cuò)。

          在頭文件中我們可以找到P1口的中斷向量集是:PORT1_VECTOR
          P2口的中斷向量集是:PORT2_VECTOR


          所以中斷函數(shù)可以寫成:

          #pragma vector=PORT1_VECTOR
          __interrupt void PORT1_ISR (void)
          {
          unsigned temp1; //局部變量:? //temp 暫時(shí)存放端口的中斷標(biāo)志寄存器中的值
          //temp 暫時(shí)存放端口的中斷標(biāo)志寄存器中的值
          delay(250000); // 消除抖動20ms延時(shí)(一般是10ms-20ms,看后面?zhèn)渥?)
          if ((P1IN&0xFE)!=0xFE) //如果有鍵按下

          {
          temp1=P1IFG; //temp1 記錄中斷標(biāo)志
          switch(temp1)
          {
          case 1:
          draw_circle(400,300,cyclenum*15,0,0xec);
          break;
          case 2:
          draw_circle(600,300,cyclenum*15,0,0xec);
          break;
          case 4:
          break;
          case 8:
          break;
          case 16:
          break;
          case 32:
          break;
          case 64:
          break;
          case 128:
          break;
          //default: keyvaluep1=0;break;
          }
          }
          P1IFG=0X00; //清除中斷標(biāo)志,返回主程序
          }
          //以下是port2的中斷服務(wù)程序
          #pragma vector=PORT2_VECTOR
          __interrupt void PORT2_ISR (void)
          {
          unsigned char temp1;
          __delay_cycles(250000);// 20MS消除抖動延時(shí)備注1:
          if ((P2IN&0x1F)!=0x1F) //僅使用了0、1、2、3、4腳所以與0x1F

          {
          temp1=P2IFG;
          switch(temp1)
          { case 1:
          程序1;

          break;
          case 2:
          程序2;

          break;
          case 4:
          程序3;
          break;
          case 8:
          break;
          case 16:
          break;
          case 32:
          break;
          case 64:
          break;
          case 128:
          break;
          //default: keyvaluep2=0;break;
          }
          }
          P2IFG=0X00;
          }


          上一頁 1 2 下一頁

          關(guān)鍵詞: 按鍵程序PORT中斷程

          評論


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