![]() |
Hỏi về delay trong C30 với PIC24F
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. |
Mình dùng Timer1 nhưng không được như mong muốn, code như sau:
Code:
#include <p24FJ256GB106.h> Nếu thay đổi T1CONbits.TCKPS1 = 0; T1CONbits.TCKPS0 = 1; Cũng không thay đổi, dù theo datasheet thì tần số sẽ 1:8 Có bạn nào có kinh nghiệm đã làm rồi thì hướng dẫn giúp mình. |
Bạn dùng thử đoạn code này xem sao nhe.
Code:
/* |
Trích:
|
Cái này để mình tìm hiểu thêm. Các tiền bối chỉ giúp mình được không vậy ?
|
Trích:
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, |
Trích:
Mỉnh không biết vì lý do gì, nhưng mình dùng hàm __delay32(n), với n = 11 thì thời gian delay là 1.6us, mình dùng máy hiện sóng để đo. |
Đây là đoạn code mình mới viết,
sử dụng câu lệnh repeat của asm để thực hiện các câu lệnh nop. Code:
void Delayus( unsigned int u2_Timer) |
Trích:
|
Trích:
Config của PIC24F Code:
_CONFIG1 (JTAGEN_OFF & GCP_OFF & GWRP_OFF & BKBUG_OFF & COE_OFF & ICS_PGx1 & FWDTEN_OFF & WINDIS_OFF & FWPSA_PR128 & WDTPS_PS1) |
Trích:
Ngoài ra, bạn kiểm tra lại code hợp ngữ mà trình biên dịch đã tạo ra xem có phát sinh thêm lệnh thừa nào hay không. Thân, |
Trích:
Code:
_CONFIG1 (JTAGEN_OFF & GCP_OFF & GWRP_OFF & BKBUG_OFF & COE_OFF & Vì mình muốn viết function giống CCS, tức là cần delay bao nhiêu us thì truyền tham số vào. vì vậy mình viết hàm delayus(unsigned int u2_timer), có thể chính việc gọi hàm làm thời gian delay không đúng theo lý thuyết nữa. Để xem được code asm khi compile bằng C30, thì làm như thế nào? Mình dùng MPLAB nên khi compile xong ko có file mã asm. Cám ơn nhiều. |
Trích:
|
Thạch anh và delay
Cho em hỏi sao trong các đoạn config đầu tiên của PIC24 viết bằng C30 không thấy nói đến tần số thạch anh mình dùng trên mạch nhỉ (ví dụ như CCS là #use delay(clock=8000000) ).
Em muốn delay_ms trong C30 không dùng timer nhưng thử mấy đoạn code sau đều không được nhỉ, em nghĩ hàm delay thực chất chỉ là thực hiện vòng lặp liên tục thui đúng không các anh... Bác nào làm Pic24F trên C30 rùi chỉ em cách tạo hàm delay mà ko dùng timer nhé... Code:
#include <p24FJ128GA010.h> |
Theo mình nghĩ C30 không có khai báo tần số dao động và cũng không có hàm delay_ms hay delay_us như CCS.
Em xin hỏi một tí về delay mà không dùng timer, nếu như viết bằng asm thì chúng ta biết được một lệnh mất bao nhiêu chu kỳ máy, từ đó có thể viết một vòng lặp để thực hiện delay, nhưng với C30 thì sao? Làm sao mình biết một lệnh mất bao nhiêu chu kỳ máy? |
Múi giờ GMT. Hiện tại là 11:06 PM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam