一.前言
通过上次的学习,我们学习了如何用按键控制led,但是在实际应用中,这种查询方式占用了cpu的时间,如果通过中断控制就可以解决这个问题,我们今天就来学习按键控制的中断方式。
二.原理分析
传统的51单片机如果要使用中断,也要对相应的寄存器进行控制,cc2530芯片也不例外,而且相对复杂。需要配置多个中断寄存器,下面来一一介绍。
这个寄存器是来控制端口0中断使能的,要开启中断,应设为1.
这个是配置各种中断使能的,我们只需要配置P0IE.
这个是配置中断触发方式的,根据上次的按键原理图,我们应该选择低下降沿触发模式。
中断状态标志位,当中断没有发生或者结束时,应将标志位置0.
三.程序代码
#include #define uint unsigned int #define uchar unsigned char #define LED1 P1_0 //LED1为P1_0端口控制 #define LED2 P1_1 //LED2为P1_1端口控制 #define LED3 P1_4 //LED3为P1_4端口控制 //函数声明 void Delayms(uint); //延时函数 void InitLed(void); //LED_IO初始化 void KeyInit(void); //KEY_IO初始化 /************** 函 数 名 : Delayms 功能描述 : 毫秒延时 输入参数 : xms:延时时间,如 i=xms 即延时i毫秒 输出参数 : none 返 回 值 : none **/ void Delayms(uint xms) { uint i,j; for(i=xms;i>0;i--) for(j=587;j>0;j--); } /******************* 函 数 名 : InitLed 功能描述 : LED_IO初始化 输入参数 : none 输出参数 : none 返 回 值 : none *********************************/ void InitLed(void) { P1DIR |= 0xff; //P1端口定义为输出 LED1 = 1; //LED1灯熄灭 LED2 = 1; //LED2灯熄灭 LED3 = 1; //LED3灯熄灭 } /********************* 函 数 名 : InitKey 功能描述 : KEY_IO初始化(中断方式配置) 输入参数 : none 输出参数 : none 返 回 值 : none ******************/ void InitKey(void) { P0IEN |= 0x10; //设置P0_4为中断方式 IEN1 |= 0x20; //允许P0口中断 PICTL |= 0x01; //下降沿触发 P0IFG = 0x00; //清中断标志位 EA = 1; //开总中断 } /************** 函 数 名 : P0_ISR 功能描述 : 中断处理函数 输入参数 : none 输出参数 : none 返 回 值 : none ***********/ #pragma vector = P0INT_VECTOR //格式:#pragma vector = 中断向量 __interrupt void P0_ISR(void) //接着是中断处理程序(函数名可以任意取) { LED1=~LED1; //改变LED状态 LED2=~LED2; LED3=~LED3; P0IFG = 0; //清中断标志 P0IF = 0; } /******************* 函 数 名 : main 功能描述 : KEY测试(通用IO中断的使用) 输入参数 : NONE 输出参数 : NONE 返 回 值 : NONE ************/ void main(void) { InitLed(); //调用初始化函数 InitKey(); while(1); } 四.总结 led的控制函数和之前一样,大家要注意中断函数的定义,这是一种定义中断的格式,还有一定要使POIF=0,用来清除标志位,这样中断才能发生,还有大家学会用模块化的思想去写程序。
上一篇:zigbee学习之路(三):按键的控制
下一篇:zigbee学习之路(五):定时器1(查询方式)
推荐阅读最新更新时间:2024-11-13 06:08
设计资源 培训 开发板 精华推荐
- 使用 Analog Devices 的 LTC2256-14 的参考设计
- NCN5150QFNGEVB:有线 M-BUS 从收发器,6 个单元负载,评估板
- IS31BL3230 8 通道 PWM 亮度控制恒流 LED 驱动器的典型应用
- LTC4410,使用墙上适配器为双电池优先充电
- AD8548ARZ同相运算放大器配置的典型应用电路
- LTC1064-1,用于抗混叠应用的开关电容器低通
- EspoTek Labrador:一种小型、便携式、USB 连接的电子板载实验室,包括示波器、波形发生器、电源、逻辑分析仪和万用表
- LTC3418 的典型应用 - 8A、4MHz、单片同步降压型稳压器
- DN06074/D,65W 离线适配器设计说明
- LTC4162EUFD-FADM 9V 至 35V 2 节 3.2A 充电器的典型应用,具有 PowerPath 和 2A 输入限制