chuong 5 hoat dong ngat

6
Ni dung: Chương 1: Gii thiuvVi xChương 2: Gii thiuvcu trúc caHVi điu khin 8051 Chương 3: Kho sát tplnh và lp trình Vi điu khin 8051 Chương 4: Hot động cabộ định thi Chương 5: Hot động ngt Chương 6: Hot động truyn thông ni tiếp Chương 7: Thiếtkế giao tiếp Chương 5: Hot động ngt (INTERRUPT) 5.1. Gii thiu chung: Ngt là quá trình dng chương trình đang thc thi để phcvcho mt chương trình khác khi xy ra mtskin. Chương trình xlý skin ngtgi là chương trình phc vngt (ISR Interrupt Service Routine). Chương 5: Hot động ngt (INTERRUPT) Thc thi chương trình không có ngt Thc thi chương trình có ngt Chương 5: Hot động ngt (INTERRUPT) 5.1. Tchc ngtca MCS-51 HMCS-51 có tng cng 5 ngun ngt khác nhau: 2 ngt ngoài 0, 1 (ti các chân INT0, INT1). 2 ngt do timer 0, 1 (khi timer tương ng tràn). 1 ngt do port ni tiếp. Đốivih89x52 scó thêm ngt do timer 2.

Upload: but-chi

Post on 28-Jul-2015

1.155 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Chuong 5  hoat dong ngat

Nội dung:

• Chương 1: Giới thiệu về Vi xử lý

• Chương 2: Giới thiệu về cấu trúc của Họ Vi điềukhiển 8051

• Chương 3: Khảo sát tập lệnh và lập trình Vi điềukhiển 8051

• Chương 4: Hoạt động của bộ định thời

• Chương 5: Hoạt động ngắt

• Chương 6: Hoạt động truyền thông nối tiếp

• Chương 7: Thiết kế giao tiếp

Chương 5: Hoạt động ngắt (INTERRUPT)

5.1. Giới thiệu chung:

� Ngắt là quá trình dừng chương trình đang thực thi

để phục vụ cho một chương trình khác khi xảy ra

một sự kiện.

� Chương trình xử lý sự kiện ngắt gọi là chương

trình phục vụ ngắt (ISR – Interrupt Service

Routine).

Chương 5: Hoạt động ngắt (INTERRUPT)

Thực thi chương trình không có ngắt

Thực thi chương trình có ngắt

Chương 5: Hoạt động ngắt (INTERRUPT)

5.1. Tổ chức ngắt của MCS-51

� Họ MCS-51 có tổng cộng 5 nguồn ngắt khác nhau:

• 2 ngắt ngoài 0, 1 (tại các chân INT0, INT1).

• 2 ngắt do timer 0, 1 (khi timer tương ứng tràn).

• 1 ngắt do port nối tiếp.

� Đối với họ 89x52 sẽ có thêm ngắt do timer 2.

Page 2: Chuong 5  hoat dong ngat

Chương 5: Hoạt động ngắt (INTERRUPT)

5.2.1. Cho phép và không cho phép ngắt:

Các nguyên nhân ngắt được cho phép hay

không cho phép thông qua thanh ghi cho phép

ngắt IE (Interrupt Enable).

Thanh ghi này nằm trong vùng nhớ SFR,

có địa chỉ byte A8h và được định địa chỉ từng

bit.

Chương 5: Hoạt động ngắt (INTERRUPT)

Thanh ghi cho phép ngắt IE

5.2.1. Cho phép và không cho phép ngắt:

Chương 5: Hoạt động ngắt (INTERRUPT)5.2.1. Cho phép và không cho phép ngắt:

Ví dụ: Để cho phép Timer 1 ngắt, ta có thể thực hiện

bằng các lệnh:

SETB EA ; Cho phép ngắt toàn cục

SETB ET1 ; Cho phép Timer 1 ngắt

Hoặc có thể dùng lệnh sau:

MOV IE, #10001000B

Chương 5: Hoạt động ngắt (INTERRUPT)5.2.2. Ưu tiên ngắt:

Khi có nhiều ngắt tác động đồng thời, ngắt nào

có mức ưu tiên cao sẽ thực hiện trước, ngắt nào có

mức ưu tiên thấp hơn sẽ thực hiện sau.

Việc thiết lập các mức ưu tiên ngắt được thực

hiện thông qua thanh ghi ưu tiên ngắt IP (Interrupt

Priority). Thanh ghi này có địa chỉ B8h và được định

địa chỉ từng bit.

Page 3: Chuong 5  hoat dong ngat

Chương 5: Hoạt động ngắt (INTERRUPT)5.2.2. Ưu tiên ngắt:

Thanh ghi ưu tiên ngắt

Họ MCS-51 có 2 mức ưu tiên: mức cao và

mức thấp. Quá trình xử lý ưu tiên ngắt mô tả

như sau:

• Nếu 2 ngắt xảy ra đồng thời thì ngắt nào có

mức ưu tiên cao hơn sẽ được phục vụ trước.

5.2.2. Ưu tiên ngắt:

• Nếu 2 ngắt xảy ra đồng thời có cùng mức ưu tiên

thì thứ tự ưu tiên được thực hiện như sau:

Ngắt ngoài 0 ⇒⇒⇒⇒ Ngắt do Timer 0 ⇒⇒⇒⇒ Ngắt ngoài 1 ⇒⇒⇒⇒

Ngắt do Timer 1 ⇒⇒⇒⇒ Ngắt do cổng nối tiếp ⇒⇒⇒⇒ Ngắt do

Timer 2.

