车干的ZigBee学习笔记二,IO口的配置与外部中断

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

发布了13 篇原创文章 · 获赞 3 · 访问量 1861

猜你喜欢

转载自blog.csdn.net/weixin_44127810/article/details/104107988
今日推荐