ندخل في القائمه الرئيسيه
كود:
cmcon=7;// OFF comparator
لالغاء المقارن كومبارتر
كود:
InitTimer1();// init timer1
تهيئه تايمر 1 وايضا يمكن تعامل مع
تايمر0 ولكن هذه المره نريد التعامل مع تايمر 1
وهذا هو كوده
كود:
//Timer1
//Prescaler 1:1; TMR1 Preload = 65335; Actual Interrupt Time : 100 us
//Place/Copy this part in declaration section
void InitTimer1(){
T1CON = 0x01;
TMR1IF_bit = 0;
TMR1H = 0xFF;
TMR1L = 0x37;
TMR1IE_bit = 1;
INTCON = 0xC0;
}
طبعا يمكن الحصول على كود جاهز من البرنامج الذي ذكرته في رابط التالي في مشاركه رقم 13
http://www.qariya.com/vb/showthread....885#post812885
كود:
relay1_dir=relay2_dir=led_dir=0;// set output
relay1=relay2=led=0; // OFF all output;
جعلنا ريلي و ليد خرج وقمنا بأطفاء الخرج
كود:
for(x=0;x<20;x++)
{
led=1;
delay_ms(100);
led=0;
delay_ms(100);
}
هذا الكود يمثل عمل أضاءه ليد وأطفائه لغرض التاكد من أكمال التهيئه لكونك انت لا ترى شيئ يبين على سير البرنامج فأضاءه (( ليدات )) تساعدك في تحليل مشاكل
وبعدها ندخل في لوب مستمر
وفي داخل هذا لوب أختبار الشرط التالي
كود:
if (IR_Received_Flag == 1)
طبعا يمتى يتحقق هذا الشرط لما أستقبل كل البيانات ولكن دعونا نفترض أنه تم أستقبال كل البيانات والان نريد تحليل هذه البيانات أذن اذا تحقق الشرط المذكور معناها استقبلنا كل البيانات وهنا لابد من أيقاف الانتربت لكي تقارن البيانات مع الشفره واذا لم تلغي الانتربت فأنه بالتاكيد سيحدث مشكله وهو انه مايكرو كل 100 مايكرو سوف يذهب الى الانتربت لينفذ الاوامر ثم يعود وقد يؤثر على البيانات التي تم أستقبالها لهذا نكتب هذا الكود وريح بالنا
كود:
TMR1IE_bit = 0; // disable interupts
هسى تم الاستقبال البيانات ولكن ما الخطوه التاليه بالتاكيد تختبر هذه البيانات هل هي صحيحه ام لا لنرى الشرط
كود:
if ((IR_Received_byte[0] == ~IR_Received_byte[1]) && (IR_Received_byte[2] == ~IR_Received_byte[3]))
ماذا يعني هذا الشرط دعونا نرجع الى المرسل ونرى ماذا ارسل لنا من البيانات
كود:
ir_byte[3] = ~IR_COmmand;
ir_byte[2] = IR_COmmand;
ir_byte[1] = ~IR_Address;
ir_byte[0] = IR_Address;
ماذا ترون في مرسل الاول تم ارسال العنوان اذن بالتاكيد راح نستقبل البايت الاول وهو العنوان
بعدين المرسل ارسل معكوس العنوان ايضا مستقبل راح يستقبل البايت الثاني هو معكوس العنوان
لهذا ترون في الشرط
كود:
if ((IR_Received_byte[0] == ~IR_Received_byte[1])
وبعدين ارسل المرسل البايت الثالث ويمثل البيانات من المفروض المستقبل يقرا البايت الثالث
وبعدين المرسل ارسل البايت الرابع وهو معكوس البيانات وايضا المستقبل يستقبل البايت الرابع
ولهذا كتبنا في الشرط
كود:
(IR_Received_byte[2] == ~IR_Received_byte[3])
طبعا انا فصلت الشرط لكي أوضح لكم معناه وتلاحظون وضعنا علامه && وتعني
و
الان أتوقف لان الان وقت الصلاه