Tải bản đầy đủ (.pdf) (54 trang)

ngắt trong vi điều khiển

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (552.03 KB, 54 trang )

GV. LÊ TIẾN DŨNG
Bộ môn Tự ñộng hóa – Khoa ðiện
Trường ðại học Bách khoa – ðại học ðà Nẵng
Email:

1


CHƯƠNG 6

HOẠT ðỘNG NGẮT

2
GV. Lê Tiến Dũng. Automation Department, Faculty of Electrical Engineering – DUT / 2007


CHƯƠNG 6:
HOẠT ðỘNG NGẮT
Một bộ vi ñiều khiển có thể phục vụ một số thiết bị. Có
2 phương pháp phục vụ thiết bị, ñó là sử dụng ngắt và
phương pháp thăm dò (polling).
Ở phương pháp ngắt, mỗi khi có một thiết bị cần phục
vụ thì thiết bị sẽ báo cho bộ vi ñiều khiển biết bằng cách
gửi một tín hiệu ngắt. Khi nhận ñược tín hiệu này, bộ vi
ñiều khiển dừng mọi công việc ñang thực hiện ñể
chuyển sang phục vụ thiết bị. Chương trình ñi cùng với
ngắt gọi là trình phục vụ ngắt (Interrupt Service
Routine).
3
GV. Lê Tiến Dũng. Automation Department, Faculty of Electrical Engineering – DUT / 2007



CHƯƠNG 6:
HOẠT ðỘNG NGẮT

ðối với phương pháp thăm dò, bộ vi ñiều
khiển liên tục kiểm tra tình trạng của thiết
bị và khi ñiều kiện ñược ñáp ứng thì tiến
hành phục vụ thiết bị. Sau ñó bộ vi ñiều
khiển chuyển qua kiểm tra trạng thái của
thiết bị tiếp theo cho ñến khi tất cả ñều ñược
phục vụ.
4
GV. Lê Tiến Dũng. Automation Department, Faculty of Electrical Engineering – DUT / 2007


CHƯƠNG 6:
HOẠT ðỘNG NGẮT
ðiểm mạnh của phương pháp ngắt là bộ vi ñiều khiển
có thể phục vụ ñược nhiều thiết bị, nhưng dĩ nhiên
không cùng một thời ñiểm. Mỗi thiết bị có thể ñược bộ vi
ñiều khiển phục vụ dựa theo mức ưu tiên ñược gán. Ở
phương pháp thăm dò thì không thể gán mức ưu tiên cho
thiết bị ñược vì bộ vi ñiều khiển tiến hành kiểm tra các
thiết bị theo phương pháp hỏi vòng. Ngoài ra, phương
pháp ngắt cho phép bộ vi ñiều khiển che hoặc bỏ qua một
yêu cầu phục vụ của thiết bị, ñiều mà phương pháp thăm
dò không thực hiện ñược.
5
GV. Lê Tiến Dũng. Automation Department, Faculty of Electrical Engineering – DUT / 2007



CHƯƠNG 6:
HOẠT ðỘNG NGẮT

Ngắt (interrupt) là sự xảy ra của một ñiều kiện
- một sự kiện - làm cho chương trình chính bị tạm
ngưng trong khi ñiều kiện ñược phục vụ bởi một
chương trình khác.
Trong một hệ thống ñược ñiều khiển bởi ngắt,
việc ngắt nhằm ñáp ứng một sự kiện mà sự kiện
này xuất hiện không ñồng bộ với chương trình
chính ñang ñược thực thi và chương trình chính
(hay nói cách khác là CPU) không biết trước là
sẽ bị ngắt khi nào.
6
GV. Lê Tiến Dũng. Automation Department, Faculty of Electrical Engineering – DUT / 2007


CHƯƠNG 6:
HOẠT ðỘNG NGẮT

Chương trình xử lý một ngắt ñược gọi là Trình
phục vụ ngắt (ISR) hay Quản lý ngắt (Interrupt
Handler). Khi một ngắt xuất hiện, việc thực thi
chương trình chính bị tạm dừng và CPU thực
hiện việc rẽ nhánh ñến trình phục vụ ngắt ISR.
CPU thực thi ISR và kết thúc việc thực thi này khi
gặp lệnh RETI; chương trình chính ñược tiếp tục tại
nơi bị tạm dừng.
7

