![]() |
|
![]() |
#1 |
Đệ tử 4 túi
Tham gia ngày: Apr 2008
Nơi Cư Ngụ: Hanoi
Bài gửi: 78
: |
Sự khác nhau về dùng delay_ms() và timer?
Trong lập trình c:về thời gian delay có sự khác nhau giữa sử dụng hàm sẵn có delay_ms(time) và sử dụng timer để tạo ra thời gian trễ không.Xin các bạn giúp giải đáp
|
![]() |
![]() |
![]() |
#2 | |
Trưởng lão PIC bang
|
Trích:
- Dùng timer, kiểu thứ nhất: cho timer đếm thời gian, còn CPU liên tục kiểm tra xem đủ thời gian trễ hay chưa, như vậy CPU cũng bận rộn, không làm được việc gì khác - Dùng timer, kiểu thứ hai: cho timer đếm thời gian, CPU thường xuyên kiểm tra xem đủ thời gian hay chưa, trong lúc vẫn thực hiện các công việc khác (chẳng hạn, trong vòng lặp có lệnh kiểm tra xem cờ tràn timer đã bật hay chưa) - Dùng timer, kiểu thứ ba: cho timer đếm thời gian, chỉ khi nào đủ thời gian chờ thì mới báo hiệu cho CPU xử lý (dùng ngắt timer) Dùng hàm delay_ms() có thể tạo độ trễ rất chính xác (không có sai lệch, nếu code được viết tốt và tần số thực thi lệnh đủ lớn). Dùng timer kiểu thứ ba cũng có thể tính toán để có độ trễ rất chính xác (không có sai lệch đến sai lệch 1 chu kỳ máy). Dùng timer kiểu thứ hai có thể kém chính xác hơn dùng timer kiểu thứ nhất. Dùng timer kiểu thứ nhất có thể đạt sai lệch 1 chu kỳ thực thi lệnh. Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
![]() |
![]() |
![]() |
#3 |
Đệ tử 6 túi
Tham gia ngày: Jul 2007
Bài gửi: 146
: |
mình có 1 băn khoăn
khi mình dùng hàm delay_ms() của CCS và xử dụng nhiều ngắt, sai số là rất lớn theo mình hiểu bản chẩ hàm này là cho CPU điên cuồng tính toán, và hoàn toàn có thể bị ngắt bởi các ngắt khác để làm việc khác nên tạo ra sai lệch. mình đã thử nghiệm delay_ms(500) với chip 4431 và dùng timer ở tần số 20KHz , thực tế bị delay mất khoảng 3s. ko biết mình hiểu có đúng ko???
__________________
mạch nạp - kit phát triển - linh kiện điện tử www.PNLabvn.com |
![]() |
![]() |
![]() |
#4 | |
Đệ tử 7 túi
|
Trích:
![]() Chúc vui ![]()
__________________
_____________________________Tri nhân tri tự bất tri tâm_____________________________ _ _ _ _ _ _ _ _ ![]() ![]() . . . . . . . . . . . . . . . . Để post đuợc một câu hỏi rõ ràng xin tham khảo link sau : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . http://www.picvietnam.com/forum/showthread.php?t=1263. . . . . . . . . . . . . . . . |
|
![]() |
![]() |
![]() |
#5 |
Đệ tử 4 túi
Tham gia ngày: Apr 2008
Nơi Cư Ngụ: Hanoi
Bài gửi: 78
: |
@hopeman:như anh Nam đã giải thích trên rồi đó.
Mình đồng ý với bạn về vấn đề hàm delay_ms() bị ngắt bởi các ngắt khác.Theo mình nghĩ thì hàm này được viết như sử dụng asm viết thời gian delay mà không động đến timer,chỉ sử dụng đến các thanh ghi thông thường thôi.Tuy nhiên kĩ thuật lập trình chỗ này có vẻ khá tốt vì mình mô phỏng thử thấy hàm này cho thời gian delay chính xác |
![]() |
![]() |
![]() |
|
|