PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Các ngôn ngữ lập trình khác (CCS C, HT 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

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 09-10-2008, 05:28 PM   #1
love_ac
Đệ 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
love_ac vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 09-10-2008, 07:12 PM   #2
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi love_ac View Post
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
- Hàm delay_ms() thường đếm cho đủ số chu kỳ cần thiết để tạo thời gian trễ, trong thời gian này CPU bận rộn đếm thời gian, không làm được việc gì khác

- 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
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-10-2008, 01:37 PM   #3
hopeman
Đệ tử 6 túi
 
hopeman's Avatar
 
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
hopeman vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-10-2008, 02:38 PM   #4
love_ac
Đệ 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
love_ac vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-10-2008, 02:39 PM   #5
thaithienanh
Đệ tử 7 túi
 
thaithienanh's Avatar
 
Tham gia ngày: Jul 2006
Bài gửi: 189
:
Send a message via Yahoo to thaithienanh
Trích:
Nguyên văn bởi hopeman View Post
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???
Bản chất của Delay là thi hành lập lại nhiều lần câu lệnh rỗng với mục đích là "đốt thời gian" do mỗi lần CPU thực thi câu lệnh đó, vì vậy nó cũng tương tự như một vòng lặp đương nhiên sẽ bị tạm dừng khi có ngắt xảy ra , khi sử dụng đồng thời delay và ngắt bạn chú ý đừng để nó xung đột với nhau kết quả chắc chắn là timer đảm bảo và delay thì không, bạn nên sử dụng nhiều ngắt và tính toán đặt mức ưu tiên hợp lý (hạn chế sử dụng delay thì sẽ đạt hiệu quả cao hơn).

Chúc vui .
__________________
_____________________________Tri nhân tri tự bất tri tâm_____________________________
_ _ _ _ _ _ _ _ Yêu mến tất cả anh em Picvietnam.com _ _ _ _ _ _ _ _
. . . . . . . . . . . . . . . . Để 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. . . . . . . . . . . . . . . .
thaithienanh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


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à 08:44 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