![]() |
|
Tài trợ cho PIC Vietnam |
Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#3 | |
Đệ tử 2 túi
Tham gia ngày: Jun 2006
Bài gửi: 27
: |
Trích:
Để 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 ! |
|
![]() |
![]() |
|
|