chương 3: hoạt động định thời 03 timer.pdf · 2009-09-08 · ví dụ01 timer mode0...

34
Chương 3: Hot động định thi

Upload: others

Post on 30-May-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Chương 3: Hoạt động định thời 03 timer.pdf · 2009-09-08 · Ví dụ01 timer MODE0 •Lập trình cho VĐK có sơđồmạch nhưhình dưới, tạo LED sáng 8000µS

Chương 3: Hoạt động định thời

Page 2: Chương 3: Hoạt động định thời 03 timer.pdf · 2009-09-08 · Ví dụ01 timer MODE0 •Lập trình cho VĐK có sơđồmạch nhưhình dưới, tạo LED sáng 8000µS

3.1 Mở đầu

Page 3: Chương 3: Hoạt động định thời 03 timer.pdf · 2009-09-08 · Ví dụ01 timer MODE0 •Lập trình cho VĐK có sơđồmạch nhưhình dưới, tạo LED sáng 8000µS

3.1 Mở đầu

• 8051 có 6 thanh ghi chức năng đặc biệt• 8052 có thêm 5 thanh ghi đặc biệt

Page 4: Chương 3: Hoạt động định thời 03 timer.pdf · 2009-09-08 · Ví dụ01 timer MODE0 •Lập trình cho VĐK có sơđồmạch nhưhình dưới, tạo LED sáng 8000µS

3.2 Thanh ghi chế độ định thời

Page 5: Chương 3: Hoạt động định thời 03 timer.pdf · 2009-09-08 · Ví dụ01 timer MODE0 •Lập trình cho VĐK có sơđồmạch nhưhình dưới, tạo LED sáng 8000µS

3.2 Thanh ghi chế độ định thời(TMOD)

Page 6: Chương 3: Hoạt động định thời 03 timer.pdf · 2009-09-08 · Ví dụ01 timer MODE0 •Lập trình cho VĐK có sơđồmạch nhưhình dưới, tạo LED sáng 8000µS

3.3 Thanh ghi điều khiển định thời (TCON)

Page 7: Chương 3: Hoạt động định thời 03 timer.pdf · 2009-09-08 · Ví dụ01 timer MODE0 •Lập trình cho VĐK có sơđồmạch nhưhình dưới, tạo LED sáng 8000µS

3.4 Các chế độ định thời và cờ tràn

Page 8: Chương 3: Hoạt động định thời 03 timer.pdf · 2009-09-08 · Ví dụ01 timer MODE0 •Lập trình cho VĐK có sơđồmạch nhưhình dưới, tạo LED sáng 8000µS

3.4 Các chế độ định thời và cờ tràn

Page 9: Chương 3: Hoạt động định thời 03 timer.pdf · 2009-09-08 · Ví dụ01 timer MODE0 •Lập trình cho VĐK có sơđồmạch nhưhình dưới, tạo LED sáng 8000µS

3.5 Nguồn xung clock định thời

Page 10: Chương 3: Hoạt động định thời 03 timer.pdf · 2009-09-08 · Ví dụ01 timer MODE0 •Lập trình cho VĐK có sơđồmạch nhưhình dưới, tạo LED sáng 8000µS

3.6 Khởi động, dừng và điều khiển các bộ định thời

Page 11: Chương 3: Hoạt động định thời 03 timer.pdf · 2009-09-08 · Ví dụ01 timer MODE0 •Lập trình cho VĐK có sơđồmạch nhưhình dưới, tạo LED sáng 8000µS

3.6 Khởi động, dừng và điều khiển các bộ định thời

Page 12: Chương 3: Hoạt động định thời 03 timer.pdf · 2009-09-08 · Ví dụ01 timer MODE0 •Lập trình cho VĐK có sơđồmạch nhưhình dưới, tạo LED sáng 8000µS

Ví dụ 01 timer MODE0• Lập trình cho VĐK có sơ đồ mạch như hình dưới, tạo

LED sáng 8000µS và tắt 8000µS liên tục.

XTAL218

XTAL119

ALE30

EA31

PSEN29

RST9

P0.0/AD0 39

P0.1/AD1 38

P0.2/AD2 37

P0.3/AD3 36

