PDA

View Full Version : Thắc mắc nhờ các cao thủ chỉ giúp


binhlt
18-11-2008, 02:21 PM
Tôi đang tập làm PIC32 bắt đầu với quyển sách "Programming 32-bit Microcontrollers in C: Exploring the PIC32 by Lucio Di Jasio" trong quá trình làm tôi dùng MPLAB SIM để debug nhưng với đoạn code sau: (trong ví dụ phần thứ 2 ngày thứ 7 của quyển sách trên)

OpenTimer45(T4_ON | T4_SOURCE_INT, 0);
// clear the 32-bit timer count
WriteTimer45(0);
FFT();
// read the timer count
t1111 = ReadTimer45(); //t1111 luôn =0 là sao????????????????

không hiểu sao t1111 luôn trả về giá trị = 0. Các bác đi trước có kinh nghiệm xin chỉ giúp. Tôi cũng up luôn cả phần ví dụ đó lên đây nếu tiện các bác xem hộ. Thanks

herrtien
18-11-2008, 04:28 PM
Bạn chỉ cần đặt trước PR4 với giá trị phù hợp là được. Chúc thành công!

binhlt
21-11-2008, 11:22 AM
Đã thương thì thương cho trót bạn có thể cho biết PR4 phải đặt bằng bao nhiêu không? Theo mình thì MPLAB SIM không debug được giá trị trả về của time thì đúng hơn

herrtien
21-11-2008, 01:41 PM
PR=0x8000, chạy tốt với MPLAB SIM. Nếu bạn nói là không debug được với timer là sai. Bạn hãy thử lại xem.

binhlt
22-11-2008, 10:39 AM
Thực sự là vẫn không thể hiểu nổi. Đoạn code đó nếu mình chạy trên PIC32 Starter Kit thì đúng là lấy được t1111 nhưng chạy trên MPLAB SIM thì chỉ có giá trị = 0 kể cả đặt PR4=0x8000 như bạn nói. Nếu có thể bạn thử chạy cả đoạn code mình đã viết thử xem thì mới có thể nói chính xác được

herrtien
23-11-2008, 09:18 AM
Bạn thử lại đi nhé, tôi đã sửa đúng đoạn code của bạn và kết quả chạy tốt.

binhlt
25-11-2008, 01:37 PM
Thanks bạn rất nhiều. Bạn đã rất nhiệt tình giúp mình

binhlt
25-11-2008, 02:24 PM
Nguyên nhân lúc đầu mình dùng MPLAB SIM không lấy được giá trị vì PR4 đặt sai chỗ (chắc do sự kết hợp của code = C và việc gán thẳng giá trị vào thanh ghi) từ đó rút ra kết luận là giá trị của PR4 phải được đặt sau lệnh OpenTimer45(); nếu start timer45 bằng T4CONSET=0x8000 thì không cần thiết phải đặt phía sau.
Cuối cùng vì timer45 là timer 32 bit nên PR4 cũng phải đặt là 32 bit ví dụ PR4 = 0xFFFFFFFF; // Load PR4 and PR5