1. Tổng quan:
Khi thiết kế các chương trình không sử dụng ngắt thì ta sẽ gặp phải những trường hợp CPU hoàn toàn tiờu phớ thời gian vào việc chờ ủợi cỏc tỏc nhõn cần thiết xảy ra (Vớ dụ: sự tràn của cờ TF0, TF1; việc thu xong một dữ liệu và cờ RI=1; việc phỏt xong một ký tự và cờ TI=1; v.v…) ủể sau ủú mới tiếp tục thực hiện công việc.
⇒ ðiều này khụng thớch hợp cho cỏc ứng dụng ủiều khiển ủũi hỏi phải tỏc ủộng qua lại với nhiều thiết bị cùng lúc.
ðể giải quyết vấn ủề trờn ta cần thiết kế cỏc chương trỡnh cú sử dụng ủến ngắt.
⇒ Vỡ nú giỳp cho CPU khụng tốn thời gian ủể chờ ủợi tỏc nhõn mà chỉ khi nào tỏc nhõn xảy ủến thỡ CPU mới thực hiện việc xử lý tỏc nhõn ủú, khoảng thời gian tỏc nhõn khụng xảy ra thỡ CPU sẽ làm việc khác.
Chương 6: Hoạt ủộng ngắt (Interrupt). Trường ðH Cụng nghiệp Tp.HCM.
Tổ chức bộ nhớ khi sử dụng ngắt:
Khuông mẫu cho một chương trình có sử dụng ngắt:
ORG 0000H ;ðiểm nhập của reset hệ thống.
LJMP MAIN ;Lệnh nhảy ủể vượt qua cỏc ISR.
……… ;ðiểm nhập của các 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.
………
………
END
2. Thiết kế các chương trình ISR kích thước nhỏ:
ðiều kiện: Khi ISR có kích thước không quá 8 byte (kể cả lệnh RETI).
⇒ ISR phải ủược viết trong phạm vi ủiểm nhập tương ứng của nú trong bộ nhớ chương trỡnh (xem phần tổ chức bộ nhớ khi sử dụng ngắt).
Lưu ý:
• Nếu chỉ cú một nguyờn nhõn ngắt ủược sử dụng thỡ ISR của nú cú thể ủược viết tràn sang ủiểm nhập của cỏc ISR khỏc (nghĩa là ISR cú kớch thước lớn hơn 8 byte, nhưng phải nhỏ hơn 46 byte). Vỡ khi ủú vựng nhớ của cỏc ISR khỏc khụng ủược dựng ủến nờn ta cú thể tận dụng ủể sử dụng cho ISR này.
• Nếu cú nhiều nguyờn nhõn ngắt ủược sử dụng thỡ ta phải cẩn thận ủể ủảm bảo cho cỏc ISR ủược bắt ủầu ủỳng vị trớ mà khụng tràn sang ISR kế (nghĩa là ISR cú kớch thước khụng quỏ 8 byte).
Chương 6: Hoạt ủộng ngắt (Interrupt). Trường ðH Cụng nghiệp Tp.HCM.
Khuông mẫu chương trình: (Ví dụ: dùng ngắt Timer0 và ngắt ngoài 1) ORG 0000H ;ðiểm nhập của reset hệ thống.
LJMP MAIN ;Lệnh nhảy ủể vượt qua cỏc ISR.
ORG 000BH ;ðiểm nhập cho ISR của Timer 0.
……… ;ISR của Timer 0.
………
RETI ;Kết thúc ISR của Timer 0.
ORG 0013H ;ðiểm nhập cho ISR của ngắt ngoài 1.
……… ;ISR của ngắt ngoài 1.
………
RETI ;Kết thúc ISR của ngắt ngoài 1.
ORG 0030H ;ðiểm nhập của chương trình chính.
MAIN: ……… ;Chương trỡnh chớnh bắt ủầu.
………
………
END
3. Thiết kế các chương trình ISR kích thước lớn:
ðiều kiện: Khi ISR có kích thước vượt quá 8 byte.
⇒ ISR khụng thể viết vào ủiểm nhập tương ứng của nú trong bộ nhớ chương trỡnh (vỡ kớch thước ủiểm nhập chỉ cú 8 byte) → ta phải chuyển ISR này ủến một nơi khỏc trong bộ nhớ chương trỡnh hoặc cú thể viết lấn qua ủiểm nhập của ISR kế tiếp (nếu ISR ủú khụng sử dụng).
Khuông mẫu chương trình: (Ví dụ: dùng ngắt Timer0 và ngắt ngoài 1) ORG 0000H ;ðiểm nhập của reset hệ thống.
LJMP MAIN ;Lệnh nhảy ủể vượt qua cỏc ISR.
ORG 000BH ;ðiểm nhập cho ISR của Timer 0.
LJMP T0ISR ;Lệnh nhảy ủến ISR của Timer 0.
ORG 0013H ;ðiểm nhập cho ISR của ngắt ngoài 1.
LJMP EX1ISR ;Lệnh nhảy ủến ISR của ngắt ngoài 1.
ORG 0030H ;ðiểm nhập của chương trình chính.
MAIN: ……… ;Chương trỡnh chớnh bắt ủầu.
………
………
SJMP $ ;Lệnh cách ly chương trình.
T0ISR: ……… ;ISR của ngắt Timer 0.
………
RETI ;Kết thúc ISR của Timer 0.
EX1ISR: ……… ;ISR của ngắt ngoài 1.
………
RETI ;Kết thúc ISR của ngắt ngoài 1.
END
Chương 6: Hoạt ủộng ngắt (Interrupt). Trường ðH Cụng nghiệp Tp.HCM.
• Nhận xét tổng quát:
o ðể ủơn giản, cỏc chương trỡnh của chỳng ta chỉ làm việc ở thời ủiểm bắt ủầu. Chương trỡnh chớnh khởi ủộng port nối tiếp, bộ ủịnh thời và cỏc thanh ghi ngắt sao cho thớch hợp với yờu cầu ủặt ra 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 cỏc ISR. Sau cỏc lệnh khởi ủộng, chương trỡnh chớnh chứa và thực hiện lệnh sau ủõy (lệnh nhảy tại chổ – khụng làm gỡ cả):
SJMP $
o Khi có một tín hiệu ngắt xuất hiện, chương trình chính tạm thời bị dừng lại trong khi ISR ủược thực thi. Lệnh RETI ở cuối của cỏc ISR sẽ trả ủiều khiển về cho chương trỡnh chớnh và chương trỡnh chớnh tiếp tục khụng làm gỡ cả (lệnh nhảy tại chổ ). ðiều này khụng cú gỡ là khụng tự nhiờn ủối với chỳng ta. Trong nhiều ứng dụng hướng ủiều khiển, phần lớn cụng việc ủược thực hiện trong trỡnh phục vụ ngắt. Cỏc vớ dụ minh họa dưới ủõy sẽ cho ta thấy ủiều này.