tungbka |
02-06-2010 12:37 AM |
Tốc độ động cơ hiển thị không chính xác
Em có lập trình đoạn chương trình sau:
Code:
lcd_putchar(" PC or Manual?");
while(down&S_t);
If(!down) {
lcd_putcmd(0x80);
lcd_putchar(" Manual");
delay_ms(1000);
goto Manual;
}
If(!S_t) {
lcd_putcmd(0x01);
lcd_putchar(" PC");
delay_ms(1000);
goto Maytinh;
}
Còn đây là đoạn chương trình các ngắt:
Code:
#INT_RDA // Ngat RS232
void Receive_isr()
{
text[dem]=getc(); // Du lieu duoc dua vao mang
if(text[dem]=='@') // Kiem tra dieu kien ket thuc
{
flag =1; // Ket thuc nhan, bat co bao
dem=0;
}
else dem++;
}
#INT_EXT // Ngat RB0
void ngatR0()
{
count++; // Ham duoc goi khi co suon len tai RB0
}
#int_timer1
void Timer1_isr()
{ // Ham duoc goi khi TImer1 tran (65535->0)
set_timer1(53036); // Chu ky trich mau (65536-53036)*4*4/20000000 = 0.01
tocdo= 30*(count + get_timer0()); // Tocdo=soxung*60/200/0.01
count = 0; //
set_timer0(0);
}
Với từng chương trình Maytinh hoặc Manual riêng rẽ thì chương trình chạy tốt, tốc độ động cơ hiển thị chính xác. Tuy nhiên khi ghép hai chương trình lại thì tốc độ lại hiển thị không chính xác nữa.
Em không biết nên làm thế nào nữa, chỉ ghép 2 chương trình đúng lại mà thành 1 chương trình sai. Hix. Mong mọi người cho em lời khuyên.
|