![]() |
Tính thời gian tràn cho Timer?
Em mới học cái này, thấy anh namnq có gửi lên máy bài tutorial, em thắc mắc một chút:
1. Thời gian tràn của timer tính như thế nào? Trong ví dụ, void Init_TMR1(void) { TMR1 = 0; //Xoa so dem trong TMR1 PR1 = 0xF424; //Nguong tran la 0,5 giay tuong ung //voi clock = 32 MHz _T1IF = 0; //Xoa co ngat cua Timer 1 T1CON = 0x8020; //Dung fcy lam clock, prescale = 1:64 _T1IE = 1; //Cho phep ngat Timer 1 Cái số 0xF424 kia tính thế nào để ra được là tràn 0.5s. Có công thức tính ko? 2. Prescale là gì? Công dụng của nó ra sao? Có mấy câu hỏi, ai biết chỉ dùm em với. |
Prescaler là bộ chia trước. Trước khi xung nhịp được đưa vào cho bộ đếm, thì nó đã được chia, ở ví dụ trên là chia 64.
Với clock = 32MHz, tốc độ chip sẽ là 8MIPS (trừ dòng pic33, pic24), do đó chu kỳ lệnh (Tcy) là 125ns. Vì timer tràn khi giá trị timer = với giá trị trong thanh ghi period, nên thời gian tràn của timer sẽ được tính: T = Tcy * prescaler * period = (125e-9 * 64 * 62500) = 0.5s |
Trích:
http://www.picvietnam.com/forum//showthread.php?t=974 Câu hỏi 2 thì bien_van_khat đã trả lời rồi. Thân, |
Cảm ơn các anh nhiều lắm.
|
còn 1 vấn đề nữa, nếu clock là 32MHz, làm sao suy ra được tốc độ chip là 8MIPS?
|
Trích:
PIC24 và dsPIC33F dùng 2 xung clock cho 1 lệnh, như vậy số MIPS (triệu lệnh/giây) = tần số clock (tính bằng MHz)/2. Câu hỏi của bạn cho thấy bạn chưa hiểu lắm về vi điều khiển, cũng như chưa biết cách diễn dịch những thông tin trong datasheet (ví dụ, trong datasheet của dsPIC30F4012 tại bảng 24-16, chú ý số 3 có nói 'there are 4 Q clocks per instruction cycle'). Đề nghị bạn xem lại những vấn đề cơ bản trước khi chuyển sang dùng dsPIC. Thân, |
Múi giờ GMT. Hiện tại là 06:40 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