📄 irq12.c
字号:
#include<lpc2103.h>
//#define EINT0 (0x)
void inituart(void);
void printf_uart(char *);
void delay(int);
void __irq IRQ_EINT2(void)
{ inituart();
while((((EXTINT&1<<2)<<9)&(IOPIN&1<<11))!=0) //key0
{
delay(10);
// if((IOPIN&1<<11)!=0)
printf_uart("key0 is");
// delay(5000);
IOCLR|=1<<11;
// if((EXTINT&1<<2)==0)
// while()
}
// while((EXTINT&1<<15)!=0);
while((((EXTINT&1<<2)<<10)&(IOPIN&1<<12))!=0) //key1
{
delay(10);
printf_uart("key1 is");
//delay(5000);
IOCLR|=1<<12;
}
while((((EXTINT&1<<2)<<23)&(IOPIN&1<<25))!=0) //key2
{
delay(10);
printf_uart("key2 is");
//delay(5000);
IOCLR|=1<<25;
}
while((((EXTINT&1<<2)<<24)&(IOPIN&1<<26))!=0) //key3
{
delay(10);
printf_uart("key3 is");
//delay(5000);
IOCLR|=1<<26;
}
EXTINT=0X4;
VICVectAddr=0x00; //中断结束
}
main()
{ PINSEL0=0x00000000;
PINSEL1=0x00000000;
PINSEL0|=0x40000000;
EXTMODE|=0x00; //电平触发
EXTPOLAR|=0x4; //高电平有效
EXTINT=4; //一定要清零,否则一按REstart就进入中断
VICIntSelect|=0x00000000; //IRQ
VICIntEnable|=1<<16; //十六通道
VICVectCntl0|=0x20|16; //最高优先级
VICVectAddr0=(int)IRQ_EINT2; //
IODIR|=1<<11|1<<12; // 输出
IODIR|=1<<25|1<<26; // 输出
IOCLR|=1<<11; //低电平
IOCLR|=1<<12;
IOCLR|=1<<25;
IOCLR|=1<<26;
while(1)
{ //IODIR|=1<<21;
//IOSET|=1<<21;
// delay(1000);
// IOCLR|=1<<21;
// delay(1000);
IOSET|=1<<11; //key0 置高
IOCLR|=1<<12;
IOCLR|=1<<25;
IOCLR|=1<<26;
IOCLR|=1<<11; //KEY1 置高
IOSET|=1<<12;
IOCLR|=1<<25;
IOCLR|=1<<26;
IOCLR|=1<<11; //KEY2 置高
IOCLR|=1<<12;
IOSET|=1<<25;
IOCLR|=1<<26;
IOCLR|=1<<11; //KEY3 置高
IOCLR|=1<<12;
IOCLR|=1<<25;
IOSET|=1<<26;
IOCLR|=1<<11; //复位
IOCLR|=1<<12;
IOCLR|=1<<25;
IOCLR|=1<<26;
}
}
void inituart() //串口初始化
{
long PTL;
PINSEL0=0x5;
U0FCR=0X7;
PTL = (15000000/16)/9600;
U0LCR=0X83;
U0DLL=PTL%256;
U0DLM=PTL/256;
U0LCR=0X3;
}
void delay(int a) //软件延时
{ long i,j;
for(i=0;i<a;i++)
for(j=0;j<5000;j++)
;
}
void printf_uart(char *s) //输出字符串
{ while(*s!='\0')
{
U0THR=*s;
s++;
while((U0LSR&(0x40))==0)
;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -