06 lap trinh timer va ngat

41
1 Pham Quoc Thinh, ictu.edu.vn. Lập trình Timer và ngắt Lập trình Timer và ngắt │ Chương 3 Vi điều khiển 8051 và lập trình hợp ngữ ICTU – 04-2010

Upload: huuhuy1987

Post on 29-Dec-2015

96 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 06 Lap Trinh Timer Va Ngat

1Pham Quoc Thinh, ictu.edu.vn.

Lập trình Timer và ngắtLập trình Timer và ngắt

│ Chương 3 Vi điều khiển 8051 và lập trình hợp ngữ

ICTU – 04-2010

Page 2: 06 Lap Trinh Timer Va Ngat

2Pham Quoc Thinh, ictu.edu.vn.

Department of Electronics & Telecommunications

Lập trình timer

So sánh ngắt và hỏi vòng “polling”

Xử lý ngắt

Các ngắt của 8051

Mục đích của bảng vector ngắt

Cho phép và không cho phép các ngắt

Timer sử dụng ngắt

Ưu tiên ngắt

Thiết kế chương trình ngắt

Nội dung bài giảng….Nội dung bài giảng….

Page 3: 06 Lap Trinh Timer Va Ngat

3Pham Quoc Thinh, ictu.edu.vn.

Department of Electronics & Telecommunications

Lập trình timer(1/10)

8051 có hai bộ timer: Timer 0 và Timer 1

Có thể sử dụng để tạo một khoảng thời gian trễ hay đếm các sự kiện xẩy ra bên ngoài vi điều khiển

Timer 0 và Timer là 2 bộ timer 16 bit

Chúng được truy cập như hai thanh ghi, byte thấp và byte cao. (TL0 & TH0 cho Timer 0 và TL1 & TH1 cho timer 1)

Page 4: 06 Lap Trinh Timer Va Ngat

4Pham Quoc Thinh, ictu.edu.vn.

Department of Electronics & Telecommunications

Lập trình timer(2/10)

Co 3 thanh ghi chức năng đặc biệt cho việc thiết lập timer

1. Các thanh ghi Timer (Timer 0 & Timer 1) – lưu giữ giá trị bắt đầu của Timer 0 & Timer 1. Mỗi bộ timer là thanh ghi 16 có thể được chia thành 2 byte (THx & TLx).

TH0 TL0

D15

D14D13

D12

D11

D10

D9

D8 D7 D6 D5 D4 D3 D2D1

D0

Thanh ghi Timer 0 (16 Bit) TH1 TL1

D15

D14D13

D12

D11

D10

D9

D8 D7 D6 D5 D4 D3 D2D1

D0

Thanh ghi Timer 1 (16 Bit)

Page 5: 06 Lap Trinh Timer Va Ngat

5Pham Quoc Thinh, ictu.edu.vn.

Department of Electronics & Telecommunications

Lập trình timer(3/10)2. Thanh ghi điều khiển timer(TCON) – sử dụng để ON/OFF timer và

điều khiển ngắt. TCON là thanh ghi 8 bit, được định địa chỉ bit và chỉ có 4 bit cao sử dụng cho việc điều khiển timer.

Các bit điều khiển ON/OFF Timer

(MSB)

(LSB)

TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

TR1 –Bit điều khiển Timer 1 chạy. TR1=1 Timer ON và TR1=0 Timer OFF

TF1 – Cờ tràn Timer 1 được set khi timer tràn FFFFH trở về 0000H

Được xoá bởi chương trình!.

TR0 – Bit điều khiển Timer 0 chạy. TR0=0 Timer ON và TR0=0 Timer OFF

TF0 – Cờ tràn Timer 0 được set khi timer tràn FFFFH trở về 0000H

Được xoá bởi chương trình!

IE1 and IT1 – Đặt chế độ kích hoạt ngắt ngoài ngắt 1

IE0 and IT0 – Đặt chế độ kích hoạt ngắt ngoài ngắt 0

Các bit điều khiển ngắt ngoài

Page 6: 06 Lap Trinh Timer Va Ngat

6Pham Quoc Thinh, ictu.edu.vn.

Department of Electronics & Telecommunications

Lập trình timer(4/10)

3. Timer Mode Register (TMOD) – sử dụng để thiết lập các chế độ hoạt động của bộ timer. TMOD là thanh ghi 8 bit, được định địa chỉ bit

Timer 1

(MSB)

(LSB)

GATE

C/T M1 M0 GATE

C/T M1 M0

GATE – Bit đieu khien cổng của Timer. GATE = 1, Timer/counter enbled chỉ khi chân /INTx ở mức cao và điều khiển TRx được set. GATE = 0, Timer chạy khi TRx được set

C/T – Bit chọn chế độ Counter/Timer (đếm sự kiện hay định thời)

C/T = 1 : Đếm sự kiện (dùng xung clock nhận từ ngõ vào Tx)

C/T = 0 : Định thời (dùng xung clock qua bộ chia từ thạch anh)M1 & M0 – Các bit chọn chế độ

Timer 0

Page 7: 06 Lap Trinh Timer Va Ngat

7Pham Quoc Thinh, ictu.edu.vn.

Department of Electronics & Telecommunications

Lập trình timer(5/10)M1 & M0 – Các bit chọn chế độ

M1 M0 Mode Mode hoạt động

0 0 0 Chế độ timer/counter13-bitKhoảng giá trị timer từ 0000H đến 1FFFH trong TH

- TL

0 1 1 Chế độ timer/counter16-bitKhoảng giá trị timer từ 0000H đến FFFFH trong TH -

TL

1 0 2 Chế độ timer/counter 8-bit tự nạp lạiTHx giữa giá trị nạp lại TLx mỗi khi timer tràn

1 1 3 Chế độ chia tách

Chế độ 1 & 2 được sử dụng rộng rãi nhất

Page 8: 06 Lap Trinh Timer Va Ngat

8Pham Quoc Thinh, ictu.edu.vn.

Department of Electronics & Telecommunications

Timer / Counter chế độ 0 : 13 Bit Counter using Timer 1

Page 9: 06 Lap Trinh Timer Va Ngat

9Pham Quoc Thinh, ictu.edu.vn.

Department of Electronics & Telecommunications

Timer / Counter chế độ 1 : 16 Bit Counter using Timer 1

TL1(8 Bits)

Khoảng giá trị timer từ 0000H đến FFFFH trong TL1 – TH1

Page 10: 06 Lap Trinh Timer Va Ngat

10Pham Quoc Thinh, ictu.edu.vn.

Department of Electronics & Telecommunications

Timer / Counter chế độ 2 : 8 Bit tự nạp lại

Page 11: 06 Lap Trinh Timer Va Ngat

11Pham Quoc Thinh, ictu.edu.vn.

Department of Electronics & Telecommunications

Timer / Counter chế độ 3 : Chế độ chia tách

Page 12: 06 Lap Trinh Timer Va Ngat

12Pham Quoc Thinh, ictu.edu.vn.

Department of Electronics & Telecommunications

Vi dụ 1Vi dụ 1

Giải pháp: Chuyển giá trị từ hex ra binary:(a) TMOD = 0000 0001, Timer 0 ở mode 1(b)TMOD = 0010 0000, Timer 1 ở mode 2(c) TMOD = 0001 0010, Timer 0 ở mode 2 và Timer 1 ở mode 1

Chỉ ra chế độ hoạt động của timer trong những thiết lập sau dây.

(a) MOV TMOD, #01H(b) MOV TMOD, #20H(c) MOV TMOD, #12H

Lập trình timer(6/10)

Page 13: 06 Lap Trinh Timer Va Ngat

13Pham Quoc Thinh, ictu.edu.vn.

Department of Electronics & Telecommunications

Ví dụ 2:Ví dụ 2:

Giải pháp:(1)MOV TMOD, #01H ; Timer 0 mode 1, C/T = 0 dùng XTAL

; nguồi xung clock, Gate = 0 để sử dụng ON/OFF

; timer bằng chương trình

MOV TL0, #0ABH ; TL0 =ABHMOV TH0, #0F0H ; TH0 =F0HSETB TR0 ; Cho Timer 0 khởi động

1. Viết các lệnh thực hiện thiết đặt sau:a. Set Timer 0 ở mode 1, sử dụng XTAL 8051 cho nguồn xung clock,

các lệnh khởi động và dùng bộ định thời, b. Đặt giá trị F0ABH trong Timer 0.c. Cho chạy Timer 0

2. Xác định thời gian Timer 0 tràn nếu XTAL = 12 MHz.

Lập trình timer(7/10)

Page 14: 06 Lap Trinh Timer Va Ngat

14Pham Quoc Thinh, ictu.edu.vn.

Department of Electronics & Telecommunications

Lập trình timer(8/10)

Giải pháp:(2)

Số đếm đếm để timer tràn = Đếm từ F0ABH đến FFFFH tràn về 0

Số chu kỳ đồng hồ Timer = (FFFFH – F0ABH + 1) = 0F55H = 3925 (hệ thập

phân)

Thời gian để Timer 0 tràn = 3925 x 1 s = 3925 s #

Một xung timer = 1 chu kỳ máy= s1s12x10x12

16

Giả sử tần số thạch anh 12 MHz

65536 10 – F0ABH

Page 15: 06 Lap Trinh Timer Va Ngat

15Pham Quoc Thinh, ictu.edu.vn.

Department of Electronics & Telecommunications

Ví dụ 3Ví dụ 3

Giải pháp:Chu kỳ của xung vuông, T = 1/50 Hz = 20 ms½ của nó cho mức cao hoặc mức thấp = 10 ms10 ms/ 1s = 10,000 chu kỳ timer cần cho mỗi xung.

Giá trị Timer 1 được set= 65536 – 10000 = 55536 (hệ 10) = D8F0HTH1 = D8H và TL1 = F0H ( Cần bộ đếm 16 bit)

MOV TMOD, #10H ; Timer 1, mode 1 AGAIN: MOV TL1, #0F0H ; TL1 =F0H

MOV TH1, #0D8H ; TH1 =D8H SETB TR1 ; bắt đầu Timer 1

BACK: JNB TF1, BACK ; ở đây cho tới khi trànCLR TR1 ; Dừng Timer 1CPL P1.3 ; Đảo P1.3 để set Hi, LowCLR TF1 ; Xoá cờ Timer bằng chương trìnhSJMP AGAIN

Giả sử XTAL = 12 MHz, viết chương trình phát xung vuông tần sô 50 Hz trên chân P1.3 sử dụng timer 1để điều khiển

Lập trình(9/10)

20ms

65535 – 10000 + 1

Đảo P1.3 sau mỗi 10ms

Page 16: 06 Lap Trinh Timer Va Ngat

16Pham Quoc Thinh, ictu.edu.vn.

Department of Electronics & Telecommunications

Ví dụ 4Ví dụ 4

; Chương trình con delay MOV TMOD, #10H ; Timer 1, mode 1 MOV R3, #200

AGAIN: MOV TL1, #08H ; TL1 =08H MOV TH1, #01H ; TH1 =01H SETB TR1 ; bắt đâu Timer 1

BACK: JNB TF1, BACK ; Chờ tràn timerCLR TR1 ; Dừng Timer 1CLR TF1 ; Xoá cờ tràn DJNZ R3, AGAIN ; Lập lại cho đến khi R3 = 0RET

Ví dụ chương trình con delay. Tìm thời gian delay. (XTAL = 12 MHz)

Lập trình timer(10/10)

Giải pháp :

Giá trị Timer = 0108H = 264(hệ 10), Bộ đếm tràn= 65536 – 264 = 65272 (hệ 10)

Số chu kỳ timer của Timer = 65272

Tổng số chu kỳ timer của chương trình con = [2 + 1 + (5 + 65272 + 4) x 200 + 2] = 13056205

Tổng thời gian delay: 13056205 x 1s = 13056.2 ms

Machine cycles2122121122

Page 17: 06 Lap Trinh Timer Va Ngat

17Pham Quoc Thinh, ictu.edu.vn.

Department of Electronics & Telecommunications

Page 18: 06 Lap Trinh Timer Va Ngat

18Pham Quoc Thinh, ictu.edu.vn.

Department of Electronics & Telecommunications

Một vi điều khiển luôn kết nối với vài thiết bị ngoại vi thông qua các cổng I/O

Có 2 cách để các thiết bị ngoại vi yêu cầu dịch vụ từ vi điều khiển

Hỏi vòng

Ngắt

