Bộ định thời 8051

• Có 2 bộ định thời 8 bit, 16 bit 8052 có thêm bộ định thời 16 bit •Xác định một khoảng thời gian •Đếm sự kiện • Tạo tốc độ baud trong truyền thông nối tiếp

1

Electrical Engineering

Cách đếm timer

• Bộ định thời, dù đếm thời gian hay đếm sự

kiện đều luôn luôn đếm tăng

• Giá trị bắt đầu đếm được xác định bởi phần

mềm

• Khi bộ định thời đếm hết thì chương trình sẽ bật tắc cờ tràn, dấu hiệu cho phép thực hiện chương trình tiếp theo

2

Electrical Engineering

1

Các thanh ghi định thời

SFR Name Description SFR Address

TH0 Timer 0 High Byte 8Ch

TL0 Timer 0 Low Byte 8Ah

TH1 Timer 1 High Byte 8Dh

TL1 Timer 1 Low Byte 8Bh

TCON Timer Control 88h

3

Electrical Engineering

TMOD Timer Mode 89h

Ví dụ giá trị

• Timer bắt đầu đếm từ 1000 • MOV TH0,#03 • MOV TL0, #232d

– 3 X 256 + 232 = 1000

4

Electrical Engineering

2

Các chế độ của bộ định thời, TMOD

5

Electrical Engineering

Chế độ làm việc

TxM1 TxM0 Timer Mode Description of Mode

0 0 0 13-bit Timer.

0 1 1 16-bit Timer

1 0 2 8-bit auto-reload

6

Electrical Engineering

3

1 1 3 Split timer mode

Chế độ 13 bit

• Chế độ này dùng tương thích với VXL cũ

và không được sử dụng hiện nay

7

Electrical Engineering

Mode 1, 16 bit định thời

• Bộ đếm sẽ đếm tới – 65536, sau đó bộ đếm

sẽ quay lại 0

• Giá trị lớn nhất TL0 – 255 • Giá trị lớn nhất TH0 – 255 • Không tự động nạp lại

8

Electrical Engineering

4

Mode 2, 8 bit định thời

• Tự động nạp lại ở chế độ 8 bít • THx giữ giá trị khởi động để nạp • TLx sẽ đếm tới FF và quay trở lại TH • Ưng dụng tạo xung PWM và dùng trong

cổng nối tiếp

9

Electrical Engineering

Mode 3, chế độ định thời chia xẻ

• Tạo nên 3 bộ định thời • Bộ định thời 0 gồm 2 bộ định thời 8 bit • Bộ định thời 1 có thể dùng bất cứ chế độ

nào

10

Electrical Engineering

5

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

Bit Name Bit Address Explanation of Function Timer

7 TF1 8Fh Timer 1 Overflow. Bit này sẽ bật khi Timer 1 tràn 1

6 TR1 8Eh Timer 1 Run. Khởi động và dừng Timer 1 1

5 TF0 8Dh Timer 0 Overflow. Bit này sẽ bật khi Timer 0 tràn 0

11

Electrical Engineering

4 TR0 8Ch Timer 0 Run. Khởi động và dừng Timer 0. 0

Ví dụ về khởi động Timer

• Đặt Timer 0 ở mode 1 • Đặt Timer 1 ở mode 1

TR0; Dừng Timer 0

– Mov TMOD, #00010001B TR0 – Setb – Hoặc – Clr – Đợi cơ tràn xuất hiện – Wait: JNB TF1, Wait

12

Electrical Engineering

6

Ví dụ về đọc giá trị bộ định thời

REPEAT: MOV A,TH0

MOV R0,TL0

• Đọc byte cao • Đọc byte thấp • Đọc lại byte cao lần nữa

CJNE A,TH0,REPEAT

và so sánh

13

Electrical Engineering

...

Đếm sự kiện

JNB P1.0,$ Đợi xe

• Sử dụng thanh ghi

TMOD

JB P1.0,$ Chờ xe đi qua

• Đọc giá trị T0 hoặc T1

14

Electrical Engineering

7

INC COUNTER Tăng số đếm

Ví dụ

• Viết chương trình tạo dao động tần số

10KHz trên chân P1.0

