車乾的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
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章