Ngắt và hỏi vòng ”Polling”Ngắt và hỏi vòng ”Polling”

Page 19: 06 Lap Trinh Timer Va Ngat

19Pham Quoc Thinh, ictu.edu.vn.

Department of Electronics & Telecommunications

Vi điều khiển liên tục giám sát tình trạng của một số lượng nhất định các thiết bị theo một thứ tự

Dịch vụ cho một thiết bị nếu đặt trước với điều kiện nào đó

Sau khi thực hiện dịch vụ tương ứng với một thiết bị, vi điều khiển sẽ chuyển sang theo dõi tình trạng của một thiết bị khác cho đến khi tất cả các thiết bị phục vụ

Hoạt động được miêu tả như vậy được gọi là “polling”

Lập trình I/O (Polling)Lập trình I/O (Polling)

Page 20: 06 Lap Trinh Timer Va Ngat

20Pham Quoc Thinh, ictu.edu.vn.

Department of Electronics & Telecommunications

Bất cứ khi nào thiết bị bất cứ nhu cầu các dịch vụ, nó thông báo cho vi điều khiển bằng cách gửi nó một yêu cầu ngắt (IR) trong khi vi điều khiển đang làm công việc khác

Vi điều khiển dừng công việc đang làm để phục vụ các thiết bị

Chú ý mỗi IR liên kết với một chương trình con phục vụ (interrupt service routine (ISR))

Interrupt I/O (Interrupt)Interrupt I/O (Interrupt)

Page 21: 06 Lap Trinh Timer Va Ngat

21Pham Quoc Thinh, ictu.edu.vn.

Department of Electronics & Telecommunications

So sách giữa Interrupt và PollingSo sách giữa Interrupt và Polling

Interrupt PollingPhương pháp Các thiết bị thông

báo tới vi điều khiển bằng cách gửi một tín hiệu ngắt đến trong

VĐK

MCU liên tục giám sát các thiết bị để

xác định xem thiết bị cần dịch

vụ nào

Thời gian đáp ứng

Nhanh hơn Chậm hơn

Cần thời gian của CPU

Less More

Thiết lập ưu tiên

Yes No

Page 22: 06 Lap Trinh Timer Va Ngat

22Pham Quoc Thinh, ictu.edu.vn.

Department of Electronics & Telecommunications

Các bước trong xử lý một yêu cầu ngắt

Lệnh hiện tại sẽ được kết thúc PC được ghi lại trong stack Trạng thái ngắt hiện tại được ghi lại PC được nạp với địa chỉ vector của ISR từ bảng

vector ngắt(nhảy tới thực thi ISR) ISR thực thi và kết thúc với lệnh RETI (trở về từ

ngắt) Trở về chương trình chính bởi lấy PC từ stack

Khi một ngắt kích hoạt và được chấp nhận bởi các MCU, chương trình chính bị gián đoạn. Những hành động sau đây xảy ra:

Page 23: 06 Lap Trinh Timer Va Ngat

23Pham Quoc Thinh, ictu.edu.vn.

Department of Electronics & Telecommunications

Thực thi chương trình với các ngắt

Main Main Main

ISR ISR

stack

PC ghi trong trong stack

PC lấy từ stack

Các chương trình thực hiện ứng với một ngắt được gọi là chương trình con phục vụ ngắt - interrupt service routine (ISR)ISR thực thi để đáp ứng ngắtvà thường thực hiện I/O hoạt động cho một thiết bị

Page 24: 06 Lap Trinh Timer Va Ngat

24Pham Quoc Thinh, ictu.edu.vn.

Department of Electronics & Telecommunications

Có 6 ngắt trong 8051

Các ngắt trong 8051Các ngắt trong 8051

Reset – khi chân reset được kích hoạt, 8051 sẽ reset tất cả các thanh ghi và các cổng sau đó nhảy tới địa chỉ 0000H bắt đầu thực thi.

2 ngắt ngoài – Các ngắt cứng ngoài (INT0 và INT1) ở chân12 & 13 được sử dụng để nhận các tín hiệu ngắt từ các thiết bị ngoài.

2 ngắt timer –Timer 0 và Timer 1 đưa ra tín hiệu ngắt khi bộ đếm tràn về 0