• 10 KHZ tương đương với chu kỳ là 100μS, với thời gian mức thấp 50 μS, mức cao là 50μS.

• Giả thiết làm việc với tần số 12 MHz

15

Electrical Engineering

Ngắt (Interrupt)

• Tạm ngưng công việc hiện thời và chuyển sang thực hiện chương trình khác và quay trở lại chương trình cũ sau khi kết thúc

• Mục đích cho phép xử lý “song song” nhiều

công việc

• Tạo tính hiệu quả khi làm việc

16

Electrical Engineering

8

Ví dụ về tính hiệu quả ngắt

Ch−¬ng tr×nh trªn ph¶i chê bé ®Þnh thêi

JNB TF0, do_smt CPL P3.0 CLR TF0

do_smt: ...

Gi¶ sö bé ®Þnh thêi ®Õm tõ 0 – 65536

Gi¶ sö ch−¬ng tr×nh do_smt thùc hiÖn mÊt 100 chu kú m¸y

VÝ dô ch−¬ng trnh ng¾t CPL P3.0 RETI

Tæng cæng ph¶i kiÓm tra 655 lÇn

17

Electrical Engineering

Các sự kiện xảy ra ngắt

• Timer 0 tràn • Timer 1 tràn • Truyền và nhận tín hiệu nối tiếp • Sự kiện ngoài 0 • Sự kiện ngoài 0

18

Electrical Engineering

9

Bảng Vector ngắt

Interrupt Flag Interrupt Handler Address

External 0 IE0 0003h

Khi x¶y ra ng¾t, th× con trá PC sÏ nh¶y vÒ vÞ trÝ ng¾t t−¬ng øng trong b¶ng

Timer 0 TF0 000Bh

External 1 IE1 0013h

Timer 1 TF1 001Bh

19

Electrical Engineering

Serial RI/TI 0023h

Khởi động ngắt

Bit Name Bit Address Explanation of Function

EA AFh Cho phép ngắt toàn cục Interrupt Enable/Disable 7

SETB ET1 SETB EA

6 - AEh Undefined

5 - ADh Undefined

4 ES ACh Cho phép ngắt nối tiếp

3 ET1 ABh Cho phép ngắt Timer 1

2 EX1 AAh Cho phép ngắt External 1

1 ET0 A9h Cho phép ngắt nối tiếp Timer 0

20

Electrical Engineering

10

0 EX0 A8h Cho phép ngắt External 0

Ưu tiên ngắt

• Ngắt có ưu tiên cao sẽ xảy ra trước ngắt có

ưu tiên thấp

• 2 ngắt có cùng ưu tiên thì ngắt nào xảy ra

trước sẽ chạy trước

21

Electrical Engineering

Hoạt động VXL khi xảy ra ngắt

• Cất bộ đếm PC vào stack • Trong trường hợp Timer hoặc Event ngắt

xảy ra, cờ ngắt sẽ tự động xóa

• Chương trình sẽ nhảy về địa chỉ vector ngắt • Thực hiện chương trình ngắt

22

Electrical Engineering

11

Bảo vệ thanh ghi khi xảy ra ngắt

• CLR C ;Clear carry

MOV A,#25h ;Load the accumulator with 25h ADDC A,#10h ;Add 10h, with carry • Ngắt có thể làm thay đổi giá trị thanh ghi

23

Electrical Engineering

Các lệnh dùng bảo vệ

•C¸c thanh ghi cÇn b¶o vÖ

•PSW

•DPTR (DPH/DPL)

•PSW

PUSH ACC PUSH PSW ................ POP PSW POP ACC

•ACC

•B

•Registers R0-R7

24

Electrical Engineering

12

Các lỗi khi sử dụng ngắt

• Quên không bảo vệ thanh ghi • Quên không trả lại giá trị sau khi kết thúc

ngắt

• Trả về ngắt dùng ret thay vì dùng reti

25

Electrical Engineering

Ví dụ tạo xung vuông dùng ngắt

• Viết chương trình tạo dao động tần số

10KHz trên chân P1.0

• 10 KHZ tương đương với chu kỳ là 100μS, với thời gian mức thấp 50 μS, mức cao là 50μS.

• Giả thiết làm việc với tần số 12 MHz

26

Electrical Engineering

13