Timer

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 23

Lesson 5


TIMER
Bài 5: TIMER

T0,T2: 8bit
T1:16bit

Slide 2
TIMER

5.1 TIMER0 MODULE

Ngắt khi bị tràn từ FFH về 00H.

Slide 3
TIMER

5.2 TIMER1 MODULE

Slide 4
TIMER

5.3 TIMER2 MODULE

Slide 5
TIMER

5.4 Thiết lập Timer trong CCS

Slide 6
TIMER

Bước 1: Chọn menu “Timers” → “Enabled” Timer → chọn “Resolution”

Slide 7
TIMER

Bước 2: Chọn menu “Interrupts” → check Timer đã thiết lập

Slide 8
TIMER

#include <main.h>

#INT_RTCC
void RTCC_isr(void)
{

}
void main()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1|RTCC_8_bit); //51,2 us overflow

enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);
while(TRUE)
{
//TODO: User Code
}
}

Slide 9
TIMER

Hướng dẫn: Giả sử chọn setup_timer0(RTCC_INTERNAL|RTCC_DIV_2)

Fcy = Fosc/(4*Prescaler) = 20.000.000/(4*2) = 2.500.000(Hz)

→ Timer sẽ tăng sau thời gian = 1/Fcy = 0.4(us)

→ Thời gian delay = 0,4 * 256 = 51,2 (us)

Thời gian delay 1s = 1.000.000us = 0.4 * 250 * 10000

Timer đếm từ 6 đến 255 sẽ tràn, số lần lặp lại 10.000 lần sẽ được thời gian delay 1s.

Chú ý: Timer0 là Timer 8 bit nên giá trị đếm sẽ từ 0 đến 255, sau đó quay về 0 thì
mới xãy ra tràn.

Slide 10
TIMER

•Hàm khởi tạo giá trị cho timer0:

set_timer0(value);

•Hàm khởi tạo giá trị cho timer1:

set_timer1(value);

•Hàm khởi tạo giá trị cho timer2:

set_timer2(value);

Slide 11
TIMER
#include <main.h>

Int16 dem;
#INT_RTCC
void RTCC_isr(void)
{
set_timer0(6);
dem++;
}
void main()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1|RTCC_8_bit); //51,2 us overflow
enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);
set_timer0(6);
while(TRUE)
{
//TODO: User Code
}
}
Slide 12
TIMER

while(1){
if (dem == 10000)
{
// code 1
dem=0;
}
}

Slide 13
TIMER

Ví dụ 1: Viết chương trình sáng – tắt LED D1 chu kỳ 1s dùng ngắt Timer 0

Slide 14
TIMER

#include <main.h>
int8 led7[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};
int16 dem;

#INT_RTCC
void RTCC_isr(void)
{
set_timer0(6);
dem ++ ;
}
void main()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2|RTCC_8_bit); //102 us overflow
enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);
set_timer0(6);
while(TRUE)
{
//TODO: User Code
}
}
Slide 15
TIMER

while(TRUE)
{
//TODO: User Code
if(dem==10000)
{
dem=0;
output_toggle(Pin_B0);
}
}
}

Slide 16
TIMER

Ví dụ 1: Viết chương trình hiển thị từ 0-9 delay 1s dùng ngắt Timer 0

Slide 17
TIMER

#include <main.h>
int16 dem, counter;

#INT_RTCC
void RTCC_isr(void)
{
set_timer0(6);
dem ++ ;
}
void main()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2|RTCC_8_bit); //102 us overflow
enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);
set_timer0(6);
while(TRUE)
{
//TODO: User Code
}
}

Slide 18
TIMER

while(TRUE)
{
//TODO: User Code
if(dem==10000)
{
dem=0;
counter ++;
if(counter>9) counter =0; // Nếu biến counter >9 thì counter = 0
}
output_B(led7[counter]);
}
}

Slide 19
LED 7 ĐOẠN

Ví dụ 2: Viết chương trình hiển thị từ 0-99 delay 1s dùng ngắt Timer 0

Slide 20
TIMER

#include <main.h>
int8 led7[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};
int16 dem, counter;

#INT_RTCC
void RTCC_isr(void)
{
set_timer0(6);
dem ++ ;
}
void main()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2|RTCC_8_bit); //102 us overflow
enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);
set_timer0(6);
while(TRUE)
{
//TODO: User Code
}
}
Slide 21
TIMER
while(TRUE)
{
if(dem==10000)
{
dem=0;
counter ++;
if(counter>99) counter =0; // Nếu biến counter >99 thì counter = 0
}
chuc = counter/10;
dvi = counter % 10;

output_B(led7[counter]);
output_high(pin_D0);
output_low(pin_D1);
delay_ms(1);
output_low(pin_D0);

output_B(led7[dvi]);
output_high(pin_D1);
output_low(pin_D0);
delay_ms(1);
output_low(pin_D1);
}
}

Slide 22
LED 7 ĐOẠN

Bài tập 1: Viết chương trình hiển thị MSSV lên 4 led 7 đoạn
Bài tập 2: Viết chương trình hiển thị: 00-59 dung Timer (1s)
Bài tập 3: Viết chương trình hiển thị: HH:MM:SS dùng Timer (1s)

Slide 23

You might also like