1 ngắt cổng nối tiếp - được sử dụng cho việc nhận và truyền trong suốt quá trình truyền thông.

Ngoài reset, chỉ có 5 ngắt có sẵn cho người sử dụng

Page 25: 06 Lap Trinh Timer Va Ngat

25Pham Quoc Thinh, ictu.edu.vn.

Department of Electronics & Telecommunications

Bảng vector ngắt cho 8051

Ưu tiên

Ngắt Cờ Định vị trong ROM

Chân

1 Reset RST 0000H 9

2External 0 (INT0)

IE0 0003H P3.2 (12)

3 Timer 0 TF0 000BH ---

4External 1 (INT1)

IE1 0013H P3.3 (13)

5 Timer 1 TF1 001BH ---

6 Serial port RI or TI 0023H ---

Bảng vector ngắt giữ địa chỉ của ISR

Page 26: 06 Lap Trinh Timer Va Ngat

26Pham Quoc Thinh, ictu.edu.vn.

Department of Electronics & Telecommunications

Cho phép và không cho phép một ngắt

Tại thời điểm reset, tất cả các ngắt không được cho phép

Các ngắt phải được cho phép bởi chương trình

Thanh ghi IE (interrupt enable) – được định địa chỉ bit, cho phép ngắt hoặc không cho phép các ngắt

Bit IE. 7 phải được set lên mức cao để cho phép các ngắt EA = 1 ; Cho phép ngắt toàn cục EA = 0 ; Không cho phép ngắt toàn cục

IE.7 IE.6 IE.5 IE.4 IE.3 IE.2 IE.1 IE.0

EA -- ET2 ES ET1 EX1 ET0 EX0

Thanh ghi IE (interrupt enable)

Page 27: 06 Lap Trinh Timer Va Ngat

27Pham Quoc Thinh, ictu.edu.vn.

Department of Electronics & Telecommunications

Cho phép và không cho phép các ngắt

Bit Ký hiệu Miêu tả (1=Cho phép, 0=Không cho phép)

IE.7 EA Cho phép/không cho phép ngắt toàn cục

IE.6 -- Dành cho tương lai

IE.5 ET2 Không dùng cho 8051 (chỉ cho 8052)

IE.4 ES Cho phép/không cho phép ngắt nối tiếp

IE.3 ET1 Cho phép/không cho phép ngắt timer 1

IE.2 EX1 Cho phép/không cho phép ngắt ngoài 1

IE.1 ET0 Cho phép/không cho phép ngắt timer 0

IE.0 EX0 Cho phép/không cho phép ngắt ngoài 0

Page 28: 06 Lap Trinh Timer Va Ngat

28Pham Quoc Thinh, ictu.edu.vn.

Department of Electronics & Telecommunications

Page 29: 06 Lap Trinh Timer Va Ngat

29Pham Quoc Thinh, ictu.edu.vn.

Department of Electronics & Telecommunications

Ví dụ 5Ví dụ 5

Giải pháp:(a) MOV IE, #10010110B ; enable serial, Timer 0, EX1 interrupts or

SETB IE.7 ; EA=1, Cho phép ngắt toàn cụcSETB IE.4 ; Cho phép ngắt nối tiếpSETB IE.1 ; Cho phép ngắt Timer 0SETB IE.2 ; Cho phép ngắt ngoài 1

(b) CLR IE.1 ; Không cho phép ngắt Timer 0(c) CLR IE.7 ; Không cho phép tất cả các ngắt

Viết các lệnh để thực hiện các yêu cầu sau

(a) Cho phép ngăt nối tiếp, ngắt Timer 0 và ngắt ngoài 1(b) Chỉ không cho phép Timer 0(c) Không cho phép tất cả các ngắt một lệnh

Page 30: 06 Lap Trinh Timer Va Ngat

30Pham Quoc Thinh, ictu.edu.vn.

Department of Electronics & Telecommunications

Ngắt Timer

Khi timer tràn thì cờ TF của nó được đặt lên 1

Nếu ngắt timer trong thanh ghi IE cho phép, bất cứ khi nào TF được thiết lập, vi điều khiển sẽ bị gián đoạn và nhảy vào bảng vector ngắt với dịch vụ ISR tương ứng

