中断初始化:
1、 CPU中断开关打开
EA=1;(IEN0)
把PICTL对于的上升沿还是下降沿触发设为想要的
#pragma vector=P2INT_VECTOR
__interrupt void f1()
{
P0IFG=0; //这个寄存器有8位分别是P0这一组里面8个脚的标志,如果某个脚的中断产生
那么它就会变成1,所以我们出中断函数的时候必须要把他清零
P0IF=0; P1IF P2IF
1、 CPU中断开关打开
EA=1;(IEN0)
2、 自己所在的组开关打开
P0组的中断开关在IEN1的第5位,或者P0IE
P1组的中断开关在IEN2的第4位
P2组的中断开关在IEN2的第1位
3、 自己的那个脚的开关也要打开
4、 P0IEN 8 例如:如果我们要把P0_2这个脚的开关打开那么我们就必须要把P0INE的第2位在程序中设为1
5、 P1IEN 8
6、 P2IEN 8
7、 配置到底是上升沿还是下降沿产生中断
把PICTL对于的上升沿还是下降沿触发设为想要的
#pragma vector=P2INT_VECTOR
__interrupt void f1()
{
P0IFG=0; //这个寄存器有8位分别是P0这一组里面8个脚的标志,如果某个脚的中断产生
那么它就会变成1,所以我们出中断函数的时候必须要把他清零
P0IF=0; P1IF P2IF
}
按键模块:
头文件:
#ifndef SD_KEY_H
#define SD_KEY_H
void KeysIntCfg();
#endif
实现文件:
#include<iocc2530.h>
void delay()
{
int i,j;
for(i=0;i<1000;i++)
for(j=0;j<30;j++);
}
void KeysIntCfg()
{//Key3 Key4 Key5
P1SEL &=~0X02;
P1DIR &=~0X02;
IEN2|=0x10;//开P1IE组中断
P1IEN|=0x02;//开Key3组内中断
PICTL|=0x02;//设置P1_1为下降沿
P2SEL &=~0X01;
P2DIR &=~0X01;
IEN2|=0x02;
P2IEN|=0x01;
PICTL|=0x08;//设置P2_0为下降沿
P0SEL &=~0X20;
P0DIR &=~0X20;
P0IE=1;//或者写成 IEN1|=0x20
P0IEN|=0x20;
PICTL|=0x01;//设置P0_5为下降沿
EA=1; //开总中断
}
#pragma vector=P1INT_VECTOR
__interrupt void Key3_ISR() //P1_1
{
delay();
if(P1IFG & 0X02)
{
P1DIR |=0X01;
P1_0 ^=1;
}
P1IFG =0;
P1IF=0;
}
#pragma vector=P2INT_VECTOR
__interrupt void Key4_ISR()//P2_0
{
delay();
if(P2IFG & 0X01)
{
P0DIR |=0x02;
P0_1 ^=1;
}
P2IFG =0;
P2IF=0;
}
#pragma vector=P0INT_VECTOR
__interrupt void Key5_ISR()//P0_5
{
delay();
if(P0IFG & 0X20)
{
P0SEL &=~0x10;
P0DIR |=0X10;
P0_4 ^=1;
}
P0IFG =0;
P0IF=0;
}