Thiết kế chương trỡnh sử dụng ngắt

Một phần của tài liệu Tìm hiểu và khai thác sử dụng vi điều khiển AT89C52 (KL02434) (Trang 27 - 31)

Khuụn mẫu đề nghị cho một chương trỡnh được thực thi độc lập cú ngắt như sau:

ORG 0000H ; Điểm nhập sau khi reset LJMP MAIN

. ; Cỏc điểm nhập của ISR

.

.

ORG 0030H ; Điểm nhập của chương trỡnh chớnh MAIN: . ; Chương trỡnh chớnh bắt đầu

. .

.

Lệnh đầu tiờn nhảy đến địa chỉ 0030H ngay trờn cỏc vectơ ngắt nơi cỏc ISR bắt đầu, như được cho ở bảng trờn.

Với cỏc trỡnh phục vụ ngắt kớch thước nhỏ thỡ cỏc trỡnh phục vụ ngắt phải được bắt đầu ở gần đỏy của bộ nhớ chương trỡ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ự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 byte. Nếu cú một nguyờn nhõn ngắt được dựng, thớ dụ do bộ định thời 0, thỡ khuụn mẫu dưới đõy cú thể được sử dụng:

ORG 000BH ; Reset

LJMP MAIN

ORG 000BH ; Điểm nhập của ngắt do bộ định thời 0

T0ISR: . ; Bắt đầu ISR cho bộ định thời 0 . . RETI ; Trở về chương trỡnh chớnh MAIN: . ; Chương trỡnh chớnh . .

Nếu cú nhiều ngắt được sử dụng, ta phải cẩn thận để đảm bảo cỏc ISR được 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 thớ dụ trờn, chương trỡnh chớnh cú thể bắt đầu ngay sau lệnh RETI.

Với cỏc trỡnh phục vụ ngắt kớch thước lớn dài hơn 8 byte, 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ể lấn qua điểm nhập của ISR kế. Điển hỡnh là 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. Nếu chỉ khảo sỏt bộ định thời 0, khuụn mẫu sau đõy cú thể được sử dụng:

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

LJMP MAIN

ORG 000BH ; Điểm nhập của bộ định thời 0

LJMP T0ISR

ORG 0030H ; Phớa trờn cỏc vectơ ngắt

MAIN: .

.

T0ISR: . ; ISR của bộ định thời 0

. .

RETI ; Quay trở về chương trỡnh chớnh

Để đơn giản, cỏc chương trỡnh của chỳng ta sẽ chỉ làm một việc ở thời điểm bắt đầu. Chương trỡnh chớnh khởi động bộ định thời, port nối tiếp và cỏc thanh ghi ngắt sao cho thớch hợp và rồi khụng làm gỡ cả. Cụng việc hoàn toàn được thực hiện bờn trong ISR. Khi cú một ngắt xuất hiện, chương trỡnh chớnh tạm thời bị ngắt trong khi ISR được thực thi. Lệnh RETI ở cuối ISR trả điều khiển về chương trỡnh chớnh.

Chương 2:khai thỏc Sử dụng chip vi điều khiển AT89C52

Một phần của tài liệu Tìm hiểu và khai thác sử dụng vi điều khiển AT89C52 (KL02434) (Trang 27 - 31)

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

(43 trang)