• Nếu ISR của một ngắt có mức ưu tiên thấp đang

thực hiện mà có ngắt khác xảy ra với mức ưu tiên

cao thì ISR này sẽ tạm dừng để thực thi ISR có mức

ưu tiên cao.

5.2.2. Ưu tiên ngắt: 5.3. Xử lý ngắt:

Khi có một ngắt xảy ra, được CPU chấp nhận, các

thao tác sẽ được thực hiện như sau:

• Hoàn tất việc thực thi hiện hành.

• Bộ đếm chương trình PC được cất vào Stack.

• Trạng thái của ngắt hiện hành được lưu giữ lại.

• Các ngắt được chặn lại ở mức ngắt.

• Đưa vào thanh ghi PC địa chỉ ISR tương ứng.

• Bắt đầu thực thi chương trình phục vụ ngắt.

Page 4: Chuong 5  hoat dong ngat

Chương 5: Hoạt động ngắt (INTERRUPT)

5.3. Xử lý ngắt:

Việc thực thi ISR kết thúc khi gặp lệnh RETI.

Khi gặp lệnh này CPU lấy lại giá trị cũ của bộ

đếm chương trình PC từ Stack. Sau đó,

chương trình chính được tiếp tục thực thi ở

nơi tạm ngưng.

Chương 5: Hoạt động ngắt (INTERRUPT)

5.3.1. Các vector ngắt:

• Vector ngắt là địa chỉ bắt đầu của chương trình

con phục vụ ngắt.

• Khi một ngắt được chấp nhận, vector ngắt

được nạp cho bộ đếm chương trình PC.

Chương 5: Hoạt động ngắt (INTERRUPT)5.3.1. Các vector ngắt:

Chương 5: Hoạt động ngắt (INTERRUPT)5.4. Thiết kế chương trình sử dụng ngắt:

Khuôn mẫu của chương trình sử dụng ngắt:

Page 5: Chuong 5  hoat dong ngat

5.4.1. Các chương trình có kích thước nhỏ:

Nếu chỉ có một nguyên nhân ngắt được dùng, chẳng

hạn như ngắt do Timer 0 thì khuôn mẫu chương

trình có dạng như sau:

ORG 0000H ; Điểm nhập Reset

LJMP MAIN

ORG 000BH ;Điểm nhập của ngắt do Timer 0

T0ISR: ……………… ; ISR của Timer 0

RETI ; Trở về chương trình chính

MAIN: ……………… ; chương trình chính

5.4.2. Các chương trình có kích thước lớn:

ORG 0000H ; Điểm nhập Reset

LJMP MAIN

ORG 000BH ;Điểm nhập của ngắt do Timer 0

LJMP T0ISR

…………….............; Điểm nhập các ngắt khác

ORG 0030H ; Phía trên các vector ngắt

MAIN: ………………

T0ISR: ………………; ISR của Timer 0

RETI ; Trở về chương trình chính

Chương 5: Hoạt động ngắt (INTERRUPT)

5.5. Các ứng dụng của lập trình ngắt:

Bài toán 1: Viết chương trình sử dụng bộ định thời

T0 và các ngắt để tạo ra sóng vuông 10kHz trên

chân P1.0

Bài toán 1: Viết chương trình sử dụng bộ định thời T0 và các

ngắt để tạo ra sóng vuông 10kHz trên chân P1.0

ORG 0000H ; Điểm nhập reset

LJMP MAIN ; Nhảy qua khỏi vector ngắt

ORG 000BH ; Vector ngắt của T0

T0ISR: CPL P1.0 ; Lấy bù

RETI

ORG 0030H ; Điểm nhập của ctrình chính

MAIN: MOV TMOD, #02H ; T0 ở mode 2

MOV TH0, #-50

SETB TR0 ; T0 hoạt động

MOV IE, #10000010B ; Cho phép ngắt do T0

SJMP $ ; Không làm gì

END

Page 6: Chuong 5  hoat dong ngat

Chương 5: Hoạt động ngắt (INTERRUPT)

5.5. Các ứng dụng của lập trình ngắt:

Bài toán 2: Viết chương trình sử dụng các ngắt để tạo ra các

sóng vuông 7kHz và 500 Hz trên các chân P1.6 và P1.7

Bài toán 2: Viết chương trình sử dụng các ngắt để tạo ra các

sóng vuông 7 kHz và 500 Hz trên các chân P1.6 và P1.7

ORG 0000H ; Điểm nhập reset

LJMP MAIN ; Nhảy qua khỏi vector ngắt

ORG 000BH ; Vector ngắt của T0

LJMP T0ISR

ORG 001BH ; Vector ngắt của T1

LJMP T1ISR

ORG 0030H

MAIN: MOV TMOD, #12H ; Timer 1: mode 1

; Timer 0: mode 2;

MOV TH0, #-71 ; Sử dụng T0, f= 7kHz

SETB TR0 ; Timer 0 hoạt động

SETB TF1 ; Buộc ngắt do Timer 1

MOV IE, #8AH ; Cho phép ngắt do T0 và T1

SJMP $

T0ISR: CPL P1.7

RETI

T1ISR: CLR TR1

MOV TH1, #HIGH(-1000)

MOV TL1, #LOW(-1000)

SETB TR1

CPL P1.6

RETI

END

Chương 5: Hoạt động ngắt (INTERRUPT)

5.5. Các ứng dụng của lập trình ngắt:

Bài toán 3: Viết chương trình sử dụng các ngắt để

tạo ra các sóng vuông 10kHz và 20 Hz trên các

chân P1.0 và P1.1.