السلام عليكم...
لقد عمل البرنامج بفضل من الله ثم الإخوة الأفاضل في قريتنا و بالتأكيد يجب أن أشكر أستاذنا المميز م.أحمد على دروس المايكروكنترولر و جعله الله في ميزان حسناته..
هذا هو الكود النهائي....
كود:
unsigned int j,k,i=0;
void main()
{ adcon1=0x06;
trisa=1; trisb=trisd=0;
portd=0;
while(1)
{
check:
if(porta.f1) goto car_out;
if(porta.f0) goto go_in;
if(porta==0) portb=0;
goto check;
}
go_in:
if(portd<3) //if there is place for parking
{
for(;;)
{
portb.f0=1; if(porta.f2) break; //open door B ,car out
}
portb.f0=0;
portb.f1=1;
i++;
portd=i;
for(j=0;j<3;j++)
{
// if((porta.f0)||(porta.f1)) goto check;
delay_ms(600); //wait for 3minut then
}
portb.f1=0;
goto check;
} else for(k=0;k<3;k++){portb.f3=1; delay_ms(200);
portb.f3=0; delay_ms(200);} //if no place,no new car enter
goto check;
car_out:
if ( portd==0 ){ goto check; }
else
{
portb.f1=1;
for(;;)
{
portb.f2=1; if(porta.f3) break; //open door B ,car out
} // until sensor gives signal
portb.f2=0; portb.f1=0;
delay_ms(60); // close doorB & turn light off
i=i-1; // decrement counter
portd=i;
delay_ms(1500);
goto check; }
}
الجملة باللون الأزرق مهمة جدا لأن البرنامج سيستمر بعملية الطرح حتى عندما تكون I=0 حيث البك يقوم بطرح الأعداد في الصورة الثنائية لذا سيكون ناتج I=0-1أكبر من ثلاثة و بالتالي لن يعمل البرنامج بالطريقة الصحيحة.
|
في الواقع الاخت سلمى الجملة غير مهمة الا أثناء التجريب على الكمبيوتر
لانه لا يمكن أن تخرج سيارة من المراب وهو فارغ i=0 !!!