Professional Documents
Culture Documents
Inverter V 3
Inverter V 3
• BOTTOM: Bộ đếm đạt tới giá trị BOTTOM khi nó có giá trị 0000h
• MAX: Bộ đếm đạt tới giá trị MAX khi nó bằng FFh (Timer 8 bit), FFFFh (Timer 16 bit)
• TOP: Giá trị TOP do người lập trình tự định nghĩa bằng việc ghi giá trị vào một thanh
ghi nào đó của Timer/Counter (sẽ đề cập sau). Khi bộ đếm đạt giá trị TOP thì thực hiện
một tác vụ gì đó.
Các bit CS (Clock Source) dùng để chọn nguồn xung clock cho bộ Timer
4/26/2019 7:56 AM NGUYEN HUY HOANG
2. TCNT1 – Timer Counter Register 1:
Đây là thanh ghi đếm 16 bit của bộ định thời 1 .Giá trị thanh ghi này tăng
• Thanh ghi lưu giá trị để so sánh với giá trị trong thanh ghi TCNT1
• Thường dùng trong các chế độ cần so sánh (PWM, CTC)
4. ICR1– Input Capture Register
• Thanh ghi lưu giá trị để so sánh với giá trị trong thanh ghi TCNT1
• Thường dùng trong các chế độ cần so sánh (PWM, CTC).
• Dùng để cập nhật giá trị bộ đếm (TCNT) khi có sự kiện ở chân ICP1
4. TIMSK– Timer Counter Interrupt Mask Register
• Bit 4 – OCIE1A: Cho phép ngắt khi giá trị OCRA1 = TCNT1
• Bit 0 – OCIE1C: Cho phép ngắt khi giá trị OCRC1 = TCNT1
6. TIFR–Timer Counter Interrupt Flag Register
• Bit 4 – OCF1A: Timer/Counter1, Output Compare A Match Flag. Khi match thì OCF1A = 1
• Bit 3 – OCF1B: Timer/Counter1, Output Compare B Match Flag. Khi match thì OCF1B = 1
• Bit 0 – OCF1C: Timer/Counter1, Output Compare B Match Flag. Khi match thì OCF1C = 1
ĐỊNH THỜI BẰNG TIMER
Normal Mode:
1s
void TMR_vInit(void)
{
/* Start timer 1 with clock prescaler CLK/1024 */
/* Resolution is 139 us */
/* Maximum time is 9.1 s */
TCCR1A = (0<<COM1A1)|(0<<COM1A0)|(0<<COM1B1)|(0<<COM1B0)
|(0<<COM1C1)|(0<<COM1C0)|(0<<WGM11) |(0<<WGM10);
sei();
}
// Clear timer overflow flag by writing a logical 1, other flags are unchanged
TIFR = (1<<TOV1);
// NOTE: This line is more efficient than using "TIFR |= (1<<TOV1);“
// Nếu không dùng ngắt thì phải clear bit TOV1 như thế này.
}
bool TMR_bHasExpired(void) void TMR_vDelay(uint16_t u16DelayMs)
{ // See if timer overflow flag is set {
if(TIFR&(1<<TOV1)) TMR_vStart(u16DelayMs);
{
while(!TMR_bHasExpired())
return TRUE;
{
}
;
else
}
{
}
return FALSE;
}
}
ĐỊNH THỜI BẰNG TIMER
CTC Mode:
https://garretlab.web.fc2.com/en/arduino/inside/arduino/wiring_analog.c/analogWrite.html
OCR1B = u16DutyCycle;
}
PWM_vSetDutyCycle((PWM_MAX_DUTY_CYCLE*(50.0/100)));
https://garretlab.web.fc2.com/en/arduino/inside/arduino/wiring_analog.c/analogWrite.html