السلام عليكم ....
اخي الكريم استخدام تعليمة DELAY ليس صحيح . لأنها تسبب بتجميد المتحكم بعد فتره معينة , والافضل استخدام التايمر الداخلي للمتحكم .....
في هذا الكود جعلت التايمر زيرو يعد 10MS وجعلت المتغير الاول يعد 100 انتربت . اي 1S وبعدها يتم ارجاعه للصفر وزيادة المتغير الثاني ,,,
وفي الشرط جعلت عند تحقق الضغط على السويتش تصفير للمتغيرات السابقة حتى يتم عد 4 ثواني , وفي داخل اختبار الشرط جعلت شرط ثاني وهو مرور مدة 4 ثواني وبعدها انفذ ما اريد ,,,,
كود:
char timer1=0,timer2=0;
void InitTimer0(){
OPTION_REG = 0x86;
TMR0 = 100;
INTCON = 0xA0;
}
void Interrupt(){
if (TMR0IF_bit){
TMR0IF_bit = 0;
TMR0 = 100;
timer1++;
if(timer1==100){ timer1=0; timer2++;}
}
}
void main()
{
InitTimer0();
trisa.f0=1;
trisb.f=0;
while(1)
{
if(porta.f0==1){ timer1=0; timer2=0; if(timer2==4){portb.f0=1;}}
}
}