Ngắt Timer: Trong vi điều khiển họ 89x51 có 3 bộ timer nên tương ứng sẽ

Một phần của tài liệu Giáo trình Vi điều khiển 2 (Nghề: Công nghệ kỹ thuật điều khiển và tự động hóa - Cao đẳng) - Trường CĐ Hàng hải I (Trang 101 - 107)

102

có 3 chương trình ngắt timer. Chương trình ngắt timer hoạt động tương tự như chương trình ngắt ngồi nhưng tín hiệu tác động để cho ngắt timer hoạt động là thời gian. Khoảng thời gian cho phép ngắt timer hoạt động được thiết lập bởi các thanh nghi TLx và THx của timer0, timer1 và timer2 tương ứng.

 Các thanh ghi điều khiển ngắt:

IE: Thanh ghi điều khiển cho phép ngắt

EA - ET2 ES ET1 EX1 ET0 EX0

Bit 7 Bit 0

Bit 7: EA: Bit cho phép toàn bộ ngắt được hoạt động 1 = Toàn bộ các ngắt được cho phép 0 = Cấm toàn bộ các ngắt

Bit 6: Không được định nghĩa đọc như là 0 Bit 5: ET2: Bit cho phép ngắt từ Timer2

1 = Cho phép ngắt từ Timer2 0 = Cấm ngắt Timer2

Bit 4: ES: Bit cho phép ngắt Port nối tiếp UART 1 = Cho phép ngắt từ Port nối tiếp

0 = Cấm ngắt nối tiếp Bit 3: ET1: Bit cho phép ngắt từ

Timer1 1 = Cho phép ngắt từ Timer1

0 = Cấm ngắt Timer1

Bit 2: EX1: Bit cho phép ngắt ngoài từ chân INT1 1 = Cho phép ngắt ngoài INT1 0 = Cấm ngắt ngoài INT1

Bit 1: ET0: Bit cho phép ngắt từ Timer0 1 = Cho phép ngắt từ

103 Timer0 Timer0

0 = Cấm ngắt từ Timer0

Bit 0: EX0: Bit cho phép ngắt ngoài từ chân INT0 1 = Cho phép ngắt ngoài INT0 0 = Cấm ngắt ngoài INT0

TCON: Thanh ghi điều khiển Timer1 và Timer0

TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

Bit 7 Bit 0

Bit 7: TF1: Cờ báo tràn của Timer1 1 = Timer1 xảy ra tràn 0 = Timer1 không xảy ra tràn

Chú ý: Bit này được thiết lập bởi phần cứng khi xảy ra quá trình tràn bộ đếm Timer và phải được xóa bằng phần mềm. Bit này cũng được sử dụng làm cờ báo xảy ra ngắt của Timer1

Bit 6: TR1: Bit cho phép Timer1 bắt đầu hoạt động 1 = Cho phép Timer1 hoạt động

0 = Không cho phép Timer1 hoạt động Bit 5: TF0: Cờ báo tràn của Timer0

1 = Timer0 xảy ra tràn

0 = Timer0 không xảy ra tràn

Chú ý: Bit này được thiết lập bởi phần cứng khi xảy ra quá trình tràn bộ đếm Timer và phải được xóa bằng phần mềm. Bit này cũng được sử dụng làm cờ báo xảy ra ngắt của Timer0

Bit 4: TR0: Bit cho phép Timer0 bắt đầu hoạt động 1 = Cho phép Timer0 hoạt động

0 = Không cho phép Timer0 hoạt động Bit 3: IE1: Cờ báo xảy ra ngắt ngoài INT1

1 = Xảy ra ngắt trên chân INT1

0 = Không xảy ra ngắt trên chân INT1

Chú ý: Bit này được thiết lập bởi phần cứng khi xảy ra ngắt trên chân INT1 và phải được xóa bằng phần mềm.

Bit 2: IT1: Bit thiết lập trạng thái xảy ra ngắt ngoài trên chân INT1

104

Cho phép ngắt ngoài INT1 xảy ra theo mức logic 0

Bit 1: IE0: Cờ báo xảy ra ngắt ngoài INT0 1 = Xảy ra ngắt trên chân INT0 0 = Không xảy ra ngắt trên chân INT0

Chú ý: Bit này được thiết lập bởi phần cứng khi xảy ra ngắt trên chân INT0

và phải được xóa bằng phần mềm.

Bit 0: IT0: Bit thiết lập trạng thái xảy ra ngắt ngoài trên chân INT0 1 = Cho phép ngắt ngoài INT0 xảy ra trên sườn xuống của xung 0 = Cho phép ngắt ngoài INT0 xảy ra theo mức logic 0

TMOD: Thanh ghi lựa chọn chế độ hoạt động của Timer1 và Timer0.

GATE 1

C/T1# M11 M01 GATE0 C/T0# M10 M00

Bit 7 Bit 0

Bit 7: GATE1: Bit mở cổng cho Timer1 hoạt động

1 = Cho phép Timer1 hoạt động khi chân INT1 ở mức logic1 và bít TR1= 1;

0 = Cho phép Timer1 hoạt động khi bit TR1 = 1; Bit 6: C/T1#: Bit lựa chọn nguồn xung cung cấp cho

Timer1 1 = Nguồn xung được lấy trên chân T1 0 = Nguồn xung được lấy từ bộ dao động thạch anh. Bit 5 – 4: M11:M01: Bit lựa chọn chế độ hoạt động của Timer1

00 = Chế độ 0: 13 bit Timer/Counter với 8 bit trên thanh ghi TH1 và 5 bit trên thanh ghi TL1

01 = Chế độ 1: 16 bit Timer/Counter

10 = Chế độ 2: 8 bit Timer/Counter tự động nạp lại.