Với ngắt timer được cho phép, vi điều khiển có thể làm việc khác mà không cần giám sát cờ khi nó tràn

TF0 Vector ngắt Timer 0

1 Nhảy đến 000BH

TF1 Vector ngắt Timer 1

1 Nhảy đến 001BH

Page 31: 06 Lap Trinh Timer Va Ngat

31Pham Quoc Thinh, ictu.edu.vn.

Department of Electronics & Telecommunications

Write a program to generate a square wave of 50 Hz on pin P1.3. This is similar to Example 8.3 except that it uses an interrupt for Timer 1.

Ví dụ 6Ví dụ 6

Giải pháp:ORG 0000H

LJMP MAIN ;nhảy qua bảng vector ngắt; ISR cho Timer 1 để phát xung vuông

ORG 001BH LJMP ISR_T1 ; nhảy tới ISR_T1

; Khởi tạo chương trình chính ORG 30HMAIN: MOV TMOD, #10H ; Timer 1, mode 1

MOV TL1, #0F0H ; TL1 =F0HMOV TH1, #0D8H ; TH1 =D8HMOV IE, #88H ; Cho phép ngắt Timer 1 SETB TR1 ;khởi động Timer 1

HERE: SJMP HERE; Timer 1 ISR ISR_T1: CPL P1.3 ; đảo P1.3 để đặt mức cao, thấp

MOV TL1, #0F0H ; nạp giá trị cho timerMOV TH1, #0D8H ; SETB TR1 ; khởi động Timer 1RETI END

Giá trị set timer 1 = 65536 – 10000 = 55536 (hệ 10)= D8F0H

Viết một chương trình phát một xung vuông 50 Hz trên chân P1.3. Giống ví dụ 3 nhưng sử dụng ngắt cho timer 1.

Ví dụ 3 (use TIMER)

Page 32: 06 Lap Trinh Timer Va Ngat

32Pham Quoc Thinh, ictu.edu.vn.

Department of Electronics & Telecommunications

Ưu tiên ngắt

Sau khi reset, ưu tiên của nguồn ngắt giảm dần từ trên xuống dưới được ghi trong bảng 1,vi dụ. Nếu INT0 và INT1 được kích hoạt tại cùng một thời điểm, INT0 sẽ thực hiện trước

Bảng 1: 8051 độ ưu tiên ngắt sau Reset

Ngắt ngoài 0 (INT0)

Ngắt Timer 0 (TF0)

Ngắt ngoài 1 (INT1)

Ngắt Timer 1 (TF1)

Ngắt truyền thông nối tiếp (RI+TI)

Độ ưu tiên cao nhất

Độ ưu tiên thấp nhất

INT0 > TF0 > INT1 > TF1 > SERIAL(RI+TI)

Page 33: 06 Lap Trinh Timer Va Ngat

33Pham Quoc Thinh, ictu.edu.vn.

Department of Electronics & Telecommunications

Thiết đặt độ ưu tiên ngắt với thanh ghi IP

Thứ tự ưu tiên có thể được thay đổi bởi việc gán một độ ưu tiên cao cho bất kỳ một trong các ngắt.

Nó được thực hiện bằng cách thiết lập mức cao tại bit tương ứng trong thanh ghi ưu tiên ngắt IP (interrupt priority).

IP.7 IP.6 IP.5 IP.4 IP.3 IP.2 IP.1 IP.0

-- -- PT2 PS PT1 PX1 PT0 PX0

Thanh ghi IE (interrupt priority) được định địa chỉ bit

Bit độ ưu tiên= 1 (gán độ ưu tiên cao) Bit độ ưu tiên = 0 (gán độ ưu tiên thấp)

PT2,– Timer 2 (8052 only), PT1 & PT0 –Các ngắt Timer 1 & Timer 0PX1 & PX0– Các ngắt ngoài 1 & 0, PS – ngắt truyền thông nối tiếp

Page 34: 06 Lap Trinh Timer Va Ngat

34Pham Quoc Thinh, ictu.edu.vn.

Department of Electronics & Telecommunications

Thiết đặt độ ưu tiên ngắt với thanh ghi IP

Ví dụ 7:

(a) Lập trình gán độ ưu tiên cao nhất cho INT1,

