|
:: نائب المشرف العام ::
تاريخ التسجيل: Jun 2009
الدولة: القاهرة - مصر
المشاركات: 11,652
|
|
نشاط [ ماجد عباس محمد ]
قوة السمعة:
|
|
03-08-2018, 08:14 AM
المشاركة 98
|
|
كود البرنامج
كالمعتاد نبدأ بالعنوان ثم تعريف المنافذ كمداخل أو مخارج و تصفير الوقت ثم عرضه. يلى ذلك إلغاء مقاومات الجذب العلوى ثم تحديد أنواع المقاطعة و استجابتها حافة الخ. و تهيئة باقى أعلام المقاطعة.
بعد ذلك نقرأ مع الفحص فى دورة حتى يأتى الرقم ثم نكرر ما سبق تماما ، نضيفه كثوانى ثم نكرر فإن كان أمر ننتقل للفحص أو نضرب ما سبق فى 10 ثم نضيف الجديد و هكذا حتى تكتمل أربعة أرقام فننتظر أمر.
كود:
void main()
{
Startit:
TRISC = 0 ; TRISD = 0X0F ; TRISB = 1 ; TRISA = 255;
Minleft = 0 ; Secleft = 0 ; Showtime ;
OPTION_REG = 0b00111111 ; // setting RB Pull up clearing bit RBPU (OPTION_REG<7>).
// INTEDG = falling ,TOCS counter not timer, Count Falling Edge Prescale to WDT , ratio
INTCON = 0B10100000 ; // Interrupt Control GIE All,Peie edge falling, T01E Enable
// INTE External disable , T01 Ov flag,intf ext flag , RBIF port change flag
TRISB = 255 ;
Controls = 0 ;
INTCON.TMR0IF =0 ; // Interrupt Timer0 Flag
INTCON.TMR0IE =0 ; // Stop Interrupt Timer0
while (1)
{ do Readandchk; while (Cmd_ndgt = 1); // wait a digit
Secleft = Keyvalue ; Showtime ; Readandchk ; // seconds
if (Cmd_ndgt ) goto Chkcmnd ;
Secleft = (Secleft * 10) + Keyvalue ; // make ten seconds
Showtime ; Readandchk ;
if (Cmd_ndgt ) goto Chkcmnd ;
Minleft = Secleft / 10 ; // a digit, make minutes
Secleft = (Secleft % 10)+ Keyvalue ; Showtime ; Readandchk ;
if (Cmd_ndgt ) goto Chkcmnd ;
Tmp = Secleft / 10; Minleft = (10 * Minleft) + Tmp; // adigit make ten minutes
Readandchk ;
if (Cmd_ndgt ) goto Chkcmnd ;
Tmp = Secleft / 10; Minleft = (Minleft * 10)+Tmp; // a last digit, make 10 min
Tmp = Secleft % 10 ; Secleft = Tmp + Keyvalue;
do Readandchk; while ( Cmd_ndgt = 0); // wait a command
تم تحديد الزمن و الآن جاء أمرو مطلوب تحليله، أسهل طريقة أن نستخدم switch و من ثم لو 10 نسأل لو الماجنيترون يعمل؟ إذن نزيد الزمن 10 ثوانى و إلا نكرر ما سبق فى تمهيد الشاشة لقراءة النسبة المطلوبة لتخفيض الطاقة ثم ننتظر رقم و نعرضه و ننتظر أمر للتنفيذ أو عدد نعدل الرقم السابق.
كود:
Chkcmnd:
switch (Keyvalue)
{ case 10 : // either ADD 10 seconds or set Low Power
{ if (Jobpending = 1) // running , add ten
{ Secleft = Secleft + 10;
if (Secleft > 59) ; Secleft = Secleft - 60 ;
}
else
{ Displays = 255 ; Minlatch=0 ; Delay_us(1); Minlatch =1 ;
Delay_us(1); Displays = 0; Seclatch=0 ; // Display Blank MinLeft
Delay_us(1); Seclatch = 1; Readandchk; // Show -- 00
if (Cmd_ndgt = 1) ; goto Chkcmnd; // if a 2nd Command, cancel Low Power
Setlow:
Powersel = Keyvalue ; Lowheat=1; // Setlow
Displays = Dec2bcd(Keyvalue * 10);
Seclatch = 0 ; Delay_us(1) ; Seclatch= 1 ; // Show -- x0
Currpwr = 0 ; Readandchk ;
if (Cmd_ndgt = 0) goto Setlow; else goto Chkcmnd ; // a digit, replace the old one
}
}
case 11 : // 11 = Add MinLeft
{ if (Jobpending = 1) // if not running do nothing
{Tmp = Minleft / 10 ; ++Minleft ; Cntr = Minleft / 10;
if (Cntr > Tmp) Minleft = Minleft - 10;
}
}
case 12 : ; // 12 = Add 10 MinLeft
{ if (Jobpending = 1) // if not running do nothing
Minleft = Minleft + 10;
if (Minleft > 100) Minleft = Minleft - 100;
}
case 13 : ; // 13 = Enter or Run
{ if (Jobpending = 1) // if not running do nothing
{ Jobpending = 1 ; Off_non = 1; Hiv_on = 1 ; // power On
TMR0 = 205 ; // Load Tomer0
INTCON.TMR0IE = 1 ; // enable Timer0
INTCON.TMR0IF = 1 ; // Interrupt Timer0 Flag
while (jobPending = 1) ; // Bitwait Jobpending , Reset // Wait to Finish
Hiv_on = 0; // Power Off
}
}
case 14 : ;
{ while (Dooropen =1){};
if (Jobpending = 1) // if not running do nothing
{
INTCON.TMR0IE = !INTCON.TMR0IE = 1 ;
Off_non = !Off_non ;
}
}
case 15 : goto Startit;
}
}
}
هكذا نكون قد شرحنا الميكرو ويف بالميكرو من الأنواع الثلاثة و باللغات الثلاثة. المرة القادمة إن شاء الله نبدأ برنامجنا الأخير وهو التحكم فى سرعة موتور تيار مستمر ما لم يجد جديد
|