P0.4/AD4 35

P0.5/AD5 34

P0.6/AD6 33

P0.7/AD7 32

P1.01

P1.12

P1.23

P1.34

P1.45

P1.56

P1.67

P1.78

P3.0/RXD 10

P3.1/TXD 11

P3.2/INT0 12

P3.3/INT1 13

P3.4/T0 14

P3.7/RD 17P3.6/WR 16P3.5/T1 15

P2.7/A15 28

P2.0/A8 21

P2.1/A9 22

P2.2/A10 23

P2.3/A11 24

P2.4/A12 25

P2.5/A13 26

P2.6/A14 27

U1

AT89C51

X112MHz

+5V

+5V

R110k

+5V

C110uF

C2

30

C3

30

D1LED-R

Page 13: Chương 3: Hoạt động định thời 03 timer.pdf · 2009-09-08 · Ví dụ01 timer MODE0 •Lập trình cho VĐK có sơđồmạch nhưhình dưới, tạo LED sáng 8000µS

• Làm sao để có được 8000µs?• Lập trình như thế nào?

Page 14: Chương 3: Hoạt động định thời 03 timer.pdf · 2009-09-08 · Ví dụ01 timer MODE0 •Lập trình cho VĐK có sơđồmạch nhưhình dưới, tạo LED sáng 8000µS

Tính toán thời gian

(½) chu kỳ đèn chớp tắt = 8000(μS/S)

f = 12MHz => Osc = f/12 = 1MHz => T = 1µS

=>> Delay = 8000 xung

Page 15: Chương 3: Hoạt động định thời 03 timer.pdf · 2009-09-08 · Ví dụ01 timer MODE0 •Lập trình cho VĐK có sơđồmạch nhưhình dưới, tạo LED sáng 8000µS

Cách khai báo cho timer• Chọn Timer0:

• Delay = 8000 xung

⇒ Sử dụng Mode 0: 13bit => M0=0; M1=0.

⇒ Sử dụng xung nội => C/T=0, không sử dụng ngắt ET=0

LSBTimer0Timer1MSB

M0M1C/TGateM0M1C/TGate

000xM0M1C/TGate

TMOD &= 0xF0 // Xoá 4 bit thấp của thanh ghi TMOD

TMOD |= 0x00 // cho bit M0 =0; M1=0

Page 16: Chương 3: Hoạt động định thời 03 timer.pdf · 2009-09-08 · Ví dụ01 timer MODE0 •Lập trình cho VĐK có sơđồmạch nhưhình dưới, tạo LED sáng 8000µS

• Không sử dụng ngắt => ET0 = 0

• Xoá cờ tràn: TF0 = 0

• Khởi động timer: TR0=1

• Ngưng timer: TR0 = 0

• 8000 = 1F40h => dịch trái 3 bit vì Mode0 làtimer sử dụng 13 bit cao => FA00h

Not (FA00h) = 05FFh => TL0 = FFh; TH0=05h

Page 17: Chương 3: Hoạt động định thời 03 timer.pdf · 2009-09-08 · Ví dụ01 timer MODE0 •Lập trình cho VĐK có sơđồmạch nhưhình dưới, tạo LED sáng 8000µS

#include <regx51.h>sbit P_LED = P2^0; bit S_LED; unsigned int x;void main(void){ P2=0x00;

TMOD &= 0xF0;TMOD |= 0x00; ET0 = 0; while(1){ TH0 = 0x05;

TL0 = 0xFF; TF0 = 0; TR0 = 1; while (TF0 == 0) { x++; }TR0 = 0; /* Stop Timer 0 */S_LED = !S_LED; P_LED = S_LED;}

}

Page 18: Chương 3: Hoạt động định thời 03 timer.pdf · 2009-09-08 · Ví dụ01 timer MODE0 •Lập trình cho VĐK có sơđồmạch nhưhình dưới, tạo LED sáng 8000µS

Ví dụ 02 MODE1• Lập trình cho VĐK có sơ đồ mạch như hình dưới, tạo

LED sáng 0.05S và tắt 0.05S liên tục.

XTAL218

XTAL119

ALE30

EA31

PSEN29

RST9

P0.0/AD0 39

P0.1/AD1 38