GV. Lê Tiến Dũng. Automation Department, Faculty of Electrical Engineering – DUT / 2007


CHƯƠNG 6:
HOẠT ðỘNG NGẮT

8
GV. Lê Tiến Dũng. Automation Department, Faculty of Electrical Engineering – DUT / 2007


CHƯƠNG 6:
HOẠT ðỘNG NGẮT
TRÌNH TỰ THỰC HIỆN MỘT NGẮT

1. Kết thúc lệnh ñang thực hiện và lưu ñịa chỉ của lệnh kế tiếp (PC) vào ngăn
xếp.
2. Lưu tình trạng hiện tại của tất cả các ngắt vào bên trong (không lưu vào ngăn
xếp).
3. Nó nhảy ñến một vị trí cố ñịnh trong bộ nhớ ñược gọi là bảng véc tơ ngắt nơi
lưu giữ ñịa chỉ của một trình phục vụ ngắt.
4. Bộ vi ñiều khiển nhận ñịa chỉ ISR từ bảng véc tơ ngắt và nhảy tới ñịa chỉ ñó.
Nó bắt ñầu thực hiện trình phục vụ ngắt cho ñến lệnh cuối cùng của ISR là
RETI (trở về từ ngắt).
5. Khi gặp lệnh RETI, bộ vi ñiều khiển quay trở về nơi nó ñã bị ngắt. Trước hết
nó nhận ñịa chỉ của bộ ñếm chương trình PC từ ngăn xếp bằng cách nạp hai byte
trên ñỉnh của ngăn xếp vào PC. Sau ñó bắt ñầu thực hiện các lệnh từ ñịa chỉ ñó.
9
GV. Lê Tiến Dũng. Automation Department, Faculty of Electrical Engineering – DUT / 2007



CHƯƠNG 6:
HOẠT ðỘNG NGẮT

Có 5 nguyên nhân tạo ra ngắt (ñối với chip
8051): 2 ngắt do bên ngoài, 2 ngắt do bộ ñịnh thời
và 1 ngắt do port nối tiếp.
Ngoài ra reset cũng ñược xem như là một ngắt.
Khi ta thiết lập trạng thái ban ñầu của hệ thống
(reset), tất cả các ngắt ñều bị vô hiệu hóa (cấm) và
sau ñó chúng ñược cho phép riêng rẽ bằng phần
mềm.
10
GV. Lê Tiến Dũng. Automation Department, Faculty of Electrical Engineering – DUT / 2007


CHƯƠNG 6:
HOẠT ðỘNG NGẮT
Trình phục vụ ngắt của mỗi ngắt có một vị trí cố ñịnh
trong bộ nhớ ñể lưu trữ ñịa chỉ ISR. Tập hợp các ô nhớ lưu
trữ ñịa chỉ của tất cả các ISR gọi là bảng vectơ ngắt.

11
GV. Lê Tiến Dũng. Automation Department, Faculty of Electrical Engineering – DUT / 2007


CHƯƠNG 6:
HOẠT ðỘNG NGẮT

1. RESET: Khi chân Reset ñược kích
hoạt thì 8051 nhảy về ñịa chỉ 0000.

2. Hai ngắt dành cho bộ ñịnh thời Timer
0 và Timer 1. ðịa chỉ ở bảng vector ngắt
của hai ngắt này tương ứng với Timer 0 và
Timer 1 là 000B và 001B.
*Số lượng byte hạn chế dành riêng cho từng ngắt: 8 byte.
12
GV. Lê Tiến Dũng. Automation Department, Faculty of Electrical Engineering – DUT / 2007


CHƯƠNG 6:
HOẠT ðỘNG NGẮT

