View Single Post
Old 06-08-2009, 11:32 PM   #6
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 enti View Post
Mình đang dùng PIC24FJ256GB106, bây giờ cần dùng delay, nhưng với C30 chưa có delayus hoặc delay_ms.
Có bạn nào đã làm rồi thì có thể hướng đẫn mình.
Cám ơn.
C Compiler for PIC24 MCUs có hàm __delay32(n) để delay n chu kỳ máy (cần include thêm tập tin libpic30.h khi biên dịch). Nếu bạn biết tốc độ thực thi lệnh thì có thể delay đúng 1 us.

Ví dụ, giả sử bạn có tốc độ thực thi lệnh là 16 MIPS (tức là 16 triệu lệnh/giây, hay 16 lệnh/us). Việc delay 1 us khi đó sẽ có thể thực hiện bằng cách gọi __delay32(16) (khi mô phỏng với MPLAB SIM thì tôi nhận thấy hàm này làm trễ n+2 chu kỳ máy, chứ không phải n chu kỳ máy như trong tài liệu hướng dẫn đề cập, do đó để chính xác hơn thì phải dùng __delay32(14)).

Chú ý là hàm __delay32(n) không thể delay dưới 11 chu kỳ máy. Để delay dưới 11 chu kỳ máy thì bạn có thể dùng một số lệnh nop liên tiếp.

Để delay các thời gian trong tầm ms thì chỉ cần dùng một trong những timer. Bạn hãy tham khảo các tutorial đầu tiên mà tôi đã viết cho dsPIC30F, chúng hoàn toàn có thể áp dụng cho PIC24.

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

thay đổi nội dung bởi: namqn, 06-08-2009 lúc 11:53 PM.
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn