main.c

来自「《Proteus在MCS-51&ARM7系统中的应用百例》书中附带原程序代码」· C语言 代码 · 共 52 行

C
52
字号
/*******************************************************************************
*File: Main.c
*功能: 系统进入掉电状态,并允许外部中断1唤醒
*******************************************************************************/
#include "config.h"

#define   LED1CON     0x00000400           /*P0.10口为LED1控制端*/

/*******************************************************************************
*名称: IRQ_EINT1()
*功能: 外部中断1中断处理程序
*******************************************************************************/
void __irq IRQ_EINT1(void)
{ while((EXTINT&0x02)!=0)               //等待外部中断信号恢复为高电平
  {EXTINT=0x02;                         //清除EINT1中断标志
  }
  VICVectAddr=0x00;                     //中断处理结束
}

/*******************************************************************************
*名称:InitEint1()
*功能: 初始化外部中断1,使能IRQ中断
*******************************************************************************/
void InitEint1(void)
{  VICIntSelect=0x00000000;             //设置所有VIC通道为IRQ中断
   VICVectCntl0=0x2F;                   //EINT0通道分配到IRQ Slot0,即优先级最高
   VICVectAddr0=(int)IRQ_EINT1;         //设置EINT1向量地址
   VICIntEnable=0x00008000;            //使能EINT1中断
   EXTWAKE=0x02;                        //允许外部中断1唤醒掉电的CPU
   EXTINT=0x07;                         //清除外部中断标志
}

/*******************************************************************************
*名称:main()
*功能:掉电测试
*******************************************************************************/
int main(void)
{ PINSEL0=0x20000000;          //设置I/O口连接,P0.14设置为EINT1
  PINSEL1=0x00000000;
  IODIR=LED1CON;               //设置LED1控制口为输出,其它I/O为输入
  
  InitEint1();                 //初始化外部中断1,使能IRQ中断

  while(1)
  {  PCONP=0x000;              //关闭定时器,RTC,UART等功能部件
     PCON=0x02;                //系统进入掉电模式
       /*当系统被唤醒后,取反LED控制*/
     if((IOSET&LED1CON)==0)IOSET=LED1CON;
       else IOCLR=LED1CON;
  }
  return(0);
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?