Hoạt động của bộ ngắt (INTERRUPT)

Một phần của tài liệu NGHIÊN CỨU THIẾT KẾ LẮP RÁP MẠCH BÁO TRỘM VÀ ĐIỀU KHIỂN THIẾT BỊ TỪ XA QUA MẠNG ĐIỆN THOẠI – MẠNG INTERNET VÀ GIAO TIẾP MÁY VI TÍNH (Trang 36 - 40)

a/. Giới thiệu:

Một interrupt (ngắt) là sự xảy ra một điều kiện – một sự kiện, mà nú gõy treo tạm thời chương trỡnh trong điều kiện cú được phục vụ bởi một chương trỡnh khỏc.

Cỏc interrupt đúng vai trũ quan trọng trong việc thiết kế và cài đặt cỏc ứng dụng vi điều khiển. Chỳng cho phộp hệ thống bất đồng bộ với một sự kiện và giải quyết một sự kiện trong khi đú một chương trỡnh khỏc đang thực thi.

Một hệ thống được điều khiển bằng interrupt cho ta ảo giỏc là làm nhiều việc đồng thời. Dĩ nhiờn là CPU đồng thời khụng thể thực thi hơn một lệnh. Nhưng nú cú thể tạm treo việc thực thi một chương trỡnh để thực thi một chương trỡnh khỏc, rồi quay về chương trỡnh thứ nhất. Theo cỏch này, interrupt giống như một chương trỡnh con, nhưng cú một khỏc biệt trong hệ thống được điều khiển là sự ngắt quóng khụng xảy ra như kết quả của một lệnh, mà đỏp ứng một sự kiện xảy ra bất đồng bộ với chương trỡnh chớnh. Người ta khụng biết lỳc nào và ở đõu chương trỡnh chớnh bị ngắt quóng.

Chương trỡnh giải quyết ngắt gọi là chương trỡnh phục vụ ngắt (ISR: Interrupt

Service Routine) hoặc bộ xử lý ngắt. ISR thực thi đỏp ứng ngắt và thụng thường thực hiện tỏc vụ nhập hay xuất với một thiết bị. Khi ngắt xảy ra, chương trỡnh chớnh tạm thời bị treo và rẽ nhỏnh đến ISR: ISR thi hành và kết thỳc bằng lệnh trở về ngắt. Chương trỡnh tiếp tục thực thi tại chỗ mà nú tạm dừng. Thường người ta xem chương trỡnh chớnh thực thi ở mức nền (cơ sở) và cỏc ISR thực thi ngắt (Interrupt Level). Người ta dựng thuật ngữ Foreground (phớa trước) (Base – Level) chỉ mức nền và Background (phớa sau) (Interrupt – level) chỉ mức ngắt.

b/. Tổ chức ngắt của 89C51:

port nối tiếp. Tất cả cỏc ngắt theo mặc nhiờn đều bị cấm sau khi Reset hệ thống và được cho phộp bằng phần mềm.

Khi cú 2 hoặc nhiều ngắt đồng thời, 1 ngắt xảy ra trong khi 1 ngắt khỏc đang được phục vụ, cú cả 2 sự tuần tự hỏi vũng và sơ đồ ưu tiờn 2 mức dựng để xỏc định thực hiện ngắt. Việc hỏi vũng tuần tự thỡ cố định nhưng ưu tiờn ngắt thỡ cú thể lập trỡnh được.

Cho phộp và cấm cỏc ngắt: (Enabling and Disnabling Interrupt)

Mỗi nguồn Interrupt được cho phộp hoặc cấm từng ngắt qua một thanh ghi chức năng đặc biệt cú địa chỉ bit IE (Interrupt Enable) ở địa chỉ A8H. Sau đõy là bảng túm tắt thanh ghi IE:

Bảng 3.4: Bảng túm tắt thanh ghi IE

Cũng như xỏc định bit cho phộp riờng biệt cho mỗi nguồn ngắt, cú một bit cho phộp/cấm toàn bộ được xúa để cấm hoàn toàn cỏc ngắt được xột (đặt lờn 1) để cho phộp tất cả cỏc ngắt.

Hai bit phải được đặt lờn một để cho phộp bất kỳ ngắt nào: bit cho phộp riờng và bit cho phộp toàn bộ. Vớ dụ cỏc ngắt từ timer được cho phộp như sau:

SETB ET1 ; Cho phộp ngắt từ timer 1. SETB EA ; Đặt bit cho phộp toàn bộ. Hoặc: MOV IE,#10001000B

Mặc dự hai cỏch này cú cựng một hiệu quả sau khi reset hệ thống nhưng hiệu quả sẽ khỏc nếu IE được ghi giữa chương trỡnh. Cỏch thứ nhất khụng ảnh hưởng tới 5 bit trong thanh ghi IE, trỏi lại cỏch thứ hai sẽ xúa cỏc bit khỏc. Nờn khởi trị IE theo cỏch thứ hai ở đầu chương trỡnh (nghĩa là sau khi mở mỏy hoặc reset hệ thống), nhưng cho phộp và cấm cỏc ngắt ngay trong chương trỡnh nờn dựng cỏch thứ nhất để trỏnh ảnh hưởng đến cỏc bit khỏc trong thanh ghi IE.

Ngắt port nối tiếp cú từ logic OR của ngắt thu (RI) và phỏt (TI). Cỏc bit cờ tạo cỏc ngắt được túm tắt trong bảng sau:

Bảng 3.5: Bảng cỏc Bit cờ tạo ngắt

c/. Xử lý ngắt (Processing Interrupt):