(b) Thảo luân nếu INT0, INT1 và TF0 kích hoạt ở cùng một thời điểm.

Solution :

(a) MOV IP, #00000100B ; set IP.2=1 INT1 có độ ưu tiên cao nhất

hay SETB IP.2

(b) Độ ưu tiên của ngắt được thay đổi INT1 > INT0 > TF0

The 8051 đáp ứng INT1 đầu tiên sau đó là INT0 và TF0.

(Bit INT0 và TF0 trong IP là 0, độ ưu tiên của nó theo thứ tự trong bảng 1)

Page 35: 06 Lap Trinh Timer Va Ngat

35Pham Quoc Thinh, ictu.edu.vn.

Department of Electronics & Telecommunications

Thiết đặt độ ưu tiên ngắt với thanh ghi IP

Ví dụ 8:

Thanh ghi IP được set bởi lệnh “MOV IP, #00001100B” sau khi reset. Thảo luận về thứ tự ưu tiên các ngắt.

Giải pháp :

MOV IP, #00001100B sẽ set INT1 & TF1tới độ ưu tiên cao hơn so với các ngắt con lại.

Độ ưu tiên của các ngắt sẽ là

INT1 > TF1 > INT0 > TF0 > Serial

Độ ưu tiên mạc định: INT0 > TF0 > INT1 > TF1 > SERIAL(RI+TI)

Page 36: 06 Lap Trinh Timer Va Ngat

36Pham Quoc Thinh, ictu.edu.vn.

Department of Electronics & Telecommunications

Ví dụ 9

Chân INT1 nối với một công tắc bình thường ở mức cao. Khi ấn công tắc, bật đèn LED. LED kết nối với P1.3 và bình thường thì tắt. Khi được bật LED sẽ sáng trong một thời gian rùi tắt.

to LED

80515v

0v

P1.3

INT1 1=ON0=OFF

Page 37: 06 Lap Trinh Timer Va Ngat

37Pham Quoc Thinh, ictu.edu.vn.

Department of Electronics & Telecommunications

Ví dụ 9– Giải pháp

ORG 0000H LJMP MAIN ;Nhẩy qua bảng vector ngắt

; ISR for INT1 ORG 0013H LJMP ISR_INT1 ; Nhẩy tới ISR_INT1

; Chương trình chính ORG 30H

MAIN: MOV IE,#10000100B ;Cho phép ngắt INT 1 + GLOBALHERE: SJMP HERE ;chờ ngắt

; INT1 ISR ISR_INT1: SETB P1.3 ;bật đènLED

MOV R3,#255BACK: DJNZ R3, BACK ;giữ LED bật trong một khoảng thời gian

CLR P1.3 ;tắt LED RETI

END

Page 38: 06 Lap Trinh Timer Va Ngat

38Pham Quoc Thinh, ictu.edu.vn.

Department of Electronics & Telecommunications

Thiết kế chương trình ngắt

Chương trình phục vụ ngắt kích thước nhỏ hơn <=8 byte

Chương trình phục vụ ngắt kích thước lớn hơn > 8 byte

Page 39: 06 Lap Trinh Timer Va Ngat

39Pham Quoc Thinh, ictu.edu.vn.

Department of Electronics & Telecommunications

Page 40: 06 Lap Trinh Timer Va Ngat

40Pham Quoc Thinh, ictu.edu.vn.

Department of Electronics & Telecommunications

CTCON_1:

;

RET

CTCON_2:

;

RET

;Các chương trinh phục vụ ngắt

EXT0_ISR:

;

RETI

T0_ISR:

;

RETI

END

ORG 0000H

LJMP MAIN ;nhảy đến chương trình chính

ORG 0003H

LJMP EXT0_ISR ; Nhảy đến chương trình ISR

;ngắt ngoài 0

ORG 000BH

LJMP T0_ISR

;

ORG 0030H ; Bắt đầu chương trình chính

MAIN:

;

;

;SJMP $

;Cac chuong trinh con

Chương trình phục vụ ngắt kích thước lớn hơn 8 byte

Page 41: 06 Lap Trinh Timer Va Ngat

1Pham Quoc Thinh, ictu.edu.vn.

ICTU – 04-2010

│ END of Lecture 8 │

Timer Programming and InterruptsTimer Programming and Interrupts