3. Hai ngắt phần cứng dành cho các thiết bị bên
ngoài nối tới chân 12 (P3.2) và 13 (P3.3) của cổng
P3 là INT0 và INT1 tương ứng. Các ngắt ngoài cũng
còn ñược gọi là EX1 và EX2. Vị trí nhớ trong bảng
vector ngắt của hai ngắt INT0 và INT1 này là
0003H và 0013H.
4. Truyền thông nối tiếp có một ngắt cho cả thu
lẫn phát. ðịa chỉ của ngắt này trong bảng vector
ngắt là 0023H.
13
GV. Lê Tiến Dũng. Automation Department, Faculty of Electrical Engineering – DUT / 2007


CHƯƠNG 6:
HOẠT ðỘNG NGẮT

Khi xảy ra 2 hay nhiều ngắt ñồng thời
hoặc xảy ra một ngắt trong khi một ngắt

khác ñang ñược phục vụ, ta có 2 sơ ñồ xử
lý các ngắt: Sơ ñồ chuỗi vòng và sơ ñồ hai
mức ưu tiên.
Sơ ñồ chuỗi vòng là sơ ñồ cố ñịnh còn
sơ ñồ ưu tiên ngắt ñược lập trình bởi người
sử dụng.
14
GV. Lê Tiến Dũng. Automation Department, Faculty of Electrical Engineering – DUT / 2007


CHƯƠNG 6:
HOẠT ðỘNG NGẮT
CHO PHÉP MỘT NGẮT
Khi Reset thì tất cả mọi ngắt ñều bị cấm (bị che) có
nghĩa là không có ngắt nào sẽ ñược bộ vi ñiều khiển ñáp
ứng nếu chúng ñược kích hoạt.
Các ngắt phải ñược kích hoạt bằng phần mềm ñể bộ vi
ñiều khiển ñáp ứng chúng. Có một thanh ghi ñược gọi là
cho phép ngắt IE (Interrupt Enable) chịu trách nhiệm về
việc cho phép (không che) và cấm (che) các ngắt. IE là
thanh ghi có thể ñịnh ñịa chỉ theo bít.
15
GV. Lê Tiến Dũng. Automation Department, Faculty of Electrical Engineering – DUT / 2007


CHƯƠNG 6:
HOẠT ðỘNG NGẮT
Thanh ghi cho phép ngắt IE
D0


D7

EA

EA
IE.7
-IE.6
ET2 IE.5
(8051).
ES
IE.4
ET1 IE.3
EX1 IE.2
ET0 IE.1
EX0 IE.0

--

ET2

ES

ET1

EX1

ET0

EX0


Cho phép ngắt toàn cục.
Dự phòng cho tương lai.
Cho phép hoặc cấm ngắt tràn hoặc thu của Timer2
Cho phép hoặc cấm ngắt cổng nối tiếp.
Cho phép hoặc cấm ngắt tràn của Timer1.
Cho phép hoặc cấm ngắt ngoài 1.
Cho phép hoặc cấm ngắt tràn của Timer0.
Cho phép hoặc cấm ngắt ngoài 0.
16

GV. Lê Tiến Dũng. Automation Department, Faculty of Electrical Engineering – DUT / 2007


CHƯƠNG 6:
HOẠT ðỘNG NGẮT
CHO PHÉP MỘT NGẮT
Bít D7 của thanh ghi IE là EA phải ñược bật lên cao
ñể cho phép các bít còn lại của thanh ghi có hiệu lực.
Nếu EA = 1 thì tất cả mọi ngắt ñều ñược phép và sẽ
ñược ñáp ứng nếu các bít tương ứng của chúng trong
IE có mức cao. Nếu EA = 0 thì không có ngắt nào sẽ
ñược ñáp ứng cho dù bít tương ứng của nó trong IE có
giá trị cao.
17
GV. Lê Tiến Dũng. Automation Department, Faculty of Electrical Engineering – DUT / 2007


CHƯƠNG 6:
HOẠT ðỘNG NGẮT
Khi một ngắt ñược chấp nhận, giá trị vector ngắt ñược