11 = Chế độ 3: Chế độ giữ Timer1 khi bit TR1 không thiết lập giá trị và khi Timer0 ở chế độ 3.

Bit 3: GATE0: Bit mở cổng cho Timer0 hoạt động

1 = Cho phép Timer0 hoạt động khi chân INT0 ở mức logic1 và bít TR0= 1;

0 = Cho phép Timer0 hoạt động khi bit TR0 = 1; Bit 2: C/T0#: Bit lựa chọn nguồn xung cung cấp cho

105

0 = Nguồn xung được lấy từ bộ dao động thạch anh. Bit 1 – 0: M10:M00: Bit lựa chọn chế độ hoạt động của Timer0

00 = Chế độ 0: 13 bit Timer/Counter với 8 bit trên thanh ghi TH0 và 5 bit trên thanh ghi TL0

01 = Chế độ 1: 16 bit Timer/Counter

10 = Chế độ 2: 8 bit Timer/Counter tự động nạp lại.

11 = Chế độ 3: Chế độ đếm xung từ bên ngoài với độ phân giải 8 bit

T2CON: Thanh ghi điều khiển Timer2

TF2 EXF2 RCLK TCLK EXEN2 TR2 C/T2# CP/RL2 #

Bit 7 Bit 0

Bit 7: TF2: Cờ báo tràn của Timer2 1 = Timer2 xảy ra tràn 0 = Timer2 không xảy ra tràn

Chú ý: Bit này được thiết lập bởi phần cứng khi xảy ra quá trình tràn bộ đếm Timer và phải được xóa bằng phần mềm. Bit này khơng được thiết lập khi 2 bit RCLK và TCLK = 1. Bit này cũng được sử dụng làm cờ báo xảy ra ngắt của Timer2

Bit 6: EXF2: Cờ báo tràn của Timer2 trong chế độ đọc tần số 1 = Timer2 xảy ra tràn khi đọc tần số

0 = Timer2 không xảy ra tràn

Chú ý: Bit này cũng được sử dụng làm cờ báo xảy ra ngắt của Timer2 trong chế độ đọc tần số.

Bit 5: RCLK: Được sử dụng đến khi dùng Timer2 dùng làm nguồn xung tốc độ BAUD cho Port nối tiếp căn cứ theo bảng 11.2.

Chú ý: Nếu không sử dụng Timer2 làm nguồn xung tốc độ BAUD thì phải

xóa bit này về 0 thì Timer2 mới được phép hoạt động ở các chế độ khác.

Bit 4: TCLK: Được sử dụng đến khi dùng Timer2 dùng làm nguồn xung

tốc độ BAUD cho Port nối tiếp căn cứ theo bảng 11.2.

Chú ý: Nếu không sử dụng Timer2 làm nguồn xung tốc độ BAUD thì phải

xóa bit này về 0 thì Timer2 mới được phép hoạt động ở các chế độ khác. Bit 3: EXEN2: Bit cho phép Timer2 hoạt động ở chế độ đọc tần số 1 = Cho phép Timer2 đọc tần số từ chân T2EX0 = Không dùng Timer2 trong chế độ đọc tần số

106

Chú ý: Bit này khơng có tác dụng khi sử dụng Timer2 làm nguồn xung tốc

độ BAUD cho Port nối tiếp

Bit 2: TR2: Bit cho phép Timer2 bắt đầu hoạt động 1 = Cho phép Timer2 hoạt động 0 = Không cho phép Timer2 hoạt động Bit 1: CT2#: Bit lựa chọn nguồn xung cung cấp cho

Timer2 1 = Nguồn xung được lấy từ chân T2

0 = Nguồn xung được lấy từ bộ dao động thạch anh

Bit 0: CP/RL2#: Bit cho phép tự động cập nhật giá trị vào Timer2 trong chế độ đọc tần số.

1 = Cho phép tự động cập nhật giá trị 0 = Không cho phép tự động cập giá trị

Chú ý: Bit này khơng có tác dụng khi sử dụng Timer2 làm nguồn xung tốc

độ BAUD cho Port nối tiếp.

 Cấu trúc của chương trình ngắt

- Chương trình con phục vụ ngắt ngồi:

void interrupt_intx (void) interrupt y {

IEx = 0;

//Chương trình điều khiển của ngắt ngồi intx }

Trong đó:

+ x: là tên của ngắt ngoài tương ứng.

+ y: là mức ưu tiên ngắt với các giá trị: 0, 1, 2, 3 (0 là mức ưu tiên

cao nhất)

- Chương trình con phục vụ ngắt Timer:

void interrupt_timerx (void) interrupt y {

TFx = 0;

//Chương trình điều khiển của ngắt Timerx }

Trong đó:

+ x: là tên của ngắt Timer tương ứng

+ y: là mức ưu tiên ngắt với các giá trị: 0, 1, 2, 3 (0 là mức ưu tiên

107

2. Bài tập thực hành:

Lập trình đếm sản phẩm trong một khoảng thời gian nhất định sử dụng ngắt ngoài.

 Dụng cụ chuẩn bị:

+ Đồng hồ số

+ Kit thực hành vi điều khiển 8051 + Ocillocope

+ Mạch nạp AT89S52

+ Các loại cáp kết nối 8 sợi, 4 sợi, 2 sợi.

Đề bài: Học sinh tự thiết kế và lập trình theo các yêu cầu sau: Yêu cầu:

Một phần của tài liệu Giáo trình Vi điều khiển 2 (Nghề: Công nghệ kỹ thuật điều khiển và tự động hóa - Cao đẳng) - Trường CĐ Hàng hải I (Trang 101 - 107)

Tải bản đầy đủ (PDF)

(120 trang)