سلام@!

من یه خورده به فایل های نمونه نگاه کردم!

منظور شیفت دادن رو کمی متوجه شدم!

اومدم کمی راجع بهش توضیح بدم (البته اگه درست باشه*)


LPC_GPIO2->FIOSET = 5<<4 ;

در مثال بالا قرار است یک پورت رو خروجی کنیم!

الان بعد از مساوی ما میگیم که عدد 5 را 4 عدد سمت چپ شیفت بده!

که عدد 5 به باینری میشه 101 که اگه ما بخوایم واضح تر بگیم به اینصورت میشه

00000000

میشود

01010000

دقت کنید با اینکار دیگر ما اعدادی که قبلا ست کرده بودیم از بین نمیرود!

ولی اگر بخواهیم اینجوری (10000101) ست کنیم اعدادی که قبلا بهش داده بودیم همه از بین میرود!


در AVR برای اینکه یک پین رو مشخص کنیم به صورت PORTA.5 مشخص میکردیم! این یعنی از پورت A پنجمین بیت یا پین رو ما مشخص میکردیم! بعد میتونستیم مساوی 0 یا 1 قرار بدیم!


اما اگه دقت کنید در برنامه نویسی LPC1768 کمی فرق داره!

مثلا ما میخوایم یک پین رو بهش مقدار یک بدیم از کد زیر استفاده میکنیم!

LPC_GPIO2->FIOSET = 1<<6

که در اینجا ما بهش میگیم که به اندازه 6 به چپ برو و پینش رو 1 کن که میشه (1000000)!

خوب این برای ست کردن پین هست! اما یه وقت میخوایم بگیم که اگه همین پین مساوی با 0 شد فلان کار رو برام انجام بده!

برای اینکار دیگه نمیتونیم کد بالا رو بنویسیم چون کد بالا برای ست کردن پین هست!! الان باید چه کار کنیم؟؟!

خوب یه راه حل هست

ما باید اینجوری کد رو بنویسیم!

LPC_GPIO2->FIOSET & 1<<6

این کد به همون پین اشاره داره!!




فرق بین FIOPIN و FIOSET چیست؟


این دو در کل شاید مثل هم باشند چون هر دو وظیفه ست کردن پین ها رو دارند! ولی اگر دقت کنید توی آموزش ها میگن وظیفه FIOSET یک کردن پین هاست...! ولی FIOPIN سه تا وظیفه داره که 0 کردن 1 کردن و خواندن ورودیه!

پس FIOSET وظیفه ی یک کردن پین ها رو داره!
بنابراین اگر ما از SET استفاده کنیم دیگه پینی که قبلا ما یک کردیم صفر نمیشه!
مثلا داریم
10101010
و اگر بخوایم پین های 1و3و5و7 رو هم یک کنیمو اگر کد خود را به صورت FIOSET=01010101 بنویسیم کد آخر ما به صورت 11111111 در میاد!
ولی اگر از FIOPIN=01010101 استفاده کنیم کد آخر ما به صورت خودش یعنی 01010101 در می آید!

به مثال زیر توجه کنید!

	LPC_GPIO2->FIOPIN = 85 ;
delay();
LPC_GPIO2->FIOPIN = 170 ;
delay();
در این مثال کد آخر ما به صورت 10101010 میباشد!

و به مثال زیر توجه کنید 
	LPC_GPIO2->FIOSET = 85 ;
delay();
LPC_GPIO2->FIOSET = 170 ;
delay();
 
 در مثال بالا کد آخر ما که جمع 85 با 170 میشه 255 یعنی میشه 11111111 که نشون میده در کد های بالا هیچ صفری ست نشده!

من سعی کردم تامطالب رو جوری بیان کنم که خوب متوجه بشید!
اما اگر بازم براتون جای سوال داره! میتونم در حد توانم کمکتون کنم!

فعلا
یا علی مدد...!