首页 > 代码库 > 「ZigBee模块」基础实验(3)外部中断
「ZigBee模块」基础实验(3)外部中断
1.实现功能
使用中断方式实现:
按键KEY1按下LED1依次亮灭
按键KEY2按下LED2依次亮灭
2.元件连接方式
P1_0连接LED1
P1_1连接LED2
P0_0连接KEY1
P0_1连接KEY2
3.中断相关寄存器
PXIEN | P0IEN | P1IEN | P2IEN |
地址 | 0xAB | 0x8D | 0xAC |
PX[7:0] 各个控制口中断使能 (0:中断禁止 1:中断使能) |
PICTL:
D0~D3设置各个端口的中断触发方式(0:上升沿触发 1:下降沿触发)
D7控制I/O引脚在输出模式下的驱动能力。选择输出驱动能力增强来补偿引脚DVDD的低I/O电压,确保在较低的电压下的驱动能力和较高电压下相同。(0:最小驱动能力增强 1:最大驱动能力增强。)
PICTL | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
地址0x8C | IO驱动能力 | 未使用 | P2_0-P2-4 | P1_4-P1_7 | P1_0-P1_3 | P0_0-p0_7 |
PXIFG | P0IFG | P1IFG | P2IFG |
地址 | 0x89 | 0x8A | 0x8B |
PX[7:0] 中断标志位,发生中断相应位置1 |
IEN1——中断使能1(0:中断禁止 1:中断使能)
IEN1 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
地址0x80 | 未用 | P0口 | 计数器4 | 计数器3 | 计数器2 | 计数器1 | DMA |
IEN2——中断使能2(0:中断禁止 1:中断使能)
IEN1 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
地址0x9A | 未用 | 看门狗 | P1口 | USART1 | USART0 | P2口 | PF通用 |
4.部分代码分析
外部中断初始化编程
P0IEN |= 0X03; //P0_0、P0_1 设置为中断方式PICTL |= 0X01; // P0口下降沿触发IEN1 |= 0X20; // 允许P0口中断;P0IFG = 0x00; // 初始化中断标志位EA = 1; //打开总中断
5.完整代码
#include <ioCC2530.h>#define uchar unsigned char#define uint unsigned int//端口定义#define KEY1 P0_0#define KEY2 P0_1#define LED1 P1_0#define LED2 P1_1//函数声明void delayms(uint ms); //延时函数void keyInit(); //按键初始化void ledInit(); //led初始化/*****************************延时函数*****************************/void delayms(uint ms){ uint i, j; for(i=ms; i>0; i--) for(j=578; j>0; j--);}/*****************************按键初始化*****************************/void keyInit(){ P0IEN |= 0X03; //P0_0、P0_1 设置为中断方式 PICTL |= 0X01; //P0口下降沿触发 IEN1 |= 0X20; //允许P0口中断; P0IFG = 0x00; //初始化中断标志位 P0SEL &= ~0x03; P0DIR &= ~0x03; P0INP &= ~0x03; EA = 1; //打开总中断}/*****************************led初始化*****************************/void ledInit(){ P1SEL &= ~0x03; P1DIR |= 0x03; P1INP &= ~0x03; LED1 = 0; LED2 = 0;}/*****************************主函数*****************************/void main(){ ledInit(); keyInit(); while(1);}/*****************************中断函数*****************************/#pragma vector = P0INT_VECTOR //格式:#pragma vector = 中断向量,__interrupt void P0_ISR(void) // 紧接着是中断处理程序{ delayms(10); if(KEY1 == 0) { while(!KEY1); LED1 = !LED1; } if(KEY2 == 0) { while(!KEY2); LED2 = !LED2; } P0IFG &= ~0x03; //清中断标志 P0IF = 0; //清中断标志}
「ZigBee模块」基础实验(3)外部中断
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。