在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 按鍵程序 PORT中斷程序

            按鍵程序 PORT中斷程序

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

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

            本文引用地址:http://www.biyoush.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ā)是指按下的時候進入中斷,上升沿觸發(fā)是在放開按鍵的時候進入中斷
            P1IES|=BIT1+BIT2+BIT3+BIT4+BIT5+BIT6+BIT7;//設(shè)置P1口中斷邊沿選擇寄存器,置1為下跳沿,置0為

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

            //(因為P1.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為禁止中斷

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

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

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


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

            #pragma vector=PORT1_VECTOR
            __interrupt void PORT1_ISR (void)
            {
            unsigned temp1; //局部變量:? //temp 暫時存放端口的中斷標(biāo)志寄存器中的值
            //temp 暫時存放端口的中斷標(biāo)志寄存器中的值
            delay(250000); // 消除抖動20ms延時(一般是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消除抖動延時備注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)閉