Xử lý 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 26 - 27)

Khi cú một ngắt xuất hiện và được CPU chấp nhận, chương trỡnh chớnh bị ngắt. Cỏc thao tỏc sau đõy xảy ra:

Hoàn tất việc thực thi lệnh 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

Bộ đếm chương trỡnh PC được nạp địa chỉ vectơ của trỡnh phục vụ ngắt ISR

ISR được thực thi

ISR được thực thi để đỏp ứng cụng việc của ngắt. Việc thực thi ISR kết thỳc khi gặp lệnh RETI (trở về từ một trỡnh phục vụ ngắt). Lệnh này lấy lại giỏ trị cũ của bộ đếm chương trỡnh PC từ stack và phục hồi trạng thỏi của ngắt cũ. Việc thực thi chương trỡnh chớnh được tiếp tục ở nơi bị tạm ngưng.

Khi một ngắt được chấp nhận, giỏ trị được nạp cho bộ đếm chương trỡnh PC gọi là vectơ ngắt. Vectơ 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. Cỏc vectơ ngắt được cho ở bảng sau:

Ngắt do Cờ Địa chỉ vectơ Reset hệ thống RST 0000H Ngắt ngoài 0 IE0 0003H Bộ định thời 0 TF0 000BH Ngắt ngoài 1 IE1 0013H Bộ định thời 1 TF1 001BH

Port nối tiếp RI hoặc TI 0023H

Vectơ reset hệ thống (RST ở địa chỉ 0000H) được chứa trong bảng này vỡ vậy cũng được xem như là một ngắt: chương trỡnh chớnh bị ngắt và bộ đếm chương trỡnh PC nạp giỏ trị mới.

Khi một trỡnh phục vụ ngắt được trỏ tới, cờ gõy ra ngắt sẽ tự động bị xoỏ 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 ngắt do bộ định thời 2. Cỏc nguyờn nhõn ngắt thuộc hai ngoại lệ vừa nờu trờn do cú hai khả năng tạo ra ngắt nờn trong thực tế CPU khụng xoỏ cờ ngắt. Cỏc bit cờ này phải được kiểm tra trong ISR để xỏc định nguyờn nhõn ngắt và sau đú cờ gõy ra ngắt được xoỏ bỏ bởi phần mềm.

Thụng thường sẽ cú một rẽ nhỏnh chương trỡnh đến cụng việc tương ứng tuỳ thuộc vào nguyờn nhõn ngắt. Vỡ cỏc vectơ ngắt đặt ở đỏy của bộ nhớ chương trỡnh, lệnh đầu tiờn của chương trỡnh chớnh thường là một lệnh nhảy qua khỏi vựng nhớ chứa cỏc vectơ ngắt chẳng hạn như lệnh:

LJMP 0030H.

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 26 - 27)