giúp mình về cái timer với!!
trong chương trình của mình có sử dụng cả timer và ngắt. Đây là hàm phục vụ ngắt của mình:
Code:
#int_RB
void ngat_RB()
{
if((RBIF)&&(RBIE))
{
//if(khoidong0==1)
// goto Thoat;
output_low(pin_A3);
output_low(pin_A4);
output_low(pin_A5);
if(!RB4)
{
if(ver==0)
{
ver=1;
hienthicot1();
goto Thoat;
}
if(ver==1)
{
ver=2;
CPHT=1;
goto Thoat;
}
if(ver==2)
{
ver=3;
doctrunggian2();
hienthicot3();
goto Thoat;
}
if(ver==3)
{
ver=4;
phantich_so(trunggian2);
trunggian=nghin;
lcd_display_blink(0,13);
goto thoat;
}
if(ver==4)
{
ver=5;
trunggian=tram;
if(hor==6)
lcd_display_char(0,13,pw[0]);
lcd_display_blink(0,14);
goto thoat;
}
if(ver==5)
{
trunggian=chuc;
if(hor==6)
lcd_display_char(0,14,pw[0]);
ver=6;
lcd_display_blink(0,15);
goto thoat;
}
if(ver==6)
{
trunggian=donvi;
if(hor==6)
lcd_display_char(0,15,pw[0]);
ver=7;
lcd_display_blink(0,16);
goto thoat;
}
if(ver==7)
{
ver=4;
trunggian=nghin;
if(hor==6)
lcd_display_char(0,16,pw[0]);
lcd_display_blink(0,13);
goto thoat;
}
} // Xong RB4
if(!RB5)
{
if((ver==0)||(ver==1))
goto Thoat;
if(ver==2)
{
ver=1;
hienthicot1();
CPHT=0;
hor=0;
goto Thoat;
}// endif(ver==1)
if(ver==3)
{
if((hor==1)||(hor==2)||(hor==3)||(hor==4)||(hor==5))
hor=1;
if((hor==6)||(hor==7)||(hor==8)||(hor==9))
hor=6;
hienthicot2();
ver=2;
goto Thoat;
}// endif(ver==1)
if((ver==4)||(ver==5)||(ver==6)||(ver==7))
{
//RBIF=0;
tonghop_so();
}
}// Endif(RB5)
if(!RB6) // Xu ly tang gia tri
{
if((ver==4)||(ver==5)||(ver==6)||(ver==7))
tangcot();
}// Endif(RB6)
if(!RB7)
{
if(ver==2)
{
if(hor==0)
{
hor=1;
goto hienthi42;
}
if(hor==1)
{
hor=6;
goto hienthi42;
}
if(hor==6)
{
hor=0;
goto hienthi42;
}
hienthi42:
hienthicot2();
goto thoat;
}
if(ver==3)
{
if(hor==1)
{
hor=2;
goto chuyendich43;
}
if(hor==2)
{
hor=3;
goto chuyendich43;
}
if(hor==3)
{
hor=4;
goto chuyendich43;
}
if(hor==4)
{
hor=5;
goto chuyendich43;
}
if(hor==5)
{
hor=1;
goto chuyendich43;
}
if((hor==6)&(user==1))
{
hor=7;
user=0;
goto chuyendich43;
}
if(hor==7)
{
hor=8;
goto chuyendich43;
}
if(hor==8)
{
hor=9;
goto chuyendich43;
}
if(hor==9)
{
hor=7;
goto chuyendich43;
}
chuyendich43:
{
//doctrunggian2();
hienthicot3();
phantich_so(trunggian2);
// doctrunggian2();
}
} //If (ver==3)
}// Endif(RB7)
Thoat:
RBIF=0; //Xoa co ngat RB
} // Ket thuc if co ngat
}// Ket thuc ham void
trong hàm phục vụ ngắt mình gọi đến khá nhiều hàm con. Khi chương trình chính không làm gì, chỉ thiết lập timer hoặc mình bỏ hẳn hàm phục vụ ngắt khỏi chương trình và trong chương trình chính cho gọi đến các hàm con khác thì timer chạy đúng như mong muốn. nhưng khi để hàm phục vụ ngắt và trong chương trình chính có gọi đến chương trình con đã được gọi trong hàm phục vụ ngắt thì thời gian ngắt của timer lại không chính xác nữa.
mình đã thử độc lập riêng timer thì hoàn toàn đúng.
mong được mọi người giúp đỡ. mình cảm ơn nhiều.