Khi ngắt xảy ra và CPU chấp thuận, chương trỡnh chớnh ngắt quóng những hoạt động sau đõy xảy ra:

+ Lệnh hiện hành hoàn tất việc thực thi. + Cất PC vào ngăn xếp.

+ Trạng thỏi ngắt hiện hành được cất vào bờn trong. + Cỏc ngắt bị chặn ở mức ngắt.

+ Nạp vào PC địa chỉ vector của ISR. + ISR thực thi.

ISR thực thi và đỏp ứng ngắt. ISR hoàn tất bằng lệnh RETI (quay về từ ngắt). Điều này làm lấy lại giỏ trị cũ PC từ ngăn xếp và lấp lại trạng thỏi ngắt cũ. Thực thi chương trỡnh chớnh ở chỗ mà nú bị dừng.

Cỏc vector ngắt (Interrupt Vectors):

Khi chấp nhận ngắt, giỏ trị được nạp vào PC được gọi là vector ngắt. Nú là địa chỉ bắt đầu của ISR cho nguồn tạo ngắt. Cỏc vector ngắt được cho bảng sau:

Vector Reset hệ thống (RST ở địa chỉ 0000H) được để trong bảng này vỡ theo nghĩa này nú giống Interrupt: nú ngắt chương trỡnh chớnh và nạp giỏ trị mới cho PC.

Khi “chỉ đến một ngắt”, cờ gõy ra ngắt tự động bị xúa bởi phần cứng. Cỏc ngoại lệ là RI và TI với cỏc ngắt port nối tiếp và TF2, EXF2 với cỏc Interrupt Timer. Vỡ cú hai nguồn cú thể cho mỗi ngắt này, khụng thực tế để CPU xúa cờ ngắt. Cỏc bit này phải được kiểm tra trong ISR để xỏc định nguồn ngắt và cờ tạo ngắt sẽ được xúa bằng phần mềm. Thụng thường một rẽ nhỏnh xảy ra với một phản ứng thớch hợp, phụ thuộc vào nguồn ngắt.

Vỡ cỏc vector ngắt ở phần đầu của bộ nhớ chương trỡnh, nờn lệnh thứ nhất của chương trỡnh chớnh thường là lệnh nhảy qua chương trỡnh chớnh này. Vớ dụ như lệnh LJMP 0030H.

Chương trỡnh phục vụ ngắt cú kớch thước nhỏ: (adsbygoogle = window.adsbygoogle || []).push({});

Cỏc chương trỡnh phục vụ ngắt phải bắt đầu ở gần phần đầu của bộ nhớ chương trỡnh ở cỏc địa chỉ trong bảng cỏc vectơr ngắt. Mặt dự cú 8 byte ở cỏc điểm vào ngắt, thường đủ bộ nhớ để thực hiện cỏc hoạt động mong muốn và quay về chương trỡnh chớnh từ IRS.

Nếu chỉ cú một nguồn ngắt được sử dụng, vớ dụ timer 0, thỡ cú thể sử dụng khung sau:

ORG 0000H ; Reset LJMP MAIN

ORG 000BH ; điểm vào time 0

TOIRS: ; ISR cho time 0 bắt đầu. RETI ; quay về chương trỡnh chớnh. MAIN: ; Chương trỡnh chớnh.

Nếu sử dụng nhiều ngắt phải đảm bảo là chỳng phải bắt đầu từ vị trớ đỳng và khụng chạy qua 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 ngay sau lệnh RETI.

Cỏc chương trỡnh phục vụ ngắt cú kớch thước lớn:

Nếu ISR dài hơn 8 byte, cú thể cần chuyển nú tới một nơi nào đú trong bộ nhớ chương trỡnh hoặc cú thể để nú đi qua điểm vào của ngắt kế. Tiờu biểu là ISR bắt đầu với lệnh nhảy đến vựng nhớ khỏc ở đú cú thể mở rộng chiều dài cỏc ISR. Vớ dụ lỳc này chỉ xột timer 0, cú thể sử dụng khung sau:

ORG 0000H ; Reset LJMP MAIN

ORG 000BH ; cỏc vector ngắt tiếp theo. TOIRS: ; ISR cho time 0.

RETI ; quay về chương trỡnh chớnh.

Để đơn giản chương trỡnh chỉ làm việc một lỳc ban đầu. Chương trỡnh khởi động timer, port nối tiếp và cỏc thanh ghi ngắt cho thớch hợp và rồi khụng làm gỡ cả. Cụng việc được hoàn toàn làm trong ISR. Sau cỏc khởi động, chương trỡnh chứa cỏc lệnh sau:

HERE: SJMP HERE

Hay dạng viết gắn gọn: SJMP $

Khi ngắt xảy ra, chương trỡnh chớnh bị ngắt quóng tạm thời trong khi ISR thực thi. Lệnh RETI ở cuối ISR trả điều khiển về chương trỡnh chớnh và nú tiếp tục khụng làm gỡ cả. Trong nhiều ứng dụng điều khiển, nhiều cụng việc thật ra được thực hiện hoàn toàn trong ISR.

Vỡ sử dụng ngắt, nờn lệnh SJMP $ (HERE: SJMP HERE) cú thể được thay thế bằng cỏc lệnh thực hiện cụng việc khỏc trong ứng dụng.

Một phần của tài liệu NGHIÊN CỨU THIẾT KẾ LẮP RÁP MẠCH BÁO TRỘM VÀ ĐIỀU KHIỂN THIẾT BỊ TỪ XA QUA MẠNG ĐIỆN THOẠI – MẠNG INTERNET VÀ GIAO TIẾP MÁY VI TÍNH (Trang 36 - 40)