PDA

View Full Version : Tutorial 2 - Help !


NATO308
30-03-2009, 03:56 PM
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 thì mình đã hiểu cách tính . Nhưng cái số 0x8020 thì tính như thế nào vậy . Trong tutorial 2, anh Nam có nói rằng : đó là thông tin về nguồn clock, prescaler, chế độ timer.......nhưng mình ko hiểu làm thế nào có số đó. Ai giúp với !

Mình đã tìm thấy câu trả lời rồi ! Del bài nhưng ko del được.

namqn
30-03-2009, 04:33 PM
...
Cái số 0xF424 kia thì mình đã hiểu cách tính . Nhưng cái số 0x8020 thì tính như thế nào vậy . Trong tutorial 2, anh Nam có nói rằng : đó là thông tin về nguồn clock, prescaler, chế độ timer.......nhưng mình ko hiểu làm thế nào có số đó. Ai giúp với !
Cái số đó của thanh ghi T1CON tính theo mục 12-3 (Timer 1 là Type A timer) trong tài liệu "dsPIC30F Family Reference Manual" (không biết tôi còn phải nhắc về tài liệu này bao nhiêu lần nữa). Tính như sau:

- bit 15 là TON: '1' là bật, và '0' là tắt
- bit 13 là TSIDL: '1' là ngưng chạy khi CPU ở mode idle, và '0' là chạy liên tục
- bit 6 là TGATE: '1' là cho phép dùng gate (xem sơ đồ khối hình 12-1), và '0' là không cho phép dùng gate
- bit <5:4> là TCKPS<1:0>: là các bit dùng để chọn giá trị prescale (chia trước)
- bit 2 là TSYNC: '1' là có đồng bộ với clock ngoài, và '0' là không đồng bộ với clock ngoài
- bit 1 là TCS: '1' là dùng clock ngoài ở chân TxCK (x = 1 cho Timer 1), và '0' là dùng Fcy làm clock

Các bit còn lại không được hiện thực, và xem là có giá trị '0'. Tổng hợp các thông tin trên, nếu cần bật Timer 1, cho nó chạy liên tục, không dùng gate, với prescale bằng 1:64, không cần đồng bộ với clock ngoài (vì sẽ không dùng clock ngoài), và dùng Fcy làm clock, ta có giá trị nhị phân: 0b1000 0000 0010 0000 = 0x8020.

Thân,