P0.2/AD2 37

P0.3/AD3 36

P0.4/AD4 35

P0.5/AD5 34

P0.6/AD6 33

P0.7/AD7 32

P1.01

P1.12

P1.23

P1.34

P1.45

P1.56

P1.67

P1.78

P3.0/RXD 10

P3.1/TXD 11

P3.2/INT0 12

P3.3/INT1 13

P3.4/T0 14

P3.7/RD 17P3.6/WR 16P3.5/T1 15

P2.7/A15 28

P2.0/A8 21

P2.1/A9 22

P2.2/A10 23

P2.3/A11 24

P2.4/A12 25

P2.5/A13 26

P2.6/A14 27

U1

AT89C51

X112MHz

+5V

+5V

R110k

+5V

C110uF

C2

30

C3

30

D1LED-R

Page 19: Chương 3: Hoạt động định thời 03 timer.pdf · 2009-09-08 · Ví dụ01 timer MODE0 •Lập trình cho VĐK có sơđồmạch nhưhình dưới, tạo LED sáng 8000µS

Tính toán thời gian

(½) chu kỳ đèn chớp tắt = 0,05(S/S) = 50.000(µS/S)

f = 12MHz => Osc = f/12 = 1MHz => T = 1µS

=>> Delay = 50.000 xung

Page 20: Chương 3: Hoạt động định thời 03 timer.pdf · 2009-09-08 · Ví dụ01 timer MODE0 •Lập trình cho VĐK có sơđồmạch nhưhình dưới, tạo LED sáng 8000µS

Cách khai báo cho timer• Chọn Timer0:

• Delay = 50.000 xung

⇒ Sử dụng Mode 1: 16bit => M0=1; M1=0.

⇒ Sử dụng xung nội => C/T=0, không sử dụng ngắt ET=0

LSBTimer0Timer1MSB

M0M1C/TGateM0M1C/TGate

100xM0M1C/TGate

TMOD &= 0xF0 // Xoá 4 bit thấp của thanh ghi TMOD

TMOD |= 0x01 // cho bit M0 =1

Page 21: Chương 3: Hoạt động định thời 03 timer.pdf · 2009-09-08 · Ví dụ01 timer MODE0 •Lập trình cho VĐK có sơđồmạch nhưhình dưới, tạo LED sáng 8000µS

• Không sử dụng ngắt => ET0 = 0

• Xoá cờ tràn: TF0 = 0

• Khởi động timer: TR0=1

• Ngưng timer: TR0 = 0

• 50.000 = C350h Not (C350h) = 3CAFh =>

3CAFh => TL0 = AFh; TH0=3Ch

Page 22: Chương 3: Hoạt động định thời 03 timer.pdf · 2009-09-08 · Ví dụ01 timer MODE0 •Lập trình cho VĐK có sơđồmạch nhưhình dưới, tạo LED sáng 8000µS

#include <regx51.h>sbit P_LED = P2^0; bit S_LED; unsigned int x;void main(void){ P2=0x00;

TMOD &= 0xF0;TMOD |= 0x01; ET0 = 0; while(1){ TH0 = 0x3C;

TL0 = 0xAF; TF0 = 0; TR0 = 1; while (TF0 == 0) { x++; }TR0 = 0; /* Stop Timer 0 */S_LED = !S_LED; P_LED = S_LED;}

}

Page 23: Chương 3: Hoạt động định thời 03 timer.pdf · 2009-09-08 · Ví dụ01 timer MODE0 •Lập trình cho VĐK có sơđồmạch nhưhình dưới, tạo LED sáng 8000µS

Ví dụ 03• Lập trình cho VĐK có sơ đồ mạch như hình dưới, tạo

LED sáng 1S và tắt 1S liên tục.

XTAL218

XTAL119

ALE30

EA31

PSEN29

RST9

P0.0/AD0 39

P0.1/AD1 38

P0.2/AD2 37

P0.3/AD3 36

P0.4/AD4 35

P0.5/AD5 34

P0.6/AD6 33

P0.7/AD7 32

P1.01

P1.12

P1.23

P1.34

P1.45

P1.56

P1.67

P1.78

P3.0/RXD 10

