|
:: مهندس متواجد ::
تاريخ التسجيل: Aug 2007
الدولة: SUDAN
المشاركات: 145
|
|
نشاط [ sohaib A.Z ]
قوة السمعة:
|
|
16-01-2015, 10:07 AM
المشاركة 16
|
|
هذا هو الكود الذى كتبته اخى حيدر :
كود:
unsigned long int x=0;
void main()
{trisa=1;trisb=0;portb=0;
cmcon=7;
while(1)
{
if(porta.f0==1)
{
x=0;
while(porta.f0==1)
{
delay_ms(1);
x++;
}
}
if(x<=1000 )portb=0;
else if(x<=2000)portb=1;
else if(x<=3000)portb=2;
else if(x<=4000)portb=4;
else if(x<=5000)portb=8;
else if(x<=6000)portb=16;
else if(x<=7000)portb=32;
else if(x<=8000)portb=64;
else portb=128;
}
}
وقد فهمت من الكود ان الجزء :
كود:
{
x=0;
while(porta.f0==1)
{
delay_ms(1);
x++;
}
سيكون فى الانتربت روتين .
لدى سؤال صغير هنا :
اذا اعتبرنا ان المايكرو يعمل على 1MHz يعنى سينفذ كل سطر فى مايكروثانية ،
اذا يمكن ان نحذف امر التاخير ونجعل المايكرو يضيف واحد للمتغير x كل مايكرو ثانية طالما الزر مضغوط (عرض النبضة)
لكن هذا لنبضة واحدة ، فكيف اجعل المايكرو يحسب النبضات التى تلى هذه النبضة
ولك الشكر مرة اخرى اخى حيدر
|