03 单片机外部中断

中断初始化:
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;
}



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值