進行了MDK中斷設置之后~~
馬上中斷就可以用了~~
要想了解的話,找EDA軟件板塊~~
今天趕緊寫完就哦了~~
二、中斷控制編程
二—(01)、計數(shù)器(通過三個外部中斷來控制計數(shù)的加減或者清零~~)
MDK2_1.c
//------------------------------------------------------------------------------
//通過外部中斷0、外部中斷1、外部中斷2實現(xiàn)加減計數(shù)器,并輸出數(shù)碼管顯示
#include"lpc210x.h"
#include"delay.h"
#include"bit.h"
#include"macroandconst.h"
//------------------------------------------------------------------------------
#define CON 0x000000ff//用于設置IOCLR,拉低數(shù)據(jù)引腳
uchar seg_display=0x00;//LED數(shù)碼管顯示,uchar型變量
//------------------------------------------------------------------------------
//外部中斷0處理函數(shù),實現(xiàn)加計數(shù)器
//名稱:EINT0
void __irq EINT0(void)
{
seg_display++;
while(GET_BIT(EXTINT,0)) //等待外部中斷信號恢復為高電平,然后對EXTINT的第0位寫‘1’來清零
SET_BIT(EXTINT,0);
IOCLR=CON;//在顯示之前要將數(shù)據(jù)口置零~~與下面的IOSET相配合~~然后達到送高低電平
IOSET=seg_display;
VICVectAddr=0;//處理完成后,寫向量地址寄存器為0,通知VIC中斷處理結束
}
//------------------------------------------------------------------------------
//外部中斷0處理函數(shù),實現(xiàn)減計數(shù)器
//名稱:EINT1
void __irq EINT1(void)
{
seg_display--;
while(GET_BIT(EXTINT,1)) //等待外部中斷信號恢復為高電平,然后對EXTINT的第1位寫‘1’來清零
SET_BIT(EXTINT,1);
IOCLR=CON;//在顯示之前要將數(shù)據(jù)口置零~~與下面的IOSET相配合~~然后達到送高低電平
IOSET=seg_display;
VICVectAddr=0;//處理完成后,寫向量地址寄存器為0,通知VIC中斷處理結束
}
//------------------------------------------------------------------------------
//外部中斷0處理函數(shù),實現(xiàn)減計數(shù)器
//名稱:EINT2
void __irq EINT2(void)
{
seg_display=0;
while(GET_BIT(EXTINT,2)) //等待外部中斷信號恢復為高電平,然后對EXTINT的第2位寫‘1’來清零
SET_BIT(EXTINT,2);
IOCLR=CON;//在顯示之前要將數(shù)據(jù)口置零~~與下面的IOSET相配合~~然后達到送高低電平
IOSET=seg_display;
VICVectAddr=0;//處理完成后,寫向量地址寄存器為0,通知VIC中斷處理結束
}
//------------------------------------------------------------------------------
//端口初始化函數(shù)
void port_init(void)
{
PINSEL0=0xa0000000;//設置I/O工作模式,分別為EINT0、EINT1、EINT2,其它為GPIO
PINSEL1=0x00000001;
IODIR=CON;//設置I/O方向,第八位數(shù)據(jù)位為輸出
}
//------------------------------------------------------------------------------
//外部中斷初始化函數(shù)
void eint_init(void)
{
VICIntSelect=0;//終端選擇寄存器,選擇為IRQ
VICIntEnable=0x0001c000;//使能EINT0、EINT1、EINT2中斷
VICVectCntl0=0x0000002e;//EINT0通道分配到IRQ Slot0,既優(yōu)先級最高
VICVectCntl1=0x0000002f;//EINT1通道分配到IRQ Slot1
VICVectCntl2=0x00000030;//EINT2通道分配到IRQ Slot2
VICVectAddr0=(int)EINT0;
VICVectAddr1=(int)EINT1;
VICVectAddr2=(int)EINT2;
}
//------------------------------------------------------------------------------
int main(void)
{
port_init();
eint_init();
IOCLR=CON;
IOSET=seg_display;
EXTINT=0x07;//清除外部中斷
while(1);
}
其它的輔助文件我就不貼了~~
都是挺簡單的~~