PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

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
Prev Previous Post   Next Post Next
Old 18-07-2008, 10:23 PM   #3
bachelor
Đệ tử 2 túi
 
Tham gia ngày: Jun 2006
Bài gửi: 27
:
Trích:
Nguyên văn bởi namqn View Post
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 !
bachelor vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 05:59 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam