MSP 430里面 P1口和P2口有中斷功能。我們的項(xiàng)目里面,P1口的1-7管腳做鍵盤(pán),0腳做風(fēng)速傳感器的輸入。P2口的0-4做鍵盤(pán),5-7做其他用。
本文引用地址:http://butianyuan.cn/article/201611/321233.htm
//鍵盤(pán)引腳配置
P1DIR=0x00; // P1 口為輸入(0:風(fēng)速傳感器輸入,1-7中斷信號(hào)輸入)
P2DIR&=~(BIT0+BIT1+BIT2+BIT3+BIT4); //把P2.0-P2.4設(shè)為輸入
//下降沿觸發(fā)是指按下的時(shí)候進(jìn)入中斷,上升沿觸發(fā)是在放開(kāi)按鍵的時(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腳的中斷我們不打開(kāi),只開(kāi)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他用,為了不影響我們的按鍵的判斷,所以這些腳的中斷我們不打開(kāi),只開(kāi)P2.0-P2.4,所以就是P2IE的bit置位是:0001 1111 =P1IE)
I/O口的每一bit都可以單獨(dú)設(shè)置,為了不影響其他管腳的工作,我們?cè)O(shè)定我們按鍵所需管腳的時(shí)候,都是使用位操作來(lái)設(shè)定相應(yīng)的位,無(wú)關(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ù)可以寫(xiě)成:
#pragma vector=PORT1_VECTOR
__interrupt void PORT1_ISR (void)
{
unsigned temp1; //局部變量:? //temp 暫時(shí)存放端口的中斷標(biāo)志寄存器中的值
//temp 暫時(shí)存放端口的中斷標(biāo)志寄存器中的值
delay(250000); // 消除抖動(dòng)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消除抖動(dòng)延時(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;
}
評(píng)論