P3.1/TXD 11

P3.2/INT0 12

P3.3/INT1 13

P3.4/T0 14

P3.7/RD 17P3.6/WR 16P3.5/T1 15

P2.7/A15 28

P2.0/A8 21

P2.1/A9 22

P2.2/A10 23

P2.3/A11 24

P2.4/A12 25

P2.5/A13 26

P2.6/A14 27

U1

AT89C51

X112MHz

+5V

+5V

R110k

+5V

C110uF

C2

30

C3

30

D1LED-R

Page 24: Chương 3: Hoạt động định thời 03 timer.pdf · 2009-09-08 · Ví dụ01 timer MODE0 •Lập trình cho VĐK có sơđồmạch nhưhình dưới, tạo LED sáng 8000µS

Tính toán thời gian

(½) chu kỳ đèn chớp tắt = 1(S/S) = 1.000.000(µS/S)

f = 12MHz => Osc = f/12 = 1MHz => T = 1µS

=>> Delay = 1.000.000 xung = 50.000*20

• Sử dụng timer1 ở Mode1 đếm 50.000 xung và một biến đếm20 xung.

• 50.000 = C350h Not (C350h) = 3CAFh => 3CAFh => TL1 = AFh; TH1=3Ch;

Page 25: Chương 3: Hoạt động định thời 03 timer.pdf · 2009-09-08 · Ví dụ01 timer MODE0 •Lập trình cho VĐK có sơđồmạch nhưhình dưới, tạo LED sáng 8000µS

Cách khai báo cho timer• Sử dụng Timer1 Mode1:=> M0=1; M1=0.

⇒ Sử dụng xung nội => C/T=0, không sử dụng ngắt ET=0

⇒ Và Gate=0

LSBTimer0Timer1MSB

M0M1C/TGateM0M1C/TGate

xxxx1000

TMOD &= 0x0F; // xoá 4 bit cao cua TMOD

TMOD |= 0x10; //Khai báo cho timer1 ở Mode1

Page 26: Chương 3: Hoạt động định thời 03 timer.pdf · 2009-09-08 · Ví dụ01 timer MODE0 •Lập trình cho VĐK có sơđồmạch nhưhình dưới, tạo LED sáng 8000µS

#include <regx51.h>sbit P_LED = P2^0; bit S_LED; unsigned char x; unsigned

char y;void main(void)

{ P2=0x00; //Port2 xuat tin hieuTMOD &= 0x0F; // xoa 4 bit cao cua TMODTMOD |= 0x10; // xac dinh timer1-mode1ET1 = 0; // khong su dung che do ngatwhile(1)

{ TH1=0x3C;TL1=0xAF;TF1=0;TR1=1;while (TF1==0){ x++; } TR1=0; y++;if (y==20) {y=0; S_LED = !S_LED;P_LED = S_LED;}} }

Page 27: Chương 3: Hoạt động định thời 03 timer.pdf · 2009-09-08 · Ví dụ01 timer MODE0 •Lập trình cho VĐK có sơđồmạch nhưhình dưới, tạo LED sáng 8000µS

Ví dụ 04 Mode2

• Lập trình cho VĐK, tạo tần số f=2KHz raở chân P2.0.

Page 28: Chương 3: Hoạt động định thời 03 timer.pdf · 2009-09-08 · Ví dụ01 timer MODE0 •Lập trình cho VĐK có sơđồmạch nhưhình dưới, tạo LED sáng 8000µS

Tính toán thời gian

(½) chu kỳ đèn = 1/(2*2000)(S/S) = 250(µS/S)

f = 12MHz => Osc = f/12 = 1MHz => T = 1µS

=>> Delay = 250 xung

Sử dụng timer1 ở Mode2 đếm 250 xung.

250 = FAh Not (FAh) = 05h => TH1=05h;

Page 29: Chương 3: Hoạt động định thời 03 timer.pdf · 2009-09-08 · Ví dụ01 timer MODE0 •Lập trình cho VĐK có sơđồmạch nhưhình dưới, tạo LED sáng 8000µS

Cách khai báo cho timer• Sử dụng Timer1 Mode2:=> M0=0; M1=1.

⇒Sử dụng xung nội => C/T=0, không sử dụng ngắtET=0