nạp cho bộ ñếm chương trình PC. Vector ngắt là ñịa chỉ
bắt ñầu của trình phục vụ ngắt của nguyên nhân ngắt
tương ứng.
Khi một chương trình phục vụ ngắt ñược trỏ tới, cờ gây
ra ngắt sẽ tự ñộng bị xóa về 0 bởi phần cứng. Các ngoại
lệ bao gồm các cờ RI và TI ñối với các ngắt do port nối
tiếp; TF2 và EXF2 ñối với các cờ ngắt do bộ ñịnh thời 2.
Các nguyên nhân ngắt thuộc 2 ngoại lệ vừa nêu trên do có
2 khả năng tạo ra ngắt nên trong thực tế CPU không xóa
cờ ngắt.
18
GV. Lê Tiến Dũng. Automation Department, Faculty of Electrical Engineering – DUT / 2007


CHƯƠNG 6:
HOẠT ðỘNG NGẮT

19
GV. Lê Tiến Dũng. Automation Department, Faculty of Electrical Engineering – DUT / 2007


CHƯƠNG 6:
HOẠT ðỘNG NGẮT

20
GV. Lê Tiến Dũng. Automation Department, Faculty of Electrical Engineering – DUT / 2007


CHƯƠNG 6:
HOẠT ðỘNG NGẮT

Khuôn mẫu ñề nghị cho một chương trình thực thi ñộc
lập có sử dụng ngắt.
ORG 0000H

; ðiểm nhập sau khi reset

LJMP MAIN

; Nhảy qua vùng ngắt

.
.
.
ORG 0030H
MAIN:
.
.
.

; Các ñiểm nhập của ISR (Interrupt Service Routine)
; ðiểm nhập chương trình chính
; Chương trình chính bắt ñầu

21
GV. Lê Tiến Dũng. Automation Department, Faculty of Electrical Engineering – DUT / 2007


CHƯƠNG 6:
HOẠT ðỘNG NGẮT


Các trình phục vụ ngắt phải ñược bắt ñầu ở gần
ñáy bộ nhớ. Mặc dù chỉ có 8 byte giữa các ñiểm
nhập của các trình phục vụ ngắt, dung lượng này
thường ñủ ñể thực hiện các công việc ñược yêu
cầu và quay trở về chương trình chính từ một
trình phục vụ ngắt. ðiều này có nghĩa là trình
phục vụ ngắt cho các ngắt tương ứng thường
không dài quá 8 bytes.
22
GV. Lê Tiến Dũng. Automation Department, Faculty of Electrical Engineering – DUT / 2007


CHƯƠNG 6:
HOẠT ðỘNG NGẮT
Nếu chỉ có một nguyên nhân ngắt ñược dùng, thí dụ ngắt do
bộ ñịnh thời 0, khuôn mẫu chương trình dưới ñây ñược ñề nghị
sử dụng.
ORG 0000H

; reset

LJMP MAIN

; Nhảy qua vùng ngắt

ORG 000BH
T0ISR:
.
RETI
MAIN:

.
.
.

; ðiểm nhập của ngắt do bộ ñịnh thời 0
; Bắt ñầu ISR cho bộ ñịnh thời 0
; Trở về chương trình chính
; Chương trình chính bắt ñầu

23
GV. Lê Tiến Dũng. Automation Department, Faculty of Electrical Engineering – DUT / 2007


CHƯƠNG 6:
HOẠT ðỘNG NGẮT

Nếu có nhiều ngắt ñược
sử dụng, ta phải cẩn thận
ñể ñảm bảo các ISR bắt
ñầu ñúng vị trí và không
tràn sang ISR kế. Vì chỉ
có một ngắt ñược sử dụng
trong ví dụ trên, chương
trình chính có thể bắt ñầu
ngay sau lệnh RETI.
24
GV. Lê Tiến Dũng. Automation Department, Faculty of Electrical Engineering – DUT / 2007


CHƯƠNG 6:

HOẠT ðỘNG NGẮT

Nếu một trình phục vụ ngắt dài hơn 8 byte
ñược cần ñến, ta phải di chuyển chương trình
này ñến một nơi khác trong bộ nhớ chương
trình hoặc ta có thể cho lấn qua ñiểm nhập của
ISR kế.
Phương án ñiển hình là cho ISR bắt ñầu với
một lệnh nhảy ñến một vùng khác của bộ nhớ
chương trình, ở ñó ISR ñược trải rộng nếu cần.
25
GV. Lê Tiến Dũng. Automation Department, Faculty of Electrical Engineering – DUT / 2007


×