標(biāo)題:
關(guān)于zigbee的按鍵
[打印本頁]
作者:
1091822851
時(shí)間:
2024-4-24 21:33
標(biāo)題:
關(guān)于zigbee的按鍵
中斷服務(wù)函數(shù)與一般自定義函數(shù)不同,有特定的書寫格式:
<1> 在每一個(gè)中斷服務(wù)函數(shù)之前,都要加上一句起始語句:
#pragma vector = <中斷向量>
<中斷向量>表示接下來要寫的中斷服務(wù)函數(shù)是為那個(gè)中斷源服務(wù)的,該 語句有兩種寫法:
#pragma vector = 0x7B 或者 #pragma vector = P1INT_VECTOR
前者是中斷向量的入口地址,后者是頭文件“ioCC2530.h”中的宏定義。
<2> _ _interrupt關(guān)鍵字表示該函數(shù)是一個(gè)中斷服務(wù)函數(shù),<函數(shù)名稱>可以 自定義,函數(shù)體不能帶有參數(shù),也不能有返回值。
按照步驟走
1. 先配置按鍵的寄存器輸入配置 以按鍵P1_2為例
P1SEL &=~0x04;
P1DIR &= ~0x04;
P1INP &= ~0x04; //設(shè)置為上拉引腳
2.配置中斷寄存器 以先位中斷允許 然后端口中斷允許 最后總中斷允許的順序去配置
1.P1IEN |= 0x04; //位中斷允許
2. IEN2 |=0x10; //端口中斷允許
3. PICTL =0x00; //配置跳變沿方向 上升沿
4. EA=1; //總中斷標(biāo)志
5. P1IFG=0; //中斷標(biāo)志位清
下述是整體代碼 實(shí)現(xiàn)按鍵第一次按下 led1亮 第二次按下 led2亮 第三次按下全亮 第四次按下全滅的效果
#include<ioCC2530.h>
//led低電平是亮燈
#define led1(x) P1_0=x
#define led2(x) P1_1=x
volatile int cnt=0;
void delay_us(int n)
{
while(n--)
{
asm("nop");
}
}
void delay_ms(int n)
{
for(int i=0;i<n;i++)
{
delay_us(500);
}
}
void main()
{
//P1SEL &= ~0x03;
//P1DIR |= 0x03;
P1SEL &= ~0x07;
P1DIR |= 0x03;
P1DIR &= ~0x04;
P1INP &= ~0x04;
P1IEN |= 0x04;
//P1IE =1;
IEN2 |= 0x10;
PICTL |= 0x02;
P1IFG =0x00;
EA=1;
while(1)
{
}
}
#pragma vector =P1INT_VECTOR
__interrupt void P1_ISR(void)
{
if(P1IFG>0)
{
cnt++;
if(cnt%4==0)
{
led1(1);
led2(0);
}
if(cnt%4==1)
{
led1(0);
led2(1);
}
if(cnt%4==2)
{
led1(1);
led2(1);
}
if(cnt%4==3)
{
led1(0);
led2(0);
}
P1IFG=0;
P1IF=0;
}
}
復(fù)制代碼
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1