ستایش خداوند بخشنده را    که موجود کرد از عدم بنده را

سلام! آموزش وقفه در AVR رو قبلا گفته بودیم! (کلیک کنید)

اگه نمیدونید وقفه چیه تو یه کلام میشه گفت! = زمانی که یکی از پایه ها تحریک بشه CPU برنامه در حال انجام رو رها میکنه و میره توی وقفه تا کدهایی که قبلا نوشته بودیم رو انجام بده و بعدش دوباره برمیگرده و کار خودش رو انجام میده!

خوب بریم سراغ وقفه توی LPC1768

توی برد ECA که من دارم کلید های دوم و سوم به پایه اینتراپت (=وقفه) وصله!

برای همین با تحریک این دو کلید میتونیم وارد وقفه بشیم!

برای اینکار ما میام و یه LED رو چشمک زن میکنیم و توی وقفه هم یه LED دیگه رو چشمک زن میکنیم!

وقتی کلید رو میزنیم چراف LED اولی که درحال چشمک زدن بود ثابت میشه و اون چراغ دومی چشمک میزنه بعد از چند ثانیه دوباره اون اولیه شروع به چشمک زدن میکنه و دومی خاموش میشه!

دلیل اینکه لامپ اولی بعد از اینکه کلید رو زدیم ثابت میشه اینه که CPU دیگه از حلقه خارق میشه و میره و برنامه وقفه رو میخونه! برای همین اولی ثابت و دومی چشمک زن میشه! و....

 

اینم از کد برنامه!

#include <LPC17xx.h>

void delay(){ //ایجاد تابع زمان برای ایجاد فاصله زمانی
	int i;
	for (i=0;i<5000000;i++);
}
void EINT3_IRQHandler(){ // تابع وقفه
	int j;
	if ((LPC_GPIOINT->IO2IntStatF & 1<<11)) {  //فعال کردن وقفه برای پین مورد نظر که به کلید وصله
		
		for(j=0;j<4;j++){  //ساخت لامپ چشمک زن در وقفه
			LPC_GPIO2->FIOSET = 3<<4 ;
			delay();
			LPC_GPIO2->FIOCLR = 3<<4 ;
			delay();
		}
		LPC_GPIOINT->IO2IntClr = 1<<11 ;  // پایان دادن به وقفه
	
//اگر کد بالا نباشد سی پی بو از وقفه خارج نمیشه	
	}
	if (LPC_GPIOINT->IO2IntStatF & 1<<12) {
				
		for(j=0;j<4;j++){
			LPC_GPIO2->FIOSET = 3<<6 ;
			delay();
			LPC_GPIO2->FIOCLR = 3<<6 ;
			delay();
		}
		LPC_GPIOINT->IO2IntClr = 1<<12 ;
	}
}
	
int main(){
	LPC_GPIO2->FIODIR1 = 0x00 ;
	LPC_GPIO2->FIODIR0 = 0xFF ;
	LPC_GPIO2->FIOCLR0 = 0xFF ;
	
	LPC_GPIOINT->IO2IntEnF = (1<<11)|(1<<12); // شناساندن تابع وقفه
	NVIC_EnableIRQ(EINT3_IRQn);  //فعال کردن وقفه
	
	while(1){
	
			LPC_GPIO2->FIOSET=1; //چراغ چشمک زن
		        delay();
		LPC_GPIO2->FIOCLR=1;
                  delay();
			
		
	}
} 
 

امیدوارم چیزی فهمیده باشید!

اگرهم مشکل داشتید در حد توانم در خدمتم!

 

فعلا

یاعلی مدد....