N76E003 管脚中断【转】

转自:https://blog.csdn.net/u014798590/article/details/85963867

  N76E003单片机的每个管脚都可用于触发中断,最多可配置八个管脚,四种触发方式(上升沿,下降沿,高电平,低电平),并且管脚中断可以使MCU从空闲模式或掉电模式唤醒。

  

            set_EA;    //开启总中断
            set_EPI;    //开启管脚中断(位于拓展中断中)

  

 

   由上图可知,管脚中断的中断号为7

  

   

    clr_PIPS1;
    set_PIPS0;//选择P1.1为输入源
    set_PIT1;//P1.1位于通道1;set为边沿触发/clr为电平触发
/*或者你可以直接操作 PICON 寄存器*/

  

set_PIPEN1;//设定为上升沿或者高电平触发    
//    set_PINEN1;//设定下降沿或低电平触发

  或者使用官方宏定义的方式进行中断触发配置(需要将PIT设置屏蔽)

//Enable_BIT1_HighLevel_Trig;    //高电平
//Enable_BIT1_FallEdge_Trig;    //下降沿        
//Enable_BIT1_RasingEdge_Trig;//上升沿
//Enable_BIT1_LowLevel_Trig;    //低电平

  到此,管脚中断的寄存器配置就基本完成了,PIF为中断标志位,我们选择的P1.1,使用PIF1检测

完整代码

#include "N76E003.h"
#include "SFR_Macro.h"
#include "Function_define.h"
#include "Common.h"
#include "Delay.h"
#include <intrins.h>

#define uchar unsigned char
#define uint  unsigned int


sbit LED =P0^4;


void delay1(int ms)
{
 unsigned char y;
  while(ms--)
 {
  for(y = 0; y<250; y++)
  {
   _nop_();
   _nop_();
   _nop_();
   _nop_();
  }
 }
}


void main (void) 
{
            set_EA;    //开启总中断
            set_EPI;    //开启管脚中断(位于拓展中断中)
             Set_All_GPIO_Quasi_Mode;    //所有引脚配置为双向模式
            P11_Input_Mode;            //设置为输入模式
    
            clr_PIPS1;
            set_PIPS0;//选择P1.1为中断输入源
            
//        set_PIT1;//通道1;set为边沿触发/clr为电平触发
//        set_PIPEN1;//设定为上升沿或者高电平触发    
//    set_PINEN1;//设定下降沿或低电平触发

Enable_BIT1_HighLevel_Trig;    //高电平
//Enable_BIT1_FallEdge_Trig;    //下降沿        
//Enable_BIT1_RasingEdge_Trig;//上升沿
//Enable_BIT1_LowLevel_Trig;    //低电平
        LED=0;//初始化LED端口
        Timer0_Delay1ms(200);

    while(1)
    {
    }
}

//-------管脚中断中断服务程序---------
void PinInterrupt (void) interrupt 7
{
        if(PIF==0x02)//P11位于一通道
        {
            PIF=0;//清除外部中断标志
            LED=!LED;
        }
}

补充一个直接操作寄存方式:

        /*初始化设置外部中断 P05 */
                Set_All_GPIO_Quasi_Mode;
        PICON = 0x20;
        PIPEN=0x20; 
        set_EA;    //开启总中断
        set_EPI;    //开启管脚中断(位于拓展中断中)
            
/**************************************************/
//-------管脚中断中断服务程序---------
void PinInterrupt (void) interrupt 7
{
    PIF=0;//清除外部中断标志
    if(a==0){
            Run_LED=1;
            a=1;
    }        
    else{
            Run_LED=0;
            a=0;
    }        
}

 

posted @ 2022-09-28 16:50  白菜没我白  阅读(706)  评论(0编辑  收藏  举报