Em sử dụng timer1 và timer2 để định thời gian là 0.5ms. Em sử dụng thạch anh 4M, PIC16F677A, trình biên dịch CCS.
Em khai báo timer1 như thế này
SETUP_TIMER_1(T1_INTERNAL|T1_DIV_BY_1);
SET_TIMER1(0xEC77); //0xEC77 = 60535
Vậy thời gian tràn của timer 1 là: (65535 - 60535)*1us = 5000*1us = 5ms
còn timer2 là
setup_timer_2 ( T2_DIV_BY_4,249,5); // (249+1)*4*5*1us = 250*4*5*1us = 5000*1us =5ms
Và em kết hợp với đếm ngắt 200 lần tức 5ms *200 = 1s
Khi mô phỏng, em thấy
Lúc đầu viết chung trên 1 chương trình thì em thấy timer chạy gần 1s so với thời gian mô phỏng hơn trong khi timer2 chạy trễ hơn thời gian mô phỏng và trể hơn timer1 đến 1s lận
sau đó em tách 2 chương trình ra riêng biệt thì vẫn vậy. Em đã làm sai chổ nào vậy? Em đã tra nhiều rồi mà thấy ích ai sài timer2 nên cũng chưa tìm ra được. Mong anh chị chỉ dẫn dùm em.
Em khai báo timer1 như thế này
SETUP_TIMER_1(T1_INTERNAL|T1_DIV_BY_1);
SET_TIMER1(0xEC77); //0xEC77 = 60535
Vậy thời gian tràn của timer 1 là: (65535 - 60535)*1us = 5000*1us = 5ms
còn timer2 là
setup_timer_2 ( T2_DIV_BY_4,249,5); // (249+1)*4*5*1us = 250*4*5*1us = 5000*1us =5ms
Và em kết hợp với đếm ngắt 200 lần tức 5ms *200 = 1s
Khi mô phỏng, em thấy
Lúc đầu viết chung trên 1 chương trình thì em thấy timer chạy gần 1s so với thời gian mô phỏng hơn trong khi timer2 chạy trễ hơn thời gian mô phỏng và trể hơn timer1 đến 1s lận
sau đó em tách 2 chương trình ra riêng biệt thì vẫn vậy. Em đã làm sai chổ nào vậy? Em đã tra nhiều rồi mà thấy ích ai sài timer2 nên cũng chưa tìm ra được. Mong anh chị chỉ dẫn dùm em.
Comment