一、ZigBee的IO口配置
1、讓P1_0處於普通IO模式,P1SEL的第0位爲 0
IO口功能寄存器 P0SEL P1SEL P2SEL
2、讓P1_0處於輸入狀態,非輸入狀態即讓P1DIR的第0位爲1
IO口狀態寄存器 輸入/輸出由 P0DIR P1DIR P2DIR
3、最後加上P1_0 = 1
寄存器復位默認都是0
4、例程
#include <iocc2530.h>
Void main()
{
P1SEL &= 0XFE; //1111 1110
P1DIR &= 0X01; //0000 0001
P1_0 =1 ; 配置P1_0輸出1,點亮LED燈
While(1);讓這個程序進入循環
}
5、配置P0_6爲上拉
#include <iocc2530.h>
Void main()
{
P0SEL &= 0XBF; //1011 1111
P0INP &= 0XBF; //使P0_6處於上下拉模式
P2INP &= 0XDF; //1101 1111 讓P0組處於上拉模式
While(1);
{
If(1 == P0_6)
{
P0_4=0;
}
Else
{
P0_4 =1;
}
}
}
二、ZigBee外部中斷
1、外部中斷配置
(1)初始化IO口工作在普通IO上拉輸入狀態
(2)首先開IO口組中斷
(3)開組內對應的具體某IO口中斷
(4)上升沿還是下降沿觸發
(5)開CPU總中斷EA =1;
2、寄存器圖
3、例程
```c
#include <iocc2530.h>
void main()
{
P0SEL &= 0XDF; //1101 1111
P0DIR &= 0XDF;
P0INP &= 0XDF;
P2INP &= 0XDF;
EA =1;
P0IE =1;
P0IEN |= 0X20;
PICTL |= 0X01;
While(1);
}
#pragma vector =P0INT_VECTOR
__interrupt void fsdfas()
{
if(P0IFG & 0X20) //0010 0000 如果P0_5發生了中斷,P0IFG會變成1》》進入if語句
{
//P0組的第五位引發了外部中斷
Delay(); //消抖延時
if(0 == P0_5)
{
//說明確實是連接在P0_5的按鈕觸發了外部中斷
P1_0^=1; //異或操作
}
}
P0IFG = 0;
P0IF = 0;
這兩條在中斷出去的時候要清0,這次我們配的P0組所以,爲P0IFG,P0IF
}