Trích:
Nguyên văn bởi namqn
Bộ timer sử dụng một bộ đếm để thực hiện chức năng của nó. Nếu được cấu hình để đếm xung bất đồng bộ bên ngoài, nó làm việc như một bộ đếm. Nếu được cấu hình để đếm xung đồng hồ (có qua bộ chia hoặc không) bên trong PIC, nó làm việc như một đồng hồ.
Việc gọi hàm set_timerX(Y) sẽ đặt giá trị Y vào bộ đếm đó. Việc gọi hàm set_timer0(0) sẽ ghi giá trị 0 vào bộ đếm của timer0, và timer0 sẽ bắt đầu đếm từ giá trị đó, nếu nó được kích hoạt.
Reset có nhiều nghĩa, tùy theo cách bạn diễn dịch. Do đó, tôi không khẳng định việc gọi hàm set_timer0(0) sẽ "reset" bộ định thời, vì không rõ bạn ngụ ý gì khi nói đến "reset".
Thân,
|
Trước hết xin cảm ơn vì bạn đã trả lời rất nhanh mặc dù tôi vừa mới post câu hỏi !
Để bạn namqn dễ hình dung hơn tôi xin nêu cụ thể bài toán của mình như sau:
Tôi cần phải đo thời gian ở giữa hai xung. Ở đây tôi không dùng bộ định thời làm bộ đếm vì một số lý do thực tế. Phương án giải quyết của tôi là sử dụng timer0 với prescale=1, clock nội=1MHz(sử dụng thạch anh 4MHz) như vậy bộ định thời sẽ tràn ở 256us. Giả thiết là thời gian xuất hiện giữa hai xung luôn nhỏ hơn 256us, ở đây tôi sử dụng 2 xung này để làm nguồn ngắt ngoài cho vi xử lý (PIC16F877A). Với ngắt xuất hiện bởi xung thứ nhất tôi gọi hàm set_timer0(0); để bắt đầu đếm từ 0. Với ngắt xuất hiện bởi xung thứ hai tội gọi hàm get_timer0(); để lấy lại giá trị hiện thời của bộ đếm, giả sử giá trị trả về là 100 tức là thời gian giữ chậm giữa 2 xung là 100us.
Một vấn đề sẽ nảy sinh khi có 2 xung tiếp tục tới:
Ngắt bởi xung 1 -> Set_timer0(0);
-Nếu có reset -> bộ định thời lại bắt đầu đếm từ 0 -> đến ngắt bởi xung 2 -> get_timer0() sẽ cho ra một kết quả chính xác (giả sử lại là 100).
-Nếu không có reset-> bộ định thời tiếp tục đếm từ giá trị hiện thời (giả thiết cái xung 1 lần 2 cách xung 2 lần 1 1us thì giá trị hiện thời của bộ đếm là 101) -> đến ngắt bởi xung 2 -> get_timer0() trả về giá trị 201 là giá trị sai !
Đến đây chắc namqn đã hiểu khái niệm reset tôi muốn đề cập là gì và có thể trả lời tường tận giúp tôi. Mong bạn trả lời sớm
Thanks !