⇒Và Gate=0

LSBTimer0Timer1MSB

M0M1C/TGateM0M1C/TGate

xxxx0100

TMOD &= 0x0F; // xoá 4 bit cao cua TMOD

TMOD |= 0x20; //Khai báo cho timer1 ở Mode2

Page 30: Chương 3: Hoạt động định thời 03 timer.pdf · 2009-09-08 · Ví dụ01 timer MODE0 •Lập trình cho VĐK có sơđồmạch nhưhình dưới, tạo LED sáng 8000µS

#include <regx51.h>sbit Pout = P2^0;bit Status;void main(void)

{P2=0x00; //Port2 xuat tin hieuTMOD &= 0x0F; // xoa 4 bit cao cua TMODTMOD |= 0x20; // xac dinh timer1-mode1ET1 = 0; // khong su dung che do ngatTH1=0x05; //Dua 05h vao byte cao cua timer1while(1)

{TF1=0;TR1=1;while (TF1==0) {}Status = !Status; Pout = Status;}

}

Page 31: Chương 3: Hoạt động định thời 03 timer.pdf · 2009-09-08 · Ví dụ01 timer MODE0 •Lập trình cho VĐK có sơđồmạch nhưhình dưới, tạo LED sáng 8000µS

Ví dụ 05:Sử dụng counter để đếm sản phẩm chạy tên băngtruyền, khi đủ 25 sản phẩm thì xuất tất cả tín hiệu ở

Port 2 lên mức 1 trong 1s.

Page 32: Chương 3: Hoạt động định thời 03 timer.pdf · 2009-09-08 · Ví dụ01 timer MODE0 •Lập trình cho VĐK có sơđồmạch nhưhình dưới, tạo LED sáng 8000µS

XTAL218

XTAL119

ALE30

EA31

PSEN29

RST9

P0.0/AD0 39

P0.1/AD1 38

P0.2/AD2 37

P0.3/AD3 36

P0.4/AD4 35

P0.5/AD5 34

P0.6/AD6 33

P0.7/AD7 32

P1.01

P1.12

P1.23

P1.34

P1.45

P1.56

P1.67

P1.78

P3.0/RXD 10

P3.1/TXD 11

P3.2/INT0 12

P3.3/INT1 13

P3.4/T0 14

P3.7/RD 17P3.6/WR 16P3.5/T1 15

P2.7/A15 28

P2.0/A8 21

P2.1/A9 22

P2.2/A10 23

P2.3/A11 24

P2.4/A12 25

P2.5/A13 26

P2.6/A14 27

U1

AT89C51

X112MHz

+5V

+5V

R110k

+5V

C110uF

C2

30

C3

30

12345678

2019181716151413

9 1210 11

U2

LED-BARGRAPH-RED

Page 33: Chương 3: Hoạt động định thời 03 timer.pdf · 2009-09-08 · Ví dụ01 timer MODE0 •Lập trình cho VĐK có sơđồmạch nhưhình dưới, tạo LED sáng 8000µS

#include <regx51.h> #include <stdio.h>unsigned char x; unsigned int y; unsigned int z;void main(void)

{ TMOD &= 0xF0; // xoa 4 bit thap cua TMODTMOD |= 0x05; // Timer0 lam counterET0 = 0; z=0; TF0=0; TR0=1; P2=0x00;

while (1){z = TH0; z <<= 8; z|= TL0;if (z==5)

{TR0=0; TL0=0; TH0=0;P2=0xFF; // mo port2 = FF//delay 1sTMOD &= 0x0F; // xoa 4 bit cao cua

TMOD

Page 34: Chương 3: Hoạt động định thời 03 timer.pdf · 2009-09-08 · Ví dụ01 timer MODE0 •Lập trình cho VĐK có sơđồmạch nhưhình dưới, tạo LED sáng 8000µS

TMOD |= 0x10; // xac dinh timer1-mode1ET1 = 0; // khong su dung che do ngatfor(y=0;y<=20;y++)

{TH1=0x3C; TL1=0xAF; TF1=0;TR1=1;while (TF1==0)

{x++;}TR1=0;}

P2=0x00;TR0=1;}}}