一、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
}